diff --git a/notemyprogress/README.md b/notemyprogress/README.md
index 3d67a9ceeb5bad6305cd7fadab6f457c57227925..7d02b14605b69513a5abc2b63c06244e8261cec5 100644
--- a/notemyprogress/README.md
+++ b/notemyprogress/README.md
@@ -1,4 +1,4 @@
-# Note My Progress #
+# Flip My Learning #
 
 TODO Describe the plugin shortly here.
 
diff --git a/notemyprogress/ajax.php b/notemyprogress/ajax.php
index a2fb52b92b808a54f6ad7d8ab3c516d0fcb4dd41..1420ef680bb5972cc2d74c506a21bf162638e539 100644
--- a/notemyprogress/ajax.php
+++ b/notemyprogress/ajax.php
@@ -27,7 +27,8 @@ define('AJAX_SCRIPT', true);
 require_once(dirname(__FILE__) . '/../../config.php');
 require_once(dirname(__FILE__) . '/locallib.php');
 
-global $USER, $COURSE, $DB; 
+
+global $USER, $COURSE, $DB;
 
 
 $courseid = required_param('courseid', PARAM_INT);
@@ -52,17 +53,34 @@ $currentUrl = optional_param('currentUrl', false, PARAM_TEXT);
 
 $scriptname = optional_param('scriptname', false, PARAM_ALPHA);
 
-$action = optional_param('action', false ,PARAM_ALPHA);
+$action = optional_param('action', false, PARAM_ALPHA);
 $weeks = optional_param('weeks', false, PARAM_RAW);
 $profile = optional_param('profile', false, PARAM_RAW);
+//debug
+//$profile = "student";
+
 $weekcode = optional_param('weekcode', false, PARAM_INT);
+$dayscommitted = optional_param('days', false, PARAM_TEXT);
+$goalscommitted =  optional_param('goals', false, PARAM_TEXT);
+$hourscommitted = optional_param('hours', false, PARAM_INT);
+$idmetareflexion = optional_param('metareflexionid', false, PARAM_INT);
+
+$lastweekid = optional_param('lastweekid',  false,  PARAM_RAW);
+$classroom_hours = optional_param('classroom_hours',  false,  PARAM_RAW);
+$hours_off = optional_param('hours_off',  false,  PARAM_RAW);
+
+$objectives_reached = optional_param('objectives_reached',  false,  PARAM_RAW);
+$previous_class = optional_param('previous_class',  false,  PARAM_RAW);
+$benefit = optional_param('benefit',  false,  PARAM_RAW);
+$feeling = optional_param('feeling',  false,  PARAM_RAW);
+
 $groupid = optional_param('groupid',  null,  PARAM_INT);
 
-$subject = optional_param('subject', false ,PARAM_TEXT);
-$recipients = optional_param('recipients', false ,PARAM_TEXT);
-$text = optional_param('text', false ,PARAM_TEXT);
-$moduleid = optional_param('moduleid', false ,PARAM_INT);
-$modulename = optional_param('modulename', false ,PARAM_TEXT);
+$subject = optional_param('subject', false, PARAM_TEXT);
+$recipients = optional_param('recipients', false, PARAM_TEXT);
+$text = optional_param('text', false, PARAM_TEXT);
+$moduleid = optional_param('moduleid', false, PARAM_INT);
+$modulename = optional_param('modulename', false, PARAM_TEXT);
 
 $newinstance = optional_param('newinstance', false, PARAM_BOOL);
 
@@ -93,34 +111,34 @@ if($action == 'saveconfigweek') {//Exemple: if the action passed is saveconfigwe
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $groupid);
-    if($courseid && $userid){
+    if ($courseid && $userid) {
         $func = "local_notemyprogress_change_group";
     }
-} elseif($action == 'worksessions') {
+} elseif ($action == 'worksessions') {
     array_push($params, $weekcode);
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $profile);
-    if($weekcode && $courseid && $userid && $profile){
+    if ($weekcode && $courseid && $userid && $profile) {
         $func = "local_notemyprogress_get_sessions";
     }
-} elseif($action == 'time') {
+} elseif ($action == 'time') {
     array_push($params, $weekcode);
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $profile);
-    if($weekcode && $courseid && $userid && $profile){
+    if ($weekcode && $courseid && $userid && $profile) {
         $func = "local_notemyprogress_get_inverted_time";
     }
-} elseif($action == 'assignments') {
+} elseif ($action == 'assignments') {
     array_push($params, $weekcode);
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $profile);
-    if($weekcode && $courseid && $userid && $profile){
+    if ($weekcode && $courseid && $userid && $profile) {
         $func = "local_notemyprogress_get_assignments_submissions";
     }
-} elseif($action == 'sendmail') {
+} elseif ($action == 'sendmail') {
     array_push($params, $COURSE);
     array_push($params, $USER);
     array_push($params, $subject);
@@ -128,53 +146,115 @@ if($action == 'saveconfigweek') {//Exemple: if the action passed is saveconfigwe
     array_push($params, $text);
     array_push($params, $moduleid);
     array_push($params, $modulename);
-    if($subject && $recipients && $text){
+    if ($subject && $recipients && $text) {
         $func = "local_notemyprogress_send_email";
     }
-} elseif($action == 'quiz') {
+} elseif ($action == 'quiz') {
     array_push($params, $weekcode);
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $profile);
-    if($weekcode && $courseid && $userid && $profile){
+    if ($weekcode && $courseid && $userid && $profile) {
         $func = "local_notemyprogress_get_quiz_attempts";
     }
-} elseif($action == 'dropoutdata') {
+} elseif ($action == 'dropoutdata') {
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $profile);
-    if($courseid && $userid && $profile){
+    if ($courseid && $userid && $profile) {
         $func = "local_notemyprogress_generate_dropout_data";
     }
-} elseif($action == 'studentsessions') {
+} elseif ($action == 'studentsessions') {
     array_push($params, $weekcode);
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $profile);
-    if($weekcode && $courseid && $userid && $profile){
+    if ($weekcode && $courseid && $userid && $profile) {
         $func = "local_notemyprogress_get_student_sessions";
     }
-} elseif($action =='downloadMOODLElogs') {
+} elseif ($action == 'savemetareflexion') {
+    array_push($params, $userid);
+    array_push($params, $weekcode);
+    array_push($params, $dayscommitted);
+    array_push($params, $goalscommitted);
+    array_push($params, $hourscommitted);
+    array_push($params, $courseid);
+    array_push($params, $url);
+    if (isset($userid , $weekcode , $dayscommitted , $goalscommitted , $hourscommitted , $courseid)) {
+        $func = "local_sr_save_metareflexion";
+    }
+} elseif ($action == 'updatemetareflexion') {
+    array_push($params, $userid);
+    array_push($params, $weekcode);
+    array_push($params, $idmetareflexion);
+    array_push($params, $dayscommitted);
+    array_push($params, $goalscommitted);
+    array_push($params, $hourscommitted);
+    array_push($params, $courseid);
+    array_push($params, $url);
+    if (isset($userid, $weekcode, $idmetareflexion, $dayscommitted, $goalscommitted, $hourscommitted, $courseid)) {
+        $func = "local_sr_update_metareflexion";
+    }
+} elseif ($action == 'savelastweek') {
+    //debug_text::print("savelastweek");
+    array_push($params, $courseid);
+    array_push($params, $userid);
+    array_push($params, $weekcode);
+    array_push($params, $classroom_hours);
+    array_push($params, $classroom_hours);
+    array_push($params, $objectives_reached);
+    array_push($params, $previous_class);
+    array_push($params, $benefit);
+    array_push($params, $feeling);
+    if (isset($courseid , $userid ,$weekcode,$classroom_hours,$classroom_hours, $objectives_reached , $previous_class , $benefit , $feeling)) {
+        $func = "local_sr_save_lastweek";
+    }
+} elseif ($action == 'updatelastweek') {
+    //debug_text::print("updatelastweek");
+    array_push($params, $courseid);
+    array_push($params, $userid);
+    array_push($params, $lastweekid);
+    array_push($params, $classroom_hours);
+    array_push($params, $hours_off);
+    array_push($params, $objectives_reached);
+    array_push($params, $previous_class);
+    array_push($params, $benefit);
+    array_push($params, $feeling);
+  
+    if (isset($courseid , $userid , $lastweekid , $objectives_reached  , $previous_class , $benefit , $feeling)) {
+      $func = "local_sr_update_lastweek";
+    }
+  } elseif ($action == 'metareflexionrepotgetweek') {
+    //debug_text::print("Enter metareflexionrepotgetweek");
+    array_push($params, $weekcode);
+    array_push($params, $courseid);
+    array_push($params, $userid);
+    array_push($params, $profile);
+
+    if ($weekcode && $courseid && $userid && $profile) {
+        $func = "local_sr_metareflexion_get_week";
+    }
+} elseif ($action == 'downloadMOODLElogs') {
     array_push($params, $beginDate);
     array_push($params, $lastDate);
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $currentUrl);
 
-    if($lastDate && $beginDate && $courseid && $userid && $currentUrl) {
+    if ($lastDate && $beginDate && $courseid && $userid && $currentUrl) {
         $func = "local_notemyprogress_downloadMoodleLogs";
     }
-} elseif($action == 'downloadNMPlogs') {
+} elseif ($action == 'downloadNMPlogs') {
     array_push($params, $beginDate);
     array_push($params, $lastDate);
     array_push($params, $courseid);
     array_push($params, $userid);
     array_push($params, $currentUrl);
 
-    if($lastDate && $beginDate && $courseid && $userid && $currentUrl) {
+    if ($lastDate && $beginDate && $courseid && $userid && $currentUrl) {
         $func = "local_notemyprogress_logsNMP";
     }
-} elseif($action == 'addLogs') {
+} elseif ($action == 'addLogs') {
     array_push($params, $sectionname);
     array_push($params, $actiontype);
     array_push($params, $courseid);
@@ -184,7 +264,7 @@ if($action == 'saveconfigweek') {//Exemple: if the action passed is saveconfigwe
     array_push($params, $currentUrl);
     array_push($params, $objectDescription);
 
-    if($courseid && $userid && $sectionname && $actiontype && $objectType && $objectName && $objectDescription && $currentUrl) {
+    if ($courseid && $userid && $sectionname && $actiontype && $objectType && $objectName && $objectDescription && $currentUrl) {
         $func = "local_notemyprogress_addLogs";
     }
 }elseif($action =='savegamification'){
@@ -222,9 +302,7 @@ if($action == 'saveconfigweek') {//Exemple: if the action passed is saveconfigwe
     }
 }        
 
-
-
-if(isset($params) && isset($func)){
+if (isset($params) && isset($func)) {
     call_user_func_array($func, $params);
     
 }else{
@@ -232,17 +310,117 @@ if(isset($params) && isset($func)){
     local_notemyprogress_ajax_response(array($message));//,$action,$courseid, $userid ,$rules , $levels, $settings, $url,$func), 442);
 }
 
+function local_sr_metareflexion_get_week($weekcode, $courseid, $userid, $profile)
+{
+
+    if ($profile == "teacher") {
+        $reports = new \local_notemyprogress\teacher($courseid, $userid);
+    } else {
+        $reports = new \local_notemyprogress\student($courseid, $userid);
+        $teacher = new \local_notemyprogress\teacher($courseid, $userid);
+    }
+    $interactions_goals = $reports->goals_report_metereflexion($weekcode);
+    $interactions_days = $reports->days_report_metereflexion($weekcode);
+    $interactions_hours = $reports->hours_report_metereflexion($weekcode);
+    $interactions_questions = $reports->questions_report_metereflexion($weekcode);
+    //debug_text::print("interactions_hours", $interactions_hours);
+    $status_planning = $reports->status_planning($weekcode);
+    // //debug_text::print("status_planning", $status_planning);
+    //$response = array("interactions_days" => $interactions_days, "interactions_hours" => $interactions_hours, "status_planning" => $status_planning);
+    $response = array("interactions_hours" => $interactions_hours,"interactions_days" => $interactions_days,"interactions_goals" => $interactions_goals,"interactions_questions" => $interactions_questions, "status_planning" => $status_planning);
+    //if($profile == 'student'){
+    $course_interaction = $teacher->hours_report_metereflexion($weekcode);
+    //debug_text::print("course_interaction", $course_interaction);
+    $response['course_report_hours'] = $course_interaction;
+    //}
+    $response['students_planification'] = $reports->students_planification_summary($weekcode);
+    local_notemyprogress_ajax_response($response);
+}
+
+
+function local_sr_save_metareflexion($userid, $weekcode, $dayscommitted, $goalscommitted, $hourscommitted, $courseid,$url)
+{
+    $logs = new \local_notemyprogress\logs($courseid, $userid);
+    $logs->addLogsNMP("Saved", "Meta_Reflection", "LOGFILES", "nmp", $currentUrl, "MetaReflectionSaved");
+
+    $metareflexion = new \local_notemyprogress\metareflexion($courseid, $userid);
+    $metareflexion->weekcode = $weekcode;
+    $metareflexion->days = $dayscommitted;
+    $metareflexion->goals_committed = $goalscommitted;
+    //debug_text::print("goalscommitted in ajax",$goalscommitted);
+    $metareflexion->hours = $hourscommitted;
+
+    $metareflexionid = $metareflexion->save_metareflexion();
+    local_notemyprogress_ajax_response(array('responsemetareflexion' => $metareflexionid));
+}
+
+function local_sr_update_metareflexion($userid, $weekcode, $idmetareflexion, $dayscommitted, $goalscommitted, $hourscommitted, $courseid,$url)
+{   
+    $logs = new \local_notemyprogress\logs($courseid, $userid);
+    $logs->addLogsNMP("Updated", "section", "Meta_Reflection", "student_gamification", $url, "MetaReflectionUpdated");
+    //debug_text::print("local_sr_update_metareflexion");
+    $metareflexion = new \local_notemyprogress\metareflexion($courseid, $userid, $idmetareflexion);
+    $metareflexion->id = $idmetareflexion;
+    $metareflexion->weekcode = $weekcode;
+    $metareflexion->days = $dayscommitted;
+    $metareflexion->goals_committed = $goalscommitted;
+    $metareflexion->hours = $hourscommitted;
+
+    $metareflexionid = $metareflexion->update_metareflexion();
+    local_notemyprogress_ajax_response(array('responsemetareflexion' => $metareflexionid));
+}
+
+function local_sr_save_lastweek($courseid, $userid,$weekcode ,$classroom_hours, $hours_off, $objectives_reached, $previous_class, $benefit, $feeling)
+{
+    $logs = new \local_notemyprogress\logs($courseid, $userid);
+    $logs->addLogsNMP("Saved", "Meta_Reflection", "LOGFILES", "nmp", $currentUrl, "MetaReflectionSaved");
+    //debug_text::print("local_sr_save_lastweek");
+    $lastweek = new \local_notemyprogress\metareflexion($courseid, $userid);
+    $lastweek->classroom_hours = $classroom_hours;
+    $lastweek->hours_off_course = $hours_off;
+    $lastweek->weekcode = $weekcode;
+    $lastweek->objectives_reached = $objectives_reached;
+    $lastweek->previous_class_learning = $previous_class;
+    $lastweek->benefit_going_class = $benefit;
+    $lastweek->feeling = $feeling;
+    //debug_text::print("weekcode",$weekcode);
+    //debug_text::print("lastweek ajax",$lastweek->weekcode);
+
+    $lastweekresponse = $lastweek->save_lastweek();
+    local_notemyprogress_ajax_response(array('response_save_last_week' => $lastweekresponse));
+}
+
+function local_sr_update_lastweek($courseid, $userid, $lastweekid, $classroom_hours, $hours_off, $objectives_reached, $previous_class, $benefit, $feeling)
+{
+    $logs = new \local_notemyprogress\logs($courseid, $userid);
+    $logs->addLogsNMP("Updated", "section", "Meta_Reflection", "student_gamification", $url, "MetaReflectionUpdated");
+//debug_text::print("local_sr_update_lastweek");
+  $lastweek = new \local_notemyprogress\metareflexion($courseid, $userid);
+  $lastweek->lastweekid = $lastweekid;
+  $lastweek->classroom_hours = $classroom_hours;
+  $lastweek->hours_off_course = $hours_off;
+  $lastweek->objectives_reached = $objectives_reached;
+  $lastweek->previous_class_learning = $previous_class;
+  $lastweek->benefit_going_class = $benefit;
+  $lastweek->feeling = $feeling;
+
+  $lastweekresponse = $lastweek->update_lastweek();
+  local_notemyprogress_ajax_response(array('response_update_last_week' => $lastweekresponse));
+}
+
+
 function local_notemyprogress_logsNMP($beginDate, $lastDate, $courseid, $userid, $currentUrl) {
     $logs = new \local_notemyprogress\logs($courseid, $userid);
     $logs->addLogsNMP("downloaded", "logfile", "LOGFILES", "nmp", $currentUrl, "File that contains all the activities performed on the moodle course in a time interval");
-    $jsonData = $logs->searchLogsNMP($beginDate,$lastDate);
-    local_notemyprogress_ajax_response(array("jsonData"=>$jsonData));
+    $jsonData = $logs->searchLogsNMP($beginDate, $lastDate);
+    local_notemyprogress_ajax_response(array("jsonData" => $jsonData));
 }
 
-function local_notemyprogress_save_weeks_config($weeks, $courseid, $userid, $newinstance){
+function local_notemyprogress_save_weeks_config($weeks, $courseid, $userid, $newinstance)
+{
     $weeks = json_decode($weeks);
     $configweeks = new \local_notemyprogress\configweeks($courseid, $userid);
-    if($newinstance){
+    if ($newinstance) {
         $configweeks->create_instance();
     }
     $configweeks->last_instance();
@@ -251,10 +429,11 @@ function local_notemyprogress_save_weeks_config($weeks, $courseid, $userid, $new
     local_notemyprogress_ajax_response(["settings" => $configweeks->get_settings()]);
 }
 
-function local_notemyprogress_change_group($courseid, $userid, $groupid){
+function local_notemyprogress_change_group($courseid, $userid, $groupid)
+{
     set_time_limit(300);
     global $DB;
-    if(is_null($groupid)){
+    if (is_null($groupid)) {
         $groupid = 0;
     }
     $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
@@ -269,19 +448,21 @@ function local_notemyprogress_change_group($courseid, $userid, $groupid){
     local_notemyprogress_ajax_response(array("groups" => $groups));
 }
 
-function local_notemyprogress_get_sessions($weekcode, $courseid, $userid, $profile){
+function local_notemyprogress_get_sessions($weekcode, $courseid, $userid, $profile)
+{
     set_time_limit(300);
     $reports = new \local_notemyprogress\teacher($courseid, $userid);
     $indicators = $reports->get_sessions($weekcode);
-    $body = array( "indicators" => $indicators );
+    $body = array("indicators" => $indicators);
     local_notemyprogress_ajax_response($body);
 }
 
-function local_notemyprogress_get_inverted_time($weekcode, $courseid, $userid, $profile){
+function local_notemyprogress_get_inverted_time($weekcode, $courseid, $userid, $profile)
+{
     set_time_limit(300);
-    if($profile == "teacher"){
+    if ($profile == "teacher") {
         $reports = new \local_notemyprogress\teacher($courseid, $userid);
-    }else{
+    } else {
         $reports = new \local_notemyprogress\student($courseid, $userid);
     }
     $inverted_time = $reports->inverted_time($weekcode);
@@ -291,11 +472,12 @@ function local_notemyprogress_get_inverted_time($weekcode, $courseid, $userid, $
     local_notemyprogress_ajax_response($body);
 }
 
-function local_notemyprogress_get_assignments_submissions($weekcode, $courseid, $userid, $profile){
+function local_notemyprogress_get_assignments_submissions($weekcode, $courseid, $userid, $profile)
+{
     set_time_limit(300);
-    if($profile == "teacher"){
+    if ($profile == "teacher") {
         $reports = new \local_notemyprogress\teacher($courseid, $userid);
-    }else{
+    } else {
         $reports = new \local_notemyprogress\student($courseid, $userid);
     }
     $submissions = $reports->assignments_submissions($weekcode);
@@ -308,7 +490,8 @@ function local_notemyprogress_get_assignments_submissions($weekcode, $courseid,
 }
 
 
-function local_notemyprogress_send_email($course, $user, $subject, $recipients, $text, $moduleid, $modulename){
+function local_notemyprogress_send_email($course, $user, $subject, $recipients, $text, $moduleid, $modulename)
+{
     set_time_limit(300);
     $email = new \local_notemyprogress\email($course, $user);
     $email->sendmail($subject, $recipients, $text, $moduleid, $modulename);
@@ -319,11 +502,12 @@ function local_notemyprogress_send_email($course, $user, $subject, $recipients,
     local_notemyprogress_ajax_response($body);
 }
 
-function local_notemyprogress_get_quiz_attempts($weekcode, $courseid, $userid, $profile){
+function local_notemyprogress_get_quiz_attempts($weekcode, $courseid, $userid, $profile)
+{
     set_time_limit(300);
-    if($profile == "teacher"){
+    if ($profile == "teacher") {
         $reports = new \local_notemyprogress\teacher($courseid, $userid);
-    }else{
+    } else {
         $reports = new \local_notemyprogress\student($courseid, $userid);
     }
     $quiz = $reports->quiz_attempts($weekcode);
@@ -333,18 +517,20 @@ function local_notemyprogress_get_quiz_attempts($weekcode, $courseid, $userid, $
     local_notemyprogress_ajax_response($body);
 }
 
-function local_notemyprogress_generate_dropout_data($courseid, $userid, $profile){
+function local_notemyprogress_generate_dropout_data($courseid, $userid, $profile)
+{
     set_time_limit(300);
-    if($profile == "teacher"){
+    if ($profile == "teacher") {
         $dropout = new \local_notemyprogress\dropout($courseid, $userid);
         $dropout->generate_data();
         local_notemyprogress_ajax_response([], "ok", true, 200);
-    }else{
-        local_notemyprogress_ajax_response([], "", false, 402);
+    } else {
+        local_notemyprogress_ajax_response([], "", false, 400);
     }
 }
 
-function local_notemyprogress_get_student_sessions($weekcode, $courseid, $userid, $profile){
+function local_notemyprogress_get_student_sessions($weekcode, $courseid, $userid, $profile)
+{
     set_time_limit(300);
     $reports = new \local_notemyprogress\student($courseid, $userid);
     $indicators = $reports->get_sessions($weekcode, false);
@@ -354,14 +540,16 @@ function local_notemyprogress_get_student_sessions($weekcode, $courseid, $userid
     local_notemyprogress_ajax_response($body);
 }
 
-function local_notemyprogress_downloadMoodleLogs($beginDate, $lastDate, $courseid, $userid, $currentUrl) {
+function local_notemyprogress_downloadMoodleLogs($beginDate, $lastDate, $courseid, $userid, $currentUrl)
+{
     $logs = new \local_notemyprogress\logs($courseid, $userid);
     $logs->addLogsNMP("downloaded", "logfile", "LOGFILES", "moodle", $currentUrl, "File that contains all the activities performed on the Note My Progress plugin in a time interval");
     $jsonData = $logs->searchLogsMoodle($beginDate, $lastDate);
-    local_notemyprogress_ajax_response(array("jsonData"=>$jsonData));
+    local_notemyprogress_ajax_response(array("jsonData" => $jsonData));
 }
 
-function local_notemyprogress_addLogs($sectionname, $actiontype, $courseid, $userid, $objectType, $objectName, $currentUrl, $objectDescription) {
+function local_notemyprogress_addLogs($sectionname, $actiontype, $courseid, $userid, $objectType, $objectName, $currentUrl, $objectDescription)
+{
     $logs = new \local_notemyprogress\logs($courseid, $userid);
     $logs->addLogsNMP($actiontype, $objectType, $sectionname, $objectName, $currentUrl, $objectDescription);
     local_notemyprogress_ajax_response(array("ok"=>"ok"));
@@ -399,7 +587,7 @@ function local_notemyprogress_save_enable($courseid, $userid, $enable,$url){
  }
  function local_notemyprogress_viewed_student_lvl($courseid, $userid,$url){
     $logs = new \local_notemyprogress\logs($courseid, $userid);
-    $logs->addLogsNMP("Viewed", "section", "STUDENT_GAMIFICATION", "student_gamification", $url, "GamificationSaved");;
+    $logs->addLogsNMP("Viewed", "section", "STUDENT_GAMIFICATION", "student_gamification", $url, "GamificationSaved");
     //  $configLevels = new \local_notemyprogress\configgamification($courseid, $userid);
     //  $configLevels->save_enable($enable);
     //  $message = get_string('fml_api_save_successful', 'local_notemyprogress');
diff --git a/notemyprogress/amd/build/alertify.min.js b/notemyprogress/amd/build/alertify.min.js
index 597b7780555cf6a68d1bf5af649f2bff90efd30a..25327d04ce26d2e086d54d8f6612473047d49ad1 100644
--- a/notemyprogress/amd/build/alertify.min.js
+++ b/notemyprogress/amd/build/alertify.min.js
@@ -1,2 +1,7 @@
-define ("local_notemyprogress/alertify",["local_notemyprogress/config","alertify"],function(a,b){return b});
+define("local_notemyprogress/alertify", [
+  "local_notemyprogress/config",
+  "alertify",
+], function (a, b) {
+  return b;
+});
 //# sourceMappingURL=alertify.min.js.map
diff --git a/notemyprogress/amd/build/alertify.min.js.map b/notemyprogress/amd/build/alertify.min.js.map
index ec39d3b2750ac2cf4b41c2899f2b338adbc84211..84b86e4cfa636da871da7334f403d9fc366a2abf 100644
--- a/notemyprogress/amd/build/alertify.min.js.map
+++ b/notemyprogress/amd/build/alertify.min.js.map
@@ -1 +1,16 @@
-{"version":3,"sources":["../src/alertify.js"],"names":["define","unused","alertify"],"mappings":"AAAAA,OAAM,+BAAC,CAAC,2BAAD,CAA8B,UAA9B,CAAD,CAA4C,SAASC,CAAT,CAAiBC,CAAjB,CAA2B,CACrE,MAAOA,CAAAA,CACV,CAFC,CAAN","sourcesContent":["define(['local_notemyprogress/config', 'alertify'], function(unused, alertify) {\r\n        return alertify;\r\n    }\r\n);"],"file":"alertify.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/alertify.js"
+  ],
+  "names": [
+    "define",
+    "unused",
+    "alertify"
+  ],
+  "mappings": "AAAAA,OAAM,+BAAC,CAAC,2BAAD,CAA8B,UAA9B,CAAD,CAA4C,SAASC,CAAT,CAAiBC,CAAjB,CAA2B,CACrE,MAAOA,CAAAA,CACV,CAFC,CAAN",
+  "sourcesContent": [
+    "define(['local_notemyprogress/config', 'alertify'], function(unused, alertify) {\r\n        return alertify;\r\n    }\r\n);"
+  ],
+  "file": "alertify.min.js"
+}
diff --git a/notemyprogress/amd/build/assignments.min.js b/notemyprogress/amd/build/assignments.min.js
index 4fe959e860d70b8e18deb512c44c1e3ecf818983..53681eb16cc77ddf61eeab8ee0d6425d53429577 100644
--- a/notemyprogress/amd/build/assignments.min.js
+++ b/notemyprogress/amd/build/assignments.min.js
@@ -1,2 +1,2 @@
 define(["local_notemyprogress/vue","local_notemyprogress/vuetify","local_notemyprogress/axios","local_notemyprogress/moment","local_notemyprogress/pagination","local_notemyprogress/chartdynamic","local_notemyprogress/pageheader","local_notemyprogress/emailform","local_notemyprogress/helpdialog"],function(s,e,t,i,n,o,a,r,c){"use strict";return{init:function(i){s.use(e),s.component("pagination",n),s.component("chart",o),s.component("pageheader",a),s.component("emailform",r),s.component("helpdialog",c);let l=new s({delimiters:["[[","]]"],el:"#submissions",vuetify:new e,data:()=>({dialog:!1,selected_users:[],modulename:"",moduleid:!1,strings:i.strings,groups:i.groups,userid:i.userid,courseid:i.courseid,timezone:i.timezone,render_has:i.profile_render,scriptname:i.scriptname,loading:!1,errors:[],pages:i.pages,submissions:i.submissions,email_strings:i.strings.email_strings,access:i.access,assigns_submissions_colors:i.assigns_submissions_colors,access_content_colors:i.access_content_colors,access_chart_categories:[],access_chart_series:[],access_chart_users:[],help_dialog:!1,help_contents:[],email_object_name:""}),beforeMount(){this.generate_access_content_data()},mounted(){document.querySelector("#sessions-loader").style.display="none",document.querySelector("#submissions").style.display="block",setTimeout(function(){l.setGraphicsEventListeners()},1e3)},methods:{get_help_content(){let s=[];return s.push({title:this.strings.section_help_title,description:this.strings.section_help_description}),s},update_interactions(s){this.loading=!0,this.errors=[];let e={action:"assignments",userid:this.userid,courseid:this.courseid,weekcode:s.weekcode,profile:this.render_has};return t({method:"get",url:M.cfg.wwwroot+"/local/notemyprogress/ajax.php",params:e}).then(s=>{200==s.status&&s.data.ok?(this.submissions=s.data.data.submissions,this.access=s.data.data.access,this.generate_access_content_data()):this.error_messages.push(this.strings.error_network)}).catch(s=>{this.errors.push(this.strings.api_error_network)}).finally(()=>{this.loading=!1,l.addLogsIntoDB("viewed","week_"+s.weekcode,"week_section","Week section that allows you to obtain information on a specific week"),l.setGraphicsEventListeners()}),this.data},build_assigns_submissions_chart(){let s=new Object;return s.chart={type:"column",backgroundColor:null,style:{fontFamily:"poppins"}},s.title={text:null},s.colors=this.assigns_submissions_colors,s.xAxis={categories:this.submissions.categories,crosshair:!0},s.yAxis={min:0,title:{text:this.strings.assignsubs_chart_yaxis},allowDecimals:!1},s.tooltip={formatter:function(){let s=this.x.split("</b>");s=(s=(s=s[0]||"").split("<b>"))[1]||"";let e=this.series.name,t=this.y,i=l.strings.students_text,n=l.strings.send_mail;return 1==t&&(i=l.strings.student_text),"<b>"+s+"</b><br/><b>"+e+": </b>"+t+" "+i+"<br/>"+n}},s.plotOptions={series:{cursor:"pointer",point:{events:{click:function(){l.email_object_name="assigns_submissions";let s=this.category.split("</b>");s=(s=(s=s[0]||"").split("<b>"))[1]||"",l.email_strings.subject=l.email_strings.subject_prefix+" - "+s;let e=this.x,t=this.series.colorIndex;l.dialog=!0,l.selected_users=l.submissions.users[e][t],l.moduleid=l.submissions.modules[e],l.modulename="assign",l.scriptname="test"}}}}},s.series=this.submissions.data,s},build_access_content_chart(){let s=new Object;return s.chart={type:"bar",backgroundColor:null,style:{fontFamily:"poppins"}},s.title={text:null},s.colors=this.access_content_colors,s.xAxis={categories:this.access_chart_categories,title:{text:null},crosshair:!0},s.yAxis={min:0,title:{text:this.strings.access_chart_yaxis_label},labels:{overflow:"justify"},allowDecimals:!1},s.tooltip={formatter:function(){let s=this.x,e=this.series.name,t=this.y,i=l.strings.students_text,n=l.strings.send_mail;return 1==t&&(i=l.strings.student_text),"<b>"+s+"</b><br/><b>"+e+": </b>"+t+" "+i+"<br/>"+n}},s.plotOptions={bar:{dataLabels:{enabled:!1}},series:{cursor:"pointer",point:{events:{click:function(){l.email_object_name="access_content";let s=this.category;l.email_strings.subject=l.email_strings.subject_prefix+" - "+s;let e=this.x,t=this.series.colorIndex,i=l.get_users(l.access_chart_users[e][t]);l.selected_users=i;let n=l.get_moduletype(this.category);l.modulename=n.type,l.moduleid=n.id,l.dialog=!0,l.scriptname="test"}}}}},s.series=this.access_chart_series,s},update_dialog(s){this.dialog=s},generate_access_content_data(){let s=[];this.access.users.forEach(e=>{s.push(Number(e.id))});let e=[];this.access.types.forEach(s=>{s.show&&e.push(s.type)});let t=[];this.access.modules.forEach(s=>{e.includes(s.type)&&t.push(s)});let i=[],n=[],o=[],a=[];t.forEach(e=>{i.push(e.name);let t=e.users,r=s.filter(s=>!t.includes(s));o.push(t.length),a.push(r.length),n.push([t,r])});let r=[{name:this.strings.access,data:o},{name:this.strings.no_access,data:a}];this.access_chart_categories=i,this.access_chart_series=r,this.access_chart_users=n},get_users(s){let e=[];return this.access.users.forEach(t=>{let i=Number(t.id);s.includes(i)&&e.push(t)}),e},get_moduletype(s){let e;return this.access.modules.forEach(t=>{t.name===s&&(e=t)}),e},open_chart_help(s){let e=[];var t="",i="",n="",o="";"assigns_submissions"==s?(e.push({title:this.strings.assigns_submissions_help_title,description:this.strings.assigns_submissions_help_description_p1}),e.push({description:this.strings.assigns_submissions_help_description_p2}),t="viewed",n="help",i="assigns_submissions",o="Help section that provides information about the invested time chart",l.addLogsIntoDB(t,i,n,o)):"access_content"==s&&(e.push({title:this.strings.access_content_help_title,description:this.strings.access_content_help_description_p1}),e.push({description:this.strings.access_content_help_description_p2}),t="viewed",n="help",i="access_content",o="Help section that provides information about the sessions per hour chart",l.addLogsIntoDB(t,i,n,o)),this.help_contents=e,this.help_contents.length&&(this.help_dialog=!0)},update_help_dialog(s){this.help_dialog=s},get_timezone(){return`${this.strings.ss_change_timezone} ${this.timezone}`},setGraphicsEventListeners(){let s=document.querySelectorAll(".highcharts-container");s.length<1?setTimeout(l.setGraphicsEventListeners,500):(s[0].id="submissions",s[1].id="accessContent",s.forEach(s=>{s.addEventListener("mouseenter",l.addLogsViewGraphic)}))},addLogsViewGraphic(s){event.stopPropagation();var e="",t="",i="",n="";switch(s.target.id){case"submissions":e="viewed",t="assigns_submissions",i="chart",n="Chart showing the work submited by the students";break;case"accessContent":e="viewed",t="access_content",i="chart",n="Chart showing the course content accessed by the students";break;default:e="viewed",t="",i="chart",n="A chart"}l.addLogsIntoDB(e,t,i,n)},addLogsIntoDB(s,e,n,o){let a={courseid:i.courseid,userid:i.userid,action:"addLogs",sectionname:"TASKS_MONITORING",actiontype:s,objectType:n,objectName:e,currentUrl:document.location.href,objectDescription:o};t({method:"get",url:M.cfg.wwwroot+"/local/notemyprogress/ajax.php",params:a}).then(s=>{200==s.status&&s.data.ok}).catch(s=>{})}}})}}});
-//# sourceMappingURL=assignments.min.js.map
\ No newline at end of file
+//# sourceMappingURL=assignments.min.js.map
diff --git a/notemyprogress/amd/build/assignments.min.js.map b/notemyprogress/amd/build/assignments.min.js.map
index 0b131863a10c3fd0413253d97085b6ddf94e017a..deb9f352a3ad6af4bcd9f803b1cfd2e79a2e6c72 100644
--- a/notemyprogress/amd/build/assignments.min.js.map
+++ b/notemyprogress/amd/build/assignments.min.js.map
@@ -1 +1,173 @@
-{"version":3,"sources":["../src/assignments.js"],"names":["define","Vue","Vuetify","Axios","Moment","Pagination","ChartDynamic","PageHeader","EmailForm","HelpDialog","init","content","use","component","vue","delimiters","el","vuetify","data","dialog","selected_users","modulename","moduleid","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","errors","pages","submissions","email_strings","access","assigns_submissions_colors","access_content_colors","access_chart_categories","access_chart_series","access_chart_users","help_dialog","help_contents","beforeMount","generate_access_content_data","mounted","document","querySelector","style","display","methods","get_help_content","contents","title","section_help_title","description","section_help_description","update_interactions","week","action","weekcode","profile","method","url","M","cfg","wwwroot","params","then","response","status","ok","error_messages","push","error_network","catch","api_error_network","finally","build_assigns_submissions_chart","chart","type","backgroundColor","fontFamily","text","colors","xAxis","categories","crosshair","yAxis","min","assignsubs_chart_yaxis","allowDecimals","tooltip","formatter","label","x","split","serie_name","series","name","value","y","students_label","students_text","send_mail","student_text","plotOptions","cursor","point","events","click","category","subject","subject_prefix","column","colorIndex","users","modules","build_access_content_chart","access_chart_yaxis_label","labels","overflow","bar","dataLabels","enabled","get_users","module","get_moduletype","id","update_dialog","usersIds","forEach","user","selected_types_labels","types","item","show","selected_modules","includes","modules_users","access_users_data","no_access_users_data","access_users","no_access_users","filter","length","no_access","ids","mod","open_chart_help","assigns_submissions_help_title","assigns_submissions_help_description_p1","assigns_submissions_help_description_p2","access_content_help_title","access_content_help_description_p1","access_content_help_description_p2","update_help_dialog","get_timezone","information","ss_change_timezone"],"mappings":"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","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/emailform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, EmailForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // console.log(content);\r\n            Vue.use(Vuetify)\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('emailform', EmailForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#submissions\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        dialog : false,\r\n                        selected_users : [],\r\n                        modulename : \"\",\r\n                        moduleid : false,\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n                        submissions: content.submissions,\r\n                        email_strings: content.strings.email_strings,\r\n\r\n                        access: content.access,\r\n                        assigns_submissions_colors: content.assigns_submissions_colors,\r\n                        access_content_colors: content.access_content_colors,\r\n                        access_chart_categories: [],\r\n                        access_chart_series: [],\r\n                        access_chart_users: [],\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    this.generate_access_content_data();\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#submissions\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"assignments\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.submissions = response.data.data.submissions;\r\n                                this.access = response.data.data.access;\r\n                                this.generate_access_content_data();\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    build_assigns_submissions_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.assigns_submissions_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.submissions.categories,\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            min: 0,\r\n                            title: {\r\n                                text: this.strings.assignsubs_chart_yaxis\r\n                            },\r\n                            allowDecimals: false,\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let label = this.x.split('</b>');\r\n                                label = label[0] || '';\r\n                                label = label.split('<b>');\r\n                                label = label[1] || '';\r\n                                let serie_name = this.series.name;\r\n                                let value = this.y;\r\n                                let students_label = vue.strings.students_text;\r\n                                let send_mail = vue.strings.send_mail;\r\n                                if (value == 1) {\r\n                                    students_label = vue.strings.student_text;\r\n                                }\r\n                                let text = '<b>' + label +'</b><br/>' + '<b>' + serie_name +': </b>' +\r\n                                            value + ' ' + students_label + '<br/>' + send_mail;\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let serie_name = this.category.split('</b>');\r\n                                            serie_name = serie_name[0] || '';\r\n                                            serie_name = serie_name.split('<b>');\r\n                                            serie_name = serie_name[1] || '';\r\n                                            vue.email_strings.subject = vue.email_strings.subject_prefix+\" - \"+serie_name;\r\n\r\n                                            let x = this.x;\r\n                                            let column = this.series.colorIndex;\r\n                                            vue.dialog = true;\r\n                                            vue.selected_users = vue.submissions.users[x][column];\r\n                                            vue.moduleid = vue.submissions.modules[x];\r\n                                            vue.modulename = \"assign\";\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.submissions.data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_access_content_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.access_content_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.access_chart_categories,\r\n                            title: { text: null },\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            min: 0,\r\n                            title: {\r\n                                text: this.strings.access_chart_yaxis_label,\r\n                            },\r\n                            labels: {\r\n                                overflow: 'justify'\r\n                            },\r\n                            allowDecimals: false,\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let label = this.x;\r\n                                let serie_name = this.series.name;\r\n                                let value = this.y;\r\n                                let students_label = vue.strings.students_text;\r\n                                let send_mail = vue.strings.send_mail;\r\n                                if (value == 1) {\r\n                                    students_label = vue.strings.student_text;\r\n                                }\r\n                                let text = '<b>' + label +'</b><br/>' + '<b>' + serie_name +': </b>' +\r\n                                    value + ' ' + students_label + '<br/>' + send_mail;\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            bar: {\r\n                                dataLabels: {\r\n                                    enabled: false\r\n                                }\r\n                            },\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let serie_name = this.category;\r\n                                            vue.email_strings.subject = vue.email_strings.subject_prefix+\" - \"+serie_name;\r\n                                            let x = this.x;\r\n                                            let column = this.series.colorIndex;\r\n                                            let users = vue.get_users(vue.access_chart_users[x][column]);\r\n                                            vue.selected_users = users;\r\n                                            let module = vue.get_moduletype(this.category);\r\n                                            vue.modulename = module.type;\r\n                                            vue.moduleid = module.id;\r\n                                            vue.dialog = true;\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.access_chart_series;\r\n                        return chart;\r\n                    },\r\n\r\n                    update_dialog (value) {\r\n                        this.dialog = value;\r\n                    },\r\n\r\n                    generate_access_content_data() {\r\n                        let usersIds = [];\r\n                        this.access.users.forEach(user => {\r\n                            usersIds.push(Number(user.id));\r\n                        });\r\n                        let selected_types_labels = [];\r\n                        this.access.types.forEach(item => {\r\n                            if (item.show) {\r\n                                selected_types_labels.push(item.type);\r\n                            }\r\n                        });\r\n                        let selected_modules = [];\r\n                        this.access.modules.forEach(module => {\r\n                            if (selected_types_labels.includes(module.type)) {\r\n                                selected_modules.push(module);\r\n                            }\r\n                        });\r\n                        let categories = [];\r\n                        let modules_users = [];\r\n                        let access_users_data = [];\r\n                        let no_access_users_data = [];\r\n                        selected_modules.forEach(module => {\r\n                            categories.push(module.name);\r\n                            let access_users = module.users;\r\n                            let no_access_users = usersIds.filter(x => !access_users.includes(x));\r\n                            access_users_data.push(access_users.length);\r\n                            no_access_users_data.push(no_access_users.length);\r\n                            modules_users.push([access_users, no_access_users]);\r\n                        });\r\n                        let series = [\r\n                            { name: this.strings.access, data: access_users_data },\r\n                            { name: this.strings.no_access, data: no_access_users_data },\r\n                        ];\r\n                        this.access_chart_categories = categories;\r\n                        this.access_chart_series = series;\r\n                        this.access_chart_users = modules_users;\r\n                    },\r\n\r\n                    get_users(ids) {\r\n                        let users = [];\r\n                        this.access.users.forEach(user => {\r\n                            let userid = Number(user.id);\r\n                            if (ids.includes(userid)) {\r\n                                users.push(user);\r\n                            }\r\n                        });\r\n                        return users;\r\n                    },\r\n\r\n                    get_moduletype(modulename) {\r\n                        let mod;\r\n                        this.access.modules.forEach(module => {\r\n                            if (module.name === modulename) {\r\n                                mod = module;\r\n                            }\r\n                        });\r\n                        return mod;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"assigns_submissions\") {\r\n                            contents.push({\r\n                                title: this.strings.assigns_submissions_help_title,\r\n                                description: this.strings.assigns_submissions_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.assigns_submissions_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"access_content\") {\r\n                            contents.push({\r\n                                title: this.strings.access_content_help_title,\r\n                                description: this.strings.access_content_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.access_content_help_description_p2,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"assignments.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/assignments.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "Pagination",
+    "ChartDynamic",
+    "PageHeader",
+    "EmailForm",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "dialog",
+    "selected_users",
+    "modulename",
+    "moduleid",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "errors",
+    "pages",
+    "submissions",
+    "email_strings",
+    "access",
+    "assigns_submissions_colors",
+    "access_content_colors",
+    "access_chart_categories",
+    "access_chart_series",
+    "access_chart_users",
+    "help_dialog",
+    "help_contents",
+    "beforeMount",
+    "generate_access_content_data",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "update_interactions",
+    "week",
+    "action",
+    "weekcode",
+    "profile",
+    "method",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "params",
+    "then",
+    "response",
+    "status",
+    "ok",
+    "error_messages",
+    "push",
+    "error_network",
+    "catch",
+    "api_error_network",
+    "finally",
+    "build_assigns_submissions_chart",
+    "chart",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "text",
+    "colors",
+    "xAxis",
+    "categories",
+    "crosshair",
+    "yAxis",
+    "min",
+    "assignsubs_chart_yaxis",
+    "allowDecimals",
+    "tooltip",
+    "formatter",
+    "label",
+    "x",
+    "split",
+    "serie_name",
+    "series",
+    "name",
+    "value",
+    "y",
+    "students_label",
+    "students_text",
+    "send_mail",
+    "student_text",
+    "plotOptions",
+    "cursor",
+    "point",
+    "events",
+    "click",
+    "category",
+    "subject",
+    "subject_prefix",
+    "column",
+    "colorIndex",
+    "users",
+    "modules",
+    "build_access_content_chart",
+    "access_chart_yaxis_label",
+    "labels",
+    "overflow",
+    "bar",
+    "dataLabels",
+    "enabled",
+    "get_users",
+    "module",
+    "get_moduletype",
+    "id",
+    "update_dialog",
+    "usersIds",
+    "forEach",
+    "user",
+    "selected_types_labels",
+    "types",
+    "item",
+    "show",
+    "selected_modules",
+    "includes",
+    "modules_users",
+    "access_users_data",
+    "no_access_users_data",
+    "access_users",
+    "no_access_users",
+    "filter",
+    "length",
+    "no_access",
+    "ids",
+    "mod",
+    "open_chart_help",
+    "assigns_submissions_help_title",
+    "assigns_submissions_help_description_p1",
+    "assigns_submissions_help_description_p2",
+    "access_content_help_title",
+    "access_content_help_description_p1",
+    "access_content_help_description_p2",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/emailform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, EmailForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify)\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('emailform', EmailForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#submissions\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        dialog : false,\r\n                        selected_users : [],\r\n                        modulename : \"\",\r\n                        moduleid : false,\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n                        submissions: content.submissions,\r\n                        email_strings: content.strings.email_strings,\r\n\r\n                        access: content.access,\r\n                        assigns_submissions_colors: content.assigns_submissions_colors,\r\n                        access_content_colors: content.access_content_colors,\r\n                        access_chart_categories: [],\r\n                        access_chart_series: [],\r\n                        access_chart_users: [],\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    this.generate_access_content_data();\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#submissions\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"assignments\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.submissions = response.data.data.submissions;\r\n                                this.access = response.data.data.access;\r\n                                this.generate_access_content_data();\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    build_assigns_submissions_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.assigns_submissions_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.submissions.categories,\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            min: 0,\r\n                            title: {\r\n                                text: this.strings.assignsubs_chart_yaxis\r\n                            },\r\n                            allowDecimals: false,\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let label = this.x.split('</b>');\r\n                                label = label[0] || '';\r\n                                label = label.split('<b>');\r\n                                label = label[1] || '';\r\n                                let serie_name = this.series.name;\r\n                                let value = this.y;\r\n                                let students_label = vue.strings.students_text;\r\n                                let send_mail = vue.strings.send_mail;\r\n                                if (value == 1) {\r\n                                    students_label = vue.strings.student_text;\r\n                                }\r\n                                let text = '<b>' + label +'</b><br/>' + '<b>' + serie_name +': </b>' +\r\n                                            value + ' ' + students_label + '<br/>' + send_mail;\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let serie_name = this.category.split('</b>');\r\n                                            serie_name = serie_name[0] || '';\r\n                                            serie_name = serie_name.split('<b>');\r\n                                            serie_name = serie_name[1] || '';\r\n                                            vue.email_strings.subject = vue.email_strings.subject_prefix+\" - \"+serie_name;\r\n\r\n                                            let x = this.x;\r\n                                            let column = this.series.colorIndex;\r\n                                            vue.dialog = true;\r\n                                            vue.selected_users = vue.submissions.users[x][column];\r\n                                            vue.moduleid = vue.submissions.modules[x];\r\n                                            vue.modulename = \"assign\";\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.submissions.data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_access_content_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.access_content_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.access_chart_categories,\r\n                            title: { text: null },\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            min: 0,\r\n                            title: {\r\n                                text: this.strings.access_chart_yaxis_label,\r\n                            },\r\n                            labels: {\r\n                                overflow: 'justify'\r\n                            },\r\n                            allowDecimals: false,\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let label = this.x;\r\n                                let serie_name = this.series.name;\r\n                                let value = this.y;\r\n                                let students_label = vue.strings.students_text;\r\n                                let send_mail = vue.strings.send_mail;\r\n                                if (value == 1) {\r\n                                    students_label = vue.strings.student_text;\r\n                                }\r\n                                let text = '<b>' + label +'</b><br/>' + '<b>' + serie_name +': </b>' +\r\n                                    value + ' ' + students_label + '<br/>' + send_mail;\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            bar: {\r\n                                dataLabels: {\r\n                                    enabled: false\r\n                                }\r\n                            },\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let serie_name = this.category;\r\n                                            vue.email_strings.subject = vue.email_strings.subject_prefix+\" - \"+serie_name;\r\n                                            let x = this.x;\r\n                                            let column = this.series.colorIndex;\r\n                                            let users = vue.get_users(vue.access_chart_users[x][column]);\r\n                                            vue.selected_users = users;\r\n                                            let module = vue.get_moduletype(this.category);\r\n                                            vue.modulename = module.type;\r\n                                            vue.moduleid = module.id;\r\n                                            vue.dialog = true;\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.access_chart_series;\r\n                        return chart;\r\n                    },\r\n\r\n                    update_dialog (value) {\r\n                        this.dialog = value;\r\n                    },\r\n\r\n                    generate_access_content_data() {\r\n                        let usersIds = [];\r\n                        this.access.users.forEach(user => {\r\n                            usersIds.push(Number(user.id));\r\n                        });\r\n                        let selected_types_labels = [];\r\n                        this.access.types.forEach(item => {\r\n                            if (item.show) {\r\n                                selected_types_labels.push(item.type);\r\n                            }\r\n                        });\r\n                        let selected_modules = [];\r\n                        this.access.modules.forEach(module => {\r\n                            if (selected_types_labels.includes(module.type)) {\r\n                                selected_modules.push(module);\r\n                            }\r\n                        });\r\n                        let categories = [];\r\n                        let modules_users = [];\r\n                        let access_users_data = [];\r\n                        let no_access_users_data = [];\r\n                        selected_modules.forEach(module => {\r\n                            categories.push(module.name);\r\n                            let access_users = module.users;\r\n                            let no_access_users = usersIds.filter(x => !access_users.includes(x));\r\n                            access_users_data.push(access_users.length);\r\n                            no_access_users_data.push(no_access_users.length);\r\n                            modules_users.push([access_users, no_access_users]);\r\n                        });\r\n                        let series = [\r\n                            { name: this.strings.access, data: access_users_data },\r\n                            { name: this.strings.no_access, data: no_access_users_data },\r\n                        ];\r\n                        this.access_chart_categories = categories;\r\n                        this.access_chart_series = series;\r\n                        this.access_chart_users = modules_users;\r\n                    },\r\n\r\n                    get_users(ids) {\r\n                        let users = [];\r\n                        this.access.users.forEach(user => {\r\n                            let userid = Number(user.id);\r\n                            if (ids.includes(userid)) {\r\n                                users.push(user);\r\n                            }\r\n                        });\r\n                        return users;\r\n                    },\r\n\r\n                    get_moduletype(modulename) {\r\n                        let mod;\r\n                        this.access.modules.forEach(module => {\r\n                            if (module.name === modulename) {\r\n                                mod = module;\r\n                            }\r\n                        });\r\n                        return mod;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"assigns_submissions\") {\r\n                            contents.push({\r\n                                title: this.strings.assigns_submissions_help_title,\r\n                                description: this.strings.assigns_submissions_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.assigns_submissions_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"access_content\") {\r\n                            contents.push({\r\n                                title: this.strings.access_content_help_title,\r\n                                description: this.strings.access_content_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.access_content_help_description_p2,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "assignments.min.js"
+}
diff --git a/notemyprogress/amd/build/axios.min.js b/notemyprogress/amd/build/axios.min.js
index 6a458627cdf9d4c6504fbadef385d37037b13869..45231c4993a048c6b1b81864d5683a762407dcf2 100644
--- a/notemyprogress/amd/build/axios.min.js
+++ b/notemyprogress/amd/build/axios.min.js
@@ -1,2 +1,7 @@
-define ("local_notemyprogress/axios",["local_notemyprogress/config","axios"],function(a,b){return b});
+define("local_notemyprogress/axios", [
+  "local_notemyprogress/config",
+  "axios",
+], function (a, b) {
+  return b;
+});
 //# sourceMappingURL=axios.min.js.map
diff --git a/notemyprogress/amd/build/chartdynamic.min.js b/notemyprogress/amd/build/chartdynamic.min.js
index ab0da2852ca4065739c36d85bf7c8482cd2e5eff..8fc95b586bf35e7781cea5dc9207404d51c7cf6e 100644
--- a/notemyprogress/amd/build/chartdynamic.min.js
+++ b/notemyprogress/amd/build/chartdynamic.min.js
@@ -1,2 +1,147 @@
-define(["highcharts","highcharts/highcharts-3d","highcharts/highcharts-more","highcharts/modules/heatmap","highcharts/modules/exporting","highcharts/modules/export-data","highcharts/modules/accessibility","highcharts/modules/no-data-to-display"],function(t){return{template:'<div v-bind:id="container"></div>',props:["container","chart","lang"],data:()=>({}),mounted(){let o=this;this.lang&&t.setOptions({lang:this.lang,credits:{enabled:!1},exporting:{buttons:{contextButton:{menuItems:[{text:this.lang.downloadPNG,onclick:function(){this.exportChart({type:"image/png"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadJPEG,onclick:function(){this.exportChart({type:"image/jpeg"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadPDF,onclick:function(){this.exportChart({type:"application/pdf"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadSVG,onclick:function(){this.exportChart({type:"image/svg+xml"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadXLS,onclick:function(){this.downloadXLS(),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadCSV,onclick:function(){this.downloadCSV(),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}}],symbol:"menuball",symbolStroke:"#118AB2"}}}}),this._highchart=t.chart(this.container,this.chart);let a=this._highchart.legend.allItems,e="",n="",d="",h="";a.forEach(t=>{t.legendGroup.element.addEventListener("click",function(){e="filtered",n=o.$el.id,d="chart",h="Filtered a part of the "+n+" chart","function"==typeof o.$parent.$root.addLogsIntoDB&&o.$parent.$root.addLogsIntoDB(e,n,d,h)})})},watch:{chart:{deep:!0,handler(t){this._highchart.update(t);let o=this._highchart.legend.allItems,a=this,e="",n="",d="",h="";o.forEach(t=>{t.legendGroup.element.addEventListener("click",function(){e="filtered",n=a.$el.id,d="chart",h="Filtered a part of the "+n+" chart","function"==typeof a.$parent.$root.addLogsIntoDB&&a.$parent.$root.addLogsIntoDB(e,n,d,h)})})}}}}});
+define([
+  "highcharts",
+  "highcharts/highcharts-3d",
+  "highcharts/highcharts-more",
+  "highcharts/modules/heatmap",
+  "highcharts/modules/exporting",
+  "highcharts/modules/export-data",
+  "highcharts/modules/accessibility",
+  "highcharts/modules/no-data-to-display",
+], function (t) {
+  return {
+    template: '<div v-bind:id="container"></div>',
+    props: ["container", "chart", "lang"],
+    data: () => ({}),
+    mounted() {
+      let o = this;
+      this.lang &&
+        t.setOptions({
+          lang: this.lang,
+          credits: { enabled: !1 },
+          exporting: {
+            buttons: {
+              contextButton: {
+                menuItems: [
+                  {
+                    text: this.lang.downloadPNG,
+                    onclick: function () {
+                      this.exportChart({ type: "image/png" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadJPEG,
+                    onclick: function () {
+                      this.exportChart({ type: "image/jpeg" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadPDF,
+                    onclick: function () {
+                      this.exportChart({ type: "application/pdf" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadSVG,
+                    onclick: function () {
+                      this.exportChart({ type: "image/svg+xml" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadXLS,
+                    onclick: function () {
+                      this.downloadXLS(),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadCSV,
+                    onclick: function () {
+                      this.downloadCSV(),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                ],
+                symbol: "menuball",
+                symbolStroke: "#118AB2",
+              },
+            },
+          },
+        }),
+        (this._highchart = t.chart(this.container, this.chart));
+      let a = this._highchart.legend.allItems,
+        e = "",
+        n = "",
+        d = "",
+        h = "";
+      a.forEach((t) => {
+        t.legendGroup.element.addEventListener("click", function () {
+          (e = "filtered"),
+            (n = o.$el.id),
+            (d = "chart"),
+            (h = "Filtered a part of the " + n + " chart"),
+            "function" == typeof o.$parent.$root.addLogsIntoDB &&
+              o.$parent.$root.addLogsIntoDB(e, n, d, h);
+        });
+      });
+    },
+    watch: {
+      chart: {
+        deep: !0,
+        handler(t) {
+          this._highchart.update(t);
+          let o = this._highchart.legend.allItems,
+            a = this,
+            e = "",
+            n = "",
+            d = "",
+            h = "";
+          o.forEach((t) => {
+            t.legendGroup.element.addEventListener("click", function () {
+              (e = "filtered"),
+                (n = a.$el.id),
+                (d = "chart"),
+                (h = "Filtered a part of the " + n + " chart"),
+                "function" == typeof a.$parent.$root.addLogsIntoDB &&
+                  a.$parent.$root.addLogsIntoDB(e, n, d, h);
+            });
+          });
+        },
+      },
+    },
+  };
+});
 //# sourceMappingURL=chartdynamic.min.js.map
diff --git a/notemyprogress/amd/build/chartdynamic.min.js.map b/notemyprogress/amd/build/chartdynamic.min.js.map
index 72aab03fc21d6fb9ca0e5c1cf395765f93082251..07feb102a968dcb9d342abbbcafb28b5499ef2ac 100644
--- a/notemyprogress/amd/build/chartdynamic.min.js.map
+++ b/notemyprogress/amd/build/chartdynamic.min.js.map
@@ -1 +1,46 @@
-{"version":3,"sources":["../src/chartdynamic.js"],"names":["define","Highcharts","template","props","data","mounted","lang","setOptions","credits","enabled","exporting","buttons","contextButton","menuItems","text","downloadPNG","onclick","exportChart","type","downloadJPEG","downloadPDF","downloadSVG","downloadXLS","downloadCSV","symbol","symbolStroke","_highchart","chart","container","watch","deep","handler","update"],"mappings":"AAAAA,OAAM,mCAAC,CACC,YADD,CAEC,0BAFD,CAGC,4BAHD,CAIC,4BAJD,CAKC,8BALD,CAMC,gCAND,CAOC,kCAPD,CAQC,uCARD,CAAD,CAUF,SAASC,CAAT,CAAqB,CACrB,MAAO,CACHC,QAAQ,sCADL,CAEHC,KAAK,CAAE,CAAC,WAAD,CAAc,OAAd,CAAuB,MAAvB,CAFJ,CAGHC,IAHG,gBAGI,CACH,MAAO,EACV,CALE,CAMHC,OANG,mBAMO,CACL,KAAKC,IAAN,EAAeL,CAAU,CAACM,UAAX,CAAsB,CACjCD,IAAI,CAAE,KAAKA,IADsB,CAEjCE,OAAO,CAAE,CAAEC,OAAO,GAAT,CAFwB,CAGjCC,SAAS,CAAE,CACPC,OAAO,CAAE,CACLC,aAAa,CAAE,CACXC,SAAS,CAAE,CAAC,CACRC,IAAI,CAAE,KAAKR,IAAL,CAAUS,WADR,CAERC,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,WADO,CAAjB,CAGH,CANO,CAAD,CAOT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUa,YADlB,CAEEH,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,YADO,CAAjB,CAGH,CANH,CAPS,CAcT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUc,WADlB,CAEEJ,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,iBADO,CAAjB,CAGH,CANH,CAdS,CAqBT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUe,WADlB,CAEEL,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,eADO,CAAjB,CAGH,CANH,CArBS,CA4BT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUgB,WADlB,CAEEN,OAAO,CAAE,kBAAY,CACjB,KAAKM,WAAL,EACH,CAJH,CA5BS,CAiCT,CACER,IAAI,CAAE,KAAKR,IAAL,CAAUiB,WADlB,CAEEP,OAAO,CAAE,kBAAY,CACjB,KAAKO,WAAL,EACH,CAJH,CAjCS,CADA,CAwCXC,MAAM,CAAE,UAxCG,CAyCXC,YAAY,CAAE,SAzCH,CADV,CADF,CAHsB,CAAtB,CAAf,CAmDA,KAAKC,UAAL,CAAkBzB,CAAU,CAAC0B,KAAX,CAAiB,KAAKC,SAAtB,CAAiC,KAAKD,KAAtC,CACrB,CA3DE,CA4DHE,KAAK,CAAE,CACHF,KAAK,CAAE,CACHG,IAAI,GADD,CAEHC,OAFG,kBAEKJ,CAFL,CAEY,CACX,KAAKD,UAAL,CAAgBM,MAAhB,CAAuBL,CAAvB,CACH,CAJE,CADJ,CA5DJ,CAsEV,CAjFK,CAAN","sourcesContent":["define([\n        'highcharts',\n        'highcharts/highcharts-3d',\n        'highcharts/highcharts-more',\n        'highcharts/modules/heatmap',\n        'highcharts/modules/exporting',\n        'highcharts/modules/export-data',\n        'highcharts/modules/accessibility',\n        'highcharts/modules/no-data-to-display',\n        ],\n    function(Highcharts) {\n    return {\n        template: `<div v-bind:id=\"container\"></div>`,\n        props: ['container', 'chart', 'lang'],\n        data() {\n            return { }\n        },\n        mounted() {\n            (this.lang) && Highcharts.setOptions({\n                lang: this.lang,\n                credits: { enabled: false },\n                exporting: {\n                    buttons: {\n                        contextButton: {\n                            menuItems: [{\n                                text: this.lang.downloadPNG,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'image/png'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadJPEG,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'image/jpeg'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadPDF,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'application/pdf'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadSVG,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'image/svg+xml'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadXLS,\n                                onclick: function () {\n                                    this.downloadXLS();\n                                }\n                            },{\n                                text: this.lang.downloadCSV,\n                                onclick: function () {\n                                    this.downloadCSV();\n                                }\n                            }],\n                            symbol: 'menuball',\n                            symbolStroke: '#118AB2'\n                        }\n                    }\n                }\n            });\n            this._highchart = Highcharts.chart(this.container, this.chart);\n        },\n        watch: {\n            chart: {\n                deep: true,\n                handler(chart) {\n                    this._highchart.update(chart);\n                },\n            }\n        }\n\n    };\n});"],"file":"chartdynamic.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/chartdynamic.js"
+  ],
+  "names": [
+    "define",
+    "Highcharts",
+    "template",
+    "props",
+    "data",
+    "mounted",
+    "lang",
+    "setOptions",
+    "credits",
+    "enabled",
+    "exporting",
+    "buttons",
+    "contextButton",
+    "menuItems",
+    "text",
+    "downloadPNG",
+    "onclick",
+    "exportChart",
+    "type",
+    "downloadJPEG",
+    "downloadPDF",
+    "downloadSVG",
+    "downloadXLS",
+    "downloadCSV",
+    "symbol",
+    "symbolStroke",
+    "_highchart",
+    "chart",
+    "container",
+    "watch",
+    "deep",
+    "handler",
+    "update"
+  ],
+  "mappings": "AAAAA,OAAM,mCAAC,CACC,YADD,CAEC,0BAFD,CAGC,4BAHD,CAIC,4BAJD,CAKC,8BALD,CAMC,gCAND,CAOC,kCAPD,CAQC,uCARD,CAAD,CAUF,SAASC,CAAT,CAAqB,CACrB,MAAO,CACHC,QAAQ,sCADL,CAEHC,KAAK,CAAE,CAAC,WAAD,CAAc,OAAd,CAAuB,MAAvB,CAFJ,CAGHC,IAHG,gBAGI,CACH,MAAO,EACV,CALE,CAMHC,OANG,mBAMO,CACL,KAAKC,IAAN,EAAeL,CAAU,CAACM,UAAX,CAAsB,CACjCD,IAAI,CAAE,KAAKA,IADsB,CAEjCE,OAAO,CAAE,CAAEC,OAAO,GAAT,CAFwB,CAGjCC,SAAS,CAAE,CACPC,OAAO,CAAE,CACLC,aAAa,CAAE,CACXC,SAAS,CAAE,CAAC,CACRC,IAAI,CAAE,KAAKR,IAAL,CAAUS,WADR,CAERC,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,WADO,CAAjB,CAGH,CANO,CAAD,CAOT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUa,YADlB,CAEEH,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,YADO,CAAjB,CAGH,CANH,CAPS,CAcT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUc,WADlB,CAEEJ,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,iBADO,CAAjB,CAGH,CANH,CAdS,CAqBT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUe,WADlB,CAEEL,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,eADO,CAAjB,CAGH,CANH,CArBS,CA4BT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUgB,WADlB,CAEEN,OAAO,CAAE,kBAAY,CACjB,KAAKM,WAAL,EACH,CAJH,CA5BS,CAiCT,CACER,IAAI,CAAE,KAAKR,IAAL,CAAUiB,WADlB,CAEEP,OAAO,CAAE,kBAAY,CACjB,KAAKO,WAAL,EACH,CAJH,CAjCS,CADA,CAwCXC,MAAM,CAAE,UAxCG,CAyCXC,YAAY,CAAE,SAzCH,CADV,CADF,CAHsB,CAAtB,CAAf,CAmDA,KAAKC,UAAL,CAAkBzB,CAAU,CAAC0B,KAAX,CAAiB,KAAKC,SAAtB,CAAiC,KAAKD,KAAtC,CACrB,CA3DE,CA4DHE,KAAK,CAAE,CACHF,KAAK,CAAE,CACHG,IAAI,GADD,CAEHC,OAFG,kBAEKJ,CAFL,CAEY,CACX,KAAKD,UAAL,CAAgBM,MAAhB,CAAuBL,CAAvB,CACH,CAJE,CADJ,CA5DJ,CAsEV,CAjFK,CAAN",
+  "sourcesContent": [
+    "define([\n        'highcharts',\n        'highcharts/highcharts-3d',\n        'highcharts/highcharts-more',\n        'highcharts/modules/heatmap',\n        'highcharts/modules/exporting',\n        'highcharts/modules/export-data',\n        'highcharts/modules/accessibility',\n        'highcharts/modules/no-data-to-display',\n        ],\n    function(Highcharts) {\n    return {\n        template: `<div v-bind:id=\"container\"></div>`,\n        props: ['container', 'chart', 'lang'],\n        data() {\n            return { }\n        },\n        mounted() {\n            (this.lang) && Highcharts.setOptions({\n                lang: this.lang,\n                credits: { enabled: false },\n                exporting: {\n                    buttons: {\n                        contextButton: {\n                            menuItems: [{\n                                text: this.lang.downloadPNG,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'image/png'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadJPEG,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'image/jpeg'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadPDF,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'application/pdf'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadSVG,\n                                onclick: function () {\n                                    this.exportChart({\n                                        type: 'image/svg+xml'\n                                    });\n                                }\n                            },{\n                                text: this.lang.downloadXLS,\n                                onclick: function () {\n                                    this.downloadXLS();\n                                }\n                            },{\n                                text: this.lang.downloadCSV,\n                                onclick: function () {\n                                    this.downloadCSV();\n                                }\n                            }],\n                            symbol: 'menuball',\n                            symbolStroke: '#118AB2'\n                        }\n                    }\n                }\n            });\n            this._highchart = Highcharts.chart(this.container, this.chart);\n        },\n        watch: {\n            chart: {\n                deep: true,\n                handler(chart) {\n                    this._highchart.update(chart);\n                },\n            }\n        }\n\n    };\n});"
+  ],
+  "file": "chartdynamic.min.js"
+}
diff --git a/notemyprogress/amd/build/chartstatic.min.js b/notemyprogress/amd/build/chartstatic.min.js
index 0d0f58c546319cbe552bb563a7c860a455184b9c..7e0c1d945b3955d0196aa1b4712ae8698b397d70 100644
--- a/notemyprogress/amd/build/chartstatic.min.js
+++ b/notemyprogress/amd/build/chartstatic.min.js
@@ -1,2 +1,123 @@
-define(["highcharts","highcharts/highcharts-3d","highcharts/highcharts-more","highcharts/modules/heatmap","highcharts/modules/exporting","highcharts/modules/export-data","highcharts/modules/accessibility","highcharts/modules/no-data-to-display"],function(t){return{template:'<div v-bind:id="container"></div>',props:["container","chart","lang","test"],data:()=>({}),mounted(){let o=this;this.lang&&t.setOptions({lang:this.lang,credits:{enabled:!1},exporting:{buttons:{contextButton:{menuItems:[{text:this.lang.downloadPNG,onclick:function(){this.exportChart({type:"image/png"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadJPEG,onclick:function(){this.exportChart({type:"image/jpeg"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadPDF,onclick:function(){this.exportChart({type:"application/pdf"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadSVG,onclick:function(){this.exportChart({type:"image/svg+xml"}),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadXLS,onclick:function(){this.downloadXLS(),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}},{text:this.lang.downloadCSV,onclick:function(){this.downloadCSV(),o.$parent.$root.addLogsIntoDB("downloaded",o.$el.id,"chart","A chart")}}],symbol:"menuball",symbolStroke:"#118AB2"}}}}),this._highchart=t.chart(this.container,this.chart);let a=this._highchart.legend.allItems,n="",e="",d="",h="";a.forEach(t=>{t.legendGroup.element.addEventListener("click",function(){n="filtered",e=o.$el.id,d="chart",h="Filtered a part of the "+e+" chart","function"==typeof o.$parent.$root.addLogsIntoDB&&o.$parent.$root.addLogsIntoDB(n,e,d,h)})})}}});
+define([
+  "highcharts",
+  "highcharts/highcharts-3d",
+  "highcharts/highcharts-more",
+  "highcharts/modules/heatmap",
+  "highcharts/modules/exporting",
+  "highcharts/modules/export-data",
+  "highcharts/modules/accessibility",
+  "highcharts/modules/no-data-to-display",
+], function (t) {
+  return {
+    template: '<div v-bind:id="container"></div>',
+    props: ["container", "chart", "lang", "test"],
+    data: () => ({}),
+    mounted() {
+      let o = this;
+      this.lang &&
+        t.setOptions({
+          lang: this.lang,
+          credits: { enabled: !1 },
+          exporting: {
+            buttons: {
+              contextButton: {
+                menuItems: [
+                  {
+                    text: this.lang.downloadPNG,
+                    onclick: function () {
+                      this.exportChart({ type: "image/png" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadJPEG,
+                    onclick: function () {
+                      this.exportChart({ type: "image/jpeg" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadPDF,
+                    onclick: function () {
+                      this.exportChart({ type: "application/pdf" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadSVG,
+                    onclick: function () {
+                      this.exportChart({ type: "image/svg+xml" }),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadXLS,
+                    onclick: function () {
+                      this.downloadXLS(),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                  {
+                    text: this.lang.downloadCSV,
+                    onclick: function () {
+                      this.downloadCSV(),
+                        o.$parent.$root.addLogsIntoDB(
+                          "downloaded",
+                          o.$el.id,
+                          "chart",
+                          "A chart"
+                        );
+                    },
+                  },
+                ],
+                symbol: "menuball",
+                symbolStroke: "#118AB2",
+              },
+            },
+          },
+        }),
+        (this._highchart = t.chart(this.container, this.chart));
+      let a = this._highchart.legend.allItems,
+        n = "",
+        e = "",
+        d = "",
+        h = "";
+      a.forEach((t) => {
+        t.legendGroup.element.addEventListener("click", function () {
+          (n = "filtered"),
+            (e = o.$el.id),
+            (d = "chart"),
+            (h = "Filtered a part of the " + e + " chart"),
+            "function" == typeof o.$parent.$root.addLogsIntoDB &&
+              o.$parent.$root.addLogsIntoDB(n, e, d, h);
+        });
+      });
+    },
+  };
+});
 //# sourceMappingURL=chartstatic.min.js.map
diff --git a/notemyprogress/amd/build/chartstatic.min.js.map b/notemyprogress/amd/build/chartstatic.min.js.map
index a6b774808b64d9b308644e8ba785bcce48970ead..39e86ed9099c1d4edb1502c900e72d0669813e4a 100644
--- a/notemyprogress/amd/build/chartstatic.min.js.map
+++ b/notemyprogress/amd/build/chartstatic.min.js.map
@@ -1 +1,42 @@
-{"version":3,"sources":["../src/chartstatic.js"],"names":["define","Highcharts","template","props","data","mounted","lang","setOptions","credits","enabled","exporting","buttons","contextButton","menuItems","text","downloadPNG","onclick","exportChart","type","downloadJPEG","downloadPDF","downloadSVG","downloadXLS","downloadCSV","symbol","symbolStroke","_highchart","chart","container"],"mappings":"AAAAA,OAAM,kCAAC,CACC,YADD,CAEC,0BAFD,CAGC,4BAHD,CAIC,4BAJD,CAKC,8BALD,CAMC,gCAND,CAOC,kCAPD,CAQC,uCARD,CAAD,CASF,SAASC,CAAT,CAAqB,CACjB,MAAO,CACHC,QAAQ,sCADL,CAEHC,KAAK,CAAE,CAAC,WAAD,CAAc,OAAd,CAAuB,MAAvB,CAFJ,CAGHC,IAHG,gBAGI,CACH,MAAO,EACV,CALE,CAMHC,OANG,mBAMO,CACL,KAAKC,IAAN,EAAeL,CAAU,CAACM,UAAX,CAAsB,CACjCD,IAAI,CAAE,KAAKA,IADsB,CAEjCE,OAAO,CAAE,CAAEC,OAAO,GAAT,CAFwB,CAGjCC,SAAS,CAAE,CACPC,OAAO,CAAE,CACLC,aAAa,CAAE,CACXC,SAAS,CAAE,CAAC,CACRC,IAAI,CAAE,KAAKR,IAAL,CAAUS,WADR,CAERC,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,WADO,CAAjB,CAGH,CANO,CAAD,CAOT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUa,YADlB,CAEEH,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,YADO,CAAjB,CAGH,CANH,CAPS,CAcT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUc,WADlB,CAEEJ,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,iBADO,CAAjB,CAGH,CANH,CAdS,CAqBT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUe,WADlB,CAEEL,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,eADO,CAAjB,CAGH,CANH,CArBS,CA4BT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUgB,WADlB,CAEEN,OAAO,CAAE,kBAAY,CACjB,KAAKM,WAAL,EACH,CAJH,CA5BS,CAiCT,CACER,IAAI,CAAE,KAAKR,IAAL,CAAUiB,WADlB,CAEEP,OAAO,CAAE,kBAAY,CACjB,KAAKO,WAAL,EACH,CAJH,CAjCS,CADA,CAwCXC,MAAM,CAAE,UAxCG,CAyCXC,YAAY,CAAE,SAzCH,CADV,CADF,CAHsB,CAAtB,CAAf,CAmDA,KAAKC,UAAL,CAAkBzB,CAAU,CAAC0B,KAAX,CAAiB,KAAKC,SAAtB,CAAiC,KAAKD,KAAtC,CACrB,CA3DE,CA6DV,CAvEC,CAAN","sourcesContent":["define([\r\n        'highcharts',\r\n        'highcharts/highcharts-3d',\r\n        'highcharts/highcharts-more',\r\n        'highcharts/modules/heatmap',\r\n        'highcharts/modules/exporting',\r\n        'highcharts/modules/export-data',\r\n        'highcharts/modules/accessibility',\r\n        'highcharts/modules/no-data-to-display'],\r\n    function(Highcharts) {\r\n        return {\r\n            template: `<div v-bind:id=\"container\"></div>`,\r\n            props: ['container', 'chart', 'lang'],\r\n            data() {\r\n                return { }\r\n            },\r\n            mounted() {\r\n                (this.lang) && Highcharts.setOptions({\r\n                    lang: this.lang,\r\n                    credits: { enabled: false },\r\n                    exporting: {\r\n                        buttons: {\r\n                            contextButton: {\r\n                                menuItems: [{\r\n                                    text: this.lang.downloadPNG,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'image/png'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadJPEG,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'image/jpeg'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadPDF,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'application/pdf'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadSVG,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'image/svg+xml'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadXLS,\r\n                                    onclick: function () {\r\n                                        this.downloadXLS();\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadCSV,\r\n                                    onclick: function () {\r\n                                        this.downloadCSV();\r\n                                    }\r\n                                }],\r\n                                symbol: 'menuball',\r\n                                symbolStroke: '#118AB2'\r\n                            }\r\n                        }\r\n                    }\r\n                });\r\n                this._highchart = Highcharts.chart(this.container, this.chart);\r\n            }\r\n        };\r\n    });"],"file":"chartstatic.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/chartstatic.js"
+  ],
+  "names": [
+    "define",
+    "Highcharts",
+    "template",
+    "props",
+    "data",
+    "mounted",
+    "lang",
+    "setOptions",
+    "credits",
+    "enabled",
+    "exporting",
+    "buttons",
+    "contextButton",
+    "menuItems",
+    "text",
+    "downloadPNG",
+    "onclick",
+    "exportChart",
+    "type",
+    "downloadJPEG",
+    "downloadPDF",
+    "downloadSVG",
+    "downloadXLS",
+    "downloadCSV",
+    "symbol",
+    "symbolStroke",
+    "_highchart",
+    "chart",
+    "container"
+  ],
+  "mappings": "AAAAA,OAAM,kCAAC,CACC,YADD,CAEC,0BAFD,CAGC,4BAHD,CAIC,4BAJD,CAKC,8BALD,CAMC,gCAND,CAOC,kCAPD,CAQC,uCARD,CAAD,CASF,SAASC,CAAT,CAAqB,CACjB,MAAO,CACHC,QAAQ,sCADL,CAEHC,KAAK,CAAE,CAAC,WAAD,CAAc,OAAd,CAAuB,MAAvB,CAFJ,CAGHC,IAHG,gBAGI,CACH,MAAO,EACV,CALE,CAMHC,OANG,mBAMO,CACL,KAAKC,IAAN,EAAeL,CAAU,CAACM,UAAX,CAAsB,CACjCD,IAAI,CAAE,KAAKA,IADsB,CAEjCE,OAAO,CAAE,CAAEC,OAAO,GAAT,CAFwB,CAGjCC,SAAS,CAAE,CACPC,OAAO,CAAE,CACLC,aAAa,CAAE,CACXC,SAAS,CAAE,CAAC,CACRC,IAAI,CAAE,KAAKR,IAAL,CAAUS,WADR,CAERC,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,WADO,CAAjB,CAGH,CANO,CAAD,CAOT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUa,YADlB,CAEEH,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,YADO,CAAjB,CAGH,CANH,CAPS,CAcT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUc,WADlB,CAEEJ,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,iBADO,CAAjB,CAGH,CANH,CAdS,CAqBT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUe,WADlB,CAEEL,OAAO,CAAE,kBAAY,CACjB,KAAKC,WAAL,CAAiB,CACbC,IAAI,CAAE,eADO,CAAjB,CAGH,CANH,CArBS,CA4BT,CACEJ,IAAI,CAAE,KAAKR,IAAL,CAAUgB,WADlB,CAEEN,OAAO,CAAE,kBAAY,CACjB,KAAKM,WAAL,EACH,CAJH,CA5BS,CAiCT,CACER,IAAI,CAAE,KAAKR,IAAL,CAAUiB,WADlB,CAEEP,OAAO,CAAE,kBAAY,CACjB,KAAKO,WAAL,EACH,CAJH,CAjCS,CADA,CAwCXC,MAAM,CAAE,UAxCG,CAyCXC,YAAY,CAAE,SAzCH,CADV,CADF,CAHsB,CAAtB,CAAf,CAmDA,KAAKC,UAAL,CAAkBzB,CAAU,CAAC0B,KAAX,CAAiB,KAAKC,SAAtB,CAAiC,KAAKD,KAAtC,CACrB,CA3DE,CA6DV,CAvEC,CAAN",
+  "sourcesContent": [
+    "define([\r\n        'highcharts',\r\n        'highcharts/highcharts-3d',\r\n        'highcharts/highcharts-more',\r\n        'highcharts/modules/heatmap',\r\n        'highcharts/modules/exporting',\r\n        'highcharts/modules/export-data',\r\n        'highcharts/modules/accessibility',\r\n        'highcharts/modules/no-data-to-display'],\r\n    function(Highcharts) {\r\n        return {\r\n            template: `<div v-bind:id=\"container\"></div>`,\r\n            props: ['container', 'chart', 'lang'],\r\n            data() {\r\n                return { }\r\n            },\r\n            mounted() {\r\n                (this.lang) && Highcharts.setOptions({\r\n                    lang: this.lang,\r\n                    credits: { enabled: false },\r\n                    exporting: {\r\n                        buttons: {\r\n                            contextButton: {\r\n                                menuItems: [{\r\n                                    text: this.lang.downloadPNG,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'image/png'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadJPEG,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'image/jpeg'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadPDF,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'application/pdf'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadSVG,\r\n                                    onclick: function () {\r\n                                        this.exportChart({\r\n                                            type: 'image/svg+xml'\r\n                                        });\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadXLS,\r\n                                    onclick: function () {\r\n                                        this.downloadXLS();\r\n                                    }\r\n                                },{\r\n                                    text: this.lang.downloadCSV,\r\n                                    onclick: function () {\r\n                                        this.downloadCSV();\r\n                                    }\r\n                                }],\r\n                                symbol: 'menuball',\r\n                                symbolStroke: '#118AB2'\r\n                            }\r\n                        }\r\n                    }\r\n                });\r\n                this._highchart = Highcharts.chart(this.container, this.chart);\r\n            }\r\n        };\r\n    });"
+  ],
+  "file": "chartstatic.min.js"
+}
diff --git a/notemyprogress/amd/build/config.min.js b/notemyprogress/amd/build/config.min.js
index f1f306116196fcbb46f9de6d2979b3f5e6b5733d..749ba9734a24406430f073d9a61d2b9db586b779 100644
--- a/notemyprogress/amd/build/config.min.js
+++ b/notemyprogress/amd/build/config.min.js
@@ -1,2 +1,31 @@
-define ("local_notemyprogress/config",[],function(){"use strict";window.requirejs.config({packages:[{name:"highcharts",main:"highcharts"}],paths:{vue:M.cfg.wwwroot+"/local/notemyprogress/js/vue",vuetify:M.cfg.wwwroot+"/local/notemyprogress/js/vuetify",axios:M.cfg.wwwroot+"/local/notemyprogress/js/axios",sortablejs:M.cfg.wwwroot+"/local/notemyprogress/js/sortablejs",draggable:M.cfg.wwwroot+"/local/notemyprogress/js/draggable",datepicker:M.cfg.wwwroot+"/local/notemyprogress/js/datepicker",moment:M.cfg.wwwroot+"/local/notemyprogress/js/moment",momenttimezone:M.cfg.wwwroot+"/local/notemyprogress/js/moment-timezone",alertify:M.cfg.wwwroot+"/local/notemyprogress/js/alertify",highcharts:M.cfg.wwwroot+"/local/notemyprogress/js/highcharts/"},shim:{vue:{exports:"vue"},vuetify:{deps:["vue"],exports:"vuetify"},axios:{exports:"axios"},sortablejs:{deps:["vue"],exports:"sortablejs"},draggable:{deps:["sortablejs"],exports:"draggable"},datepicker:{deps:["vue"],exports:"datepicker"},moment:{deps:["vue"],exports:"moment"},momenttimezone:{exports:"momenttimezone"},alertify:{exports:"alertify"}}})});
+define("local_notemyprogress/config", [], function () {
+  "use strict";
+  window.requirejs.config({
+    packages: [{ name: "highcharts", main: "highcharts" }],
+    paths: {
+      vue: M.cfg.wwwroot + "/local/notemyprogress/js/vue",
+      vuetify: M.cfg.wwwroot + "/local/notemyprogress/js/vuetify",
+      axios: M.cfg.wwwroot + "/local/notemyprogress/js/axios",
+      sortablejs: M.cfg.wwwroot + "/local/notemyprogress/js/sortablejs",
+      draggable: M.cfg.wwwroot + "/local/notemyprogress/js/draggable",
+      datepicker: M.cfg.wwwroot + "/local/notemyprogress/js/datepicker",
+      moment: M.cfg.wwwroot + "/local/notemyprogress/js/moment",
+      momenttimezone:
+        M.cfg.wwwroot + "/local/notemyprogress/js/moment-timezone",
+      alertify: M.cfg.wwwroot + "/local/notemyprogress/js/alertify",
+      highcharts: M.cfg.wwwroot + "/local/notemyprogress/js/highcharts/",
+    },
+    shim: {
+      vue: { exports: "vue" },
+      vuetify: { deps: ["vue"], exports: "vuetify" },
+      axios: { exports: "axios" },
+      sortablejs: { deps: ["vue"], exports: "sortablejs" },
+      draggable: { deps: ["sortablejs"], exports: "draggable" },
+      datepicker: { deps: ["vue"], exports: "datepicker" },
+      moment: { deps: ["vue"], exports: "moment" },
+      momenttimezone: { exports: "momenttimezone" },
+      alertify: { exports: "alertify" },
+    },
+  });
+});
 //# sourceMappingURL=config.min.js.map
diff --git a/notemyprogress/amd/build/config.min.js.map b/notemyprogress/amd/build/config.min.js.map
index 647d90c9a6010736ee52042ac425daf6df0d3d4f..ba8b8c11607041d6ee5740b5d71b13811a473b1d 100644
--- a/notemyprogress/amd/build/config.min.js.map
+++ b/notemyprogress/amd/build/config.min.js.map
@@ -1 +1,27 @@
-{"version":3,"sources":["../src/config.js"],"names":["define","window","requirejs","config","packages","name","main","paths","M","cfg","wwwroot","shim","exports","deps"],"mappings":"AAAAA,OAAM,6BAAC,EAAD,CAAI,UAAW,CACjB,aACAC,MAAM,CAACC,SAAP,CAAiBC,MAAjB,CAAwB,CACpBC,QAAQ,CAAE,CAAC,CACPC,IAAI,CAAE,YADC,CAEPC,IAAI,CAAE,YAFC,CAAD,CADU,CAKpBC,KAAK,CAAE,CACH,IAAQC,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,4BADrB,CAEH,QAAYF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,gCAFzB,CAGH,MAASF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,8BAHtB,CAIH,WAAcF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,mCAJ3B,CAKH,UAAaF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,kCAL1B,CAMH,WAAcF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,mCAN3B,CAOH,OAAUF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,+BAPvB,CAQH,eAAkBF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,wCAR/B,CASH,SAAYF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,iCATzB,CAUH,WAAcF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,oCAV3B,CALa,CAiBpBC,IAAI,CAAE,CACF,IAAQ,CAACC,OAAO,CAAE,KAAV,CADN,CAEF,QAAW,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAiBD,OAAO,CAAE,SAA1B,CAFT,CAGF,MAAS,CAACA,OAAO,CAAE,OAAV,CAHP,CAIF,WAAc,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAgBD,OAAO,CAAE,YAAzB,CAJZ,CAKF,UAAa,CAACC,IAAI,CAAE,CAAC,YAAD,CAAP,CAAuBD,OAAO,CAAE,WAAhC,CALX,CAMF,WAAc,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAgBD,OAAO,CAAE,YAAzB,CANZ,CAOF,OAAU,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAgBD,OAAO,CAAE,QAAzB,CAPR,CAQF,eAAkB,CAACA,OAAO,CAAE,gBAAV,CARhB,CASF,SAAY,CAACA,OAAO,CAAE,UAAV,CATV,CAjBc,CAAxB,CA6BH,CA/BK,CAAN","sourcesContent":["define([],function() {\n    \"use strict\";\n    window.requirejs.config({\n        packages: [{\n            name: 'highcharts',\n            main: 'highcharts'\n        }],\n        paths: {\n            \"vue\" : M.cfg.wwwroot + '/local/notemyprogress/js/vue',\n            \"vuetify\" : M.cfg.wwwroot + '/local/notemyprogress/js/vuetify',\n            \"axios\": M.cfg.wwwroot + '/local/notemyprogress/js/axios',\n            \"sortablejs\": M.cfg.wwwroot + '/local/notemyprogress/js/sortablejs',\n            \"draggable\": M.cfg.wwwroot + '/local/notemyprogress/js/draggable',\n            \"datepicker\": M.cfg.wwwroot + '/local/notemyprogress/js/datepicker',\n            \"moment\": M.cfg.wwwroot + '/local/notemyprogress/js/moment',\n            \"momenttimezone\": M.cfg.wwwroot + '/local/notemyprogress/js/moment-timezone',\n            \"alertify\": M.cfg.wwwroot + '/local/notemyprogress/js/alertify',\n            \"highcharts\": M.cfg.wwwroot + '/local/notemyprogress/js/highcharts/'\n        },\n        shim: {\n            'vue' : {exports: 'vue'},\n            'vuetify': {deps: ['vue'] , exports: 'vuetify'},\n            'axios': {exports: 'axios'},\n            'sortablejs': {deps: ['vue'], exports: 'sortablejs'},\n            'draggable': {deps: ['sortablejs'], exports: 'draggable'},\n            'datepicker': {deps: ['vue'], exports: 'datepicker'},\n            'moment': {deps: ['vue'], exports: 'moment'},\n            'momenttimezone': {exports: 'momenttimezone'},\n            'alertify': {exports: 'alertify'},\n        }\n    });\n});\n"],"file":"config.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/config.js"
+  ],
+  "names": [
+    "define",
+    "window",
+    "requirejs",
+    "config",
+    "packages",
+    "name",
+    "main",
+    "paths",
+    "M",
+    "cfg",
+    "wwwroot",
+    "shim",
+    "exports",
+    "deps"
+  ],
+  "mappings": "AAAAA,OAAM,6BAAC,EAAD,CAAI,UAAW,CACjB,aACAC,MAAM,CAACC,SAAP,CAAiBC,MAAjB,CAAwB,CACpBC,QAAQ,CAAE,CAAC,CACPC,IAAI,CAAE,YADC,CAEPC,IAAI,CAAE,YAFC,CAAD,CADU,CAKpBC,KAAK,CAAE,CACH,IAAQC,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,4BADrB,CAEH,QAAYF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,gCAFzB,CAGH,MAASF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,8BAHtB,CAIH,WAAcF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,mCAJ3B,CAKH,UAAaF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,kCAL1B,CAMH,WAAcF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,mCAN3B,CAOH,OAAUF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,+BAPvB,CAQH,eAAkBF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,wCAR/B,CASH,SAAYF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,iCATzB,CAUH,WAAcF,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,oCAV3B,CALa,CAiBpBC,IAAI,CAAE,CACF,IAAQ,CAACC,OAAO,CAAE,KAAV,CADN,CAEF,QAAW,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAiBD,OAAO,CAAE,SAA1B,CAFT,CAGF,MAAS,CAACA,OAAO,CAAE,OAAV,CAHP,CAIF,WAAc,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAgBD,OAAO,CAAE,YAAzB,CAJZ,CAKF,UAAa,CAACC,IAAI,CAAE,CAAC,YAAD,CAAP,CAAuBD,OAAO,CAAE,WAAhC,CALX,CAMF,WAAc,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAgBD,OAAO,CAAE,YAAzB,CANZ,CAOF,OAAU,CAACC,IAAI,CAAE,CAAC,KAAD,CAAP,CAAgBD,OAAO,CAAE,QAAzB,CAPR,CAQF,eAAkB,CAACA,OAAO,CAAE,gBAAV,CARhB,CASF,SAAY,CAACA,OAAO,CAAE,UAAV,CATV,CAjBc,CAAxB,CA6BH,CA/BK,CAAN",
+  "sourcesContent": [
+    "define([],function() {\n    \"use strict\";\n    window.requirejs.config({\n        packages: [{\n            name: 'highcharts',\n            main: 'highcharts'\n        }],\n        paths: {\n            \"vue\" : M.cfg.wwwroot + '/local/notemyprogress/js/vue',\n            \"vuetify\" : M.cfg.wwwroot + '/local/notemyprogress/js/vuetify',\n            \"axios\": M.cfg.wwwroot + '/local/notemyprogress/js/axios',\n            \"sortablejs\": M.cfg.wwwroot + '/local/notemyprogress/js/sortablejs',\n            \"draggable\": M.cfg.wwwroot + '/local/notemyprogress/js/draggable',\n            \"datepicker\": M.cfg.wwwroot + '/local/notemyprogress/js/datepicker',\n            \"moment\": M.cfg.wwwroot + '/local/notemyprogress/js/moment',\n            \"momenttimezone\": M.cfg.wwwroot + '/local/notemyprogress/js/moment-timezone',\n            \"alertify\": M.cfg.wwwroot + '/local/notemyprogress/js/alertify',\n            \"highcharts\": M.cfg.wwwroot + '/local/notemyprogress/js/highcharts/'\n        },\n        shim: {\n            'vue' : {exports: 'vue'},\n            'vuetify': {deps: ['vue'] , exports: 'vuetify'},\n            'axios': {exports: 'axios'},\n            'sortablejs': {deps: ['vue'], exports: 'sortablejs'},\n            'draggable': {deps: ['sortablejs'], exports: 'draggable'},\n            'datepicker': {deps: ['vue'], exports: 'datepicker'},\n            'moment': {deps: ['vue'], exports: 'moment'},\n            'momenttimezone': {exports: 'momenttimezone'},\n            'alertify': {exports: 'alertify'},\n        }\n    });\n});\n"
+  ],
+  "file": "config.min.js"
+}
diff --git a/notemyprogress/amd/build/datepicker.min.js b/notemyprogress/amd/build/datepicker.min.js
index 57242a46015114037a7a68c6875a1bfe31dcfb1d..95d951bfd1fbe307994468248d80db13e7b47b4a 100644
--- a/notemyprogress/amd/build/datepicker.min.js
+++ b/notemyprogress/amd/build/datepicker.min.js
@@ -1,2 +1,7 @@
-define ("local_notemyprogress/datepicker",["local_notemyprogress/config","datepicker"],function(a,b){return b});
+define("local_notemyprogress/datepicker", [
+  "local_notemyprogress/config",
+  "datepicker",
+], function (a, b) {
+  return b;
+});
 //# sourceMappingURL=datepicker.min.js.map
diff --git a/notemyprogress/amd/build/datepicker.min.js.map b/notemyprogress/amd/build/datepicker.min.js.map
index d03e3b9cab91e2809decc4bd4c4ad1bf6eaf1ed2..6764e1d3d1f9c8b8e8beb12df0a9488efc11de49 100644
--- a/notemyprogress/amd/build/datepicker.min.js.map
+++ b/notemyprogress/amd/build/datepicker.min.js.map
@@ -1 +1,16 @@
-{"version":3,"sources":["../src/datepicker.js"],"names":["define","unused","datepicker"],"mappings":"AAAAA,OAAM,iCAAC,CAAC,2BAAD,CAA8B,YAA9B,CAAD,CAA8C,SAASC,CAAT,CAAiBC,CAAjB,CAA6B,CACzE,MAAOA,CAAAA,CACV,CAFC,CAAN","sourcesContent":["define(['local_notemyprogress/config', 'datepicker'], function(unused, datepicker) {\r\n        return datepicker;\r\n    }\r\n);"],"file":"datepicker.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/datepicker.js"
+  ],
+  "names": [
+    "define",
+    "unused",
+    "datepicker"
+  ],
+  "mappings": "AAAAA,OAAM,iCAAC,CAAC,2BAAD,CAA8B,YAA9B,CAAD,CAA8C,SAASC,CAAT,CAAiBC,CAAjB,CAA6B,CACzE,MAAOA,CAAAA,CACV,CAFC,CAAN",
+  "sourcesContent": [
+    "define(['local_notemyprogress/config', 'datepicker'], function(unused, datepicker) {\r\n        return datepicker;\r\n    }\r\n);"
+  ],
+  "file": "datepicker.min.js"
+}
diff --git a/notemyprogress/amd/build/draggable.min.js b/notemyprogress/amd/build/draggable.min.js
index a21ea8ebc590c4e6ab76c09a215c46adde38c38b..21a9b1428a4296e58f01e8bdfb42ee7d168c3241 100644
--- a/notemyprogress/amd/build/draggable.min.js
+++ b/notemyprogress/amd/build/draggable.min.js
@@ -1,2 +1,7 @@
-define ("local_notemyprogress/draggable",["local_notemyprogress/config","draggable"],function(a,b){return b});
+define("local_notemyprogress/draggable", [
+  "local_notemyprogress/config",
+  "draggable",
+], function (a, b) {
+  return b;
+});
 //# sourceMappingURL=draggable.min.js.map
diff --git a/notemyprogress/amd/build/dropout.min.js.map b/notemyprogress/amd/build/dropout.min.js.map
index 73aa092c28076659366ce944e99a776aebab28c1..53bbf1bb8b8d94bd0cda365dcc9b9711390b1c6d 100644
--- a/notemyprogress/amd/build/dropout.min.js.map
+++ b/notemyprogress/amd/build/dropout.min.js.map
@@ -1 +1,343 @@
-{"version":3,"sources":["../src/dropout.js"],"names":["define","Vue","Vuetify","Axios","Moment","MomentTimezone","Pagination","ChartDynamic","PageHeader","EmailForm","ModulesForm","HelpDialog","init","content","use","component","vue","delimiters","el","vuetify","data","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","errors","pages","dropout","modules_access_colors","week_modules_colors","sessions_evolution_colors","user_grades_colors","selected_cluster","cluster_users","selected_user","search","week_modules_chart_data","week_modules_chart_categories","selected_sections","sessions_evolution_data","user_grades_categories","user_grades_data","modules_dialog","email_users","email_dialog","modulename","moduleid","email_strings","help_dialog","help_contents","beforeMount","clusters","length","set_modules_in_sections","change_cluster","users","mounted","document","querySelector","style","display","computed","methods","get_help_content","contents","title","section_help_title","description","section_help_description","sectionsMap","Map","sectionid","cms","forEach","cm","section","has","set","get","push","sections","modules","selected_users","user","includes","id","change_user","calculate_week_modules_access","calculate_sessions_evolution","calculate_user_grades","weekcompletecms","weekviewedcms","completecms","viewedcms","categories","user_cm","weeks","week","sections_modules","module","complete","viewed","name","position","modules_access_chart_series_viewed","modules_access_chart_series_complete","sessions_data","time_data","sumtime","sumsessions","time","timestamp","sessions","session","start","duration","x","y","sessions_evolution_chart_legend1","yAxis","sessions_evolution_chart_legend2","course_grades","user_grades","user_grade","user_name","firstname","gradeitems","item","finalgrade","grademax","itemname","average_percentage","user_grades_chart_legend","build_modules_access_chart","chart","type","backgroundColor","fontFamily","text","colors","xAxis","allowDecimals","enabled","modules_amount","tooltip","shared","formatter","module_text","module_label","modules_label","points","key","modules_details","plotOptions","series","cursor","point","events","click","open_modules_modal","legend","colorByPoint","modules_access_chart_series_total","total","build_week_modules_chart","crosshair","useHTML","text1","text2","module_text_viewed","viewed_series_name","color","module_text_completed","completed_series_name","colorIndex","build_sessions_evolution_chart","zoomType","sessions_evolution_chart_xaxis1","sessions_evolution_chart_xaxis2","opposite","date_label","calculate_timezone_date_string","get_sessions_evolution_tooltip","build_user_grades_chart","max","labels","format","user_grades_chart_yaxis","header","footer","user_grades_chart_view_activity","body","gradecount","user_grades_chart_tooltip_no_graded","get_user_grades_tooltip","url","M","cfg","wwwroot","itemmodule","coursemoduleid","window","open","sessions_suffix","sessions_prefix","time_prefix","session_text","sessions_text","convert_time","serie_name","average","isInt","toFixed","dat","weekday","monthday","month","tz","zone","day","date","Intl","DateTimeFormat","resolvedOptions","timeZone","Date","getDay","getDate","getMonth","getHours","getMinutes","getSeconds","weekdays","shortMonths","h","hours_short","m","minutes_short","s","seconds_short","hours","Math","floor","minutes","seconds","weekposition","Number","isInteger","interactions","i","get_user_module","table_headers","headers","value","align","sortable","thead_name","thead_lastname","thead_progress","get_picture_url","get_user_fullname","lastname","get_username","username","see_profile","get_progress_message","finished_label","finisheds_label","of_conector","total_cms","get_progress_percentage","progress_percentage","get_student_grade","grade","coursegrade","maxgrade","student_grade","max_grade","get_sendmail_user_text","send_mail_to_user","sendmail","subject","subject_prefix","update_email_dialog","update_modules_dialog","n","generate_dropout_data","action","profile","method","params","then","response","status","ok","location","reload","error_messages","error_network","catch","api_error_network","finally","open_chart_help","group_students_help_title","group_students_help_description_p1","group_students_help_description_p2","modules_access_help_title","modules_access_help_description_p1","modules_access_help_description_p2","modules_access_help_description_p3","week_modules_help_title","week_modules_help_description_p1","week_modules_help_description_p2","week_modules_help_description_p3","sessions_evolution_help_title","sessions_evolution_help_description_p1","sessions_evolution_help_description_p2","sessions_evolution_help_description_p3","user_grades_help_title","user_grades_help_description_p1","user_grades_help_description_p2","user_grades_help_description_p3","update_help_dialog","get_timezone","information","ss_change_timezone"],"mappings":"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","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/momenttimezone\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/emailform\",\r\n        \"local_notemyprogress/modulesform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, MomentTimezone, Pagination, ChartDynamic, PageHeader, EmailForm, ModulesForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('emailform', EmailForm);\r\n            Vue.component('modulesform', ModulesForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#dropout\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        dropout: content.dropout,\r\n                        modules_access_colors: content.modules_access_colors,\r\n                        week_modules_colors: content.week_modules_colors,\r\n                        sessions_evolution_colors: content.sessions_evolution_colors,\r\n                        user_grades_colors: content.user_grades_colors,\r\n                        selected_cluster: [],\r\n                        cluster_users: [],\r\n                        selected_user: null,\r\n                        search: null,\r\n                        week_modules_chart_data: [],\r\n                        week_modules_chart_categories: [],\r\n                        selected_sections: [],\r\n                        sessions_evolution_data: [],\r\n                        user_grades_categories: [],\r\n                        user_grades_data: [],\r\n                        modules_dialog: false,\r\n\r\n                        email_users: [],\r\n                        email_dialog : false,\r\n                        modulename : \"\",\r\n                        moduleid : false,\r\n                        email_strings: content.strings.email_strings,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    if (this.dropout.clusters.length) {\r\n                        this.set_modules_in_sections();\r\n                        this.selected_cluster = this.dropout.clusters[0];\r\n                        this.change_cluster(this.selected_cluster.users);\r\n                    };\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#dropout\").style.display = \"block\";\r\n                },\r\n                computed :{\r\n\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    set_modules_in_sections() {\r\n                        let sectionsMap = new Map();\r\n                        let sectionid = 0, modules = [];\r\n                        this.dropout.cms.forEach(cm => {\r\n                            sectionid = Number(cm.section);\r\n                            if (!sectionsMap.has(sectionid)) {\r\n                                sectionsMap.set(sectionid, [cm]);\r\n                            } else {\r\n                                sectionsMap.get(sectionid).push(cm);\r\n                            }\r\n                        });\r\n                        this.dropout.sections.forEach(section => {\r\n                            sectionid = Number(section.sectionid);\r\n                            section.sectionid = sectionid;\r\n                            section.modules = (sectionsMap.has(sectionid)) ? sectionsMap.get(sectionid) : [];\r\n                        });\r\n                    },\r\n\r\n                    change_cluster(users) {\r\n                        let selected_users = [];\r\n                        this.dropout.users.forEach(user => {\r\n                            if (users.includes(user.id)) {\r\n                                selected_users.push(user);\r\n                            }\r\n                        });\r\n                        if (selected_users.length) {\r\n                            this.cluster_users = selected_users;\r\n                            let user = this.cluster_users[0];\r\n                            this.change_user(user);\r\n                        } else {\r\n                            this.cluster_users = [];\r\n                            this.selected_user = null;\r\n                        }\r\n                    },\r\n\r\n                    change_user(user) {\r\n                        this.selected_user = user;\r\n                        this.calculate_week_modules_access();\r\n                        this.calculate_sessions_evolution();\r\n                        this.calculate_user_grades();\r\n                    },\r\n\r\n                    calculate_week_modules_access() {\r\n                        let sectionid = 0, moduleid = 0, weekcompletecms = 0, weekviewedcms = 0;\r\n                        let modules = [], completecms = [], viewedcms = [], categories = [];\r\n                        let user_cm;\r\n                        this.dropout.weeks.forEach(week => {\r\n                            weekcompletecms = 0, weekviewedcms = 0;\r\n                            week.sections.forEach(section => {\r\n                                sectionid = Number(section.sectionid);\r\n                                section.sectionid = sectionid;\r\n\r\n                                modules = this.sections_modules(sectionid);\r\n                                modules.forEach(module => {\r\n                                    moduleid = Number(module.id);\r\n                                    module.id = moduleid;\r\n\r\n                                    user_cm = this.selected_user.cms.modules[`cm${module.id}`];\r\n                                    if (user_cm) {\r\n                                        (user_cm.complete) && weekcompletecms++;\r\n                                        (user_cm.viewed) && weekviewedcms++;\r\n                                    }\r\n                                });\r\n                            });\r\n                            completecms.push(weekcompletecms);\r\n                            viewedcms.push(weekviewedcms);\r\n                            categories.push(`${week.name} ${(week.position + 1)}`);\r\n                        });\r\n                        this.week_modules_chart_categories = categories;\r\n                        this.week_modules_chart_data = [\r\n                            { name: this.strings.modules_access_chart_series_viewed, data: viewedcms },\r\n                            { name: this.strings.modules_access_chart_series_complete, data: completecms }\r\n                        ];\r\n                    },\r\n\r\n                    calculate_sessions_evolution() {\r\n                        let sessions_data = [], time_data = [];\r\n                        let sumtime = 0, sumsessions = 0, time = 0, timestamp = 0;\r\n                        this.selected_user.sessions.forEach(session => {\r\n                            timestamp = Number(session.start) * 1000;\r\n                            time = (Number(session.duration)) / 60;\r\n                            sumtime += time;\r\n                            sumsessions++;\r\n                            sessions_data.push({ x: timestamp, y: sumsessions });\r\n                            time_data.push({ x: timestamp, y: sumtime });\r\n                        });\r\n                        this.sessions_evolution_data = [\r\n                            { name: this.strings.sessions_evolution_chart_legend1, yAxis: 0, data: sessions_data },\r\n                            { name: this.strings.sessions_evolution_chart_legend2, yAxis: 1, data: time_data },\r\n                        ];\r\n                    },\r\n\r\n                    calculate_user_grades() {\r\n                        let categories = [], course_grades = [], user_grades = [];\r\n                        let user_grade = 0, user_name = this.selected_user.firstname;\r\n                        if (this.selected_user.gradeitems) {\r\n                            this.selected_user.gradeitems.forEach(item => {\r\n                                user_grade = (Number(item.finalgrade) * 100) / Number(item.grademax);\r\n                                categories.push(item.itemname);\r\n                                course_grades.push(item.average_percentage);\r\n                                user_grades.push(user_grade);\r\n                            });\r\n                            this.user_grades_data = [\r\n                                { name: user_name, data: user_grades },\r\n                                { name: this.strings.user_grades_chart_legend, data: course_grades },\r\n                            ];\r\n                            this.user_grades_categories = categories;\r\n                        }\r\n                    },\r\n\r\n                    build_modules_access_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = { text: null};\r\n                        chart.colors = this.modules_access_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                enabled: true,\r\n                                text: this.strings.modules_amount,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function () {\r\n                                let module_text = (this.y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                return '<b>' + this.points[0].key + '</b>: ' + this.y + ' ' + module_text + '<br/>'\r\n                                    + '<i>'+ vue.strings.modules_details + '<i/>';\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.open_modules_modal(this.x);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        },\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: [\r\n                                {name: this.strings.modules_access_chart_series_viewed, y: this.selected_user.cms.viewed},\r\n                                {name: this.strings.modules_access_chart_series_complete, y: this.selected_user.cms.complete},\r\n                                {name: this.strings.modules_access_chart_series_total, y: this.selected_user.cms.total}\r\n                            ]\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_week_modules_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.week_modules_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.week_modules_chart_categories,\r\n                            title: {\r\n                                text: null\r\n                            },\r\n                            crosshair: true\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                text: this.strings.modules_amount,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let text1 = '', text2 = '';\r\n                                if (this.points[0]) {\r\n                                    let module_text_viewed = (this.points[0].y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                    let viewed_series_name = this.points[0].series.name;\r\n                                    text1 = `<b style=\"color: ${this.points[0].color}\">${viewed_series_name}: </b>\r\n                                            ${this.points[0].y} ${module_text_viewed}<br/>`;\r\n                                }\r\n                                if (this.points[1]) {\r\n                                    let module_text_completed = (this.points[1].y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                    let completed_series_name = this.points[1].series.name;\r\n                                    text2 = `<b style=\"color: ${this.points[1].color}\">${completed_series_name}: </b>\r\n                                            ${this.points[1].y} ${module_text_completed}<br/>`;\r\n                                }\r\n                                return `${this.x} <br/> ${text1}${text2} <i>${vue.strings.modules_details}<i/>`;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.open_modules_modal(this.colorIndex, this.x);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.week_modules_chart_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_sessions_evolution_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            zoomType: 'x',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.sessions_evolution_colors;\r\n                        chart.xAxis = {\r\n                            type: 'datetime'\r\n                        };\r\n                        chart.yAxis = [{\r\n                            allowDecimals: false,\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis1 }\r\n                        }, {\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis2 },\r\n                            opposite: true\r\n                        }];\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let date_label = vue.calculate_timezone_date_string(this.x);\r\n                                let text1 = (this.points[0]) ? vue.get_sessions_evolution_tooltip(this.points[0]) : '';\r\n                                let text2 = (this.points[1]) ? vue.get_sessions_evolution_tooltip(this.points[1]) : '';\r\n                                return `<small>${date_label}</small><br/>${text1}${text2}`;\r\n                            }\r\n                        };\r\n                        chart.series = this.sessions_evolution_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_user_grades_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.user_grades_colors;\r\n                        chart.xAxis = {\r\n                            crosshair: true,\r\n                            categories: this.user_grades_categories,\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            max: 100,\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                            title: { text: this.strings.user_grades_chart_yaxis }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let itemname = this.x;\r\n                                let position = this.points[0].point.x;\r\n                                let item = vue.selected_user.gradeitems[position];\r\n                                let header = `<small>${itemname}</small><br/>`;\r\n                                let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;\r\n                                let body = '';\r\n                                if (item.gradecount == 0) {\r\n                                    body = vue.strings.user_grades_chart_tooltip_no_graded;\r\n                                } else {\r\n                                    let text1 = (this.points[0]) ? vue.get_user_grades_tooltip(this.points[0], item) : '';\r\n                                    let text2 = (this.points[1]) ? vue.get_user_grades_tooltip(this.points[1], item) : '';\r\n                                    body = `${text1}${text2}${footer}`;\r\n                                }\r\n                                return `${header}${body}`;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            let item = vue.selected_user.gradeitems[position];\r\n                                            let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;\r\n                                            window.open(url, '_blank');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.user_grades_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    get_sessions_evolution_tooltip (point) {\r\n                        let text = '', sessions, sessions_suffix, sessions_prefix, time_prefix, time;\r\n                        if (point.colorIndex == 0) {\r\n                            sessions = point.y;\r\n                            sessions_suffix = (sessions == 1) ? vue.strings.session_text : vue.strings.sessions_text;\r\n                            sessions_prefix = point.series.name;\r\n                            text = `<b style=\"color: ${point.color}\">${sessions_prefix}: </b>\r\n                                     ${sessions} ${sessions_suffix}<br/>`;\r\n                        } else {\r\n                            time_prefix = point.series.name;\r\n                            time = this.convert_time(point.y * 60);\r\n                            text = `<b style=\"color: ${point.color}\">${time_prefix}: </b>\r\n                                    ${time}<br/>`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_user_grades_tooltip (point, item) {\r\n                        let serie_name = point.series.name, user_grade = 0;\r\n                        let finalgrade = Number(item.finalgrade), average = Number(item.average), grademax = Number(item.grademax);\r\n                        grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);\r\n                        if (point.colorIndex == 0) {\r\n                            user_grade = this.isInt(finalgrade) ? finalgrade : finalgrade.toFixed(2);\r\n                        } else {\r\n                            user_grade = this.isInt(average) ? average : average.toFixed(2);\r\n                        }\r\n                        return `<b style=\"color: ${point.color}\">${serie_name}: </b>\r\n                                     ${user_grade}/${grademax}<br/>`;\r\n                    },\r\n\r\n                    calculate_timezone_date_string(timestamp) {\r\n                        let dat, weekday, monthday, month, time;\r\n                        if (Moment.tz.zone(this.timezone)) {\r\n                            dat = Moment(timestamp).tz(this.timezone);\r\n                            weekday = dat.day();\r\n                            monthday = dat.date();\r\n                            month = dat.month();\r\n                            time = dat.format('HH:mm:ss');\r\n                        } else {\r\n                            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n                            dat =  new Date(timestamp);\r\n                            weekday = dat.getDay();\r\n                            monthday = dat.getDate();\r\n                            month = dat.getMonth();\r\n                            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;\r\n                        }\r\n                        weekday = this.strings.chart.weekdays[weekday];\r\n                        month = this.strings.chart.shortMonths[month];\r\n                        return `${weekday}, ${month} ${monthday}, ${time}`;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 60; // pasar los minutos a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    open_modules_modal(type, weekposition){\r\n                        let sections = this.dropout.sections;\r\n                        if (Number.isInteger(weekposition)) {\r\n                            sections = [];\r\n                            let section;\r\n                            let week = this.dropout.weeks[weekposition];\r\n                            week.sections.forEach(item => {\r\n                                section = {\r\n                                    sectionid: item.sectionid,\r\n                                    name: item.name,\r\n                                    modules: this.sections_modules(item.sectionid)\r\n                                };\r\n                                sections.push(section);\r\n                            });\r\n                        }\r\n                        sections.forEach(section => {\r\n                            section.modules.forEach(module => {\r\n                                module.complete = false;\r\n                                module.viewed = false;\r\n                                module.interactions = 0;\r\n                                let user_cm = this.selected_user.cms.modules[`cm${module.id}`];\r\n                                if (user_cm) {\r\n                                    module.complete = user_cm.complete;\r\n                                    module.viewed = user_cm.viewed;\r\n                                    module.interactions = user_cm.interactions;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        this.selected_sections = sections;\r\n                        this.modules_dialog = true;\r\n                    },\r\n\r\n                    sections_modules(sectionid) {\r\n                        let modules = [];\r\n                        let sections = this.dropout.sections;\r\n                        for (let i = 0; i < sections.length; i++) {\r\n                            if (sections[i].sectionid == sectionid) {\r\n                                if (sections[i].modules) {\r\n                                    modules = sections[i].modules;\r\n                                }\r\n                                break;\r\n                            }\r\n                        }\r\n                        return modules;\r\n                    },\r\n\r\n                    get_user_module(moduleid) {\r\n                        let module;\r\n                        let cms = this.selected_user.cms.modules;\r\n                        for (let i = 0; i < cms.length; i++) {\r\n                            cms[i].id = Number(cms[i].id);\r\n                            if (cms[i].id == moduleid) {\r\n                                module = cms[i];\r\n                                break;\r\n                            }\r\n                        }\r\n                        return module;\r\n                    },\r\n\r\n                    table_headers(){\r\n                        let headers = [\r\n                            { text: '', value : 'id', align : 'center', sortable : false},\r\n                            { text: this.strings.thead_name , value : 'firstname'},\r\n                            { text: this.strings.thead_lastname , value : 'lastname'},\r\n                            { text: this.strings.thead_progress , value : 'progress_percentage'},\r\n                        ];\r\n                        return headers;\r\n                    },\r\n\r\n                    get_picture_url(userid){\r\n                        return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;\r\n                    },\r\n\r\n                    get_user_fullname(){\r\n                        return `${this.selected_user.firstname} ${this.selected_user.lastname}`;\r\n                    },\r\n\r\n                    get_username(){\r\n                        return `@${this.selected_user.username}`;\r\n                    },\r\n\r\n                    see_profile () {\r\n                        let id = this.selected_user.id;\r\n                        let url = M.cfg.wwwroot + '/user/view.php?id='+id+'&course='+vue.courseid;\r\n                        window.open(url);\r\n                    },\r\n\r\n                    get_progress_message(){\r\n                        let module_label = this.strings.modules_label;\r\n                        let finished_label = this.strings.finisheds_label;\r\n                        if (this.selected_user.cms.complete == 1) {\r\n                            module_label = this.strings.module_label;\r\n                            finished_label = this.strings.finished_label;\r\n                        }\r\n                        return `${this.selected_user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.dropout.total_cms}`;\r\n                    },\r\n\r\n                    get_progress_percentage() {\r\n                        return `${this.selected_user.progress_percentage} %`;\r\n                    },\r\n\r\n                    get_student_grade() {\r\n                        let grade = this.selected_user.coursegrade;\r\n                        grade.finalgrade = Number(grade.finalgrade);\r\n                        grade.maxgrade = Number(grade.maxgrade);\r\n                        let student_grade = this.isInt(grade.finalgrade) ? grade.finalgrade : grade.finalgrade.toFixed(2);\r\n                        let max_grade = this.isInt(grade.maxgrade) ? grade.maxgrade : grade.maxgrade.toFixed(2);\r\n                        return `${student_grade}/${max_grade}`;\r\n                    },\r\n\r\n                    get_sendmail_user_text() {\r\n                        return `${this.strings.send_mail_to_user} ${this.selected_user.firstname}`;\r\n                    },\r\n\r\n                    sendmail(type) {\r\n                        this.strings.email_strings.subject = this.strings.email_strings.subject_prefix;\r\n                        this.modulename = \"course\";\r\n                        this.moduleid = this.courseid;\r\n                        if (type == 1) {\r\n                            this.email_users = [this.selected_user];\r\n                            this.email_dialog = true;\r\n                        } else if (type == 2) {\r\n                            this.email_users = this.cluster_users;\r\n                            this.email_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_email_dialog (value) {\r\n                        this.email_dialog = value;\r\n                    },\r\n\r\n                    update_modules_dialog (value) {\r\n                        this.modules_dialog = value;\r\n                    },\r\n\r\n                    isInt(n) {\r\n                        return n % 1 === 0;\r\n                    },\r\n\r\n                    generate_dropout_data(){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"dropoutdata\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                location.reload();\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"group_students\") {\r\n                            contents.push({\r\n                                title: this.strings.group_students_help_title,\r\n                                description: this.strings.group_students_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.group_students_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"modules_access\") {\r\n                            contents.push({\r\n                                title: this.strings.modules_access_help_title,\r\n                                description: this.strings.modules_access_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"week_modules\") {\r\n                            contents.push({\r\n                                title: this.strings.week_modules_help_title,\r\n                                description: this.strings.week_modules_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.week_modules_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.week_modules_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"sessions_evolution\") {\r\n                            contents.push({\r\n                                title: this.strings.sessions_evolution_help_title,\r\n                                description: this.strings.sessions_evolution_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"user_grades\") {\r\n                            contents.push({\r\n                                title: this.strings.user_grades_help_title,\r\n                                description: this.strings.user_grades_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"dropout.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/dropout.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "MomentTimezone",
+    "Pagination",
+    "ChartDynamic",
+    "PageHeader",
+    "EmailForm",
+    "ModulesForm",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "errors",
+    "pages",
+    "dropout",
+    "modules_access_colors",
+    "week_modules_colors",
+    "sessions_evolution_colors",
+    "user_grades_colors",
+    "selected_cluster",
+    "cluster_users",
+    "selected_user",
+    "search",
+    "week_modules_chart_data",
+    "week_modules_chart_categories",
+    "selected_sections",
+    "sessions_evolution_data",
+    "user_grades_categories",
+    "user_grades_data",
+    "modules_dialog",
+    "email_users",
+    "email_dialog",
+    "modulename",
+    "moduleid",
+    "email_strings",
+    "help_dialog",
+    "help_contents",
+    "beforeMount",
+    "clusters",
+    "length",
+    "set_modules_in_sections",
+    "change_cluster",
+    "users",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "computed",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "sectionsMap",
+    "Map",
+    "sectionid",
+    "cms",
+    "forEach",
+    "cm",
+    "section",
+    "has",
+    "set",
+    "get",
+    "push",
+    "sections",
+    "modules",
+    "selected_users",
+    "user",
+    "includes",
+    "id",
+    "change_user",
+    "calculate_week_modules_access",
+    "calculate_sessions_evolution",
+    "calculate_user_grades",
+    "weekcompletecms",
+    "weekviewedcms",
+    "completecms",
+    "viewedcms",
+    "categories",
+    "user_cm",
+    "weeks",
+    "week",
+    "sections_modules",
+    "module",
+    "complete",
+    "viewed",
+    "name",
+    "position",
+    "modules_access_chart_series_viewed",
+    "modules_access_chart_series_complete",
+    "sessions_data",
+    "time_data",
+    "sumtime",
+    "sumsessions",
+    "time",
+    "timestamp",
+    "sessions",
+    "session",
+    "start",
+    "duration",
+    "x",
+    "y",
+    "sessions_evolution_chart_legend1",
+    "yAxis",
+    "sessions_evolution_chart_legend2",
+    "course_grades",
+    "user_grades",
+    "user_grade",
+    "user_name",
+    "firstname",
+    "gradeitems",
+    "item",
+    "finalgrade",
+    "grademax",
+    "itemname",
+    "average_percentage",
+    "user_grades_chart_legend",
+    "build_modules_access_chart",
+    "chart",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "text",
+    "colors",
+    "xAxis",
+    "allowDecimals",
+    "enabled",
+    "modules_amount",
+    "tooltip",
+    "shared",
+    "formatter",
+    "module_text",
+    "module_label",
+    "modules_label",
+    "points",
+    "key",
+    "modules_details",
+    "plotOptions",
+    "series",
+    "cursor",
+    "point",
+    "events",
+    "click",
+    "open_modules_modal",
+    "legend",
+    "colorByPoint",
+    "modules_access_chart_series_total",
+    "total",
+    "build_week_modules_chart",
+    "crosshair",
+    "useHTML",
+    "text1",
+    "text2",
+    "module_text_viewed",
+    "viewed_series_name",
+    "color",
+    "module_text_completed",
+    "completed_series_name",
+    "colorIndex",
+    "build_sessions_evolution_chart",
+    "zoomType",
+    "sessions_evolution_chart_xaxis1",
+    "sessions_evolution_chart_xaxis2",
+    "opposite",
+    "date_label",
+    "calculate_timezone_date_string",
+    "get_sessions_evolution_tooltip",
+    "build_user_grades_chart",
+    "max",
+    "labels",
+    "format",
+    "user_grades_chart_yaxis",
+    "header",
+    "footer",
+    "user_grades_chart_view_activity",
+    "body",
+    "gradecount",
+    "user_grades_chart_tooltip_no_graded",
+    "get_user_grades_tooltip",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "itemmodule",
+    "coursemoduleid",
+    "window",
+    "open",
+    "sessions_suffix",
+    "sessions_prefix",
+    "time_prefix",
+    "session_text",
+    "sessions_text",
+    "convert_time",
+    "serie_name",
+    "average",
+    "isInt",
+    "toFixed",
+    "dat",
+    "weekday",
+    "monthday",
+    "month",
+    "tz",
+    "zone",
+    "day",
+    "date",
+    "Intl",
+    "DateTimeFormat",
+    "resolvedOptions",
+    "timeZone",
+    "Date",
+    "getDay",
+    "getDate",
+    "getMonth",
+    "getHours",
+    "getMinutes",
+    "getSeconds",
+    "weekdays",
+    "shortMonths",
+    "h",
+    "hours_short",
+    "m",
+    "minutes_short",
+    "s",
+    "seconds_short",
+    "hours",
+    "Math",
+    "floor",
+    "minutes",
+    "seconds",
+    "weekposition",
+    "Number",
+    "isInteger",
+    "interactions",
+    "i",
+    "get_user_module",
+    "table_headers",
+    "headers",
+    "value",
+    "align",
+    "sortable",
+    "thead_name",
+    "thead_lastname",
+    "thead_progress",
+    "get_picture_url",
+    "get_user_fullname",
+    "lastname",
+    "get_username",
+    "username",
+    "see_profile",
+    "get_progress_message",
+    "finished_label",
+    "finisheds_label",
+    "of_conector",
+    "total_cms",
+    "get_progress_percentage",
+    "progress_percentage",
+    "get_student_grade",
+    "grade",
+    "coursegrade",
+    "maxgrade",
+    "student_grade",
+    "max_grade",
+    "get_sendmail_user_text",
+    "send_mail_to_user",
+    "sendmail",
+    "subject",
+    "subject_prefix",
+    "update_email_dialog",
+    "update_modules_dialog",
+    "n",
+    "generate_dropout_data",
+    "action",
+    "profile",
+    "method",
+    "params",
+    "then",
+    "response",
+    "status",
+    "ok",
+    "location",
+    "reload",
+    "error_messages",
+    "error_network",
+    "catch",
+    "api_error_network",
+    "finally",
+    "open_chart_help",
+    "group_students_help_title",
+    "group_students_help_description_p1",
+    "group_students_help_description_p2",
+    "modules_access_help_title",
+    "modules_access_help_description_p1",
+    "modules_access_help_description_p2",
+    "modules_access_help_description_p3",
+    "week_modules_help_title",
+    "week_modules_help_description_p1",
+    "week_modules_help_description_p2",
+    "week_modules_help_description_p3",
+    "sessions_evolution_help_title",
+    "sessions_evolution_help_description_p1",
+    "sessions_evolution_help_description_p2",
+    "sessions_evolution_help_description_p3",
+    "user_grades_help_title",
+    "user_grades_help_description_p1",
+    "user_grades_help_description_p2",
+    "user_grades_help_description_p3",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/momenttimezone\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/emailform\",\r\n        \"local_notemyprogress/modulesform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, MomentTimezone, Pagination, ChartDynamic, PageHeader, EmailForm, ModulesForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('emailform', EmailForm);\r\n            Vue.component('modulesform', ModulesForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#dropout\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        dropout: content.dropout,\r\n                        modules_access_colors: content.modules_access_colors,\r\n                        week_modules_colors: content.week_modules_colors,\r\n                        sessions_evolution_colors: content.sessions_evolution_colors,\r\n                        user_grades_colors: content.user_grades_colors,\r\n                        selected_cluster: [],\r\n                        cluster_users: [],\r\n                        selected_user: null,\r\n                        search: null,\r\n                        week_modules_chart_data: [],\r\n                        week_modules_chart_categories: [],\r\n                        selected_sections: [],\r\n                        sessions_evolution_data: [],\r\n                        user_grades_categories: [],\r\n                        user_grades_data: [],\r\n                        modules_dialog: false,\r\n\r\n                        email_users: [],\r\n                        email_dialog : false,\r\n                        modulename : \"\",\r\n                        moduleid : false,\r\n                        email_strings: content.strings.email_strings,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    if (this.dropout.clusters.length) {\r\n                        this.set_modules_in_sections();\r\n                        this.selected_cluster = this.dropout.clusters[0];\r\n                        this.change_cluster(this.selected_cluster.users);\r\n                    };\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#dropout\").style.display = \"block\";\r\n                },\r\n                computed :{\r\n\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    set_modules_in_sections() {\r\n                        let sectionsMap = new Map();\r\n                        let sectionid = 0, modules = [];\r\n                        this.dropout.cms.forEach(cm => {\r\n                            sectionid = Number(cm.section);\r\n                            if (!sectionsMap.has(sectionid)) {\r\n                                sectionsMap.set(sectionid, [cm]);\r\n                            } else {\r\n                                sectionsMap.get(sectionid).push(cm);\r\n                            }\r\n                        });\r\n                        this.dropout.sections.forEach(section => {\r\n                            sectionid = Number(section.sectionid);\r\n                            section.sectionid = sectionid;\r\n                            section.modules = (sectionsMap.has(sectionid)) ? sectionsMap.get(sectionid) : [];\r\n                        });\r\n                    },\r\n\r\n                    change_cluster(users) {\r\n                        let selected_users = [];\r\n                        this.dropout.users.forEach(user => {\r\n                            if (users.includes(user.id)) {\r\n                                selected_users.push(user);\r\n                            }\r\n                        });\r\n                        if (selected_users.length) {\r\n                            this.cluster_users = selected_users;\r\n                            let user = this.cluster_users[0];\r\n                            this.change_user(user);\r\n                        } else {\r\n                            this.cluster_users = [];\r\n                            this.selected_user = null;\r\n                        }\r\n                    },\r\n\r\n                    change_user(user) {\r\n                        this.selected_user = user;\r\n                        this.calculate_week_modules_access();\r\n                        this.calculate_sessions_evolution();\r\n                        this.calculate_user_grades();\r\n                    },\r\n\r\n                    calculate_week_modules_access() {\r\n                        let sectionid = 0, moduleid = 0, weekcompletecms = 0, weekviewedcms = 0;\r\n                        let modules = [], completecms = [], viewedcms = [], categories = [];\r\n                        let user_cm;\r\n                        this.dropout.weeks.forEach(week => {\r\n                            weekcompletecms = 0, weekviewedcms = 0;\r\n                            week.sections.forEach(section => {\r\n                                sectionid = Number(section.sectionid);\r\n                                section.sectionid = sectionid;\r\n\r\n                                modules = this.sections_modules(sectionid);\r\n                                modules.forEach(module => {\r\n                                    moduleid = Number(module.id);\r\n                                    module.id = moduleid;\r\n\r\n                                    user_cm = this.selected_user.cms.modules[`cm${module.id}`];\r\n                                    if (user_cm) {\r\n                                        (user_cm.complete) && weekcompletecms++;\r\n                                        (user_cm.viewed) && weekviewedcms++;\r\n                                    }\r\n                                });\r\n                            });\r\n                            completecms.push(weekcompletecms);\r\n                            viewedcms.push(weekviewedcms);\r\n                            categories.push(`${week.name} ${(week.position + 1)}`);\r\n                        });\r\n                        this.week_modules_chart_categories = categories;\r\n                        this.week_modules_chart_data = [\r\n                            { name: this.strings.modules_access_chart_series_viewed, data: viewedcms },\r\n                            { name: this.strings.modules_access_chart_series_complete, data: completecms }\r\n                        ];\r\n                    },\r\n\r\n                    calculate_sessions_evolution() {\r\n                        let sessions_data = [], time_data = [];\r\n                        let sumtime = 0, sumsessions = 0, time = 0, timestamp = 0;\r\n                        this.selected_user.sessions.forEach(session => {\r\n                            timestamp = Number(session.start) * 1000;\r\n                            time = (Number(session.duration)) / 60;\r\n                            sumtime += time;\r\n                            sumsessions++;\r\n                            sessions_data.push({ x: timestamp, y: sumsessions });\r\n                            time_data.push({ x: timestamp, y: sumtime });\r\n                        });\r\n                        this.sessions_evolution_data = [\r\n                            { name: this.strings.sessions_evolution_chart_legend1, yAxis: 0, data: sessions_data },\r\n                            { name: this.strings.sessions_evolution_chart_legend2, yAxis: 1, data: time_data },\r\n                        ];\r\n                    },\r\n\r\n                    calculate_user_grades() {\r\n                        let categories = [], course_grades = [], user_grades = [];\r\n                        let user_grade = 0, user_name = this.selected_user.firstname;\r\n                        if (this.selected_user.gradeitems) {\r\n                            this.selected_user.gradeitems.forEach(item => {\r\n                                user_grade = (Number(item.finalgrade) * 100) / Number(item.grademax);\r\n                                categories.push(item.itemname);\r\n                                course_grades.push(item.average_percentage);\r\n                                user_grades.push(user_grade);\r\n                            });\r\n                            this.user_grades_data = [\r\n                                { name: user_name, data: user_grades },\r\n                                { name: this.strings.user_grades_chart_legend, data: course_grades },\r\n                            ];\r\n                            this.user_grades_categories = categories;\r\n                        }\r\n                    },\r\n\r\n                    build_modules_access_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = { text: null};\r\n                        chart.colors = this.modules_access_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                enabled: true,\r\n                                text: this.strings.modules_amount,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function () {\r\n                                let module_text = (this.y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                return '<b>' + this.points[0].key + '</b>: ' + this.y + ' ' + module_text + '<br/>'\r\n                                    + '<i>'+ vue.strings.modules_details + '<i/>';\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.open_modules_modal(this.x);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        },\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: [\r\n                                {name: this.strings.modules_access_chart_series_viewed, y: this.selected_user.cms.viewed},\r\n                                {name: this.strings.modules_access_chart_series_complete, y: this.selected_user.cms.complete},\r\n                                {name: this.strings.modules_access_chart_series_total, y: this.selected_user.cms.total}\r\n                            ]\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_week_modules_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.week_modules_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.week_modules_chart_categories,\r\n                            title: {\r\n                                text: null\r\n                            },\r\n                            crosshair: true\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                text: this.strings.modules_amount,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let text1 = '', text2 = '';\r\n                                if (this.points[0]) {\r\n                                    let module_text_viewed = (this.points[0].y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                    let viewed_series_name = this.points[0].series.name;\r\n                                    text1 = `<b style=\"color: ${this.points[0].color}\">${viewed_series_name}: </b>\r\n                                            ${this.points[0].y} ${module_text_viewed}<br/>`;\r\n                                }\r\n                                if (this.points[1]) {\r\n                                    let module_text_completed = (this.points[1].y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                    let completed_series_name = this.points[1].series.name;\r\n                                    text2 = `<b style=\"color: ${this.points[1].color}\">${completed_series_name}: </b>\r\n                                            ${this.points[1].y} ${module_text_completed}<br/>`;\r\n                                }\r\n                                return `${this.x} <br/> ${text1}${text2} <i>${vue.strings.modules_details}<i/>`;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.open_modules_modal(this.colorIndex, this.x);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.week_modules_chart_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_sessions_evolution_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            zoomType: 'x',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.sessions_evolution_colors;\r\n                        chart.xAxis = {\r\n                            type: 'datetime'\r\n                        };\r\n                        chart.yAxis = [{\r\n                            allowDecimals: false,\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis1 }\r\n                        }, {\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis2 },\r\n                            opposite: true\r\n                        }];\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let date_label = vue.calculate_timezone_date_string(this.x);\r\n                                let text1 = (this.points[0]) ? vue.get_sessions_evolution_tooltip(this.points[0]) : '';\r\n                                let text2 = (this.points[1]) ? vue.get_sessions_evolution_tooltip(this.points[1]) : '';\r\n                                return `<small>${date_label}</small><br/>${text1}${text2}`;\r\n                            }\r\n                        };\r\n                        chart.series = this.sessions_evolution_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_user_grades_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.user_grades_colors;\r\n                        chart.xAxis = {\r\n                            crosshair: true,\r\n                            categories: this.user_grades_categories,\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            max: 100,\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                            title: { text: this.strings.user_grades_chart_yaxis }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let itemname = this.x;\r\n                                let position = this.points[0].point.x;\r\n                                let item = vue.selected_user.gradeitems[position];\r\n                                let header = `<small>${itemname}</small><br/>`;\r\n                                let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;\r\n                                let body = '';\r\n                                if (item.gradecount == 0) {\r\n                                    body = vue.strings.user_grades_chart_tooltip_no_graded;\r\n                                } else {\r\n                                    let text1 = (this.points[0]) ? vue.get_user_grades_tooltip(this.points[0], item) : '';\r\n                                    let text2 = (this.points[1]) ? vue.get_user_grades_tooltip(this.points[1], item) : '';\r\n                                    body = `${text1}${text2}${footer}`;\r\n                                }\r\n                                return `${header}${body}`;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            let item = vue.selected_user.gradeitems[position];\r\n                                            let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;\r\n                                            window.open(url, '_blank');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.user_grades_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    get_sessions_evolution_tooltip (point) {\r\n                        let text = '', sessions, sessions_suffix, sessions_prefix, time_prefix, time;\r\n                        if (point.colorIndex == 0) {\r\n                            sessions = point.y;\r\n                            sessions_suffix = (sessions == 1) ? vue.strings.session_text : vue.strings.sessions_text;\r\n                            sessions_prefix = point.series.name;\r\n                            text = `<b style=\"color: ${point.color}\">${sessions_prefix}: </b>\r\n                                     ${sessions} ${sessions_suffix}<br/>`;\r\n                        } else {\r\n                            time_prefix = point.series.name;\r\n                            time = this.convert_time(point.y * 60);\r\n                            text = `<b style=\"color: ${point.color}\">${time_prefix}: </b>\r\n                                    ${time}<br/>`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_user_grades_tooltip (point, item) {\r\n                        let serie_name = point.series.name, user_grade = 0;\r\n                        let finalgrade = Number(item.finalgrade), average = Number(item.average), grademax = Number(item.grademax);\r\n                        grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);\r\n                        if (point.colorIndex == 0) {\r\n                            user_grade = this.isInt(finalgrade) ? finalgrade : finalgrade.toFixed(2);\r\n                        } else {\r\n                            user_grade = this.isInt(average) ? average : average.toFixed(2);\r\n                        }\r\n                        return `<b style=\"color: ${point.color}\">${serie_name}: </b>\r\n                                     ${user_grade}/${grademax}<br/>`;\r\n                    },\r\n\r\n                    calculate_timezone_date_string(timestamp) {\r\n                        let dat, weekday, monthday, month, time;\r\n                        if (Moment.tz.zone(this.timezone)) {\r\n                            dat = Moment(timestamp).tz(this.timezone);\r\n                            weekday = dat.day();\r\n                            monthday = dat.date();\r\n                            month = dat.month();\r\n                            time = dat.format('HH:mm:ss');\r\n                        } else {\r\n                            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n                            dat =  new Date(timestamp);\r\n                            weekday = dat.getDay();\r\n                            monthday = dat.getDate();\r\n                            month = dat.getMonth();\r\n                            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;\r\n                        }\r\n                        weekday = this.strings.chart.weekdays[weekday];\r\n                        month = this.strings.chart.shortMonths[month];\r\n                        return `${weekday}, ${month} ${monthday}, ${time}`;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 60; // pasar los minutos a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    open_modules_modal(type, weekposition){\r\n                        let sections = this.dropout.sections;\r\n                        if (Number.isInteger(weekposition)) {\r\n                            sections = [];\r\n                            let section;\r\n                            let week = this.dropout.weeks[weekposition];\r\n                            week.sections.forEach(item => {\r\n                                section = {\r\n                                    sectionid: item.sectionid,\r\n                                    name: item.name,\r\n                                    modules: this.sections_modules(item.sectionid)\r\n                                };\r\n                                sections.push(section);\r\n                            });\r\n                        }\r\n                        sections.forEach(section => {\r\n                            section.modules.forEach(module => {\r\n                                module.complete = false;\r\n                                module.viewed = false;\r\n                                module.interactions = 0;\r\n                                let user_cm = this.selected_user.cms.modules[`cm${module.id}`];\r\n                                if (user_cm) {\r\n                                    module.complete = user_cm.complete;\r\n                                    module.viewed = user_cm.viewed;\r\n                                    module.interactions = user_cm.interactions;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        this.selected_sections = sections;\r\n                        this.modules_dialog = true;\r\n                    },\r\n\r\n                    sections_modules(sectionid) {\r\n                        let modules = [];\r\n                        let sections = this.dropout.sections;\r\n                        for (let i = 0; i < sections.length; i++) {\r\n                            if (sections[i].sectionid == sectionid) {\r\n                                if (sections[i].modules) {\r\n                                    modules = sections[i].modules;\r\n                                }\r\n                                break;\r\n                            }\r\n                        }\r\n                        return modules;\r\n                    },\r\n\r\n                    get_user_module(moduleid) {\r\n                        let module;\r\n                        let cms = this.selected_user.cms.modules;\r\n                        for (let i = 0; i < cms.length; i++) {\r\n                            cms[i].id = Number(cms[i].id);\r\n                            if (cms[i].id == moduleid) {\r\n                                module = cms[i];\r\n                                break;\r\n                            }\r\n                        }\r\n                        return module;\r\n                    },\r\n\r\n                    table_headers(){\r\n                        let headers = [\r\n                            { text: '', value : 'id', align : 'center', sortable : false},\r\n                            { text: this.strings.thead_name , value : 'firstname'},\r\n                            { text: this.strings.thead_lastname , value : 'lastname'},\r\n                            { text: this.strings.thead_progress , value : 'progress_percentage'},\r\n                        ];\r\n                        return headers;\r\n                    },\r\n\r\n                    get_picture_url(userid){\r\n                        return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;\r\n                    },\r\n\r\n                    get_user_fullname(){\r\n                        return `${this.selected_user.firstname} ${this.selected_user.lastname}`;\r\n                    },\r\n\r\n                    get_username(){\r\n                        return `@${this.selected_user.username}`;\r\n                    },\r\n\r\n                    see_profile () {\r\n                        let id = this.selected_user.id;\r\n                        let url = M.cfg.wwwroot + '/user/view.php?id='+id+'&course='+vue.courseid;\r\n                        window.open(url);\r\n                    },\r\n\r\n                    get_progress_message(){\r\n                        let module_label = this.strings.modules_label;\r\n                        let finished_label = this.strings.finisheds_label;\r\n                        if (this.selected_user.cms.complete == 1) {\r\n                            module_label = this.strings.module_label;\r\n                            finished_label = this.strings.finished_label;\r\n                        }\r\n                        return `${this.selected_user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.dropout.total_cms}`;\r\n                    },\r\n\r\n                    get_progress_percentage() {\r\n                        return `${this.selected_user.progress_percentage} %`;\r\n                    },\r\n\r\n                    get_student_grade() {\r\n                        let grade = this.selected_user.coursegrade;\r\n                        grade.finalgrade = Number(grade.finalgrade);\r\n                        grade.maxgrade = Number(grade.maxgrade);\r\n                        let student_grade = this.isInt(grade.finalgrade) ? grade.finalgrade : grade.finalgrade.toFixed(2);\r\n                        let max_grade = this.isInt(grade.maxgrade) ? grade.maxgrade : grade.maxgrade.toFixed(2);\r\n                        return `${student_grade}/${max_grade}`;\r\n                    },\r\n\r\n                    get_sendmail_user_text() {\r\n                        return `${this.strings.send_mail_to_user} ${this.selected_user.firstname}`;\r\n                    },\r\n\r\n                    sendmail(type) {\r\n                        this.strings.email_strings.subject = this.strings.email_strings.subject_prefix;\r\n                        this.modulename = \"course\";\r\n                        this.moduleid = this.courseid;\r\n                        if (type == 1) {\r\n                            this.email_users = [this.selected_user];\r\n                            this.email_dialog = true;\r\n                        } else if (type == 2) {\r\n                            this.email_users = this.cluster_users;\r\n                            this.email_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_email_dialog (value) {\r\n                        this.email_dialog = value;\r\n                    },\r\n\r\n                    update_modules_dialog (value) {\r\n                        this.modules_dialog = value;\r\n                    },\r\n\r\n                    isInt(n) {\r\n                        return n % 1 === 0;\r\n                    },\r\n\r\n                    generate_dropout_data(){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"dropoutdata\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                location.reload();\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"group_students\") {\r\n                            contents.push({\r\n                                title: this.strings.group_students_help_title,\r\n                                description: this.strings.group_students_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.group_students_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"modules_access\") {\r\n                            contents.push({\r\n                                title: this.strings.modules_access_help_title,\r\n                                description: this.strings.modules_access_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"week_modules\") {\r\n                            contents.push({\r\n                                title: this.strings.week_modules_help_title,\r\n                                description: this.strings.week_modules_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.week_modules_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.week_modules_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"sessions_evolution\") {\r\n                            contents.push({\r\n                                title: this.strings.sessions_evolution_help_title,\r\n                                description: this.strings.sessions_evolution_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"user_grades\") {\r\n                            contents.push({\r\n                                title: this.strings.user_grades_help_title,\r\n                                description: this.strings.user_grades_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "dropout.min.js"
+}
diff --git a/notemyprogress/amd/build/emailform.min.js b/notemyprogress/amd/build/emailform.min.js
index 19e07cad1dbf7e2b1ff99fe640ca6b8d85863354..3c4e15318861a485cfe7870c9c30cfb200b3543e 100644
--- a/notemyprogress/amd/build/emailform.min.js
+++ b/notemyprogress/amd/build/emailform.min.js
@@ -1,2 +1,90 @@
-define(["local_notemyprogress/axios","local_notemyprogress/alertify"],function(e,n){return{template:'\n                <v-main mt-10>\n                    <v-row>\n                        <v-col sm="12">\n                            <v-dialog\n                                v-model="dialog"\n                                width="800"\n                                @click:outside="closeDialog()"\n                                @keydown.esc="closeDialog()"\n                            >\n                                <v-card>\n                                    <v-toolbar color="#118AB2" dark>\n                                        <span v-text="emailform_title"></span>\n                                        <v-spacer></v-spacer>\n                                        <v-btn icon @click="reset">\n                                            <v-icon v-text="close_icon"></v-icon>\n                                        </v-btn>\n                                    </v-toolbar>\n        \n                                    <v-container>\n                                        <v-row>\n                                            <v-col cols="12" sm="12">\n    \n                                                <v-chip class="ma-2" color="#118AB2" label dark>\n                                                    <span v-text="recipients"></span>\n                                                </v-chip>\n    \n                                                <template v-for="(user, index, key) in selected_users">\n                                                    <v-chip class="ma-2">\n                                                        <v-avatar left>\n                                                            <img :src="get_picture_url(user.id)">\n                                                        </v-avatar>\n                                                        <span>{{user.firstname}} {{user.lastname}}</span>\n                                                    </v-chip>\n                                                </template>\n    \n                                            </v-col>\n                                        </v-row>\n    \n                                        <v-row>\n                                            <v-col cols="12" sm="12">\n                                                <v-form ref="form" v-model="valid_form">\n                                                    <v-text-field\n                                                            v-model="strings.subject"\n                                                            :label="subject_label"\n                                                            :rules="subject_rules"\n                                                            required\n                                                            solo\n                                                    ></v-text-field>\n    \n                                                    <v-textarea\n                                                            v-model="message"\n                                                            :label="message_label"\n                                                            :rules="message_rules"\n                                                            required\n                                                            solo\n                                                    ></v-textarea>\n    \n                                                    <v-btn @click="submit" :disabled="!valid_form">\n                                                        <span v-text="submit_button"></span>\n                                                    </v-btn>\n    \n                                                    <v-btn @click="reset">\n                                                        <span v-text="cancel_button"></span>\n                                                    </v-btn>\n    \n                                                    <v-spacer></v-spacer>\n    \n                                                </v-form>\n                                            </v-col>\n                                        </v-row>\n                                    </v-container>\n        \n                                </v-card>\n                            </v-dialog>\n                        </v-col>\n                    </v-row>\n                    \n                    <v-row>\n                        <v-col sm="12">\n                            <div class="text-center">\n                                <v-dialog\n                                        v-model="loader_dialog"\n                                        persistent\n                                        width="300"\n                                >\n                                    <v-card color="#118AB2" dark>\n                                        <v-card-text>\n                                            <span v-text="sending_text"></span>\n                                            <v-progress-linear\n                                                    indeterminate\n                                                    color="white"\n                                                    class="mb-0"\n                                            ></v-progress-linear>\n                                        </v-card-text>\n                                    </v-card>\n                                </v-dialog>\n                            </div>\n                        </v-col>\n                    </v-row>\n               </v-main>\n                ',props:["dialog","selected_users","strings","moduleid","modulename","courseid","userid"],data(){return{close_icon:"mdi-minus",valid_form:!0,subject_label:this.strings.subject_label,subject_rules:[e=>!!e||this.strings.validation_subject_text],message:"",message_label:this.strings.message_label,message_rules:[e=>!!e||this.strings.validation_message_text],submit_button:this.strings.submit_button,cancel_button:this.strings.cancel_button,emailform_title:this.strings.emailform_title,sending_text:this.strings.sending_text,recipients:this.strings.recipients_label,loader_dialog:!1,mailsended_text:this.strings.mailsended_text}},methods:{get_picture_url:e=>`${M.cfg.wwwroot}/user/pix.php?file=/${e}/f1.jpg`,submit(){let t="";this.selected_users.forEach(e=>{t=t.concat(e.id,",")}),this.loader_dialog=!0,this.errors=[];let s={action:"sendmail",subject:this.strings.subject,recipients:t,text:this.message,userid:this.userid,courseid:this.courseid,moduleid:this.moduleid,modulename:this.modulename};e({method:"get",url:M.cfg.wwwroot+"/local/notemyprogress/ajax.php",params:s}).then(e=>{200==e.status&&e.data.ok?(this.$emit("update_dialog",!1),this.$refs.form.reset(),n.success(this.mailsended_text),"function"==typeof this.$parent.$root.addLogsIntoDB&&this.$parent.$root.addLogsIntoDB("sended",this.$parent.$root.email_object_name,"email","Sended an email")):(n.error(this.strings.api_error_network),this.loader_dialog=!1)}).catch(e=>{n.error(this.strings.api_error_network)}).finally(()=>{this.loader_dialog=!1})},reset(){this.$emit("update_dialog",!1),this.$refs.form.resetValidation()},closeDialog(){this.$emit("update_dialog",!1)}}}});
+define([
+  "local_notemyprogress/axios",
+  "local_notemyprogress/alertify",
+], function (e, n) {
+  return {
+    template:
+      '\n                <v-main mt-10>\n                    <v-row>\n                        <v-col sm="12">\n                            <v-dialog\n                                v-model="dialog"\n                                width="800"\n                                @click:outside="closeDialog()"\n                                @keydown.esc="closeDialog()"\n                            >\n                                <v-card>\n                                    <v-toolbar color="#118AB2" dark>\n                                        <span v-text="emailform_title"></span>\n                                        <v-spacer></v-spacer>\n                                        <v-btn icon @click="reset">\n                                            <v-icon v-text="close_icon"></v-icon>\n                                        </v-btn>\n                                    </v-toolbar>\n        \n                                    <v-container>\n                                        <v-row>\n                                            <v-col cols="12" sm="12">\n    \n                                                <v-chip class="ma-2" color="#118AB2" label dark>\n                                                    <span v-text="recipients"></span>\n                                                </v-chip>\n    \n                                                <template v-for="(user, index, key) in selected_users">\n                                                    <v-chip class="ma-2">\n                                                        <v-avatar left>\n                                                            <img :src="get_picture_url(user.id)">\n                                                        </v-avatar>\n                                                        <span>{{user.firstname}} {{user.lastname}}</span>\n                                                    </v-chip>\n                                                </template>\n    \n                                            </v-col>\n                                        </v-row>\n    \n                                        <v-row>\n                                            <v-col cols="12" sm="12">\n                                                <v-form ref="form" v-model="valid_form">\n                                                    <v-text-field\n                                                            v-model="strings.subject"\n                                                            :label="subject_label"\n                                                            :rules="subject_rules"\n                                                            required\n                                                            solo\n                                                    ></v-text-field>\n    \n                                                    <v-textarea\n                                                            v-model="message"\n                                                            :label="message_label"\n                                                            :rules="message_rules"\n                                                            required\n                                                            solo\n                                                    ></v-textarea>\n    \n                                                    <v-btn @click="submit" :disabled="!valid_form">\n                                                        <span v-text="submit_button"></span>\n                                                    </v-btn>\n    \n                                                    <v-btn @click="reset">\n                                                        <span v-text="cancel_button"></span>\n                                                    </v-btn>\n    \n                                                    <v-spacer></v-spacer>\n    \n                                                </v-form>\n                                            </v-col>\n                                        </v-row>\n                                    </v-container>\n        \n                                </v-card>\n                            </v-dialog>\n                        </v-col>\n                    </v-row>\n                    \n                    <v-row>\n                        <v-col sm="12">\n                            <div class="text-center">\n                                <v-dialog\n                                        v-model="loader_dialog"\n                                        persistent\n                                        width="300"\n                                >\n                                    <v-card color="#118AB2" dark>\n                                        <v-card-text>\n                                            <span v-text="sending_text"></span>\n                                            <v-progress-linear\n                                                    indeterminate\n                                                    color="white"\n                                                    class="mb-0"\n                                            ></v-progress-linear>\n                                        </v-card-text>\n                                    </v-card>\n                                </v-dialog>\n                            </div>\n                        </v-col>\n                    </v-row>\n               </v-main>\n                ',
+    props: [
+      "dialog",
+      "selected_users",
+      "strings",
+      "moduleid",
+      "modulename",
+      "courseid",
+      "userid",
+    ],
+    data() {
+      return {
+        close_icon: "mdi-minus",
+        valid_form: !0,
+        subject_label: this.strings.subject_label,
+        subject_rules: [(e) => !!e || this.strings.validation_subject_text],
+        message: "",
+        message_label: this.strings.message_label,
+        message_rules: [(e) => !!e || this.strings.validation_message_text],
+        submit_button: this.strings.submit_button,
+        cancel_button: this.strings.cancel_button,
+        emailform_title: this.strings.emailform_title,
+        sending_text: this.strings.sending_text,
+        recipients: this.strings.recipients_label,
+        loader_dialog: !1,
+        mailsended_text: this.strings.mailsended_text,
+      };
+    },
+    methods: {
+      get_picture_url: (e) => `${M.cfg.wwwroot}/user/pix.php?file=/${e}/f1.jpg`,
+      submit() {
+        let t = "";
+        this.selected_users.forEach((e) => {
+          t = t.concat(e.id, ",");
+        }),
+          (this.loader_dialog = !0),
+          (this.errors = []);
+        let s = {
+          action: "sendmail",
+          subject: this.strings.subject,
+          recipients: t,
+          text: this.message,
+          userid: this.userid,
+          courseid: this.courseid,
+          moduleid: this.moduleid,
+          modulename: this.modulename,
+        };
+        e({
+          method: "get",
+          url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+          params: s,
+        })
+          .then((e) => {
+            200 == e.status && e.data.ok
+              ? (this.$emit("update_dialog", !1),
+                this.$refs.form.reset(),
+                n.success(this.mailsended_text),
+                "function" == typeof this.$parent.$root.addLogsIntoDB &&
+                  this.$parent.$root.addLogsIntoDB(
+                    "sended",
+                    this.$parent.$root.email_object_name,
+                    "email",
+                    "Sended an email"
+                  ))
+              : (n.error(this.strings.api_error_network),
+                (this.loader_dialog = !1));
+          })
+          .catch((e) => {
+            n.error(this.strings.api_error_network);
+          })
+          .finally(() => {
+            this.loader_dialog = !1;
+          });
+      },
+      reset() {
+        this.$emit("update_dialog", !1), this.$refs.form.resetValidation();
+      },
+      closeDialog() {
+        this.$emit("update_dialog", !1);
+      },
+    },
+  };
+});
 //# sourceMappingURL=emailform.min.js.map
diff --git a/notemyprogress/amd/build/emailform.min.js.map b/notemyprogress/amd/build/emailform.min.js.map
index c3821b93f5795a0497696165335cb90909273f01..4a91fda5c2ff6bd2596bd2361d692e4749bf7c0c 100644
--- a/notemyprogress/amd/build/emailform.min.js.map
+++ b/notemyprogress/amd/build/emailform.min.js.map
@@ -1 +1,75 @@
-{"version":3,"sources":["../src/emailform.js"],"names":["define","Axios","Alertify","template","props","data","close_icon","valid_form","subject_label","strings","subject_rules","v","validation_subject_text","message","message_label","message_rules","validation_message_text","submit_button","cancel_button","emailform_title","sending_text","recipients","recipients_label","loader_dialog","mailsended_text","methods","get_picture_url","userid","url","M","cfg","wwwroot","submit","selected_users","forEach","item","concat","id","errors","action","subject","text","courseid","moduleid","modulename","method","params","then","response","status","ok","$emit","$refs","form","reset","success","error","api_error_network","catch","finally","resetValidation","closeDialog"],"mappings":"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","sourcesContent":["define([\r\n    \"local_notemyprogress/axios\",\r\n    \"local_notemyprogress/alertify\",\r\n    ],\r\n    function (Axios, Alertify){\r\n        const emailform = {\r\n        template:`\r\n                <v-main mt-10>\r\n                    <v-row>\r\n                        <v-col sm=\"12\">\r\n                            <v-dialog\r\n                                v-model=\"dialog\"\r\n                                width=\"800\"\r\n                                @click:outside=\"closeDialog()\"\r\n                                @keydown.esc=\"closeDialog()\"\r\n                            >\r\n                                <v-card>\r\n                                    <v-toolbar color=\"#118AB2\" dark>\r\n                                        <span v-text=\"emailform_title\"></span>\r\n                                        <v-spacer></v-spacer>\r\n                                        <v-btn icon @click=\"reset\">\r\n                                            <v-icon v-text=\"close_icon\"></v-icon>\r\n                                        </v-btn>\r\n                                    </v-toolbar>\r\n        \r\n                                    <v-container>\r\n                                        <v-row>\r\n                                            <v-col cols=\"12\" sm=\"12\">\r\n    \r\n                                                <v-chip class=\"ma-2\" color=\"#118AB2\" label dark>\r\n                                                    <span v-text=\"recipients\"></span>\r\n                                                </v-chip>\r\n    \r\n                                                <template v-for=\"(user, index, key) in selected_users\">\r\n                                                    <v-chip class=\"ma-2\">\r\n                                                        <v-avatar left>\r\n                                                            <img :src=\"get_picture_url(user.id)\">\r\n                                                        </v-avatar>\r\n                                                        <span>{{user.firstname}} {{user.lastname}}</span>\r\n                                                    </v-chip>\r\n                                                </template>\r\n    \r\n                                            </v-col>\r\n                                        </v-row>\r\n    \r\n                                        <v-row>\r\n                                            <v-col cols=\"12\" sm=\"12\">\r\n                                                <v-form ref=\"form\" v-model=\"valid_form\">\r\n                                                    <v-text-field\r\n                                                            v-model=\"strings.subject\"\r\n                                                            :label=\"subject_label\"\r\n                                                            :rules=\"subject_rules\"\r\n                                                            required\r\n                                                            solo\r\n                                                    ></v-text-field>\r\n    \r\n                                                    <v-textarea\r\n                                                            v-model=\"message\"\r\n                                                            :label=\"message_label\"\r\n                                                            :rules=\"message_rules\"\r\n                                                            required\r\n                                                            solo\r\n                                                    ></v-textarea>\r\n    \r\n                                                    <v-btn @click=\"submit\" :disabled=\"!valid_form\">\r\n                                                        <span v-text=\"submit_button\"></span>\r\n                                                    </v-btn>\r\n    \r\n                                                    <v-btn @click=\"reset\">\r\n                                                        <span v-text=\"cancel_button\"></span>\r\n                                                    </v-btn>\r\n    \r\n                                                    <v-spacer></v-spacer>\r\n    \r\n                                                </v-form>\r\n                                            </v-col>\r\n                                        </v-row>\r\n                                    </v-container>\r\n        \r\n                                </v-card>\r\n                            </v-dialog>\r\n                        </v-col>\r\n                    </v-row>\r\n                    \r\n                    <v-row>\r\n                        <v-col sm=\"12\">\r\n                            <div class=\"text-center\">\r\n                                <v-dialog\r\n                                        v-model=\"loader_dialog\"\r\n                                        persistent\r\n                                        width=\"300\"\r\n                                >\r\n                                    <v-card color=\"#118AB2\" dark>\r\n                                        <v-card-text>\r\n                                            <span v-text=\"sending_text\"></span>\r\n                                            <v-progress-linear\r\n                                                    indeterminate\r\n                                                    color=\"white\"\r\n                                                    class=\"mb-0\"\r\n                                            ></v-progress-linear>\r\n                                        </v-card-text>\r\n                                    </v-card>\r\n                                </v-dialog>\r\n                            </div>\r\n                        </v-col>\r\n                    </v-row>\r\n               </v-main>\r\n                `,\r\n        props:['dialog', 'selected_users', 'strings', 'moduleid', 'modulename', 'courseid', 'userid'],\r\n        data(){\r\n            return {\r\n                close_icon: 'mdi-minus',\r\n                valid_form: true,\r\n                subject_label: this.strings.subject_label,\r\n                subject_rules: [\r\n                    v => !!v || this.strings.validation_subject_text,\r\n                ],\r\n                message: '',\r\n                message_label: this.strings.message_label,\r\n                message_rules: [\r\n                    v => !!v || this.strings.validation_message_text,\r\n                ],\r\n                submit_button: this.strings.submit_button,\r\n                cancel_button: this.strings.cancel_button,\r\n                emailform_title: this.strings.emailform_title,\r\n                sending_text: this.strings.sending_text,\r\n                recipients: this.strings.recipients_label,\r\n\r\n                loader_dialog: false,\r\n                mailsended_text: this.strings.mailsended_text,\r\n            }\r\n        },\r\n        methods : {\r\n            get_picture_url(userid){\r\n                let url = `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;\r\n                return url;\r\n            },\r\n\r\n            submit () {\r\n                let recipients = \"\";\r\n                this.selected_users.forEach(item => {\r\n                    recipients=recipients.concat(item.id,\",\");\r\n                });\r\n                this.loader_dialog = true;\r\n                this.errors = [];\r\n                let data = {\r\n                    action : \"sendmail\",\r\n                    subject : this.strings.subject,\r\n                    recipients : recipients,\r\n                    text : this.message,\r\n                    userid : this.userid,\r\n                    courseid : this.courseid,\r\n                    moduleid : this.moduleid,\r\n                    modulename : this.modulename,\r\n                };\r\n                Axios({\r\n                    method:'get',\r\n                    url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                    params : data,\r\n                }).then((response) => {\r\n                    if (response.status == 200 && response.data.ok) {\r\n                        this.$emit('update_dialog', false);\r\n                        this.$refs.form.reset();\r\n                        Alertify.success(this.mailsended_text);\r\n                    } else {\r\n                        Alertify.error(this.strings.api_error_network);\r\n                        this.loader_dialog = false;\r\n                    }\r\n                }).catch((e) => {\r\n                    Alertify.error(this.strings.api_error_network);\r\n                }).finally(() => {\r\n                    this.loader_dialog = false;\r\n                });\r\n            },\r\n\r\n            reset () {\r\n                this.$emit('update_dialog', false);\r\n                this.$refs.form.resetValidation();\r\n            },\r\n\r\n            closeDialog() {\r\n                this.$emit('update_dialog', false);\r\n            }\r\n        },\r\n    }\r\n    return emailform;\r\n})"],"file":"emailform.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/emailform.js"
+  ],
+  "names": [
+    "define",
+    "Axios",
+    "Alertify",
+    "template",
+    "props",
+    "data",
+    "close_icon",
+    "valid_form",
+    "subject_label",
+    "strings",
+    "subject_rules",
+    "v",
+    "validation_subject_text",
+    "message",
+    "message_label",
+    "message_rules",
+    "validation_message_text",
+    "submit_button",
+    "cancel_button",
+    "emailform_title",
+    "sending_text",
+    "recipients",
+    "recipients_label",
+    "loader_dialog",
+    "mailsended_text",
+    "methods",
+    "get_picture_url",
+    "userid",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "submit",
+    "selected_users",
+    "forEach",
+    "item",
+    "concat",
+    "id",
+    "errors",
+    "action",
+    "subject",
+    "text",
+    "courseid",
+    "moduleid",
+    "modulename",
+    "method",
+    "params",
+    "then",
+    "response",
+    "status",
+    "ok",
+    "$emit",
+    "$refs",
+    "form",
+    "reset",
+    "success",
+    "error",
+    "api_error_network",
+    "catch",
+    "finally",
+    "resetValidation",
+    "closeDialog"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\r\n    \"local_notemyprogress/axios\",\r\n    \"local_notemyprogress/alertify\",\r\n    ],\r\n    function (Axios, Alertify){\r\n        const emailform = {\r\n        template:`\r\n                <v-main mt-10>\r\n                    <v-row>\r\n                        <v-col sm=\"12\">\r\n                            <v-dialog\r\n                                v-model=\"dialog\"\r\n                                width=\"800\"\r\n                                @click:outside=\"closeDialog()\"\r\n                                @keydown.esc=\"closeDialog()\"\r\n                            >\r\n                                <v-card>\r\n                                    <v-toolbar color=\"#118AB2\" dark>\r\n                                        <span v-text=\"emailform_title\"></span>\r\n                                        <v-spacer></v-spacer>\r\n                                        <v-btn icon @click=\"reset\">\r\n                                            <v-icon v-text=\"close_icon\"></v-icon>\r\n                                        </v-btn>\r\n                                    </v-toolbar>\r\n        \r\n                                    <v-container>\r\n                                        <v-row>\r\n                                            <v-col cols=\"12\" sm=\"12\">\r\n    \r\n                                                <v-chip class=\"ma-2\" color=\"#118AB2\" label dark>\r\n                                                    <span v-text=\"recipients\"></span>\r\n                                                </v-chip>\r\n    \r\n                                                <template v-for=\"(user, index, key) in selected_users\">\r\n                                                    <v-chip class=\"ma-2\">\r\n                                                        <v-avatar left>\r\n                                                            <img :src=\"get_picture_url(user.id)\">\r\n                                                        </v-avatar>\r\n                                                        <span>{{user.firstname}} {{user.lastname}}</span>\r\n                                                    </v-chip>\r\n                                                </template>\r\n    \r\n                                            </v-col>\r\n                                        </v-row>\r\n    \r\n                                        <v-row>\r\n                                            <v-col cols=\"12\" sm=\"12\">\r\n                                                <v-form ref=\"form\" v-model=\"valid_form\">\r\n                                                    <v-text-field\r\n                                                            v-model=\"strings.subject\"\r\n                                                            :label=\"subject_label\"\r\n                                                            :rules=\"subject_rules\"\r\n                                                            required\r\n                                                            solo\r\n                                                    ></v-text-field>\r\n    \r\n                                                    <v-textarea\r\n                                                            v-model=\"message\"\r\n                                                            :label=\"message_label\"\r\n                                                            :rules=\"message_rules\"\r\n                                                            required\r\n                                                            solo\r\n                                                    ></v-textarea>\r\n    \r\n                                                    <v-btn @click=\"submit\" :disabled=\"!valid_form\">\r\n                                                        <span v-text=\"submit_button\"></span>\r\n                                                    </v-btn>\r\n    \r\n                                                    <v-btn @click=\"reset\">\r\n                                                        <span v-text=\"cancel_button\"></span>\r\n                                                    </v-btn>\r\n    \r\n                                                    <v-spacer></v-spacer>\r\n    \r\n                                                </v-form>\r\n                                            </v-col>\r\n                                        </v-row>\r\n                                    </v-container>\r\n        \r\n                                </v-card>\r\n                            </v-dialog>\r\n                        </v-col>\r\n                    </v-row>\r\n                    \r\n                    <v-row>\r\n                        <v-col sm=\"12\">\r\n                            <div class=\"text-center\">\r\n                                <v-dialog\r\n                                        v-model=\"loader_dialog\"\r\n                                        persistent\r\n                                        width=\"300\"\r\n                                >\r\n                                    <v-card color=\"#118AB2\" dark>\r\n                                        <v-card-text>\r\n                                            <span v-text=\"sending_text\"></span>\r\n                                            <v-progress-linear\r\n                                                    indeterminate\r\n                                                    color=\"white\"\r\n                                                    class=\"mb-0\"\r\n                                            ></v-progress-linear>\r\n                                        </v-card-text>\r\n                                    </v-card>\r\n                                </v-dialog>\r\n                            </div>\r\n                        </v-col>\r\n                    </v-row>\r\n               </v-main>\r\n                `,\r\n        props:['dialog', 'selected_users', 'strings', 'moduleid', 'modulename', 'courseid', 'userid'],\r\n        data(){\r\n            return {\r\n                close_icon: 'mdi-minus',\r\n                valid_form: true,\r\n                subject_label: this.strings.subject_label,\r\n                subject_rules: [\r\n                    v => !!v || this.strings.validation_subject_text,\r\n                ],\r\n                message: '',\r\n                message_label: this.strings.message_label,\r\n                message_rules: [\r\n                    v => !!v || this.strings.validation_message_text,\r\n                ],\r\n                submit_button: this.strings.submit_button,\r\n                cancel_button: this.strings.cancel_button,\r\n                emailform_title: this.strings.emailform_title,\r\n                sending_text: this.strings.sending_text,\r\n                recipients: this.strings.recipients_label,\r\n\r\n                loader_dialog: false,\r\n                mailsended_text: this.strings.mailsended_text,\r\n            }\r\n        },\r\n        methods : {\r\n            get_picture_url(userid){\r\n                let url = `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;\r\n                return url;\r\n            },\r\n\r\n            submit () {\r\n                let recipients = \"\";\r\n                this.selected_users.forEach(item => {\r\n                    recipients=recipients.concat(item.id,\",\");\r\n                });\r\n                this.loader_dialog = true;\r\n                this.errors = [];\r\n                let data = {\r\n                    action : \"sendmail\",\r\n                    subject : this.strings.subject,\r\n                    recipients : recipients,\r\n                    text : this.message,\r\n                    userid : this.userid,\r\n                    courseid : this.courseid,\r\n                    moduleid : this.moduleid,\r\n                    modulename : this.modulename,\r\n                };\r\n                Axios({\r\n                    method:'get',\r\n                    url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                    params : data,\r\n                }).then((response) => {\r\n                    if (response.status == 200 && response.data.ok) {\r\n                        this.$emit('update_dialog', false);\r\n                        this.$refs.form.reset();\r\n                        Alertify.success(this.mailsended_text);\r\n                    } else {\r\n                        Alertify.error(this.strings.api_error_network);\r\n                        this.loader_dialog = false;\r\n                    }\r\n                }).catch((e) => {\r\n                    Alertify.error(this.strings.api_error_network);\r\n                }).finally(() => {\r\n                    this.loader_dialog = false;\r\n                });\r\n            },\r\n\r\n            reset () {\r\n                this.$emit('update_dialog', false);\r\n                this.$refs.form.resetValidation();\r\n            },\r\n\r\n            closeDialog() {\r\n                this.$emit('update_dialog', false);\r\n            }\r\n        },\r\n    }\r\n    return emailform;\r\n})"
+  ],
+  "file": "emailform.min.js"
+}
diff --git a/notemyprogress/amd/build/gamification.js b/notemyprogress/amd/build/gamification.js
index 5ba1ae7061ea5405269a932cd210be99e41a35be..e6643fb4eb924165f8bb6cc97fe99b7f56b5d3db 100644
--- a/notemyprogress/amd/build/gamification.js
+++ b/notemyprogress/amd/build/gamification.js
@@ -48,6 +48,10 @@ define([
       mounted() {
         this.pointsBase = +this.settings.pointsbase;
         this.pointsBaseOri = +this.settings.pointsbase;
+        setTimeout(function () {
+          app.setGraphicsEventListeners();
+        }, 500);
+        app.setGraphicsEventListeners();
       },
       computed: {},
       methods: {
@@ -306,122 +310,64 @@ define([
           console.log(chart.series);
           return chart;
         },
-        /*
-        build_inverted_time_chart() {
-          console.log("enter build_inverted_time_chart ");
-          //console.log(this.students_planification);
-          //console.log("this.data_report_meta_hours = ");
-          //console.log(this.data_report_meta_hours);
-          let chart = new Object();
-          let meta = new Object();
-          meta = this.chartdata_hours_week_dedication();
-          console.log("meta = ");
-          console.log(meta);
-          let invest = [
-            {
-              name: meta.labels[0],
-              y: meta.datasets[0].data[0],
-            },
-            {
-              name: meta.labels[1],
-              y: meta.datasets[0].data[1],
-            },
-            {
-              name: meta.labels[2],
-              y: meta.datasets[0].data[2],
-            },
-          ];
-          console.log("invest = ");
-          console.log(invest);
-          chart.chart = {
-            type: "bar",
-            backgroundColor: null,
-            style: { fontFamily: "poppins" },
-          };
-          chart.title = { text: null };
-          chart.colors = this.inverted_time_colors;
-          chart.xAxis = {
-            type: "category",
-            crosshair: true,
-          };
-          chart.yAxis = {
-            title: {
-              text: "Framboise",
-            },
-          };
-          chart.tooltip = {
-            shared: true,
-            useHTML: true,
-            formatter: function () {
-              let category_name = this.points[0].key;
-              let time = vue.convert_time(this.y);
-              return `<b>${category_name}: </b>${time}`;
-            },
-          };
-          chart.legend = {
-            enabled: false,
+        setGraphicsEventListeners() {
+          console.log("Listeners set");
+          let graphics = document.querySelectorAll(".highcharts-container");
+          if (graphics.length < 1) {
+            setTimeout(app.setGraphicsEventListeners, 500);
+          } else {
+            graphics[0].id = "SpreadChart";
+            graphics.forEach((graph) => {
+              graph.addEventListener("mouseenter", app.addLogsViewGraphic);
+            });
+          }
+        },
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "SpreadChart":
+              action = "viewed";
+              objectName = "spreading_chart";
+              objectType = "chart";
+              objectDescription =
+                "Bar chart that shows the level repartition in gamification";
+              break;
+            default:
+              action = "viewed";
+              objectName = "";
+              objectType = "chart";
+              objectDescription = "A chart";
+              break;
+          }
+          app.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "TEACHER_GAMIFICATION",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
           };
-          chart.series = [
-            {
-              colorByPoint: true,
-              data: invest,
-            },
-          ];
-          //console.log("this.inverted_time.data = ");
-          //console.log(this.inverted_time.data);
-
-          // console.log("invest = ");
-          // console.log(invest);
-          return chart;
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
+            })
+            .catch((e) => {});
         },
-        chartdata_hours_week_dedication() {
-          var data = new Object();
-          data.datasets = [];
-
-          let inverted =
-            this.render_has == "teacher"
-              ? this.strings.inverted_time
-              : `${this.strings.myself} ${this.strings.inverted_time}`;
-          let planified =
-            this.render_has == "teacher"
-              ? this.strings.planified_time
-              : `${this.strings.myself} ${this.strings.planified_time}`;
-          data.labels = [inverted, planified];
-          var dataset = new Object();
-          dataset.label = "Horas";
-          //console.log("data_report_meta_hours in chartdata_hours_week_dedication  = ");
-          //console.log(this.data_report_meta_hours);
-          dataset.data = [
-            parseFloat(this.data_report_meta_hours.horas_trabajadas),
-            parseInt(this.data_report_meta_hours.horas_planificadas),
-          ];
-          dataset.backgroundColor = ["#ffa700", "#a0c2fa"];
-          dataset.borderWidth = 0;
-          data.datasets.push(dataset);
-
-          //if (this.render_has == "student" && this.compare_with_course) {
-          data.labels.splice(1, 0, this.strings.inverted_time_course);
-          //data.labels.splice(3, 0, this.strings.planified_time_course);
-          dataset.data.splice(
-            1,
-            0,
-            parseFloat(this.course_report_hours.horas_trabajadas)
-          );
-          // dataset.data.splice(
-          //   3,
-          //   0,
-          //   parseFloat(this.course_report_hours.horas_planificadas)
-          // );
-          dataset.backgroundColor.splice(1, 0, "#ffa700");
-          //dataset.backgroundColor.splice(3, 0, "#a0c2fa");
-          //}
-          //console.log("data_report_meta_hours = ");
-          //console.log(this.data_report_meta_hours);
-
-          //console.log("data = ");
-          //console.log(data);
-          return data;
-        },*/
       },
     });
   }
diff --git a/notemyprogress/amd/build/grades.min.js.map b/notemyprogress/amd/build/grades.min.js.map
index d108ae0b8d80589956010947dee7e2afcd896e1d..be3859476f6369f481886d1ad78c66d45ab92fb9 100644
--- a/notemyprogress/amd/build/grades.min.js.map
+++ b/notemyprogress/amd/build/grades.min.js.map
@@ -1 +1,202 @@
-{"version":3,"sources":["../src/grades.js"],"names":["define","Vue","Vuetify","Axios","Moment","Pagination","ChartDynamic","PageHeader","EmailForm","HelpDialog","init","content","use","component","vue","delimiters","el","vuetify","data","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","errors","pages","grades","grade_items_average_colors","item_grades_details_colors","item_grades_distribution_colors","default_category","average_categories","average_data","selected_items","item_details","grade_item_title","grade_item_details_categories","grade_item_details_data","grade_item_distribution_categories","grade_item_distribution_data","selected_item","grade_item_users","selected_users","dialog","modulename","moduleid","email_strings","help_dialog","help_contents","beforeMount","categories","length","calculate_chart_items_average","items","item","find_first_grade_item","update_detail_charts","mounted","document","querySelector","style","display","methods","get_help_content","contents","title","section_help_title","description","section_help_description","change_category","build_grade_items_average_chart","chart","type","backgroundColor","fontFamily","text","colors","xAxis","legend","enabled","plotOptions","series","cursor","point","events","click","position","x","tooltip","shared","formatter","points","value","y","count","gradecount","name","view_details","average","students_label","grades_tooltip_students","grades_tooltip_student","isInt","toFixed","grademax","grades_tooltip_average","grades_tooltip_grade","student_count","yAxis","allowDecimals","max","labels","format","grades_yaxis_title","build_item_grades_details_chart","category","key","itemname","maxgrade","grade","colorByPoint","build_item_grades_distribution_chart","grades_distribution_yaxis_title","prefix","grades_distribution_tooltip_prefix","suffix","grades_distribution_tooltip_suffix","send_mail","students_text","student_text","stacking","borderWidth","pointPadding","groupPadding","column","subject","subject_prefix","marker","lineWidth","values","forEach","push","average_percentage","itemmodule","coursemoduleid","calculate_chart_item_grade_detail","calculate_chart_item_grades_distribution","item_data","grades_best_grade","maxrating","grades_average_grade","grades_worst_grade","minrating","greater","grades_greater_than","smaller","grades_smaller_than","users","ranges","limit","weight","min","range","index","rawgrade","user","label","i","n","update_dialog","open_chart_help","grade_items_average_help_title","grade_items_average_help_description_p1","grade_items_average_help_description_p2","grade_items_average_help_description_p3","item_grades_details_help_title","item_grades_details_help_description_p1","item_grades_details_help_description_p2","item_grades_distribution_help_title","item_grades_distribution_help_description_p1","item_grades_distribution_help_description_p2","item_grades_distribution_help_description_p3","update_help_dialog","get_timezone","information","ss_change_timezone"],"mappings":"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","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/emailform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, EmailForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('emailform', EmailForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#grades\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        grades: content.grades,\r\n                        grade_items_average_colors: content.grade_items_average_colors,\r\n                        item_grades_details_colors: content.item_grades_details_colors,\r\n                        item_grades_distribution_colors: content.item_grades_distribution_colors,\r\n                        default_category: null,\r\n                        average_categories: [],\r\n                        average_data: [],\r\n                        selected_items: [],\r\n                        item_details: [],\r\n\r\n                        grade_item_title: \"\",\r\n                        grade_item_details_categories: [],\r\n                        grade_item_details_data: [],\r\n\r\n                        grade_item_distribution_categories: [],\r\n                        grade_item_distribution_data: [],\r\n\r\n                        selected_item: null,\r\n\r\n                        grade_item_users: null,\r\n                        selected_users: [],\r\n                        dialog : false,\r\n                        modulename : \"\",\r\n                        moduleid : false,\r\n                        email_strings: content.strings.email_strings,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    if (this.grades.categories.length) {\r\n                        this.default_category = this.grades.categories[0];\r\n                        this.calculate_chart_items_average(this.default_category.items);\r\n                        let item = this.find_first_grade_item(this.default_category.items);\r\n                        this.update_detail_charts(item);\r\n                    };\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#grades\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    change_category(items) {\r\n                        this.calculate_chart_items_average(items);\r\n                        let item = this.find_first_grade_item(items);\r\n                        this.update_detail_charts(item);\r\n                    },\r\n\r\n                    build_grade_items_average_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null\r\n                        };\r\n                        chart.colors = this.grade_items_average_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.average_categories\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            let item = vue.selected_items[position];\r\n                                            vue.update_detail_charts(item);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function() {\r\n                                let position = this.points[0].point.x;\r\n                                let value = this.y;\r\n                                let item = vue.selected_items[position];\r\n                                let count = item.gradecount;\r\n                                let name = this.x;\r\n                                let view_details = vue.strings.view_details;\r\n                                let average = Number(item.average);\r\n                                let students_label = vue.strings.grades_tooltip_students;\r\n                                if (count == 1) {\r\n                                    students_label = vue.strings.grades_tooltip_student;\r\n                                }\r\n                                value = vue.isInt(value) ? value : value.toFixed(2);\r\n                                average = vue.isInt(average) ? average : average.toFixed(2);\r\n                                let grademax = item.grademax;\r\n                                let text = '<b>' + name + '<b> <br/>' +\r\n                                    vue.strings.grades_tooltip_average + ': ' + average + ' (' + value + ' %)<br/>' +\r\n                                    vue.strings.grades_tooltip_grade + ': ' + grademax + '<br/>' +\r\n                                    count + ' ' + students_label + ' ' + vue.grades.student_count + '<br/>' +\r\n                                    '<i>' + view_details + '</i>';\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.yAxis = [{\r\n                            allowDecimals: false,\r\n                            max: 100,\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                            title: {\r\n                                text: this.strings.grades_yaxis_title,\r\n                            }\r\n                        }];\r\n                        chart.series = [{\r\n                            data: this.average_data,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_item_grades_details_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.item_grades_details_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function() {\r\n                                let category = this.points[0].key;\r\n                                let name = vue.selected_item.itemname;\r\n                                let maxgrade = vue.selected_item.grademax;\r\n                                let grade = this.y;\r\n                                grade = vue.isInt(grade) ? grade : grade.toFixed(2);\r\n                                let text = '<b>' + name + '<b> <br/>' +\r\n                                    category + ': ' + grade + '/' + maxgrade + '<br/>';\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.yAxis = [{\r\n                            title: {\r\n                                enabled: false,\r\n                            }\r\n                        }];\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: this.grade_item_details_data,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_item_grades_distribution_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.item_grades_distribution_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.grade_item_distribution_categories\r\n                        };\r\n                        chart.yAxis = [{\r\n                            title: {\r\n                                text: this.strings.grades_distribution_yaxis_title,\r\n                            },\r\n                            allowDecimals: false,\r\n                        }];\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function() {\r\n                                let prefix = vue.strings.grades_distribution_tooltip_prefix;\r\n                                let suffix = vue.strings.grades_distribution_tooltip_suffix;\r\n                                let send_mail = vue.strings.send_mail;\r\n                                let name = this.x;\r\n                                let value = this.y;\r\n                                let students_label = vue.strings.students_text;\r\n                                if (value == 1) {\r\n                                    students_label = vue.strings.student_text;\r\n                                }\r\n                                let text = '<b>' + prefix + ': </b> '+ name + ' <br/>'\r\n                                    + value + ' ' + students_label + ' ' + suffix + ' <br/>'\r\n                                    + '<i>' + send_mail + '</i>';\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                stacking: 'normal',\r\n                                borderWidth: 1,\r\n                                pointPadding: 0,\r\n                                groupPadding: 0,\r\n                            },\r\n                            column:{\r\n                                point:{\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            vue.selected_users = vue.grade_item_users[position];\r\n                                            vue.email_strings.subject = vue.email_strings.subject_prefix\r\n                                                + \" - \" + vue.selected_item.itemname;\r\n                                            vue.dialog = true;\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            type: 'column',\r\n                            data: this.grade_item_distribution_data\r\n                        }, {\r\n                            type: 'spline',\r\n                            data: this.grade_item_distribution_data,\r\n                            marker: {\r\n                                lineWidth: 1,\r\n                            }\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    calculate_chart_items_average(items) {\r\n                        let values = [];\r\n                        let categories = [];\r\n                        items.forEach(item => {\r\n                            values.push(item.average_percentage);\r\n                            categories.push(item.itemname);\r\n                        });\r\n                        this.average_categories = categories;\r\n                        this.average_data = values;\r\n                        this.selected_items = items;\r\n                    },\r\n\r\n                    update_detail_charts (item) {\r\n                        this.modulename = item.itemmodule;\r\n                        this.moduleid = item.coursemoduleid;\r\n                        this.grade_item_title = item.itemname;\r\n                        this.calculate_chart_item_grade_detail(item);\r\n                        this.calculate_chart_item_grades_distribution(item);\r\n                    },\r\n\r\n                    calculate_chart_item_grade_detail(item) {\r\n                        this.selected_item = item;\r\n                        let item_data = [{\r\n                            name: this.strings.grades_best_grade,\r\n                            y: Number(item.maxrating) || 0\r\n                        },{\r\n                            name: this.strings.grades_average_grade,\r\n                            y: Number(item.average) || 0\r\n                        }, {\r\n                            name: this.strings.grades_worst_grade,\r\n                            y: Number(item.minrating) || 0\r\n                        }];\r\n                        this.grade_item_details_data = item_data;\r\n                    },\r\n\r\n                    calculate_chart_item_grades_distribution(item) {\r\n                        let greater = this.strings.grades_greater_than;\r\n                        let smaller = this.strings.grades_smaller_than;\r\n                        let categories = [\r\n                            `${greater} 90%`,\r\n                            `${greater} 80%`,\r\n                            `${greater} 70%`,\r\n                            `${greater} 60%`,\r\n                            `${greater} 50%`,\r\n                            `${smaller} 50%`];\r\n                        let values = [0, 0, 0, 0, 0, 0];\r\n                        let users = [[], [], [], [], [], []];\r\n                        if (item) {\r\n                            let weights = [0.9, 0.8, 0.7, 0.6, 0.5, 0];\r\n                            let ranges = [];\r\n                            let grademax = item.grademax;\r\n                            let limit = grademax;\r\n                            weights.forEach(weight => {\r\n                                let grade = grademax * weight;\r\n                                ranges.push({ max: limit, min: grade, count: 0});\r\n                                limit = grade - 0.1;\r\n                            });\r\n\r\n                            item.grades.forEach(grade => {\r\n                                ranges.forEach((range, index) => {\r\n                                    if (grade.rawgrade >= range.min && grade.rawgrade <= range.max) {\r\n                                        range.count++;\r\n                                        users[index].push(grade.user);\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                            values = [];\r\n                            ranges.forEach((range, index) => {\r\n                                let max = this.isInt(range.max) ? range.max : range.max.toFixed(1);\r\n                                let min = this.isInt(range.min) ? range.min : range.min.toFixed(1);\r\n                                let label = `${max} - ${min}<br/>${categories[index]}`;\r\n                                categories[index] = label;\r\n                                values.push(range.count);\r\n                            });\r\n                        }\r\n                        this.grade_item_users = users;\r\n                        this.grade_item_distribution_categories = categories,\r\n                        this.grade_item_distribution_data = values;\r\n                    },\r\n\r\n                    find_first_grade_item(items) {\r\n                        let item;\r\n                        if (items.length) {\r\n                            let count = items.length;\r\n                            for (let i = 0; i < count; i++) {\r\n                                if (items[i].maxrating > 0) {\r\n                                    item = items[i];\r\n                                    break;\r\n                                }\r\n                            }\r\n                            if (!item) {\r\n                                item = items[0];\r\n                            }\r\n                        }\r\n                        return item;\r\n                    },\r\n\r\n                    isInt(n) {\r\n                        return n % 1 === 0;\r\n                    },\r\n\r\n                    update_dialog (value) {\r\n                        this.dialog = value;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"grade_items_average\") {\r\n                            contents.push({\r\n                                title: this.strings.grade_items_average_help_title,\r\n                                description: this.strings.grade_items_average_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.grade_items_average_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.grade_items_average_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"item_grades_details\") {\r\n                            contents.push({\r\n                                title: this.strings.item_grades_details_help_title,\r\n                                description: this.strings.item_grades_details_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.item_grades_details_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"item_grades_distribution\") {\r\n                            contents.push({\r\n                                title: this.strings.item_grades_distribution_help_title,\r\n                                description: this.strings.item_grades_distribution_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.item_grades_distribution_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.item_grades_distribution_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"grades.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/grades.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "Pagination",
+    "ChartDynamic",
+    "PageHeader",
+    "EmailForm",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "errors",
+    "pages",
+    "grades",
+    "grade_items_average_colors",
+    "item_grades_details_colors",
+    "item_grades_distribution_colors",
+    "default_category",
+    "average_categories",
+    "average_data",
+    "selected_items",
+    "item_details",
+    "grade_item_title",
+    "grade_item_details_categories",
+    "grade_item_details_data",
+    "grade_item_distribution_categories",
+    "grade_item_distribution_data",
+    "selected_item",
+    "grade_item_users",
+    "selected_users",
+    "dialog",
+    "modulename",
+    "moduleid",
+    "email_strings",
+    "help_dialog",
+    "help_contents",
+    "beforeMount",
+    "categories",
+    "length",
+    "calculate_chart_items_average",
+    "items",
+    "item",
+    "find_first_grade_item",
+    "update_detail_charts",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "change_category",
+    "build_grade_items_average_chart",
+    "chart",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "text",
+    "colors",
+    "xAxis",
+    "legend",
+    "enabled",
+    "plotOptions",
+    "series",
+    "cursor",
+    "point",
+    "events",
+    "click",
+    "position",
+    "x",
+    "tooltip",
+    "shared",
+    "formatter",
+    "points",
+    "value",
+    "y",
+    "count",
+    "gradecount",
+    "name",
+    "view_details",
+    "average",
+    "students_label",
+    "grades_tooltip_students",
+    "grades_tooltip_student",
+    "isInt",
+    "toFixed",
+    "grademax",
+    "grades_tooltip_average",
+    "grades_tooltip_grade",
+    "student_count",
+    "yAxis",
+    "allowDecimals",
+    "max",
+    "labels",
+    "format",
+    "grades_yaxis_title",
+    "build_item_grades_details_chart",
+    "category",
+    "key",
+    "itemname",
+    "maxgrade",
+    "grade",
+    "colorByPoint",
+    "build_item_grades_distribution_chart",
+    "grades_distribution_yaxis_title",
+    "prefix",
+    "grades_distribution_tooltip_prefix",
+    "suffix",
+    "grades_distribution_tooltip_suffix",
+    "send_mail",
+    "students_text",
+    "student_text",
+    "stacking",
+    "borderWidth",
+    "pointPadding",
+    "groupPadding",
+    "column",
+    "subject",
+    "subject_prefix",
+    "marker",
+    "lineWidth",
+    "values",
+    "forEach",
+    "push",
+    "average_percentage",
+    "itemmodule",
+    "coursemoduleid",
+    "calculate_chart_item_grade_detail",
+    "calculate_chart_item_grades_distribution",
+    "item_data",
+    "grades_best_grade",
+    "maxrating",
+    "grades_average_grade",
+    "grades_worst_grade",
+    "minrating",
+    "greater",
+    "grades_greater_than",
+    "smaller",
+    "grades_smaller_than",
+    "users",
+    "ranges",
+    "limit",
+    "weight",
+    "min",
+    "range",
+    "index",
+    "rawgrade",
+    "user",
+    "label",
+    "i",
+    "n",
+    "update_dialog",
+    "open_chart_help",
+    "grade_items_average_help_title",
+    "grade_items_average_help_description_p1",
+    "grade_items_average_help_description_p2",
+    "grade_items_average_help_description_p3",
+    "item_grades_details_help_title",
+    "item_grades_details_help_description_p1",
+    "item_grades_details_help_description_p2",
+    "item_grades_distribution_help_title",
+    "item_grades_distribution_help_description_p1",
+    "item_grades_distribution_help_description_p2",
+    "item_grades_distribution_help_description_p3",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/emailform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, EmailForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('emailform', EmailForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#grades\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        grades: content.grades,\r\n                        grade_items_average_colors: content.grade_items_average_colors,\r\n                        item_grades_details_colors: content.item_grades_details_colors,\r\n                        item_grades_distribution_colors: content.item_grades_distribution_colors,\r\n                        default_category: null,\r\n                        average_categories: [],\r\n                        average_data: [],\r\n                        selected_items: [],\r\n                        item_details: [],\r\n\r\n                        grade_item_title: \"\",\r\n                        grade_item_details_categories: [],\r\n                        grade_item_details_data: [],\r\n\r\n                        grade_item_distribution_categories: [],\r\n                        grade_item_distribution_data: [],\r\n\r\n                        selected_item: null,\r\n\r\n                        grade_item_users: null,\r\n                        selected_users: [],\r\n                        dialog : false,\r\n                        modulename : \"\",\r\n                        moduleid : false,\r\n                        email_strings: content.strings.email_strings,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    if (this.grades.categories.length) {\r\n                        this.default_category = this.grades.categories[0];\r\n                        this.calculate_chart_items_average(this.default_category.items);\r\n                        let item = this.find_first_grade_item(this.default_category.items);\r\n                        this.update_detail_charts(item);\r\n                    };\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#grades\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    change_category(items) {\r\n                        this.calculate_chart_items_average(items);\r\n                        let item = this.find_first_grade_item(items);\r\n                        this.update_detail_charts(item);\r\n                    },\r\n\r\n                    build_grade_items_average_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null\r\n                        };\r\n                        chart.colors = this.grade_items_average_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.average_categories\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            let item = vue.selected_items[position];\r\n                                            vue.update_detail_charts(item);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function() {\r\n                                let position = this.points[0].point.x;\r\n                                let value = this.y;\r\n                                let item = vue.selected_items[position];\r\n                                let count = item.gradecount;\r\n                                let name = this.x;\r\n                                let view_details = vue.strings.view_details;\r\n                                let average = Number(item.average);\r\n                                let students_label = vue.strings.grades_tooltip_students;\r\n                                if (count == 1) {\r\n                                    students_label = vue.strings.grades_tooltip_student;\r\n                                }\r\n                                value = vue.isInt(value) ? value : value.toFixed(2);\r\n                                average = vue.isInt(average) ? average : average.toFixed(2);\r\n                                let grademax = item.grademax;\r\n                                let text = '<b>' + name + '<b> <br/>' +\r\n                                    vue.strings.grades_tooltip_average + ': ' + average + ' (' + value + ' %)<br/>' +\r\n                                    vue.strings.grades_tooltip_grade + ': ' + grademax + '<br/>' +\r\n                                    count + ' ' + students_label + ' ' + vue.grades.student_count + '<br/>' +\r\n                                    '<i>' + view_details + '</i>';\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.yAxis = [{\r\n                            allowDecimals: false,\r\n                            max: 100,\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                            title: {\r\n                                text: this.strings.grades_yaxis_title,\r\n                            }\r\n                        }];\r\n                        chart.series = [{\r\n                            data: this.average_data,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_item_grades_details_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.item_grades_details_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function() {\r\n                                let category = this.points[0].key;\r\n                                let name = vue.selected_item.itemname;\r\n                                let maxgrade = vue.selected_item.grademax;\r\n                                let grade = this.y;\r\n                                grade = vue.isInt(grade) ? grade : grade.toFixed(2);\r\n                                let text = '<b>' + name + '<b> <br/>' +\r\n                                    category + ': ' + grade + '/' + maxgrade + '<br/>';\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.yAxis = [{\r\n                            title: {\r\n                                enabled: false,\r\n                            }\r\n                        }];\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: this.grade_item_details_data,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_item_grades_distribution_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.item_grades_distribution_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.grade_item_distribution_categories\r\n                        };\r\n                        chart.yAxis = [{\r\n                            title: {\r\n                                text: this.strings.grades_distribution_yaxis_title,\r\n                            },\r\n                            allowDecimals: false,\r\n                        }];\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function() {\r\n                                let prefix = vue.strings.grades_distribution_tooltip_prefix;\r\n                                let suffix = vue.strings.grades_distribution_tooltip_suffix;\r\n                                let send_mail = vue.strings.send_mail;\r\n                                let name = this.x;\r\n                                let value = this.y;\r\n                                let students_label = vue.strings.students_text;\r\n                                if (value == 1) {\r\n                                    students_label = vue.strings.student_text;\r\n                                }\r\n                                let text = '<b>' + prefix + ': </b> '+ name + ' <br/>'\r\n                                    + value + ' ' + students_label + ' ' + suffix + ' <br/>'\r\n                                    + '<i>' + send_mail + '</i>';\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                stacking: 'normal',\r\n                                borderWidth: 1,\r\n                                pointPadding: 0,\r\n                                groupPadding: 0,\r\n                            },\r\n                            column:{\r\n                                point:{\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            vue.selected_users = vue.grade_item_users[position];\r\n                                            vue.email_strings.subject = vue.email_strings.subject_prefix\r\n                                                + \" - \" + vue.selected_item.itemname;\r\n                                            vue.dialog = true;\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            type: 'column',\r\n                            data: this.grade_item_distribution_data\r\n                        }, {\r\n                            type: 'spline',\r\n                            data: this.grade_item_distribution_data,\r\n                            marker: {\r\n                                lineWidth: 1,\r\n                            }\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    calculate_chart_items_average(items) {\r\n                        let values = [];\r\n                        let categories = [];\r\n                        items.forEach(item => {\r\n                            values.push(item.average_percentage);\r\n                            categories.push(item.itemname);\r\n                        });\r\n                        this.average_categories = categories;\r\n                        this.average_data = values;\r\n                        this.selected_items = items;\r\n                    },\r\n\r\n                    update_detail_charts (item) {\r\n                        this.modulename = item.itemmodule;\r\n                        this.moduleid = item.coursemoduleid;\r\n                        this.grade_item_title = item.itemname;\r\n                        this.calculate_chart_item_grade_detail(item);\r\n                        this.calculate_chart_item_grades_distribution(item);\r\n                    },\r\n\r\n                    calculate_chart_item_grade_detail(item) {\r\n                        this.selected_item = item;\r\n                        let item_data = [{\r\n                            name: this.strings.grades_best_grade,\r\n                            y: Number(item.maxrating) || 0\r\n                        },{\r\n                            name: this.strings.grades_average_grade,\r\n                            y: Number(item.average) || 0\r\n                        }, {\r\n                            name: this.strings.grades_worst_grade,\r\n                            y: Number(item.minrating) || 0\r\n                        }];\r\n                        this.grade_item_details_data = item_data;\r\n                    },\r\n\r\n                    calculate_chart_item_grades_distribution(item) {\r\n                        let greater = this.strings.grades_greater_than;\r\n                        let smaller = this.strings.grades_smaller_than;\r\n                        let categories = [\r\n                            `${greater} 90%`,\r\n                            `${greater} 80%`,\r\n                            `${greater} 70%`,\r\n                            `${greater} 60%`,\r\n                            `${greater} 50%`,\r\n                            `${smaller} 50%`];\r\n                        let values = [0, 0, 0, 0, 0, 0];\r\n                        let users = [[], [], [], [], [], []];\r\n                        if (item) {\r\n                            let weights = [0.9, 0.8, 0.7, 0.6, 0.5, 0];\r\n                            let ranges = [];\r\n                            let grademax = item.grademax;\r\n                            let limit = grademax;\r\n                            weights.forEach(weight => {\r\n                                let grade = grademax * weight;\r\n                                ranges.push({ max: limit, min: grade, count: 0});\r\n                                limit = grade - 0.1;\r\n                            });\r\n\r\n                            item.grades.forEach(grade => {\r\n                                ranges.forEach((range, index) => {\r\n                                    if (grade.rawgrade >= range.min && grade.rawgrade <= range.max) {\r\n                                        range.count++;\r\n                                        users[index].push(grade.user);\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                            values = [];\r\n                            ranges.forEach((range, index) => {\r\n                                let max = this.isInt(range.max) ? range.max : range.max.toFixed(1);\r\n                                let min = this.isInt(range.min) ? range.min : range.min.toFixed(1);\r\n                                let label = `${max} - ${min}<br/>${categories[index]}`;\r\n                                categories[index] = label;\r\n                                values.push(range.count);\r\n                            });\r\n                        }\r\n                        this.grade_item_users = users;\r\n                        this.grade_item_distribution_categories = categories,\r\n                        this.grade_item_distribution_data = values;\r\n                    },\r\n\r\n                    find_first_grade_item(items) {\r\n                        let item;\r\n                        if (items.length) {\r\n                            let count = items.length;\r\n                            for (let i = 0; i < count; i++) {\r\n                                if (items[i].maxrating > 0) {\r\n                                    item = items[i];\r\n                                    break;\r\n                                }\r\n                            }\r\n                            if (!item) {\r\n                                item = items[0];\r\n                            }\r\n                        }\r\n                        return item;\r\n                    },\r\n\r\n                    isInt(n) {\r\n                        return n % 1 === 0;\r\n                    },\r\n\r\n                    update_dialog (value) {\r\n                        this.dialog = value;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"grade_items_average\") {\r\n                            contents.push({\r\n                                title: this.strings.grade_items_average_help_title,\r\n                                description: this.strings.grade_items_average_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.grade_items_average_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.grade_items_average_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"item_grades_details\") {\r\n                            contents.push({\r\n                                title: this.strings.item_grades_details_help_title,\r\n                                description: this.strings.item_grades_details_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.item_grades_details_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"item_grades_distribution\") {\r\n                            contents.push({\r\n                                title: this.strings.item_grades_distribution_help_title,\r\n                                description: this.strings.item_grades_distribution_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.item_grades_distribution_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.item_grades_distribution_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "grades.min.js"
+}
diff --git a/notemyprogress/amd/build/graph.min.js b/notemyprogress/amd/build/graph.min.js
index 5529930d22fbfb9dc6d8aa54c31b51d46c2af551..5c25c1f8a716aaf41c2e9f07d3876c7df48bc130 100644
--- a/notemyprogress/amd/build/graph.min.js
+++ b/notemyprogress/amd/build/graph.min.js
@@ -1,2 +1,29 @@
-define ("local_notemyprogress/graph",["local_notemyprogress/vue","local_notemyprogress/vuetify","local_notemyprogress/chartdynamic"],function(a,b,c){"use strict";M.cfg.wwwroot;return{init:function(d){console.log({chart:d.chart});a.use(b);a.component("chart",c);new a({delimiters:["[[","]]"],el:"#graph1",vuetify:new b,data:function data(){return{chart:d.chart}},mounted:function mounted(){document.querySelector("#pd-loader").style.display="none";document.querySelector("#graph1").style.display="block"},methods:{}})}}});
+define("local_notemyprogress/graph", [
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/chartdynamic",
+], function (a, b, c) {
+  "use strict";
+  M.cfg.wwwroot;
+  return {
+    init: function (d) {
+      //console.log({ chart: d.chart });
+      a.use(b);
+      a.component("chart", c);
+      new a({
+        delimiters: ["[[", "]]"],
+        el: "#graph1",
+        vuetify: new b(),
+        data: function data() {
+          return { chart: d.chart };
+        },
+        mounted: function mounted() {
+          document.querySelector("#pd-loader").style.display = "none";
+          document.querySelector("#graph1").style.display = "block";
+        },
+        methods: {},
+      });
+    },
+  };
+});
 //# sourceMappingURL=graph.min.js.map
diff --git a/notemyprogress/amd/build/graph.min.js.map b/notemyprogress/amd/build/graph.min.js.map
index e4d1a5abf2d8e79592f73cd918aff89e573dfcbd..4ac21d2001af5e6896f7e64742b2cf6d8e513adb 100644
--- a/notemyprogress/amd/build/graph.min.js.map
+++ b/notemyprogress/amd/build/graph.min.js.map
@@ -1 +1,37 @@
-{"version":3,"sources":["../src/graph.js"],"names":["define","Vue","Vuetify","ChartDynamic","M","cfg","wwwroot","init","content","console","log","chart","use","component","delimiters","el","vuetify","data","mounted","document","querySelector","style","display","methods"],"mappings":"AAAAA,OAAM,4BAAC,CAAC,wBAAD,CACC,4BADD,CAEC,iCAFD,CAAD,CAIF,SAASC,CAAT,CAAcC,CAAd,CAAuBC,CAAvB,CAAqC,CACjC,aACcC,CAAC,CAACC,GAAF,CAAMC,OAFa,CA6BjC,MAAO,CACHC,IAAI,CA1BR,SAAcC,CAAd,CAAuB,CACnBC,OAAO,CAACC,GAAR,CAAY,CAACC,KAAK,CAAEH,CAAO,CAACG,KAAhB,CAAZ,EAEAV,CAAG,CAACW,GAAJ,CAAQV,CAAR,EACAD,CAAG,CAACY,SAAJ,CAAc,OAAd,CAAuBV,CAAvB,EAEA,GAAIF,CAAAA,CAAJ,CAAQ,CACJa,UAAU,CAAE,CAAC,IAAD,CAAO,IAAP,CADR,CAEJC,EAAE,CAAE,SAFA,CAGJC,OAAO,CAAE,GAAId,CAAAA,CAHT,CAIJe,IAJI,gBAIG,CACH,MAAO,CACHN,KAAK,CAAEH,CAAO,CAACG,KADZ,CAGV,CARG,CASJO,OATI,mBASM,CACNC,QAAQ,CAACC,aAAT,CAAuB,YAAvB,EAAqCC,KAArC,CAA2CC,OAA3C,CAAqD,MAArD,CACAH,QAAQ,CAACC,aAAT,CAAuB,SAAvB,EAAkCC,KAAlC,CAAwCC,OAAxC,CAAkD,OACrD,CAZG,CAaJC,OAAO,CAAE,EAbL,CAAR,CAiBH,CAEM,CAGV,CApCC,CAAN","sourcesContent":["define([\"local_notemyprogress/vue\",\n        \"local_notemyprogress/vuetify\",\n        \"local_notemyprogress/chartdynamic\",\n    ],\n    function(Vue, Vuetify, ChartDynamic) {\n        \"use strict\";\n        let wwwroot = M.cfg.wwwroot;\n\n        function init(content) {\n            console.log({chart: content.chart});\n\n            Vue.use(Vuetify);\n            Vue.component('chart', ChartDynamic);\n\n            new Vue({\n                delimiters: [\"[[\", \"]]\"],\n                el: \"#graph1\",\n                vuetify: new Vuetify(),\n                data() {\n                    return {\n                        chart: content.chart,\n                    };\n                },\n                mounted() {\n                    document.querySelector(\"#pd-loader\").style.display = \"none\";\n                    document.querySelector(\"#graph1\").style.display = \"block\";\n                },\n                methods: {\n                }\n            });\n\n        }\n\n        return {\n            init: init\n        };\n    });"],"file":"graph.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/graph.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "ChartDynamic",
+    "M",
+    "cfg",
+    "wwwroot",
+    "init",
+    "content",
+    "console",
+    "log",
+    "chart",
+    "use",
+    "component",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods"
+  ],
+  "mappings": "AAAAA,OAAM,4BAAC,CAAC,wBAAD,CACC,4BADD,CAEC,iCAFD,CAAD,CAIF,SAASC,CAAT,CAAcC,CAAd,CAAuBC,CAAvB,CAAqC,CACjC,aACcC,CAAC,CAACC,GAAF,CAAMC,OAFa,CA6BjC,MAAO,CACHC,IAAI,CA1BR,SAAcC,CAAd,CAAuB,CACnBC,OAAO,CAACC,GAAR,CAAY,CAACC,KAAK,CAAEH,CAAO,CAACG,KAAhB,CAAZ,EAEAV,CAAG,CAACW,GAAJ,CAAQV,CAAR,EACAD,CAAG,CAACY,SAAJ,CAAc,OAAd,CAAuBV,CAAvB,EAEA,GAAIF,CAAAA,CAAJ,CAAQ,CACJa,UAAU,CAAE,CAAC,IAAD,CAAO,IAAP,CADR,CAEJC,EAAE,CAAE,SAFA,CAGJC,OAAO,CAAE,GAAId,CAAAA,CAHT,CAIJe,IAJI,gBAIG,CACH,MAAO,CACHN,KAAK,CAAEH,CAAO,CAACG,KADZ,CAGV,CARG,CASJO,OATI,mBASM,CACNC,QAAQ,CAACC,aAAT,CAAuB,YAAvB,EAAqCC,KAArC,CAA2CC,OAA3C,CAAqD,MAArD,CACAH,QAAQ,CAACC,aAAT,CAAuB,SAAvB,EAAkCC,KAAlC,CAAwCC,OAAxC,CAAkD,OACrD,CAZG,CAaJC,OAAO,CAAE,EAbL,CAAR,CAiBH,CAEM,CAGV,CApCC,CAAN",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\n        \"local_notemyprogress/vuetify\",\n        \"local_notemyprogress/chartdynamic\",\n    ],\n    function(Vue, Vuetify, ChartDynamic) {\n        \"use strict\";\n        let wwwroot = M.cfg.wwwroot;\n\n        function init(content) {\n            //console.log({chart: content.chart});\n\n            Vue.use(Vuetify);\n            Vue.component('chart', ChartDynamic);\n\n            new Vue({\n                delimiters: [\"[[\", \"]]\"],\n                el: \"#graph1\",\n                vuetify: new Vuetify(),\n                data() {\n                    return {\n                        chart: content.chart,\n                    };\n                },\n                mounted() {\n                    document.querySelector(\"#pd-loader\").style.display = \"none\";\n                    document.querySelector(\"#graph1\").style.display = \"block\";\n                },\n                methods: {\n                }\n            });\n\n        }\n\n        return {\n            init: init\n        };\n    });"
+  ],
+  "file": "graph.min.js"
+}
diff --git a/notemyprogress/amd/build/listener.min.js b/notemyprogress/amd/build/listener.min.js
index 577b33cb6aedc1b3b10838f0ef40f60696806187..39c3b1a9a90cc0385a9174e8eddfc89de14df846 100644
--- a/notemyprogress/amd/build/listener.min.js
+++ b/notemyprogress/amd/build/listener.min.js
@@ -4,7 +4,7 @@ define([], function () {
       document
         .querySelector("#downloadButton")
         .addEventListener("click", function () {
-          console.log("clicked !");
+          //console.log("clicked !");
         });
     },
   };
diff --git a/notemyprogress/amd/build/metareflexion.js b/notemyprogress/amd/build/metareflexion.js
new file mode 100644
index 0000000000000000000000000000000000000000..f98a13c7217b65a0b441cc650af31dbdb4eb20ca
--- /dev/null
+++ b/notemyprogress/amd/build/metareflexion.js
@@ -0,0 +1,1284 @@
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/alertify",
+  "local_notemyprogress/pagination",
+  //"local_notemyprogress/paginationcomponent",
+  "local_notemyprogress/chartdynamic",
+  //"local_notemyprogress/chartcomponent",
+  "local_notemyprogress/pageheader",
+  //"local_student_reports/pageheadercomponent",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Alertify,
+  Pagination,
+  ChartStatic,
+  Pageheader
+) {
+  "use strict";
+
+  function clone(obj) {
+    return JSON.parse(JSON.stringify(obj));
+  }
+
+  function init(content) {
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartStatic);
+    Vue.component("pageheader", Pageheader);
+
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#metareflexion",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          test: true,
+          module_groups: content.module_groups,
+          indicators: content.indicators,
+          resources_access_colors: content.resources_access_colors,
+          inverted_time_colors: content.inverted_time_colors,
+          inverted_time: content.indicators.inverted_time,
+          hours_sessions: content.indicators.hours_sessions,
+          sections: content.indicators.sections,
+          sections_map: null,
+          week_progress: 0,
+          resource_access_categories: [],
+          resource_access_data: [],
+          modules_dialog: false,
+          help_dialog: false,
+          help_contents: [],
+
+          disabled_form: false,
+          groups: content.groups,
+          students_planification: content.students_planification,
+          selected_week: null,
+          paginator_week: null,
+          saved_planification: false,
+          strings: content.strings,
+          userid: content.userid,
+          courseid: content.courseid,
+          loading: false,
+          compare_with_course: false,
+          current_week: content.cmcurrentweeknew,
+          week_schedule: content.week_schedule,
+
+          data_report_meta_days: content.data_report_days,
+          data_report_meta_hours: content.data_report_hours,
+          data_report_meta_goals: content.data_report_goals,
+
+          data_report_meta_questions: content.data_report_hours_questions,
+
+          data_report_meta_classroom:
+            content.data_report_classroom.average_classroom,
+          data_report_meta_of_classroom:
+            content.data_report_classroom.average_of_classroom,
+          data_report_meta_last_week: content.report_last_week,
+
+          status_planning: content.status_planning,
+          course_report_hours: content.course_report_hours,
+          past_week: content.lastweek,
+          render_has: content.profile_render,
+          dialog: false,
+          days_week: [
+            content.strings.currentweek_day_lun,
+            content.strings.currentweek_day_mar,
+            content.strings.currentweek_day_mie,
+            content.strings.currentweek_day_jue,
+            content.strings.currentweek_day_vie,
+            content.strings.currentweek_day_sab,
+            content.strings.currentweek_day_dom,
+          ],
+          active_tab: 0,
+          icons: {
+            calendar: content.calendar_icon,
+          },
+          tabs_header: [
+            {
+              name: content.strings.tab_1,
+              id: 1,
+              teacher_can_view: false,
+              student_can_view: true,
+            },
+            {
+              name: content.strings.tab_2,
+              id: 2,
+              teacher_can_view: false,
+              student_can_view: true,
+            },
+          ],
+          hours_committed: 0,
+          id_committed: null,
+          pages: content.pages,
+          active_tab: null,
+          chart_metareflexion_options: {
+            maintainAspectRatio: false,
+            legend: {
+              display: false,
+            },
+            scales: {
+              xAxes: [
+                {
+                  ticks: {
+                    beginAtZero: true,
+                    callback: function (value) {
+                      if (Number.isInteger(value)) {
+                        return value;
+                      }
+                    },
+                    suggestedMin: 0,
+                    suggestedMax: 5,
+                  },
+                },
+              ],
+            },
+          },
+
+          chart_hours_options: {
+            maintainAspectRatio: false,
+            legend: { display: false },
+            tooltips: {
+              callbacks: {
+                title: (tooltipItem, data) => {
+                  var title_label = null;
+                  if (content.profile_render == "teacher") {
+                    title_label = content.strings.hover_title_teacher;
+                  } else {
+                    title_label = content.strings.hover_title_student;
+                  }
+                  return title_label;
+                },
+                label: (tooltipItem, data) => {
+                  var label = null;
+                  var labels_summaries = [];
+                  let inverted =
+                    vue.render_has == "teacher"
+                      ? vue.strings.inverted_time
+                      : `${vue.strings.myself} ${vue.strings.inverted_time}`;
+                  label = `${inverted} : ${vue.data_report_meta_hours.label_horas_trabajadas}`;
+                  labels_summaries.push(label);
+                  if (vue.render_has == "student" && vue.compare_with_course) {
+                    label = `${vue.strings.inverted_time_course} : ${vue.course_report_hours.label_horas_trabajadas}`;
+                    labels_summaries.push(label);
+                  }
+                  let planified =
+                    vue.render_has == "teacher"
+                      ? vue.strings.planified_time
+                      : `${vue.strings.myself} ${vue.strings.planified_time}`;
+                  label = `${planified} : ${vue.data_report_meta_hours.label_horas_planificadas}`;
+                  labels_summaries.push(label);
+                  if (vue.render_has == "student" && vue.compare_with_course) {
+                    label = `${vue.strings.planified_time_course} ${vue.course_report_hours.label_horas_planificadas}`;
+                    labels_summaries.push(label);
+                  }
+                  if (content.profile_render == "teacher") {
+                    label = `${vue.strings.interaction_user} : ${vue.data_report_meta_hours.interacted_users}`;
+                    labels_summaries.push(label);
+                  }
+                  return labels_summaries;
+                },
+              },
+              backgroundColor: "rgba(0, 0, 0, .8)",
+              titleFontSize: 12,
+              titleFontColor: "rgba(255, 255, 255, 1)",
+              bodyFontColor: "rgba(255, 255, 255, .8)",
+              bodyFontSize: 12,
+              displayColors: false,
+            },
+            scales: {
+              xAxes: [
+                {
+                  display: true,
+                  scaleLabel: {
+                    display: true,
+                    labelString: content.strings.hours_unit_time_label,
+                    fontSize: 15,
+                  },
+                  ticks: {
+                    autoSkip: true,
+                    stepSize: 1,
+                    suggestedMin: 0,
+                  },
+                },
+              ],
+            },
+          },
+
+          chart_options_2: {
+            legend: {
+              display: true,
+              position: "bottom",
+            },
+          },
+          img_no_data: content.image_no_data,
+        };
+      },
+
+      updated() {
+        //console.log("this.data_report_meta_questions.questions = ");
+        //console.log(this.data_report_meta_questions.questions);
+        //console.log("this.paginator_week = ");
+        //console.log(this.paginator_week);
+        //console.log("this.data_report_meta_questions = ");
+        //console.log(this.data_report_meta_questions);
+        // //console.log("current_week = ");
+        // //console.log(this.current_week);
+        // //console.log("this.pages = ");
+        // //console.log(this.pages);
+        //console.log("this.data_report_meta_hours = ");
+        //console.log(this.data_report_meta_hours);
+        //console.log("data_report_meta_goals = ");
+        //console.log(this.data_report_meta_goals);
+        // //console.log("data_report_meta_days = ");
+        // //console.log(this.data_report_meta_days);
+      },
+
+      mounted() {
+        document.querySelector("#sr-loader").style.display = "none";
+        document.querySelector("#metareflexion").style.display = "block";
+        if (!this.past_week.classroom_hours) {
+          this.past_week.classroom_hours = 0;
+        }
+        if (!this.past_week.classroom_hours) {
+          this.past_week.hours_off_course = 0;
+        }
+        this.pages.forEach((page) => {
+          if (page.selected) {
+            this.selected_week = page;
+            this.paginator_week = page;
+          }
+        });
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+        }, 500);
+        vue.setGraphicsEventListeners();
+        // if (typeof this.past_week.id != "undefined") {
+        //   this.disabled_form = true;
+        // }
+      },
+
+      computed: {
+        progress() {
+          var count_all = 0;
+          var count_finished = 0;
+          Object.keys(this.module_groups).map((key) => {
+            let group = this.module_groups[key];
+            count_all += group.count_all;
+            count_finished += group.count_finished;
+          });
+          let average = (count_finished * 100) / count_all;
+          average = Number.isNaN(average) ? 0 : average.toFixed(0);
+          return average;
+        },
+
+        isDisabledBtnLastWeek() {
+          return (
+            //this.past_week.classroom_hours >= 0 &&
+            //this.past_week.hours_off_course >= 0 &&
+            this.data_report_meta_questions.questions[1].answer_selected ===
+              null ||
+            this.data_report_meta_questions.questions[2].answer_selected ===
+              null ||
+            this.data_report_meta_questions.questions[3].answer_selected ===
+              null ||
+            this.data_report_meta_questions.questions[4].answer_selected ===
+              null
+          );
+        },
+
+        hasLastWeek() {
+          var last_week = false;
+          this.pages.forEach((page) => {
+            if (page.is_current_week && page.number > 1) {
+              last_week = true;
+            }
+          });
+          return last_week;
+        },
+
+        isDisabledQuestions() {
+          //if today <= date_end (weekstart + 7) OR no shedule return true else return false
+          return this.paginator_week != null
+            ? !(
+                this.week_schedule[this.paginator_week.weekcode] &&
+                !this.paginator_week.is_current_week
+              )
+            : true;
+        },
+
+        // isDisabledBtnCurrentWeek() {
+        //   return (
+        //     this.current_week[0].weekly_schedules_hours > 0 &&
+        //     (this.current_week[0].weekly_schedules_days.lun == true ||
+        //       this.current_week[0].weekly_schedules_days.mar == true ||
+        //       this.current_week[0].weekly_schedules_days.mie == true ||
+        //       this.current_week[0].weekly_schedules_days.jue == true ||
+        //       this.current_week[0].weekly_schedules_days.vie == true ||
+        //       this.current_week[0].weekly_schedules_days.sab == true ||
+        //       this.current_week[0].weekly_schedules_days.dom == true)
+        //   );
+        // },
+
+        benefits_attending_has_data() {
+          var attending_has_data = false;
+
+          this.chartdata_benefits_attending_classes().datasets[0].data.forEach(
+            (element) => {
+              if (element > 0) {
+                attending_has_data = true;
+              }
+            }
+          );
+
+          return attending_has_data;
+        },
+
+        learning_objectives_has_data() {
+          var objectives_has_data = false;
+
+          this.chartdata_learning_objectives().datasets[0].data.forEach(
+            (element) => {
+              if (element > 0) {
+                objectives_has_data = true;
+              }
+            }
+          );
+
+          return objectives_has_data;
+        },
+      },
+
+      methods: {
+        get_modules(day, cmid) {
+          return this.current_week[0].weekly_schedules_days.dias_planificados[
+            day
+          ].includes(cmid);
+        },
+
+        update_interactions(week) {
+          //console.log("update_interactions called");
+          this.loading = true;
+          this.errors = [];
+          let data = {
+            action: "worksessions",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: week.weekcode,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                this.hours_sessions = response.data.data.indicators.sessions;
+                this.session_count = response.data.data.indicators.count;
+                this.inverted_time = response.data.data.indicators.time;
+              } else {
+                this.error_messages.push(this.strings.error_network);
+              }
+            })
+            .catch((e) => {
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              this.loading = false;
+              //Ici, la page a fini de charger
+              vue.addLogsIntoDB(
+                "viewed",
+                "week_" + week.weekcode,
+                "week_section",
+                "Week section that allows you to obtain information on a specific week"
+              );
+              vue.setGraphicsEventListeners();
+            });
+          return this.data;
+        },
+
+        convert_time(time) {
+          time *= 3600; // pasar las horas a segundos
+          let h = this.strings.hours_short;
+          let m = this.strings.minutes_short;
+          let s = this.strings.seconds_short;
+          let hours = Math.floor(time / 3600);
+          let minutes = Math.floor((time % 3600) / 60);
+          let seconds = Math.floor(time % 60);
+          let text;
+          if (hours >= 1) {
+            if (minutes >= 1) {
+              text = `${hours}${h} ${minutes}${m}`;
+            } else {
+              text = `${hours}${h}`;
+            }
+          } else if (minutes >= 1) {
+            if (seconds >= 1) {
+              text = `${minutes}${m} ${seconds}${s}`;
+            } else {
+              text = `${minutes}${m}`;
+            }
+          } else {
+            text = `${seconds}${s}`;
+          }
+          return text;
+        },
+
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
+
+        build_inverted_time_chart() {
+          //console.log("enter build_inverted_time_chart ");
+          //console.log(this.students_planification);
+          //console.log("this.data_report_meta_hours = ");
+          //console.log(this.data_report_meta_hours);
+          let chart = new Object();
+          let meta = new Object();
+          meta = this.chartdata_hours_week_dedication();
+          //console.log("meta = ");
+          //console.log(meta);
+          let invest = [
+            {
+              name: meta.labels[2],
+              y: meta.datasets[0].data[2],
+            },
+            {
+              name: meta.labels[0],
+              y: meta.datasets[0].data[0],
+            },
+            {
+              name: meta.labels[1],
+              y: meta.datasets[0].data[1],
+            },
+          ];
+          //console.log("invest = ");
+          //console.log(invest);
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.inverted_time_colors;
+          chart.xAxis = {
+            type: "category",
+            crosshair: true,
+          };
+          chart.yAxis = {
+            title: {
+              text: this.strings.inverted_time_chart_x_axis,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let category_name = this.points[0].key;
+              let time = vue.convert_time(this.y);
+              return `<b>${category_name}: </b>${time}`;
+            },
+          };
+          chart.legend = {
+            enabled: false,
+          };
+
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: invest,
+            },
+          ];
+
+          // chart.series.update(
+          //   {
+          //     colorByPoint: true,
+          //     data: invest,
+          //   },
+          //   false
+          // ); //true / false to redraw
+          //console.log("this.inverted_time.data = ");
+          //console.log(this.inverted_time.data);
+
+          //console.log("invest = ");
+          //console.log(invest);
+          //console.log("end build_inverted_time_chart");
+          return chart;
+        },
+
+        get_goal(goal_id) {
+          return this.current_week[0].weekly_schedules_goals.includes(goal_id);
+        },
+
+        update_goal(goal_id, event) {
+          //console.log(this.data_report_meta_goals);
+          if (event) {
+            this.current_week[0].weekly_schedules_goals.push(goal_id);
+          } else {
+            const i =
+              this.current_week[0].weekly_schedules_goals.indexOf(goal_id);
+            //console.log(i);
+            this.current_week[0].weekly_schedules_goals.splice(i, 1);
+          }
+          //console.log(this.data_report_meta_goals);
+        },
+
+        update_module(day, module_id, event) {
+          if (event) {
+            this.current_week[0].weekly_schedules_days.dias_planificados[
+              day
+            ].push(module_id);
+          } else {
+            const i =
+              this.current_week[0].weekly_schedules_days.dias_planificados[
+                day
+              ].indexOf(module_id);
+            //console.log(i);
+            this.current_week[0].weekly_schedules_days.dias_planificados[
+              day
+            ].splice(i, 1);
+          }
+          //console.log(this.current_week[0].days_committed[day]);
+        },
+
+        subtitle_reports_hours_label() {
+          let label = "";
+          if (this.render_has == "teacher") {
+            label = this.strings.subtitle_reports_hours_teacher;
+          } else {
+            label = this.strings.subtitle_reports_hours_student;
+          }
+          return label;
+        },
+
+        subtitle_reports_days_student_label() {
+          let label = "";
+          if (this.render_has == "teacher") {
+            label = this.strings.subtitle_reports_days_teacher;
+          } else {
+            label = this.strings.subtitle_reports_days_student;
+          }
+          return label;
+        },
+
+        translate_name(name, prefix) {
+          var index_name = prefix + name;
+          if (!(typeof this.strings[index_name] == "undefined")) {
+            name = this.strings[index_name];
+          }
+          return name;
+        },
+
+        get_interactions(week) {
+          //console.log("current_week = ");
+          //console.log(this.current_week);
+          //console.log("enter get_interactions");
+          //console.log("week = ");
+          //console.log(week);
+          //console.log("current_week = ");
+          //console.log(this.current_week);
+          //console.log("this.data_report_meta_hours = ");
+          //console.log(this.data_report_meta_hours);
+          //console.log("data_report_meta_goals = ");
+          //console.log(this.data_report_meta_goals);
+          //console.log("data_report_meta_days = ");
+          //console.log(this.data_report_meta_days);
+          this.loading = true;
+          var validresponse = false;
+          this.errors = [];
+          var data = {
+            action: "metareflexionrepotgetweek",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: week.weekcode,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              //if (response.status == 200 && response.data.ok) {
+              if (response.status == 200 && response.data.ok) {
+                //console.log("if");
+                this.paginator_week = week;
+                validresponse = true;
+
+                this.data_report_meta_goals =
+                  response.data.data.interactions_goals;
+                this.data_report_meta_days =
+                  response.data.data.interactions_days;
+                this.data_report_meta_hours =
+                  response.data.data.interactions_hours;
+                this.data_report_meta_questions =
+                  response.data.data.interactions_questions;
+                this.course_report_hours =
+                  response.data.data.course_report_hours;
+                //console.log(this.data_report_meta_days);
+
+                //this.students_planification = response.data.data.students_planification;
+                this.status_planning = response.data.data.status_planning;
+              } else {
+                //console.log("else");
+                this.errors.push(this.strings.api_error_network);
+              }
+            })
+            .catch((e) => {
+              //console.log("catch");
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              //console.log("finally");
+              this.loading = false;
+            });
+
+          if (!validresponse) {
+          }
+
+          return validresponse;
+        },
+
+        get_interacions_last_week(week) {
+          //console.log("enter get_interacions_last_week ");
+          this.loading = true;
+          var validresponse = false;
+          this.errors = [];
+          var data = {
+            action: "metareflexionreportlastweek",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: week.weekcode,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                this.paginator_week = week;
+                validresponse = true;
+                this.data_report_meta_classroom =
+                  response.data.data.average_hours_clases.average_classroom;
+                this.data_report_meta_of_classroom =
+                  response.data.data.average_hours_clases.average_of_classroom;
+                this.data_report_meta_last_week =
+                  response.data.data.report_last_week;
+              } else {
+                this.errors.push(this.strings.api_error_network);
+              }
+            })
+            .catch((e) => {
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              this.loading = false;
+            });
+          return validresponse;
+        },
+
+        get_week_dates(week) {
+          return `${week.weekstart} ${this.strings.tv_to} ${week.weekend}`;
+        },
+
+        chartdata_day_dedication() {
+          var data = new Object();
+          data.datasets = [];
+          data.labels = [
+            this.strings.currentweek_day_lun,
+            this.strings.currentweek_day_mar,
+            this.strings.currentweek_day_mie,
+            this.strings.currentweek_day_jue,
+            this.strings.currentweek_day_vie,
+            this.strings.currentweek_day_sab,
+            this.strings.currentweek_day_dom,
+          ];
+
+          let dataset = new Object();
+
+          dataset.label = "Dias Comprometidos";
+          dataset.data = this.data_report_meta_days.dias_planificados;
+          dataset.backgroundColor = [
+            "#a0c2fa",
+            "#a0c2fa",
+            "#a0c2fa",
+            "#a0c2fa",
+            "#a0c2fa",
+            "#a0c2fa",
+            "#a0c2fa",
+          ];
+          dataset.borderWidth = 0;
+          data.datasets.push(dataset);
+
+          dataset = new Object();
+          dataset.label = "Dias trabajados";
+          dataset.data = this.data_report_meta_days.dias_trabajados;
+          dataset.backgroundColor = [
+            "#bfd8fc",
+            "#bfd8fc",
+            "#bfd8fc",
+            "#bfd8fc",
+            "#bfd8fc",
+            "#bfd8fc",
+            "#bfd8fc",
+          ];
+          dataset.borderWidth = 0;
+          data.datasets.push(dataset);
+
+          return data;
+        },
+
+        chartdata_hours_week_dedication() {
+          var data = new Object();
+          data.datasets = [];
+
+          //let inverted = this.render_has == "teacher" ? this.strings.inverted_time : `${this.strings.myself} ${this.strings.inverted_time}`;
+          //let planified = this.render_has == "teacher" ? this.strings.planified_time : `${this.strings.myself} ${this.strings.planified_time}`;
+          let inverted = `${this.strings.myself} ${this.strings.inverted_time}`;
+          let planified = `${this.strings.myself} ${this.strings.planified_time}`;
+
+          data.labels = [inverted, planified];
+          var dataset = new Object();
+          dataset.label = "Horas";
+          //console.log("data_report_meta_hours in chartdata_hours_week_dedication  = ");
+          //console.log(this.data_report_meta_hours);
+          dataset.data = [
+            parseFloat(this.data_report_meta_hours.horas_trabajadas),
+            parseInt(this.data_report_meta_hours.horas_planificadas),
+          ];
+          dataset.backgroundColor = ["#ffa700", "#a0c2fa"];
+          dataset.borderWidth = 0;
+          data.datasets.push(dataset);
+
+          //if (this.render_has == "student" && this.compare_with_course) {
+          data.labels.splice(1, 0, this.strings.inverted_time_course);
+          //data.labels.splice(3, 0, this.strings.planified_time_course);
+          dataset.data.splice(
+            1,
+            0,
+            parseFloat(this.course_report_hours.horas_trabajadas)
+          );
+          // dataset.data.splice(
+          //   3,
+          //   0,
+          //   parseFloat(this.course_report_hours.horas_planificadas)
+          // );
+          dataset.backgroundColor.splice(1, 0, "#ffa700");
+          //dataset.backgroundColor.splice(3, 0, "#a0c2fa");
+          //}
+          //console.log("data_report_meta_hours = ");
+          //console.log(this.data_report_meta_hours);
+
+          //console.log("data = ");
+          //console.log(data);
+          return data;
+        },
+
+        chartdata_learning_objectives() {
+          var data = new Object();
+          data.datasets = [];
+          var grafico1 = new Object();
+          grafico1.label = [];
+          grafico1.data = [];
+
+          this.data_report_meta_last_week[0].alternatives.forEach((element) => {
+            grafico1.label.push(element.enunciated);
+            grafico1.data.push(element.count_selections);
+          });
+
+          data.labels = grafico1.label;
+          var dataset = new Object();
+          dataset.data = grafico1.data;
+          dataset.backgroundColor = ["#2784cc", "#7580d8", "#b278d4"];
+          dataset.borderWidth = 0;
+          data.datasets.push(dataset);
+
+          return data;
+        },
+
+        chartdata_benefits_attending_classes() {
+          var data = new Object();
+          data.datasets = [];
+          var grafico2 = new Object();
+          grafico2.label = [];
+          grafico2.data = [];
+
+          this.data_report_meta_last_week[1].alternatives.forEach((element) => {
+            grafico2.label.push(element.enunciated);
+            grafico2.data.push(element.count_selections);
+          });
+
+          data.labels = grafico2.label;
+          var dataset = new Object();
+          dataset.data = grafico2.data;
+          dataset.backgroundColor = [
+            "#e56cbf",
+            "#ff659d",
+            "#ff6e73",
+            "#ff8745",
+            "#ffa600",
+            "#d0b800",
+          ];
+          dataset.borderWidth = 0;
+          data.datasets.push(dataset);
+
+          return data;
+        },
+
+        action_save_metareflexion(course_module) {
+          //console.log("this.current_week[0].weekly_schedules_goals = ");
+          //console.log(this.current_week[0].weekly_schedules_goals);
+          if (course_module.weekly_schedules_id) {
+            //console.log("update_metareflexion called");
+            this.update_metareflexion(course_module);
+          } else {
+            //console.log("save_metareflexion called");
+            this.save_metareflexion_new(course_module);
+          }
+          this.get_interaction_group(this.paginator_week);
+          //this.saved_planification = true;
+        },
+
+        updated_metareflexion() {
+          if (
+            this.selected_week.weekcode == this.paginator_week.weekcode &&
+            this.saved_planification
+          ) {
+            this.get_interactions(this.paginator_week);
+            this.saved_planification = false;
+          }
+        },
+
+        get_selected_days(week) {
+          var filtered_days = [];
+          Object.keys(week).forEach((day, index) => {
+            if (week[day]) {
+              filtered_days.push(day);
+            }
+          });
+          return filtered_days.join();
+        },
+
+        update_metareflexion(course_module) {
+          // var days_committed = this.get_selected_days(
+          //   course_module.weekly_schedules_days
+          // );
+          var data = {
+            action: "updatemetareflexion",
+            metareflexionid: course_module.weekly_schedules_id,
+            // days: days_committed,
+            hours:
+              this.current_week[0].weekly_schedules_hours.horas_planificadas,
+            goals: this.current_week[0].weekly_schedules_goals,
+            days: JSON.stringify(
+              this.current_week[0].weekly_schedules_days.dias_planificados
+            ),
+            courseid: this.courseid,
+            weekcode: course_module.weekcode,
+            userid: this.userid,
+            url: this.url,
+          };
+          //console.log("data = ");
+          //console.log(data);
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              //console.log("then");
+              if (response.status == 200 && response.data.ok) {
+                //console.log("if");
+                Alertify.success(this.strings.update_planification_success);
+                course_module.modalopened = false;
+              } else {
+                //console.log("error if axios");
+              }
+            })
+            .catch((e) => {
+              //console.log("catch");
+              this.saving_loader = false;
+              Alertify.error("The note could not be saved...");
+            });
+        },
+
+        save_metareflexion_new(course_module) {
+          //console.log("this.data_report_meta_hours = ");
+          //console.log(this.data_report_meta_hours);
+          //console.log("data_report_meta_goals = ");
+          //console.log(this.data_report_meta_goals);
+          //console.log("data_report_meta_days = ");
+          //console.log(this.data_report_meta_days);
+          var data = {
+            action: "savemetareflexion",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: course_module.weekcode,
+            url: this.url,
+
+            hours:
+              this.current_week[0].weekly_schedules_hours.horas_planificadas,
+            goals: this.current_week[0].weekly_schedules_goals,
+            days: JSON.stringify(
+              this.current_week[0].weekly_schedules_days.dias_planificados
+            ),
+          };
+
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              //console.log("then");
+              if (response.status == 200 && response.data.ok) {
+                course_module.weekly_schedules_id =
+                  response.data.data.responsemetareflexion.id;
+                //console.log(response.data.data.responsemetareflexion.days);
+                //console.log("if");
+                Alertify.success(this.strings.save_planification_success);
+                course_module.modalopened = false;
+              } else {
+                //console.log("else status");
+                Alertify.error(this.strings.api_error_network);
+              }
+            })
+            .catch((e) => {
+              //console.log("catch");
+              this.saving_loader = false;
+              Alertify.error(this.strings.api_error_network);
+            })
+            .finally(() => {
+              //console.log("finally");
+              this.saving_loader = false;
+            });
+        },
+
+        days_select(days) {
+          var days_committed = "";
+          Object.values(days).forEach(function (elemento, indice) {
+            if (elemento) {
+              if (indice > 0 && days_committed) {
+                days_committed += ", ";
+              }
+
+              switch (Object.keys(days)[indice]) {
+                case "lun":
+                  days_committed += content.strings.currentweek_day_lun;
+                  break;
+                case "mar":
+                  days_committed += content.strings.currentweek_day_mar;
+                  break;
+                case "mie":
+                  days_committed += content.strings.currentweek_day_mie;
+                  break;
+                case "jue":
+                  days_committed += content.strings.currentweek_day_jue;
+                  break;
+                case "vie":
+                  days_committed += content.strings.currentweek_day_vie;
+                  break;
+                case "sab":
+                  days_committed += content.strings.currentweek_day_sab;
+                  break;
+                case "dom":
+                  days_committed += content.strings.currentweek_day_dom;
+                  break;
+              }
+            }
+          });
+
+          return days_committed;
+        },
+
+        actions_last_week() {
+          if (this.data_report_meta_questions.id) {
+            //console.log("update");
+            this.update_last_week();
+          } else {
+            //console.log("save");
+            this.save_last_week();
+          }
+        },
+
+        save_last_week() {
+          var data_params = {
+            action: "savelastweek",
+            userid: this.userid,
+            courseid: this.courseid.toString(),
+            weekcode: this.paginator_week.weekcode,
+            classroom_hours: this.data_report_meta_questions.classroom_hours,
+            hours_off: this.data_report_meta_questions.hours_off_course,
+            objectives_reached:
+              this.data_report_meta_questions.questions[1].answer_selected,
+            previous_class:
+              this.data_report_meta_questions.questions[2].answer_selected,
+            benefit:
+              this.data_report_meta_questions.questions[3].answer_selected,
+            feeling:
+              this.data_report_meta_questions.questions[4].answer_selected,
+          };
+          //console.log("data = ");
+          //console.log(data_params);
+
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data_params,
+          })
+            .then((response) => {
+              //console.log("then");
+              if (response.status == 200 && response.data.ok) {
+                //console.log("if");
+                this.data_report_meta_questions.id =
+                  response.data.data.response_save_last_week.id;
+                Alertify.success(this.strings.last_week_created);
+                //this.disabled_form = true;
+              } else {
+                //console.log("else");
+              }
+            })
+            .catch((e) => {
+              //console.log("catch");
+              Alertify.error(this.strings.api_error_network);
+            });
+        },
+
+        update_last_week() {
+          var data_params = {
+            action: "updatelastweek",
+            userid: this.userid,
+            courseid: this.courseid,
+            lastweekid: this.data_report_meta_questions.id,
+            classroom_hours: this.data_report_meta_questions.classroom_hours,
+            hours_off: this.data_report_meta_questions.hours_off_course,
+            objectives_reached:
+              this.data_report_meta_questions.questions[1].answer_selected,
+            previous_class:
+              this.data_report_meta_questions.questions[2].answer_selected,
+            benefit:
+              this.data_report_meta_questions.questions[3].answer_selected,
+            feeling:
+              this.data_report_meta_questions.questions[4].answer_selected,
+          };
+
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data_params,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                Alertify.success(this.strings.last_week_update);
+              }
+            })
+            .catch((e) => {
+              Alertify.error(this.strings.api_error_network);
+            });
+        },
+
+        get_icon(dias_planificados_trabajados, position) {
+          var icon_name = "remove";
+
+          if (dias_planificados_trabajados.dias_planificados[position]) {
+            if (dias_planificados_trabajados.dias_trabajados[position] > 0) {
+              icon_name = "mdi-thumb-up-outline";
+            } else {
+              icon_name = "mdi-mdi-thumb-down-outline";
+            }
+          }
+
+          return icon_name;
+        },
+
+        full_day_name(day) {
+          return this.strings["currentweek_day_" + day];
+        },
+
+        // open_chart_help(chart) {
+        //   let contents = [];
+        //   let action = "";
+        //   let objectType = "";
+        //   let objectName = "";
+        //   let objectDescription = "";
+        //     contents.push({
+        //       title: "t1",
+        //       description: "desc1",
+        //     });
+        //     contents.push({
+        //       description: this.strings.inverted_time_help_description_p2,
+        //     });
+        //     action = "viewed";
+        //     objectType = "help";
+        //     objectName = "invested_time";
+        //     objectDescription = "Help section that provides information about the invested time chart";
+        //     // this.addLogsIntoDB(
+        //     //   action,
+        //     //   objectName,
+        //     //   objectType,
+        //     //   objectDescription
+        //     // );
+        //   this.help_contents = contents;
+        //   if (this.help_contents.length) {
+        //     this.help_dialog = true;
+        //   }
+        // },
+
+        get_help_content() {
+          var helpcontents = [];
+          if (this.active_tab == 0) {
+            var help = new Object();
+            help.title = this.strings.currentweek_card_title;
+            help.description = this.strings.currentweek_description_student;
+            helpcontents.push(help);
+          } else if (this.active_tab == 1) {
+            var help = new Object();
+            help.title = this.strings.subtitle_reports_hours;
+            help.description = this.strings.description_reports_hours_student;
+            helpcontents.push(help);
+
+            help = new Object();
+            help.description = this.strings.description_reports_goals_student;
+            helpcontents.push(help);
+
+            help = new Object();
+            help.title = this.strings.subtitle_reports_days;
+            help.description = this.strings.description_reports_days_student;
+            helpcontents.push(help);
+
+            help = new Object();
+            help.description = this.strings.description_reports_meta_student;
+            helpcontents.push(help);
+          }
+          return helpcontents;
+        },
+
+        is_teacher() {
+          let is_teacher = this.render_has == "teacher";
+          return is_teacher;
+        },
+
+        must_renderize(tab) {
+          var render = true;
+          if (this.render_has == "teacher") {
+            render = tab.teacher_can_view;
+          } else {
+            render = tab.student_can_view;
+          }
+          return render;
+        },
+
+        get_title_content() {
+          var title_content_tab;
+
+          if (this.active_tab == 0) {
+            title_content_tab = this.strings.currentweek_card_title;
+          } else if (this.active_tab == 1) {
+            title_content_tab = this.strings.effectiveness_title;
+          }
+
+          return title_content_tab;
+        },
+
+        planned_week_summary() {
+          var summary = false;
+          if (this.selected_week) {
+            summary = `<strong class="text-uppercase">${this.strings.pagination_name} ${this.selected_week.number}</strong>${this.strings.planning_week_start}
+                           ${this.selected_week.weekstart} ${this.strings.planning_week_end} ${this.selected_week.weekend}
+                          `;
+          }
+          return summary;
+        },
+
+        get_interaction_group(week) {
+          // //console.log("this.past_week = ");
+          // //console.log(this.past_week);
+          // //console.log("this.data_report_meta_questions = ");
+          // //console.log(this.data_report_meta_questions);
+          this.get_interactions(week);
+          this.get_interacions_last_week(week);
+          // //console.log("this.data_report_meta_classroom = ");
+          // //console.log(this.data_report_meta_classroom);
+          // //console.log("this.data_report_meta_of_classroom = ");
+          // //console.log(this.data_report_meta_of_classroom);
+          // //console.log("this.data_report_meta_last_week = ");
+          // //console.log(this.data_report_meta_last_week);
+          //console.log("this.current_week = ");
+          //console.log(this.current_week);
+          // //console.log("this.past_week = ");
+          // //console.log(this.past_week);
+        },
+      },
+      setGraphicsEventListeners() {
+        let graphics = document.querySelectorAll(".highcharts-container");
+        if (graphics.length < 1) {
+          setTimeout(vue.setGraphicsEventListeners, 500);
+        } else {
+          graphics[0].id = "EfficiencyChart";
+          graphics.forEach((graph) => {
+            graph.addEventListener("mouseenter", vue.addLogsViewGraphic);
+          });
+        }
+      },
+      addLogsViewGraphic(e) {
+        event.stopPropagation();
+        var action = "";
+        var objectName = "";
+        var objectType = "";
+        var objectDescription = "";
+        switch (e.target.id) {
+          case "EfficiencyChart":
+            action = "viewed";
+            objectName = "refection_chart";
+            objectType = "chart";
+            objectDescription = "Bar chart";
+            break;
+          default:
+            action = "viewed";
+            objectName = "";
+            objectType = "chart";
+            objectDescription = "A chart";
+            break;
+        }
+        vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
+      },
+      addLogsIntoDB(action, objectName, objectType, objectDescription) {
+        let data = {
+          courseid: content.courseid,
+          userid: content.userid,
+          action: "addLogs",
+          sectionname: "META_REFLECTION",
+          actiontype: action,
+          objectType: objectType,
+          objectName: objectName,
+          currentUrl: document.location.href,
+          objectDescription: objectDescription,
+        };
+        Axios({
+          method: "get",
+          url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+          params: data,
+        })
+          .then((response) => {
+            if (response.status == 200 && response.data.ok) {
+            }
+          })
+          .catch((e) => {});
+      },
+    });
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/build/pagination.js b/notemyprogress/amd/build/pagination.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9ac549450903bd8e268c20bef667426bae3461f
--- /dev/null
+++ b/notemyprogress/amd/build/pagination.js
@@ -0,0 +1,62 @@
+define([], function () {
+  const pagination = {
+    template: `
+                <v-main mt-10>
+                    <v-layout class="mb-2" justify-center>
+                        <span v-text="title" class="notemyprogress-sub-title"></span>
+                    </v-layout>
+                    <v-layout justify-center>
+                        <v-flex d-flex justify-end align-center no-wrap id="notemyprogress-display-weeks" class="flex-grow-0 pl-4">
+                            <span class="subtitle-1 pr-3" v-text="name"></span>
+                            <v-layout v-for="(page, index, key) in pages" :key="key" class="flex-grow-0">
+                                <v-tooltip top attach>
+                                    <template v-slot:activator="{ on }">
+                                        <span 
+                                                v-on="on" 
+                                                v-text="page.number" 
+                                                :class="['pa-1 pr-4 pl-4 page', {'selected-page' : page.selected}]" 
+                                                @click="update_selected_week(index)"></span>
+                                    </template>
+                                    <span v-text="get_week_dates(page)"></span>
+                                </v-tooltip>
+                            </v-layout>
+                        </v-flex>
+                    </v-layout>
+                    <v-divider></v-divider>
+               </v-main>
+                `,
+    props: ["pages", "name", "nameseparator", "title"],
+    data() {
+      return {};
+    },
+    methods: {
+      get_week_dates(week) {
+        return `${week.weekstart} ${this.nameseparator} ${week.weekend}`;
+      },
+      update_selected_week(index_page) {
+        this.loading = true;
+        let page = this.change_selected_week(index_page);
+        this.$emit("changepage", this.get_selected_week());
+      },
+      change_selected_week(selected_page) {
+        let current_selection = this.get_selected_week();
+        current_selection = this.pages.indexOf(current_selection);
+        this.pages[current_selection].selected = false;
+        this.pages[selected_page].selected = true;
+        return this.pages[selected_page];
+      },
+      get_selected_week() {
+        let selected = null;
+        this.pages.forEach((page) => {
+          if (page.selected) {
+            selected = page;
+          }
+        });
+        //console.log("selected =");
+        //console.log(selected);
+        return selected;
+      },
+    },
+  };
+  return pagination;
+});
diff --git a/notemyprogress/amd/build/pagination.min.js b/notemyprogress/amd/build/pagination.min.js
deleted file mode 100644
index 320ce1201592633c629f57d3e670e5475d2055dc..0000000000000000000000000000000000000000
--- a/notemyprogress/amd/build/pagination.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-define ("local_notemyprogress/pagination",[],function(){return{template:"\n                <v-main mt-10>\n                    <v-layout class=\"mb-2\" justify-center>\n                        <span v-text=\"title\" class=\"notemyprogress-sub-title\"></span>\n                    </v-layout>\n                    <v-layout justify-center>\n                        <v-flex d-flex justify-end align-center no-wrap id=\"notemyprogress-display-weeks\" class=\"flex-grow-0 pl-4\">\n                            <span class=\"subtitle-1 pr-3\" v-text=\"name\"></span>\n                            <v-layout v-for=\"(page, index, key) in pages\" :key=\"key\" class=\"flex-grow-0\">\n                                <v-tooltip top attach>\n                                    <template v-slot:activator=\"{ on }\">\n                                        <span \n                                                v-on=\"on\" \n                                                v-text=\"page.number\" \n                                                :class=\"['pa-1 pr-4 pl-4 page', {'selected-page' : page.selected}]\" \n                                                @click=\"update_selected_week(index)\"></span>\n                                    </template>\n                                    <span v-text=\"get_week_dates(page)\"></span>\n                                </v-tooltip>\n                            </v-layout>\n                        </v-flex>\n                    </v-layout>\n                    <v-divider></v-divider>\n               </v-main>\n                ",props:["pages","name","nameseparator","title"],data:function data(){return{}},methods:{get_week_dates:function get_week_dates(a){return"".concat(a.weekstart," ").concat(this.nameseparator," ").concat(a.weekend)},update_selected_week:function update_selected_week(a){this.loading=!0;this.change_selected_week(a);this.$emit("changepage",this.get_selected_week())},change_selected_week:function change_selected_week(a){var b=this.get_selected_week();b=this.pages.indexOf(b);this.pages[b].selected=!1;this.pages[a].selected=!0;return this.pages[a]},get_selected_week:function get_selected_week(){var a=null;this.pages.forEach(function(b){if(b.selected){a=b}});return a}}}});
-//# sourceMappingURL=pagination.min.js.map
diff --git a/notemyprogress/amd/build/pagination.min.js.map b/notemyprogress/amd/build/pagination.min.js.map
deleted file mode 100644
index 5e2451510d139c4849e615742a3a51fdc4f15e23..0000000000000000000000000000000000000000
--- a/notemyprogress/amd/build/pagination.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../src/pagination.js"],"names":["define","template","props","data","methods","get_week_dates","week","weekstart","nameseparator","weekend","update_selected_week","index_page","loading","change_selected_week","$emit","get_selected_week","selected_page","current_selection","pages","indexOf","selected","forEach","page"],"mappings":"AAAAA,OAAM,iCAAC,EAAD,CAAK,UAAW,CA2DlB,MA1DmB,CACfC,QAAQ,k+CADO,CA0BfC,KAAK,CAAC,CAAC,OAAD,CAAS,MAAT,CAAgB,eAAhB,CAAgC,OAAhC,CA1BS,CA2BfC,IA3Be,gBA2BT,CACF,MAAM,EAET,CA9Bc,CA+BfC,OAAO,CAAG,CACNC,cADM,yBACSC,CADT,CACc,CAChB,gBAAUA,CAAI,CAACC,SAAf,aAA4B,KAAKC,aAAjC,aAAkDF,CAAI,CAACG,OAAvD,CACH,CAHK,CAINC,oBAJM,+BAIeC,CAJf,CAI0B,CAC5B,KAAKC,OAAL,IACW,KAAKC,oBAAL,CAA0BF,CAA1B,CAFiB,CAG5B,KAAKG,KAAL,CAAW,YAAX,CAAwB,KAAKC,iBAAL,EAAxB,CACH,CARK,CASNF,oBATM,+BASeG,CATf,CAS6B,CAC/B,GAAIC,CAAAA,CAAiB,CAAG,KAAKF,iBAAL,EAAxB,CACAE,CAAiB,CAAG,KAAKC,KAAL,CAAWC,OAAX,CAAmBF,CAAnB,CAApB,CACA,KAAKC,KAAL,CAAWD,CAAX,EAA8BG,QAA9B,IACA,KAAKF,KAAL,CAAWF,CAAX,EAA0BI,QAA1B,IACA,MAAO,MAAKF,KAAL,CAAWF,CAAX,CACV,CAfK,CAgBND,iBAhBM,6BAgBa,CACf,GAAIK,CAAAA,CAAQ,CAAG,IAAf,CACA,KAAKF,KAAL,CAAWG,OAAX,CAAmB,SAACC,CAAD,CAAU,CACzB,GAAGA,CAAI,CAACF,QAAR,CAAiB,CACbA,CAAQ,CAAGE,CACd,CACJ,CAJD,EAKA,MAAOF,CAAAA,CACV,CAxBK,CA/BK,CA2DtB,CA5DK,CAAN","sourcesContent":["define([], function (){\r\n    const pagination = {\r\n        template:`\r\n                <v-main mt-10>\r\n                    <v-layout class=\"mb-2\" justify-center>\r\n                        <span v-text=\"title\" class=\"notemyprogress-sub-title\"></span>\r\n                    </v-layout>\r\n                    <v-layout justify-center>\r\n                        <v-flex d-flex justify-end align-center no-wrap id=\"notemyprogress-display-weeks\" class=\"flex-grow-0 pl-4\">\r\n                            <span class=\"subtitle-1 pr-3\" v-text=\"name\"></span>\r\n                            <v-layout v-for=\"(page, index, key) in pages\" :key=\"key\" class=\"flex-grow-0\">\r\n                                <v-tooltip top attach>\r\n                                    <template v-slot:activator=\"{ on }\">\r\n                                        <span \r\n                                                v-on=\"on\" \r\n                                                v-text=\"page.number\" \r\n                                                :class=\"['pa-1 pr-4 pl-4 page', {'selected-page' : page.selected}]\" \r\n                                                @click=\"update_selected_week(index)\"></span>\r\n                                    </template>\r\n                                    <span v-text=\"get_week_dates(page)\"></span>\r\n                                </v-tooltip>\r\n                            </v-layout>\r\n                        </v-flex>\r\n                    </v-layout>\r\n                    <v-divider></v-divider>\r\n               </v-main>\r\n                `,\r\n        props:['pages','name','nameseparator','title'],\r\n        data(){\r\n            return{\r\n            }\r\n        },\r\n        methods : {\r\n            get_week_dates(week){\r\n                return `${week.weekstart} ${this.nameseparator} ${week.weekend}`;\r\n            },\r\n            update_selected_week(index_page){\r\n                this.loading = true\r\n                let page = this.change_selected_week(index_page);\r\n                this.$emit('changepage',this.get_selected_week());\r\n            },\r\n            change_selected_week(selected_page){\r\n                let current_selection = this.get_selected_week();\r\n                current_selection = this.pages.indexOf(current_selection);\r\n                this.pages[current_selection].selected = false;\r\n                this.pages[selected_page].selected = true;\r\n                return this.pages[selected_page];\r\n            },\r\n            get_selected_week(){\r\n                let selected = null\r\n                this.pages.forEach((page) => {\r\n                    if(page.selected){\r\n                        selected = page;\r\n                    }\r\n                })\r\n                return selected;\r\n            },\r\n        },\r\n    }\r\n    return pagination;\r\n})"],"file":"pagination.min.js"}
\ No newline at end of file
diff --git a/notemyprogress/amd/build/paginationcomponent.js b/notemyprogress/amd/build/paginationcomponent.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c53c0811bb2a51b6c80765a9e291b6ab6503164
--- /dev/null
+++ b/notemyprogress/amd/build/paginationcomponent.js
@@ -0,0 +1,57 @@
+define([], function () {
+  const paginationcomponent = {
+    template: `
+                <v-content mt-10>
+                  <v-layout class="mb-2" justify-center>
+                    <span v-text="title" class="student-report-sub-title"></span>
+                  </v-layout>
+                  <v-layout justify-center>
+                    <v-flex d-flex justify-end align-center no-wrap id="student-report-display-weeks" class="flex-grow-0 pl-4">
+                    <span class="subtitle-1 pr-3" v-text="name"></span>
+                    <v-layout v-for="(page, index, key ) in pages" :key="key" class="flex-grow-0">
+                        <v-tooltip bottom>
+                        <template v-slot:activator="{ on }">
+                            <span v-on="on" v-text="page.number" :class="['pa-1 pr-4 pl-4 page', {'selected-page' : page.selected}]" @click="update_selected_week(index)"></span>
+                        </template>
+                            <span v-text="get_week_dates(page)"></span>
+                        </v-tooltip>
+                    </v-layout>
+                    </v-flex>
+                  </v-layout>
+                  <v-divider></v-divider>
+                  </v-content>
+                `,
+    props: ["pages", "name", "nameseparator", "title"],
+    data() {
+      return {};
+    },
+    methods: {
+      get_week_dates(week) {
+        return `${week.weekstart} ${this.nameseparator} ${week.weekend}`;
+      },
+      update_selected_week(index_page) {
+        this.loading = true;
+        var page = this.change_selected_week(index_page);
+        this.$emit("changepage", this.get_selected_week());
+      },
+      change_selected_week(selected_page) {
+        let current_selection = this.get_selected_week();
+        current_selection = this.pages.indexOf(current_selection);
+        this.pages[current_selection].selected = false;
+        this.pages[selected_page].selected = true;
+        return this.pages[selected_page];
+      },
+
+      get_selected_week() {
+        var selected = null;
+        this.pages.forEach((page) => {
+          if (page.selected) {
+            selected = page;
+          }
+        });
+        return selected;
+      },
+    },
+  };
+  return paginationcomponent;
+});
diff --git a/notemyprogress/amd/build/prueba.min.js b/notemyprogress/amd/build/prueba.min.js
index e5b195d2f8c6de505c79642ccdaded006c0c695d..51231b208fb2098af711c9667c71755bb58de2ec 100644
--- a/notemyprogress/amd/build/prueba.min.js
+++ b/notemyprogress/amd/build/prueba.min.js
@@ -1,2 +1,54 @@
-define ("local_notemyprogress/prueba",["local_notemyprogress/vue","local_notemyprogress/vuetify","local_notemyprogress/axios","local_notemyprogress/moment","local_notemyprogress/pagination","local_notemyprogress/chartdynamic","local_notemyprogress/pageheader"],function(a,b,c,d,e,f,g){"use strict";return{init:function(c){console.log(c);a.use(b);a.component("pagination",e);a.component("chart",f);a.component("pageheader",g);new a({delimiters:["[[","]]"],el:"#prueba",vuetify:new b,data:function data(){return{strings:c.strings,groups:c.groups,userid:c.userid,courseid:c.courseid,timezone:c.timezone,render_has:c.profile_render,loading:!1,errors:[],pages:c.pages}},mounted:function mounted(){document.querySelector("#sessions-loader").style.display="none";document.querySelector("#prueba").style.display="block"},methods:{get_help_content:function get_help_content(){return"Texto de Ayuda"},get_timezone:function get_timezone(){var a="".concat(this.strings.ss_change_timezone," ").concat(this.timezone);return a}}})}}});
+define("local_notemyprogress/prueba", [
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartdynamic",
+  "local_notemyprogress/pageheader",
+], function (a, b, c, d, e, f, g) {
+  "use strict";
+  return {
+    init: function (c) {
+      //console.log(c);
+      a.use(b);
+      a.component("pagination", e);
+      a.component("chart", f);
+      a.component("pageheader", g);
+      new a({
+        delimiters: ["[[", "]]"],
+        el: "#prueba",
+        vuetify: new b(),
+        data: function data() {
+          return {
+            strings: c.strings,
+            groups: c.groups,
+            userid: c.userid,
+            courseid: c.courseid,
+            timezone: c.timezone,
+            render_has: c.profile_render,
+            loading: !1,
+            errors: [],
+            pages: c.pages,
+          };
+        },
+        mounted: function mounted() {
+          document.querySelector("#sessions-loader").style.display = "none";
+          document.querySelector("#prueba").style.display = "block";
+        },
+        methods: {
+          get_help_content: function get_help_content() {
+            return "Texto de Ayuda";
+          },
+          get_timezone: function get_timezone() {
+            var a = ""
+              .concat(this.strings.ss_change_timezone, " ")
+              .concat(this.timezone);
+            return a;
+          },
+        },
+      });
+    },
+  };
+});
 //# sourceMappingURL=prueba.min.js.map
diff --git a/notemyprogress/amd/build/prueba.min.js.map b/notemyprogress/amd/build/prueba.min.js.map
index 568e098288085deb390ea3f525233b565624b5e2..f0fbc4d1def6030db0f7ae5a06c150e769109d17 100644
--- a/notemyprogress/amd/build/prueba.min.js.map
+++ b/notemyprogress/amd/build/prueba.min.js.map
@@ -1 +1,51 @@
-{"version":3,"sources":["../src/prueba.js"],"names":["define","Vue","Vuetify","Axios","Moment","Pagination","ChartDynamic","Pageheader","init","content","console","log","use","component","delimiters","el","vuetify","data","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","errors","pages","mounted","document","querySelector","style","display","methods","get_help_content","get_timezone","information","ss_change_timezone"],"mappings":"AAAAA,OAAM,6BAAC,CAAC,wBAAD,CACC,4BADD,CAEC,0BAFD,CAGC,2BAHD,CAIC,+BAJD,CAKC,iCALD,CAMC,+BAND,CAAD,CAQF,SAASC,CAAT,CAAcC,CAAd,CAAuBC,CAAvB,CAA8BC,CAA9B,CAAsCC,CAAtC,CAAkDC,CAAlD,CAAgEC,CAAhE,CAA4E,CACxE,aA2CA,MAAO,CACHC,IAAI,CA1CR,SAAcC,CAAd,CAAuB,CACnBC,OAAO,CAACC,GAAR,CAAYF,CAAZ,EACAR,CAAG,CAACW,GAAJ,CAAQV,CAAR,EACAD,CAAG,CAACY,SAAJ,CAAc,YAAd,CAA4BR,CAA5B,EACAJ,CAAG,CAACY,SAAJ,CAAc,OAAd,CAAuBP,CAAvB,EACAL,CAAG,CAACY,SAAJ,CAAc,YAAd,CAA4BN,CAA5B,EACU,GAAIN,CAAAA,CAAJ,CAAQ,CACda,UAAU,CAAE,CAAC,IAAD,CAAO,IAAP,CADE,CAEdC,EAAE,CAAE,SAFU,CAGdC,OAAO,CAAE,GAAId,CAAAA,CAHC,CAIde,IAJc,gBAIP,CACH,MAAO,CACHC,OAAO,CAAGT,CAAO,CAACS,OADf,CAEHC,MAAM,CAAGV,CAAO,CAACU,MAFd,CAGHC,MAAM,CAAGX,CAAO,CAACW,MAHd,CAIHC,QAAQ,CAAGZ,CAAO,CAACY,QAJhB,CAKHC,QAAQ,CAAGb,CAAO,CAACa,QALhB,CAMHC,UAAU,CAAGd,CAAO,CAACe,cANlB,CAOHC,OAAO,GAPJ,CAQHC,MAAM,CAAG,EARN,CASHC,KAAK,CAAGlB,CAAO,CAACkB,KATb,CAWV,CAhBa,CAiBdC,OAjBc,mBAiBL,CACLC,QAAQ,CAACC,aAAT,CAAuB,kBAAvB,EAA2CC,KAA3C,CAAiDC,OAAjD,CAA2D,MAA3D,CACAH,QAAQ,CAACC,aAAT,CAAuB,SAAvB,EAAkCC,KAAlC,CAAwCC,OAAxC,CAAkD,OACrD,CApBa,CAqBdC,OAAO,CAAG,CACNC,gBADM,4BACY,CAEd,sBACH,CAJK,CAMNC,YANM,wBAMQ,CACV,GAAIC,CAAAA,CAAW,WAAM,KAAKlB,OAAL,CAAamB,kBAAnB,aAAyC,KAAKf,QAA9C,CAAf,CACA,MAAOc,CAAAA,CACV,CATK,CArBI,CAAR,CAiCb,CAEM,CAGV,CAvDC,CAAN","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, Pageheader) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            console.log(content);\r\n            Vue.use(Vuetify)\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', Pageheader);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#prueba\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n                    }\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#prueba\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let helpcontents = `Texto de Ayuda`;\r\n                        return helpcontents;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"prueba.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/prueba.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "Pagination",
+    "ChartDynamic",
+    "Pageheader",
+    "init",
+    "content",
+    "console",
+    "log",
+    "use",
+    "component",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "errors",
+    "pages",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "AAAAA,OAAM,6BAAC,CAAC,wBAAD,CACC,4BADD,CAEC,0BAFD,CAGC,2BAHD,CAIC,+BAJD,CAKC,iCALD,CAMC,+BAND,CAAD,CAQF,SAASC,CAAT,CAAcC,CAAd,CAAuBC,CAAvB,CAA8BC,CAA9B,CAAsCC,CAAtC,CAAkDC,CAAlD,CAAgEC,CAAhE,CAA4E,CACxE,aA2CA,MAAO,CACHC,IAAI,CA1CR,SAAcC,CAAd,CAAuB,CACnBC,OAAO,CAACC,GAAR,CAAYF,CAAZ,EACAR,CAAG,CAACW,GAAJ,CAAQV,CAAR,EACAD,CAAG,CAACY,SAAJ,CAAc,YAAd,CAA4BR,CAA5B,EACAJ,CAAG,CAACY,SAAJ,CAAc,OAAd,CAAuBP,CAAvB,EACAL,CAAG,CAACY,SAAJ,CAAc,YAAd,CAA4BN,CAA5B,EACU,GAAIN,CAAAA,CAAJ,CAAQ,CACda,UAAU,CAAE,CAAC,IAAD,CAAO,IAAP,CADE,CAEdC,EAAE,CAAE,SAFU,CAGdC,OAAO,CAAE,GAAId,CAAAA,CAHC,CAIde,IAJc,gBAIP,CACH,MAAO,CACHC,OAAO,CAAGT,CAAO,CAACS,OADf,CAEHC,MAAM,CAAGV,CAAO,CAACU,MAFd,CAGHC,MAAM,CAAGX,CAAO,CAACW,MAHd,CAIHC,QAAQ,CAAGZ,CAAO,CAACY,QAJhB,CAKHC,QAAQ,CAAGb,CAAO,CAACa,QALhB,CAMHC,UAAU,CAAGd,CAAO,CAACe,cANlB,CAOHC,OAAO,GAPJ,CAQHC,MAAM,CAAG,EARN,CASHC,KAAK,CAAGlB,CAAO,CAACkB,KATb,CAWV,CAhBa,CAiBdC,OAjBc,mBAiBL,CACLC,QAAQ,CAACC,aAAT,CAAuB,kBAAvB,EAA2CC,KAA3C,CAAiDC,OAAjD,CAA2D,MAA3D,CACAH,QAAQ,CAACC,aAAT,CAAuB,SAAvB,EAAkCC,KAAlC,CAAwCC,OAAxC,CAAkD,OACrD,CApBa,CAqBdC,OAAO,CAAG,CACNC,gBADM,4BACY,CAEd,sBACH,CAJK,CAMNC,YANM,wBAMQ,CACV,GAAIC,CAAAA,CAAW,WAAM,KAAKlB,OAAL,CAAamB,kBAAnB,aAAyC,KAAKf,QAA9C,CAAf,CACA,MAAOc,CAAAA,CACV,CATK,CArBI,CAAR,CAiCb,CAEM,CAGV,CAvDC,CAAN",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, Pageheader) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            //console.log(content);\r\n            Vue.use(Vuetify)\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', Pageheader);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#prueba\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n                    }\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#prueba\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let helpcontents = `Texto de Ayuda`;\r\n                        return helpcontents;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "prueba.min.js"
+}
diff --git a/notemyprogress/amd/build/quiz.min.js.map b/notemyprogress/amd/build/quiz.min.js.map
index 1f83c5991f83bbf43f92afc9ce41dd2803bec924..b33305bd466498088467d9e46482b2ee7cb95587 100644
--- a/notemyprogress/amd/build/quiz.min.js.map
+++ b/notemyprogress/amd/build/quiz.min.js.map
@@ -1 +1,218 @@
-{"version":3,"sources":["../src/quiz.js"],"names":["define","Vue","Vuetify","Axios","Moment","Pagination","ChartDynamic","PageHeader","HelpDialog","init","content","use","component","vue","delimiters","el","vuetify","data","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","errors","pages","quiz","questions_attempts_colors","hardest_questions_colors","default_quiz","attempts_categories","attempts_series","attempts_questions","hardest_categories","hardest_series","hardest_questions","help_dialog","help_contents","beforeMount","length","attempts","calculate_questions_attempts","mounted","document","querySelector","style","display","methods","get_help_content","contents","title","section_help_title","description","section_help_description","get_quiz_info_text1","text","questions_number","details","questions","questions_label","questions_text","question_text","quiz_info_text","get_quiz_info_text2","attempts_number","doing_text","doing_text_plural","doing_text_singular","students_number","users","students_label","students_text","student_text","build_questions_attempts_chart","chart","type","backgroundColor","fontFamily","colors","xAxis","categories","yAxis","min","allowDecimals","questions_attempts_yaxis_title","tooltip","formatter","question_name","x","attemps","y","total_attemps","total","percentage","Math","round","series_name","series","name","attempt_preffix","attempts_text","charAt","toUpperCase","slice","attempt_label","of_conector","review_question","attempt_text","plotOptions","column","stacking","cursor","point","events","click","question","id","url","M","cfg","wwwroot","window","open","build_hardest_questions_chart","legend","enabled","position","question_info","serie_name","value","ha","to","hardest_questions_yaxis_title","labels","format","cont","ql","correct","partcorrect","incorr","gaveup","needgrade","hardest","co","pc","ic","ga","ng","forEach","gradedright","mangrright","gradedpartial","mangrpartial","gradedwrong","mangrwrong","mangaveup","needsgrading","finished","manfinished","push","qu","pe","correct_attempt","partcorrect_attempt","incorrect_attempt","blank_attempt","needgraded_attempt","hardest_data","sort","compare_hardest","element","update_interactions","week","action","weekcode","profile","method","params","then","response","status","ok","reset_graphs","error_messages","error_network","catch","api_error_network","finally","a","b","open_chart_help","questions_attempts_help_title","questions_attempts_help_description_p1","questions_attempts_help_description_p2","questions_attempts_help_description_p3","hardest_questions_help_title","hardest_questions_help_description_p1","hardest_questions_help_description_p2","hardest_questions_help_description_p3","update_help_dialog","get_timezone","information","ss_change_timezone"],"mappings":"AAAAA,OAAM,2BAAC,CAAC,wBAAD,CACC,4BADD,CAEC,0BAFD,CAGC,2BAHD,CAIC,+BAJD,CAKC,iCALD,CAMC,+BAND,CAOC,+BAPD,CAAD,CASF,SAASC,CAAT,CAAcC,CAAd,CAAuBC,CAAvB,CAA8BC,CAA9B,CAAsCC,CAAtC,CAAkDC,CAAlD,CAAgEC,CAAhE,CAA4EC,CAA5E,CAAwF,CACpF,aA4YA,MAAO,CACHC,IAAI,CA3YR,SAAcC,CAAd,CAAuB,CAEnBT,CAAG,CAACU,GAAJ,CAAQT,CAAR,EACAD,CAAG,CAACW,SAAJ,CAAc,YAAd,CAA4BP,CAA5B,EACAJ,CAAG,CAACW,SAAJ,CAAc,OAAd,CAAuBN,CAAvB,EACAL,CAAG,CAACW,SAAJ,CAAc,YAAd,CAA4BL,CAA5B,EACAN,CAAG,CAACW,SAAJ,CAAc,YAAd,CAA4BJ,CAA5B,EACA,GAAIK,CAAAA,CAAG,CAAG,GAAIZ,CAAAA,CAAJ,CAAQ,CACda,UAAU,CAAE,CAAC,IAAD,CAAO,IAAP,CADE,CAEdC,EAAE,CAAE,OAFU,CAGdC,OAAO,CAAE,GAAId,CAAAA,CAHC,CAIde,IAJc,gBAIP,CACH,MAAO,CACHC,OAAO,CAAGR,CAAO,CAACQ,OADf,CAEHC,MAAM,CAAGT,CAAO,CAACS,MAFd,CAGHC,MAAM,CAAGV,CAAO,CAACU,MAHd,CAIHC,QAAQ,CAAGX,CAAO,CAACW,QAJhB,CAKHC,QAAQ,CAAGZ,CAAO,CAACY,QALhB,CAMHC,UAAU,CAAGb,CAAO,CAACc,cANlB,CAOHC,OAAO,GAPJ,CAQHC,MAAM,CAAG,EARN,CASHC,KAAK,CAAGjB,CAAO,CAACiB,KATb,CAWHC,IAAI,CAAGlB,CAAO,CAACkB,IAXZ,CAYHC,yBAAyB,CAAEnB,CAAO,CAACmB,yBAZhC,CAaHC,wBAAwB,CAAEpB,CAAO,CAACoB,wBAb/B,CAcHC,YAAY,CAAE,IAdX,CAeHC,mBAAmB,CAAE,EAflB,CAgBHC,eAAe,CAAE,EAhBd,CAiBHC,kBAAkB,CAAE,EAjBjB,CAkBHC,kBAAkB,CAAE,EAlBjB,CAmBHC,cAAc,CAAE,EAnBb,CAoBHC,iBAAiB,CAAE,EApBhB,CAsBHC,WAAW,GAtBR,CAuBHC,aAAa,CAAE,EAvBZ,CAyBV,CA9Ba,CA+BdC,WA/Bc,uBA+BD,CACT,GAAI,KAAKZ,IAAL,CAAUa,MAAd,CAAsB,CAClB,KAAKV,YAAL,CAAoB,KAAKH,IAAL,CAAU,CAAV,EAAac,QAAjC,CACA,KAAKC,4BAAL,CAAkC,KAAKZ,YAAvC,CACH,CACJ,CApCa,CAqCda,OArCc,mBAqCL,CACLC,QAAQ,CAACC,aAAT,CAAuB,kBAAvB,EAA2CC,KAA3C,CAAiDC,OAAjD,CAA2D,MAA3D,CACAH,QAAQ,CAACC,aAAT,CAAuB,OAAvB,EAAgCC,KAAhC,CAAsCC,OAAtC,CAAgD,OACnD,CAxCa,CAyCdC,OAAO,CAAG,CACNC,gBADM,4BACY,CACd,GAAIC,CAAAA,CAAQ,CAAG,CACD,CACVC,KAAK,CAAE,KAAKlC,OAAL,CAAamC,kBADV,CAEVC,WAAW,CAAE,KAAKpC,OAAL,CAAaqC,wBAFhB,CADC,CAAf,CAKA,MAAOJ,CAAAA,CACV,CARK,CAUNK,mBAVM,+BAUgB,CAClB,GAAIC,CAAAA,CAAI,CAAG,EAAX,CACA,GAAI,KAAK1B,YAAT,CAAuB,IACf2B,CAAAA,CAAgB,CAAG,KAAK3B,YAAL,CAAkB4B,OAAlB,CAA0BC,SAD9B,CAEfC,CAAe,CAAG,KAAK3C,OAAL,CAAa4C,cAFhB,CAGnB,GAAwB,CAApB,EAAAJ,CAAJ,CAA2B,CACvBG,CAAe,CAAG,KAAK3C,OAAL,CAAa6C,aAClC,CACDN,CAAI,aAAQ,KAAKvC,OAAL,CAAa8C,cAArB,aAAuCN,CAAvC,aAA2DG,CAA3D,CACP,CACD,MAAOJ,CAAAA,CACV,CArBK,CAuBNQ,mBAvBM,+BAuBgB,CAClB,GAAIR,CAAAA,CAAI,CAAG,EAAX,CACA,GAAI,KAAK1B,YAAT,CAAuB,IACfmC,CAAAA,CAAe,CAAG,KAAKnC,YAAL,CAAkB4B,OAAlB,CAA0BjB,QAD7B,CAEfyB,CAAU,CAAG,KAAKjD,OAAL,CAAakD,iBAFX,CAGnB,GAAuB,CAAnB,EAAAF,CAAJ,CAA0B,CACtBC,CAAU,CAAG,KAAKjD,OAAL,CAAamD,mBAC7B,CALkB,GAMfC,CAAAA,CAAe,CAAG,KAAKvC,YAAL,CAAkB4B,OAAlB,CAA0BY,KAN7B,CAOfC,CAAc,CAAG,KAAKtD,OAAL,CAAauD,aAPf,CAQnB,GAAuB,CAAnB,EAAAH,CAAJ,CAA0B,CACtBE,CAAc,CAAG,KAAKtD,OAAL,CAAawD,YACjC,CACDjB,CAAI,aAAQS,CAAR,aAA2BC,CAA3B,aAAyCG,CAAzC,aAA4DE,CAA5D,CACP,CACD,MAAOf,CAAAA,CACV,CAvCK,CAyCNkB,8BAzCM,0CAyC2B,CAC7B,GAAIC,CAAAA,CAAK,GAAT,CACAA,CAAK,CAACA,KAAN,CAAc,CACVC,IAAI,CAAE,QADI,CAEVC,eAAe,CAAE,IAFP,CAGV/B,KAAK,CAAE,CAACgC,UAAU,CAAE,SAAb,CAHG,CAAd,CAKAH,CAAK,CAACxB,KAAN,CAAc,CACVK,IAAI,CAAE,IADI,CAAd,CAGAmB,CAAK,CAACI,MAAN,CAAe,KAAKnD,yBAApB,CACA+C,CAAK,CAACK,KAAN,CAAc,CACVC,UAAU,CAAE,KAAKlD,mBADP,CAAd,CAGA4C,CAAK,CAACO,KAAN,CAAc,CAAC,CACXC,GAAG,CAAE,CADM,CAEXC,aAAa,GAFF,CAGXjC,KAAK,CAAE,CACHK,IAAI,CAAE,KAAKvC,OAAL,CAAaoE,8BADhB,CAHI,CAAD,CAAd,CAOAV,CAAK,CAACW,OAAN,CAAgB,CACZC,SAAS,CAAE,oBAAW,IACdC,CAAAA,CAAa,CAAG,KAAKC,CADP,CAEdC,CAAO,CAAG,KAAKC,CAFD,CAGdC,CAAa,CAAG,KAAKC,KAHP,CAIdC,CAAU,CAAGC,IAAI,CAACC,KAAL,EAAkB,KAAKF,UAAvB,CAJC,CAKdG,CAAW,CAAG,KAAKC,MAAL,CAAYC,IALZ,CAMdC,CAAe,CAAGxF,CAAG,CAACK,OAAJ,CAAYoF,aANhB,CAOlBD,CAAe,CAAGA,CAAe,CAACE,MAAhB,CAAuB,CAAvB,EAA0BC,WAA1B,GAA0CH,CAAe,CAACI,KAAhB,CAAsB,CAAtB,CAA5D,CAPkB,GAQdC,CAAAA,CAAa,CAAG7F,CAAG,CAACK,OAAJ,CAAYoF,aARd,CASdK,CAAW,CAAG9F,CAAG,CAACK,OAAJ,CAAYyF,WATZ,CAUdC,CAAe,CAAG/F,CAAG,CAACK,OAAJ,CAAY0F,eAVhB,CAWlB,GAAe,CAAX,EAAAjB,CAAJ,CAAkB,CACde,CAAa,CAAG7F,CAAG,CAACK,OAAJ,CAAY2F,YAC/B,CACD,GAAIpD,CAAAA,CAAI,CAAG,MAAQgC,CAAR,CAAwB,QAAxB,CAAmCY,CAAnC,CAAqD,GAArD,CAA2DH,CAA3D,CAAyE,OAAzE,CACAP,CADA,CACU,GADV,CACgBe,CADhB,CACgC,GADhC,CACsCC,CADtC,CACoD,GADpD,CAC0Dd,CAD1D,CAEC,IAFD,CAEQE,CAFR,WAEsCa,CAFjD,CAIA,MAAOnD,CAAAA,CACV,CApBW,CAAhB,CAsBAmB,CAAK,CAACkC,WAAN,CAAoB,CAChBC,MAAM,CAAE,CACJC,QAAQ,CAAE,QADN,CADQ,CAIhBb,MAAM,CAAE,CACJc,MAAM,CAAE,SADJ,CAEJC,KAAK,CAAE,CACHC,MAAM,CAAE,CACJC,KAAK,CAAE,gBAAY,IACXC,CAAAA,CAAQ,CAAGxG,CAAG,CAACqB,kBAAJ,CAAuB,KAAKwD,CAA5B,CADA,CAEX4B,CAAE,CAAGD,CAAQ,CAACC,EAFH,CAGXC,CAAG,CAAGC,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,2BAAhB,CAA4CJ,CAA5C,CAA+C,YAA/C,CAA4DzG,CAAG,CAACQ,QAH3D,CAIfsG,MAAM,CAACC,IAAP,CAAYL,CAAZ,CAAiB,QAAjB,CAA2B,qCAA3B,CACH,CANG,CADL,CAFH,CAJQ,CAApB,CAkBA3C,CAAK,CAACuB,MAAN,CAAe,KAAKlE,eAApB,CACA,MAAO2C,CAAAA,CACV,CAxGK,CA0GNiD,6BA1GM,yCA0G0B,CAC5B,GAAIjD,CAAAA,CAAK,GAAT,CACAA,CAAK,CAACA,KAAN,CAAc,CACVC,IAAI,CAAE,QADI,CAEVC,eAAe,CAAE,IAFP,CAGV/B,KAAK,CAAE,CAACgC,UAAU,CAAE,SAAb,CAHG,CAAd,CAKAH,CAAK,CAACxB,KAAN,CAAc,CACVK,IAAI,CAAE,IADI,CAAd,CAGAmB,CAAK,CAACI,MAAN,CAAe,KAAKlD,wBAApB,CACA8C,CAAK,CAACK,KAAN,CAAc,CACVC,UAAU,CAAE,KAAK/C,kBADP,CAAd,CAGAyC,CAAK,CAACkD,MAAN,CAAe,CACXC,OAAO,GADI,CAAf,CAGAnD,CAAK,CAACW,OAAN,CAAgB,CACZC,SAAS,CAAE,oBAAW,IACdwC,CAAAA,CAAQ,CAAG,KAAKd,KAAL,CAAWxB,CADR,CAEduC,CAAa,CAAGpH,CAAG,CAACwB,iBAAJ,CAAsB2F,CAAtB,CAFF,CAGdvC,CAAa,CAAG,KAAKC,CAHP,CAIdwC,CAAU,CAAG,KAAK/B,MAAL,CAAYC,IAJX,CAKd+B,CAAK,CAAG,KAAKvC,CALC,CAMdc,CAAa,CAAG7F,CAAG,CAACK,OAAJ,CAAYoF,aANd,CAOdK,CAAW,CAAG9F,CAAG,CAACK,OAAJ,CAAYyF,WAPZ,CAQdC,CAAe,CAAG/F,CAAG,CAACK,OAAJ,CAAY0F,eARhB,CASlB,GAAwB,CAApB,EAAAqB,CAAa,CAACG,EAAlB,CAA2B,CACvB1B,CAAa,CAAG7F,CAAG,CAACK,OAAJ,CAAY2F,YAC/B,CACD,GAAIpD,CAAAA,CAAI,CAAG,MAAQgC,CAAR,CAAwB,QAAxB,CAAmCyC,CAAnC,CAAgD,OAAhD,CACCD,CAAa,CAACG,EADf,CACoB,GADpB,CAC0B1B,CAD1B,CAC0C,GAD1C,CACgDC,CADhD,CAC8D,GAD9D,CAEGsB,CAAa,CAACI,EAFjB,CAEsB,IAFtB,CAE6BF,CAF7B,WAEsDvB,CAFjE,CAGA,MAAOnD,CAAAA,CACV,CAjBW,CAAhB,CAmBAmB,CAAK,CAACO,KAAN,CAAc,CAAC,CACXC,GAAG,CAAE,CADM,CAEXC,aAAa,GAFF,CAGXjC,KAAK,CAAE,CACHK,IAAI,CAAE,KAAKvC,OAAL,CAAaoH,6BADhB,CAHI,CAMXC,MAAM,CAAE,CACJC,MAAM,CAAE,WADJ,CANG,CAAD,CAAd,CAUA5D,CAAK,CAACkC,WAAN,CAAoB,CAChBX,MAAM,CAAE,CACJc,MAAM,CAAE,SADJ,CAEAC,KAAK,CAAE,CACPC,MAAM,CAAE,CACJC,KAAK,CAAE,gBAAY,IACXC,CAAAA,CAAQ,CAAGxG,CAAG,CAACwB,iBAAJ,CAAsB,KAAKqD,CAA3B,CADA,CAEX4B,CAAE,CAAGD,CAAQ,CAACC,EAFH,CAGXC,CAAG,CAAGC,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,2BAAhB,CAA4CJ,CAA5C,CAA+C,YAA/C,CAA4DzG,CAAG,CAACQ,QAH3D,CAIfsG,MAAM,CAACC,IAAP,CAAaL,CAAb,CAAkB,QAAlB,CAA4B,qCAA5B,CACH,CANG,CADD,CAFP,CADQ,CAApB,CAeA3C,CAAK,CAACuB,MAAN,CAAe,KAAK/D,cAApB,CACA,MAAOwC,CAAAA,CACV,CAzKK,CA2KNjC,4BA3KM,uCA2KuBf,CA3KvB,CA2K6B,IAC3BgC,CAAAA,CAAS,CAAGhC,CAAI,CAACgC,SADU,CAE3B5B,CAAmB,CAAG,EAFK,CAG3ByG,CAAI,CAAG,CAHoB,CAGjBC,CAAE,CAAG,EAHY,CAK3BC,CAAO,CAAG,EALiB,CAKbC,CAAW,CAAG,EALD,CAKKC,CAAM,CAAG,EALd,CAKkBC,CAAM,CAAG,EAL3B,CAK+BC,CAAS,CAAG,EAL3C,CAK+CC,CAAO,CAAG,EALzD,CAM3B9G,CAAkB,CAAG,EANM,CAO3B+G,CAP2B,CAOvBC,CAPuB,CAOnBC,CAPmB,CAOfC,CAPe,CAOXC,CAPW,CAOPhB,CAPO,CAOHD,CAAE,CAAG,CAPF,CAS/BxE,CAAS,CAAC0F,OAAV,CAAkB,SAAAjC,CAAQ,CAAI,CAC1B4B,CAAE,CAAEC,CAAF,CAAMC,CAAN,CAAUC,CAAV,CAAcC,CAAd,CAAkBhB,CAAE,CAAG,CAAzB,CACAY,CAAE,CAAG,CAAC5B,CAAQ,CAACkC,WAAT,EAAwB,CAAzB,GAA+BlC,CAAQ,CAACmC,UAAT,EAAuB,CAAtD,CAAL,CACAN,CAAE,CAAG,CAAC7B,CAAQ,CAACoC,aAAT,EAA0B,CAA3B,GAAiCpC,CAAQ,CAACqC,YAAT,EAAyB,CAA1D,CAAL,CACAP,CAAE,CAAG,CAAC9B,CAAQ,CAACsC,WAAT,EAAwB,CAAzB,GAA+BtC,CAAQ,CAACuC,UAAT,EAAuB,CAAtD,CAAL,CACAR,CAAE,CAAG,CAAC/B,CAAQ,CAACyB,MAAT,EAAmB,CAApB,GAA0BzB,CAAQ,CAACwC,SAAT,EAAsB,CAAhD,CAAL,CACAR,CAAE,CAAG,CAAChC,CAAQ,CAACyC,YAAT,EAAyB,CAA1B,GAAgCzC,CAAQ,CAACwC,SAAT,EAAsB,CAAtD,GACAxC,CAAQ,CAAC0C,QAAT,EAAqB,CADrB,GAC2B1C,CAAQ,CAAC2C,WAAT,EAAwB,CADnD,CAAL,CAGArB,CAAO,CAACsB,IAAR,CAAahB,CAAb,EACAL,CAAW,CAACqB,IAAZ,CAAiBf,CAAjB,EACAL,CAAM,CAACoB,IAAP,CAAYd,CAAZ,EACAL,CAAM,CAACmB,IAAP,CAAYb,CAAZ,EACAL,CAAS,CAACkB,IAAV,CAAeZ,CAAf,EAEAX,CAAE,CAAG,IAAMD,CAAX,CACAL,CAAE,CAAGc,CAAE,CAAGC,CAAL,CAAUC,CAAf,CACAf,CAAE,CAAGY,CAAE,CAAGC,CAAL,CAAUC,CAAV,CAAeC,CAAf,CAAoBC,CAAzB,CACAL,CAAO,CAACiB,IAAR,CAAa,CAAE3C,EAAE,CAAED,CAAQ,CAACC,EAAf,CAAmB4C,EAAE,CAAExB,CAAvB,CAA2BN,EAAE,CAAEA,CAA/B,CAAmCC,EAAE,CAAEA,CAAvC,CAA2C8B,EAAE,CAAEnE,IAAI,CAACC,KAAL,CAAiB,GAAL,CAAAmC,CAAD,CAAaC,CAAxB,CAA/C,CAAb,EACArG,CAAmB,CAACiI,IAApB,CAAyBvB,CAAzB,EACAxG,CAAkB,CAAC+H,IAAnB,CAAwB5C,CAAxB,EACAoB,CAAI,EACP,CAtBD,EAT+B,GAiC3BxG,CAAAA,CAAe,CAAG,CACD,CACjBmE,IAAI,CAAE,KAAKlF,OAAL,CAAakJ,eADF,CAEjBnJ,IAAI,CAAE0H,CAFW,CADC,CAKD,CACjBvC,IAAI,CAAE,KAAKlF,OAAL,CAAamJ,mBADF,CAEjBpJ,IAAI,CAAE2H,CAFW,CALC,CASD,CACjBxC,IAAI,CAAE,KAAKlF,OAAL,CAAaoJ,iBADF,CAEjBrJ,IAAI,CAAE4H,CAFW,CATC,CAaD,CACjBzC,IAAI,CAAE,KAAKlF,OAAL,CAAaqJ,aADF,CAEjBtJ,IAAI,CAAE6H,CAFW,CAbC,CAiBD,CACjB1C,IAAI,CAAE,KAAKlF,OAAL,CAAasJ,kBADF,CAEjBvJ,IAAI,CAAE8H,CAFW,CAjBC,CAjCS,CAuD3B5G,CAAkB,CAAG,EAvDM,CAuDFsI,CAAY,CAAG,EAvDb,CAuDiBpI,CAAiB,CAAG,EAvDrC,CAwD/B2G,CAAO,CAAC0B,IAAR,CAAa,KAAKC,eAAlB,EACA3B,CAAO,CAACM,OAAR,CAAgB,SAAAsB,CAAO,CAAI,CACvB,GAAIA,CAAO,CAACT,EAAZ,CAAgB,CACZhI,CAAkB,CAAC8H,IAAnB,CAAwBW,CAAO,CAACV,EAAhC,EACAO,CAAY,CAACR,IAAb,CAAkBW,CAAO,CAACT,EAA1B,EACA9H,CAAiB,CAAC4H,IAAlB,CAAuBW,CAAvB,CACH,CACJ,CAND,EAQA,GAAIxI,CAAAA,CAAc,CAAG,CAAC,CAClBgE,IAAI,CAAE,KAAKlF,OAAL,CAAaoH,6BADD,CAElBrH,IAAI,CAAEwJ,CAFY,CAAD,CAArB,CAKA,KAAKzI,mBAAL,CAA2BA,CAA3B,CACA,KAAKC,eAAL,CAAuBA,CAAvB,CACA,KAAKC,kBAAL,CAA0BA,CAA1B,CACA,KAAKC,kBAAL,CAA0BA,CAA1B,CACA,KAAKC,cAAL,CAAsBA,CAAtB,CACA,KAAKC,iBAAL,CAAyBA,CAC5B,CAvPK,CAyPNwI,mBAzPM,8BAyPcC,CAzPd,CAyPmB,YACrB,KAAKrJ,OAAL,IACA,KAAKC,MAAL,CAAc,EAAd,CACA,GAAIT,CAAAA,CAAI,CAAG,CACP8J,MAAM,CAAG,MADF,CAEP3J,MAAM,CAAG,KAAKA,MAFP,CAGPC,QAAQ,CAAG,KAAKA,QAHT,CAIP2J,QAAQ,CAAGF,CAAI,CAACE,QAJT,CAKPC,OAAO,CAAG,KAAK1J,UALR,CAAX,CAOApB,CAAK,CAAC,CACF+K,MAAM,CAAC,KADL,CAEF3D,GAAG,CAAEC,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,8BAFnB,CAGFyD,MAAM,CAAGlK,CAHP,CAAD,CAAL,CAIGmK,IAJH,CAIQ,SAACC,CAAD,CAAc,CAClB,GAAuB,GAAnB,EAAAA,CAAQ,CAACC,MAAT,EAA0BD,CAAQ,CAACpK,IAAT,CAAcsK,EAA5C,CAAgD,CAC5C,CAAI,CAAC3J,IAAL,CAAYyJ,CAAQ,CAACpK,IAAT,CAAcA,IAAd,CAAmBW,IAA/B,CACA,GAAI,CAAI,CAACA,IAAL,CAAUa,MAAd,CAAsB,CAClB,CAAI,CAACV,YAAL,CAAoB,CAAI,CAACH,IAAL,CAAU,CAAV,EAAac,QAAjC,CACA,CAAI,CAACC,4BAAL,CAAkC,CAAI,CAACZ,YAAvC,CACH,CAHD,IAGO,CACH,CAAI,CAACyJ,YAAL,EACH,CACJ,CARD,IAQO,CACH,CAAI,CAACC,cAAL,CAAoBxB,IAApB,CAAyB,CAAI,CAAC/I,OAAL,CAAawK,aAAtC,CACH,CACJ,CAhBD,EAgBGC,KAhBH,CAgBS,UAAO,CACZ,CAAI,CAACjK,MAAL,CAAYuI,IAAZ,CAAiB,CAAI,CAAC/I,OAAL,CAAa0K,iBAA9B,CACH,CAlBD,EAkBGC,OAlBH,CAkBW,UAAM,CACb,CAAI,CAACpK,OAAL,GACH,CApBD,EAqBA,MAAO,MAAKR,IACf,CAzRK,CA2RNuK,YA3RM,wBA2RU,CACZ,KAAKzJ,YAAL,CAAoB,IAApB,CACA,KAAKC,mBAAL,CAA2B,EAA3B,CACA,KAAKC,eAAL,CAAuB,EAAvB,CACA,KAAKC,kBAAL,CAA0B,EAA1B,CACA,KAAKC,kBAAL,CAA0B,EAA1B,CACA,KAAKC,cAAL,CAAsB,EAAtB,CACA,KAAKC,iBAAL,CAAyB,EAC5B,CAnSK,CAqSNsI,eArSM,0BAqSUmB,CArSV,CAqSaC,CArSb,CAqSgB,CAClB,GAAID,CAAC,CAAC3B,EAAF,CAAO4B,CAAC,CAAC5B,EAAb,CAAiB,CACb,MAAO,CAAC,CACX,CACD,GAAI2B,CAAC,CAAC3B,EAAF,CAAO4B,CAAC,CAAC5B,EAAb,CAAiB,CACb,MAAO,EACV,CACD,MAAO,EACV,CA7SK,CA+SN6B,eA/SM,0BA+SUpH,CA/SV,CA+SiB,CACnB,GAAIzB,CAAAA,CAAQ,CAAG,EAAf,CACA,GAAa,oBAAT,EAAAyB,CAAJ,CAAmC,CAC/BzB,CAAQ,CAAC8G,IAAT,CAAc,CACV7G,KAAK,CAAE,KAAKlC,OAAL,CAAa+K,6BADV,CAEV3I,WAAW,CAAE,KAAKpC,OAAL,CAAagL,sCAFhB,CAAd,EAIA/I,CAAQ,CAAC8G,IAAT,CAAc,CACV3G,WAAW,CAAE,KAAKpC,OAAL,CAAaiL,sCADhB,CAAd,EAGAhJ,CAAQ,CAAC8G,IAAT,CAAc,CACV3G,WAAW,CAAE,KAAKpC,OAAL,CAAakL,sCADhB,CAAd,CAGH,CAXD,IAWO,IAAa,mBAAT,EAAAxH,CAAJ,CAAkC,CACrCzB,CAAQ,CAAC8G,IAAT,CAAc,CACV7G,KAAK,CAAE,KAAKlC,OAAL,CAAamL,4BADV,CAEV/I,WAAW,CAAE,KAAKpC,OAAL,CAAaoL,qCAFhB,CAAd,EAIAnJ,CAAQ,CAAC8G,IAAT,CAAc,CACV3G,WAAW,CAAE,KAAKpC,OAAL,CAAaqL,qCADhB,CAAd,EAGApJ,CAAQ,CAAC8G,IAAT,CAAc,CACV3G,WAAW,CAAE,KAAKpC,OAAL,CAAasL,qCADhB,CAAd,CAGH,CACD,KAAKjK,aAAL,CAAqBY,CAArB,CACA,GAAI,KAAKZ,aAAL,CAAmBE,MAAvB,CAA+B,CAC3B,KAAKH,WAAL,GACH,CACJ,CA5UK,CA8UNmK,kBA9UM,6BA8UctE,CA9Ud,CA8UqB,CACvB,KAAK7F,WAAL,CAAmB6F,CACtB,CAhVK,CAkVNuE,YAlVM,wBAkVQ,CACV,GAAIC,CAAAA,CAAW,WAAM,KAAKzL,OAAL,CAAa0L,kBAAnB,aAAyC,KAAKtL,QAA9C,CAAf,CACA,MAAOqL,CAAAA,CACV,CArVK,CAzCI,CAAR,CAiYb,CAEM,CAGV,CAzZC,CAAN","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#quiz\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        quiz : content.quiz,\r\n                        questions_attempts_colors: content.questions_attempts_colors,\r\n                        hardest_questions_colors: content.hardest_questions_colors,\r\n                        default_quiz: null,\r\n                        attempts_categories: [],\r\n                        attempts_series: [],\r\n                        attempts_questions: [],\r\n                        hardest_categories: [],\r\n                        hardest_series: [],\r\n                        hardest_questions: [],\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    if (this.quiz.length) {\r\n                        this.default_quiz = this.quiz[0].attempts;\r\n                        this.calculate_questions_attempts(this.default_quiz);\r\n                    };\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#quiz\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    get_quiz_info_text1() {\r\n                        let text = '';\r\n                        if (this.default_quiz) {\r\n                            let questions_number = this.default_quiz.details.questions;\r\n                            let questions_label = this.strings.questions_text;\r\n                            if (questions_number == 1) {\r\n                                questions_label = this.strings.question_text;\r\n                            }\r\n                            text = `* ${this.strings.quiz_info_text} ${questions_number} ${questions_label}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_quiz_info_text2() {\r\n                        let text = '';\r\n                        if (this.default_quiz) {\r\n                            let attempts_number = this.default_quiz.details.attempts;\r\n                            let doing_text = this.strings.doing_text_plural;\r\n                            if (attempts_number == 1) {\r\n                                doing_text = this.strings.doing_text_singular;\r\n                            }\r\n                            let students_number = this.default_quiz.details.users;\r\n                            let students_label = this.strings.students_text;\r\n                            if (students_number == 1) {\r\n                                students_label = this.strings.student_text;\r\n                            }\r\n                            text = `* ${attempts_number} ${doing_text} ${students_number} ${students_label}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    build_questions_attempts_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null\r\n                        };\r\n                        chart.colors = this.questions_attempts_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.attempts_categories\r\n                        };\r\n                        chart.yAxis = [{\r\n                            min: 0,\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                text: this.strings.questions_attempts_yaxis_title\r\n                            }\r\n                        }];\r\n                        chart.tooltip = {\r\n                            formatter: function() {\r\n                                let question_name = this.x;\r\n                                let attemps = this.y;\r\n                                let total_attemps = this.total;\r\n                                let percentage = Math.round(Number(this.percentage));\r\n                                let series_name = this.series.name;\r\n                                let attempt_preffix = vue.strings.attempts_text;\r\n                                attempt_preffix = attempt_preffix.charAt(0).toUpperCase() + attempt_preffix.slice(1);\r\n                                let attempt_label = vue.strings.attempts_text;\r\n                                let of_conector = vue.strings.of_conector;\r\n                                let review_question = vue.strings.review_question;\r\n                                if (attemps == 1) {\r\n                                    attempt_label = vue.strings.attempt_text;\r\n                                }\r\n                                let text = '<b>' + question_name + ': </b>' + attempt_preffix + ' ' + series_name + '<br/>' +\r\n                                           attemps + ' ' + attempt_label + ' ' + of_conector + ' ' + total_attemps +\r\n                                            ' (' + percentage + '%)' + '<br/>' + review_question;\r\n\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            column: {\r\n                                stacking: 'normal'\r\n                            },\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let question = vue.attempts_questions[this.x];\r\n                                            let id = question.id;\r\n                                            let url = M.cfg.wwwroot + '/question/preview.php?id='+id+'&courseid='+vue.courseid;\r\n                                            window.open(url, '_blank', 'top=50,left=50,width=900,height=600');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.attempts_series;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_hardest_questions_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.hardest_questions_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.hardest_categories,\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function() {\r\n                                let position = this.point.x;\r\n                                let question_info = vue.hardest_questions[position];\r\n                                let question_name = this.x;\r\n                                let serie_name = this.series.name;\r\n                                let value = this.y;\r\n                                let attempt_label = vue.strings.attempts_text;\r\n                                let of_conector = vue.strings.of_conector;\r\n                                let review_question = vue.strings.review_question;\r\n                                if (question_info.ha == 1) {\r\n                                    attempt_label = vue.strings.attempt_text;\r\n                                }\r\n                                let text = '<b>' + question_name + ': </b>' + serie_name + '<br/>' +\r\n                                            question_info.ha + ' ' + attempt_label + ' ' + of_conector + ' '\r\n                                            + question_info.to + ' (' + value + '%)' + '<br/>' + review_question;\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.yAxis = [{\r\n                            min: 0,\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                text: this.strings.hardest_questions_yaxis_title\r\n                            },\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                        }];\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let question = vue.hardest_questions[this.x];\r\n                                            let id = question.id;\r\n                                            let url = M.cfg.wwwroot + '/question/preview.php?id='+id+'&courseid='+vue.courseid;\r\n                                            window.open( url, '_blank', 'top=50,left=50,width=900,height=600');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.hardest_series;\r\n                        return chart;\r\n                    },\r\n\r\n                    calculate_questions_attempts(quiz) {\r\n                        let questions = quiz.questions;\r\n                        let attempts_categories = [];\r\n                        let cont = 1, ql = \"\";\r\n\r\n                        let correct = [], partcorrect = [], incorr = [], gaveup = [], needgrade = [], hardest = [],\r\n                            attempts_questions = [];\r\n                        let co, pc, ic, ga, ng, to, ha = 0;\r\n\r\n                        questions.forEach(question => {\r\n                            co, pc, ic, ga, ng, to = 0;\r\n                            co = (question.gradedright || 0) + (question.mangrright || 0);\r\n                            pc = (question.gradedpartial || 0) + (question.mangrpartial || 0);\r\n                            ic = (question.gradedwrong || 0) + (question.mangrwrong || 0);\r\n                            ga = (question.gaveup || 0) + (question.mangaveup || 0);\r\n                            ng = (question.needsgrading || 0) + (question.mangaveup || 0) +\r\n                                (question.finished || 0) + (question.manfinished || 0);\r\n\r\n                            correct.push(co);\r\n                            partcorrect.push(pc);\r\n                            incorr.push(ic);\r\n                            gaveup.push(ga);\r\n                            needgrade.push(ng);\r\n\r\n                            ql = 'P' + cont;\r\n                            ha = pc + ic + ga;\r\n                            to = co + pc + ic + ga + ng;\r\n                            hardest.push({ id: question.id, qu: ql, ha: ha, to: to, pe: Math.round((ha * 100) / to), });\r\n                            attempts_categories.push(ql);\r\n                            attempts_questions.push(question);\r\n                            cont++;\r\n                        });\r\n\r\n                        let attempts_series = [];\r\n                        attempts_series.push({\r\n                            name: this.strings.correct_attempt,\r\n                            data: correct\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.partcorrect_attempt,\r\n                            data: partcorrect\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.incorrect_attempt,\r\n                            data: incorr\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.blank_attempt,\r\n                            data: gaveup\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.needgraded_attempt,\r\n                            data: needgrade\r\n                        });\r\n\r\n                        let hardest_categories = [], hardest_data = [], hardest_questions = [];\r\n                        hardest.sort(this.compare_hardest);\r\n                        hardest.forEach(element => {\r\n                            if (element.pe) {\r\n                                hardest_categories.push(element.qu);\r\n                                hardest_data.push(element.pe);\r\n                                hardest_questions.push(element);\r\n                            }\r\n                        });\r\n\r\n                        let hardest_series = [{\r\n                            name: this.strings.hardest_questions_yaxis_title,\r\n                            data: hardest_data\r\n                        }];\r\n\r\n                        this.attempts_categories = attempts_categories;\r\n                        this.attempts_series = attempts_series;\r\n                        this.attempts_questions = attempts_questions;\r\n                        this.hardest_categories = hardest_categories;\r\n                        this.hardest_series = hardest_series;\r\n                        this.hardest_questions = hardest_questions;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"quiz\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.quiz = response.data.data.quiz;\r\n                                if (this.quiz.length) {\r\n                                    this.default_quiz = this.quiz[0].attempts;\r\n                                    this.calculate_questions_attempts(this.default_quiz);\r\n                                } else {\r\n                                    this.reset_graphs();\r\n                                };\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    reset_graphs () {\r\n                        this.default_quiz = null;\r\n                        this.attempts_categories = [];\r\n                        this.attempts_series = [];\r\n                        this.attempts_questions = [];\r\n                        this.hardest_categories = [];\r\n                        this.hardest_series = [];\r\n                        this.hardest_questions = [];\r\n                    },\r\n\r\n                    compare_hardest(a, b) {\r\n                        if (a.pe > b.pe) {\r\n                            return -1;\r\n                        }\r\n                        if (a.pe < b.pe) {\r\n                            return 1;\r\n                        }\r\n                        return 0;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"questions_attempts\") {\r\n                            contents.push({\r\n                                title: this.strings.questions_attempts_help_title,\r\n                                description: this.strings.questions_attempts_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.questions_attempts_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.questions_attempts_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"hardest_questions\") {\r\n                            contents.push({\r\n                                title: this.strings.hardest_questions_help_title,\r\n                                description: this.strings.hardest_questions_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hardest_questions_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hardest_questions_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"quiz.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/quiz.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "Pagination",
+    "ChartDynamic",
+    "PageHeader",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "errors",
+    "pages",
+    "quiz",
+    "questions_attempts_colors",
+    "hardest_questions_colors",
+    "default_quiz",
+    "attempts_categories",
+    "attempts_series",
+    "attempts_questions",
+    "hardest_categories",
+    "hardest_series",
+    "hardest_questions",
+    "help_dialog",
+    "help_contents",
+    "beforeMount",
+    "length",
+    "attempts",
+    "calculate_questions_attempts",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "get_quiz_info_text1",
+    "text",
+    "questions_number",
+    "details",
+    "questions",
+    "questions_label",
+    "questions_text",
+    "question_text",
+    "quiz_info_text",
+    "get_quiz_info_text2",
+    "attempts_number",
+    "doing_text",
+    "doing_text_plural",
+    "doing_text_singular",
+    "students_number",
+    "users",
+    "students_label",
+    "students_text",
+    "student_text",
+    "build_questions_attempts_chart",
+    "chart",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "colors",
+    "xAxis",
+    "categories",
+    "yAxis",
+    "min",
+    "allowDecimals",
+    "questions_attempts_yaxis_title",
+    "tooltip",
+    "formatter",
+    "question_name",
+    "x",
+    "attemps",
+    "y",
+    "total_attemps",
+    "total",
+    "percentage",
+    "Math",
+    "round",
+    "series_name",
+    "series",
+    "name",
+    "attempt_preffix",
+    "attempts_text",
+    "charAt",
+    "toUpperCase",
+    "slice",
+    "attempt_label",
+    "of_conector",
+    "review_question",
+    "attempt_text",
+    "plotOptions",
+    "column",
+    "stacking",
+    "cursor",
+    "point",
+    "events",
+    "click",
+    "question",
+    "id",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "window",
+    "open",
+    "build_hardest_questions_chart",
+    "legend",
+    "enabled",
+    "position",
+    "question_info",
+    "serie_name",
+    "value",
+    "ha",
+    "to",
+    "hardest_questions_yaxis_title",
+    "labels",
+    "format",
+    "cont",
+    "ql",
+    "correct",
+    "partcorrect",
+    "incorr",
+    "gaveup",
+    "needgrade",
+    "hardest",
+    "co",
+    "pc",
+    "ic",
+    "ga",
+    "ng",
+    "forEach",
+    "gradedright",
+    "mangrright",
+    "gradedpartial",
+    "mangrpartial",
+    "gradedwrong",
+    "mangrwrong",
+    "mangaveup",
+    "needsgrading",
+    "finished",
+    "manfinished",
+    "push",
+    "qu",
+    "pe",
+    "correct_attempt",
+    "partcorrect_attempt",
+    "incorrect_attempt",
+    "blank_attempt",
+    "needgraded_attempt",
+    "hardest_data",
+    "sort",
+    "compare_hardest",
+    "element",
+    "update_interactions",
+    "week",
+    "action",
+    "weekcode",
+    "profile",
+    "method",
+    "params",
+    "then",
+    "response",
+    "status",
+    "ok",
+    "reset_graphs",
+    "error_messages",
+    "error_network",
+    "catch",
+    "api_error_network",
+    "finally",
+    "a",
+    "b",
+    "open_chart_help",
+    "questions_attempts_help_title",
+    "questions_attempts_help_description_p1",
+    "questions_attempts_help_description_p2",
+    "questions_attempts_help_description_p3",
+    "hardest_questions_help_title",
+    "hardest_questions_help_description_p1",
+    "hardest_questions_help_description_p2",
+    "hardest_questions_help_description_p3",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartdynamic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartDynamic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#quiz\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        quiz : content.quiz,\r\n                        questions_attempts_colors: content.questions_attempts_colors,\r\n                        hardest_questions_colors: content.hardest_questions_colors,\r\n                        default_quiz: null,\r\n                        attempts_categories: [],\r\n                        attempts_series: [],\r\n                        attempts_questions: [],\r\n                        hardest_categories: [],\r\n                        hardest_series: [],\r\n                        hardest_questions: [],\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    if (this.quiz.length) {\r\n                        this.default_quiz = this.quiz[0].attempts;\r\n                        this.calculate_questions_attempts(this.default_quiz);\r\n                    };\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#quiz\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    get_quiz_info_text1() {\r\n                        let text = '';\r\n                        if (this.default_quiz) {\r\n                            let questions_number = this.default_quiz.details.questions;\r\n                            let questions_label = this.strings.questions_text;\r\n                            if (questions_number == 1) {\r\n                                questions_label = this.strings.question_text;\r\n                            }\r\n                            text = `* ${this.strings.quiz_info_text} ${questions_number} ${questions_label}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_quiz_info_text2() {\r\n                        let text = '';\r\n                        if (this.default_quiz) {\r\n                            let attempts_number = this.default_quiz.details.attempts;\r\n                            let doing_text = this.strings.doing_text_plural;\r\n                            if (attempts_number == 1) {\r\n                                doing_text = this.strings.doing_text_singular;\r\n                            }\r\n                            let students_number = this.default_quiz.details.users;\r\n                            let students_label = this.strings.students_text;\r\n                            if (students_number == 1) {\r\n                                students_label = this.strings.student_text;\r\n                            }\r\n                            text = `* ${attempts_number} ${doing_text} ${students_number} ${students_label}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    build_questions_attempts_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null\r\n                        };\r\n                        chart.colors = this.questions_attempts_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.attempts_categories\r\n                        };\r\n                        chart.yAxis = [{\r\n                            min: 0,\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                text: this.strings.questions_attempts_yaxis_title\r\n                            }\r\n                        }];\r\n                        chart.tooltip = {\r\n                            formatter: function() {\r\n                                let question_name = this.x;\r\n                                let attemps = this.y;\r\n                                let total_attemps = this.total;\r\n                                let percentage = Math.round(Number(this.percentage));\r\n                                let series_name = this.series.name;\r\n                                let attempt_preffix = vue.strings.attempts_text;\r\n                                attempt_preffix = attempt_preffix.charAt(0).toUpperCase() + attempt_preffix.slice(1);\r\n                                let attempt_label = vue.strings.attempts_text;\r\n                                let of_conector = vue.strings.of_conector;\r\n                                let review_question = vue.strings.review_question;\r\n                                if (attemps == 1) {\r\n                                    attempt_label = vue.strings.attempt_text;\r\n                                }\r\n                                let text = '<b>' + question_name + ': </b>' + attempt_preffix + ' ' + series_name + '<br/>' +\r\n                                           attemps + ' ' + attempt_label + ' ' + of_conector + ' ' + total_attemps +\r\n                                            ' (' + percentage + '%)' + '<br/>' + review_question;\r\n\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            column: {\r\n                                stacking: 'normal'\r\n                            },\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let question = vue.attempts_questions[this.x];\r\n                                            let id = question.id;\r\n                                            let url = M.cfg.wwwroot + '/question/preview.php?id='+id+'&courseid='+vue.courseid;\r\n                                            window.open(url, '_blank', 'top=50,left=50,width=900,height=600');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.attempts_series;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_hardest_questions_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.hardest_questions_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.hardest_categories,\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function() {\r\n                                let position = this.point.x;\r\n                                let question_info = vue.hardest_questions[position];\r\n                                let question_name = this.x;\r\n                                let serie_name = this.series.name;\r\n                                let value = this.y;\r\n                                let attempt_label = vue.strings.attempts_text;\r\n                                let of_conector = vue.strings.of_conector;\r\n                                let review_question = vue.strings.review_question;\r\n                                if (question_info.ha == 1) {\r\n                                    attempt_label = vue.strings.attempt_text;\r\n                                }\r\n                                let text = '<b>' + question_name + ': </b>' + serie_name + '<br/>' +\r\n                                            question_info.ha + ' ' + attempt_label + ' ' + of_conector + ' '\r\n                                            + question_info.to + ' (' + value + '%)' + '<br/>' + review_question;\r\n                                return text;\r\n                            }\r\n                        };\r\n                        chart.yAxis = [{\r\n                            min: 0,\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                text: this.strings.hardest_questions_yaxis_title\r\n                            },\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                        }];\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                    point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let question = vue.hardest_questions[this.x];\r\n                                            let id = question.id;\r\n                                            let url = M.cfg.wwwroot + '/question/preview.php?id='+id+'&courseid='+vue.courseid;\r\n                                            window.open( url, '_blank', 'top=50,left=50,width=900,height=600');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.hardest_series;\r\n                        return chart;\r\n                    },\r\n\r\n                    calculate_questions_attempts(quiz) {\r\n                        let questions = quiz.questions;\r\n                        let attempts_categories = [];\r\n                        let cont = 1, ql = \"\";\r\n\r\n                        let correct = [], partcorrect = [], incorr = [], gaveup = [], needgrade = [], hardest = [],\r\n                            attempts_questions = [];\r\n                        let co, pc, ic, ga, ng, to, ha = 0;\r\n\r\n                        questions.forEach(question => {\r\n                            co, pc, ic, ga, ng, to = 0;\r\n                            co = (question.gradedright || 0) + (question.mangrright || 0);\r\n                            pc = (question.gradedpartial || 0) + (question.mangrpartial || 0);\r\n                            ic = (question.gradedwrong || 0) + (question.mangrwrong || 0);\r\n                            ga = (question.gaveup || 0) + (question.mangaveup || 0);\r\n                            ng = (question.needsgrading || 0) + (question.mangaveup || 0) +\r\n                                (question.finished || 0) + (question.manfinished || 0);\r\n\r\n                            correct.push(co);\r\n                            partcorrect.push(pc);\r\n                            incorr.push(ic);\r\n                            gaveup.push(ga);\r\n                            needgrade.push(ng);\r\n\r\n                            ql = 'P' + cont;\r\n                            ha = pc + ic + ga;\r\n                            to = co + pc + ic + ga + ng;\r\n                            hardest.push({ id: question.id, qu: ql, ha: ha, to: to, pe: Math.round((ha * 100) / to), });\r\n                            attempts_categories.push(ql);\r\n                            attempts_questions.push(question);\r\n                            cont++;\r\n                        });\r\n\r\n                        let attempts_series = [];\r\n                        attempts_series.push({\r\n                            name: this.strings.correct_attempt,\r\n                            data: correct\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.partcorrect_attempt,\r\n                            data: partcorrect\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.incorrect_attempt,\r\n                            data: incorr\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.blank_attempt,\r\n                            data: gaveup\r\n                        });\r\n                        attempts_series.push({\r\n                            name: this.strings.needgraded_attempt,\r\n                            data: needgrade\r\n                        });\r\n\r\n                        let hardest_categories = [], hardest_data = [], hardest_questions = [];\r\n                        hardest.sort(this.compare_hardest);\r\n                        hardest.forEach(element => {\r\n                            if (element.pe) {\r\n                                hardest_categories.push(element.qu);\r\n                                hardest_data.push(element.pe);\r\n                                hardest_questions.push(element);\r\n                            }\r\n                        });\r\n\r\n                        let hardest_series = [{\r\n                            name: this.strings.hardest_questions_yaxis_title,\r\n                            data: hardest_data\r\n                        }];\r\n\r\n                        this.attempts_categories = attempts_categories;\r\n                        this.attempts_series = attempts_series;\r\n                        this.attempts_questions = attempts_questions;\r\n                        this.hardest_categories = hardest_categories;\r\n                        this.hardest_series = hardest_series;\r\n                        this.hardest_questions = hardest_questions;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"quiz\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.quiz = response.data.data.quiz;\r\n                                if (this.quiz.length) {\r\n                                    this.default_quiz = this.quiz[0].attempts;\r\n                                    this.calculate_questions_attempts(this.default_quiz);\r\n                                } else {\r\n                                    this.reset_graphs();\r\n                                };\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    reset_graphs () {\r\n                        this.default_quiz = null;\r\n                        this.attempts_categories = [];\r\n                        this.attempts_series = [];\r\n                        this.attempts_questions = [];\r\n                        this.hardest_categories = [];\r\n                        this.hardest_series = [];\r\n                        this.hardest_questions = [];\r\n                    },\r\n\r\n                    compare_hardest(a, b) {\r\n                        if (a.pe > b.pe) {\r\n                            return -1;\r\n                        }\r\n                        if (a.pe < b.pe) {\r\n                            return 1;\r\n                        }\r\n                        return 0;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"questions_attempts\") {\r\n                            contents.push({\r\n                                title: this.strings.questions_attempts_help_title,\r\n                                description: this.strings.questions_attempts_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.questions_attempts_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.questions_attempts_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"hardest_questions\") {\r\n                            contents.push({\r\n                                title: this.strings.hardest_questions_help_title,\r\n                                description: this.strings.hardest_questions_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hardest_questions_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hardest_questions_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "quiz.min.js"
+}
diff --git a/notemyprogress/amd/build/sessions.min.js b/notemyprogress/amd/build/sessions.min.js
index 81da7aa73103d7e35eb3909a43c7f95673a7f00d..b29e8fc4f56eb714999b162afc75bf23cd7bbfb2 100644
--- a/notemyprogress/amd/build/sessions.min.js
+++ b/notemyprogress/amd/build/sessions.min.js
@@ -1,2 +1,344 @@
-define(["local_notemyprogress/vue","local_notemyprogress/vuetify","local_notemyprogress/axios","local_notemyprogress/moment","local_notemyprogress/pagination","local_notemyprogress/chartstatic","local_notemyprogress/pageheader","local_notemyprogress/helpdialog"],function(e,t,s,i,o,n,r,a){"use strict";return{init:function(i){e.use(t),e.component("pagination",o),e.component("chart",n),e.component("pageheader",r),e.component("helpdialog",a);let l=new e({delimiters:["[[","]]"],el:"#work_sessions",vuetify:new t,data:()=>({strings:i.strings,groups:i.groups,userid:i.userid,courseid:i.courseid,timezone:i.timezone,render_has:i.profile_render,loading:!1,errors:[],pages:i.pages,hours_sessions:i.indicators.sessions,session_count:i.indicators.count,inverted_time:i.indicators.time,inverted_time_colors:i.inverted_time_colors,sessions_count_colors:i.sessions_count_colors,search:null,help_dialog:!1,help_contents:[]}),mounted(){document.querySelector("#sessions-loader").style.display="none",document.querySelector("#work_sessions").style.display="block",setTimeout(function(){l.setGraphicsEventListeners()},500)},methods:{get_help_content(){let e=[];return e.push({title:this.strings.section_help_title,description:this.strings.section_help_description}),e},update_interactions(e){this.loading=!0,this.errors=[];let t={action:"worksessions",userid:this.userid,courseid:this.courseid,weekcode:e.weekcode,profile:this.render_has};return s({method:"get",url:M.cfg.wwwroot+"/local/notemyprogress/ajax.php",params:t}).then(e=>{200==e.status&&e.data.ok?(this.hours_sessions=e.data.data.indicators.sessions,this.session_count=e.data.data.indicators.count,this.inverted_time=e.data.data.indicators.time):this.error_messages.push(this.strings.error_network)}).catch(e=>{this.errors.push(this.strings.api_error_network)}).finally(()=>{this.loading=!1,l.addLogsIntoDB("viewed","week_"+e.weekcode,"week_section","Week section that allows you to obtain information on a specific week"),l.setGraphicsEventListeners()}),this.data},get_point_category_name(e,t){let s="y"===t;return e.series[s?"yAxis":"xAxis"].categories[e[s?"y":"x"]]},build_hours_sessions_chart(){let e=new Object;return e.title={text:null},e.chart={type:"heatmap",backgroundColor:null,style:{fontFamily:"poppins"}},e.xAxis={categories:this.strings.days},e.yAxis={categories:this.strings.hours,title:null,reversed:!0},e.colorAxis={min:0,minColor:"#E0E0E0",maxColor:"#118AB2"},e.legend={layout:"horizontal",verticalAlign:"bottom"},e.tooltip={formatter:function(){let e=l.get_point_category_name(this.point,"x"),t=l.get_point_category_name(this.point,"y"),s=l.strings.sessions_text;return 1==this.point.value&&(s=l.strings.session_text),"<b>"+e+" "+t+"</b>: "+this.point.value+" "+s}},e.series=[{borderWidth:2,borderColor:"#FAFAFA",data:this.hours_sessions}],e},build_inverted_time_chart(){let e=new Object;return e.chart={type:"bar",backgroundColor:null,style:{fontFamily:"poppins"}},e.title={text:null},e.colors=this.inverted_time_colors,e.xAxis={type:"category",crosshair:!0},e.yAxis={title:{text:this.strings.time_inverted_x_axis}},e.tooltip={shared:!0,useHTML:!0,formatter:function(){return`<b>${this.points[0].key}: </b>${l.convert_time(this.y)}`}},e.legend={enabled:!1},e.series=[{colorByPoint:!0,data:this.inverted_time.data}],e},build_sessions_count_chart(){let e=new Object;return e.chart={backgroundColor:null,style:{fontFamily:"poppins"}},e.title={text:null},e.colors=this.sessions_count_colors,e.yAxis={title:{text:this.strings.session_count_yaxis_title},allowDecimals:!1},e.xAxis={categories:this.session_count.categories},e.tooltip={valueSuffix:this.strings.session_count_tooltip_suffix},e.legend={layout:"horizontal",verticalAlign:"bottom"},e.series=this.session_count.data,e},convert_time(e){e*=3600;let t,s=this.strings.hours_short,i=this.strings.minutes_short,o=this.strings.seconds_short,n=Math.floor(e/3600),r=Math.floor(e%3600/60),a=Math.floor(e%60);return t=n>=1?r>=1?`${n}${s} ${r}${i}`:`${n}${s}`:r>=1?a>=1?`${r}${i} ${a}${o}`:`${r}${i}`:`${a}${o}`},open_chart_help(e){let t=[];var s="",i="",o="",n="";"inverted_time"==e?(t.push({title:this.strings.inverted_time_help_title,description:this.strings.inverted_time_help_description_p1}),t.push({description:this.strings.inverted_time_help_description_p2}),s="viewed",o="help",i="invested_time",n="Help section that provides information about the sessions per week chart",l.addLogsIntoDB(s,i,o,n)):"hours_sessions"==e?(t.push({title:this.strings.hours_sessions_help_title,description:this.strings.hours_sessions_help_description_p1}),t.push({description:this.strings.hours_sessions_help_description_p2}),s="viewed",o="help",i="hours_sessions",n="Help section that provides information about the sessions per hour chart",l.addLogsIntoDB(s,i,o,n)):"sessions_count"==e&&(t.push({title:this.strings.sessions_count_help_title,description:this.strings.sessions_count_help_description_p1}),t.push({description:this.strings.sessions_count_help_description_p2}),s="viewed",o="help",i="sessions_count",n="Help section that provides information about the invested time chart",l.addLogsIntoDB(s,i,o,n)),this.help_contents=t,this.help_contents.length&&(this.help_dialog=!0)},update_help_dialog(e){this.help_dialog=e},get_timezone(){return`${this.strings.ss_change_timezone} ${this.timezone}`},setGraphicsEventListeners(){let e=document.querySelectorAll(".highcharts-container");e.length<1?setTimeout(l.setGraphicsEventListeners,500):(e[0].id="investedTime",e[1].id="sessionsPerHour",e[2].id="sessionsPerWeek",e.forEach(e=>{e.addEventListener("mouseenter",l.addLogsViewGraphic)}))},addLogsViewGraphic(e){event.stopPropagation();var t="",s="",i="",o="";switch(e.target.id){case"investedTime":t="viewed",s="invested_time",i="chart",o="Bar chart that shows the average time invested by students as a function of the expected invested time";break;case"sessionsPerHour":t="viewed",s="hours_sessions",i="chart",o="Chart showing the number of sessions performed according to the time of day";break;case"sessionsPerWeek":t="viewed",s="sessions_count",i="chart",o="Chart showing the number of sessions performed per week";break;default:t="viewed",s="",i="chart",o="A chart"}l.addLogsIntoDB(t,s,i,o)},addLogsIntoDB(e,t,o,n){let r={courseid:i.courseid,userid:i.userid,action:"addLogs",sectionname:"TEACHER_STUDY_SESSIONS",actiontype:e,objectType:o,objectName:t,currentUrl:document.location.href,objectDescription:n};s({method:"get",url:M.cfg.wwwroot+"/local/notemyprogress/ajax.php",params:r}).then(e=>{200==e.status&&e.data.ok}).catch(e=>{})}}})}}});
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartstatic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/helpdialog",
+], function (e, t, s, i, o, n, r, a) {
+  "use strict";
+  return {
+    init: function (i) {
+      e.use(t),
+        e.component("pagination", o),
+        e.component("chart", n),
+        e.component("pageheader", r),
+        e.component("helpdialog", a);
+      let l = new e({
+        delimiters: ["[[", "]]"],
+        el: "#work_sessions",
+        vuetify: new t(),
+        data: () => ({
+          strings: i.strings,
+          groups: i.groups,
+          userid: i.userid,
+          courseid: i.courseid,
+          timezone: i.timezone,
+          render_has: i.profile_render,
+          loading: !1,
+          errors: [],
+          pages: i.pages,
+          hours_sessions: i.indicators.sessions,
+          session_count: i.indicators.count,
+          inverted_time: i.indicators.time,
+          inverted_time_colors: i.inverted_time_colors,
+          sessions_count_colors: i.sessions_count_colors,
+          search: null,
+          help_dialog: !1,
+          help_contents: [],
+        }),
+        mounted() {
+          (document.querySelector("#sessions-loader").style.display = "none"),
+            (document.querySelector("#work_sessions").style.display = "block"),
+            setTimeout(function () {
+              l.setGraphicsEventListeners();
+            }, 500);
+        },
+        methods: {
+          get_help_content() {
+            let e = [];
+            return (
+              e.push({
+                title: this.strings.section_help_title,
+                description: this.strings.section_help_description,
+              }),
+              e
+            );
+          },
+          update_interactions(e) {
+            (this.loading = !0), (this.errors = []);
+            let t = {
+              action: "worksessions",
+              userid: this.userid,
+              courseid: this.courseid,
+              weekcode: e.weekcode,
+              profile: this.render_has,
+            };
+            return (
+              s({
+                method: "get",
+                url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+                params: t,
+              })
+                .then((e) => {
+                  200 == e.status && e.data.ok
+                    ? ((this.hours_sessions = e.data.data.indicators.sessions),
+                      (this.session_count = e.data.data.indicators.count),
+                      (this.inverted_time = e.data.data.indicators.time))
+                    : this.error_messages.push(this.strings.error_network);
+                })
+                .catch((e) => {
+                  this.errors.push(this.strings.api_error_network);
+                })
+                .finally(() => {
+                  (this.loading = !1),
+                    l.addLogsIntoDB(
+                      "viewed",
+                      "week_" + e.weekcode,
+                      "week_section",
+                      "Week section that allows you to obtain information on a specific week"
+                    ),
+                    l.setGraphicsEventListeners();
+                }),
+              this.data
+            );
+          },
+          get_point_category_name(e, t) {
+            let s = "y" === t;
+            return e.series[s ? "yAxis" : "xAxis"].categories[e[s ? "y" : "x"]];
+          },
+          build_hours_sessions_chart() {
+            let e = new Object();
+            return (
+              (e.title = { text: null }),
+              (e.chart = {
+                type: "heatmap",
+                backgroundColor: null,
+                style: { fontFamily: "poppins" },
+              }),
+              (e.xAxis = { categories: this.strings.days }),
+              (e.yAxis = {
+                categories: this.strings.hours,
+                title: null,
+                reversed: !0,
+              }),
+              (e.colorAxis = {
+                min: 0,
+                minColor: "#E0E0E0",
+                maxColor: "#118AB2",
+              }),
+              (e.legend = { layout: "horizontal", verticalAlign: "bottom" }),
+              (e.tooltip = {
+                formatter: function () {
+                  let e = l.get_point_category_name(this.point, "x"),
+                    t = l.get_point_category_name(this.point, "y"),
+                    s = l.strings.sessions_text;
+                  return (
+                    1 == this.point.value && (s = l.strings.session_text),
+                    "<b>" + e + " " + t + "</b>: " + this.point.value + " " + s
+                  );
+                },
+              }),
+              (e.series = [
+                {
+                  borderWidth: 2,
+                  borderColor: "#FAFAFA",
+                  data: this.hours_sessions,
+                },
+              ]),
+              e
+            );
+          },
+          build_inverted_time_chart() {
+            let e = new Object();
+            return (
+              (e.chart = {
+                type: "bar",
+                backgroundColor: null,
+                style: { fontFamily: "poppins" },
+              }),
+              (e.title = { text: null }),
+              (e.colors = this.inverted_time_colors),
+              (e.xAxis = { type: "category", crosshair: !0 }),
+              (e.yAxis = {
+                title: { text: this.strings.time_inverted_x_axis },
+              }),
+              (e.tooltip = {
+                shared: !0,
+                useHTML: !0,
+                formatter: function () {
+                  return `<b>${this.points[0].key}: </b>${l.convert_time(
+                    this.y
+                  )}`;
+                },
+              }),
+              (e.legend = { enabled: !1 }),
+              (e.series = [
+                { colorByPoint: !0, data: this.inverted_time.data },
+              ]),
+              e
+            );
+          },
+          build_sessions_count_chart() {
+            let e = new Object();
+            return (
+              (e.chart = {
+                backgroundColor: null,
+                style: { fontFamily: "poppins" },
+              }),
+              (e.title = { text: null }),
+              (e.colors = this.sessions_count_colors),
+              (e.yAxis = {
+                title: { text: this.strings.session_count_yaxis_title },
+                allowDecimals: !1,
+              }),
+              (e.xAxis = { categories: this.session_count.categories }),
+              (e.tooltip = {
+                valueSuffix: this.strings.session_count_tooltip_suffix,
+              }),
+              (e.legend = { layout: "horizontal", verticalAlign: "bottom" }),
+              (e.series = this.session_count.data),
+              e
+            );
+          },
+          convert_time(e) {
+            e *= 3600;
+            let t,
+              s = this.strings.hours_short,
+              i = this.strings.minutes_short,
+              o = this.strings.seconds_short,
+              n = Math.floor(e / 3600),
+              r = Math.floor((e % 3600) / 60),
+              a = Math.floor(e % 60);
+            return (t =
+              n >= 1
+                ? r >= 1
+                  ? `${n}${s} ${r}${i}`
+                  : `${n}${s}`
+                : r >= 1
+                ? a >= 1
+                  ? `${r}${i} ${a}${o}`
+                  : `${r}${i}`
+                : `${a}${o}`);
+          },
+          open_chart_help(e) {
+            let t = [];
+            var s = "",
+              i = "",
+              o = "",
+              n = "";
+            "inverted_time" == e
+              ? (t.push({
+                  title: this.strings.inverted_time_help_title,
+                  description: this.strings.inverted_time_help_description_p1,
+                }),
+                t.push({
+                  description: this.strings.inverted_time_help_description_p2,
+                }),
+                (s = "viewed"),
+                (o = "help"),
+                (i = "invested_time"),
+                (n =
+                  "Help section that provides information about the sessions per week chart"),
+                l.addLogsIntoDB(s, i, o, n))
+              : "hours_sessions" == e
+              ? (t.push({
+                  title: this.strings.hours_sessions_help_title,
+                  description: this.strings.hours_sessions_help_description_p1,
+                }),
+                t.push({
+                  description: this.strings.hours_sessions_help_description_p2,
+                }),
+                (s = "viewed"),
+                (o = "help"),
+                (i = "hours_sessions"),
+                (n =
+                  "Help section that provides information about the sessions per hour chart"),
+                l.addLogsIntoDB(s, i, o, n))
+              : "sessions_count" == e &&
+                (t.push({
+                  title: this.strings.sessions_count_help_title,
+                  description: this.strings.sessions_count_help_description_p1,
+                }),
+                t.push({
+                  description: this.strings.sessions_count_help_description_p2,
+                }),
+                (s = "viewed"),
+                (o = "help"),
+                (i = "sessions_count"),
+                (n =
+                  "Help section that provides information about the invested time chart"),
+                l.addLogsIntoDB(s, i, o, n)),
+              (this.help_contents = t),
+              this.help_contents.length && (this.help_dialog = !0);
+          },
+          update_help_dialog(e) {
+            this.help_dialog = e;
+          },
+          get_timezone() {
+            return `${this.strings.ss_change_timezone} ${this.timezone}`;
+          },
+          setGraphicsEventListeners() {
+            let e = document.querySelectorAll(".highcharts-container");
+            e.length < 1
+              ? setTimeout(l.setGraphicsEventListeners, 500)
+              : ((e[0].id = "investedTime"),
+                (e[1].id = "sessionsPerHour"),
+                (e[2].id = "sessionsPerWeek"),
+                e.forEach((e) => {
+                  e.addEventListener("mouseenter", l.addLogsViewGraphic);
+                }));
+          },
+          addLogsViewGraphic(e) {
+            event.stopPropagation();
+            var t = "",
+              s = "",
+              i = "",
+              o = "";
+            switch (e.target.id) {
+              case "investedTime":
+                (t = "viewed"),
+                  (s = "invested_time"),
+                  (i = "chart"),
+                  (o =
+                    "Bar chart that shows the average time invested by students as a function of the expected invested time");
+                break;
+              case "sessionsPerHour":
+                (t = "viewed"),
+                  (s = "hours_sessions"),
+                  (i = "chart"),
+                  (o =
+                    "Chart showing the number of sessions performed according to the time of day");
+                break;
+              case "sessionsPerWeek":
+                (t = "viewed"),
+                  (s = "sessions_count"),
+                  (i = "chart"),
+                  (o =
+                    "Chart showing the number of sessions performed per week");
+                break;
+              default:
+                (t = "viewed"), (s = ""), (i = "chart"), (o = "A chart");
+            }
+            l.addLogsIntoDB(t, s, i, o);
+          },
+          addLogsIntoDB(e, t, o, n) {
+            let r = {
+              courseid: i.courseid,
+              userid: i.userid,
+              action: "addLogs",
+              sectionname: "TEACHER_STUDY_SESSIONS",
+              actiontype: e,
+              objectType: o,
+              objectName: t,
+              currentUrl: document.location.href,
+              objectDescription: n,
+            };
+            s({
+              method: "get",
+              url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+              params: r,
+            })
+              .then((e) => {
+                200 == e.status && e.data.ok;
+              })
+              .catch((e) => {});
+          },
+        },
+      });
+    },
+  };
+});
 //# sourceMappingURL=sessions.min.js.map
diff --git a/notemyprogress/amd/build/sessions.min.js.map b/notemyprogress/amd/build/sessions.min.js.map
index d6d3f65023bd9faeff6d9f180b5d25338966ff66..5b3b062860b3344400a2ebebbee4dbcea917fd8f 100644
--- a/notemyprogress/amd/build/sessions.min.js.map
+++ b/notemyprogress/amd/build/sessions.min.js.map
@@ -1 +1,164 @@
-{"version":3,"sources":["../src/sessions.js"],"names":["define","Vue","Vuetify","Axios","Moment","Pagination","ChartStatic","PageHeader","HelpDialog","init","content","use","component","vue","delimiters","el","vuetify","data","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","errors","pages","hours_sessions","indicators","sessions","session_count","count","inverted_time","time","inverted_time_colors","sessions_count_colors","search","help_dialog","help_contents","mounted","document","querySelector","style","display","methods","get_help_content","contents","title","section_help_title","description","section_help_description","update_interactions","week","action","weekcode","profile","method","url","M","cfg","wwwroot","params","then","response","status","ok","error_messages","push","error_network","catch","api_error_network","finally","get_point_category_name","point","dimension","series","isY","axis","categories","build_hours_sessions_chart","chart","text","type","backgroundColor","fontFamily","xAxis","days","yAxis","hours","reversed","colorAxis","min","minColor","maxColor","legend","layout","verticalAlign","tooltip","formatter","xCategoryName","yCategoryName","label","sessions_text","value","session_text","borderWidth","borderColor","build_inverted_time_chart","colors","crosshair","time_inverted_x_axis","shared","useHTML","category_name","points","key","convert_time","y","enabled","colorByPoint","build_sessions_count_chart","session_count_yaxis_title","allowDecimals","valueSuffix","session_count_tooltip_suffix","h","hours_short","m","minutes_short","s","seconds_short","Math","floor","minutes","seconds","open_chart_help","inverted_time_help_title","inverted_time_help_description_p1","inverted_time_help_description_p2","hours_sessions_help_title","hours_sessions_help_description_p1","hours_sessions_help_description_p2","sessions_count_help_title","sessions_count_help_description_p1","sessions_count_help_description_p2","length","update_help_dialog","get_timezone","information","ss_change_timezone"],"mappings":"AAAAA,OAAM,+BAAC,CAAC,wBAAD,CACC,4BADD,CAEC,0BAFD,CAGC,2BAHD,CAIC,+BAJD,CAKC,gCALD,CAMC,+BAND,CAOC,+BAPD,CAAD,CASF,SAASC,CAAT,CAAcC,CAAd,CAAuBC,CAAvB,CAA8BC,CAA9B,CAAsCC,CAAtC,CAAkDC,CAAlD,CAA+DC,CAA/D,CAA2EC,CAA3E,CAAuF,CACnF,aAmRA,MAAO,CACHC,IAAI,CAlRR,SAAcC,CAAd,CAAuB,CAEnBT,CAAG,CAACU,GAAJ,CAAQT,CAAR,EACAD,CAAG,CAACW,SAAJ,CAAc,YAAd,CAA4BP,CAA5B,EACAJ,CAAG,CAACW,SAAJ,CAAc,OAAd,CAAuBN,CAAvB,EACAL,CAAG,CAACW,SAAJ,CAAc,YAAd,CAA4BL,CAA5B,EACAN,CAAG,CAACW,SAAJ,CAAc,YAAd,CAA4BJ,CAA5B,EACA,GAAIK,CAAAA,CAAG,CAAG,GAAIZ,CAAAA,CAAJ,CAAQ,CACda,UAAU,CAAE,CAAC,IAAD,CAAO,IAAP,CADE,CAEdC,EAAE,CAAE,gBAFU,CAGdC,OAAO,CAAE,GAAId,CAAAA,CAHC,CAIde,IAJc,gBAIP,CACH,MAAO,CACHC,OAAO,CAAGR,CAAO,CAACQ,OADf,CAEHC,MAAM,CAAGT,CAAO,CAACS,MAFd,CAGHC,MAAM,CAAGV,CAAO,CAACU,MAHd,CAIHC,QAAQ,CAAGX,CAAO,CAACW,QAJhB,CAKHC,QAAQ,CAAGZ,CAAO,CAACY,QALhB,CAMHC,UAAU,CAAGb,CAAO,CAACc,cANlB,CAOHC,OAAO,GAPJ,CAQHC,MAAM,CAAG,EARN,CAUHC,KAAK,CAAGjB,CAAO,CAACiB,KAVb,CAWHC,cAAc,CAAElB,CAAO,CAACmB,UAAR,CAAmBC,QAXhC,CAYHC,aAAa,CAAErB,CAAO,CAACmB,UAAR,CAAmBG,KAZ/B,CAaHC,aAAa,CAAEvB,CAAO,CAACmB,UAAR,CAAmBK,IAb/B,CAcHC,oBAAoB,CAAEzB,CAAO,CAACyB,oBAd3B,CAeHC,qBAAqB,CAAE1B,CAAO,CAAC0B,qBAf5B,CAgBHC,MAAM,CAAE,IAhBL,CAkBHC,WAAW,GAlBR,CAmBHC,aAAa,CAAE,EAnBZ,CAqBV,CA1Ba,CA2BdC,OA3Bc,mBA2BL,CACLC,QAAQ,CAACC,aAAT,CAAuB,kBAAvB,EAA2CC,KAA3C,CAAiDC,OAAjD,CAA2D,MAA3D,CACAH,QAAQ,CAACC,aAAT,CAAuB,gBAAvB,EAAyCC,KAAzC,CAA+CC,OAA/C,CAAyD,OAC5D,CA9Ba,CA+BdC,OAAO,CAAG,CACNC,gBADM,4BACY,CACd,GAAIC,CAAAA,CAAQ,CAAG,CACD,CACVC,KAAK,CAAE,KAAK9B,OAAL,CAAa+B,kBADV,CAEVC,WAAW,CAAE,KAAKhC,OAAL,CAAaiC,wBAFhB,CADC,CAAf,CAKA,MAAOJ,CAAAA,CACV,CARK,CAUNK,mBAVM,8BAUcC,CAVd,CAUmB,YACrB,KAAK5B,OAAL,IACA,KAAKC,MAAL,CAAc,EAAd,CACA,GAAIT,CAAAA,CAAI,CAAG,CACPqC,MAAM,CAAG,cADF,CAEPlC,MAAM,CAAG,KAAKA,MAFP,CAGPC,QAAQ,CAAG,KAAKA,QAHT,CAIPkC,QAAQ,CAAGF,CAAI,CAACE,QAJT,CAKPC,OAAO,CAAG,KAAKjC,UALR,CAAX,CAOApB,CAAK,CAAC,CACFsD,MAAM,CAAC,KADL,CAEFC,GAAG,CAAEC,CAAC,CAACC,GAAF,CAAMC,OAAN,CAAgB,8BAFnB,CAGFC,MAAM,CAAG7C,CAHP,CAAD,CAAL,CAIG8C,IAJH,CAIQ,SAACC,CAAD,CAAc,CAClB,GAAuB,GAAnB,EAAAA,CAAQ,CAACC,MAAT,EAA0BD,CAAQ,CAAC/C,IAAT,CAAciD,EAA5C,CAAgD,CAC5C,CAAI,CAACtC,cAAL,CAAsBoC,CAAQ,CAAC/C,IAAT,CAAcA,IAAd,CAAmBY,UAAnB,CAA8BC,QAApD,CACA,CAAI,CAACC,aAAL,CAAqBiC,CAAQ,CAAC/C,IAAT,CAAcA,IAAd,CAAmBY,UAAnB,CAA8BG,KAAnD,CACA,CAAI,CAACC,aAAL,CAAqB+B,CAAQ,CAAC/C,IAAT,CAAcA,IAAd,CAAmBY,UAAnB,CAA8BK,IACtD,CAJD,IAIO,CACH,CAAI,CAACiC,cAAL,CAAoBC,IAApB,CAAyB,CAAI,CAAClD,OAAL,CAAamD,aAAtC,CACH,CACJ,CAZD,EAYGC,KAZH,CAYS,UAAO,CACZ,CAAI,CAAC5C,MAAL,CAAY0C,IAAZ,CAAiB,CAAI,CAAClD,OAAL,CAAaqD,iBAA9B,CACH,CAdD,EAcGC,OAdH,CAcW,UAAM,CACb,CAAI,CAAC/C,OAAL,GACH,CAhBD,EAiBA,MAAO,MAAKR,IACf,CAtCK,CAwCNwD,uBAxCM,kCAwCkBC,CAxClB,CAwCyBC,CAxCzB,CAwCoC,CACtC,GAAIC,CAAAA,CAAM,CAAGF,CAAK,CAACE,MAAnB,CACIC,CAAG,CAAiB,GAAd,GAAAF,CADV,CAEIG,CAAI,CAAGF,CAAM,CAACC,CAAG,CAAG,OAAH,CAAa,OAAjB,CAFjB,CAGA,MAAOC,CAAAA,CAAI,CAACC,UAAL,CAAgBL,CAAK,CAACG,CAAG,CAAG,GAAH,CAAS,GAAb,CAArB,CACV,CA7CK,CA+CNG,0BA/CM,sCA+CuB,CACzB,GAAIC,CAAAA,CAAK,GAAT,CACAA,CAAK,CAACjC,KAAN,CAAc,CACVkC,IAAI,CAAE,IADI,CAAd,CAGAD,CAAK,CAACA,KAAN,CAAc,CACVE,IAAI,CAAE,SADI,CAEVC,eAAe,CAAE,IAFP,CAGVzC,KAAK,CAAE,CAAC0C,UAAU,CAAE,SAAb,CAHG,CAAd,CAKAJ,CAAK,CAACK,KAAN,CAAc,CACVP,UAAU,CAAE,KAAK7D,OAAL,CAAaqE,IADf,CAAd,CAGAN,CAAK,CAACO,KAAN,CAAc,CACVT,UAAU,CAAE,KAAK7D,OAAL,CAAauE,KADf,CAEVzC,KAAK,CAAE,IAFG,CAGV0C,QAAQ,GAHE,CAAd,CAKAT,CAAK,CAACU,SAAN,CAAkB,CACdC,GAAG,CAAE,CADS,CAEdC,QAAQ,CAAE,SAFI,CAGdC,QAAQ,CAAE,SAHI,CAAlB,CAKAb,CAAK,CAACc,MAAN,CAAe,CACXC,MAAM,CAAE,YADG,CAEXC,aAAa,CAAE,QAFJ,CAAf,CAIAhB,CAAK,CAACiB,OAAN,CAAgB,CACZC,SAAS,CAAE,oBAAY,IACfC,CAAAA,CAAa,CAAGvF,CAAG,CAAC4D,uBAAJ,CAA4B,KAAKC,KAAjC,CAAwC,GAAxC,CADD,CAEf2B,CAAa,CAAGxF,CAAG,CAAC4D,uBAAJ,CAA4B,KAAKC,KAAjC,CAAwC,GAAxC,CAFD,CAGf4B,CAAK,CAAGzF,CAAG,CAACK,OAAJ,CAAYqF,aAHL,CAInB,GAAwB,CAApB,OAAK7B,KAAL,CAAW8B,KAAf,CAA2B,CACvBF,CAAK,CAAGzF,CAAG,CAACK,OAAJ,CAAYuF,YACvB,CACD,MAAO,MAAQL,CAAR,CAAwB,GAAxB,CAA8BC,CAA9B,CAA8C,QAA9C,CACD,KAAK3B,KAAL,CAAW8B,KADV,CACiB,GADjB,CACuBF,CACjC,CAVW,CAAhB,CAYArB,CAAK,CAACL,MAAN,CAAe,CAAC,CACZ8B,WAAW,CAAE,CADD,CAEZC,WAAW,CAAE,SAFD,CAGZ1F,IAAI,CAAE,KAAKW,cAHC,CAAD,CAAf,CAKA,MAAOqD,CAAAA,CACV,CA5FK,CA8FN2B,yBA9FM,qCA8FsB,CACxB,GAAI3B,CAAAA,CAAK,GAAT,CACAA,CAAK,CAACA,KAAN,CAAc,CACVE,IAAI,CAAE,KADI,CAEVC,eAAe,CAAE,IAFP,CAGVzC,KAAK,CAAE,CAAC0C,UAAU,CAAE,SAAb,CAHG,CAAd,CAKAJ,CAAK,CAACjC,KAAN,CAAc,CACVkC,IAAI,CAAE,IADI,CAAd,CAGAD,CAAK,CAAC4B,MAAN,CAAe,KAAK1E,oBAApB,CACA8C,CAAK,CAACK,KAAN,CAAc,CACVH,IAAI,CAAE,UADI,CAEV2B,SAAS,GAFC,CAAd,CAIA7B,CAAK,CAACO,KAAN,CAAc,CACVxC,KAAK,CAAE,CACHkC,IAAI,CAAE,KAAKhE,OAAL,CAAa6F,oBADhB,CADG,CAAd,CAKA9B,CAAK,CAACiB,OAAN,CAAgB,CACZc,MAAM,GADM,CAEZC,OAAO,GAFK,CAGZd,SAAS,CAAE,oBAAY,IACfe,CAAAA,CAAa,CAAG,KAAKC,MAAL,CAAY,CAAZ,EAAeC,GADhB,CAEflF,CAAI,CAAGrB,CAAG,CAACwG,YAAJ,CAAiB,KAAKC,CAAtB,CAFQ,CAGnB,mBAAaJ,CAAb,kBAAmChF,CAAnC,CACH,CAPW,CAAhB,CASA+C,CAAK,CAACc,MAAN,CAAe,CACXwB,OAAO,GADI,CAAf,CAGAtC,CAAK,CAACL,MAAN,CAAe,CAAC,CACZ4C,YAAY,GADA,CAEZvG,IAAI,CAAE,KAAKgB,aAAL,CAAmBhB,IAFb,CAAD,CAAf,CAIA,MAAOgE,CAAAA,CACV,CAnIK,CAqINwC,0BArIM,sCAqIuB,CACzB,GAAIxC,CAAAA,CAAK,GAAT,CACAA,CAAK,CAACA,KAAN,CAAc,CACVG,eAAe,CAAE,IADP,CAEVzC,KAAK,CAAE,CAAC0C,UAAU,CAAE,SAAb,CAFG,CAAd,CAIAJ,CAAK,CAACjC,KAAN,CAAc,CACVkC,IAAI,CAAE,IADI,CAAd,CAGAD,CAAK,CAAC4B,MAAN,CAAe,KAAKzE,qBAApB,CACA6C,CAAK,CAACO,KAAN,CAAc,CACVxC,KAAK,CAAE,CACHkC,IAAI,CAAE,KAAKhE,OAAL,CAAawG,yBADhB,CADG,CAIVC,aAAa,GAJH,CAAd,CAMA1C,CAAK,CAACK,KAAN,CAAc,CACVP,UAAU,CAAE,KAAKhD,aAAL,CAAmBgD,UADrB,CAAd,CAGAE,CAAK,CAACiB,OAAN,CAAgB,CACZ0B,WAAW,CAAE,KAAK1G,OAAL,CAAa2G,4BADd,CAAhB,CAGA5C,CAAK,CAACc,MAAN,CAAe,CACXC,MAAM,CAAE,YADG,CAEXC,aAAa,CAAE,QAFJ,CAAf,CAIAhB,CAAK,CAACL,MAAN,CAAe,KAAK7C,aAAL,CAAmBd,IAAlC,CACA,MAAOgE,CAAAA,CACV,CAjKK,CAmKNoC,YAnKM,uBAmKOnF,CAnKP,CAmKa,CACfA,CAAI,EAAI,IAAR,CADe,GAEX4F,CAAAA,CAAC,CAAG,KAAK5G,OAAL,CAAa6G,WAFN,CAGXC,CAAC,CAAG,KAAK9G,OAAL,CAAa+G,aAHN,CAIXC,CAAC,CAAG,KAAKhH,OAAL,CAAaiH,aAJN,CAKX1C,CAAK,CAAG2C,IAAI,CAACC,KAAL,CAAWnG,CAAI,CAAG,IAAlB,CALG,CAMXoG,CAAO,CAAGF,IAAI,CAACC,KAAL,CAAYnG,CAAI,CAAG,IAAR,CAAgB,EAA3B,CANC,CAOXqG,CAAO,CAAGH,IAAI,CAACC,KAAL,CAAWnG,CAAI,CAAG,EAAlB,CAPC,CAQXgD,CARW,CASf,GAAa,CAAT,EAAAO,CAAJ,CAAgB,CACZ,GAAe,CAAX,EAAA6C,CAAJ,CAAkB,CACdpD,CAAI,WAAMO,CAAN,SAAcqC,CAAd,aAAmBQ,CAAnB,SAA6BN,CAA7B,CACP,CAFD,IAEO,CACH9C,CAAI,WAAMO,CAAN,SAAcqC,CAAd,CACP,CACJ,CAND,IAMO,IAAgB,CAAX,EAAAQ,CAAL,CAAoB,CACvB,GAAe,CAAX,EAAAC,CAAJ,CAAkB,CACdrD,CAAI,WAAMoD,CAAN,SAAgBN,CAAhB,aAAqBO,CAArB,SAA+BL,CAA/B,CACP,CAFD,IAEO,CACHhD,CAAI,WAAMoD,CAAN,SAAgBN,CAAhB,CACP,CACJ,CANM,IAMA,CACH9C,CAAI,WAAMqD,CAAN,SAAgBL,CAAhB,CACP,CACD,MAAOhD,CAAAA,CACV,CA5LK,CA8LNsD,eA9LM,0BA8LUvD,CA9LV,CA8LiB,CACnB,GAAIlC,CAAAA,CAAQ,CAAG,EAAf,CACA,GAAa,eAAT,EAAAkC,CAAJ,CAA8B,CAC1BlC,CAAQ,CAACqB,IAAT,CAAc,CACVpB,KAAK,CAAE,KAAK9B,OAAL,CAAauH,wBADV,CAEVvF,WAAW,CAAE,KAAKhC,OAAL,CAAawH,iCAFhB,CAAd,EAIA3F,CAAQ,CAACqB,IAAT,CAAc,CACVlB,WAAW,CAAE,KAAKhC,OAAL,CAAayH,iCADhB,CAAd,CAGH,CARD,IAQO,IAAa,gBAAT,EAAA1D,CAAJ,CAA+B,CAClClC,CAAQ,CAACqB,IAAT,CAAc,CACVpB,KAAK,CAAE,KAAK9B,OAAL,CAAa0H,yBADV,CAEV1F,WAAW,CAAE,KAAKhC,OAAL,CAAa2H,kCAFhB,CAAd,EAIA9F,CAAQ,CAACqB,IAAT,CAAc,CACVlB,WAAW,CAAE,KAAKhC,OAAL,CAAa4H,kCADhB,CAAd,CAGH,CARM,IAQA,IAAa,gBAAT,EAAA7D,CAAJ,CAA+B,CAClClC,CAAQ,CAACqB,IAAT,CAAc,CACVpB,KAAK,CAAE,KAAK9B,OAAL,CAAa6H,yBADV,CAEV7F,WAAW,CAAE,KAAKhC,OAAL,CAAa8H,kCAFhB,CAAd,EAIAjG,CAAQ,CAACqB,IAAT,CAAc,CACVlB,WAAW,CAAE,KAAKhC,OAAL,CAAa+H,kCADhB,CAAd,CAGH,CACD,KAAK1G,aAAL,CAAqBQ,CAArB,CACA,GAAI,KAAKR,aAAL,CAAmB2G,MAAvB,CAA+B,CAC3B,KAAK5G,WAAL,GACH,CACJ,CA7NK,CA+NN6G,kBA/NM,6BA+Nc3C,CA/Nd,CA+NqB,CACvB,KAAKlE,WAAL,CAAmBkE,CACtB,CAjOK,CAmON4C,YAnOM,wBAmOQ,CACV,GAAIC,CAAAA,CAAW,WAAM,KAAKnI,OAAL,CAAaoI,kBAAnB,aAAyC,KAAKhI,QAA9C,CAAf,CACA,MAAO+H,CAAAA,CACV,CAtOK,CA/BI,CAAR,CAwQb,CAEM,CAGV,CAhSC,CAAN","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartstatic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartStatic, PageHeader, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartStatic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#work_sessions\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n\r\n                        pages : content.pages,\r\n                        hours_sessions: content.indicators.sessions,\r\n                        session_count: content.indicators.count,\r\n                        inverted_time: content.indicators.time,\r\n                        inverted_time_colors: content.inverted_time_colors,\r\n                        sessions_count_colors: content.sessions_count_colors,\r\n                        search: null,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#work_sessions\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"worksessions\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.hours_sessions = response.data.data.indicators.sessions;\r\n                                this.session_count = response.data.data.indicators.count;\r\n                                this.inverted_time = response.data.data.indicators.time;\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    get_point_category_name(point, dimension) {\r\n                        let series = point.series,\r\n                            isY = dimension === 'y',\r\n                            axis = series[isY ? 'yAxis' : 'xAxis'];\r\n                        return axis.categories[point[isY ? 'y' : 'x']];\r\n                    },\r\n\r\n                    build_hours_sessions_chart() {\r\n                        let chart = new Object();\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.chart = {\r\n                            type: 'heatmap',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.strings.days,\r\n                        };\r\n                        chart.yAxis = {\r\n                            categories: this.strings.hours,\r\n                            title: null,\r\n                            reversed: true,\r\n                        };\r\n                        chart.colorAxis = {\r\n                            min: 0,\r\n                            minColor: '#E0E0E0',\r\n                            maxColor: '#118AB2'\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let xCategoryName = vue.get_point_category_name(this.point, 'x');\r\n                                let yCategoryName = vue.get_point_category_name(this.point, 'y');\r\n                                let label = vue.strings.sessions_text;\r\n                                if (this.point.value == 1) {\r\n                                    label = vue.strings.session_text;\r\n                                }\r\n                                return '<b>' + xCategoryName + ' ' + yCategoryName + '</b>: '\r\n                                    + this.point.value +' ' + label;\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            borderWidth: 2,\r\n                            borderColor: '#FAFAFA',\r\n                            data: this.hours_sessions,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_inverted_time_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.inverted_time_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            title: {\r\n                                text: this.strings.time_inverted_x_axis,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared:true,\r\n                            useHTML:true,\r\n                            formatter: function () {\r\n                                let category_name = this.points[0].key;\r\n                                let time = vue.convert_time(this.y);\r\n                                return `<b>${category_name}: </b>${time}`;\r\n                            }\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: this.inverted_time.data\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_sessions_count_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.sessions_count_colors;\r\n                        chart.yAxis = {\r\n                            title: {\r\n                                text: this.strings.session_count_yaxis_title,\r\n                            },\r\n                            allowDecimals: false\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.session_count.categories,\r\n                        };\r\n                        chart.tooltip = {\r\n                            valueSuffix: this.strings.session_count_tooltip_suffix,\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.series = this.session_count.data\r\n                        return chart;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 3600; // pasar las horas a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"inverted_time\") {\r\n                            contents.push({\r\n                                title: this.strings.inverted_time_help_title,\r\n                                description: this.strings.inverted_time_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.inverted_time_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"hours_sessions\") {\r\n                            contents.push({\r\n                                title: this.strings.hours_sessions_help_title,\r\n                                description: this.strings.hours_sessions_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hours_sessions_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"sessions_count\") {\r\n                            contents.push({\r\n                                title: this.strings.sessions_count_help_title,\r\n                                description: this.strings.sessions_count_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_count_help_description_p2,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"sessions.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/sessions.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "Pagination",
+    "ChartStatic",
+    "PageHeader",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "errors",
+    "pages",
+    "hours_sessions",
+    "indicators",
+    "sessions",
+    "session_count",
+    "count",
+    "inverted_time",
+    "time",
+    "inverted_time_colors",
+    "sessions_count_colors",
+    "search",
+    "help_dialog",
+    "help_contents",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "update_interactions",
+    "week",
+    "action",
+    "weekcode",
+    "profile",
+    "method",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "params",
+    "then",
+    "response",
+    "status",
+    "ok",
+    "error_messages",
+    "push",
+    "error_network",
+    "catch",
+    "api_error_network",
+    "finally",
+    "get_point_category_name",
+    "point",
+    "dimension",
+    "series",
+    "isY",
+    "axis",
+    "categories",
+    "build_hours_sessions_chart",
+    "chart",
+    "text",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "xAxis",
+    "days",
+    "yAxis",
+    "hours",
+    "reversed",
+    "colorAxis",
+    "min",
+    "minColor",
+    "maxColor",
+    "legend",
+    "layout",
+    "verticalAlign",
+    "tooltip",
+    "formatter",
+    "xCategoryName",
+    "yCategoryName",
+    "label",
+    "sessions_text",
+    "value",
+    "session_text",
+    "borderWidth",
+    "borderColor",
+    "build_inverted_time_chart",
+    "colors",
+    "crosshair",
+    "time_inverted_x_axis",
+    "shared",
+    "useHTML",
+    "category_name",
+    "points",
+    "key",
+    "convert_time",
+    "y",
+    "enabled",
+    "colorByPoint",
+    "build_sessions_count_chart",
+    "session_count_yaxis_title",
+    "allowDecimals",
+    "valueSuffix",
+    "session_count_tooltip_suffix",
+    "h",
+    "hours_short",
+    "m",
+    "minutes_short",
+    "s",
+    "seconds_short",
+    "Math",
+    "floor",
+    "minutes",
+    "seconds",
+    "open_chart_help",
+    "inverted_time_help_title",
+    "inverted_time_help_description_p1",
+    "inverted_time_help_description_p2",
+    "hours_sessions_help_title",
+    "hours_sessions_help_description_p1",
+    "hours_sessions_help_description_p2",
+    "sessions_count_help_title",
+    "sessions_count_help_description_p1",
+    "sessions_count_help_description_p2",
+    "length",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartstatic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartStatic, PageHeader, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartStatic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#work_sessions\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n\r\n                        pages : content.pages,\r\n                        hours_sessions: content.indicators.sessions,\r\n                        session_count: content.indicators.count,\r\n                        inverted_time: content.indicators.time,\r\n                        inverted_time_colors: content.inverted_time_colors,\r\n                        sessions_count_colors: content.sessions_count_colors,\r\n                        search: null,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#work_sessions\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"worksessions\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.hours_sessions = response.data.data.indicators.sessions;\r\n                                this.session_count = response.data.data.indicators.count;\r\n                                this.inverted_time = response.data.data.indicators.time;\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    get_point_category_name(point, dimension) {\r\n                        let series = point.series,\r\n                            isY = dimension === 'y',\r\n                            axis = series[isY ? 'yAxis' : 'xAxis'];\r\n                        return axis.categories[point[isY ? 'y' : 'x']];\r\n                    },\r\n\r\n                    build_hours_sessions_chart() {\r\n                        let chart = new Object();\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.chart = {\r\n                            type: 'heatmap',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.strings.days,\r\n                        };\r\n                        chart.yAxis = {\r\n                            categories: this.strings.hours,\r\n                            title: null,\r\n                            reversed: true,\r\n                        };\r\n                        chart.colorAxis = {\r\n                            min: 0,\r\n                            minColor: '#E0E0E0',\r\n                            maxColor: '#118AB2'\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let xCategoryName = vue.get_point_category_name(this.point, 'x');\r\n                                let yCategoryName = vue.get_point_category_name(this.point, 'y');\r\n                                let label = vue.strings.sessions_text;\r\n                                if (this.point.value == 1) {\r\n                                    label = vue.strings.session_text;\r\n                                }\r\n                                return '<b>' + xCategoryName + ' ' + yCategoryName + '</b>: '\r\n                                    + this.point.value +' ' + label;\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            borderWidth: 2,\r\n                            borderColor: '#FAFAFA',\r\n                            data: this.hours_sessions,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_inverted_time_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.inverted_time_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            title: {\r\n                                text: this.strings.time_inverted_x_axis,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared:true,\r\n                            useHTML:true,\r\n                            formatter: function () {\r\n                                let category_name = this.points[0].key;\r\n                                let time = vue.convert_time(this.y);\r\n                                return `<b>${category_name}: </b>${time}`;\r\n                            }\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: this.inverted_time.data\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_sessions_count_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.sessions_count_colors;\r\n                        chart.yAxis = {\r\n                            title: {\r\n                                text: this.strings.session_count_yaxis_title,\r\n                            },\r\n                            allowDecimals: false\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.session_count.categories,\r\n                        };\r\n                        chart.tooltip = {\r\n                            valueSuffix: this.strings.session_count_tooltip_suffix,\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.series = this.session_count.data\r\n                        return chart;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 3600; // pasar las horas a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"inverted_time\") {\r\n                            contents.push({\r\n                                title: this.strings.inverted_time_help_title,\r\n                                description: this.strings.inverted_time_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.inverted_time_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"hours_sessions\") {\r\n                            contents.push({\r\n                                title: this.strings.hours_sessions_help_title,\r\n                                description: this.strings.hours_sessions_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hours_sessions_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"sessions_count\") {\r\n                            contents.push({\r\n                                title: this.strings.sessions_count_help_title,\r\n                                description: this.strings.sessions_count_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_count_help_description_p2,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "sessions.min.js"
+}
diff --git a/notemyprogress/amd/build/setweeks.js b/notemyprogress/amd/build/setweeks.js
new file mode 100644
index 0000000000000000000000000000000000000000..dff0006c7ec3f59ec48cfc312b17d982ee9078de
--- /dev/null
+++ b/notemyprogress/amd/build/setweeks.js
@@ -0,0 +1,405 @@
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/sortablejs",
+  "local_notemyprogress/draggable",
+  "local_notemyprogress/datepicker",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/alertify",
+  "local_notemyprogress/pageheader",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Sortable,
+  Draggable,
+  Datepicker,
+  Moment,
+  Alertify,
+  Pageheader
+) {
+  "use strict";
+
+  function init(content) {
+    content = add_collapsabled_property_to_weeks(content);
+    Vue.use(Vuetify);
+    Vue.component("draggable", Draggable);
+    Vue.component("datepicker", Datepicker);
+    Vue.component("pageheader", Pageheader);
+    const app = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#setweeks",
+      vuetify: new Vuetify(),
+      data: {
+        display_settings: false,
+        settings: content.settings,
+        new_group: false,
+        scroll_mode: false,
+        weeks_started_at: new Date(
+          Moment(Number(content.weeks[0].weekstart) * 1000)
+        ),
+        strings: content.strings,
+        sections: content.sections,
+        courseid: content.courseid,
+        userid: content.userid,
+        raw_weeks: content.weeks,
+        disabled_dates: {
+          days: [0, 2, 3, 4, 5, 6],
+        },
+        saving_loader: false,
+        error_messages: [],
+        save_successful: false,
+      },
+      mounted() {
+        document.querySelector("#setweeks-loader").style.display = "none";
+        document.querySelector("#setweeks").style.display = "block";
+      },
+      computed: {
+        weeks() {
+          for (let i = 0; i < this.raw_weeks.length; i++) {
+            let week = this.raw_weeks[i];
+            if (i == 0) {
+              let start_weeks = this.weeks_started_at;
+              week.weekstart = start_weeks;
+              week.weekend = this.get_end_week(this.weeks_started_at);
+            } else {
+              week.weekstart = this.get_start_week(
+                this.raw_weeks[i - 1].weekend
+              );
+              week.weekend = this.get_end_week(week.weekstart);
+            }
+          }
+          return this.raw_weeks;
+        },
+      },
+      methods: {
+        section_name(section) {
+          let name = null;
+          if (
+            typeof section.section_name != "undefined" &&
+            section.section_name.length > 0
+          ) {
+            name = section.section_name;
+          } else {
+            name = section.name;
+          }
+          return name;
+        },
+
+        section_exist(section) {
+          let exist = true;
+          if (
+            typeof section != "undefined" &&
+            typeof section.exists != "undefined" &&
+            section.exists == false
+          ) {
+            exist = false;
+          }
+          return exist;
+        },
+
+        format_name(name, position) {
+          return name + " " + (position + 1);
+        },
+
+        customFormatter(date) {
+          let weeks_start_at = Moment(date).format("YYYY-MM-DD");
+          return weeks_start_at;
+        },
+
+        add_week() {
+          this.raw_weeks.push({
+            name: this.strings.week,
+            position: this.weeks.length + 1,
+            weekstart: null,
+            weekend: null,
+            collapsabled: false,
+            hours_dedications: 0,
+            removable: true,
+            sections: [],
+          });
+        },
+
+        has_items(array) {
+          return array.length > 0;
+        },
+
+        remove_week(week, index) {
+          if (index == 0) {
+            return null;
+          }
+          this.close_delete_confirm();
+          for (let i = 0; i < week.sections.length; i++) {
+            this.sections.push(week.sections[i]);
+          }
+          let element_index = this.raw_weeks.indexOf(week);
+          this.raw_weeks.splice(element_index, 1);
+        },
+
+        ask_delete_confirm() {
+          this.delete_confirm = true;
+        },
+
+        close_delete_confirm() {
+          this.delete_confirm = false;
+        },
+
+        get_start_week(pass_week) {
+          let start_date = Moment(Moment(pass_week).add(1, "days")).format(
+            "YYYY-MM-DD"
+          );
+          return start_date;
+        },
+
+        get_end_week(start_week) {
+          let end_date = Moment(Moment(start_week).add(6, "days")).format(
+            "YYYY-MM-DD"
+          );
+          return end_date;
+        },
+
+        get_date_next_day(requested_day, date, output_format = null) {
+          requested_day = requested_day.toLowerCase();
+          let current_day = Moment(date).format("dddd").toLowerCase();
+          while (current_day != requested_day) {
+            date = Moment(date).add(1, "days");
+            current_day = Moment(date).format("dddd").toLowerCase();
+          }
+          if (output_format) {
+            date = date.format(output_format);
+          } else {
+            if (typeof date != "number") {
+              date = parseInt(date.format("x"));
+            }
+          }
+          return date;
+        },
+
+        position(index) {
+          index++;
+          return `${index} - `;
+        },
+
+        save_changes() {
+          this.save_successful = false;
+          this.error_messages = [];
+          if (this.empty_weeks()) {
+            this.saving_loader = false;
+            Alertify.error(this.strings.error_empty_week);
+            this.error_messages.push(this.strings.error_empty_week);
+            return false;
+          }
+          if (this.weeks_deleted_from_course()) {
+            this.saving_loader = false;
+            this.error_messages.push(this.strings.error_section_removed);
+            return false;
+          }
+
+          Alertify.confirm(
+            this.strings.save_warning_content,
+            () => {
+              this.saving_loader = true;
+              var weeks = this.weeks;
+              weeks[0].weekstart = Moment(weeks[0].weekstart).format(
+                "YYYY-MM-DD"
+              );
+              var data = {
+                action: "saveconfigweek",
+                userid: this.userid,
+                courseid: this.courseid,
+                newinstance: this.new_group,
+                weeks: this.minify_query(weeks), // Stringify is a hack to clone object :D
+              };
+              //console.log(data.newinstance);
+              Axios({
+                method: "post",
+                url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+                params: data,
+              })
+                .then((response) => {
+                  console.log("then1");
+                  if (response.status == 200 && response.data.ok) {
+                    console.log("then1.2");
+                    this.settings = response.data.data.settings;
+                    console.log("then1.3");
+                    Alertify.success(this.strings.save_successful);
+                    console.log("then1.4");
+                    this.save_successful = true;
+                    console.log("then1.5");
+                  } else {
+                    console.log("then1.6");
+                    Alertify.error(this.strings.error_network);
+                    console.log("then1.7");
+                    this.error_messages.push(this.strings.error_network);
+                    console.log("then1.8");
+                  }
+                })
+                .catch((e) => {
+                  console.log("catch1");
+                  Alertify.error(this.strings.error_network);
+                  console.log("catch2");
+                  this.error_messages.push(this.strings.error_network);
+                  console.log("catch3");
+                })
+                .finally(() => {
+                  console.log("finally1");
+                  this.saving_loader = false;
+                  console.log("finally2");
+                  //this.addLogsIntoDB("saved", "configuration", "weeks", "Saved a new configuration for the weeks !");
+                });
+            },
+            () => {
+              // ON CANCEL
+              this.saving_loader = false;
+              Alertify.warning(this.strings.cancel_action);
+            }
+          )
+            .set({ title: this.strings.save_warning_title })
+            .set({
+              labels: {
+                cancel: this.strings.confirm_cancel,
+                ok: this.strings.confirm_ok,
+              },
+            });
+        },
+
+        minify_query(weeks) {
+          var minify = [];
+          weeks.forEach((week) => {
+            var wk = new Object();
+            wk.h = week.hours_dedications;
+            wk.s = week.weekstart;
+            wk.e = week.weekend;
+            wk.sections = [];
+            week.sections.forEach((section) => {
+              var s = new Object();
+              s.sid = section.sectionid;
+              wk.sections.push(s);
+            });
+            minify.push(wk);
+          });
+          return JSON.stringify(minify);
+        },
+
+        empty_weeks() {
+          if (this.weeks.length >= 2 && this.weeks[0].sections.length < 1) {
+            return true;
+          }
+          for (let i = 0; i < this.weeks.length; i++) {
+            if (i > 0 && this.weeks[i].sections.length <= 0) {
+              return true;
+            }
+          }
+          return false;
+        },
+
+        weeks_deleted_from_course() {
+          for (
+            var week_position = 0;
+            week_position < this.weeks.length;
+            week_position++
+          ) {
+            for (
+              var section_position = 0;
+              section_position < this.weeks[week_position].sections.length;
+              section_position++
+            ) {
+              if (
+                !this.section_exist(
+                  this.weeks[week_position].sections[section_position]
+                )
+              ) {
+                return true;
+              }
+            }
+          }
+          return false;
+        },
+
+        exists_mistakes() {
+          let exists_mistakes = this.error_messages.length > 0;
+          return exists_mistakes;
+        },
+
+        change_collapsabled(index) {
+          this.raw_weeks[index].collapsabled =
+            !this.raw_weeks[index].collapsabled;
+        },
+
+        course_finished() {
+          let finished = false;
+          let last = this.weeks.length - 1;
+          let end = Moment(this.weeks[last].weekend).format("X");
+          let now = Moment().format("X");
+          if (now > end) {
+            finished = true;
+          } else {
+            finished = false;
+          }
+          return finished;
+        },
+
+        get_settings_status() {
+          let visible = true;
+          Object.keys(this.settings).map((key) => {
+            if (!this.settings[key]) {
+              visible = false;
+            }
+          });
+          let status = visible
+            ? this.strings.plugin_visible
+            : this.strings.plugin_hidden;
+          return status;
+        },
+
+        get_help_content() {
+          var help_contents = [];
+          var help = new Object();
+          help.title = this.strings.title;
+          help.description = this.strings.description;
+          help_contents.push(help);
+          return help_contents;
+        },
+
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "CONFIGURATION_COURSE_WEEK",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
+            })
+            .catch((e) => {});
+        },
+      },
+    });
+  }
+
+  function add_collapsabled_property_to_weeks(content) {
+    for (let i = 0; i < content.weeks.length; i++) {
+      let week = content.weeks[i];
+      if (typeof week.collapsabled == "undefined") {
+        week.collapsabled = false;
+      }
+    }
+    return content;
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/build/setweeks.min.js b/notemyprogress/amd/build/setweeks.min.js
deleted file mode 100644
index 3aded189a22d436a6c6b35c5034ed09fff1bffc9..0000000000000000000000000000000000000000
--- a/notemyprogress/amd/build/setweeks.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-define(["local_notemyprogress/vue","local_notemyprogress/vuetify","local_notemyprogress/axios","local_notemyprogress/sortablejs","local_notemyprogress/draggable","local_notemyprogress/datepicker","local_notemyprogress/moment","local_notemyprogress/alertify","local_notemyprogress/pageheader"],function(e,s,t,r,i,n,o,a,l){"use strict";return{init:function(r){r=function(e){for(let s=0;s<e.weeks.length;s++){let t=e.weeks[s];void 0===t.collapsabled&&(t.collapsabled=!1)}return e}(r),e.use(s),e.component("draggable",i),e.component("datepicker",n),e.component("pageheader",l),new e({delimiters:["[[","]]"],el:"#setweeks",vuetify:new s,data:{display_settings:!1,settings:r.settings,new_group:!1,scroll_mode:!1,weeks_started_at:new Date(o(1e3*Number(r.weeks[0].weekstart))),strings:r.strings,sections:r.sections,courseid:r.courseid,userid:r.userid,raw_weeks:r.weeks,disabled_dates:{days:[0,2,3,4,5,6]},saving_loader:!1,error_messages:[],save_successful:!1},mounted(){document.querySelector("#setweeks-loader").style.display="none",document.querySelector("#setweeks").style.display="block"},computed:{weeks(){for(let e=0;e<this.raw_weeks.length;e++){let s=this.raw_weeks[e];if(0==e){let e=this.weeks_started_at;s.weekstart=e,s.weekend=this.get_end_week(this.weeks_started_at)}else s.weekstart=this.get_start_week(this.raw_weeks[e-1].weekend),s.weekend=this.get_end_week(s.weekstart)}return this.raw_weeks}},methods:{section_name(e){let s=null;return s=void 0!==e.section_name&&e.section_name.length>0?e.section_name:e.name},section_exist(e){let s=!0;return void 0!==e&&void 0!==e.exists&&0==e.exists&&(s=!1),s},format_name:(e,s)=>e+" "+(s+1),customFormatter:e=>o(e).format("YYYY-MM-DD"),add_week(){this.raw_weeks.push({name:this.strings.week,position:this.weeks.length+1,weekstart:null,weekend:null,collapsabled:!1,hours_dedications:0,removable:!0,sections:[]})},has_items:e=>e.length>0,remove_week(e,s){if(0==s)return null;this.close_delete_confirm();for(let s=0;s<e.sections.length;s++)this.sections.push(e.sections[s]);let t=this.raw_weeks.indexOf(e);this.raw_weeks.splice(t,1)},ask_delete_confirm(){this.delete_confirm=!0},close_delete_confirm(){this.delete_confirm=!1},get_start_week:e=>o(o(e).add(1,"days")).format("YYYY-MM-DD"),get_end_week:e=>o(o(e).add(6,"days")).format("YYYY-MM-DD"),get_date_next_day(e,s,t=null){e=e.toLowerCase();let r=o(s).format("dddd").toLowerCase();for(;r!=e;)s=o(s).add(1,"days"),r=o(s).format("dddd").toLowerCase();return t?s=s.format(t):"number"!=typeof s&&(s=parseInt(s.format("x"))),s},position:e=>`${++e} - `,save_changes(){return this.save_successful=!1,this.error_messages=[],this.empty_weeks()?(this.saving_loader=!1,a.error(this.strings.error_empty_week),this.error_messages.push(this.strings.error_empty_week),!1):this.weeks_deleted_from_course()?(this.saving_loader=!1,this.error_messages.push(this.strings.error_section_removed),!1):void a.confirm(this.strings.save_warning_content,()=>{this.saving_loader=!0;var e=this.weeks;e[0].weekstart=o(e[0].weekstart).format("YYYY-MM-DD");var s={action:"saveconfigweek",userid:this.userid,courseid:this.courseid,newinstance:this.new_group,weeks:this.minify_query(e)};t({method:"get",url:M.cfg.wwwroot+"/local/notemyprogress/ajax.php",params:s}).then(e=>{console.log("then1"),200==e.status&&e.data.ok?(console.log("then1.2"),this.settings=e.data.data.settings,console.log("then1.3"),a.success(this.strings.save_successful),console.log("then1.4"),this.save_successful=!0,console.log("then1.5")):(console.log("then1.6"),a.error(this.strings.error_network),console.log("then1.7"),this.error_messages.push(this.strings.error_network),console.log("then1.8"))}).catch(e=>{console.log("catch1"),a.error(this.strings.error_network),console.log("catch2"),this.error_messages.push(this.strings.error_network),console.log("catch3")}).finally(()=>{console.log("finally1"),this.saving_loader=!1,console.log("finally2")})},()=>{this.saving_loader=!1,a.warning(this.strings.cancel_action)}).set({title:this.strings.save_warning_title}).set({labels:{cancel:this.strings.confirm_cancel,ok:this.strings.confirm_ok}})},minify_query(e){var s=[];return e.forEach(e=>{var t=new Object;t.h=e.hours_dedications,t.s=e.weekstart,t.e=e.weekend,t.sections=[],e.sections.forEach(e=>{var s=new Object;s.sid=e.sectionid,t.sections.push(s)}),s.push(t)}),JSON.stringify(s)},empty_weeks(){if(this.weeks.length>=2&&this.weeks[0].sections.length<1)return!0;for(let e=0;e<this.weeks.length;e++)if(e>0&&this.weeks[e].sections.length<=0)return!0;return!1},weeks_deleted_from_course(){for(var e=0;e<this.weeks.length;e++)for(var s=0;s<this.weeks[e].sections.length;s++)if(!this.section_exist(this.weeks[e].sections[s]))return!0;return!1},exists_mistakes(){return this.error_messages.length>0},change_collapsabled(e){this.raw_weeks[e].collapsabled=!this.raw_weeks[e].collapsabled},course_finished(){let e=!1,s=this.weeks.length-1,t=o(this.weeks[s].weekend).format("X");return e=o().format("X")>t},get_settings_status(){let e=!0;return Object.keys(this.settings).map(s=>{this.settings[s]||(e=!1)}),e?this.strings.plugin_visible:this.strings.plugin_hidden},get_help_content(){var e=[],s=new Object;return s.title=this.strings.title,s.description=this.strings.description,e.push(s),e},addLogsIntoDB(e,s,i,n){let o={courseid:r.courseid,userid:r.userid,action:"addLogs",sectionname:"CONFIGURATION_COURSE_WEEK",actiontype:e,objectType:i,objectName:s,currentUrl:document.location.href,objectDescription:n};t({method:"get",url:M.cfg.wwwroot+"/local/notemyprogress/ajax.php",params:o}).then(e=>{200==e.status&&e.data.ok}).catch(e=>{})}}})}}});
-//# sourceMappingURL=setweeks.min.js.map
diff --git a/notemyprogress/amd/build/setweeks.min.js.map b/notemyprogress/amd/build/setweeks.min.js.map
deleted file mode 100644
index 33a2678b6cb9c5358b585fef20cf046a7e9a9a29..0000000000000000000000000000000000000000
--- a/notemyprogress/amd/build/setweeks.min.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../src/setweeks.js"],"names":["define","Vue","Vuetify","Axios","Sortable","Draggable","Datepicker","Moment","Alertify","Pageheader","add_collapsabled_property_to_weeks","content","i","week","weeks","length","collapsabled","init","use","component","delimiters","el","vuetify","data","display_settings","settings","new_group","scroll_mode","weeks_started_at","Date","weekstart","strings","sections","courseid","userid","raw_weeks","disabled_dates","days","saving_loader","error_messages","save_successful","mounted","document","querySelector","style","display","computed","start_weeks","weekend","get_end_week","get_start_week","methods","section_name","section","name","section_exist","exist","exists","format_name","position","customFormatter","date","weeks_start_at","format","add_week","push","hours_dedications","removable","has_items","array","remove_week","index","close_delete_confirm","element_index","indexOf","splice","ask_delete_confirm","delete_confirm","pass_week","start_date","add","start_week","end_date","get_date_next_day","requested_day","output_format","toLowerCase","current_day","parseInt","save_changes","empty_weeks","error","error_empty_week","weeks_deleted_from_course","error_section_removed","confirm","save_warning_content","action","newinstance","minify_query","method","url","M","cfg","wwwroot","params","then","response","status","ok","success","error_network","catch","finally","warning","cancel_action","set","title","save_warning_title","labels","cancel","confirm_cancel","confirm_ok","minify","forEach","wk","h","s","e","sid","sectionid","JSON","stringify","week_position","section_position","exists_mistakes","change_collapsabled","course_finished","finished","last","end","now","get_settings_status","visible","Object","keys","map","key","plugin_visible","plugin_hidden","get_help_content","help_contents","help","description"],"mappings":"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","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/sortablejs\",\r\n        \"local_notemyprogress/draggable\",\r\n        \"local_notemyprogress/datepicker\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/alertify\",\r\n        \"local_notemyprogress/pageheader\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Sortable, Draggable, Datepicker, Moment, Alertify, Pageheader) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            content = add_collapsabled_property_to_weeks(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('draggable', Draggable);\r\n            Vue.component('datepicker', Datepicker);\r\n            Vue.component('pageheader', Pageheader);\r\n            const app = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#setweeks\",\r\n                vuetify: new Vuetify(),\r\n                data: {\r\n                    display_settings: false,\r\n                    settings: content.settings,\r\n                    new_group: false,\r\n                    scroll_mode: false,\r\n                    weeks_started_at: new Date(Moment(Number(content.weeks[0].weekstart)*1000)),\r\n                    strings: content.strings,\r\n                    sections: content.sections,\r\n                    courseid: content.courseid,\r\n                    userid: content.userid,\r\n                    raw_weeks: content.weeks,\r\n                    disabled_dates: {\r\n                        days: [0, 2, 3, 4, 5, 6]\r\n                    },\r\n                    saving_loader: false,\r\n                    error_messages: [],\r\n                    save_successful: false\r\n                },\r\n                mounted() {\r\n                    document.querySelector(\"#setweeks-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#setweeks\").style.display = \"block\";\r\n                },\r\n                computed: {\r\n                    weeks() {\r\n                        for (let i = 0; i < this.raw_weeks.length; i++) {\r\n                            let week = this.raw_weeks[i];\r\n                            if (i == 0) {\r\n                                let start_weeks = this.weeks_started_at;\r\n                                week.weekstart = start_weeks;\r\n                                week.weekend = this.get_end_week(this.weeks_started_at);\r\n                            } else {\r\n                                week.weekstart = this.get_start_week(this.raw_weeks[i - 1].weekend);\r\n                                week.weekend = this.get_end_week(week.weekstart);\r\n                            }\r\n                        }\r\n                        return this.raw_weeks;\r\n                    }\r\n                },\r\n                methods: {\r\n                    section_name(section) {\r\n                        let name = null;\r\n                        if (typeof (section.section_name) != 'undefined' && section.section_name.length > 0) {\r\n                            name = section.section_name;\r\n                        } else {\r\n                            name = section.name;\r\n                        }\r\n                        return name;\r\n                    },\r\n\r\n                    section_exist(section) {\r\n                        let exist = true;\r\n                        if (typeof (section) != 'undefined' && typeof (section.exists) != 'undefined' && section.exists == false) {\r\n                            exist = false;\r\n                        }\r\n                        return exist;\r\n                    },\r\n\r\n                    format_name(name, position) {\r\n                        return name + \" \" + (position + 1);\r\n                    },\r\n\r\n                    customFormatter(date) {\r\n                        let weeks_start_at = Moment(date).format('YYYY-MM-DD');\r\n                        return weeks_start_at;\r\n                    },\r\n\r\n                    add_week() {\r\n                        this.raw_weeks.push({\r\n                            name: this.strings.week,\r\n                            position: (this.weeks.length + 1),\r\n                            weekstart: null,\r\n                            weekend: null,\r\n                            collapsabled: false,\r\n                            hours_dedications: 0,\r\n                            removable: true,\r\n                            sections: []\r\n                        });\r\n                    },\r\n\r\n                    has_items(array) {\r\n                        return array.length > 0;\r\n                    },\r\n\r\n                    remove_week(week, index) {\r\n                        if (index == 0) {\r\n                            return null;\r\n                        }\r\n                        this.close_delete_confirm();\r\n                        for (let i = 0; i < week.sections.length; i++) {\r\n                            this.sections.push(week.sections[i]);\r\n                        }\r\n                        let element_index = this.raw_weeks.indexOf(week);\r\n                        this.raw_weeks.splice(element_index, 1);\r\n                    },\r\n\r\n                    ask_delete_confirm() {\r\n                        this.delete_confirm = true;\r\n                    },\r\n\r\n                    close_delete_confirm() {\r\n                        this.delete_confirm = false;\r\n                    },\r\n\r\n                    get_start_week(pass_week) {\r\n                        let start_date = Moment(Moment(pass_week).add(1, 'days')).format('YYYY-MM-DD');\r\n                        return start_date;\r\n                    },\r\n\r\n                    get_end_week(start_week) {\r\n                        let end_date = Moment(Moment(start_week).add(6, 'days')).format('YYYY-MM-DD');\r\n                        return end_date;\r\n                    },\r\n\r\n                    get_date_next_day(requested_day, date, output_format = null) {\r\n                        requested_day = requested_day.toLowerCase();\r\n                        let current_day = Moment(date).format('dddd').toLowerCase();\r\n                        while (current_day != requested_day) {\r\n                            date = Moment(date).add(1, 'days');\r\n                            current_day = Moment(date).format('dddd').toLowerCase();\r\n                        }\r\n                        if (output_format) {\r\n                            date = date.format(output_format);\r\n                        } else {\r\n                            if (typeof (date) != 'number') {\r\n                                date = parseInt(date.format(\"x\"));\r\n                            }\r\n                        }\r\n                        return date;\r\n                    },\r\n\r\n                    position(index) {\r\n                        index++;\r\n                        return `${index} - `;\r\n                    },\r\n\r\n                    save_changes() {\r\n                        this.save_successful = false;\r\n                        this.error_messages = [];\r\n                        if (this.empty_weeks()) {\r\n                            this.saving_loader = false;\r\n                            Alertify.error(this.strings.error_empty_week);\r\n                            this.error_messages.push(this.strings.error_empty_week);\r\n                            return false;\r\n                        }\r\n                        if (this.weeks_deleted_from_course()) {\r\n                            this.saving_loader = false;\r\n                            this.error_messages.push(this.strings.error_section_removed);\r\n                            return false;\r\n                        }\r\n\r\n                        Alertify.confirm(this.strings.save_warning_content,\r\n                            ()=>{\r\n                                this.saving_loader = true;\r\n                                var weeks = this.weeks;\r\n                                weeks[0].weekstart = Moment(weeks[0].weekstart).format(\"YYYY-MM-DD\");\r\n                                var data = {\r\n                                    action: \"saveconfigweek\",\r\n                                    userid: this.userid,\r\n                                    courseid: this.courseid,\r\n                                    newinstance: this.new_group,\r\n                                    weeks: this.minify_query(weeks) // Stringify is a hack to clone object :D\r\n                                };\r\n\r\n                                Axios({\r\n                                    method: 'get',\r\n                                    url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                                    params: data,\r\n                                }).then((response) => {\r\n                                    if (response.status == 200 && response.data.ok) {\r\n                                        this.settings = response.data.data.settings;\r\n                                        Alertify.success(this.strings.save_successful);\r\n                                        this.save_successful = true;\r\n                                    } else {\r\n                                        Alertify.error(this.strings.error_network);\r\n                                        this.error_messages.push(this.strings.error_network);\r\n                                    }\r\n                                }).catch((e) => {\r\n                                    Alertify.error(this.strings.error_network);\r\n                                    this.error_messages.push(this.strings.error_network);\r\n                                }).finally(() => {\r\n                                    this.saving_loader = false;\r\n                                });\r\n                            },\r\n                            ()=>{ // ON CANCEL\r\n                                this.saving_loader = false;\r\n                                Alertify.warning(this.strings.cancel_action);\r\n                            }).set({title: this.strings.save_warning_title})\r\n                            .set({labels: {cancel: this.strings.confirm_cancel, ok: this.strings.confirm_ok}});\r\n                    },\r\n\r\n                    minify_query(weeks) {\r\n                        var minify = [];\r\n                        weeks.forEach(week => {\r\n                            var wk = new Object();\r\n                            wk.h = week.hours_dedications;\r\n                            wk.s = week.weekstart;\r\n                            wk.e = week.weekend;\r\n                            wk.sections = [];\r\n                            week.sections.forEach(section => {\r\n                                var s = new Object();\r\n                                s.sid = section.sectionid;\r\n                                wk.sections.push(s);\r\n                            });\r\n                            minify.push(wk);\r\n                        });\r\n                        return JSON.stringify(minify);\r\n                    },\r\n\r\n                    empty_weeks() {\r\n                        if (this.weeks.length >= 2 && this.weeks[0].sections.length < 1) {\r\n                            return true;\r\n                        }\r\n                        for (let i = 0; i < this.weeks.length; i++) {\r\n                            if (i > 0 && this.weeks[i].sections.length <= 0) {\r\n                                return true;\r\n                            }\r\n                        }\r\n                        return false;\r\n                    },\r\n\r\n                    weeks_deleted_from_course() {\r\n                        for (var week_position = 0; week_position < this.weeks.length; week_position++) {\r\n                            for (var section_position = 0; section_position < this.weeks[week_position].sections.length; section_position++) {\r\n                                if (!this.section_exist(this.weeks[week_position].sections[section_position])) {\r\n                                    return true;\r\n                                }\r\n                            }\r\n                        }\r\n                        return false;\r\n                    },\r\n\r\n                    exists_mistakes() {\r\n                        let exists_mistakes = this.error_messages.length > 0;\r\n                        return exists_mistakes;\r\n                    },\r\n\r\n                    change_collapsabled(index) {\r\n                        this.raw_weeks[index].collapsabled = !this.raw_weeks[index].collapsabled;\r\n                    },\r\n\r\n                    course_finished() {\r\n                        let finished = false;\r\n                        let last = this.weeks.length - 1;\r\n                        let end = Moment(this.weeks[last].weekend).format(\"X\");\r\n                        let now = Moment().format(\"X\");\r\n                        if (now > end) {\r\n                            finished = true;\r\n                        } else {\r\n                            finished = false;\r\n                        }\r\n                        return finished;\r\n                    },\r\n\r\n                    get_settings_status() {\r\n                        let visible = true;\r\n                        Object.keys(this.settings).map(key => {\r\n                            if (!this.settings[key]) {\r\n                                visible = false;\r\n                            }\r\n                        });\r\n                        let status = visible ? this.strings.plugin_visible : this.strings.plugin_hidden;\r\n                        return status;\r\n                    },\r\n\r\n                    get_help_content() {\r\n                        var help_contents = [];\r\n                        var help = new Object();\r\n                        help.title = this.strings.title;\r\n                        help.description = this.strings.description;\r\n                        help_contents.push(help);\r\n                        return help_contents;\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        function add_collapsabled_property_to_weeks(content) {\r\n            for (let i = 0; i < content.weeks.length; i++) {\r\n                let week = content.weeks[i];\r\n                if (typeof (week.collapsabled) == \"undefined\") {\r\n                    week.collapsabled = false;\r\n                }\r\n            }\r\n            return content;\r\n        }\r\n\r\n        return {\r\n            init: init\r\n        };\r\n    });"],"file":"setweeks.min.js"}
\ No newline at end of file
diff --git a/notemyprogress/amd/build/student.min.js.map b/notemyprogress/amd/build/student.min.js.map
index 99aa9275ed1a39735ef97520c35f46a13bda432e..3ee7f9febb813a0a82544744e39a7e49c230e286 100644
--- a/notemyprogress/amd/build/student.min.js.map
+++ b/notemyprogress/amd/build/student.min.js.map
@@ -1 +1,291 @@
-{"version":3,"sources":["../src/student.js"],"names":["define","Vue","Vuetify","Axios","Moment","MomentTimezone","Pagination","ChartStatic","PageHeader","ModulesForm","HelpDialog","init","content","use","component","vue","delimiters","el","vuetify","data","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","modules_dialog","errors","indicators","modules_access_colors","sessions_evolution_colors","user_grades_colors","user","weeks_sessions","sessions","sessions_evolution_data","user_grades_categories","user_grades_data","course_grades_data","selected_sections","help_dialog","help_contents","beforeMount","set_modules_in_sections","calculate_sessions_evolution","calculate_user_grades","mounted","document","querySelector","style","display","methods","get_help_content","contents","title","section_help_title","description","section_help_description","sectionsMap","Map","sectionid","cms","forEach","cm","section","has","set","get","push","sections","modules","build_modules_access_chart","chart","type","backgroundColor","fontFamily","text","colors","xAxis","yAxis","allowDecimals","enabled","modules_amount","tooltip","shared","formatter","module_text","y","module_label","modules_label","points","key","modules_details","plotOptions","series","cursor","point","events","click","open_modules_modal","x","legend","colorByPoint","name","modules_access_chart_series_viewed","viewed","modules_access_chart_series_complete","complete","modules_access_chart_series_total","total","build_weeks_session_chart","categories","weeks","reversed","colorAxis","min","minColor","maxColor","layout","verticalAlign","days","xCategoryName","get_point_category_name","yCategoryName","label","sessions_text","value","session_text","borderWidth","borderColor","build_sessions_evolution_chart","zoomType","sessions_evolution_chart_xaxis1","sessions_evolution_chart_xaxis2","opposite","useHTML","date_label","calculate_timezone_date_string","text1","get_sessions_evolution_tooltip","text2","build_user_grades_chart","crosshair","max","labels","format","user_grades_chart_yaxis","itemname","position","item","gradeitems","header","footer","user_grades_chart_view_activity","body","gradecount","user_grades_chart_tooltip_no_graded","get_user_grades_tooltip","url","M","cfg","wwwroot","itemmodule","coursemoduleid","window","open","sessions_data","time_data","sumtime","sumsessions","time","timestamp","session","start","duration","sessions_evolution_chart_legend1","sessions_evolution_chart_legend2","course_grades","user_grades","user_grade","user_name","firstname","finalgrade","grademax","average_percentage","user_grades_chart_legend","dat","weekday","monthday","month","tz","zone","day","date","Intl","DateTimeFormat","resolvedOptions","timeZone","Date","getDay","getDate","getMonth","getHours","getMinutes","getSeconds","weekdays","shortMonths","dimension","isY","axis","sessions_suffix","sessions_prefix","time_prefix","colorIndex","color","convert_time","serie_name","average","isInt","toFixed","module","interactions","user_cm","id","get_picture_url","get_user_fullname","lastname","get_username","username","see_profile","get_progress_percentage","progress_percentage","get_progress_message","finished_label","finisheds_label","of_conector","h","hours_short","m","minutes_short","s","seconds_short","hours","Math","floor","minutes","seconds","get_student_grade","grade","coursegrade","maxgrade","student_grade","max_grade","update_modules_dialog","n","open_chart_help","modules_access_help_title","modules_access_help_description_p1","modules_access_help_description_p2","modules_access_help_description_p3","weeks_session_help_title","weeks_session_help_description_p1","weeks_session_help_description_p2","sessions_evolution_help_title","sessions_evolution_help_description_p1","sessions_evolution_help_description_p2","sessions_evolution_help_description_p3","user_grades_help_title","user_grades_help_description_p1","user_grades_help_description_p2","user_grades_help_description_p3","length","update_help_dialog","get_timezone","information","ss_change_timezone"],"mappings":"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","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/momenttimezone\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartstatic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/modulesform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, MomentTimezone, Pagination, ChartStatic, PageHeader, ModulesForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartStatic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('modulesform', ModulesForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#student\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        modules_dialog: false,\r\n                        errors : [],\r\n\r\n                        indicators: content.indicators,\r\n                        modules_access_colors: content.modules_access_colors,\r\n                        sessions_evolution_colors: content.sessions_evolution_colors,\r\n                        user_grades_colors: content.user_grades_colors,\r\n                        user: content.indicators.user,\r\n                        weeks_sessions: content.indicators.sessions,\r\n                        sessions_evolution_data: [],\r\n                        user_grades_categories: [],\r\n                        user_grades_data: [],\r\n                        course_grades_data: [],\r\n                        selected_sections: [],\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    this.set_modules_in_sections();\r\n                    this.calculate_sessions_evolution();\r\n                    this.calculate_user_grades()\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#student\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    set_modules_in_sections() {\r\n                        let sectionsMap = new Map();\r\n                        let sectionid = 0;\r\n                        this.indicators.cms.forEach(cm => {\r\n                            sectionid = Number(cm.section);\r\n                            if (!sectionsMap.has(sectionid)) {\r\n                                sectionsMap.set(sectionid, [cm]);\r\n                            } else {\r\n                                sectionsMap.get(sectionid).push(cm);\r\n                            }\r\n                        });\r\n                        this.indicators.sections.forEach(section => {\r\n                            sectionid = Number(section.sectionid);\r\n                            section.sectionid = sectionid;\r\n                            section.modules = (sectionsMap.has(sectionid)) ? sectionsMap.get(sectionid) : [];\r\n                        });\r\n                    },\r\n\r\n                    build_modules_access_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.modules_access_colors,\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                enabled: true,\r\n                                text: this.strings.modules_amount,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function () {\r\n                                let module_text = (this.y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                return '<b>' + this.points[0].key + '</b>: ' + this.y + ' ' + module_text + '<br/>'\r\n                                    + '<i>'+ vue.strings.modules_details + '<i/>';\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.open_modules_modal(this.x);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        },\r\n                        chart.legend = {\r\n                                enabled: false\r\n                            };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: [\r\n                                {name: this.strings.modules_access_chart_series_viewed, y: this.user.cms.viewed},\r\n                                {name: this.strings.modules_access_chart_series_complete, y: this.user.cms.complete},\r\n                                {name: this.strings.modules_access_chart_series_total, y: this.user.cms.total}\r\n                            ]\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_weeks_session_chart() {\r\n                        let chart = new Object();\r\n                        chart.title = {text: null};\r\n                        chart.chart = {\r\n                            type: 'heatmap',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.strings.weeks,\r\n                        };\r\n                        chart.yAxis = {\r\n                            categories: this.weeks_sessions.categories,\r\n                            title: null,\r\n                            reversed: true,\r\n                        };\r\n                        chart.colorAxis = {\r\n                            min: 0,\r\n                            minColor: '#E0E0E0',\r\n                            maxColor: '#118AB2'\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let days = vue.weeks_sessions.weeks[this.point.y][this.point.x] || '';\r\n                                let xCategoryName = vue.get_point_category_name(this.point, 'x');\r\n                                let yCategoryName = vue.get_point_category_name(this.point, 'y');\r\n                                let label = vue.strings.sessions_text;\r\n                                if (this.point.value == 1) {\r\n                                    label = vue.strings.session_text;;\r\n                                }\r\n                                return '<b>' + yCategoryName + ' ' + xCategoryName + '</b>: '\r\n                                    + this.point.value +' ' + label + '<br/>' + days;\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            borderWidth: 2,\r\n                            borderColor: '#FAFAFA',\r\n                            data: this.weeks_sessions.data,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_sessions_evolution_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            zoomType: 'x',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.sessions_evolution_colors,\r\n                        chart.xAxis = {\r\n                            type: 'datetime'\r\n                        };\r\n                        chart.yAxis = [{\r\n                            allowDecimals: false,\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis1 }\r\n                        }, {\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis2 },\r\n                            opposite: true\r\n                        }];\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let date_label = vue.calculate_timezone_date_string(this.x);\r\n                                let text1 = (this.points[0]) ? vue.get_sessions_evolution_tooltip(this.points[0]) : '';\r\n                                let text2 = (this.points[1]) ? vue.get_sessions_evolution_tooltip(this.points[1]) : '';\r\n                                return `<small>${date_label}</small><br/>${text1}${text2}`;\r\n                            }\r\n                        };\r\n                        chart.series = this.sessions_evolution_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_user_grades_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.user_grades_colors,\r\n                        chart.xAxis = {\r\n                            crosshair: true,\r\n                            categories: this.user_grades_categories,\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            max: 100,\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                            title: { text: this.strings.user_grades_chart_yaxis }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let itemname = this.x;\r\n                                let position = this.points[0].point.x;\r\n                                let item = vue.user.gradeitems[position];\r\n                                let header = `<small>${itemname}</small><br/>`;\r\n                                let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;\r\n                                let body = '';\r\n                                if (item.gradecount == 0) {\r\n                                    body = vue.strings.user_grades_chart_tooltip_no_graded;\r\n                                } else {\r\n                                    let text1 = (this.points[0]) ? vue.get_user_grades_tooltip(this.points[0], item) : '';\r\n                                    let text2 = (this.points[1]) ? vue.get_user_grades_tooltip(this.points[1], item) : '';\r\n                                    body = `${text1}${text2}${footer}`;\r\n                                }\r\n                                return `${header}${body}`;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            let item = vue.user.gradeitems[position];\r\n                                            let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;\r\n                                            window.open(url, '_blank');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.user_grades_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    calculate_sessions_evolution() {\r\n                        let sessions_data = [], time_data = [];\r\n                        let sumtime = 0, sumsessions = 0, time = 0, timestamp = 0;\r\n                        this.user.sessions.forEach(session => {\r\n                            timestamp = Number(session.start) * 1000;\r\n                            time = (Number(session.duration)) / 60;\r\n                            sumtime += time;\r\n                            sumsessions++;\r\n                            sessions_data.push({ x: timestamp, y: sumsessions });\r\n                            time_data.push({ x: timestamp, y: sumtime });\r\n                        });\r\n                        this.sessions_evolution_data = [\r\n                            { name: this.strings.sessions_evolution_chart_legend1, yAxis: 0, data: sessions_data },\r\n                            { name: this.strings.sessions_evolution_chart_legend2, yAxis: 1, data: time_data },\r\n                        ];\r\n                    },\r\n\r\n                    calculate_user_grades() {\r\n                        let categories = [], course_grades = [], user_grades = [];\r\n                        let user_grade = 0, user_name = this.user.firstname;\r\n                        if (this.user.gradeitems) {\r\n                            this.user.gradeitems.forEach(item => {\r\n                                user_grade = (Number(item.finalgrade) * 100) / Number(item.grademax);\r\n                                categories.push(item.itemname);\r\n                                course_grades.push(item.average_percentage);\r\n                                user_grades.push(user_grade);\r\n                            });\r\n                            this.user_grades_data = [\r\n                                { name: user_name, data: user_grades },\r\n                                { name: this.strings.user_grades_chart_legend, data: course_grades },\r\n                            ];\r\n                            this.user_grades_categories = categories;\r\n                        }\r\n                    },\r\n\r\n                    calculate_timezone_date_string(timestamp) {\r\n                        let dat, weekday, monthday, month, time;\r\n                        if (Moment.tz.zone(this.timezone)) {\r\n                            dat = Moment(timestamp).tz(this.timezone);\r\n                            weekday = dat.day();\r\n                            monthday = dat.date();\r\n                            month = dat.month();\r\n                            time = dat.format('HH:mm:ss');\r\n                        } else {\r\n                            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n                            dat =  new Date(timestamp);\r\n                            weekday = dat.getDay();\r\n                            monthday = dat.getDate();\r\n                            month = dat.getMonth();\r\n                            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;\r\n                        }\r\n                        weekday = this.strings.chart.weekdays[weekday];\r\n                        month = this.strings.chart.shortMonths[month];\r\n                        return `${weekday}, ${month} ${monthday}, ${time}`;\r\n                    },\r\n\r\n                    get_point_category_name(point, dimension) {\r\n                        let series = point.series,\r\n                            isY = dimension === 'y',\r\n                            axis = series[isY ? 'yAxis' : 'xAxis'];\r\n                        return axis.categories[point[isY ? 'y' : 'x']];\r\n                    },\r\n\r\n                    get_sessions_evolution_tooltip (point) {\r\n                        let text = '', sessions, sessions_suffix, sessions_prefix, time_prefix, time;\r\n                        if (point.colorIndex == 0) {\r\n                            sessions = point.y;\r\n                            sessions_suffix = (sessions == 1) ? vue.strings.session_text : vue.strings.sessions_text;\r\n                            sessions_prefix = point.series.name;\r\n                            text = `<b style=\"color: ${point.color}\">${sessions_prefix}: </b>\r\n                                     ${sessions} ${sessions_suffix}<br/>`;\r\n                        } else {\r\n                            time_prefix = point.series.name;\r\n                            time = vue.convert_time(point.y * 60);\r\n                            text = `<b style=\"color: ${point.color}\">${time_prefix}: </b>\r\n                                    ${time}<br/>`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_user_grades_tooltip (point, item) {\r\n                        let serie_name = point.series.name, user_grade = 0;\r\n                        let finalgrade = Number(item.finalgrade), average = Number(item.average), grademax = Number(item.grademax);\r\n                        grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);\r\n                        if (point.colorIndex == 0) {\r\n                            user_grade = this.isInt(finalgrade) ? finalgrade : finalgrade.toFixed(2);\r\n                        } else {\r\n                            user_grade = this.isInt(average) ? average : average.toFixed(2);\r\n                        }\r\n                        return `<b style=\"color: ${point.color}\">${serie_name}: </b>\r\n                                     ${user_grade}/${grademax}<br/>`;\r\n                    },\r\n\r\n                    open_modules_modal(){\r\n                        let sections = this.indicators.sections;\r\n                        sections.forEach(section => {\r\n                            section.modules.forEach(module => {\r\n                                module.complete = false;\r\n                                module.viewed = false;\r\n                                module.interactions = 0;\r\n                                let user_cm = this.user.cms.modules[`cm${module.id}`];\r\n                                if (user_cm) {\r\n                                    module.complete = user_cm.complete;\r\n                                    module.viewed = user_cm.viewed;\r\n                                    module.interactions = user_cm.interactions;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        this.modules_dialog = true;\r\n                        this.selected_sections = sections;\r\n                    },\r\n\r\n                    get_picture_url(userid){\r\n                        return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;\r\n                    },\r\n\r\n                    get_user_fullname(){\r\n                        return `${this.user.firstname} ${this.user.lastname}`;\r\n                    },\r\n\r\n                    get_username(){\r\n                        return `@${this.user.username}`;\r\n                    },\r\n\r\n                    see_profile () {\r\n                        let id = this.user.id;\r\n                        let url = M.cfg.wwwroot + '/user/view.php?id='+id+'&course='+vue.courseid;\r\n                        window.open(url);\r\n                    },\r\n\r\n                    get_progress_percentage() {\r\n                        return `${this.user.progress_percentage} %`;\r\n                    },\r\n\r\n                    get_progress_message(){\r\n                        let module_label = this.strings.modules_label;\r\n                        let finished_label = this.strings.finisheds_label;\r\n                        if (this.user.cms.complete == 1) {\r\n                            module_label = this.strings.module_label;\r\n                            finished_label = this.strings.finished_label;\r\n                        }\r\n                        return `${this.user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.user.cms.total}`;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 60; // pasar los minutos a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_student_grade() {\r\n                        let grade = this.user.coursegrade;\r\n                        grade.finalgrade = Number(grade.finalgrade);\r\n                        grade.maxgrade = Number(grade.maxgrade);\r\n                        let student_grade = this.isInt(grade.finalgrade) ? grade.finalgrade : grade.finalgrade.toFixed(2);\r\n                        let max_grade = this.isInt(grade.maxgrade) ? grade.maxgrade : grade.maxgrade.toFixed(2);\r\n                        return `${student_grade}/${max_grade}`;\r\n                    },\r\n\r\n                    update_modules_dialog(value) {\r\n                        this.modules_dialog = value;\r\n                    },\r\n\r\n                    isInt(n) {\r\n                        return n % 1 === 0;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"modules_access\") {\r\n                            contents.push({\r\n                                title: this.strings.modules_access_help_title,\r\n                                description: this.strings.modules_access_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"weeks_session\") {\r\n                            contents.push({\r\n                                title: this.strings.weeks_session_help_title,\r\n                                description: this.strings.weeks_session_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.weeks_session_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"sessions_evolution\") {\r\n                            contents.push({\r\n                                title: this.strings.sessions_evolution_help_title,\r\n                                description: this.strings.sessions_evolution_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"user_grades\") {\r\n                            contents.push({\r\n                                title: this.strings.user_grades_help_title,\r\n                                description: this.strings.user_grades_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"student.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/student.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "MomentTimezone",
+    "Pagination",
+    "ChartStatic",
+    "PageHeader",
+    "ModulesForm",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "modules_dialog",
+    "errors",
+    "indicators",
+    "modules_access_colors",
+    "sessions_evolution_colors",
+    "user_grades_colors",
+    "user",
+    "weeks_sessions",
+    "sessions",
+    "sessions_evolution_data",
+    "user_grades_categories",
+    "user_grades_data",
+    "course_grades_data",
+    "selected_sections",
+    "help_dialog",
+    "help_contents",
+    "beforeMount",
+    "set_modules_in_sections",
+    "calculate_sessions_evolution",
+    "calculate_user_grades",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "sectionsMap",
+    "Map",
+    "sectionid",
+    "cms",
+    "forEach",
+    "cm",
+    "section",
+    "has",
+    "set",
+    "get",
+    "push",
+    "sections",
+    "modules",
+    "build_modules_access_chart",
+    "chart",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "text",
+    "colors",
+    "xAxis",
+    "yAxis",
+    "allowDecimals",
+    "enabled",
+    "modules_amount",
+    "tooltip",
+    "shared",
+    "formatter",
+    "module_text",
+    "y",
+    "module_label",
+    "modules_label",
+    "points",
+    "key",
+    "modules_details",
+    "plotOptions",
+    "series",
+    "cursor",
+    "point",
+    "events",
+    "click",
+    "open_modules_modal",
+    "x",
+    "legend",
+    "colorByPoint",
+    "name",
+    "modules_access_chart_series_viewed",
+    "viewed",
+    "modules_access_chart_series_complete",
+    "complete",
+    "modules_access_chart_series_total",
+    "total",
+    "build_weeks_session_chart",
+    "categories",
+    "weeks",
+    "reversed",
+    "colorAxis",
+    "min",
+    "minColor",
+    "maxColor",
+    "layout",
+    "verticalAlign",
+    "days",
+    "xCategoryName",
+    "get_point_category_name",
+    "yCategoryName",
+    "label",
+    "sessions_text",
+    "value",
+    "session_text",
+    "borderWidth",
+    "borderColor",
+    "build_sessions_evolution_chart",
+    "zoomType",
+    "sessions_evolution_chart_xaxis1",
+    "sessions_evolution_chart_xaxis2",
+    "opposite",
+    "useHTML",
+    "date_label",
+    "calculate_timezone_date_string",
+    "text1",
+    "get_sessions_evolution_tooltip",
+    "text2",
+    "build_user_grades_chart",
+    "crosshair",
+    "max",
+    "labels",
+    "format",
+    "user_grades_chart_yaxis",
+    "itemname",
+    "position",
+    "item",
+    "gradeitems",
+    "header",
+    "footer",
+    "user_grades_chart_view_activity",
+    "body",
+    "gradecount",
+    "user_grades_chart_tooltip_no_graded",
+    "get_user_grades_tooltip",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "itemmodule",
+    "coursemoduleid",
+    "window",
+    "open",
+    "sessions_data",
+    "time_data",
+    "sumtime",
+    "sumsessions",
+    "time",
+    "timestamp",
+    "session",
+    "start",
+    "duration",
+    "sessions_evolution_chart_legend1",
+    "sessions_evolution_chart_legend2",
+    "course_grades",
+    "user_grades",
+    "user_grade",
+    "user_name",
+    "firstname",
+    "finalgrade",
+    "grademax",
+    "average_percentage",
+    "user_grades_chart_legend",
+    "dat",
+    "weekday",
+    "monthday",
+    "month",
+    "tz",
+    "zone",
+    "day",
+    "date",
+    "Intl",
+    "DateTimeFormat",
+    "resolvedOptions",
+    "timeZone",
+    "Date",
+    "getDay",
+    "getDate",
+    "getMonth",
+    "getHours",
+    "getMinutes",
+    "getSeconds",
+    "weekdays",
+    "shortMonths",
+    "dimension",
+    "isY",
+    "axis",
+    "sessions_suffix",
+    "sessions_prefix",
+    "time_prefix",
+    "colorIndex",
+    "color",
+    "convert_time",
+    "serie_name",
+    "average",
+    "isInt",
+    "toFixed",
+    "module",
+    "interactions",
+    "user_cm",
+    "id",
+    "get_picture_url",
+    "get_user_fullname",
+    "lastname",
+    "get_username",
+    "username",
+    "see_profile",
+    "get_progress_percentage",
+    "progress_percentage",
+    "get_progress_message",
+    "finished_label",
+    "finisheds_label",
+    "of_conector",
+    "h",
+    "hours_short",
+    "m",
+    "minutes_short",
+    "s",
+    "seconds_short",
+    "hours",
+    "Math",
+    "floor",
+    "minutes",
+    "seconds",
+    "get_student_grade",
+    "grade",
+    "coursegrade",
+    "maxgrade",
+    "student_grade",
+    "max_grade",
+    "update_modules_dialog",
+    "n",
+    "open_chart_help",
+    "modules_access_help_title",
+    "modules_access_help_description_p1",
+    "modules_access_help_description_p2",
+    "modules_access_help_description_p3",
+    "weeks_session_help_title",
+    "weeks_session_help_description_p1",
+    "weeks_session_help_description_p2",
+    "sessions_evolution_help_title",
+    "sessions_evolution_help_description_p1",
+    "sessions_evolution_help_description_p2",
+    "sessions_evolution_help_description_p3",
+    "user_grades_help_title",
+    "user_grades_help_description_p1",
+    "user_grades_help_description_p2",
+    "user_grades_help_description_p3",
+    "length",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/momenttimezone\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartstatic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/modulesform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, MomentTimezone, Pagination, ChartStatic, PageHeader, ModulesForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartStatic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('modulesform', ModulesForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#student\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        modules_dialog: false,\r\n                        errors : [],\r\n\r\n                        indicators: content.indicators,\r\n                        modules_access_colors: content.modules_access_colors,\r\n                        sessions_evolution_colors: content.sessions_evolution_colors,\r\n                        user_grades_colors: content.user_grades_colors,\r\n                        user: content.indicators.user,\r\n                        weeks_sessions: content.indicators.sessions,\r\n                        sessions_evolution_data: [],\r\n                        user_grades_categories: [],\r\n                        user_grades_data: [],\r\n                        course_grades_data: [],\r\n                        selected_sections: [],\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    this.set_modules_in_sections();\r\n                    this.calculate_sessions_evolution();\r\n                    this.calculate_user_grades()\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#student\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    set_modules_in_sections() {\r\n                        let sectionsMap = new Map();\r\n                        let sectionid = 0;\r\n                        this.indicators.cms.forEach(cm => {\r\n                            sectionid = Number(cm.section);\r\n                            if (!sectionsMap.has(sectionid)) {\r\n                                sectionsMap.set(sectionid, [cm]);\r\n                            } else {\r\n                                sectionsMap.get(sectionid).push(cm);\r\n                            }\r\n                        });\r\n                        this.indicators.sections.forEach(section => {\r\n                            sectionid = Number(section.sectionid);\r\n                            section.sectionid = sectionid;\r\n                            section.modules = (sectionsMap.has(sectionid)) ? sectionsMap.get(sectionid) : [];\r\n                        });\r\n                    },\r\n\r\n                    build_modules_access_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.modules_access_colors,\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            title: {\r\n                                enabled: true,\r\n                                text: this.strings.modules_amount,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            formatter: function () {\r\n                                let module_text = (this.y == 1) ? vue.strings.module_label : vue.strings.modules_label;\r\n                                return '<b>' + this.points[0].key + '</b>: ' + this.y + ' ' + module_text + '<br/>'\r\n                                    + '<i>'+ vue.strings.modules_details + '<i/>';\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.open_modules_modal(this.x);\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        },\r\n                        chart.legend = {\r\n                                enabled: false\r\n                            };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: [\r\n                                {name: this.strings.modules_access_chart_series_viewed, y: this.user.cms.viewed},\r\n                                {name: this.strings.modules_access_chart_series_complete, y: this.user.cms.complete},\r\n                                {name: this.strings.modules_access_chart_series_total, y: this.user.cms.total}\r\n                            ]\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_weeks_session_chart() {\r\n                        let chart = new Object();\r\n                        chart.title = {text: null};\r\n                        chart.chart = {\r\n                            type: 'heatmap',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.strings.weeks,\r\n                        };\r\n                        chart.yAxis = {\r\n                            categories: this.weeks_sessions.categories,\r\n                            title: null,\r\n                            reversed: true,\r\n                        };\r\n                        chart.colorAxis = {\r\n                            min: 0,\r\n                            minColor: '#E0E0E0',\r\n                            maxColor: '#118AB2'\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let days = vue.weeks_sessions.weeks[this.point.y][this.point.x] || '';\r\n                                let xCategoryName = vue.get_point_category_name(this.point, 'x');\r\n                                let yCategoryName = vue.get_point_category_name(this.point, 'y');\r\n                                let label = vue.strings.sessions_text;\r\n                                if (this.point.value == 1) {\r\n                                    label = vue.strings.session_text;;\r\n                                }\r\n                                return '<b>' + yCategoryName + ' ' + xCategoryName + '</b>: '\r\n                                    + this.point.value +' ' + label + '<br/>' + days;\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            borderWidth: 2,\r\n                            borderColor: '#FAFAFA',\r\n                            data: this.weeks_sessions.data,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_sessions_evolution_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            zoomType: 'x',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.sessions_evolution_colors,\r\n                        chart.xAxis = {\r\n                            type: 'datetime'\r\n                        };\r\n                        chart.yAxis = [{\r\n                            allowDecimals: false,\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis1 }\r\n                        }, {\r\n                            title: { text: this.strings.sessions_evolution_chart_xaxis2 },\r\n                            opposite: true\r\n                        }];\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let date_label = vue.calculate_timezone_date_string(this.x);\r\n                                let text1 = (this.points[0]) ? vue.get_sessions_evolution_tooltip(this.points[0]) : '';\r\n                                let text2 = (this.points[1]) ? vue.get_sessions_evolution_tooltip(this.points[1]) : '';\r\n                                return `<small>${date_label}</small><br/>${text1}${text2}`;\r\n                            }\r\n                        };\r\n                        chart.series = this.sessions_evolution_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_user_grades_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.user_grades_colors,\r\n                        chart.xAxis = {\r\n                            crosshair: true,\r\n                            categories: this.user_grades_categories,\r\n                        };\r\n                        chart.yAxis = {\r\n                            allowDecimals: false,\r\n                            max: 100,\r\n                            labels: {\r\n                                format: '{value} %',\r\n                            },\r\n                            title: { text: this.strings.user_grades_chart_yaxis }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            formatter: function () {\r\n                                let itemname = this.x;\r\n                                let position = this.points[0].point.x;\r\n                                let item = vue.user.gradeitems[position];\r\n                                let header = `<small>${itemname}</small><br/>`;\r\n                                let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;\r\n                                let body = '';\r\n                                if (item.gradecount == 0) {\r\n                                    body = vue.strings.user_grades_chart_tooltip_no_graded;\r\n                                } else {\r\n                                    let text1 = (this.points[0]) ? vue.get_user_grades_tooltip(this.points[0], item) : '';\r\n                                    let text2 = (this.points[1]) ? vue.get_user_grades_tooltip(this.points[1], item) : '';\r\n                                    body = `${text1}${text2}${footer}`;\r\n                                }\r\n                                return `${header}${body}`;\r\n                            }\r\n                        };\r\n                        chart.plotOptions = {\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            let position = this.x;\r\n                                            let item = vue.user.gradeitems[position];\r\n                                            let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;\r\n                                            window.open(url, '_blank');\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.series = this.user_grades_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    calculate_sessions_evolution() {\r\n                        let sessions_data = [], time_data = [];\r\n                        let sumtime = 0, sumsessions = 0, time = 0, timestamp = 0;\r\n                        this.user.sessions.forEach(session => {\r\n                            timestamp = Number(session.start) * 1000;\r\n                            time = (Number(session.duration)) / 60;\r\n                            sumtime += time;\r\n                            sumsessions++;\r\n                            sessions_data.push({ x: timestamp, y: sumsessions });\r\n                            time_data.push({ x: timestamp, y: sumtime });\r\n                        });\r\n                        this.sessions_evolution_data = [\r\n                            { name: this.strings.sessions_evolution_chart_legend1, yAxis: 0, data: sessions_data },\r\n                            { name: this.strings.sessions_evolution_chart_legend2, yAxis: 1, data: time_data },\r\n                        ];\r\n                    },\r\n\r\n                    calculate_user_grades() {\r\n                        let categories = [], course_grades = [], user_grades = [];\r\n                        let user_grade = 0, user_name = this.user.firstname;\r\n                        if (this.user.gradeitems) {\r\n                            this.user.gradeitems.forEach(item => {\r\n                                user_grade = (Number(item.finalgrade) * 100) / Number(item.grademax);\r\n                                categories.push(item.itemname);\r\n                                course_grades.push(item.average_percentage);\r\n                                user_grades.push(user_grade);\r\n                            });\r\n                            this.user_grades_data = [\r\n                                { name: user_name, data: user_grades },\r\n                                { name: this.strings.user_grades_chart_legend, data: course_grades },\r\n                            ];\r\n                            this.user_grades_categories = categories;\r\n                        }\r\n                    },\r\n\r\n                    calculate_timezone_date_string(timestamp) {\r\n                        let dat, weekday, monthday, month, time;\r\n                        if (Moment.tz.zone(this.timezone)) {\r\n                            dat = Moment(timestamp).tz(this.timezone);\r\n                            weekday = dat.day();\r\n                            monthday = dat.date();\r\n                            month = dat.month();\r\n                            time = dat.format('HH:mm:ss');\r\n                        } else {\r\n                            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n                            dat =  new Date(timestamp);\r\n                            weekday = dat.getDay();\r\n                            monthday = dat.getDate();\r\n                            month = dat.getMonth();\r\n                            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;\r\n                        }\r\n                        weekday = this.strings.chart.weekdays[weekday];\r\n                        month = this.strings.chart.shortMonths[month];\r\n                        return `${weekday}, ${month} ${monthday}, ${time}`;\r\n                    },\r\n\r\n                    get_point_category_name(point, dimension) {\r\n                        let series = point.series,\r\n                            isY = dimension === 'y',\r\n                            axis = series[isY ? 'yAxis' : 'xAxis'];\r\n                        return axis.categories[point[isY ? 'y' : 'x']];\r\n                    },\r\n\r\n                    get_sessions_evolution_tooltip (point) {\r\n                        let text = '', sessions, sessions_suffix, sessions_prefix, time_prefix, time;\r\n                        if (point.colorIndex == 0) {\r\n                            sessions = point.y;\r\n                            sessions_suffix = (sessions == 1) ? vue.strings.session_text : vue.strings.sessions_text;\r\n                            sessions_prefix = point.series.name;\r\n                            text = `<b style=\"color: ${point.color}\">${sessions_prefix}: </b>\r\n                                     ${sessions} ${sessions_suffix}<br/>`;\r\n                        } else {\r\n                            time_prefix = point.series.name;\r\n                            time = vue.convert_time(point.y * 60);\r\n                            text = `<b style=\"color: ${point.color}\">${time_prefix}: </b>\r\n                                    ${time}<br/>`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_user_grades_tooltip (point, item) {\r\n                        let serie_name = point.series.name, user_grade = 0;\r\n                        let finalgrade = Number(item.finalgrade), average = Number(item.average), grademax = Number(item.grademax);\r\n                        grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);\r\n                        if (point.colorIndex == 0) {\r\n                            user_grade = this.isInt(finalgrade) ? finalgrade : finalgrade.toFixed(2);\r\n                        } else {\r\n                            user_grade = this.isInt(average) ? average : average.toFixed(2);\r\n                        }\r\n                        return `<b style=\"color: ${point.color}\">${serie_name}: </b>\r\n                                     ${user_grade}/${grademax}<br/>`;\r\n                    },\r\n\r\n                    open_modules_modal(){\r\n                        let sections = this.indicators.sections;\r\n                        sections.forEach(section => {\r\n                            section.modules.forEach(module => {\r\n                                module.complete = false;\r\n                                module.viewed = false;\r\n                                module.interactions = 0;\r\n                                let user_cm = this.user.cms.modules[`cm${module.id}`];\r\n                                if (user_cm) {\r\n                                    module.complete = user_cm.complete;\r\n                                    module.viewed = user_cm.viewed;\r\n                                    module.interactions = user_cm.interactions;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        this.modules_dialog = true;\r\n                        this.selected_sections = sections;\r\n                    },\r\n\r\n                    get_picture_url(userid){\r\n                        return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;\r\n                    },\r\n\r\n                    get_user_fullname(){\r\n                        return `${this.user.firstname} ${this.user.lastname}`;\r\n                    },\r\n\r\n                    get_username(){\r\n                        return `@${this.user.username}`;\r\n                    },\r\n\r\n                    see_profile () {\r\n                        let id = this.user.id;\r\n                        let url = M.cfg.wwwroot + '/user/view.php?id='+id+'&course='+vue.courseid;\r\n                        window.open(url);\r\n                    },\r\n\r\n                    get_progress_percentage() {\r\n                        return `${this.user.progress_percentage} %`;\r\n                    },\r\n\r\n                    get_progress_message(){\r\n                        let module_label = this.strings.modules_label;\r\n                        let finished_label = this.strings.finisheds_label;\r\n                        if (this.user.cms.complete == 1) {\r\n                            module_label = this.strings.module_label;\r\n                            finished_label = this.strings.finished_label;\r\n                        }\r\n                        return `${this.user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.user.cms.total}`;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 60; // pasar los minutos a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    get_student_grade() {\r\n                        let grade = this.user.coursegrade;\r\n                        grade.finalgrade = Number(grade.finalgrade);\r\n                        grade.maxgrade = Number(grade.maxgrade);\r\n                        let student_grade = this.isInt(grade.finalgrade) ? grade.finalgrade : grade.finalgrade.toFixed(2);\r\n                        let max_grade = this.isInt(grade.maxgrade) ? grade.maxgrade : grade.maxgrade.toFixed(2);\r\n                        return `${student_grade}/${max_grade}`;\r\n                    },\r\n\r\n                    update_modules_dialog(value) {\r\n                        this.modules_dialog = value;\r\n                    },\r\n\r\n                    isInt(n) {\r\n                        return n % 1 === 0;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"modules_access\") {\r\n                            contents.push({\r\n                                title: this.strings.modules_access_help_title,\r\n                                description: this.strings.modules_access_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.modules_access_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"weeks_session\") {\r\n                            contents.push({\r\n                                title: this.strings.weeks_session_help_title,\r\n                                description: this.strings.weeks_session_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.weeks_session_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"sessions_evolution\") {\r\n                            contents.push({\r\n                                title: this.strings.sessions_evolution_help_title,\r\n                                description: this.strings.sessions_evolution_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.sessions_evolution_help_description_p3,\r\n                            });\r\n                        } else if (chart == \"user_grades\") {\r\n                            contents.push({\r\n                                title: this.strings.user_grades_help_title,\r\n                                description: this.strings.user_grades_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.user_grades_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "student.min.js"
+}
diff --git a/notemyprogress/amd/build/student_planning.js b/notemyprogress/amd/build/student_planning.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f25bda7ae32a99a6f2a177191d437a90cca2f02
--- /dev/null
+++ b/notemyprogress/amd/build/student_planning.js
@@ -0,0 +1,602 @@
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartstatic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/modulesform",
+  "local_notemyprogress/helpdialog",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  Pagination,
+  ChartStatic,
+  PageHeader,
+  ModulesForm,
+  HelpDialog
+) {
+  "use strict";
+
+  function init(content) {
+    // //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartStatic);
+    Vue.component("pageheader", PageHeader);
+    Vue.component("modulesform", ModulesForm);
+    Vue.component("helpdialog", HelpDialog);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#work_sessions",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          loading: false,
+          errors: [],
+          pages: content.pages,
+
+          indicators: content.indicators,
+          resources_access_colors: content.resources_access_colors,
+          inverted_time_colors: content.inverted_time_colors,
+          inverted_time: content.indicators.inverted_time,
+          hours_sessions: content.indicators.hours_sessions,
+          sections: content.indicators.sections,
+          sections_map: null,
+          week_progress: 0,
+          resource_access_categories: [],
+          resource_access_data: [],
+          modules_dialog: false,
+
+          help_dialog: false,
+          help_contents: [],
+        };
+      },
+      beforeMount() {
+        this.create_section_map();
+        this.set_modules_in_sections();
+        this.calculate_resources_access();
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#work_sessions").style.display = "block";
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+        });
+      },
+      methods: {
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
+
+        build_feedback_form() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.inverted_time_colors;
+          chart.xAxis = {
+            type: "category",
+            crosshair: true,
+          };
+          chart.yAxis = {
+            title: {
+              text: this.strings.inverted_time_chart_x_axis,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let category_name = this.points[0].key;
+              let time = vue.convert_time(this.y);
+              return `<b>${category_name}: </b>${time}`;
+            },
+          };
+          chart.legend = {
+            enabled: false,
+          };
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: this.inverted_time.data,
+            },
+          ];
+          return chart;
+        },
+
+        build_inverted_time_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.inverted_time_colors;
+          chart.xAxis = {
+            type: "category",
+            crosshair: true,
+          };
+          chart.yAxis = {
+            title: {
+              text: this.strings.inverted_time_chart_x_axis,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let category_name = this.points[0].key;
+              let time = vue.convert_time(this.y);
+              return `<b>${category_name}: </b>${time}`;
+            },
+          };
+          chart.legend = {
+            enabled: false,
+          };
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: this.inverted_time.data,
+            },
+          ];
+          return chart;
+        },
+
+        build_hours_session_chart() {
+          let chart = new Object();
+          chart.title = { text: null };
+          chart.chart = {
+            type: "heatmap",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.xAxis = {
+            categories: this.strings.days,
+          };
+          chart.yAxis = {
+            categories: this.strings.hours,
+            title: null,
+            reversed: true,
+          };
+          chart.colorAxis = {
+            min: 0,
+            minColor: "#E0E0E0",
+            maxColor: "#118AB2",
+          };
+          chart.legend = {
+            layout: "horizontal",
+            verticalAlign: "bottom",
+          };
+          chart.tooltip = {
+            formatter: function () {
+              let xCategoryName = vue.get_point_category_name(this.point, "x");
+              let yCategoryName = vue.get_point_category_name(this.point, "y");
+              let label = vue.strings.sessions_text;
+              if (this.point.value == 1) {
+                label = vue.strings.session_text;
+              }
+              return (
+                "<b>" +
+                xCategoryName +
+                " " +
+                yCategoryName +
+                "</b>: " +
+                this.point.value +
+                " " +
+                label
+              );
+            },
+          };
+          chart.series = [
+            {
+              borderWidth: 2,
+              borderColor: "#FAFAFA",
+              data: this.hours_sessions,
+            },
+          ];
+          return chart;
+        },
+
+        build_resources_access_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.resources_access_colors;
+          chart.xAxis = {
+            categories: this.resource_access_categories,
+            crosshair: true,
+            title: {
+              text: this.strings.resource_access_x_axis,
+            },
+          };
+          chart.yAxis = {
+            min: 0,
+            title: {
+              text: this.strings.resource_access_y_axis,
+            },
+          };
+          chart.plotOptions = {
+            column: {
+              stacking: "normal",
+            },
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      "resources_access",
+                      "chart_details",
+                      "Provide details informations about the consulted resources"
+                    );
+                    vue.modules_dialog = true;
+                  },
+                },
+              },
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            footerFormat: `<i>${this.strings.modules_details}</i>`,
+          };
+          chart.series = this.resource_access_data;
+          return chart;
+        },
+
+        update_interactions(week) {
+          this.loading = true;
+          this.errors = [];
+          let data = {
+            action: "studentsessions",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: week.weekcode,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                this.inverted_time =
+                  response.data.data.indicators.inverted_time;
+                this.hours_sessions =
+                  response.data.data.indicators.hours_sessions;
+                this.sections = response.data.data.indicators.sections;
+                this.set_modules_in_sections();
+                this.calculate_resources_access();
+              } else {
+                this.error_messages.push(this.strings.error_network);
+              }
+            })
+            .catch((e) => {
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              this.loading = false;
+              vue.addLogsIntoDB(
+                "viewed",
+                "week_" + week.weekcode,
+                "week_section",
+                "Week section that allows you to obtain information on a specific week"
+              );
+              vue.setGraphicsEventListeners();
+            });
+          return this.data;
+        },
+
+        create_section_map() {
+          let sectionsMap = new Map();
+          let sectionid = 0;
+          this.indicators.course_cms.forEach((cm) => {
+            sectionid = Number(cm.section);
+            if (!sectionsMap.has(sectionid)) {
+              sectionsMap.set(sectionid, [cm]);
+            } else {
+              sectionsMap.get(sectionid).push(cm);
+            }
+          });
+          this.sections_map = sectionsMap;
+        },
+
+        set_modules_in_sections() {
+          let sectionid;
+          this.sections.forEach((section) => {
+            sectionid = Number(section.sectionid);
+            section.sectionid = sectionid;
+            section.modules = this.sections_map.has(sectionid)
+              ? this.sections_map.get(sectionid)
+              : [];
+          });
+        },
+
+        calculate_resources_access() {
+          let modulesMap = new Map();
+          let moduleid,
+            user_cm,
+            mod,
+            total_modules = 0,
+            access_modules = 0;
+          let modules_names = this.strings.modules_names;
+          this.sections.forEach((section) => {
+            section.modules.forEach((module) => {
+              !modulesMap.has(module.modname) &&
+                modulesMap.set(module.modname, { complete: 0, pending: 0 });
+              mod = modulesMap.get(module.modname);
+              moduleid = Number(module.id);
+              module.id = moduleid;
+              module.complete = false;
+              module.viewed = false;
+              module.interactions = 0;
+
+              user_cm = this.indicators.user_cms[`cm${module.id}`];
+              if (user_cm) {
+                module.complete = user_cm.complete;
+                module.viewed = user_cm.viewed;
+                module.interactions = user_cm.interactions;
+                user_cm.complete ? mod.complete++ : mod.pending++;
+                user_cm.complete && access_modules++;
+              } else {
+                mod.pending++;
+              }
+              total_modules++;
+            });
+          });
+          let categories = [],
+            complete_data = [],
+            pending_data = [];
+          modulesMap.forEach(function (value, key) {
+            categories.push(modules_names[key] || key);
+            complete_data.push(value.complete);
+            pending_data.push(value.pending);
+          });
+          this.resource_access_categories = categories;
+          this.resource_access_data = [
+            { name: this.strings.resource_access_legend1, data: complete_data },
+            { name: this.strings.resource_access_legend2, data: pending_data },
+          ];
+          this.week_progress =
+            Math.floor((access_modules * 100) / total_modules) || 0;
+        },
+
+        get_progress_percentage() {
+          return `${this.week_progress} %`;
+        },
+
+        get_point_category_name(point, dimension) {
+          let series = point.series,
+            isY = dimension === "y",
+            axis = series[isY ? "yAxis" : "xAxis"];
+          return axis.categories[point[isY ? "y" : "x"]];
+        },
+
+        get_module_icon(modname) {
+          return `${M.cfg.wwwroot}/theme/image.php/boost/${modname}/1/icon`;
+        },
+
+        get_module_url(module) {
+          return `${M.cfg.wwwroot}/mod/${module.modname}/view.php?id=${module.id}`;
+        },
+
+        get_interactions_number(interactions) {
+          let interactions_text =
+            interactions == 1
+              ? this.strings.modules_interaction
+              : this.strings.modules_interactions;
+          return `(${interactions} ${interactions_text})`;
+        },
+
+        convert_time(time) {
+          time *= 3600; // pasar las horas a segundos
+          let h = this.strings.hours_short;
+          let m = this.strings.minutes_short;
+          let s = this.strings.seconds_short;
+          let hours = Math.floor(time / 3600);
+          let minutes = Math.floor((time % 3600) / 60);
+          let seconds = Math.floor(time % 60);
+          let text;
+          if (hours >= 1) {
+            if (minutes >= 1) {
+              text = `${hours}${h} ${minutes}${m}`;
+            } else {
+              text = `${hours}${h}`;
+            }
+          } else if (minutes >= 1) {
+            if (seconds >= 1) {
+              text = `${minutes}${m} ${seconds}${s}`;
+            } else {
+              text = `${minutes}${m}`;
+            }
+          } else {
+            text = `${seconds}${s}`;
+          }
+          return text;
+        },
+
+        update_modules_dialog(value) {
+          this.modules_dialog = value;
+        },
+
+        open_chart_help(chart) {
+          let contents = [];
+          let action = "";
+          let objectType = "";
+          let objectName = "";
+          let objectDescription = "";
+          if (chart == "inverted_time") {
+            contents.push({
+              title: this.strings.inverted_time_help_title,
+              description: this.strings.inverted_time_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.inverted_time_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "invested_time";
+            objectDescription =
+              "Help section that provides information about the invested time chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "hours_session") {
+            contents.push({
+              title: this.strings.hours_session_help_title,
+              description: this.strings.hours_session_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.hours_session_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "hours_session";
+            objectDescription =
+              "Help section that provides information about the hours session chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "resources_access") {
+            contents.push({
+              title: this.strings.resources_access_help_title,
+              description: this.strings.resources_access_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.resources_access_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.resources_access_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "resources_access";
+            objectDescription =
+              "Help section that provides information about the resources access chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          }
+          this.help_contents = contents;
+          if (this.help_contents.length) {
+            this.help_dialog = true;
+          }
+        },
+
+        update_help_dialog(value) {
+          this.help_dialog = value;
+        },
+
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
+
+        setGraphicsEventListeners() {
+          let graphics = document.querySelectorAll(".highcharts-container");
+          if (graphics.length < 1) {
+            setTimeout(vue.setGraphicsEventListeners, 500);
+          } else {
+            graphics[0].id = "inverted_time";
+            graphics[1].id = "hours_session";
+            graphics[2].id = "resources_access";
+            graphics.forEach((graph) => {
+              graph.addEventListener("mouseenter", vue.addLogsViewGraphic);
+            });
+          }
+        },
+
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "inverted_time":
+              action = "viewed";
+              objectName = "invested_time";
+              objectType = "chart";
+              objectDescription = "Bar chart that shows";
+              break;
+            case "hours_session":
+              action = "viewed";
+              objectName = "hours_session";
+              objectType = "chart";
+              objectDescription = "Chart showing";
+              break;
+            case "resources_access":
+              action = "viewed";
+              objectName = "resources_access";
+              objectType = "chart";
+              objectDescription = "Chart showing ";
+              break;
+          }
+          vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
+
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "STUDENT_STUDY_SESSIONS",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
+            })
+            .catch((e) => {});
+        },
+      },
+    });
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/build/student_sessions.min.js.map b/notemyprogress/amd/build/student_sessions.min.js.map
index 54ad42cb58dd02c8a5f2cff4e0e83eaac42cbfba..84fa080c3bdcb806bc6f30863c9745c4ee2cabba 100644
--- a/notemyprogress/amd/build/student_sessions.min.js.map
+++ b/notemyprogress/amd/build/student_sessions.min.js.map
@@ -1 +1,220 @@
-{"version":3,"sources":["../src/student_sessions.js"],"names":["define","Vue","Vuetify","Axios","Moment","Pagination","ChartStatic","PageHeader","ModulesForm","HelpDialog","init","content","use","component","vue","delimiters","el","vuetify","data","strings","groups","userid","courseid","timezone","render_has","profile_render","loading","errors","pages","indicators","resources_access_colors","inverted_time_colors","inverted_time","hours_sessions","sections","sections_map","week_progress","resource_access_categories","resource_access_data","modules_dialog","help_dialog","help_contents","beforeMount","create_section_map","set_modules_in_sections","calculate_resources_access","mounted","document","querySelector","style","display","methods","get_help_content","contents","title","section_help_title","description","section_help_description","build_inverted_time_chart","chart","type","backgroundColor","fontFamily","text","colors","xAxis","crosshair","yAxis","inverted_time_chart_x_axis","tooltip","shared","useHTML","formatter","category_name","points","key","time","convert_time","y","legend","enabled","series","colorByPoint","build_hours_session_chart","categories","days","hours","reversed","colorAxis","min","minColor","maxColor","layout","verticalAlign","xCategoryName","get_point_category_name","point","yCategoryName","label","sessions_text","value","session_text","borderWidth","borderColor","build_resources_access_chart","resource_access_x_axis","resource_access_y_axis","plotOptions","column","stacking","cursor","events","click","footerFormat","modules_details","update_interactions","week","action","weekcode","profile","method","url","M","cfg","wwwroot","params","then","response","status","ok","error_messages","push","error_network","catch","e","console","log","api_error_network","finally","sectionsMap","Map","sectionid","course_cms","forEach","cm","section","has","set","get","modules","modulesMap","moduleid","user_cm","mod","total_modules","access_modules","modules_names","module","modname","complete","pending","id","viewed","interactions","user_cms","complete_data","pending_data","name","resource_access_legend1","resource_access_legend2","Math","floor","get_progress_percentage","dimension","isY","axis","get_module_icon","get_module_url","get_interactions_number","interactions_text","modules_interaction","modules_interactions","h","hours_short","m","minutes_short","s","seconds_short","minutes","seconds","update_modules_dialog","open_chart_help","inverted_time_help_title","inverted_time_help_description_p1","inverted_time_help_description_p2","hours_session_help_title","hours_session_help_description_p1","hours_session_help_description_p2","resources_access_help_title","resources_access_help_description_p1","resources_access_help_description_p2","resources_access_help_description_p3","length","update_help_dialog","get_timezone","information","ss_change_timezone"],"mappings":"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","sourcesContent":["define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartstatic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/modulesform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartStatic, PageHeader, ModulesForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartStatic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('modulesform', ModulesForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#work_sessions\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        indicators: content.indicators,\r\n                        resources_access_colors: content.resources_access_colors,\r\n                        inverted_time_colors: content.inverted_time_colors,\r\n                        inverted_time: content.indicators.inverted_time,\r\n                        hours_sessions: content.indicators.hours_sessions,\r\n                        sections: content.indicators.sections,\r\n                        sections_map: null,\r\n                        week_progress: 0,\r\n                        resource_access_categories: [],\r\n                        resource_access_data: [],\r\n                        modules_dialog: false,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    this.create_section_map();\r\n                    this.set_modules_in_sections();\r\n                    this.calculate_resources_access();\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#work_sessions\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    build_inverted_time_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.inverted_time_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            title: {\r\n                                text: this.strings.inverted_time_chart_x_axis,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared:true,\r\n                            useHTML:true,\r\n                            formatter: function () {\r\n                                let category_name = this.points[0].key;\r\n                                let time = vue.convert_time(this.y);\r\n                                return `<b>${category_name}: </b>${time}`;\r\n                            }\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: this.inverted_time.data\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_hours_session_chart() {\r\n                        let chart = new Object();\r\n                        chart.title = {text: null};\r\n                        chart.chart = {\r\n                            type: 'heatmap',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.strings.days,\r\n                        };\r\n                        chart.yAxis = {\r\n                            categories: this.strings.hours,\r\n                            title: null,\r\n                            reversed: true,\r\n                        };\r\n                        chart.colorAxis = {\r\n                            min: 0,\r\n                            minColor: '#E0E0E0',\r\n                            maxColor: '#118AB2'\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let xCategoryName = vue.get_point_category_name(this.point, 'x');\r\n                                let yCategoryName = vue.get_point_category_name(this.point, 'y');\r\n                                let label = vue.strings.sessions_text;\r\n                                if (this.point.value == 1) {\r\n                                    label = vue.strings.session_text;\r\n                                }\r\n                                return '<b>' + xCategoryName + ' ' + yCategoryName + '</b>: '\r\n                                    + this.point.value +' ' + label;\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            borderWidth: 2,\r\n                            borderColor: '#FAFAFA',\r\n                            data: this.hours_sessions,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_resources_access_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.resources_access_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.resource_access_categories,\r\n                            crosshair: true,\r\n                            title: {\r\n                                text: this.strings.resource_access_x_axis\r\n                            },\r\n                        };\r\n                        chart.yAxis = {\r\n                            min: 0,\r\n                            title: {\r\n                                text: this.strings.resource_access_y_axis\r\n                            },\r\n                        };\r\n                        chart.plotOptions = {\r\n                            column: {\r\n                                stacking: 'normal',\r\n                            },\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.modules_dialog = true;\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            footerFormat: `<i>${this.strings.modules_details}</i>`,\r\n                        };\r\n                        chart.series = this.resource_access_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"studentsessions\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.inverted_time = response.data.data.indicators.inverted_time;\r\n                                this.hours_sessions = response.data.data.indicators.hours_sessions;\r\n                                this.sections = response.data.data.indicators.sections;\r\n                                this.set_modules_in_sections();\r\n                                this.calculate_resources_access();\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            console.log(e);\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    create_section_map() {\r\n                        let sectionsMap = new Map();\r\n                        let sectionid = 0;\r\n                        this.indicators.course_cms.forEach(cm => {\r\n                            sectionid = Number(cm.section);\r\n                            if (!sectionsMap.has(sectionid)) {\r\n                                sectionsMap.set(sectionid, [cm]);\r\n                            } else {\r\n                                sectionsMap.get(sectionid).push(cm);\r\n                            }\r\n                        });\r\n                        this.sections_map = sectionsMap;\r\n                    },\r\n\r\n                    set_modules_in_sections() {\r\n                        let sectionid;\r\n                        this.sections.forEach(section => {\r\n                            sectionid = Number(section.sectionid);\r\n                            section.sectionid = sectionid;\r\n                            section.modules = (this.sections_map.has(sectionid)) ? this.sections_map.get(sectionid) : [];\r\n                        });\r\n                    },\r\n\r\n                    calculate_resources_access() {\r\n                        let modulesMap = new Map();\r\n                        let moduleid, user_cm, mod, total_modules = 0, access_modules = 0;\r\n                        let modules_names = this.strings.modules_names;\r\n                        this.sections.forEach(section => {\r\n                            section.modules.forEach(module => {\r\n                                (!modulesMap.has(module.modname)) && modulesMap.set(module.modname,{complete:0,pending:0});\r\n                                mod = modulesMap.get(module.modname);\r\n                                moduleid = Number(module.id);\r\n                                module.id = moduleid;\r\n                                module.complete = false;\r\n                                module.viewed = false;\r\n                                module.interactions = 0;\r\n\r\n                                user_cm = this.indicators.user_cms[`cm${module.id}`];\r\n                                if (user_cm) {\r\n                                    module.complete = user_cm.complete;\r\n                                    module.viewed = user_cm.viewed;\r\n                                    module.interactions = user_cm.interactions;\r\n                                    (user_cm.complete) ? mod.complete++ : mod.pending++;\r\n                                    (user_cm.complete) && access_modules++;\r\n                                } else {\r\n                                    mod.pending++\r\n                                }\r\n                                total_modules++;\r\n                            });\r\n                        });\r\n                        let categories = [], complete_data = [], pending_data = [];\r\n                        modulesMap.forEach(function(value, key) {\r\n                            categories.push(modules_names[key] || key);\r\n                            complete_data.push(value.complete);\r\n                            pending_data.push(value.pending);\r\n                        });\r\n                        this.resource_access_categories = categories;\r\n                        this.resource_access_data = [\r\n                            { name: this.strings.resource_access_legend1, data: complete_data },\r\n                            { name: this.strings.resource_access_legend2, data: pending_data },\r\n                        ];\r\n                        this.week_progress = Math.floor((access_modules*100)/total_modules) || 0;\r\n                    },\r\n\r\n                    get_progress_percentage() {\r\n                        return `${this.week_progress} %`;\r\n                    },\r\n\r\n                    get_point_category_name(point, dimension) {\r\n                        let series = point.series,\r\n                            isY = dimension === 'y',\r\n                            axis = series[isY ? 'yAxis' : 'xAxis'];\r\n                        return axis.categories[point[isY ? 'y' : 'x']];\r\n                    },\r\n\r\n                    get_module_icon(modname){\r\n                        return `${M.cfg.wwwroot}/theme/image.php/boost/${modname}/1/icon`;\r\n                    },\r\n\r\n                    get_module_url(module){\r\n                        return `${M.cfg.wwwroot}/mod/${module.modname}/view.php?id=${module.id}`;\r\n                    },\r\n\r\n                    get_interactions_number(interactions){\r\n                        let interactions_text = (interactions == 1) ? this.strings.modules_interaction : this.strings.modules_interactions;\r\n                        return `(${interactions} ${interactions_text})`;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 3600; // pasar las horas a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    update_modules_dialog (value) {\r\n                        this.modules_dialog = value;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"inverted_time\") {\r\n                            contents.push({\r\n                                title: this.strings.inverted_time_help_title,\r\n                                description: this.strings.inverted_time_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.inverted_time_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"hours_session\") {\r\n                            contents.push({\r\n                                title: this.strings.hours_session_help_title,\r\n                                description: this.strings.hours_session_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hours_session_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"resources_access\") {\r\n                            contents.push({\r\n                                title: this.strings.resources_access_help_title,\r\n                                description: this.strings.resources_access_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.resources_access_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.resources_access_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"],"file":"student_sessions.min.js"}
\ No newline at end of file
+{
+  "version": 3,
+  "sources": [
+    "../src/student_sessions.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Moment",
+    "Pagination",
+    "ChartStatic",
+    "PageHeader",
+    "ModulesForm",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "loading",
+    "errors",
+    "pages",
+    "indicators",
+    "resources_access_colors",
+    "inverted_time_colors",
+    "inverted_time",
+    "hours_sessions",
+    "sections",
+    "sections_map",
+    "week_progress",
+    "resource_access_categories",
+    "resource_access_data",
+    "modules_dialog",
+    "help_dialog",
+    "help_contents",
+    "beforeMount",
+    "create_section_map",
+    "set_modules_in_sections",
+    "calculate_resources_access",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "build_inverted_time_chart",
+    "chart",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "text",
+    "colors",
+    "xAxis",
+    "crosshair",
+    "yAxis",
+    "inverted_time_chart_x_axis",
+    "tooltip",
+    "shared",
+    "useHTML",
+    "formatter",
+    "category_name",
+    "points",
+    "key",
+    "time",
+    "convert_time",
+    "y",
+    "legend",
+    "enabled",
+    "series",
+    "colorByPoint",
+    "build_hours_session_chart",
+    "categories",
+    "days",
+    "hours",
+    "reversed",
+    "colorAxis",
+    "min",
+    "minColor",
+    "maxColor",
+    "layout",
+    "verticalAlign",
+    "xCategoryName",
+    "get_point_category_name",
+    "point",
+    "yCategoryName",
+    "label",
+    "sessions_text",
+    "value",
+    "session_text",
+    "borderWidth",
+    "borderColor",
+    "build_resources_access_chart",
+    "resource_access_x_axis",
+    "resource_access_y_axis",
+    "plotOptions",
+    "column",
+    "stacking",
+    "cursor",
+    "events",
+    "click",
+    "footerFormat",
+    "modules_details",
+    "update_interactions",
+    "week",
+    "action",
+    "weekcode",
+    "profile",
+    "method",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "params",
+    "then",
+    "response",
+    "status",
+    "ok",
+    "error_messages",
+    "push",
+    "error_network",
+    "catch",
+    "e",
+    "console",
+    "log",
+    "api_error_network",
+    "finally",
+    "sectionsMap",
+    "Map",
+    "sectionid",
+    "course_cms",
+    "forEach",
+    "cm",
+    "section",
+    "has",
+    "set",
+    "get",
+    "modules",
+    "modulesMap",
+    "moduleid",
+    "user_cm",
+    "mod",
+    "total_modules",
+    "access_modules",
+    "modules_names",
+    "module",
+    "modname",
+    "complete",
+    "pending",
+    "id",
+    "viewed",
+    "interactions",
+    "user_cms",
+    "complete_data",
+    "pending_data",
+    "name",
+    "resource_access_legend1",
+    "resource_access_legend2",
+    "Math",
+    "floor",
+    "get_progress_percentage",
+    "dimension",
+    "isY",
+    "axis",
+    "get_module_icon",
+    "get_module_url",
+    "get_interactions_number",
+    "interactions_text",
+    "modules_interaction",
+    "modules_interactions",
+    "h",
+    "hours_short",
+    "m",
+    "minutes_short",
+    "s",
+    "seconds_short",
+    "minutes",
+    "seconds",
+    "update_modules_dialog",
+    "open_chart_help",
+    "inverted_time_help_title",
+    "inverted_time_help_description_p1",
+    "inverted_time_help_description_p2",
+    "hours_session_help_title",
+    "hours_session_help_description_p1",
+    "hours_session_help_description_p2",
+    "resources_access_help_title",
+    "resources_access_help_description_p1",
+    "resources_access_help_description_p2",
+    "resources_access_help_description_p3",
+    "length",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/moment\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartstatic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/modulesform\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Moment, Pagination, ChartStatic, PageHeader, ModulesForm, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartStatic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('modulesform', ModulesForm);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#work_sessions\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n                        loading : false,\r\n                        errors : [],\r\n                        pages : content.pages,\r\n\r\n                        indicators: content.indicators,\r\n                        resources_access_colors: content.resources_access_colors,\r\n                        inverted_time_colors: content.inverted_time_colors,\r\n                        inverted_time: content.indicators.inverted_time,\r\n                        hours_sessions: content.indicators.hours_sessions,\r\n                        sections: content.indicators.sections,\r\n                        sections_map: null,\r\n                        week_progress: 0,\r\n                        resource_access_categories: [],\r\n                        resource_access_data: [],\r\n                        modules_dialog: false,\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    this.create_section_map();\r\n                    this.set_modules_in_sections();\r\n                    this.calculate_resources_access();\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#work_sessions\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    build_inverted_time_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.inverted_time_colors;\r\n                        chart.xAxis = {\r\n                            type: 'category',\r\n                            crosshair: true,\r\n                        };\r\n                        chart.yAxis = {\r\n                            title: {\r\n                                text: this.strings.inverted_time_chart_x_axis,\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared:true,\r\n                            useHTML:true,\r\n                            formatter: function () {\r\n                                let category_name = this.points[0].key;\r\n                                let time = vue.convert_time(this.y);\r\n                                return `<b>${category_name}: </b>${time}`;\r\n                            }\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.series = [{\r\n                            colorByPoint: true,\r\n                            data: this.inverted_time.data\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_hours_session_chart() {\r\n                        let chart = new Object();\r\n                        chart.title = {text: null};\r\n                        chart.chart = {\r\n                            type: 'heatmap',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.strings.days,\r\n                        };\r\n                        chart.yAxis = {\r\n                            categories: this.strings.hours,\r\n                            title: null,\r\n                            reversed: true,\r\n                        };\r\n                        chart.colorAxis = {\r\n                            min: 0,\r\n                            minColor: '#E0E0E0',\r\n                            maxColor: '#118AB2'\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let xCategoryName = vue.get_point_category_name(this.point, 'x');\r\n                                let yCategoryName = vue.get_point_category_name(this.point, 'y');\r\n                                let label = vue.strings.sessions_text;\r\n                                if (this.point.value == 1) {\r\n                                    label = vue.strings.session_text;\r\n                                }\r\n                                return '<b>' + xCategoryName + ' ' + yCategoryName + '</b>: '\r\n                                    + this.point.value +' ' + label;\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            borderWidth: 2,\r\n                            borderColor: '#FAFAFA',\r\n                            data: this.hours_sessions,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    build_resources_access_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'column',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {text: null};\r\n                        chart.colors = this.resources_access_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.resource_access_categories,\r\n                            crosshair: true,\r\n                            title: {\r\n                                text: this.strings.resource_access_x_axis\r\n                            },\r\n                        };\r\n                        chart.yAxis = {\r\n                            min: 0,\r\n                            title: {\r\n                                text: this.strings.resource_access_y_axis\r\n                            },\r\n                        };\r\n                        chart.plotOptions = {\r\n                            column: {\r\n                                stacking: 'normal',\r\n                            },\r\n                            series: {\r\n                                cursor: 'pointer',\r\n                                point: {\r\n                                    events: {\r\n                                        click: function () {\r\n                                            vue.modules_dialog = true;\r\n                                        }\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n                        chart.tooltip = {\r\n                            shared: true,\r\n                            useHTML: true,\r\n                            footerFormat: `<i>${this.strings.modules_details}</i>`,\r\n                        };\r\n                        chart.series = this.resource_access_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    update_interactions(week){\r\n                        this.loading = true;\r\n                        this.errors = [];\r\n                        let data = {\r\n                            action : \"studentsessions\",\r\n                            userid : this.userid,\r\n                            courseid : this.courseid,\r\n                            weekcode : week.weekcode,\r\n                            profile : this.render_has,\r\n                        }\r\n                        Axios({\r\n                            method:'get',\r\n                            url: M.cfg.wwwroot + \"/local/notemyprogress/ajax.php\",\r\n                            params : data,\r\n                        }).then((response) => {\r\n                            if (response.status == 200 && response.data.ok) {\r\n                                this.inverted_time = response.data.data.indicators.inverted_time;\r\n                                this.hours_sessions = response.data.data.indicators.hours_sessions;\r\n                                this.sections = response.data.data.indicators.sections;\r\n                                this.set_modules_in_sections();\r\n                                this.calculate_resources_access();\r\n                            } else {\r\n                                this.error_messages.push(this.strings.error_network);\r\n                            }\r\n                        }).catch((e) => {\r\n                            //console.log(e);\r\n                            this.errors.push(this.strings.api_error_network);\r\n                        }).finally(() => {\r\n                            this.loading = false;\r\n                        });\r\n                        return this.data;\r\n                    },\r\n\r\n                    create_section_map() {\r\n                        let sectionsMap = new Map();\r\n                        let sectionid = 0;\r\n                        this.indicators.course_cms.forEach(cm => {\r\n                            sectionid = Number(cm.section);\r\n                            if (!sectionsMap.has(sectionid)) {\r\n                                sectionsMap.set(sectionid, [cm]);\r\n                            } else {\r\n                                sectionsMap.get(sectionid).push(cm);\r\n                            }\r\n                        });\r\n                        this.sections_map = sectionsMap;\r\n                    },\r\n\r\n                    set_modules_in_sections() {\r\n                        let sectionid;\r\n                        this.sections.forEach(section => {\r\n                            sectionid = Number(section.sectionid);\r\n                            section.sectionid = sectionid;\r\n                            section.modules = (this.sections_map.has(sectionid)) ? this.sections_map.get(sectionid) : [];\r\n                        });\r\n                    },\r\n\r\n                    calculate_resources_access() {\r\n                        let modulesMap = new Map();\r\n                        let moduleid, user_cm, mod, total_modules = 0, access_modules = 0;\r\n                        let modules_names = this.strings.modules_names;\r\n                        this.sections.forEach(section => {\r\n                            section.modules.forEach(module => {\r\n                                (!modulesMap.has(module.modname)) && modulesMap.set(module.modname,{complete:0,pending:0});\r\n                                mod = modulesMap.get(module.modname);\r\n                                moduleid = Number(module.id);\r\n                                module.id = moduleid;\r\n                                module.complete = false;\r\n                                module.viewed = false;\r\n                                module.interactions = 0;\r\n\r\n                                user_cm = this.indicators.user_cms[`cm${module.id}`];\r\n                                if (user_cm) {\r\n                                    module.complete = user_cm.complete;\r\n                                    module.viewed = user_cm.viewed;\r\n                                    module.interactions = user_cm.interactions;\r\n                                    (user_cm.complete) ? mod.complete++ : mod.pending++;\r\n                                    (user_cm.complete) && access_modules++;\r\n                                } else {\r\n                                    mod.pending++\r\n                                }\r\n                                total_modules++;\r\n                            });\r\n                        });\r\n                        let categories = [], complete_data = [], pending_data = [];\r\n                        modulesMap.forEach(function(value, key) {\r\n                            categories.push(modules_names[key] || key);\r\n                            complete_data.push(value.complete);\r\n                            pending_data.push(value.pending);\r\n                        });\r\n                        this.resource_access_categories = categories;\r\n                        this.resource_access_data = [\r\n                            { name: this.strings.resource_access_legend1, data: complete_data },\r\n                            { name: this.strings.resource_access_legend2, data: pending_data },\r\n                        ];\r\n                        this.week_progress = Math.floor((access_modules*100)/total_modules) || 0;\r\n                    },\r\n\r\n                    get_progress_percentage() {\r\n                        return `${this.week_progress} %`;\r\n                    },\r\n\r\n                    get_point_category_name(point, dimension) {\r\n                        let series = point.series,\r\n                            isY = dimension === 'y',\r\n                            axis = series[isY ? 'yAxis' : 'xAxis'];\r\n                        return axis.categories[point[isY ? 'y' : 'x']];\r\n                    },\r\n\r\n                    get_module_icon(modname){\r\n                        return `${M.cfg.wwwroot}/theme/image.php/boost/${modname}/1/icon`;\r\n                    },\r\n\r\n                    get_module_url(module){\r\n                        return `${M.cfg.wwwroot}/mod/${module.modname}/view.php?id=${module.id}`;\r\n                    },\r\n\r\n                    get_interactions_number(interactions){\r\n                        let interactions_text = (interactions == 1) ? this.strings.modules_interaction : this.strings.modules_interactions;\r\n                        return `(${interactions} ${interactions_text})`;\r\n                    },\r\n\r\n                    convert_time(time) {\r\n                        time *= 3600; // pasar las horas a segundos\r\n                        let h = this.strings.hours_short;\r\n                        let m = this.strings.minutes_short;\r\n                        let s = this.strings.seconds_short;\r\n                        let hours = Math.floor(time / 3600);\r\n                        let minutes = Math.floor((time % 3600) / 60);\r\n                        let seconds = Math.floor(time % 60);\r\n                        let text;\r\n                        if (hours >= 1) {\r\n                            if (minutes >= 1) {\r\n                                text = `${hours}${h} ${minutes}${m}`;\r\n                            } else {\r\n                                text = `${hours}${h}`;\r\n                            }\r\n                        } else if ((minutes >= 1)) {\r\n                            if (seconds >= 1) {\r\n                                text = `${minutes}${m} ${seconds}${s}`;\r\n                            } else {\r\n                                text = `${minutes}${m}`;\r\n                            }\r\n                        } else {\r\n                            text = `${seconds}${s}`;\r\n                        }\r\n                        return text;\r\n                    },\r\n\r\n                    update_modules_dialog (value) {\r\n                        this.modules_dialog = value;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"inverted_time\") {\r\n                            contents.push({\r\n                                title: this.strings.inverted_time_help_title,\r\n                                description: this.strings.inverted_time_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.inverted_time_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"hours_session\") {\r\n                            contents.push({\r\n                                title: this.strings.hours_session_help_title,\r\n                                description: this.strings.hours_session_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.hours_session_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"resources_access\") {\r\n                            contents.push({\r\n                                title: this.strings.resources_access_help_title,\r\n                                description: this.strings.resources_access_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.resources_access_help_description_p2,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.resources_access_help_description_p3,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "student_sessions.min.js"
+}
diff --git a/notemyprogress/amd/build/teacher.js b/notemyprogress/amd/build/teacher.js
index 59e8e40d2f52b57d58a94dc6da977a237f792f03..3b811743617fd36bc6a18e23c33c159cc6429d41 100644
--- a/notemyprogress/amd/build/teacher.js
+++ b/notemyprogress/amd/build/teacher.js
@@ -109,7 +109,7 @@ define([
             enabled: false,
           };
           chart.series = this.week_resources_data;
-          console.log(chart.series);
+          // console.log(chart.series);
           return chart;
         },
 
diff --git a/notemyprogress/amd/build/teacher.min.js.map b/notemyprogress/amd/build/teacher.min.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..60efc574ad5964138572509d3cad13a098e17db2
--- /dev/null
+++ b/notemyprogress/amd/build/teacher.min.js.map
@@ -0,0 +1,160 @@
+{
+  "version": 3,
+  "sources": [
+    "../src/teacher.js"
+  ],
+  "names": [
+    "define",
+    "Vue",
+    "Vuetify",
+    "Axios",
+    "Pagination",
+    "ChartStatic",
+    "PageHeader",
+    "HelpDialog",
+    "init",
+    "content",
+    "use",
+    "component",
+    "vue",
+    "delimiters",
+    "el",
+    "vuetify",
+    "data",
+    "strings",
+    "groups",
+    "userid",
+    "courseid",
+    "timezone",
+    "render_has",
+    "profile_render",
+    "indicators",
+    "week_resources_colors",
+    "search",
+    "week_resources_categories",
+    "week_resources_data",
+    "help_dialog",
+    "help_contents",
+    "beforeMount",
+    "calculate_week_resources",
+    "mounted",
+    "document",
+    "querySelector",
+    "style",
+    "display",
+    "methods",
+    "get_help_content",
+    "contents",
+    "title",
+    "section_help_title",
+    "description",
+    "section_help_description",
+    "get_course_grade",
+    "grade",
+    "course",
+    "grademax",
+    "isInt",
+    "toFixed",
+    "categories",
+    "week_name",
+    "weeks",
+    "forEach",
+    "week",
+    "name",
+    "position",
+    "push",
+    "cms",
+    "capitalizeFirstLetter",
+    "teacher_indicators_modules",
+    "build_week_resources_chart",
+    "chart",
+    "type",
+    "backgroundColor",
+    "fontFamily",
+    "text",
+    "colors",
+    "xAxis",
+    "yAxis",
+    "min",
+    "teacher_indicators_week_resources_yaxis_title",
+    "legend",
+    "enabled",
+    "series",
+    "build_weeks_sessions_chart",
+    "sessions",
+    "reversed",
+    "colorAxis",
+    "minColor",
+    "maxColor",
+    "layout",
+    "verticalAlign",
+    "tooltip",
+    "formatter",
+    "days",
+    "point",
+    "y",
+    "x",
+    "xCategoryName",
+    "get_point_category_name",
+    "yCategoryName",
+    "label",
+    "teacher_indicators_sessions",
+    "value",
+    "teacher_indicators_session",
+    "borderWidth",
+    "borderColor",
+    "table_headers",
+    "headers",
+    "align",
+    "sortable",
+    "thead_name",
+    "thead_lastname",
+    "thead_email",
+    "thead_progress",
+    "thead_sessions",
+    "thead_time",
+    "get_picture_url",
+    "url",
+    "M",
+    "cfg",
+    "wwwroot",
+    "get_percentage_progress",
+    "get_progress_tooltip",
+    "item",
+    "module_label",
+    "finished_label",
+    "teacher_indicators_finished",
+    "complete",
+    "teacher_indicators_module",
+    "teacher_indicators_finalized",
+    "of_conector",
+    "total",
+    "dimension",
+    "isY",
+    "axis",
+    "string",
+    "charAt",
+    "toUpperCase",
+    "slice",
+    "n",
+    "open_chart_help",
+    "week_resources_help_title",
+    "week_resources_help_description_p1",
+    "week_resources_help_description_p2",
+    "weeks_sessions_help_title",
+    "week_sessions_help_description_p1",
+    "week_sessions_help_description_p2",
+    "progress_table_help_title",
+    "progress_table_help_description",
+    "length",
+    "update_help_dialog",
+    "get_timezone",
+    "information",
+    "ss_change_timezone"
+  ],
+  "mappings": "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",
+  "sourcesContent": [
+    "define([\"local_notemyprogress/vue\",\r\n        \"local_notemyprogress/vuetify\",\r\n        \"local_notemyprogress/axios\",\r\n        \"local_notemyprogress/pagination\",\r\n        \"local_notemyprogress/chartstatic\",\r\n        \"local_notemyprogress/pageheader\",\r\n        \"local_notemyprogress/helpdialog\",\r\n    ],\r\n    function(Vue, Vuetify, Axios, Pagination, ChartStatic, PageHeader, HelpDialog) {\r\n        \"use strict\";\r\n\r\n        function init(content) {\r\n            // //console.log(content);\r\n            Vue.use(Vuetify);\r\n            Vue.component('pagination', Pagination);\r\n            Vue.component('chart', ChartStatic);\r\n            Vue.component('pageheader', PageHeader);\r\n            Vue.component('helpdialog', HelpDialog);\r\n            let vue = new Vue({\r\n                delimiters: [\"[[\", \"]]\"],\r\n                el: \"#teacher\",\r\n                vuetify: new Vuetify(),\r\n                data() {\r\n                    return {\r\n                        strings : content.strings,\r\n                        groups : content.groups,\r\n                        userid : content.userid,\r\n                        courseid : content.courseid,\r\n                        timezone : content.timezone,\r\n                        render_has : content.profile_render,\r\n\r\n                        indicators: content.indicators,\r\n                        week_resources_colors: content.week_resources_colors,\r\n                        search: null,\r\n                        week_resources_categories: [],\r\n                        week_resources_data: [],\r\n\r\n                        help_dialog: false,\r\n                        help_contents: [],\r\n                    }\r\n                },\r\n                beforeMount(){\r\n                    this.calculate_week_resources();\r\n                },\r\n                mounted(){\r\n                    document.querySelector(\"#sessions-loader\").style.display = \"none\";\r\n                    document.querySelector(\"#teacher\").style.display = \"block\";\r\n                },\r\n                methods : {\r\n                    get_help_content(){\r\n                        let contents = [];\r\n                        contents.push({\r\n                            title: this.strings.section_help_title,\r\n                            description: this.strings.section_help_description,\r\n                        });\r\n                        return contents;\r\n                    },\r\n\r\n                    get_course_grade(){\r\n                        let grade = Number(this.indicators.course.grademax);\r\n                        return (this.isInt(grade)) ? grade : grade.toFixed(2);\r\n                    },\r\n\r\n                    calculate_week_resources() {\r\n                        let categories = [], data = [];\r\n                        let week_name;\r\n                        this.indicators.weeks.forEach(week => {\r\n                            week_name = `${week.name} ${(week.position+1)}`;\r\n                            categories.push(week_name);\r\n                            data.push(week.cms);\r\n                        });\r\n                        let name = this.capitalizeFirstLetter(this.strings.teacher_indicators_modules);\r\n                        this.week_resources_categories = categories;\r\n                        this.week_resources_data = [{ name, data}];\r\n                    },\r\n\r\n                    build_week_resources_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'bar',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.colors = this.week_resources_colors;\r\n                        chart.xAxis = {\r\n                            categories: this.week_resources_categories\r\n                        };\r\n                        chart.yAxis = {\r\n                            min: 0,\r\n                                title: {\r\n                                text: this.strings.teacher_indicators_week_resources_yaxis_title\r\n                            }\r\n                        };\r\n                        chart.legend = {\r\n                            enabled: false\r\n                        };\r\n                        chart.series = this.week_resources_data;\r\n                        return chart;\r\n                    },\r\n\r\n                    build_weeks_sessions_chart() {\r\n                        let chart = new Object();\r\n                        chart.chart = {\r\n                            type: 'heatmap',\r\n                            backgroundColor: null,\r\n                            style: {fontFamily: 'poppins'},\r\n                        };\r\n                        chart.title = {\r\n                            text: null,\r\n                        };\r\n                        chart.xAxis = {\r\n                            categories: this.strings.weeks,\r\n                        };\r\n                        chart.yAxis = {\r\n                            categories: this.indicators.sessions.categories,\r\n                            title: null,\r\n                            reversed: true,\r\n                        };\r\n                        chart.colorAxis = {\r\n                            min: 0,\r\n                            minColor: '#E0E0E0',\r\n                            maxColor: '#118AB2'\r\n                        };\r\n                        chart.legend = {\r\n                            layout: 'horizontal',\r\n                            verticalAlign: 'bottom',\r\n                        };\r\n                        chart.tooltip = {\r\n                            formatter: function () {\r\n                                let days = vue.indicators.sessions.weeks[this.point.y][this.point.x] || '';\r\n                                let xCategoryName = vue.get_point_category_name(this.point, 'x');\r\n                                let yCategoryName = vue.get_point_category_name(this.point, 'y');\r\n                                let label = vue.strings.teacher_indicators_sessions;\r\n                                if (this.point.value == 1) {\r\n                                    label = vue.strings.teacher_indicators_session;\r\n                                }\r\n                                return '<b>' + yCategoryName + ' ' + xCategoryName + '</b>: '\r\n                                    + this.point.value +' ' + label + '<br/>' + days;\r\n                            }\r\n                        };\r\n                        chart.series = [{\r\n                            borderWidth: 2,\r\n                            borderColor: '#FAFAFA',\r\n                            data: this.indicators.sessions.data,\r\n                        }];\r\n                        return chart;\r\n                    },\r\n\r\n                    table_headers(){\r\n                        let headers = [\r\n                            { text: '', value : 'id', align : 'center', sortable : false},\r\n                            { text: this.strings.thead_name , value : 'firstname'},\r\n                            { text: this.strings.thead_lastname , value : 'lastname'},\r\n                            { text: this.strings.thead_email , value : 'email'},\r\n                            { text: this.strings.thead_progress , value : 'progress_percentage',  align : 'center'},\r\n                            { text: this.strings.thead_sessions , value : 'sessions_number',  align : 'center'},\r\n                            { text: this.strings.thead_time , value : 'inverted_time', align : 'center'},\r\n                        ];\r\n                        return headers;\r\n                    },\r\n\r\n                    get_picture_url(userid){\r\n                        let url = `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;\r\n                        return url;\r\n                    },\r\n\r\n                    get_percentage_progress(value){\r\n                        return `${value} %`;\r\n                    },\r\n\r\n                    get_progress_tooltip(item){\r\n                        let module_label = this.strings.teacher_indicators_modules;\r\n                        let finished_label = this.strings.teacher_indicators_finished;\r\n                        if (item.cms.complete == 1) {\r\n                            module_label = this.strings.teacher_indicators_module;\r\n                            finished_label = this.strings.teacher_indicators_finalized;\r\n                        }\r\n                        return `${item.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${item.cms.total}`;\r\n                    },\r\n\r\n                    get_point_category_name(point, dimension) {\r\n                        let series = point.series,\r\n                            isY = dimension === 'y',\r\n                            axis = series[isY ? 'yAxis' : 'xAxis'];\r\n                        return axis.categories[point[isY ? 'y' : 'x']];\r\n                    },\r\n\r\n                    capitalizeFirstLetter(string) {\r\n                        return string.charAt(0).toUpperCase() + string.slice(1);\r\n                    },\r\n\r\n                    isInt(n) {\r\n                        return n % 1 === 0;\r\n                    },\r\n\r\n                    open_chart_help(chart) {\r\n                        let contents = [];\r\n                        if (chart == \"week_resources\") {\r\n                            contents.push({\r\n                                title: this.strings.week_resources_help_title,\r\n                                description: this.strings.week_resources_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.week_resources_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"weeks_sessions\") {\r\n                            contents.push({\r\n                                title: this.strings.weeks_sessions_help_title,\r\n                                description: this.strings.week_sessions_help_description_p1,\r\n                            });\r\n                            contents.push({\r\n                                description: this.strings.week_sessions_help_description_p2,\r\n                            });\r\n                        } else if (chart == \"progress_table\") {\r\n                            contents.push({\r\n                                title: this.strings.progress_table_help_title,\r\n                                description: this.strings.progress_table_help_description,\r\n                            });\r\n                        }\r\n                        this.help_contents = contents;\r\n                        if (this.help_contents.length) {\r\n                            this.help_dialog = true;\r\n                        }\r\n                    },\r\n\r\n                    update_help_dialog (value) {\r\n                        this.help_dialog = value;\r\n                    },\r\n\r\n                    get_timezone(){\r\n                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`\r\n                        return information;\r\n                    },\r\n\r\n                }\r\n            })\r\n        }\r\n\r\n        return {\r\n            init : init\r\n        };\r\n    });"
+  ],
+  "file": "teacher.min.js"
+}
diff --git a/notemyprogress/amd/src/alertify.js b/notemyprogress/amd/src/alertify.js
index bb9d010de7ea232c7655540fdf33805654c64755..435753c5bc478069a024ffd4111efaa62be37149 100644
--- a/notemyprogress/amd/src/alertify.js
+++ b/notemyprogress/amd/src/alertify.js
@@ -1,4 +1,6 @@
-define(['local_notemyprogress/config', 'alertify'], function(unused, alertify) {
-        return alertify;
-    }
-);
\ No newline at end of file
+define(["local_notemyprogress/config", "alertify"], function (
+  unused,
+  alertify
+) {
+  return alertify;
+});
diff --git a/notemyprogress/amd/src/assignments.js b/notemyprogress/amd/src/assignments.js
index 279fbf1706881dc61e873a6c600b656f2d4dcf5f..9211033aaf480138d70235d6e06fcb2f051a8ce0 100644
--- a/notemyprogress/amd/src/assignments.js
+++ b/notemyprogress/amd/src/assignments.js
@@ -1,432 +1,489 @@
-define(["local_notemyprogress/vue",
-        "local_notemyprogress/vuetify",
-        "local_notemyprogress/axios",
-        "local_notemyprogress/moment",
-        "local_notemyprogress/pagination",
-        "local_notemyprogress/chartdynamic",
-        "local_notemyprogress/pageheader",
-        "local_notemyprogress/emailform",
-        "local_notemyprogress/helpdialog",
-    ],
-    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, EmailForm, HelpDialog) {
-        "use strict";
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartdynamic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/emailform",
+  "local_notemyprogress/helpdialog",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  Pagination,
+  ChartDynamic,
+  PageHeader,
+  EmailForm,
+  HelpDialog
+) {
+  "use strict";
 
-        function init(content) {
-            // console.log(content);
-            Vue.use(Vuetify)
-            Vue.component('pagination', Pagination);
-            Vue.component('chart', ChartDynamic);
-            Vue.component('pageheader', PageHeader);
-            Vue.component('emailform', EmailForm);
-            Vue.component('helpdialog', HelpDialog);
-            let vue = new Vue({
-                delimiters: ["[[", "]]"],
-                el: "#submissions",
-                vuetify: new Vuetify(),
-                data() {
-                    return {
-                        dialog : false,
-                        selected_users : [],
-                        modulename : "",
-                        moduleid : false,
-                        strings : content.strings,
-                        groups : content.groups,
-                        userid : content.userid,
-                        courseid : content.courseid,
-                        timezone : content.timezone,
-                        render_has : content.profile_render,
-                        scriptname: content.scriptname,
-                        loading : false,
-                        errors : [],
-                        pages : content.pages,
-                        submissions: content.submissions,
-                        email_strings: content.strings.email_strings,
+  function init(content) {
+    // //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartDynamic);
+    Vue.component("pageheader", PageHeader);
+    Vue.component("emailform", EmailForm);
+    Vue.component("helpdialog", HelpDialog);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#submissions",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          dialog: false,
+          selected_users: [],
+          modulename: "",
+          moduleid: false,
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          scriptname: content.scriptname,
+          loading: false,
+          errors: [],
+          pages: content.pages,
+          submissions: content.submissions,
+          email_strings: content.strings.email_strings,
 
-                        access: content.access,
-                        assigns_submissions_colors: content.assigns_submissions_colors,
-                        access_content_colors: content.access_content_colors,
-                        access_chart_categories: [],
-                        access_chart_series: [],
-                        access_chart_users: [],
+          access: content.access,
+          assigns_submissions_colors: content.assigns_submissions_colors,
+          access_content_colors: content.access_content_colors,
+          access_chart_categories: [],
+          access_chart_series: [],
+          access_chart_users: [],
 
-                        help_dialog: false,
-                        help_contents: [],
-                        email_object_name: "",
-                    }
-                },
-                beforeMount(){
-                    this.generate_access_content_data();
-                },
-                mounted(){
-                    document.querySelector("#sessions-loader").style.display = "none";
-                    document.querySelector("#submissions").style.display = "block";
-                    setTimeout(function() {
-                        vue.setGraphicsEventListeners();
-                    }, 1000);
-                },
-                methods : {
-                    get_help_content(){
-                        let contents = [];
-                        contents.push({
-                            title: this.strings.section_help_title,
-                            description: this.strings.section_help_description,
-                        });
-                        return contents;
-                    },
-
-                    update_interactions(week){
-                        this.loading = true;
-                        this.errors = [];
-                        let data = {
-                            action : "assignments",
-                            userid : this.userid,
-                            courseid : this.courseid,
-                            weekcode : week.weekcode,
-                            profile : this.render_has,
-                        }
-                        Axios({
-                            method:'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params : data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                                this.submissions = response.data.data.submissions;
-                                this.access = response.data.data.access;
-                                this.generate_access_content_data();
-                            } else {
-                                this.error_messages.push(this.strings.error_network);
-                            }
-                        }).catch((e) => {
-                            this.errors.push(this.strings.api_error_network);
-                        }).finally(() => {
-                            this.loading = false;
-                            vue.addLogsIntoDB("viewed", "week_"+week.weekcode, "week_section", "Week section that allows you to obtain information on a specific week");
-                            vue.setGraphicsEventListeners();
-                        });
-                        return this.data;
-                    },
+          help_dialog: false,
+          help_contents: [],
+          email_object_name: "",
+        };
+      },
+      beforeMount() {
+        this.generate_access_content_data();
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#submissions").style.display = "block";
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+        }, 1000);
+      },
+      methods: {
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
 
-                    build_assigns_submissions_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'column',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {
-                            text: null,
-                        };
-                        chart.colors = this.assigns_submissions_colors;
-                        chart.xAxis = {
-                            categories: this.submissions.categories,
-                            crosshair: true,
-                        };
-                        chart.yAxis = {
-                            min: 0,
-                            title: {
-                                text: this.strings.assignsubs_chart_yaxis
-                            },
-                            allowDecimals: false,
-                        };
-                        chart.tooltip = {
-                            formatter: function () {
-                                let label = this.x.split('</b>');
-                                label = label[0] || '';
-                                label = label.split('<b>');
-                                label = label[1] || '';
-                                let serie_name = this.series.name;
-                                let value = this.y;
-                                let students_label = vue.strings.students_text;
-                                let send_mail = vue.strings.send_mail;
-                                if (value == 1) {
-                                    students_label = vue.strings.student_text;
-                                }
-                                let text = '<b>' + label +'</b><br/>' + '<b>' + serie_name +': </b>' +
-                                            value + ' ' + students_label + '<br/>' + send_mail;
-                                return text;
-                            }
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                cursor: 'pointer',
-                                    point: {
-                                    events: {
-                                        click: function () {
-                                            vue.email_object_name = "assigns_submissions";
-                                            let serie_name = this.category.split('</b>');
-                                            serie_name = serie_name[0] || '';
-                                            serie_name = serie_name.split('<b>');
-                                            serie_name = serie_name[1] || '';
-                                            vue.email_strings.subject = vue.email_strings.subject_prefix+" - "+serie_name;
+        update_interactions(week) {
+          this.loading = true;
+          this.errors = [];
+          let data = {
+            action: "assignments",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: week.weekcode,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                this.submissions = response.data.data.submissions;
+                this.access = response.data.data.access;
+                this.generate_access_content_data();
+              } else {
+                this.error_messages.push(this.strings.error_network);
+              }
+            })
+            .catch((e) => {
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              this.loading = false;
+              vue.addLogsIntoDB(
+                "viewed",
+                "week_" + week.weekcode,
+                "week_section",
+                "Week section that allows you to obtain information on a specific week"
+              );
+              vue.setGraphicsEventListeners();
+            });
+          return this.data;
+        },
 
-                                            let x = this.x;
-                                            let column = this.series.colorIndex;
-                                            vue.dialog = true;
-                                            vue.selected_users = vue.submissions.users[x][column];
-                                            vue.moduleid = vue.submissions.modules[x];
-                                            vue.modulename = "assign";
-                                            vue.scriptname = "test";
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.series = this.submissions.data;
-                        return chart;
-                    },
+        build_assigns_submissions_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = {
+            text: null,
+          };
+          chart.colors = this.assigns_submissions_colors;
+          chart.xAxis = {
+            categories: this.submissions.categories,
+            crosshair: true,
+          };
+          chart.yAxis = {
+            min: 0,
+            title: {
+              text: this.strings.assignsubs_chart_yaxis,
+            },
+            allowDecimals: false,
+          };
+          chart.tooltip = {
+            formatter: function () {
+              let label = this.x.split("</b>");
+              label = label[0] || "";
+              label = label.split("<b>");
+              label = label[1] || "";
+              let serie_name = this.series.name;
+              let value = this.y;
+              let students_label = vue.strings.students_text;
+              let send_mail = vue.strings.send_mail;
+              if (value == 1) {
+                students_label = vue.strings.student_text;
+              }
+              let text =
+                "<b>" +
+                label +
+                "</b><br/>" +
+                "<b>" +
+                serie_name +
+                ": </b>" +
+                value +
+                " " +
+                students_label +
+                "<br/>" +
+                send_mail;
+              return text;
+            },
+          };
+          chart.plotOptions = {
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.email_object_name = "assigns_submissions";
+                    let serie_name = this.category.split("</b>");
+                    serie_name = serie_name[0] || "";
+                    serie_name = serie_name.split("<b>");
+                    serie_name = serie_name[1] || "";
+                    vue.email_strings.subject =
+                      vue.email_strings.subject_prefix + " - " + serie_name;
 
-                    build_access_content_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'bar',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {text: null};
-                        chart.colors = this.access_content_colors;
-                        chart.xAxis = {
-                            categories: this.access_chart_categories,
-                            title: { text: null },
-                            crosshair: true,
-                        };
-                        chart.yAxis = {
-                            min: 0,
-                            title: {
-                                text: this.strings.access_chart_yaxis_label,
-                            },
-                            labels: {
-                                overflow: 'justify'
-                            },
-                            allowDecimals: false,
-                        };
-                        chart.tooltip = {
-                            formatter: function () {
-                                let label = this.x;
-                                let serie_name = this.series.name;
-                                let value = this.y;
-                                let students_label = vue.strings.students_text;
-                                let send_mail = vue.strings.send_mail;
-                                if (value == 1) {
-                                    students_label = vue.strings.student_text;
-                                }
-                                let text = '<b>' + label +'</b><br/>' + '<b>' + serie_name +': </b>' +
-                                    value + ' ' + students_label + '<br/>' + send_mail;
-                                return text;
-                            }
-                        };
-                        chart.plotOptions = {
-                            bar: {
-                                dataLabels: {
-                                    enabled: false
-                                }
-                            },
-                            series: {
-                                cursor: 'pointer',
-                                    point: {
-                                    events: {
-                                        click: function () {
-                                            vue.email_object_name = "access_content";
-                                            let serie_name = this.category;
-                                            vue.email_strings.subject = vue.email_strings.subject_prefix+" - "+serie_name;
-                                            let x = this.x;
-                                            let column = this.series.colorIndex;
-                                            let users = vue.get_users(vue.access_chart_users[x][column]);
-                                            vue.selected_users = users;
-                                            let module = vue.get_moduletype(this.category);
-                                            vue.modulename = module.type;
-                                            vue.moduleid = module.id;
-                                            vue.dialog = true;
-                                            vue.scriptname = "test";
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.series = this.access_chart_series;
-                        return chart;
-                    },
+                    let x = this.x;
+                    let column = this.series.colorIndex;
+                    vue.dialog = true;
+                    vue.selected_users = vue.submissions.users[x][column];
+                    vue.moduleid = vue.submissions.modules[x];
+                    vue.modulename = "assign";
+                    vue.scriptname = "test";
+                  },
+                },
+              },
+            },
+          };
+          chart.series = this.submissions.data;
+          return chart;
+        },
 
-                    update_dialog (value) {
-                        this.dialog = value;
-                    },
+        build_access_content_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.access_content_colors;
+          chart.xAxis = {
+            categories: this.access_chart_categories,
+            title: { text: null },
+            crosshair: true,
+          };
+          chart.yAxis = {
+            min: 0,
+            title: {
+              text: this.strings.access_chart_yaxis_label,
+            },
+            labels: {
+              overflow: "justify",
+            },
+            allowDecimals: false,
+          };
+          chart.tooltip = {
+            formatter: function () {
+              let label = this.x;
+              let serie_name = this.series.name;
+              let value = this.y;
+              let students_label = vue.strings.students_text;
+              let send_mail = vue.strings.send_mail;
+              if (value == 1) {
+                students_label = vue.strings.student_text;
+              }
+              let text =
+                "<b>" +
+                label +
+                "</b><br/>" +
+                "<b>" +
+                serie_name +
+                ": </b>" +
+                value +
+                " " +
+                students_label +
+                "<br/>" +
+                send_mail;
+              return text;
+            },
+          };
+          chart.plotOptions = {
+            bar: {
+              dataLabels: {
+                enabled: false,
+              },
+            },
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.email_object_name = "access_content";
+                    let serie_name = this.category;
+                    vue.email_strings.subject =
+                      vue.email_strings.subject_prefix + " - " + serie_name;
+                    let x = this.x;
+                    let column = this.series.colorIndex;
+                    let users = vue.get_users(
+                      vue.access_chart_users[x][column]
+                    );
+                    vue.selected_users = users;
+                    let module = vue.get_moduletype(this.category);
+                    vue.modulename = module.type;
+                    vue.moduleid = module.id;
+                    vue.dialog = true;
+                    vue.scriptname = "test";
+                  },
+                },
+              },
+            },
+          };
+          chart.series = this.access_chart_series;
+          return chart;
+        },
 
-                    generate_access_content_data() {
-                        let usersIds = [];
-                        this.access.users.forEach(user => {
-                            usersIds.push(Number(user.id));
-                        });
-                        let selected_types_labels = [];
-                        this.access.types.forEach(item => {
-                            if (item.show) {
-                                selected_types_labels.push(item.type);
-                            }
-                        });
-                        let selected_modules = [];
-                        this.access.modules.forEach(module => {
-                            if (selected_types_labels.includes(module.type)) {
-                                selected_modules.push(module);
-                            }
-                        });
-                        let categories = [];
-                        let modules_users = [];
-                        let access_users_data = [];
-                        let no_access_users_data = [];
-                        selected_modules.forEach(module => {
-                            categories.push(module.name);
-                            let access_users = module.users;
-                            let no_access_users = usersIds.filter(x => !access_users.includes(x));
-                            access_users_data.push(access_users.length);
-                            no_access_users_data.push(no_access_users.length);
-                            modules_users.push([access_users, no_access_users]);
-                        });
-                        let series = [
-                            { name: this.strings.access, data: access_users_data },
-                            { name: this.strings.no_access, data: no_access_users_data },
-                        ];
-                        this.access_chart_categories = categories;
-                        this.access_chart_series = series;
-                        this.access_chart_users = modules_users;
-                    },
+        update_dialog(value) {
+          this.dialog = value;
+        },
 
-                    get_users(ids) {
-                        let users = [];
-                        this.access.users.forEach(user => {
-                            let userid = Number(user.id);
-                            if (ids.includes(userid)) {
-                                users.push(user);
-                            }
-                        });
-                        return users;
-                    },
+        generate_access_content_data() {
+          let usersIds = [];
+          this.access.users.forEach((user) => {
+            usersIds.push(Number(user.id));
+          });
+          let selected_types_labels = [];
+          this.access.types.forEach((item) => {
+            if (item.show) {
+              selected_types_labels.push(item.type);
+            }
+          });
+          let selected_modules = [];
+          this.access.modules.forEach((module) => {
+            if (selected_types_labels.includes(module.type)) {
+              selected_modules.push(module);
+            }
+          });
+          let categories = [];
+          let modules_users = [];
+          let access_users_data = [];
+          let no_access_users_data = [];
+          selected_modules.forEach((module) => {
+            categories.push(module.name);
+            let access_users = module.users;
+            let no_access_users = usersIds.filter(
+              (x) => !access_users.includes(x)
+            );
+            access_users_data.push(access_users.length);
+            no_access_users_data.push(no_access_users.length);
+            modules_users.push([access_users, no_access_users]);
+          });
+          let series = [
+            { name: this.strings.access, data: access_users_data },
+            { name: this.strings.no_access, data: no_access_users_data },
+          ];
+          this.access_chart_categories = categories;
+          this.access_chart_series = series;
+          this.access_chart_users = modules_users;
+        },
 
-                    get_moduletype(modulename) {
-                        let mod;
-                        this.access.modules.forEach(module => {
-                            if (module.name === modulename) {
-                                mod = module;
-                            }
-                        });
-                        return mod;
-                    },
+        get_users(ids) {
+          let users = [];
+          this.access.users.forEach((user) => {
+            let userid = Number(user.id);
+            if (ids.includes(userid)) {
+              users.push(user);
+            }
+          });
+          return users;
+        },
 
-                    open_chart_help(chart) {
-                        let contents = [];
-                        var action = "";
-                        var objectName = "";
-                        var objectType = "";
-                        var objectDescription = "";
-                        if (chart == "assigns_submissions") {
-                            contents.push({
-                                title: this.strings.assigns_submissions_help_title,
-                                description: this.strings.assigns_submissions_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.assigns_submissions_help_description_p2,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "assigns_submissions"
-                            objectDescription = "Help section that provides information about the invested time chart";
-                            vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "access_content") {
-                            contents.push({
-                                title: this.strings.access_content_help_title,
-                                description: this.strings.access_content_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.access_content_help_description_p2,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "access_content";
-                            objectDescription = "Help section that provides information about the sessions per hour chart";
-                            vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        }
-                        this.help_contents = contents;
-                        if (this.help_contents.length) {
-                            this.help_dialog = true;
-                        }
-                    },
+        get_moduletype(modulename) {
+          let mod;
+          this.access.modules.forEach((module) => {
+            if (module.name === modulename) {
+              mod = module;
+            }
+          });
+          return mod;
+        },
 
-                    update_help_dialog (value) {
-                        this.help_dialog = value;
-                    },
+        open_chart_help(chart) {
+          let contents = [];
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          if (chart == "assigns_submissions") {
+            contents.push({
+              title: this.strings.assigns_submissions_help_title,
+              description: this.strings.assigns_submissions_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.assigns_submissions_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "assigns_submissions";
+            objectDescription =
+              "Help section that provides information about the invested time chart";
+            vue.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "access_content") {
+            contents.push({
+              title: this.strings.access_content_help_title,
+              description: this.strings.access_content_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.access_content_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "access_content";
+            objectDescription =
+              "Help section that provides information about the sessions per hour chart";
+            vue.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          }
+          this.help_contents = contents;
+          if (this.help_contents.length) {
+            this.help_dialog = true;
+          }
+        },
 
-                    get_timezone(){
-                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`
-                        return information;
-                    },
+        update_help_dialog(value) {
+          this.help_dialog = value;
+        },
 
-                    setGraphicsEventListeners() {
-                        let graphics = document.querySelectorAll('.highcharts-container');
-                        if(graphics.length<1) {
-                            setTimeout(vue.setGraphicsEventListeners, 500);
-                        } else {
-                            graphics[0].id="submissions";
-                            graphics[1].id="accessContent";
-                            graphics.forEach((graph) => {
-                                graph.addEventListener('mouseenter', vue.addLogsViewGraphic);
-                            })
-                        }
-                    },
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
 
-                    addLogsViewGraphic(e) {
-                        event.stopPropagation();
-                        var action = "";
-                        var objectName = "";
-                        var objectType = "";
-                        var objectDescription = "";
-                        switch(e.target.id) {
-                            case "submissions":
-                                action = "viewed";
-                                objectName = "assigns_submissions";
-                                objectType = "chart";
-                                objectDescription = "Chart showing the work submited by the students";
-                                break;
-                            case "accessContent":
-                                action = "viewed";
-                                objectName = "access_content";
-                                objectType = "chart";
-                                objectDescription = "Chart showing the course content accessed by the students";
-                                break;
-                            default:
-                                action = "viewed";
-                                objectName = "";
-                                objectType = "chart";
-                                objectDescription = "A chart";
-                                break;
-                        }
-                        vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                    },
+        setGraphicsEventListeners() {
+          let graphics = document.querySelectorAll(".highcharts-container");
+          if (graphics.length < 1) {
+            setTimeout(vue.setGraphicsEventListeners, 500);
+          } else {
+            graphics[0].id = "submissions";
+            graphics[1].id = "accessContent";
+            graphics.forEach((graph) => {
+              graph.addEventListener("mouseenter", vue.addLogsViewGraphic);
+            });
+          }
+        },
 
-                    addLogsIntoDB(action, objectName, objectType, objectDescription) {
-                        let data = {
-                            courseid: content.courseid,
-                            userid: content.userid,
-                            action: "addLogs",
-                            sectionname: "TASKS_MONITORING",
-                            actiontype: action,
-                            objectType: objectType,
-                            objectName: objectName,
-                            currentUrl: document.location.href,
-                            objectDescription: objectDescription,
-                        };
-                        Axios({
-                            method:'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params : data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                            }
-                        }).catch((e) => {
-                        });
-                    },
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "submissions":
+              action = "viewed";
+              objectName = "assigns_submissions";
+              objectType = "chart";
+              objectDescription =
+                "Chart showing the work submited by the students";
+              break;
+            case "accessContent":
+              action = "viewed";
+              objectName = "access_content";
+              objectType = "chart";
+              objectDescription =
+                "Chart showing the course content accessed by the students";
+              break;
+            default:
+              action = "viewed";
+              objectName = "";
+              objectType = "chart";
+              objectDescription = "A chart";
+              break;
+          }
+          vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
 
-                }
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "TASKS_MONITORING",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
             })
-
-        }
-        return {
-            init : init
-        };
-    });
\ No newline at end of file
+            .catch((e) => {});
+        },
+      },
+    });
+  }
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/dropout.js b/notemyprogress/amd/src/dropout.js
index 7f235dff18ce38506dd93f6bf7532786639ba269..e04e03ea58770828bc0940f4ed00a8de6c2b9518 100644
--- a/notemyprogress/amd/src/dropout.js
+++ b/notemyprogress/amd/src/dropout.js
@@ -1,854 +1,1024 @@
-define(["local_notemyprogress/vue",
-    "local_notemyprogress/vuetify",
-    "local_notemyprogress/axios",
-    "local_notemyprogress/moment",
-    "local_notemyprogress/momenttimezone",
-    "local_notemyprogress/pagination",
-    "local_notemyprogress/chartdynamic",
-    "local_notemyprogress/pageheader",
-    "local_notemyprogress/emailform",
-    "local_notemyprogress/modulesform",
-    "local_notemyprogress/helpdialog",
-],
-    function (Vue, Vuetify, Axios, Moment, MomentTimezone, Pagination, ChartDynamic, PageHeader, EmailForm, ModulesForm, HelpDialog) {
-        "use strict";
-
-        function init(content) {
-            // console.log(content);
-            Vue.use(Vuetify);
-            Vue.component('pagination', Pagination);
-            Vue.component('chart', ChartDynamic);
-            Vue.component('pageheader', PageHeader);
-            Vue.component('emailform', EmailForm);
-            Vue.component('modulesform', ModulesForm);
-            Vue.component('helpdialog', HelpDialog);
-            let vue = new Vue({
-                delimiters: ["[[", "]]"],
-                el: "#dropout",
-                vuetify: new Vuetify(),
-                data() {
-                    return {
-                        strings: content.strings,
-                        groups: content.groups,
-                        userid: content.userid,
-                        courseid: content.courseid,
-                        timezone: content.timezone,
-                        render_has: content.profile_render,
-                        loading: false,
-                        errors: [],
-                        pages: content.pages,
-
-                        dropout: content.dropout,
-                        modules_access_colors: content.modules_access_colors,
-                        week_modules_colors: content.week_modules_colors,
-                        sessions_evolution_colors: content.sessions_evolution_colors,
-                        user_grades_colors: content.user_grades_colors,
-                        selected_cluster: [],
-                        cluster_users: [],
-                        selected_user: null,
-                        search: null,
-                        week_modules_chart_data: [],
-                        week_modules_chart_categories: [],
-                        selected_sections: [],
-                        sessions_evolution_data: [],
-                        user_grades_categories: [],
-                        user_grades_data: [],
-                        modules_dialog: false,
-
-                        email_users: [],
-                        email_dialog: false,
-                        modulename: "",
-                        moduleid: false,
-                        email_strings: content.strings.email_strings,
-
-                        help_dialog: false,
-                        help_contents: [],
-                        email_object_name: "",
-                    }
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/momenttimezone",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartdynamic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/emailform",
+  "local_notemyprogress/modulesform",
+  "local_notemyprogress/helpdialog",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  MomentTimezone,
+  Pagination,
+  ChartDynamic,
+  PageHeader,
+  EmailForm,
+  ModulesForm,
+  HelpDialog
+) {
+  "use strict";
+
+  function init(content) {
+    // //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartDynamic);
+    Vue.component("pageheader", PageHeader);
+    Vue.component("emailform", EmailForm);
+    Vue.component("modulesform", ModulesForm);
+    Vue.component("helpdialog", HelpDialog);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#dropout",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          loading: false,
+          errors: [],
+          pages: content.pages,
+
+          dropout: content.dropout,
+          modules_access_colors: content.modules_access_colors,
+          week_modules_colors: content.week_modules_colors,
+          sessions_evolution_colors: content.sessions_evolution_colors,
+          user_grades_colors: content.user_grades_colors,
+          selected_cluster: [],
+          cluster_users: [],
+          selected_user: null,
+          search: null,
+          week_modules_chart_data: [],
+          week_modules_chart_categories: [],
+          selected_sections: [],
+          sessions_evolution_data: [],
+          user_grades_categories: [],
+          user_grades_data: [],
+          modules_dialog: false,
+
+          email_users: [],
+          email_dialog: false,
+          modulename: "",
+          moduleid: false,
+          email_strings: content.strings.email_strings,
+
+          help_dialog: false,
+          help_contents: [],
+          email_object_name: "",
+        };
+      },
+      beforeMount() {
+        if (this.dropout.clusters.length) {
+          this.set_modules_in_sections();
+          this.selected_cluster = this.dropout.clusters[0];
+          this.change_cluster(this.selected_cluster.users);
+        }
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#dropout").style.display = "block";
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+        });
+      },
+      computed: {},
+      methods: {
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
+
+        set_modules_in_sections() {
+          let sectionsMap = new Map();
+          let sectionid = 0,
+            modules = [];
+          this.dropout.cms.forEach((cm) => {
+            sectionid = Number(cm.section);
+            if (!sectionsMap.has(sectionid)) {
+              sectionsMap.set(sectionid, [cm]);
+            } else {
+              sectionsMap.get(sectionid).push(cm);
+            }
+          });
+          this.dropout.sections.forEach((section) => {
+            sectionid = Number(section.sectionid);
+            section.sectionid = sectionid;
+            section.modules = sectionsMap.has(sectionid)
+              ? sectionsMap.get(sectionid)
+              : [];
+          });
+        },
+
+        change_cluster(users) {
+          let selected_users = [];
+          this.dropout.users.forEach((user) => {
+            //C'est ici que l'on met les utilisateurs dans le tableau de données
+            if (users.includes(user.id)) {
+              selected_users.push(user);
+            }
+          });
+          if (selected_users.length) {
+            this.cluster_users = selected_users;
+            let user = this.cluster_users[0];
+            if (!isNaN(parseInt(this.selected_cluster.number))) {
+              this.addLogsIntoDB(
+                "viewed",
+                "group_" + parseInt(this.selected_cluster.number) + 1,
+                "group",
+                "Viewed a group"
+              );
+            }
+            this.change_user(user);
+          } else {
+            this.cluster_users = [];
+            this.selected_user = null;
+          }
+        },
+
+        change_user(user) {
+          let oldUser = this.selected_user;
+          this.selected_user = user;
+          this.calculate_week_modules_access();
+          this.calculate_sessions_evolution();
+          this.calculate_user_grades();
+          if (oldUser != null) {
+            if (oldUser.username != this.selected_user.username) {
+              this.addLogsIntoDB(
+                "viewed",
+                "user_" + user.username,
+                "user_details",
+                "Viewed the " +
+                  user.username +
+                  " details (charts, statistics, etc.)"
+              );
+            }
+          }
+        },
+
+        calculate_week_modules_access() {
+          let sectionid = 0,
+            moduleid = 0,
+            weekcompletecms = 0,
+            weekviewedcms = 0;
+          let modules = [],
+            completecms = [],
+            viewedcms = [],
+            categories = [];
+          let user_cm;
+          this.dropout.weeks.forEach((week) => {
+            (weekcompletecms = 0), (weekviewedcms = 0);
+            week.sections.forEach((section) => {
+              sectionid = Number(section.sectionid);
+              section.sectionid = sectionid;
+
+              modules = this.sections_modules(sectionid);
+              modules.forEach((module) => {
+                moduleid = Number(module.id);
+                module.id = moduleid;
+
+                user_cm = this.selected_user.cms.modules[`cm${module.id}`];
+                if (user_cm) {
+                  user_cm.complete && weekcompletecms++;
+                  user_cm.viewed && weekviewedcms++;
+                }
+              });
+            });
+            completecms.push(weekcompletecms);
+            viewedcms.push(weekviewedcms);
+            categories.push(`${week.name} ${week.position + 1}`);
+          });
+          this.week_modules_chart_categories = categories;
+          this.week_modules_chart_data = [
+            {
+              name: this.strings.modules_access_chart_series_viewed,
+              data: viewedcms,
+            },
+            {
+              name: this.strings.modules_access_chart_series_complete,
+              data: completecms,
+            },
+          ];
+        },
+
+        calculate_sessions_evolution() {
+          let sessions_data = [],
+            time_data = [];
+          let sumtime = 0,
+            sumsessions = 0,
+            time = 0,
+            timestamp = 0;
+          this.selected_user.sessions.forEach((session) => {
+            timestamp = Number(session.start) * 1000;
+            time = Number(session.duration) / 60;
+            sumtime += time;
+            sumsessions++;
+            sessions_data.push({ x: timestamp, y: sumsessions });
+            time_data.push({ x: timestamp, y: sumtime });
+          });
+          this.sessions_evolution_data = [
+            {
+              name: this.strings.sessions_evolution_chart_legend1,
+              yAxis: 0,
+              data: sessions_data,
+            },
+            {
+              name: this.strings.sessions_evolution_chart_legend2,
+              yAxis: 1,
+              data: time_data,
+            },
+          ];
+        },
+
+        calculate_user_grades() {
+          let categories = [],
+            course_grades = [],
+            user_grades = [];
+          let user_grade = 0,
+            user_name = this.selected_user.firstname;
+          if (this.selected_user.gradeitems) {
+            this.selected_user.gradeitems.forEach((item) => {
+              user_grade =
+                (Number(item.finalgrade) * 100) / Number(item.grademax);
+              categories.push(item.itemname);
+              course_grades.push(item.average_percentage);
+              user_grades.push(user_grade);
+            });
+            this.user_grades_data = [
+              { name: user_name, data: user_grades },
+              {
+                name: this.strings.user_grades_chart_legend,
+                data: course_grades,
+              },
+            ];
+            this.user_grades_categories = categories;
+          }
+        },
+
+        build_modules_access_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.modules_access_colors;
+          chart.xAxis = {
+            type: "category",
+          };
+          chart.yAxis = {
+            allowDecimals: false,
+            title: {
+              enabled: true,
+              text: this.strings.modules_amount,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            formatter: function () {
+              let module_text =
+                this.y == 1
+                  ? vue.strings.module_label
+                  : vue.strings.modules_label;
+              return (
+                "<b>" +
+                this.points[0].key +
+                "</b>: " +
+                this.y +
+                " " +
+                module_text +
+                "<br/>" +
+                "<i>" +
+                vue.strings.modules_details +
+                "<i/>"
+              );
+            },
+          };
+          (chart.plotOptions = {
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.open_modules_modal(this.x);
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      vue.selected_user.username + "_module_access",
+                      "chart_details",
+                      "Provide details informations about the consulted resources"
+                    );
+                  },
                 },
-                beforeMount() {
-                    if (this.dropout.clusters.length) {
-                        this.set_modules_in_sections();
-                        this.selected_cluster = this.dropout.clusters[0];
-                        this.change_cluster(this.selected_cluster.users);
-                    };
+              },
+            },
+          }),
+            (chart.legend = {
+              enabled: false,
+            });
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: [
+                {
+                  name: this.strings.modules_access_chart_series_viewed,
+                  y: this.selected_user.cms.viewed,
                 },
-                mounted() {
-                    document.querySelector("#sessions-loader").style.display = "none";
-                    document.querySelector("#dropout").style.display = "block";
-                    setTimeout(function () {
-                        vue.setGraphicsEventListeners();
-                    })
-
+                {
+                  name: this.strings.modules_access_chart_series_complete,
+                  y: this.selected_user.cms.complete,
                 },
-                computed: {
-
+                {
+                  name: this.strings.modules_access_chart_series_total,
+                  y: this.selected_user.cms.total,
                 },
-                methods: {
-                    get_help_content() {
-                        let contents = [];
-                        contents.push({
-                            title: this.strings.section_help_title,
-                            description: this.strings.section_help_description,
-                        });
-                        return contents;
-                    },
-
-                    set_modules_in_sections() {
-                        let sectionsMap = new Map();
-                        let sectionid = 0, modules = [];
-                        this.dropout.cms.forEach(cm => {
-                            sectionid = Number(cm.section);
-                            if (!sectionsMap.has(sectionid)) {
-                                sectionsMap.set(sectionid, [cm]);
-                            } else {
-                                sectionsMap.get(sectionid).push(cm);
-                            }
-                        });
-                        this.dropout.sections.forEach(section => {
-                            sectionid = Number(section.sectionid);
-                            section.sectionid = sectionid;
-                            section.modules = (sectionsMap.has(sectionid)) ? sectionsMap.get(sectionid) : [];
-                        });
-                    },
-
-                    change_cluster(users) {
-                        let selected_users = [];
-                        this.dropout.users.forEach(user => {
-                            //C'est ici que l'on met les utilisateurs dans le tableau de données
-                            if (users.includes(user.id)) {
-                                selected_users.push(user);
-                            }
-                        });
-                        if (selected_users.length) {
-                            this.cluster_users = selected_users;
-                            let user = this.cluster_users[0];
-                            if (!isNaN(parseInt(this.selected_cluster.number))) {
-                                this.addLogsIntoDB("viewed", "group_" + parseInt(this.selected_cluster.number) + 1, "group", "Viewed a group");
-                            }
-                            this.change_user(user);
-                        } else {
-                            this.cluster_users = [];
-                            this.selected_user = null;
-                        }
-                    },
-
-                    change_user(user) {
-                        let oldUser = this.selected_user;
-                        this.selected_user = user;
-                        this.calculate_week_modules_access();
-                        this.calculate_sessions_evolution();
-                        this.calculate_user_grades();
-                        if (oldUser != null) {
-                            if (oldUser.username != this.selected_user.username) {
-                                this.addLogsIntoDB("viewed", "user_" + user.username, "user_details", "Viewed the " + user.username + " details (charts, statistics, etc.)");
-                            }
-                        }
-                    },
-
-                    calculate_week_modules_access() {
-                        let sectionid = 0, moduleid = 0, weekcompletecms = 0, weekviewedcms = 0;
-                        let modules = [], completecms = [], viewedcms = [], categories = [];
-                        let user_cm;
-                        this.dropout.weeks.forEach(week => {
-                            weekcompletecms = 0, weekviewedcms = 0;
-                            week.sections.forEach(section => {
-                                sectionid = Number(section.sectionid);
-                                section.sectionid = sectionid;
-
-                                modules = this.sections_modules(sectionid);
-                                modules.forEach(module => {
-                                    moduleid = Number(module.id);
-                                    module.id = moduleid;
-
-                                    user_cm = this.selected_user.cms.modules[`cm${module.id}`];
-                                    if (user_cm) {
-                                        (user_cm.complete) && weekcompletecms++;
-                                        (user_cm.viewed) && weekviewedcms++;
-                                    }
-                                });
-                            });
-                            completecms.push(weekcompletecms);
-                            viewedcms.push(weekviewedcms);
-                            categories.push(`${week.name} ${(week.position + 1)}`);
-                        });
-                        this.week_modules_chart_categories = categories;
-                        this.week_modules_chart_data = [
-                            { name: this.strings.modules_access_chart_series_viewed, data: viewedcms },
-                            { name: this.strings.modules_access_chart_series_complete, data: completecms }
-                        ];
-                    },
-
-                    calculate_sessions_evolution() {
-                        let sessions_data = [], time_data = [];
-                        let sumtime = 0, sumsessions = 0, time = 0, timestamp = 0;
-                        this.selected_user.sessions.forEach(session => {
-                            timestamp = Number(session.start) * 1000;
-                            time = (Number(session.duration)) / 60;
-                            sumtime += time;
-                            sumsessions++;
-                            sessions_data.push({ x: timestamp, y: sumsessions });
-                            time_data.push({ x: timestamp, y: sumtime });
-                        });
-                        this.sessions_evolution_data = [
-                            { name: this.strings.sessions_evolution_chart_legend1, yAxis: 0, data: sessions_data },
-                            { name: this.strings.sessions_evolution_chart_legend2, yAxis: 1, data: time_data },
-                        ];
-                    },
-
-                    calculate_user_grades() {
-                        let categories = [], course_grades = [], user_grades = [];
-                        let user_grade = 0, user_name = this.selected_user.firstname;
-                        if (this.selected_user.gradeitems) {
-                            this.selected_user.gradeitems.forEach(item => {
-                                user_grade = (Number(item.finalgrade) * 100) / Number(item.grademax);
-                                categories.push(item.itemname);
-                                course_grades.push(item.average_percentage);
-                                user_grades.push(user_grade);
-                            });
-                            this.user_grades_data = [
-                                { name: user_name, data: user_grades },
-                                { name: this.strings.user_grades_chart_legend, data: course_grades },
-                            ];
-                            this.user_grades_categories = categories;
-                        }
-                    },
-
-                    build_modules_access_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'bar',
-                            backgroundColor: null,
-                            style: { fontFamily: 'poppins' },
-                        };
-                        chart.title = { text: null };
-                        chart.colors = this.modules_access_colors;
-                        chart.xAxis = {
-                            type: 'category',
-                        };
-                        chart.yAxis = {
-                            allowDecimals: false,
-                            title: {
-                                enabled: true,
-                                text: this.strings.modules_amount,
-                            }
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            formatter: function () {
-                                let module_text = (this.y == 1) ? vue.strings.module_label : vue.strings.modules_label;
-                                return '<b>' + this.points[0].key + '</b>: ' + this.y + ' ' + module_text + '<br/>'
-                                    + '<i>' + vue.strings.modules_details + '<i/>';
-                            }
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                cursor: 'pointer',
-                                point: {
-                                    events: {
-                                        click: function () {
-                                            vue.open_modules_modal(this.x);
-                                            vue.addLogsIntoDB("viewed", vue.selected_user.username + "_module_access", "chart_details", "Provide details informations about the consulted resources");
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                            chart.legend = {
-                                enabled: false
-                            };
-                        chart.series = [{
-                            colorByPoint: true,
-                            data: [
-                                { name: this.strings.modules_access_chart_series_viewed, y: this.selected_user.cms.viewed },
-                                { name: this.strings.modules_access_chart_series_complete, y: this.selected_user.cms.complete },
-                                { name: this.strings.modules_access_chart_series_total, y: this.selected_user.cms.total }
-                            ]
-                        }];
-                        return chart;
-                    },
-
-                    build_week_modules_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'column',
-                            backgroundColor: null,
-                            style: { fontFamily: 'poppins' },
-                        };
-                        chart.title = { text: null };
-                        chart.colors = this.week_modules_colors;
-                        chart.xAxis = {
-                            categories: this.week_modules_chart_categories,
-                            title: {
-                                text: null
-                            },
-                            crosshair: true
-                        };
-                        chart.yAxis = {
-                            allowDecimals: false,
-                            title: {
-                                text: this.strings.modules_amount,
-                            }
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            useHTML: true,
-                            formatter: function () {
-                                let text1 = '', text2 = '';
-                                if (this.points[0]) {
-                                    let module_text_viewed = (this.points[0].y == 1) ? vue.strings.module_label : vue.strings.modules_label;
-                                    let viewed_series_name = this.points[0].series.name;
-                                    text1 = `<b style="color: ${this.points[0].color}">${viewed_series_name}: </b>
+              ],
+            },
+          ];
+          return chart;
+        },
+
+        build_week_modules_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.week_modules_colors;
+          chart.xAxis = {
+            categories: this.week_modules_chart_categories,
+            title: {
+              text: null,
+            },
+            crosshair: true,
+          };
+          chart.yAxis = {
+            allowDecimals: false,
+            title: {
+              text: this.strings.modules_amount,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let text1 = "",
+                text2 = "";
+              if (this.points[0]) {
+                let module_text_viewed =
+                  this.points[0].y == 1
+                    ? vue.strings.module_label
+                    : vue.strings.modules_label;
+                let viewed_series_name = this.points[0].series.name;
+                text1 = `<b style="color: ${this.points[0].color}">${viewed_series_name}: </b>
                                             ${this.points[0].y} ${module_text_viewed}<br/>`;
-                                }
-                                if (this.points[1]) {
-                                    let module_text_completed = (this.points[1].y == 1) ? vue.strings.module_label : vue.strings.modules_label;
-                                    let completed_series_name = this.points[1].series.name;
-                                    text2 = `<b style="color: ${this.points[1].color}">${completed_series_name}: </b>
+              }
+              if (this.points[1]) {
+                let module_text_completed =
+                  this.points[1].y == 1
+                    ? vue.strings.module_label
+                    : vue.strings.modules_label;
+                let completed_series_name = this.points[1].series.name;
+                text2 = `<b style="color: ${this.points[1].color}">${completed_series_name}: </b>
                                             ${this.points[1].y} ${module_text_completed}<br/>`;
-                                }
-                                return `${this.x} <br/> ${text1}${text2} <i>${vue.strings.modules_details}<i/>`;
-                            }
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                cursor: 'pointer',
-                                point: {
-                                    events: {
-                                        click: function () {
-                                            vue.open_modules_modal(this.colorIndex, this.x);
-                                            vue.addLogsIntoDB("viewed", vue.selected_user.username + "_week_modules", "chart_details", "Provide details informations about the consulted resources");
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.series = this.week_modules_chart_data;
-                        return chart;
-                    },
-
-                    build_sessions_evolution_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            zoomType: 'x',
-                            backgroundColor: null,
-                            style: { fontFamily: 'poppins' },
-                        };
-                        chart.title = { text: null };
-                        chart.colors = this.sessions_evolution_colors;
-                        chart.xAxis = {
-                            type: 'datetime'
-                        };
-                        chart.yAxis = [{
-                            allowDecimals: false,
-                            title: { text: this.strings.sessions_evolution_chart_xaxis1 }
-                        }, {
-                            title: { text: this.strings.sessions_evolution_chart_xaxis2 },
-                            opposite: true
-                        }];
-                        chart.tooltip = {
-                            shared: true,
-                            useHTML: true,
-                            formatter: function () {
-                                let date_label = vue.calculate_timezone_date_string(this.x);
-                                let text1 = (this.points[0]) ? vue.get_sessions_evolution_tooltip(this.points[0]) : '';
-                                let text2 = (this.points[1]) ? vue.get_sessions_evolution_tooltip(this.points[1]) : '';
-                                return `<small>${date_label}</small><br/>${text1}${text2}`;
-                            }
-                        };
-                        chart.series = this.sessions_evolution_data;
-                        return chart;
-                    },
-
-                    build_user_grades_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'column',
-                            backgroundColor: null,
-                            style: { fontFamily: 'poppins' },
-                        };
-                        chart.title = { text: null };
-                        chart.colors = this.user_grades_colors;
-                        chart.xAxis = {
-                            crosshair: true,
-                            categories: this.user_grades_categories,
-                        };
-                        chart.yAxis = {
-                            allowDecimals: false,
-                            max: 100,
-                            labels: {
-                                format: '{value} %',
-                            },
-                            title: { text: this.strings.user_grades_chart_yaxis }
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            useHTML: true,
-                            formatter: function () {
-                                let itemname = this.x;
-                                let position = this.points[0].point.x;
-                                let item = vue.selected_user.gradeitems[position];
-                                let header = `<small>${itemname}</small><br/>`;
-                                let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;
-                                let body = '';
-                                if (item.gradecount == 0) {
-                                    body = vue.strings.user_grades_chart_tooltip_no_graded;
-                                } else {
-                                    let text1 = (this.points[0]) ? vue.get_user_grades_tooltip(this.points[0], item) : '';
-                                    let text2 = (this.points[1]) ? vue.get_user_grades_tooltip(this.points[1], item) : '';
-                                    body = `${text1}${text2}${footer}`;
-                                }
-                                return `${header}${body}`;
-                            }
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                cursor: 'pointer',
-                                point: {
-                                    events: {
-                                        click: function () {
-                                            let position = this.x;
-                                            let item = vue.selected_user.gradeitems[position];
-                                            let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;
-                                            window.open(url, '_blank');
-                                            vue.addLogsIntoDB("viewed", vue.selected_user.username + "_user_grades", "chart_details", "Provide informations about a certain test");
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.series = this.user_grades_data;
-                        return chart;
-                    },
-
-                    get_sessions_evolution_tooltip(point) {
-                        let text = '', sessions, sessions_suffix, sessions_prefix, time_prefix, time;
-                        if (point.colorIndex == 0) {
-                            sessions = point.y;
-                            sessions_suffix = (sessions == 1) ? vue.strings.session_text : vue.strings.sessions_text;
-                            sessions_prefix = point.series.name;
-                            text = `<b style="color: ${point.color}">${sessions_prefix}: </b>
+              }
+              return `${this.x} <br/> ${text1}${text2} <i>${vue.strings.modules_details}<i/>`;
+            },
+          };
+          chart.plotOptions = {
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.open_modules_modal(this.colorIndex, this.x);
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      vue.selected_user.username + "_week_modules",
+                      "chart_details",
+                      "Provide details informations about the consulted resources"
+                    );
+                  },
+                },
+              },
+            },
+          };
+          chart.series = this.week_modules_chart_data;
+          return chart;
+        },
+
+        build_sessions_evolution_chart() {
+          let chart = new Object();
+          chart.chart = {
+            zoomType: "x",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.sessions_evolution_colors;
+          chart.xAxis = {
+            type: "datetime",
+          };
+          chart.yAxis = [
+            {
+              allowDecimals: false,
+              title: { text: this.strings.sessions_evolution_chart_xaxis1 },
+            },
+            {
+              title: { text: this.strings.sessions_evolution_chart_xaxis2 },
+              opposite: true,
+            },
+          ];
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let date_label = vue.calculate_timezone_date_string(this.x);
+              let text1 = this.points[0]
+                ? vue.get_sessions_evolution_tooltip(this.points[0])
+                : "";
+              let text2 = this.points[1]
+                ? vue.get_sessions_evolution_tooltip(this.points[1])
+                : "";
+              return `<small>${date_label}</small><br/>${text1}${text2}`;
+            },
+          };
+          chart.series = this.sessions_evolution_data;
+          return chart;
+        },
+
+        build_user_grades_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.user_grades_colors;
+          chart.xAxis = {
+            crosshair: true,
+            categories: this.user_grades_categories,
+          };
+          chart.yAxis = {
+            allowDecimals: false,
+            max: 100,
+            labels: {
+              format: "{value} %",
+            },
+            title: { text: this.strings.user_grades_chart_yaxis },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let itemname = this.x;
+              let position = this.points[0].point.x;
+              let item = vue.selected_user.gradeitems[position];
+              let header = `<small>${itemname}</small><br/>`;
+              let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;
+              let body = "";
+              if (item.gradecount == 0) {
+                body = vue.strings.user_grades_chart_tooltip_no_graded;
+              } else {
+                let text1 = this.points[0]
+                  ? vue.get_user_grades_tooltip(this.points[0], item)
+                  : "";
+                let text2 = this.points[1]
+                  ? vue.get_user_grades_tooltip(this.points[1], item)
+                  : "";
+                body = `${text1}${text2}${footer}`;
+              }
+              return `${header}${body}`;
+            },
+          };
+          chart.plotOptions = {
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    let position = this.x;
+                    let item = vue.selected_user.gradeitems[position];
+                    let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;
+                    window.open(url, "_blank");
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      vue.selected_user.username + "_user_grades",
+                      "chart_details",
+                      "Provide informations about a certain test"
+                    );
+                  },
+                },
+              },
+            },
+          };
+          chart.series = this.user_grades_data;
+          return chart;
+        },
+
+        get_sessions_evolution_tooltip(point) {
+          let text = "",
+            sessions,
+            sessions_suffix,
+            sessions_prefix,
+            time_prefix,
+            time;
+          if (point.colorIndex == 0) {
+            sessions = point.y;
+            sessions_suffix =
+              sessions == 1
+                ? vue.strings.session_text
+                : vue.strings.sessions_text;
+            sessions_prefix = point.series.name;
+            text = `<b style="color: ${point.color}">${sessions_prefix}: </b>
                                      ${sessions} ${sessions_suffix}<br/>`;
-                        } else {
-                            time_prefix = point.series.name;
-                            time = this.convert_time(point.y * 60);
-                            text = `<b style="color: ${point.color}">${time_prefix}: </b>
+          } else {
+            time_prefix = point.series.name;
+            time = this.convert_time(point.y * 60);
+            text = `<b style="color: ${point.color}">${time_prefix}: </b>
                                     ${time}<br/>`;
-                        }
-                        return text;
-                    },
-
-                    get_user_grades_tooltip(point, item) {
-                        let serie_name = point.series.name, user_grade = 0;
-                        let finalgrade = Number(item.finalgrade), average = Number(item.average), grademax = Number(item.grademax);
-                        grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);
-                        if (point.colorIndex == 0) {
-                            user_grade = this.isInt(finalgrade) ? finalgrade : finalgrade.toFixed(2);
-                        } else {
-                            user_grade = this.isInt(average) ? average : average.toFixed(2);
-                        }
-                        return `<b style="color: ${point.color}">${serie_name}: </b>
+          }
+          return text;
+        },
+
+        get_user_grades_tooltip(point, item) {
+          let serie_name = point.series.name,
+            user_grade = 0;
+          let finalgrade = Number(item.finalgrade),
+            average = Number(item.average),
+            grademax = Number(item.grademax);
+          grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);
+          if (point.colorIndex == 0) {
+            user_grade = this.isInt(finalgrade)
+              ? finalgrade
+              : finalgrade.toFixed(2);
+          } else {
+            user_grade = this.isInt(average) ? average : average.toFixed(2);
+          }
+          return `<b style="color: ${point.color}">${serie_name}: </b>
                                      ${user_grade}/${grademax}<br/>`;
-                    },
-
-                    calculate_timezone_date_string(timestamp) {
-                        let dat, weekday, monthday, month, time;
-                        if (Moment.tz.zone(this.timezone)) {
-                            dat = Moment(timestamp).tz(this.timezone);
-                            weekday = dat.day();
-                            monthday = dat.date();
-                            month = dat.month();
-                            time = dat.format('HH:mm:ss');
-                        } else {
-                            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
-                            dat = new Date(timestamp);
-                            weekday = dat.getDay();
-                            monthday = dat.getDate();
-                            month = dat.getMonth();
-                            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;
-                        }
-                        weekday = this.strings.chart.weekdays[weekday];
-                        month = this.strings.chart.shortMonths[month];
-                        return `${weekday}, ${month} ${monthday}, ${time}`;
-                    },
-
-                    convert_time(time) {
-                        time *= 60; // pasar los minutos a segundos
-                        let h = this.strings.hours_short;
-                        let m = this.strings.minutes_short;
-                        let s = this.strings.seconds_short;
-                        let hours = Math.floor(time / 3600);
-                        let minutes = Math.floor((time % 3600) / 60);
-                        let seconds = Math.floor(time % 60);
-                        let text;
-                        if (hours >= 1) {
-                            if (minutes >= 1) {
-                                text = `${hours}${h} ${minutes}${m}`;
-                            } else {
-                                text = `${hours}${h}`;
-                            }
-                        } else if ((minutes >= 1)) {
-                            if (seconds >= 1) {
-                                text = `${minutes}${m} ${seconds}${s}`;
-                            } else {
-                                text = `${minutes}${m}`;
-                            }
-                        } else {
-                            text = `${seconds}${s}`;
-                        }
-                        return text;
-                    },
-
-                    open_modules_modal(type, weekposition) {
-                        let sections = this.dropout.sections;
-                        if (Number.isInteger(weekposition)) {
-                            sections = [];
-                            let section;
-                            let week = this.dropout.weeks[weekposition];
-                            week.sections.forEach(item => {
-                                section = {
-                                    sectionid: item.sectionid,
-                                    name: item.name,
-                                    modules: this.sections_modules(item.sectionid)
-                                };
-                                sections.push(section);
-                            });
-                        }
-                        sections.forEach(section => {
-                            section.modules.forEach(module => {
-                                module.complete = false;
-                                module.viewed = false;
-                                module.interactions = 0;
-                                let user_cm = this.selected_user.cms.modules[`cm${module.id}`];
-                                if (user_cm) {
-                                    module.complete = user_cm.complete;
-                                    module.viewed = user_cm.viewed;
-                                    module.interactions = user_cm.interactions;
-                                }
-                            });
-                        });
-
-                        this.selected_sections = sections;
-                        this.modules_dialog = true;
-                    },
-
-                    sections_modules(sectionid) {
-                        let modules = [];
-                        let sections = this.dropout.sections;
-                        for (let i = 0; i < sections.length; i++) {
-                            if (sections[i].sectionid == sectionid) {
-                                if (sections[i].modules) {
-                                    modules = sections[i].modules;
-                                }
-                                break;
-                            }
-                        }
-                        return modules;
-                    },
-
-                    get_user_module(moduleid) {
-                        let module;
-                        let cms = this.selected_user.cms.modules;
-                        for (let i = 0; i < cms.length; i++) {
-                            cms[i].id = Number(cms[i].id);
-                            if (cms[i].id == moduleid) {
-                                module = cms[i];
-                                break;
-                            }
-                        }
-                        return module;
-                    },
-
-                    table_headers() {
-                        let headers = [
-                            { text: '', value: 'id', align: 'center', sortable: false },
-                            { text: this.strings.thead_name, value: 'firstname' },
-                            { text: this.strings.thead_lastname, value: 'lastname' },
-                            { text: this.strings.thead_progress, value: 'progress_percentage' },
-                        ];
-                        return headers;
-                    },
-
-                    get_picture_url(userid) {
-                        return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;
-                    },
-
-                    get_user_fullname() {
-                        return `${this.selected_user.firstname} ${this.selected_user.lastname}`;
-                    },
-
-                    get_username() {
-                        return `@${this.selected_user.username}`;
-                    },
-
-                    see_profile() {
-                        let id = this.selected_user.id;
-                        let url = M.cfg.wwwroot + '/user/view.php?id=' + id + '&course=' + vue.courseid;
-                        window.open(url);
-                    },
-
-                    get_progress_message() {
-                        let module_label = this.strings.modules_label;
-                        let finished_label = this.strings.finisheds_label;
-                        if (this.selected_user.cms.complete == 1) {
-                            module_label = this.strings.module_label;
-                            finished_label = this.strings.finished_label;
-                        }
-                        return `${this.selected_user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.dropout.total_cms}`;
-                    },
-
-                    get_progress_percentage() {
-                        return `${this.selected_user.progress_percentage} %`;
-                    },
-
-                    get_student_grade() {
-                        let grade = this.selected_user.coursegrade;
-                        grade.finalgrade = Number(grade.finalgrade);
-                        grade.maxgrade = Number(grade.maxgrade);
-                        let student_grade = this.isInt(grade.finalgrade) ? grade.finalgrade : grade.finalgrade.toFixed(2);
-                        let max_grade = this.isInt(grade.maxgrade) ? grade.maxgrade : grade.maxgrade.toFixed(2);
-                        return `${student_grade}/${max_grade}`;
-                    },
-
-                    get_sendmail_user_text() {
-                        return `${this.strings.send_mail_to_user} ${this.selected_user.firstname}`;
-                    },
-
-                    sendmail(type) {
-                        this.strings.email_strings.subject = this.strings.email_strings.subject_prefix;
-                        this.modulename = "course";
-                        this.moduleid = this.courseid;
-                        if (type == 1) {
-                            this.email_object_name = this.selected_user.username;
-                            this.email_users = [this.selected_user];
-                            this.email_dialog = true;
-                        } else if (type == 2) {
-                            if (!isNaN(parseInt(this.selected_cluster.number))) {
-                                this.email_object_name = parseInt(this.selected_cluster.number) + 1;
-                            } else {
-                                this.email_object_name = "unknown";
-                            }
-                            this.email_users = this.cluster_users;
-                            this.email_dialog = true;
-                        }
-                    },
-
-                    update_email_dialog(value) {
-                        this.email_dialog = value;
-                    },
-
-                    update_modules_dialog(value) {
-                        this.modules_dialog = value;
-                    },
-
-                    isInt(n) {
-                        return n % 1 === 0;
-                    },
-
-                    generate_dropout_data() {
-                        this.loading = true;
-                        this.errors = [];
-                        let data = {
-                            action: "dropoutdata",
-                            userid: this.userid,
-                            courseid: this.courseid,
-                            profile: this.render_has,
-                        }
-                        Axios({
-                            method: 'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params: data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                                location.reload();
-                            } else {
-                                this.error_messages.push(this.strings.error_network);
-                            }
-                        }).catch((e) => {
-                            this.errors.push(this.strings.api_error_network);
-                        }).finally(() => {
-                            this.loading = false;
-                        });
-                        return this.data;
-                    },
-
-                    open_chart_help(chart) {
-                        let contents = [];
-                        let action = "";
-                        let objectType = "";
-                        let objectName = "";
-                        let objectDescription = "";
-                        if (chart == "group_students") {
-                            contents.push({
-                                title: this.strings.group_students_help_title,
-                                description: this.strings.group_students_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.group_students_help_description_p2,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "group_student";
-                            objectDescription = "Help section that provides information about the group students section";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "modules_access") {
-                            contents.push({
-                                title: this.strings.modules_access_help_title,
-                                description: this.strings.modules_access_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.modules_access_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.modules_access_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "modules_access";
-                            objectDescription = "Help section that provides information about the modules access chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "week_modules") {
-                            contents.push({
-                                title: this.strings.week_modules_help_title,
-                                description: this.strings.week_modules_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.week_modules_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.week_modules_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "week_modules";
-                            objectDescription = "Help section that provides information about the week modules chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "sessions_evolution") {
-                            contents.push({
-                                title: this.strings.sessions_evolution_help_title,
-                                description: this.strings.sessions_evolution_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.sessions_evolution_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.sessions_evolution_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "sessions_evolution";
-                            objectDescription = "Help section that provides information about the sessions evolution chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "user_grades") {
-                            contents.push({
-                                title: this.strings.user_grades_help_title,
-                                description: this.strings.user_grades_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.user_grades_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.user_grades_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "user_grades";
-                            objectDescription = "Help section that provides information about the user grades chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        }
-                        this.help_contents = contents;
-                        if (this.help_contents.length) {
-                            this.help_dialog = true;
-                        }
-                    },
-
-                    update_help_dialog(value) {
-                        this.help_dialog = value;
-                    },
-
-                    get_timezone() {
-                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`
-                        return information;
-                    },
-
-                    setGraphicsEventListeners() {
-                        let graphics = document.querySelectorAll('.highcharts-container');
-                        graphics[0].id = "courseRessources";
-                        graphics[1].id = "weekRessources";
-                        graphics[2].id = "sessionsAndInvestedTime";
-                        graphics[3].id = "qualifications";
-                        graphics.forEach((graph) => {
-                            graph.addEventListener('mouseenter', vue.addLogsViewGraphic);
-                        })
-                    },
-
-                    addLogsViewGraphic(e) {
-                        event.stopPropagation();
-                        var action = "";
-                        var objectName = "";
-                        var objectType = "";
-                        var objectDescription = "";
-                        switch (e.target.id) {
-                            case "courseRessources":
-                                action = "viewed";
-                                objectName = vue.selected_user.username + "_modules_access";
-                                objectType = "chart";
-                                objectDescription = "Bar chart that shows";
-                                break;
-                            case "weekRessources":
-                                action = "viewed";
-                                objectName = vue.selected_user.username + "_week_modules";
-                                objectType = "chart";
-                                objectDescription = "Chart showing";
-                                break;
-                            case "sessionsAndInvestedTime":
-                                action = "viewed";
-                                objectName = vue.selected_user.username + "_sessions_evolution";
-                                objectType = "chart";
-                                objectDescription = "Chart showing ";
-                                break;
-                            case "qualifications":
-                                action = "viewed";
-                                objectName = vue.selected_user.username + "_user_grades";
-                                objectType = "chart";
-                                objectDescription = "Chart showing ";
-                                break;
-                            default:
-                                action = "viewed";
-                                objectName = "";
-                                objectType = "chart";
-                                objectDescription = "A chart";
-                        }
-                        vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                    },
-
-                    addLogsIntoDB(action, objectName, objectType, objectDescription) {
-                        let data = {
-                            courseid: content.courseid,
-                            userid: content.userid,
-                            action: "addLogs",
-                            sectionname: "DROPOUT",
-                            actiontype: action,
-                            objectType: objectType,
-                            objectName: objectName,
-                            currentUrl: document.location.href,
-                            objectDescription: objectDescription,
-                        };
-                        Axios({
-                            method: 'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params: data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                            }
-                        }).catch((e) => {
-                        });
-                    },
-                }
+        },
+
+        calculate_timezone_date_string(timestamp) {
+          let dat, weekday, monthday, month, time;
+          if (Moment.tz.zone(this.timezone)) {
+            dat = Moment(timestamp).tz(this.timezone);
+            weekday = dat.day();
+            monthday = dat.date();
+            month = dat.month();
+            time = dat.format("HH:mm:ss");
+          } else {
+            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
+            dat = new Date(timestamp);
+            weekday = dat.getDay();
+            monthday = dat.getDate();
+            month = dat.getMonth();
+            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;
+          }
+          weekday = this.strings.chart.weekdays[weekday];
+          month = this.strings.chart.shortMonths[month];
+          return `${weekday}, ${month} ${monthday}, ${time}`;
+        },
+
+        convert_time(time) {
+          time *= 60; // pasar los minutos a segundos
+          let h = this.strings.hours_short;
+          let m = this.strings.minutes_short;
+          let s = this.strings.seconds_short;
+          let hours = Math.floor(time / 3600);
+          let minutes = Math.floor((time % 3600) / 60);
+          let seconds = Math.floor(time % 60);
+          let text;
+          if (hours >= 1) {
+            if (minutes >= 1) {
+              text = `${hours}${h} ${minutes}${m}`;
+            } else {
+              text = `${hours}${h}`;
+            }
+          } else if (minutes >= 1) {
+            if (seconds >= 1) {
+              text = `${minutes}${m} ${seconds}${s}`;
+            } else {
+              text = `${minutes}${m}`;
+            }
+          } else {
+            text = `${seconds}${s}`;
+          }
+          return text;
+        },
+
+        open_modules_modal(type, weekposition) {
+          let sections = this.dropout.sections;
+          if (Number.isInteger(weekposition)) {
+            sections = [];
+            let section;
+            let week = this.dropout.weeks[weekposition];
+            week.sections.forEach((item) => {
+              section = {
+                sectionid: item.sectionid,
+                name: item.name,
+                modules: this.sections_modules(item.sectionid),
+              };
+              sections.push(section);
+            });
+          }
+          sections.forEach((section) => {
+            section.modules.forEach((module) => {
+              module.complete = false;
+              module.viewed = false;
+              module.interactions = 0;
+              let user_cm = this.selected_user.cms.modules[`cm${module.id}`];
+              if (user_cm) {
+                module.complete = user_cm.complete;
+                module.viewed = user_cm.viewed;
+                module.interactions = user_cm.interactions;
+              }
+            });
+          });
+
+          this.selected_sections = sections;
+          this.modules_dialog = true;
+        },
+
+        sections_modules(sectionid) {
+          let modules = [];
+          let sections = this.dropout.sections;
+          for (let i = 0; i < sections.length; i++) {
+            if (sections[i].sectionid == sectionid) {
+              if (sections[i].modules) {
+                modules = sections[i].modules;
+              }
+              break;
+            }
+          }
+          return modules;
+        },
+
+        get_user_module(moduleid) {
+          let module;
+          let cms = this.selected_user.cms.modules;
+          for (let i = 0; i < cms.length; i++) {
+            cms[i].id = Number(cms[i].id);
+            if (cms[i].id == moduleid) {
+              module = cms[i];
+              break;
+            }
+          }
+          return module;
+        },
+
+        table_headers() {
+          let headers = [
+            { text: "", value: "id", align: "center", sortable: false },
+            { text: this.strings.thead_name, value: "firstname" },
+            { text: this.strings.thead_lastname, value: "lastname" },
+            { text: this.strings.thead_progress, value: "progress_percentage" },
+          ];
+          return headers;
+        },
+
+        get_picture_url(userid) {
+          return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;
+        },
+
+        get_user_fullname() {
+          return `${this.selected_user.firstname} ${this.selected_user.lastname}`;
+        },
+
+        get_username() {
+          return `@${this.selected_user.username}`;
+        },
+
+        see_profile() {
+          let id = this.selected_user.id;
+          let url =
+            M.cfg.wwwroot +
+            "/user/view.php?id=" +
+            id +
+            "&course=" +
+            vue.courseid;
+          window.open(url);
+        },
+
+        get_progress_message() {
+          let module_label = this.strings.modules_label;
+          let finished_label = this.strings.finisheds_label;
+          if (this.selected_user.cms.complete == 1) {
+            module_label = this.strings.module_label;
+            finished_label = this.strings.finished_label;
+          }
+          return `${this.selected_user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.dropout.total_cms}`;
+        },
+
+        get_progress_percentage() {
+          return `${this.selected_user.progress_percentage} %`;
+        },
+
+        get_student_grade() {
+          let grade = this.selected_user.coursegrade;
+          grade.finalgrade = Number(grade.finalgrade);
+          grade.maxgrade = Number(grade.maxgrade);
+          let student_grade = this.isInt(grade.finalgrade)
+            ? grade.finalgrade
+            : grade.finalgrade.toFixed(2);
+          let max_grade = this.isInt(grade.maxgrade)
+            ? grade.maxgrade
+            : grade.maxgrade.toFixed(2);
+          return `${student_grade}/${max_grade}`;
+        },
+
+        get_sendmail_user_text() {
+          return `${this.strings.send_mail_to_user} ${this.selected_user.firstname}`;
+        },
+
+        sendmail(type) {
+          this.strings.email_strings.subject =
+            this.strings.email_strings.subject_prefix;
+          this.modulename = "course";
+          this.moduleid = this.courseid;
+          if (type == 1) {
+            this.email_object_name = this.selected_user.username;
+            this.email_users = [this.selected_user];
+            this.email_dialog = true;
+          } else if (type == 2) {
+            if (!isNaN(parseInt(this.selected_cluster.number))) {
+              this.email_object_name =
+                parseInt(this.selected_cluster.number) + 1;
+            } else {
+              this.email_object_name = "unknown";
+            }
+            this.email_users = this.cluster_users;
+            this.email_dialog = true;
+          }
+        },
+
+        update_email_dialog(value) {
+          this.email_dialog = value;
+        },
+
+        update_modules_dialog(value) {
+          this.modules_dialog = value;
+        },
+
+        isInt(n) {
+          return n % 1 === 0;
+        },
+
+        generate_dropout_data() {
+          this.loading = true;
+          this.errors = [];
+          let data = {
+            action: "dropoutdata",
+            userid: this.userid,
+            courseid: this.courseid,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                location.reload();
+              } else {
+                this.error_messages.push(this.strings.error_network);
+              }
             })
-        }
+            .catch((e) => {
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              this.loading = false;
+            });
+          return this.data;
+        },
 
-        return {
-            init: init
-        };
-    });
\ No newline at end of file
+        open_chart_help(chart) {
+          let contents = [];
+          let action = "";
+          let objectType = "";
+          let objectName = "";
+          let objectDescription = "";
+          if (chart == "group_students") {
+            contents.push({
+              title: this.strings.group_students_help_title,
+              description: this.strings.group_students_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.group_students_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "group_student";
+            objectDescription =
+              "Help section that provides information about the group students section";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "modules_access") {
+            contents.push({
+              title: this.strings.modules_access_help_title,
+              description: this.strings.modules_access_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.modules_access_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.modules_access_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "modules_access";
+            objectDescription =
+              "Help section that provides information about the modules access chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "week_modules") {
+            contents.push({
+              title: this.strings.week_modules_help_title,
+              description: this.strings.week_modules_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.week_modules_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.week_modules_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "week_modules";
+            objectDescription =
+              "Help section that provides information about the week modules chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "sessions_evolution") {
+            contents.push({
+              title: this.strings.sessions_evolution_help_title,
+              description: this.strings.sessions_evolution_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.sessions_evolution_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.sessions_evolution_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "sessions_evolution";
+            objectDescription =
+              "Help section that provides information about the sessions evolution chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "user_grades") {
+            contents.push({
+              title: this.strings.user_grades_help_title,
+              description: this.strings.user_grades_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.user_grades_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.user_grades_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "user_grades";
+            objectDescription =
+              "Help section that provides information about the user grades chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          }
+          this.help_contents = contents;
+          if (this.help_contents.length) {
+            this.help_dialog = true;
+          }
+        },
+
+        update_help_dialog(value) {
+          this.help_dialog = value;
+        },
+
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
+
+        setGraphicsEventListeners() {
+          let graphics = document.querySelectorAll(".highcharts-container");
+          graphics[0].id = "courseRessources";
+          graphics[1].id = "weekRessources";
+          graphics[2].id = "sessionsAndInvestedTime";
+          graphics[3].id = "qualifications";
+          graphics.forEach((graph) => {
+            graph.addEventListener("mouseenter", vue.addLogsViewGraphic);
+          });
+        },
+
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "courseRessources":
+              action = "viewed";
+              objectName = vue.selected_user.username + "_modules_access";
+              objectType = "chart";
+              objectDescription = "Bar chart that shows";
+              break;
+            case "weekRessources":
+              action = "viewed";
+              objectName = vue.selected_user.username + "_week_modules";
+              objectType = "chart";
+              objectDescription = "Chart showing";
+              break;
+            case "sessionsAndInvestedTime":
+              action = "viewed";
+              objectName = vue.selected_user.username + "_sessions_evolution";
+              objectType = "chart";
+              objectDescription = "Chart showing ";
+              break;
+            case "qualifications":
+              action = "viewed";
+              objectName = vue.selected_user.username + "_user_grades";
+              objectType = "chart";
+              objectDescription = "Chart showing ";
+              break;
+            default:
+              action = "viewed";
+              objectName = "";
+              objectType = "chart";
+              objectDescription = "A chart";
+          }
+          vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
+
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "DROPOUT",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
+            })
+            .catch((e) => {});
+        },
+      },
+    });
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/grades.js b/notemyprogress/amd/src/grades.js
index 2970e5eb3d7751eed1bcf0b1f0ed3ee0285a9abd..f7416714393828096524c4001c2d63fbedbcbb51 100644
--- a/notemyprogress/amd/src/grades.js
+++ b/notemyprogress/amd/src/grades.js
@@ -1,569 +1,689 @@
-define(["local_notemyprogress/vue",
-        "local_notemyprogress/vuetify",
-        "local_notemyprogress/axios",
-        "local_notemyprogress/moment",
-        "local_notemyprogress/pagination",
-        "local_notemyprogress/chartdynamic",
-        "local_notemyprogress/pageheader",
-        "local_notemyprogress/emailform",
-        "local_notemyprogress/helpdialog",
-    ],
-    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, PageHeader, EmailForm, HelpDialog) {
-        "use strict";
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartdynamic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/emailform",
+  "local_notemyprogress/helpdialog",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  Pagination,
+  ChartDynamic,
+  PageHeader,
+  EmailForm,
+  HelpDialog
+) {
+  "use strict";
 
-        function init(content) {
-            // console.log(content);
-            Vue.use(Vuetify);
-            Vue.component('pagination', Pagination);
-            Vue.component('chart', ChartDynamic);
-            Vue.component('pageheader', PageHeader);
-            Vue.component('emailform', EmailForm);
-            Vue.component('helpdialog', HelpDialog);
-            let vue = new Vue({
-                delimiters: ["[[", "]]"],
-                el: "#grades",
-                vuetify: new Vuetify(),
-                data() {
-                    return {
-                        strings : content.strings,
-                        groups : content.groups,
-                        userid : content.userid,
-                        courseid : content.courseid,
-                        timezone : content.timezone,
-                        render_has : content.profile_render,
-                        loading : false,
-                        errors : [],
-                        pages : content.pages,
+  function init(content) {
+    // //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartDynamic);
+    Vue.component("pageheader", PageHeader);
+    Vue.component("emailform", EmailForm);
+    Vue.component("helpdialog", HelpDialog);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#grades",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          loading: false,
+          errors: [],
+          pages: content.pages,
 
-                        grades: content.grades,
-                        grade_items_average_colors: content.grade_items_average_colors,
-                        item_grades_details_colors: content.item_grades_details_colors,
-                        item_grades_distribution_colors: content.item_grades_distribution_colors,
-                        default_category: null,
-                        average_categories: [],
-                        average_data: [],
-                        selected_items: [],
-                        item_details: [],
+          grades: content.grades,
+          grade_items_average_colors: content.grade_items_average_colors,
+          item_grades_details_colors: content.item_grades_details_colors,
+          item_grades_distribution_colors:
+            content.item_grades_distribution_colors,
+          default_category: null,
+          average_categories: [],
+          average_data: [],
+          selected_items: [],
+          item_details: [],
 
-                        grade_item_title: "",
-                        grade_item_details_categories: [],
-                        grade_item_details_data: [],
+          grade_item_title: "",
+          grade_item_details_categories: [],
+          grade_item_details_data: [],
 
-                        grade_item_distribution_categories: [],
-                        grade_item_distribution_data: [],
+          grade_item_distribution_categories: [],
+          grade_item_distribution_data: [],
 
-                        selected_item: null,
+          selected_item: null,
 
-                        grade_item_users: null,
-                        selected_users: [],
-                        dialog : false,
-                        modulename : "",
-                        moduleid : false,
-                        email_strings: content.strings.email_strings,
+          grade_item_users: null,
+          selected_users: [],
+          dialog: false,
+          modulename: "",
+          moduleid: false,
+          email_strings: content.strings.email_strings,
 
-                        help_dialog: false,
-                        help_contents: [],
-                        email_object_name: "",
+          help_dialog: false,
+          help_contents: [],
+          email_object_name: "",
 
-                        course_name: "",
-                    }
-                },
-                beforeMount(){
-                    if (this.grades.categories.length) {
-                        this.default_category = this.grades.categories[0];
-                        this.calculate_chart_items_average(this.default_category.items);
-                        let item = this.find_first_grade_item(this.default_category.items);
-                        this.update_detail_charts(item);
-                        this.course_name = this.grades.categories[0].name.replace(/ /g, "_");
-                    };
-                },
-                mounted(){
-                    document.querySelector("#sessions-loader").style.display = "none";
-                    document.querySelector("#grades").style.display = "block";
-                    setTimeout(function() {
-                        vue.setGraphicsEventListeners();
-                        vue.addListenersCourse();
-                    }, 500);
-                },
-                methods : {
-                    get_help_content(){
-                        let contents = [];
-                        contents.push({
-                            title: this.strings.section_help_title,
-                            description: this.strings.section_help_description,
-                        });
-                        return contents;
-                    },
+          course_name: "",
+        };
+      },
+      beforeMount() {
+        if (this.grades.categories.length) {
+          this.default_category = this.grades.categories[0];
+          this.calculate_chart_items_average(this.default_category.items);
+          let item = this.find_first_grade_item(this.default_category.items);
+          this.update_detail_charts(item);
+          this.course_name = this.grades.categories[0].name.replace(/ /g, "_");
+        }
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#grades").style.display = "block";
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+          vue.addListenersCourse();
+        }, 500);
+      },
+      methods: {
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
 
-                    change_category(items) {
-                        this.calculate_chart_items_average(items);
-                        let item = this.find_first_grade_item(items);
-                        this.update_detail_charts(item);
-                    },
+        change_category(items) {
+          this.calculate_chart_items_average(items);
+          let item = this.find_first_grade_item(items);
+          this.update_detail_charts(item);
+        },
 
-                    addLogsName(items) {
-                        setTimeout(function() {
-                            vue.addLogsIntoDB("viewed", "course_"+vue.course_name, "course", "Selected a course");
-                        }, 500);
-                        this.change_category(items);
-                    },
+        addLogsName(items) {
+          setTimeout(function () {
+            vue.addLogsIntoDB(
+              "viewed",
+              "course_" + vue.course_name,
+              "course",
+              "Selected a course"
+            );
+          }, 500);
+          this.change_category(items);
+        },
 
-                    build_grade_items_average_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'column',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {
-                            text: null
-                        };
-                        chart.colors = this.grade_items_average_colors;
-                        chart.xAxis = {
-                            categories: this.average_categories
-                        };
-                        chart.legend = {
-                            enabled: false
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                cursor: 'pointer',
-                                point: {
-                                    events: {
-                                        click: function () {
-                                            let position = this.x;
-                                            let item = vue.selected_items[position];
-                                            vue.update_detail_charts(item);
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            formatter: function() {
-                                let position = this.points[0].point.x;
-                                let value = this.y;
-                                let item = vue.selected_items[position];
-                                let count = item.gradecount;
-                                let name = this.x;
-                                let view_details = vue.strings.view_details;
-                                let average = Number(item.average);
-                                let students_label = vue.strings.grades_tooltip_students;
-                                if (count == 1) {
-                                    students_label = vue.strings.grades_tooltip_student;
-                                }
-                                value = vue.isInt(value) ? value : value.toFixed(2);
-                                average = vue.isInt(average) ? average : average.toFixed(2);
-                                let grademax = item.grademax;
-                                let text = '<b>' + name + '<b> <br/>' +
-                                    vue.strings.grades_tooltip_average + ': ' + average + ' (' + value + ' %)<br/>' +
-                                    vue.strings.grades_tooltip_grade + ': ' + grademax + '<br/>' +
-                                    count + ' ' + students_label + ' ' + vue.grades.student_count + '<br/>' +
-                                    '<i>' + view_details + '</i>';
-                                return text;
-                            }
-                        };
-                        chart.yAxis = [{
-                            allowDecimals: false,
-                            max: 100,
-                            labels: {
-                                format: '{value} %',
-                            },
-                            title: {
-                                text: this.strings.grades_yaxis_title,
-                            }
-                        }];
-                        chart.series = [{
-                            data: this.average_data,
-                        }];
-                        return chart;
-                    },
+        build_grade_items_average_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = {
+            text: null,
+          };
+          chart.colors = this.grade_items_average_colors;
+          chart.xAxis = {
+            categories: this.average_categories,
+          };
+          chart.legend = {
+            enabled: false,
+          };
+          chart.plotOptions = {
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    let position = this.x;
+                    let item = vue.selected_items[position];
+                    vue.update_detail_charts(item);
+                  },
+                },
+              },
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            formatter: function () {
+              let position = this.points[0].point.x;
+              let value = this.y;
+              let item = vue.selected_items[position];
+              let count = item.gradecount;
+              let name = this.x;
+              let view_details = vue.strings.view_details;
+              let average = Number(item.average);
+              let students_label = vue.strings.grades_tooltip_students;
+              if (count == 1) {
+                students_label = vue.strings.grades_tooltip_student;
+              }
+              value = vue.isInt(value) ? value : value.toFixed(2);
+              average = vue.isInt(average) ? average : average.toFixed(2);
+              let grademax = item.grademax;
+              let text =
+                "<b>" +
+                name +
+                "<b> <br/>" +
+                vue.strings.grades_tooltip_average +
+                ": " +
+                average +
+                " (" +
+                value +
+                " %)<br/>" +
+                vue.strings.grades_tooltip_grade +
+                ": " +
+                grademax +
+                "<br/>" +
+                count +
+                " " +
+                students_label +
+                " " +
+                vue.grades.student_count +
+                "<br/>" +
+                "<i>" +
+                view_details +
+                "</i>";
+              return text;
+            },
+          };
+          chart.yAxis = [
+            {
+              allowDecimals: false,
+              max: 100,
+              labels: {
+                format: "{value} %",
+              },
+              title: {
+                text: this.strings.grades_yaxis_title,
+              },
+            },
+          ];
+          chart.series = [
+            {
+              data: this.average_data,
+            },
+          ];
+          return chart;
+        },
 
-                    build_item_grades_details_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'bar',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {
-                            text: null,
-                        };
-                        chart.colors = this.item_grades_details_colors;
-                        chart.xAxis = {
-                            type: 'category',
-                        };
-                        chart.legend = {
-                            enabled: false
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            formatter: function() {
-                                let category = this.points[0].key;
-                                let name = vue.selected_item.itemname;
-                                let maxgrade = vue.selected_item.grademax;
-                                let grade = this.y;
-                                grade = vue.isInt(grade) ? grade : grade.toFixed(2);
-                                let text = '<b>' + name + '<b> <br/>' +
-                                    category + ': ' + grade + '/' + maxgrade + '<br/>';
-                                return text;
-                            }
-                        };
-                        chart.yAxis = [{
-                            title: {
-                                enabled: false,
-                            }
-                        }];
-                        chart.series = [{
-                            colorByPoint: true,
-                            data: this.grade_item_details_data,
-                        }];
-                        return chart;
-                    },
+        build_item_grades_details_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = {
+            text: null,
+          };
+          chart.colors = this.item_grades_details_colors;
+          chart.xAxis = {
+            type: "category",
+          };
+          chart.legend = {
+            enabled: false,
+          };
+          chart.tooltip = {
+            shared: true,
+            formatter: function () {
+              let category = this.points[0].key;
+              let name = vue.selected_item.itemname;
+              let maxgrade = vue.selected_item.grademax;
+              let grade = this.y;
+              grade = vue.isInt(grade) ? grade : grade.toFixed(2);
+              let text =
+                "<b>" +
+                name +
+                "<b> <br/>" +
+                category +
+                ": " +
+                grade +
+                "/" +
+                maxgrade +
+                "<br/>";
+              return text;
+            },
+          };
+          chart.yAxis = [
+            {
+              title: {
+                enabled: false,
+              },
+            },
+          ];
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: this.grade_item_details_data,
+            },
+          ];
+          return chart;
+        },
 
-                    build_item_grades_distribution_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {
-                            text: null,
-                        };
-                        chart.colors = this.item_grades_distribution_colors;
-                        chart.xAxis = {
-                            categories: this.grade_item_distribution_categories
-                        };
-                        chart.yAxis = [{
-                            title: {
-                                text: this.strings.grades_distribution_yaxis_title,
-                            },
-                            allowDecimals: false,
-                        }];
-                        chart.legend = {
-                            enabled: false
-                        };
-                        chart.tooltip = {
-                            formatter: function() {
-                                let prefix = vue.strings.grades_distribution_tooltip_prefix;
-                                let suffix = vue.strings.grades_distribution_tooltip_suffix;
-                                let send_mail = vue.strings.send_mail;
-                                let name = this.x;
-                                let value = this.y;
-                                let students_label = vue.strings.students_text;
-                                if (value == 1) {
-                                    students_label = vue.strings.student_text;
-                                }
-                                let text = '<b>' + prefix + ': </b> '+ name + ' <br/>'
-                                    + value + ' ' + students_label + ' ' + suffix + ' <br/>'
-                                    + '<i>' + send_mail + '</i>';
-                                return text;
-                            }
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                stacking: 'normal',
-                                borderWidth: 1,
-                                pointPadding: 0,
-                                groupPadding: 0,
-                            },
-                            column:{
-                                point:{
-                                    events: {
-                                        click: function () {
-                                            vue.email_object_name="item_grades_distribution";
-                                            let position = this.x;
-                                            vue.selected_users = vue.grade_item_users[position];
-                                            vue.email_strings.subject = vue.email_strings.subject_prefix
-                                                + " - " + vue.selected_item.itemname;
-                                            vue.dialog = true;
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.series = [{
-                            type: 'column',
-                            data: this.grade_item_distribution_data
-                        }, {
-                            type: 'spline',
-                            data: this.grade_item_distribution_data,
-                            marker: {
-                                lineWidth: 1,
-                            }
-                        }];
-                        return chart;
-                    },
+        build_item_grades_distribution_chart() {
+          let chart = new Object();
+          chart.chart = {
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = {
+            text: null,
+          };
+          chart.colors = this.item_grades_distribution_colors;
+          chart.xAxis = {
+            categories: this.grade_item_distribution_categories,
+          };
+          chart.yAxis = [
+            {
+              title: {
+                text: this.strings.grades_distribution_yaxis_title,
+              },
+              allowDecimals: false,
+            },
+          ];
+          chart.legend = {
+            enabled: false,
+          };
+          chart.tooltip = {
+            formatter: function () {
+              let prefix = vue.strings.grades_distribution_tooltip_prefix;
+              let suffix = vue.strings.grades_distribution_tooltip_suffix;
+              let send_mail = vue.strings.send_mail;
+              let name = this.x;
+              let value = this.y;
+              let students_label = vue.strings.students_text;
+              if (value == 1) {
+                students_label = vue.strings.student_text;
+              }
+              let text =
+                "<b>" +
+                prefix +
+                ": </b> " +
+                name +
+                " <br/>" +
+                value +
+                " " +
+                students_label +
+                " " +
+                suffix +
+                " <br/>" +
+                "<i>" +
+                send_mail +
+                "</i>";
+              return text;
+            },
+          };
+          chart.plotOptions = {
+            series: {
+              stacking: "normal",
+              borderWidth: 1,
+              pointPadding: 0,
+              groupPadding: 0,
+            },
+            column: {
+              point: {
+                events: {
+                  click: function () {
+                    vue.email_object_name = "item_grades_distribution";
+                    let position = this.x;
+                    vue.selected_users = vue.grade_item_users[position];
+                    vue.email_strings.subject =
+                      vue.email_strings.subject_prefix +
+                      " - " +
+                      vue.selected_item.itemname;
+                    vue.dialog = true;
+                  },
+                },
+              },
+            },
+          };
+          chart.series = [
+            {
+              type: "column",
+              data: this.grade_item_distribution_data,
+            },
+            {
+              type: "spline",
+              data: this.grade_item_distribution_data,
+              marker: {
+                lineWidth: 1,
+              },
+            },
+          ];
+          return chart;
+        },
 
-                    calculate_chart_items_average(items) {
-                        let values = [];
-                        let categories = [];
-                        items.forEach(item => {
-                            values.push(item.average_percentage);
-                            categories.push(item.itemname);
-                        });
-                        this.average_categories = categories;
-                        this.average_data = values;
-                        this.selected_items = items;
-                    },
+        calculate_chart_items_average(items) {
+          let values = [];
+          let categories = [];
+          items.forEach((item) => {
+            values.push(item.average_percentage);
+            categories.push(item.itemname);
+          });
+          this.average_categories = categories;
+          this.average_data = values;
+          this.selected_items = items;
+        },
 
-                    update_detail_charts (item) {
-                        this.modulename = item.itemmodule;
-                        this.moduleid = item.coursemoduleid;
-                        this.grade_item_title = item.itemname;
-                        this.calculate_chart_item_grade_detail(item);
-                        this.calculate_chart_item_grades_distribution(item);
-                        this.addLogsIntoDB("viewed", item.itemname, "grade_item", "Details about the "+item.itemname+" grade item");
-                    },
+        update_detail_charts(item) {
+          this.modulename = item.itemmodule;
+          this.moduleid = item.coursemoduleid;
+          this.grade_item_title = item.itemname;
+          this.calculate_chart_item_grade_detail(item);
+          this.calculate_chart_item_grades_distribution(item);
+          this.addLogsIntoDB(
+            "viewed",
+            item.itemname,
+            "grade_item",
+            "Details about the " + item.itemname + " grade item"
+          );
+        },
 
-                    calculate_chart_item_grade_detail(item) {
-                        this.selected_item = item;
-                        let item_data = [{
-                            name: this.strings.grades_best_grade,
-                            y: Number(item.maxrating) || 0
-                        },{
-                            name: this.strings.grades_average_grade,
-                            y: Number(item.average) || 0
-                        }, {
-                            name: this.strings.grades_worst_grade,
-                            y: Number(item.minrating) || 0
-                        }];
-                        this.grade_item_details_data = item_data;
-                    },
+        calculate_chart_item_grade_detail(item) {
+          this.selected_item = item;
+          let item_data = [
+            {
+              name: this.strings.grades_best_grade,
+              y: Number(item.maxrating) || 0,
+            },
+            {
+              name: this.strings.grades_average_grade,
+              y: Number(item.average) || 0,
+            },
+            {
+              name: this.strings.grades_worst_grade,
+              y: Number(item.minrating) || 0,
+            },
+          ];
+          this.grade_item_details_data = item_data;
+        },
 
-                    calculate_chart_item_grades_distribution(item) {
-                        let greater = this.strings.grades_greater_than;
-                        let smaller = this.strings.grades_smaller_than;
-                        let categories = [
-                            `${greater} 90%`,
-                            `${greater} 80%`,
-                            `${greater} 70%`,
-                            `${greater} 60%`,
-                            `${greater} 50%`,
-                            `${smaller} 50%`];
-                        let values = [0, 0, 0, 0, 0, 0];
-                        let users = [[], [], [], [], [], []];
-                        if (item) {
-                            let weights = [0.9, 0.8, 0.7, 0.6, 0.5, 0];
-                            let ranges = [];
-                            let grademax = item.grademax;
-                            let limit = grademax;
-                            weights.forEach(weight => {
-                                let grade = grademax * weight;
-                                ranges.push({ max: limit, min: grade, count: 0});
-                                limit = grade - 0.1;
-                            });
+        calculate_chart_item_grades_distribution(item) {
+          let greater = this.strings.grades_greater_than;
+          let smaller = this.strings.grades_smaller_than;
+          let categories = [
+            `${greater} 90%`,
+            `${greater} 80%`,
+            `${greater} 70%`,
+            `${greater} 60%`,
+            `${greater} 50%`,
+            `${smaller} 50%`,
+          ];
+          let values = [0, 0, 0, 0, 0, 0];
+          let users = [[], [], [], [], [], []];
+          if (item) {
+            let weights = [0.9, 0.8, 0.7, 0.6, 0.5, 0];
+            let ranges = [];
+            let grademax = item.grademax;
+            let limit = grademax;
+            weights.forEach((weight) => {
+              let grade = grademax * weight;
+              ranges.push({ max: limit, min: grade, count: 0 });
+              limit = grade - 0.1;
+            });
 
-                            item.grades.forEach(grade => {
-                                ranges.forEach((range, index) => {
-                                    if (grade.rawgrade >= range.min && grade.rawgrade <= range.max) {
-                                        range.count++;
-                                        users[index].push(grade.user);
-                                    }
-                                });
-                            });
+            item.grades.forEach((grade) => {
+              ranges.forEach((range, index) => {
+                if (
+                  grade.rawgrade >= range.min &&
+                  grade.rawgrade <= range.max
+                ) {
+                  range.count++;
+                  users[index].push(grade.user);
+                }
+              });
+            });
 
-                            values = [];
-                            ranges.forEach((range, index) => {
-                                let max = this.isInt(range.max) ? range.max : range.max.toFixed(1);
-                                let min = this.isInt(range.min) ? range.min : range.min.toFixed(1);
-                                let label = `${max} - ${min}<br/>${categories[index]}`;
-                                categories[index] = label;
-                                values.push(range.count);
-                            });
-                        }
-                        this.grade_item_users = users;
-                        this.grade_item_distribution_categories = categories,
-                        this.grade_item_distribution_data = values;
-                    },
+            values = [];
+            ranges.forEach((range, index) => {
+              let max = this.isInt(range.max)
+                ? range.max
+                : range.max.toFixed(1);
+              let min = this.isInt(range.min)
+                ? range.min
+                : range.min.toFixed(1);
+              let label = `${max} - ${min}<br/>${categories[index]}`;
+              categories[index] = label;
+              values.push(range.count);
+            });
+          }
+          this.grade_item_users = users;
+          (this.grade_item_distribution_categories = categories),
+            (this.grade_item_distribution_data = values);
+        },
 
-                    find_first_grade_item(items) {
-                        let item;
-                        if (items.length) {
-                            let count = items.length;
-                            for (let i = 0; i < count; i++) {
-                                if (items[i].maxrating > 0) {
-                                    item = items[i];
-                                    break;
-                                }
-                            }
-                            if (!item) {
-                                item = items[0];
-                            }
-                        }
-                        return item;
-                    },
+        find_first_grade_item(items) {
+          let item;
+          if (items.length) {
+            let count = items.length;
+            for (let i = 0; i < count; i++) {
+              if (items[i].maxrating > 0) {
+                item = items[i];
+                break;
+              }
+            }
+            if (!item) {
+              item = items[0];
+            }
+          }
+          return item;
+        },
 
-                    isInt(n) {
-                        return n % 1 === 0;
-                    },
+        isInt(n) {
+          return n % 1 === 0;
+        },
 
-                    update_dialog (value) {
-                        this.dialog = value;
-                    },
+        update_dialog(value) {
+          this.dialog = value;
+        },
 
-                    open_chart_help(chart) {
-                        let contents = [];
-                        var action = "";
-                        var objectName = "";
-                        var objectType = "";
-                        var objectDescription = "";
-                        if (chart == "grade_items_average") {
-                            contents.push({
-                                title: this.strings.grade_items_average_help_title,
-                                description: this.strings.grade_items_average_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.grade_items_average_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.grade_items_average_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "grade_items_average"
-                            objectDescription = "Help section that provides information about the grade items average chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "item_grades_details") {
-                            contents.push({
-                                title: this.strings.item_grades_details_help_title,
-                                description: this.strings.item_grades_details_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.item_grades_details_help_description_p2,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "item_grades_details";
-                            objectDescription = "Help section that provides information about the item grades details chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "item_grades_distribution") {
-                            contents.push({
-                                title: this.strings.item_grades_distribution_help_title,
-                                description: this.strings.item_grades_distribution_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.item_grades_distribution_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.item_grades_distribution_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "item_grades_distribution";
-                            objectDescription = "Help section that provides information about the item grades distribution chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        }
-                        this.help_contents = contents;
-                        if (this.help_contents.length) {
-                            this.help_dialog = true;
-                        }
-                    },
+        open_chart_help(chart) {
+          let contents = [];
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          if (chart == "grade_items_average") {
+            contents.push({
+              title: this.strings.grade_items_average_help_title,
+              description: this.strings.grade_items_average_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.grade_items_average_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.grade_items_average_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "grade_items_average";
+            objectDescription =
+              "Help section that provides information about the grade items average chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "item_grades_details") {
+            contents.push({
+              title: this.strings.item_grades_details_help_title,
+              description: this.strings.item_grades_details_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.item_grades_details_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "item_grades_details";
+            objectDescription =
+              "Help section that provides information about the item grades details chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "item_grades_distribution") {
+            contents.push({
+              title: this.strings.item_grades_distribution_help_title,
+              description:
+                this.strings.item_grades_distribution_help_description_p1,
+            });
+            contents.push({
+              description:
+                this.strings.item_grades_distribution_help_description_p2,
+            });
+            contents.push({
+              description:
+                this.strings.item_grades_distribution_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "item_grades_distribution";
+            objectDescription =
+              "Help section that provides information about the item grades distribution chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          }
+          this.help_contents = contents;
+          if (this.help_contents.length) {
+            this.help_dialog = true;
+          }
+        },
 
-                    update_help_dialog (value) {
-                        this.help_dialog = value;
-                    },
+        update_help_dialog(value) {
+          this.help_dialog = value;
+        },
 
-                    get_timezone(){
-                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`
-                        return information;
-                    },
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
 
-                    addListenersCourse() {
-                        let select = document.getElementsByClassName('v-input__slot');
-                        if(select.length>1) {
-                            select[1].addEventListener('click', function() {
-                                let childs = document.getElementsByClassName('v-list v-select-list v-sheet theme--light theme--light')[0].children;
-                                for(let i=0; i<childs.length;i++) {
-                                    childs[i].addEventListener('click', function() {
-                                        vue.course_name = this.children[0].innerText.replace(/ /g, "_");
-                                    }, {once: true});
-                                }
-                            })
-                        } else {
-                            setTimeout(vue.addListenersCourse, 500);
-                        }
-                    },
+        addListenersCourse() {
+          let select = document.getElementsByClassName("v-input__slot");
+          if (select.length > 1) {
+            select[1].addEventListener("click", function () {
+              let childs = document.getElementsByClassName(
+                "v-list v-select-list v-sheet theme--light theme--light"
+              )[0].children;
+              for (let i = 0; i < childs.length; i++) {
+                childs[i].addEventListener(
+                  "click",
+                  function () {
+                    vue.course_name = this.children[0].innerText.replace(
+                      / /g,
+                      "_"
+                    );
+                  },
+                  { once: true }
+                );
+              }
+            });
+          } else {
+            setTimeout(vue.addListenersCourse, 500);
+          }
+        },
 
-                    setGraphicsEventListeners() {
-                        //Ajoute les sondes pour lorsque l'utilisateur entre sur les différents graphiques
-                        let graphics = document.querySelectorAll('.highcharts-container');
-                        if(graphics.length<1) {
-                            setTimeout(vue.setGraphicsEventListeners, 500);
-                        } else {
-                            graphics[0].id="gradeItemsAverage";
-                            graphics[1].id="itemGradesDetails";
-                            graphics[2].id="itemGradesDistribution";
-                            graphics.forEach((graph) => {
-                                graph.addEventListener('mouseenter', this.addLogsViewGraphic);
-                            })
-                        }
-                    },
+        setGraphicsEventListeners() {
+          //Ajoute les sondes pour lorsque l'utilisateur entre sur les différents graphiques
+          let graphics = document.querySelectorAll(".highcharts-container");
+          if (graphics.length < 1) {
+            setTimeout(vue.setGraphicsEventListeners, 500);
+          } else {
+            graphics[0].id = "gradeItemsAverage";
+            graphics[1].id = "itemGradesDetails";
+            graphics[2].id = "itemGradesDistribution";
+            graphics.forEach((graph) => {
+              graph.addEventListener("mouseenter", this.addLogsViewGraphic);
+            });
+          }
+        },
 
-                    addLogsViewGraphic(e) {
-                        event.stopPropagation();
-                        var action = "";
-                        var objectName = "";
-                        var objectType = "";
-                        var objectDescription = "";
-                        switch(e.target.id) {
-                            case "gradeItemsAverage":
-                                action = "viewed";
-                                objectName = vue.selected_item.itemname+"_grade_items_average";
-                                objectType = "chart";
-                                objectDescription = "Bar chart that shows the average grade for each items of the course";
-                                break;
-                            case "itemGradesDetails":
-                                action = "viewed";
-                                objectName = vue.selected_item.itemname+"_item_grades_details";
-                                objectType = "chart";
-                                objectDescription = "Chart showing details about the selected grades item";
-                                break;
-                            case "itemGradesDistribution":
-                                action = "viewed";
-                                objectName = vue.selected_item.itemname+"_item_grades_distribution";
-                                objectType = "chart";
-                                objectDescription = "Chart showing the distribution of the grades for a selected grades item";
-                                break;
-                            default:
-                                action = "viewed";
-                                objectName = "";
-                                objectType = "chart";
-                                objectDescription = "A chart";
-                                break;
-                        }
-                        this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                    },
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "gradeItemsAverage":
+              action = "viewed";
+              objectName = vue.selected_item.itemname + "_grade_items_average";
+              objectType = "chart";
+              objectDescription =
+                "Bar chart that shows the average grade for each items of the course";
+              break;
+            case "itemGradesDetails":
+              action = "viewed";
+              objectName = vue.selected_item.itemname + "_item_grades_details";
+              objectType = "chart";
+              objectDescription =
+                "Chart showing details about the selected grades item";
+              break;
+            case "itemGradesDistribution":
+              action = "viewed";
+              objectName =
+                vue.selected_item.itemname + "_item_grades_distribution";
+              objectType = "chart";
+              objectDescription =
+                "Chart showing the distribution of the grades for a selected grades item";
+              break;
+            default:
+              action = "viewed";
+              objectName = "";
+              objectType = "chart";
+              objectDescription = "A chart";
+              break;
+          }
+          this.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
 
-                    addLogsIntoDB(action, objectName, objectType, objectDescription) {
-                        let data = {
-                            courseid: content.courseid,
-                            userid: content.userid,
-                            action: "addLogs",
-                            sectionname: "GRADES_MONITORING",
-                            actiontype: action,
-                            objectType: objectType,
-                            objectName: objectName,
-                            currentUrl: document.location.href,
-                            objectDescription: objectDescription,
-                        };
-                        Axios({
-                            method:'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params : data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                            }
-                        }).catch((e) => {
-                        });
-                    },
-                }
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "GRADES_MONITORING",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
             })
+            .catch((e) => {});
+        },
+      },
+    });
+  }
 
-        }
-
-        return {
-            init : init
-        };
-    });
\ No newline at end of file
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/graph.js b/notemyprogress/amd/src/graph.js
index 826e9660776491fc11363010d33748b83ecbba46..29d561221baa28fc029df7fb23a8682c6f796640 100644
--- a/notemyprogress/amd/src/graph.js
+++ b/notemyprogress/amd/src/graph.js
@@ -1,37 +1,35 @@
-define(["local_notemyprogress/vue",
-        "local_notemyprogress/vuetify",
-        "local_notemyprogress/chartdynamic",
-    ],
-    function(Vue, Vuetify, ChartDynamic) {
-        "use strict";
-        let wwwroot = M.cfg.wwwroot;
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/chartdynamic",
+], function (Vue, Vuetify, ChartDynamic) {
+  "use strict";
+  let wwwroot = M.cfg.wwwroot;
 
-        function init(content) {
-            console.log({chart: content.chart});
+  function init(content) {
+    //console.log({ chart: content.chart });
 
-            Vue.use(Vuetify);
-            Vue.component('chart', ChartDynamic);
-
-            new Vue({
-                delimiters: ["[[", "]]"],
-                el: "#graph1",
-                vuetify: new Vuetify(),
-                data() {
-                    return {
-                        chart: content.chart,
-                    };
-                },
-                mounted() {
-                    document.querySelector("#pd-loader").style.display = "none";
-                    document.querySelector("#graph1").style.display = "block";
-                },
-                methods: {
-                }
-            });
-
-        }
+    Vue.use(Vuetify);
+    Vue.component("chart", ChartDynamic);
 
+    new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#graph1",
+      vuetify: new Vuetify(),
+      data() {
         return {
-            init: init
+          chart: content.chart,
         };
-    });
\ No newline at end of file
+      },
+      mounted() {
+        document.querySelector("#pd-loader").style.display = "none";
+        document.querySelector("#graph1").style.display = "block";
+      },
+      methods: {},
+    });
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/pagination.js b/notemyprogress/amd/src/pagination.js
index 96be5d93d3bb4c8acb08f96c08fd55749b270060..f77683da10e6b12f69d9d14563abe34041dab876 100644
--- a/notemyprogress/amd/src/pagination.js
+++ b/notemyprogress/amd/src/pagination.js
@@ -1,6 +1,6 @@
-define([], function (){
-    const pagination = {
-        template:`
+define([], function () {
+  const pagination = {
+    template: `
                 <v-main mt-10>
                     <v-layout class="mb-2" justify-center>
                         <span v-text="title" class="notemyprogress-sub-title"></span>
@@ -25,37 +25,36 @@ define([], function (){
                     <v-divider></v-divider>
                </v-main>
                 `,
-        props:['pages','name','nameseparator','title'],
-        data(){
-            return{
-            }
-        },
-        methods : {
-            get_week_dates(week){
-                return `${week.weekstart} ${this.nameseparator} ${week.weekend}`;
-            },
-            update_selected_week(index_page){
-                this.loading = true
-                let page = this.change_selected_week(index_page);
-                this.$emit('changepage',this.get_selected_week());
-            },
-            change_selected_week(selected_page){
-                let current_selection = this.get_selected_week();
-                current_selection = this.pages.indexOf(current_selection);
-                this.pages[current_selection].selected = false;
-                this.pages[selected_page].selected = true;
-                return this.pages[selected_page];
-            },
-            get_selected_week(){
-                let selected = null
-                this.pages.forEach((page) => {
-                    if(page.selected){
-                        selected = page;
-                    }
-                })
-                return selected;
-            },
-        },
-    }
-    return pagination;
-})
\ No newline at end of file
+    props: ["pages", "name", "nameseparator", "title"],
+    data() {
+      return {};
+    },
+    methods: {
+      get_week_dates(week) {
+        return `${week.weekstart} ${this.nameseparator} ${week.weekend}`;
+      },
+      update_selected_week(index_page) {
+        this.loading = true;
+        let page = this.change_selected_week(index_page);
+        this.$emit("changepage", this.get_selected_week());
+      },
+      change_selected_week(selected_page) {
+        let current_selection = this.get_selected_week();
+        current_selection = this.pages.indexOf(current_selection);
+        this.pages[current_selection].selected = false;
+        this.pages[selected_page].selected = true;
+        return this.pages[selected_page];
+      },
+      get_selected_week() {
+        let selected = null;
+        this.pages.forEach((page) => {
+          if (page.selected) {
+            selected = page;
+          }
+        });
+        return selected;
+      },
+    },
+  };
+  return pagination;
+});
diff --git a/notemyprogress/amd/src/prueba.js b/notemyprogress/amd/src/prueba.js
index db217408c654aba472cb451222bf273ecf8ad9da..87c409938a7a8d967682aaf5cc90b85b85a73881 100644
--- a/notemyprogress/amd/src/prueba.js
+++ b/notemyprogress/amd/src/prueba.js
@@ -1,56 +1,64 @@
-define(["local_notemyprogress/vue",
-        "local_notemyprogress/vuetify",
-        "local_notemyprogress/axios",
-        "local_notemyprogress/moment",
-        "local_notemyprogress/pagination",
-        "local_notemyprogress/chartdynamic",
-        "local_notemyprogress/pageheader",
-    ],
-    function(Vue, Vuetify, Axios, Moment, Pagination, ChartDynamic, Pageheader) {
-        "use strict";
-
-        function init(content) {
-            console.log(content);
-            Vue.use(Vuetify)
-            Vue.component('pagination', Pagination);
-            Vue.component('chart', ChartDynamic);
-            Vue.component('pageheader', Pageheader);
-            let vue = new Vue({
-                delimiters: ["[[", "]]"],
-                el: "#prueba",
-                vuetify: new Vuetify(),
-                data() {
-                    return {
-                        strings : content.strings,
-                        groups : content.groups,
-                        userid : content.userid,
-                        courseid : content.courseid,
-                        timezone : content.timezone,
-                        render_has : content.profile_render,
-                        loading : false,
-                        errors : [],
-                        pages : content.pages,
-                    }
-                },
-                mounted(){
-                    document.querySelector("#sessions-loader").style.display = "none";
-                    document.querySelector("#prueba").style.display = "block";
-                },
-                methods : {
-                    get_help_content(){
-                        let helpcontents = `Texto de Ayuda`;
-                        return helpcontents;
-                    },
-
-                    get_timezone(){
-                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`
-                        return information;
-                    },
-                }
-            })
-        }
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartdynamic",
+  "local_notemyprogress/pageheader",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  Pagination,
+  ChartDynamic,
+  Pageheader
+) {
+  "use strict";
 
+  function init(content) {
+    //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartDynamic);
+    Vue.component("pageheader", Pageheader);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#prueba",
+      vuetify: new Vuetify(),
+      data() {
         return {
-            init : init
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          loading: false,
+          errors: [],
+          pages: content.pages,
         };
-    });
\ No newline at end of file
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#prueba").style.display = "block";
+      },
+      methods: {
+        get_help_content() {
+          let helpcontents = `Texto de Ayuda`;
+          return helpcontents;
+        },
+
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
+      },
+    });
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/quiz.js b/notemyprogress/amd/src/quiz.js
index 47a73949bbe7f25b1afeba55b5ebad849576eaa4..5bc364b6bdf80be62e3f6a3dcfef79449883c6ce 100644
--- a/notemyprogress/amd/src/quiz.js
+++ b/notemyprogress/amd/src/quiz.js
@@ -467,7 +467,7 @@ define([
           Axios({
             method: "get",
             url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-            data: data,
+            params: data,
           })
             .then((response) => {
               if (response.status == 200 && response.data.ok) {
diff --git a/notemyprogress/amd/src/sessions.js b/notemyprogress/amd/src/sessions.js
index 8d9df751b9905c8312ec27ab41c406ebc347749a..b7e38ad6367c94adbb9180016693b869aadbcd06 100644
--- a/notemyprogress/amd/src/sessions.js
+++ b/notemyprogress/amd/src/sessions.js
@@ -60,6 +60,7 @@ define([
         setTimeout(function () {
           vue.setGraphicsEventListeners();
         }, 500);
+        vue.setGraphicsEventListeners();
       },
       methods: {
         get_help_content() {
@@ -183,9 +184,7 @@ define([
             backgroundColor: null,
             style: { fontFamily: "poppins" },
           };
-          chart.title = {
-            text: null,
-          };
+          chart.title = { text: null };
           chart.colors = this.inverted_time_colors;
           chart.xAxis = {
             type: "category",
diff --git a/notemyprogress/amd/src/setweeks.js b/notemyprogress/amd/src/setweeks.js
index 97747ff54aaaec5c2f70c023b3278d342eb12f20..1b41697c4d5c776c641ae34c508a22ea31e7e940 100644
--- a/notemyprogress/amd/src/setweeks.js
+++ b/notemyprogress/amd/src/setweeks.js
@@ -218,34 +218,34 @@ define([
                 params: data,
               })
                 .then((response) => {
-                  console.log("then1");
+                  //console.log("then1");
                   if (response.status == 200 && response.data.ok) {
-                    console.log("then1.2");
+                    //console.log("then1.2");
                     this.settings = response.data.data.settings;
-                    console.log("then1.3");
+                    //console.log("then1.3");
                     Alertify.success(this.strings.save_successful);
-                    console.log("then1.4");
+                    //console.log("then1.4");
                     this.save_successful = true;
-                    console.log("then1.5");
+                    //console.log("then1.5");
                   } else {
-                    console.log("then1.6");
+                    //console.log("then1.6");
                     Alertify.error(this.strings.error_network);
-                    console.log("then1.7");
+                    //console.log("then1.7");
                     this.error_messages.push(this.strings.error_network);
-                    console.log("then1.8");
+                    //console.log("then1.8");
                   }
                 })
                 .catch((e) => {
-                  console.log("catch1");
+                  //console.log("catch1");
                   Alertify.error(this.strings.error_network);
-                  console.log("catch2");
+                  //console.log("catch2");
                   this.error_messages.push(this.strings.error_network);
-                  console.log("catch3");
+                  //console.log("catch3");
                 })
                 .finally(() => {
-                  console.log("finally1");
+                  //console.log("finally1");
                   this.saving_loader = false;
-                  console.log("finally2");
+                  //console.log("finally2");
                   //this.addLogsIntoDB("saved", "configuration", "weeks", "Saved a new configuration for the weeks !");
                 });
             },
diff --git a/notemyprogress/amd/src/student.js b/notemyprogress/amd/src/student.js
index dd2da477a1d7067dcf175c55b195db735aba1e10..60b337b00d107f8e0989eb09bea73452f5ebef94 100644
--- a/notemyprogress/amd/src/student.js
+++ b/notemyprogress/amd/src/student.js
@@ -1,647 +1,782 @@
-define(["local_notemyprogress/vue",
-        "local_notemyprogress/vuetify",
-        "local_notemyprogress/axios",
-        "local_notemyprogress/moment",
-        "local_notemyprogress/momenttimezone",
-        "local_notemyprogress/pagination",
-        "local_notemyprogress/chartstatic",
-        "local_notemyprogress/pageheader",
-        "local_notemyprogress/modulesform",
-        "local_notemyprogress/helpdialog",
-    ],
-    function(Vue, Vuetify, Axios, Moment, MomentTimezone, Pagination, ChartStatic, PageHeader, ModulesForm, HelpDialog) {
-        "use strict";
-
-        function init(content) {
-            // console.log(content);
-            Vue.use(Vuetify);
-            Vue.component('pagination', Pagination);
-            Vue.component('chart', ChartStatic);
-            Vue.component('pageheader', PageHeader);
-            Vue.component('modulesform', ModulesForm);
-            Vue.component('helpdialog', HelpDialog);
-            let vue = new Vue({
-                delimiters: ["[[", "]]"],
-                el: "#student",
-                vuetify: new Vuetify(),
-                data() {
-                    return {
-                        strings : content.strings,
-                        groups : content.groups,
-                        userid : content.userid,
-                        courseid : content.courseid,
-                        timezone : content.timezone,
-                        render_has : content.profile_render,
-                        loading : false,
-                        modules_dialog: false,
-                        errors : [],
-
-                        indicators: content.indicators,
-                        modules_access_colors: content.modules_access_colors,
-                        sessions_evolution_colors: content.sessions_evolution_colors,
-                        user_grades_colors: content.user_grades_colors,
-                        user: content.indicators.user,
-                        weeks_sessions: content.indicators.sessions,
-                        sessions_evolution_data: [],
-                        user_grades_categories: [],
-                        user_grades_data: [],
-                        course_grades_data: [],
-                        selected_sections: [],
-
-                        help_dialog: false,
-                        help_contents: [],
-                    }
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/momenttimezone",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartstatic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/modulesform",
+  "local_notemyprogress/helpdialog",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  MomentTimezone,
+  Pagination,
+  ChartStatic,
+  PageHeader,
+  ModulesForm,
+  HelpDialog
+) {
+  "use strict";
+
+  function init(content) {
+    // //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartStatic);
+    Vue.component("pageheader", PageHeader);
+    Vue.component("modulesform", ModulesForm);
+    Vue.component("helpdialog", HelpDialog);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#student",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          loading: false,
+          modules_dialog: false,
+          errors: [],
+
+          indicators: content.indicators,
+          modules_access_colors: content.modules_access_colors,
+          sessions_evolution_colors: content.sessions_evolution_colors,
+          user_grades_colors: content.user_grades_colors,
+          user: content.indicators.user,
+          weeks_sessions: content.indicators.sessions,
+          sessions_evolution_data: [],
+          user_grades_categories: [],
+          user_grades_data: [],
+          course_grades_data: [],
+          selected_sections: [],
+
+          help_dialog: false,
+          help_contents: [],
+        };
+      },
+      beforeMount() {
+        this.set_modules_in_sections();
+        this.calculate_sessions_evolution();
+        this.calculate_user_grades();
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#student").style.display = "block";
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+        });
+      },
+      methods: {
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
+
+        set_modules_in_sections() {
+          let sectionsMap = new Map();
+          let sectionid = 0;
+          this.indicators.cms.forEach((cm) => {
+            sectionid = Number(cm.section);
+            if (!sectionsMap.has(sectionid)) {
+              sectionsMap.set(sectionid, [cm]);
+            } else {
+              sectionsMap.get(sectionid).push(cm);
+            }
+          });
+          this.indicators.sections.forEach((section) => {
+            sectionid = Number(section.sectionid);
+            section.sectionid = sectionid;
+            section.modules = sectionsMap.has(sectionid)
+              ? sectionsMap.get(sectionid)
+              : [];
+          });
+        },
+
+        build_modules_access_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          (chart.colors = this.modules_access_colors),
+            (chart.xAxis = {
+              type: "category",
+            });
+          chart.yAxis = {
+            allowDecimals: false,
+            title: {
+              enabled: true,
+              text: this.strings.modules_amount,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            formatter: function () {
+              let module_text =
+                this.y == 1
+                  ? vue.strings.module_label
+                  : vue.strings.modules_label;
+              return (
+                "<b>" +
+                this.points[0].key +
+                "</b>: " +
+                this.y +
+                " " +
+                module_text +
+                "<br/>" +
+                "<i>" +
+                vue.strings.modules_details +
+                "<i/>"
+              );
+            },
+          };
+          (chart.plotOptions = {
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      "module_access",
+                      "chart_details",
+                      "Provide details informations about the consulted resources"
+                    );
+                    vue.open_modules_modal(this.x);
+                  },
                 },
-                beforeMount(){
-                    this.set_modules_in_sections();
-                    this.calculate_sessions_evolution();
-                    this.calculate_user_grades()
+              },
+            },
+          }),
+            (chart.legend = {
+              enabled: false,
+            });
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: [
+                {
+                  name: this.strings.modules_access_chart_series_viewed,
+                  y: this.user.cms.viewed,
                 },
-                mounted(){
-                    document.querySelector("#sessions-loader").style.display = "none";
-                    document.querySelector("#student").style.display = "block";
-                    setTimeout(function() {
-                        vue.setGraphicsEventListeners();
-                    })
-
+                {
+                  name: this.strings.modules_access_chart_series_complete,
+                  y: this.user.cms.complete,
+                },
+                {
+                  name: this.strings.modules_access_chart_series_total,
+                  y: this.user.cms.total,
                 },
-                methods : {
-                    get_help_content(){
-                        let contents = [];
-                        contents.push({
-                            title: this.strings.section_help_title,
-                            description: this.strings.section_help_description,
-                        });
-                        return contents;
-                    },
-
-                    set_modules_in_sections() {
-                        let sectionsMap = new Map();
-                        let sectionid = 0;
-                        this.indicators.cms.forEach(cm => {
-                            sectionid = Number(cm.section);
-                            if (!sectionsMap.has(sectionid)) {
-                                sectionsMap.set(sectionid, [cm]);
-                            } else {
-                                sectionsMap.get(sectionid).push(cm);
-                            }
-                        });
-                        this.indicators.sections.forEach(section => {
-                            sectionid = Number(section.sectionid);
-                            section.sectionid = sectionid;
-                            section.modules = (sectionsMap.has(sectionid)) ? sectionsMap.get(sectionid) : [];
-                        });
-                    },
-
-                    build_modules_access_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'bar',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {text: null};
-                        chart.colors = this.modules_access_colors,
-                        chart.xAxis = {
-                            type: 'category',
-                        };
-                        chart.yAxis = {
-                            allowDecimals: false,
-                            title: {
-                                enabled: true,
-                                text: this.strings.modules_amount,
-                            }
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            formatter: function () {
-                                let module_text = (this.y == 1) ? vue.strings.module_label : vue.strings.modules_label;
-                                return '<b>' + this.points[0].key + '</b>: ' + this.y + ' ' + module_text + '<br/>'
-                                    + '<i>'+ vue.strings.modules_details + '<i/>';
-                            }
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                cursor: 'pointer',
-                                point: {
-                                    events: {
-                                        click: function () {
-                                            vue.addLogsIntoDB("viewed", "module_access", "chart_details", "Provide details informations about the consulted resources");
-                                            vue.open_modules_modal(this.x);
-                                        }
-                                    }
-                                }
-                            }
-                        },
-                        chart.legend = {
-                                enabled: false
-                            };
-                        chart.series = [{
-                            colorByPoint: true,
-                            data: [
-                                {name: this.strings.modules_access_chart_series_viewed, y: this.user.cms.viewed},
-                                {name: this.strings.modules_access_chart_series_complete, y: this.user.cms.complete},
-                                {name: this.strings.modules_access_chart_series_total, y: this.user.cms.total}
-                            ]
-                        }];
-                        return chart;
-                    },
-
-                    build_weeks_session_chart() {
-                        let chart = new Object();
-                        chart.title = {text: null};
-                        chart.chart = {
-                            type: 'heatmap',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.xAxis = {
-                            categories: this.strings.weeks,
-                        };
-                        chart.yAxis = {
-                            categories: this.weeks_sessions.categories,
-                            title: null,
-                            reversed: true,
-                        };
-                        chart.colorAxis = {
-                            min: 0,
-                            minColor: '#E0E0E0',
-                            maxColor: '#118AB2'
-                        };
-                        chart.legend = {
-                            layout: 'horizontal',
-                            verticalAlign: 'bottom',
-                        };
-                        chart.tooltip = {
-                            formatter: function () {
-                                let days = vue.weeks_sessions.weeks[this.point.y][this.point.x] || '';
-                                let xCategoryName = vue.get_point_category_name(this.point, 'x');
-                                let yCategoryName = vue.get_point_category_name(this.point, 'y');
-                                let label = vue.strings.sessions_text;
-                                if (this.point.value == 1) {
-                                    label = vue.strings.session_text;;
-                                }
-                                return '<b>' + yCategoryName + ' ' + xCategoryName + '</b>: '
-                                    + this.point.value +' ' + label + '<br/>' + days;
-                            }
-                        };
-                        chart.series = [{
-                            borderWidth: 2,
-                            borderColor: '#FAFAFA',
-                            data: this.weeks_sessions.data,
-                        }];
-                        return chart;
-                    },
-
-                    build_sessions_evolution_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            zoomType: 'x',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {text: null};
-                        chart.colors = this.sessions_evolution_colors,
-                        chart.xAxis = {
-                            type: 'datetime'
-                        };
-                        chart.yAxis = [{
-                            allowDecimals: false,
-                            title: { text: this.strings.sessions_evolution_chart_xaxis1 }
-                        }, {
-                            title: { text: this.strings.sessions_evolution_chart_xaxis2 },
-                            opposite: true
-                        }];
-                        chart.tooltip = {
-                            shared: true,
-                            useHTML: true,
-                            formatter: function () {
-                                let date_label = vue.calculate_timezone_date_string(this.x);
-                                let text1 = (this.points[0]) ? vue.get_sessions_evolution_tooltip(this.points[0]) : '';
-                                let text2 = (this.points[1]) ? vue.get_sessions_evolution_tooltip(this.points[1]) : '';
-                                return `<small>${date_label}</small><br/>${text1}${text2}`;
-                            }
-                        };
-                        chart.series = this.sessions_evolution_data;
-                        return chart;
-                    },
-
-                    build_user_grades_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'column',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {text: null};
-                        chart.colors = this.user_grades_colors,
-                        chart.xAxis = {
-                            crosshair: true,
-                            categories: this.user_grades_categories,
-                        };
-                        chart.yAxis = {
-                            allowDecimals: false,
-                            max: 100,
-                            labels: {
-                                format: '{value} %',
-                            },
-                            title: { text: this.strings.user_grades_chart_yaxis }
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            useHTML: true,
-                            formatter: function () {
-                                let itemname = this.x;
-                                let position = this.points[0].point.x;
-                                let item = vue.user.gradeitems[position];
-                                let header = `<small>${itemname}</small><br/>`;
-                                let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;
-                                let body = '';
-                                if (item.gradecount == 0) {
-                                    body = vue.strings.user_grades_chart_tooltip_no_graded;
-                                } else {
-                                    let text1 = (this.points[0]) ? vue.get_user_grades_tooltip(this.points[0], item) : '';
-                                    let text2 = (this.points[1]) ? vue.get_user_grades_tooltip(this.points[1], item) : '';
-                                    body = `${text1}${text2}${footer}`;
-                                }
-                                return `${header}${body}`;
-                            }
-                        };
-                        chart.plotOptions = {
-                            series: {
-                                cursor: 'pointer',
-                                point: {
-                                    events: {
-                                        click: function () {
-                                            vue.addLogsIntoDB("viewed", "user_grades", "chart_details", "Provide details informations about the consulted resources");
-                                            let position = this.x;
-                                            let item = vue.user.gradeitems[position];
-                                            let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;
-                                            window.open(url, '_blank');
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.series = this.user_grades_data;
-                        return chart;
-                    },
-
-                    calculate_sessions_evolution() {
-                        let sessions_data = [], time_data = [];
-                        let sumtime = 0, sumsessions = 0, time = 0, timestamp = 0;
-                        this.user.sessions.forEach(session => {
-                            timestamp = Number(session.start) * 1000;
-                            time = (Number(session.duration)) / 60;
-                            sumtime += time;
-                            sumsessions++;
-                            sessions_data.push({ x: timestamp, y: sumsessions });
-                            time_data.push({ x: timestamp, y: sumtime });
-                        });
-                        this.sessions_evolution_data = [
-                            { name: this.strings.sessions_evolution_chart_legend1, yAxis: 0, data: sessions_data },
-                            { name: this.strings.sessions_evolution_chart_legend2, yAxis: 1, data: time_data },
-                        ];
-                    },
-
-                    calculate_user_grades() {
-                        let categories = [], course_grades = [], user_grades = [];
-                        let user_grade = 0, user_name = this.user.firstname;
-                        if (this.user.gradeitems) {
-                            this.user.gradeitems.forEach(item => {
-                                user_grade = (Number(item.finalgrade) * 100) / Number(item.grademax);
-                                categories.push(item.itemname);
-                                course_grades.push(item.average_percentage);
-                                user_grades.push(user_grade);
-                            });
-                            this.user_grades_data = [
-                                { name: user_name, data: user_grades },
-                                { name: this.strings.user_grades_chart_legend, data: course_grades },
-                            ];
-                            this.user_grades_categories = categories;
-                        }
-                    },
-
-                    calculate_timezone_date_string(timestamp) {
-                        let dat, weekday, monthday, month, time;
-                        if (Moment.tz.zone(this.timezone)) {
-                            dat = Moment(timestamp).tz(this.timezone);
-                            weekday = dat.day();
-                            monthday = dat.date();
-                            month = dat.month();
-                            time = dat.format('HH:mm:ss');
-                        } else {
-                            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
-                            dat =  new Date(timestamp);
-                            weekday = dat.getDay();
-                            monthday = dat.getDate();
-                            month = dat.getMonth();
-                            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;
-                        }
-                        weekday = this.strings.chart.weekdays[weekday];
-                        month = this.strings.chart.shortMonths[month];
-                        return `${weekday}, ${month} ${monthday}, ${time}`;
-                    },
-
-                    get_point_category_name(point, dimension) {
-                        let series = point.series,
-                            isY = dimension === 'y',
-                            axis = series[isY ? 'yAxis' : 'xAxis'];
-                        return axis.categories[point[isY ? 'y' : 'x']];
-                    },
-
-                    get_sessions_evolution_tooltip (point) {
-                        let text = '', sessions, sessions_suffix, sessions_prefix, time_prefix, time;
-                        if (point.colorIndex == 0) {
-                            sessions = point.y;
-                            sessions_suffix = (sessions == 1) ? vue.strings.session_text : vue.strings.sessions_text;
-                            sessions_prefix = point.series.name;
-                            text = `<b style="color: ${point.color}">${sessions_prefix}: </b>
+              ],
+            },
+          ];
+          return chart;
+        },
+
+        build_weeks_session_chart() {
+          let chart = new Object();
+          chart.title = { text: null };
+          chart.chart = {
+            type: "heatmap",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.xAxis = {
+            categories: this.strings.weeks,
+          };
+          chart.yAxis = {
+            categories: this.weeks_sessions.categories,
+            title: null,
+            reversed: true,
+          };
+          chart.colorAxis = {
+            min: 0,
+            minColor: "#E0E0E0",
+            maxColor: "#118AB2",
+          };
+          chart.legend = {
+            layout: "horizontal",
+            verticalAlign: "bottom",
+          };
+          chart.tooltip = {
+            formatter: function () {
+              let days =
+                vue.weeks_sessions.weeks[this.point.y][this.point.x] || "";
+              let xCategoryName = vue.get_point_category_name(this.point, "x");
+              let yCategoryName = vue.get_point_category_name(this.point, "y");
+              let label = vue.strings.sessions_text;
+              if (this.point.value == 1) {
+                label = vue.strings.session_text;
+              }
+              return (
+                "<b>" +
+                yCategoryName +
+                " " +
+                xCategoryName +
+                "</b>: " +
+                this.point.value +
+                " " +
+                label +
+                "<br/>" +
+                days
+              );
+            },
+          };
+          chart.series = [
+            {
+              borderWidth: 2,
+              borderColor: "#FAFAFA",
+              data: this.weeks_sessions.data,
+            },
+          ];
+          return chart;
+        },
+
+        build_sessions_evolution_chart() {
+          let chart = new Object();
+          chart.chart = {
+            zoomType: "x",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          (chart.colors = this.sessions_evolution_colors),
+            (chart.xAxis = {
+              type: "datetime",
+            });
+          chart.yAxis = [
+            {
+              allowDecimals: false,
+              title: { text: this.strings.sessions_evolution_chart_xaxis1 },
+            },
+            {
+              title: { text: this.strings.sessions_evolution_chart_xaxis2 },
+              opposite: true,
+            },
+          ];
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let date_label = vue.calculate_timezone_date_string(this.x);
+              let text1 = this.points[0]
+                ? vue.get_sessions_evolution_tooltip(this.points[0])
+                : "";
+              let text2 = this.points[1]
+                ? vue.get_sessions_evolution_tooltip(this.points[1])
+                : "";
+              return `<small>${date_label}</small><br/>${text1}${text2}`;
+            },
+          };
+          chart.series = this.sessions_evolution_data;
+          return chart;
+        },
+
+        build_user_grades_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          (chart.colors = this.user_grades_colors),
+            (chart.xAxis = {
+              crosshair: true,
+              categories: this.user_grades_categories,
+            });
+          chart.yAxis = {
+            allowDecimals: false,
+            max: 100,
+            labels: {
+              format: "{value} %",
+            },
+            title: { text: this.strings.user_grades_chart_yaxis },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let itemname = this.x;
+              let position = this.points[0].point.x;
+              let item = vue.user.gradeitems[position];
+              let header = `<small>${itemname}</small><br/>`;
+              let footer = `<i>(${vue.strings.user_grades_chart_view_activity})</i><br/>`;
+              let body = "";
+              if (item.gradecount == 0) {
+                body = vue.strings.user_grades_chart_tooltip_no_graded;
+              } else {
+                let text1 = this.points[0]
+                  ? vue.get_user_grades_tooltip(this.points[0], item)
+                  : "";
+                let text2 = this.points[1]
+                  ? vue.get_user_grades_tooltip(this.points[1], item)
+                  : "";
+                body = `${text1}${text2}${footer}`;
+              }
+              return `${header}${body}`;
+            },
+          };
+          chart.plotOptions = {
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      "user_grades",
+                      "chart_details",
+                      "Provide details informations about the consulted resources"
+                    );
+                    let position = this.x;
+                    let item = vue.user.gradeitems[position];
+                    let url = `${M.cfg.wwwroot}/mod/${item.itemmodule}/view.php?id=${item.coursemoduleid}`;
+                    window.open(url, "_blank");
+                  },
+                },
+              },
+            },
+          };
+          chart.series = this.user_grades_data;
+          return chart;
+        },
+
+        calculate_sessions_evolution() {
+          let sessions_data = [],
+            time_data = [];
+          let sumtime = 0,
+            sumsessions = 0,
+            time = 0,
+            timestamp = 0;
+          this.user.sessions.forEach((session) => {
+            timestamp = Number(session.start) * 1000;
+            time = Number(session.duration) / 60;
+            sumtime += time;
+            sumsessions++;
+            sessions_data.push({ x: timestamp, y: sumsessions });
+            time_data.push({ x: timestamp, y: sumtime });
+          });
+          this.sessions_evolution_data = [
+            {
+              name: this.strings.sessions_evolution_chart_legend1,
+              yAxis: 0,
+              data: sessions_data,
+            },
+            {
+              name: this.strings.sessions_evolution_chart_legend2,
+              yAxis: 1,
+              data: time_data,
+            },
+          ];
+        },
+
+        calculate_user_grades() {
+          let categories = [],
+            course_grades = [],
+            user_grades = [];
+          let user_grade = 0,
+            user_name = this.user.firstname;
+          if (this.user.gradeitems) {
+            this.user.gradeitems.forEach((item) => {
+              user_grade =
+                (Number(item.finalgrade) * 100) / Number(item.grademax);
+              categories.push(item.itemname);
+              course_grades.push(item.average_percentage);
+              user_grades.push(user_grade);
+            });
+            this.user_grades_data = [
+              { name: user_name, data: user_grades },
+              {
+                name: this.strings.user_grades_chart_legend,
+                data: course_grades,
+              },
+            ];
+            this.user_grades_categories = categories;
+          }
+        },
+
+        calculate_timezone_date_string(timestamp) {
+          let dat, weekday, monthday, month, time;
+          if (Moment.tz.zone(this.timezone)) {
+            dat = Moment(timestamp).tz(this.timezone);
+            weekday = dat.day();
+            monthday = dat.date();
+            month = dat.month();
+            time = dat.format("HH:mm:ss");
+          } else {
+            let tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
+            dat = new Date(timestamp);
+            weekday = dat.getDay();
+            monthday = dat.getDate();
+            month = dat.getMonth();
+            time = `${dat.getHours()}:${dat.getMinutes()}:${dat.getSeconds()} (${tz})`;
+          }
+          weekday = this.strings.chart.weekdays[weekday];
+          month = this.strings.chart.shortMonths[month];
+          return `${weekday}, ${month} ${monthday}, ${time}`;
+        },
+
+        get_point_category_name(point, dimension) {
+          let series = point.series,
+            isY = dimension === "y",
+            axis = series[isY ? "yAxis" : "xAxis"];
+          return axis.categories[point[isY ? "y" : "x"]];
+        },
+
+        get_sessions_evolution_tooltip(point) {
+          let text = "",
+            sessions,
+            sessions_suffix,
+            sessions_prefix,
+            time_prefix,
+            time;
+          if (point.colorIndex == 0) {
+            sessions = point.y;
+            sessions_suffix =
+              sessions == 1
+                ? vue.strings.session_text
+                : vue.strings.sessions_text;
+            sessions_prefix = point.series.name;
+            text = `<b style="color: ${point.color}">${sessions_prefix}: </b>
                                      ${sessions} ${sessions_suffix}<br/>`;
-                        } else {
-                            time_prefix = point.series.name;
-                            time = vue.convert_time(point.y * 60);
-                            text = `<b style="color: ${point.color}">${time_prefix}: </b>
+          } else {
+            time_prefix = point.series.name;
+            time = vue.convert_time(point.y * 60);
+            text = `<b style="color: ${point.color}">${time_prefix}: </b>
                                     ${time}<br/>`;
-                        }
-                        return text;
-                    },
-
-                    get_user_grades_tooltip (point, item) {
-                        let serie_name = point.series.name, user_grade = 0;
-                        let finalgrade = Number(item.finalgrade), average = Number(item.average), grademax = Number(item.grademax);
-                        grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);
-                        if (point.colorIndex == 0) {
-                            user_grade = this.isInt(finalgrade) ? finalgrade : finalgrade.toFixed(2);
-                        } else {
-                            user_grade = this.isInt(average) ? average : average.toFixed(2);
-                        }
-                        return `<b style="color: ${point.color}">${serie_name}: </b>
+          }
+          return text;
+        },
+
+        get_user_grades_tooltip(point, item) {
+          let serie_name = point.series.name,
+            user_grade = 0;
+          let finalgrade = Number(item.finalgrade),
+            average = Number(item.average),
+            grademax = Number(item.grademax);
+          grademax = this.isInt(grademax) ? grademax : grademax.toFixed(2);
+          if (point.colorIndex == 0) {
+            user_grade = this.isInt(finalgrade)
+              ? finalgrade
+              : finalgrade.toFixed(2);
+          } else {
+            user_grade = this.isInt(average) ? average : average.toFixed(2);
+          }
+          return `<b style="color: ${point.color}">${serie_name}: </b>
                                      ${user_grade}/${grademax}<br/>`;
-                    },
-
-                    open_modules_modal(){
-                        let sections = this.indicators.sections;
-                        sections.forEach(section => {
-                            section.modules.forEach(module => {
-                                module.complete = false;
-                                module.viewed = false;
-                                module.interactions = 0;
-                                let user_cm = this.user.cms.modules[`cm${module.id}`];
-                                if (user_cm) {
-                                    module.complete = user_cm.complete;
-                                    module.viewed = user_cm.viewed;
-                                    module.interactions = user_cm.interactions;
-                                }
-                            });
-                        });
-
-                        this.modules_dialog = true;
-                        this.selected_sections = sections;
-                    },
-
-                    get_picture_url(userid){
-                        return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;
-                    },
-
-                    get_user_fullname(){
-                        return `${this.user.firstname} ${this.user.lastname}`;
-                    },
-
-                    get_username(){
-                        return `@${this.user.username}`;
-                    },
-
-                    see_profile () {
-                        let id = this.user.id;
-                        let url = M.cfg.wwwroot + '/user/view.php?id='+id+'&course='+vue.courseid;
-                        window.open(url);
-                    },
-
-                    get_progress_percentage() {
-                        return `${this.user.progress_percentage} %`;
-                    },
-
-                    get_progress_message(){
-                        let module_label = this.strings.modules_label;
-                        let finished_label = this.strings.finisheds_label;
-                        if (this.user.cms.complete == 1) {
-                            module_label = this.strings.module_label;
-                            finished_label = this.strings.finished_label;
-                        }
-                        return `${this.user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.user.cms.total}`;
-                    },
-
-                    convert_time(time) {
-                        time *= 60; // pasar los minutos a segundos
-                        let h = this.strings.hours_short;
-                        let m = this.strings.minutes_short;
-                        let s = this.strings.seconds_short;
-                        let hours = Math.floor(time / 3600);
-                        let minutes = Math.floor((time % 3600) / 60);
-                        let seconds = Math.floor(time % 60);
-                        let text;
-                        if (hours >= 1) {
-                            if (minutes >= 1) {
-                                text = `${hours}${h} ${minutes}${m}`;
-                            } else {
-                                text = `${hours}${h}`;
-                            }
-                        } else if ((minutes >= 1)) {
-                            if (seconds >= 1) {
-                                text = `${minutes}${m} ${seconds}${s}`;
-                            } else {
-                                text = `${minutes}${m}`;
-                            }
-                        } else {
-                            text = `${seconds}${s}`;
-                        }
-                        return text;
-                    },
-
-                    get_student_grade() {
-                        let grade = this.user.coursegrade;
-                        grade.finalgrade = Number(grade.finalgrade);
-                        grade.maxgrade = Number(grade.maxgrade);
-                        let student_grade = this.isInt(grade.finalgrade) ? grade.finalgrade : grade.finalgrade.toFixed(2);
-                        let max_grade = this.isInt(grade.maxgrade) ? grade.maxgrade : grade.maxgrade.toFixed(2);
-                        return `${student_grade}/${max_grade}`;
-                    },
-
-                    update_modules_dialog(value) {
-                        this.modules_dialog = value;
-                    },
-
-                    isInt(n) {
-                        return n % 1 === 0;
-                    },
-
-                    open_chart_help(chart) {
-                        let contents = [];
-                        let action = "";
-                        let objectType = "";
-                        let objectName = "";
-                        let objectDescription = "";
-                        if (chart == "modules_access") {
-                            contents.push({
-                                title: this.strings.modules_access_help_title,
-                                description: this.strings.modules_access_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.modules_access_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.modules_access_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "modules_access";
-                            objectDescription = "Help section that provides information about the modules access chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "weeks_session") {
-                            contents.push({
-                                title: this.strings.weeks_session_help_title,
-                                description: this.strings.weeks_session_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.weeks_session_help_description_p2,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "week_session";
-                            objectDescription = "Help section that provides information about the week session chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "sessions_evolution") {
-                            contents.push({
-                                title: this.strings.sessions_evolution_help_title,
-                                description: this.strings.sessions_evolution_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.sessions_evolution_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.sessions_evolution_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "sessions_evolution";
-                            objectDescription = "Help section that provides information about the sessions evolution chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "user_grades") {
-                            contents.push({
-                                title: this.strings.user_grades_help_title,
-                                description: this.strings.user_grades_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.user_grades_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.user_grades_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "user_grades";
-                            objectDescription = "Help section that provides information about the user grades chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        }
-                        this.help_contents = contents;
-                        if (this.help_contents.length) {
-                            this.help_dialog = true;
-                        }
-                    },
-
-                    update_help_dialog (value) {
-                        this.help_dialog = value;
-                    },
-
-                    get_timezone(){
-                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`
-                        return information;
-                    },
-
-                    setGraphicsEventListeners() {
-                        let graphics = document.querySelectorAll('.highcharts-container');
-                        if(graphics.length<1) {
-                            setTimeout(vue.setGraphicsEventListeners,500);
-                        } else {
-                            graphics[0].id = "modules_access";
-                            graphics[1].id = "weeks_session";
-                            graphics[2].id = "sessions_evolution";
-                            graphics[3].id = "user_grades";
-                            graphics.forEach((graph) => {
-                                graph.addEventListener('mouseenter', vue.addLogsViewGraphic);
-                            })
-                        }
-                    },
-
-                    addLogsViewGraphic(e) {
-                        event.stopPropagation();
-                        var action = "";
-                        var objectName = "";
-                        var objectType = "";
-                        var objectDescription = "";
-                        switch(e.target.id) {
-                            case "modules_access":
-                                action = "viewed";
-                                objectName = "modules_access";
-                                objectType = "chart";
-                                objectDescription = "Bar chart that shows";
-                                break;
-                            case "weeks_session":
-                                action = "viewed";
-                                objectName = "weeks_session";
-                                objectType = "chart";
-                                objectDescription = "Chart showing";
-                                break;
-                            case "sessions_evolution":
-                                action = "viewed";
-                                objectName = "sessions_evolution";
-                                objectType = "chart";
-                                objectDescription = "Chart showing ";
-                                break;
-                            case "user_grades":
-                                action = "viewed";
-                                objectName = "user_grades";
-                                objectType = "chart";
-                                objectDescription = "Chart showing ";
-                                break;
-                            default:
-                                action = "viewed";
-                                objectName = "";
-                                objectType = "chart";
-                                objectDescription = "A chart";
-                        }
-                        vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                    },
-
-                    addLogsIntoDB(action, objectName, objectType, objectDescription) {
-                        let data = {
-                            courseid: content.courseid,
-                            userid: content.userid,
-                            action: "addLogs",
-                            sectionname: "STUDENT_GENERAL_INDICATORS",
-                            actiontype: action,
-                            objectType: objectType,
-                            objectName: objectName,
-                            currentUrl: document.location.href,
-                            objectDescription: objectDescription,
-                        };
-                        Axios({
-                            method:'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params : data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                            }
-                        }).catch((e) => {
-                        });
-                    },
-
-                }
+        },
+
+        open_modules_modal() {
+          let sections = this.indicators.sections;
+          sections.forEach((section) => {
+            section.modules.forEach((module) => {
+              module.complete = false;
+              module.viewed = false;
+              module.interactions = 0;
+              let user_cm = this.user.cms.modules[`cm${module.id}`];
+              if (user_cm) {
+                module.complete = user_cm.complete;
+                module.viewed = user_cm.viewed;
+                module.interactions = user_cm.interactions;
+              }
+            });
+          });
+
+          this.modules_dialog = true;
+          this.selected_sections = sections;
+        },
+
+        get_picture_url(userid) {
+          return `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;
+        },
+
+        get_user_fullname() {
+          return `${this.user.firstname} ${this.user.lastname}`;
+        },
+
+        get_username() {
+          return `@${this.user.username}`;
+        },
+
+        see_profile() {
+          let id = this.user.id;
+          let url =
+            M.cfg.wwwroot +
+            "/user/view.php?id=" +
+            id +
+            "&course=" +
+            vue.courseid;
+          window.open(url);
+        },
+
+        get_progress_percentage() {
+          return `${this.user.progress_percentage} %`;
+        },
+
+        get_progress_message() {
+          let module_label = this.strings.modules_label;
+          let finished_label = this.strings.finisheds_label;
+          if (this.user.cms.complete == 1) {
+            module_label = this.strings.module_label;
+            finished_label = this.strings.finished_label;
+          }
+          return `${this.user.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${this.user.cms.total}`;
+        },
+
+        convert_time(time) {
+          time *= 60; // pasar los minutos a segundos
+          let h = this.strings.hours_short;
+          let m = this.strings.minutes_short;
+          let s = this.strings.seconds_short;
+          let hours = Math.floor(time / 3600);
+          let minutes = Math.floor((time % 3600) / 60);
+          let seconds = Math.floor(time % 60);
+          let text;
+          if (hours >= 1) {
+            if (minutes >= 1) {
+              text = `${hours}${h} ${minutes}${m}`;
+            } else {
+              text = `${hours}${h}`;
+            }
+          } else if (minutes >= 1) {
+            if (seconds >= 1) {
+              text = `${minutes}${m} ${seconds}${s}`;
+            } else {
+              text = `${minutes}${m}`;
+            }
+          } else {
+            text = `${seconds}${s}`;
+          }
+          return text;
+        },
+
+        get_student_grade() {
+          let grade = this.user.coursegrade;
+          grade.finalgrade = Number(grade.finalgrade);
+          grade.maxgrade = Number(grade.maxgrade);
+          let student_grade = this.isInt(grade.finalgrade)
+            ? grade.finalgrade
+            : grade.finalgrade.toFixed(2);
+          let max_grade = this.isInt(grade.maxgrade)
+            ? grade.maxgrade
+            : grade.maxgrade.toFixed(2);
+          return `${student_grade}/${max_grade}`;
+        },
+
+        update_modules_dialog(value) {
+          this.modules_dialog = value;
+        },
+
+        isInt(n) {
+          return n % 1 === 0;
+        },
+
+        open_chart_help(chart) {
+          let contents = [];
+          let action = "";
+          let objectType = "";
+          let objectName = "";
+          let objectDescription = "";
+          if (chart == "modules_access") {
+            contents.push({
+              title: this.strings.modules_access_help_title,
+              description: this.strings.modules_access_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.modules_access_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.modules_access_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "modules_access";
+            objectDescription =
+              "Help section that provides information about the modules access chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "weeks_session") {
+            contents.push({
+              title: this.strings.weeks_session_help_title,
+              description: this.strings.weeks_session_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.weeks_session_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "week_session";
+            objectDescription =
+              "Help section that provides information about the week session chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "sessions_evolution") {
+            contents.push({
+              title: this.strings.sessions_evolution_help_title,
+              description: this.strings.sessions_evolution_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.sessions_evolution_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.sessions_evolution_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "sessions_evolution";
+            objectDescription =
+              "Help section that provides information about the sessions evolution chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "user_grades") {
+            contents.push({
+              title: this.strings.user_grades_help_title,
+              description: this.strings.user_grades_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.user_grades_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.user_grades_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "user_grades";
+            objectDescription =
+              "Help section that provides information about the user grades chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          }
+          this.help_contents = contents;
+          if (this.help_contents.length) {
+            this.help_dialog = true;
+          }
+        },
+
+        update_help_dialog(value) {
+          this.help_dialog = value;
+        },
+
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
+
+        setGraphicsEventListeners() {
+          let graphics = document.querySelectorAll(".highcharts-container");
+          if (graphics.length < 1) {
+            setTimeout(vue.setGraphicsEventListeners, 500);
+          } else {
+            graphics[0].id = "modules_access";
+            graphics[1].id = "weeks_session";
+            graphics[2].id = "sessions_evolution";
+            graphics[3].id = "user_grades";
+            graphics.forEach((graph) => {
+              graph.addEventListener("mouseenter", vue.addLogsViewGraphic);
+            });
+          }
+        },
+
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "modules_access":
+              action = "viewed";
+              objectName = "modules_access";
+              objectType = "chart";
+              objectDescription = "Bar chart that shows";
+              break;
+            case "weeks_session":
+              action = "viewed";
+              objectName = "weeks_session";
+              objectType = "chart";
+              objectDescription = "Chart showing";
+              break;
+            case "sessions_evolution":
+              action = "viewed";
+              objectName = "sessions_evolution";
+              objectType = "chart";
+              objectDescription = "Chart showing ";
+              break;
+            case "user_grades":
+              action = "viewed";
+              objectName = "user_grades";
+              objectType = "chart";
+              objectDescription = "Chart showing ";
+              break;
+            default:
+              action = "viewed";
+              objectName = "";
+              objectType = "chart";
+              objectDescription = "A chart";
+          }
+          vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
+
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "STUDENT_GENERAL_INDICATORS",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
             })
-        }
-
-        return {
-            init : init
-        };
-    });
\ No newline at end of file
+            .catch((e) => {});
+        },
+      },
+    });
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/student_planning.js b/notemyprogress/amd/src/student_planning.js
new file mode 100644
index 0000000000000000000000000000000000000000..838303da6e7717dca263f624f85aa16e7f93e745
--- /dev/null
+++ b/notemyprogress/amd/src/student_planning.js
@@ -0,0 +1,563 @@
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartstatic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/modulesform",
+  "local_notemyprogress/helpdialog",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  Pagination,
+  ChartStatic,
+  PageHeader,
+  ModulesForm,
+  HelpDialog
+) {
+  "use strict";
+
+  function init(content) {
+    // //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartStatic);
+    Vue.component("pageheader", PageHeader);
+    Vue.component("modulesform", ModulesForm);
+    Vue.component("helpdialog", HelpDialog);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#work_sessions",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          loading: false,
+          errors: [],
+          pages: content.pages,
+
+          indicators: content.indicators,
+          resources_access_colors: content.resources_access_colors,
+          inverted_time_colors: content.inverted_time_colors,
+          inverted_time: content.indicators.inverted_time,
+          hours_sessions: content.indicators.hours_sessions,
+          sections: content.indicators.sections,
+          sections_map: null,
+          week_progress: 0,
+          resource_access_categories: [],
+          resource_access_data: [],
+          modules_dialog: false,
+
+          help_dialog: false,
+          help_contents: [],
+        };
+      },
+      beforeMount() {
+        this.create_section_map();
+        this.set_modules_in_sections();
+        this.calculate_resources_access();
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#work_sessions").style.display = "block";
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+        });
+      },
+      methods: {
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
+
+        build_inverted_time_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.inverted_time_colors;
+          chart.xAxis = {
+            type: "category",
+            crosshair: true,
+          };
+          chart.yAxis = {
+            title: {
+              text: this.strings.inverted_time_chart_x_axis,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let category_name = this.points[0].key;
+              let time = vue.convert_time(this.y);
+              return `<b>${category_name}: </b>${time}`;
+            },
+          };
+          chart.legend = {
+            enabled: false,
+          };
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: this.inverted_time.data,
+            },
+          ];
+          return chart;
+        },
+
+        build_hours_session_chart() {
+          let chart = new Object();
+          chart.title = { text: null };
+          chart.chart = {
+            type: "heatmap",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.xAxis = {
+            categories: this.strings.days,
+          };
+          chart.yAxis = {
+            categories: this.strings.hours,
+            title: null,
+            reversed: true,
+          };
+          chart.colorAxis = {
+            min: 0,
+            minColor: "#E0E0E0",
+            maxColor: "#118AB2",
+          };
+          chart.legend = {
+            layout: "horizontal",
+            verticalAlign: "bottom",
+          };
+          chart.tooltip = {
+            formatter: function () {
+              let xCategoryName = vue.get_point_category_name(this.point, "x");
+              let yCategoryName = vue.get_point_category_name(this.point, "y");
+              let label = vue.strings.sessions_text;
+              if (this.point.value == 1) {
+                label = vue.strings.session_text;
+              }
+              return (
+                "<b>" +
+                xCategoryName +
+                " " +
+                yCategoryName +
+                "</b>: " +
+                this.point.value +
+                " " +
+                label
+              );
+            },
+          };
+          chart.series = [
+            {
+              borderWidth: 2,
+              borderColor: "#FAFAFA",
+              data: this.hours_sessions,
+            },
+          ];
+          return chart;
+        },
+
+        build_resources_access_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.resources_access_colors;
+          chart.xAxis = {
+            categories: this.resource_access_categories,
+            crosshair: true,
+            title: {
+              text: this.strings.resource_access_x_axis,
+            },
+          };
+          chart.yAxis = {
+            min: 0,
+            title: {
+              text: this.strings.resource_access_y_axis,
+            },
+          };
+          chart.plotOptions = {
+            column: {
+              stacking: "normal",
+            },
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      "resources_access",
+                      "chart_details",
+                      "Provide details informations about the consulted resources"
+                    );
+                    vue.modules_dialog = true;
+                  },
+                },
+              },
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            footerFormat: `<i>${this.strings.modules_details}</i>`,
+          };
+          chart.series = this.resource_access_data;
+          return chart;
+        },
+
+        update_interactions(week) {
+          this.loading = true;
+          this.errors = [];
+          let data = {
+            action: "studentsessions",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: week.weekcode,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                this.inverted_time =
+                  response.data.data.indicators.inverted_time;
+                this.hours_sessions =
+                  response.data.data.indicators.hours_sessions;
+                this.sections = response.data.data.indicators.sections;
+                this.set_modules_in_sections();
+                this.calculate_resources_access();
+              } else {
+                this.error_messages.push(this.strings.error_network);
+              }
+            })
+            .catch((e) => {
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              this.loading = false;
+              vue.addLogsIntoDB(
+                "viewed",
+                "week_" + week.weekcode,
+                "week_section",
+                "Week section that allows you to obtain information on a specific week"
+              );
+              vue.setGraphicsEventListeners();
+            });
+          return this.data;
+        },
+
+        create_section_map() {
+          let sectionsMap = new Map();
+          let sectionid = 0;
+          this.indicators.course_cms.forEach((cm) => {
+            sectionid = Number(cm.section);
+            if (!sectionsMap.has(sectionid)) {
+              sectionsMap.set(sectionid, [cm]);
+            } else {
+              sectionsMap.get(sectionid).push(cm);
+            }
+          });
+          this.sections_map = sectionsMap;
+        },
+
+        set_modules_in_sections() {
+          let sectionid;
+          this.sections.forEach((section) => {
+            sectionid = Number(section.sectionid);
+            section.sectionid = sectionid;
+            section.modules = this.sections_map.has(sectionid)
+              ? this.sections_map.get(sectionid)
+              : [];
+          });
+        },
+
+        calculate_resources_access() {
+          let modulesMap = new Map();
+          let moduleid,
+            user_cm,
+            mod,
+            total_modules = 0,
+            access_modules = 0;
+          let modules_names = this.strings.modules_names;
+          this.sections.forEach((section) => {
+            section.modules.forEach((module) => {
+              !modulesMap.has(module.modname) &&
+                modulesMap.set(module.modname, { complete: 0, pending: 0 });
+              mod = modulesMap.get(module.modname);
+              moduleid = Number(module.id);
+              module.id = moduleid;
+              module.complete = false;
+              module.viewed = false;
+              module.interactions = 0;
+
+              user_cm = this.indicators.user_cms[`cm${module.id}`];
+              if (user_cm) {
+                module.complete = user_cm.complete;
+                module.viewed = user_cm.viewed;
+                module.interactions = user_cm.interactions;
+                user_cm.complete ? mod.complete++ : mod.pending++;
+                user_cm.complete && access_modules++;
+              } else {
+                mod.pending++;
+              }
+              total_modules++;
+            });
+          });
+          let categories = [],
+            complete_data = [],
+            pending_data = [];
+          modulesMap.forEach(function (value, key) {
+            categories.push(modules_names[key] || key);
+            complete_data.push(value.complete);
+            pending_data.push(value.pending);
+          });
+          this.resource_access_categories = categories;
+          this.resource_access_data = [
+            { name: this.strings.resource_access_legend1, data: complete_data },
+            { name: this.strings.resource_access_legend2, data: pending_data },
+          ];
+          this.week_progress =
+            Math.floor((access_modules * 100) / total_modules) || 0;
+        },
+
+        get_progress_percentage() {
+          return `${this.week_progress} %`;
+        },
+
+        get_point_category_name(point, dimension) {
+          let series = point.series,
+            isY = dimension === "y",
+            axis = series[isY ? "yAxis" : "xAxis"];
+          return axis.categories[point[isY ? "y" : "x"]];
+        },
+
+        get_module_icon(modname) {
+          return `${M.cfg.wwwroot}/theme/image.php/boost/${modname}/1/icon`;
+        },
+
+        get_module_url(module) {
+          return `${M.cfg.wwwroot}/mod/${module.modname}/view.php?id=${module.id}`;
+        },
+
+        get_interactions_number(interactions) {
+          let interactions_text =
+            interactions == 1
+              ? this.strings.modules_interaction
+              : this.strings.modules_interactions;
+          return `(${interactions} ${interactions_text})`;
+        },
+
+        convert_time(time) {
+          time *= 3600; // pasar las horas a segundos
+          let h = this.strings.hours_short;
+          let m = this.strings.minutes_short;
+          let s = this.strings.seconds_short;
+          let hours = Math.floor(time / 3600);
+          let minutes = Math.floor((time % 3600) / 60);
+          let seconds = Math.floor(time % 60);
+          let text;
+          if (hours >= 1) {
+            if (minutes >= 1) {
+              text = `${hours}${h} ${minutes}${m}`;
+            } else {
+              text = `${hours}${h}`;
+            }
+          } else if (minutes >= 1) {
+            if (seconds >= 1) {
+              text = `${minutes}${m} ${seconds}${s}`;
+            } else {
+              text = `${minutes}${m}`;
+            }
+          } else {
+            text = `${seconds}${s}`;
+          }
+          return text;
+        },
+
+        update_modules_dialog(value) {
+          this.modules_dialog = value;
+        },
+
+        open_chart_help(chart) {
+          let contents = [];
+          let action = "";
+          let objectType = "";
+          let objectName = "";
+          let objectDescription = "";
+          if (chart == "inverted_time") {
+            contents.push({
+              title: this.strings.inverted_time_help_title,
+              description: this.strings.inverted_time_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.inverted_time_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "invested_time";
+            objectDescription =
+              "Help section that provides information about the invested time chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "hours_session") {
+            contents.push({
+              title: this.strings.hours_session_help_title,
+              description: this.strings.hours_session_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.hours_session_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "hours_session";
+            objectDescription =
+              "Help section that provides information about the hours session chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "resources_access") {
+            contents.push({
+              title: this.strings.resources_access_help_title,
+              description: this.strings.resources_access_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.resources_access_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.resources_access_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "resources_access";
+            objectDescription =
+              "Help section that provides information about the resources access chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          }
+          this.help_contents = contents;
+          if (this.help_contents.length) {
+            this.help_dialog = true;
+          }
+        },
+
+        update_help_dialog(value) {
+          this.help_dialog = value;
+        },
+
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
+
+        setGraphicsEventListeners() {
+          let graphics = document.querySelectorAll(".highcharts-container");
+          if (graphics.length < 1) {
+            setTimeout(vue.setGraphicsEventListeners, 500);
+          } else {
+            graphics[0].id = "inverted_time";
+            graphics[1].id = "hours_session";
+            graphics[2].id = "resources_access";
+            graphics.forEach((graph) => {
+              graph.addEventListener("mouseenter", vue.addLogsViewGraphic);
+            });
+          }
+        },
+
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "inverted_time":
+              action = "viewed";
+              objectName = "invested_time";
+              objectType = "chart";
+              objectDescription = "Bar chart that shows";
+              break;
+            case "hours_session":
+              action = "viewed";
+              objectName = "hours_session";
+              objectType = "chart";
+              objectDescription = "Chart showing";
+              break;
+            case "resources_access":
+              action = "viewed";
+              objectName = "resources_access";
+              objectType = "chart";
+              objectDescription = "Chart showing ";
+              break;
+          }
+          vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
+
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "STUDENT_STUDY_SESSIONS",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
+            })
+            .catch((e) => {});
+        },
+      },
+    });
+  }
+
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/student_sessions.js b/notemyprogress/amd/src/student_sessions.js
index e211019ea537d62426390918f26845546021150e..87d34a3a4abe583c1188e43b1465f5ca2dfb25c2 100644
--- a/notemyprogress/amd/src/student_sessions.js
+++ b/notemyprogress/amd/src/student_sessions.js
@@ -1,495 +1,562 @@
-define(["local_notemyprogress/vue",
-        "local_notemyprogress/vuetify",
-        "local_notemyprogress/axios",
-        "local_notemyprogress/moment",
-        "local_notemyprogress/pagination",
-        "local_notemyprogress/chartstatic",
-        "local_notemyprogress/pageheader",
-        "local_notemyprogress/modulesform",
-        "local_notemyprogress/helpdialog",
-    ],
-    function(Vue, Vuetify, Axios, Moment, Pagination, ChartStatic, PageHeader, ModulesForm, HelpDialog) {
-        "use strict";
+define([
+  "local_notemyprogress/vue",
+  "local_notemyprogress/vuetify",
+  "local_notemyprogress/axios",
+  "local_notemyprogress/moment",
+  "local_notemyprogress/pagination",
+  "local_notemyprogress/chartstatic",
+  "local_notemyprogress/pageheader",
+  "local_notemyprogress/modulesform",
+  "local_notemyprogress/helpdialog",
+], function (
+  Vue,
+  Vuetify,
+  Axios,
+  Moment,
+  Pagination,
+  ChartStatic,
+  PageHeader,
+  ModulesForm,
+  HelpDialog
+) {
+  "use strict";
 
-        function init(content) {
-            // console.log(content);
-            Vue.use(Vuetify);
-            Vue.component('pagination', Pagination);
-            Vue.component('chart', ChartStatic);
-            Vue.component('pageheader', PageHeader);
-            Vue.component('modulesform', ModulesForm);
-            Vue.component('helpdialog', HelpDialog);
-            let vue = new Vue({
-                delimiters: ["[[", "]]"],
-                el: "#work_sessions",
-                vuetify: new Vuetify(),
-                data() {
-                    return {
-                        strings : content.strings,
-                        groups : content.groups,
-                        userid : content.userid,
-                        courseid : content.courseid,
-                        timezone : content.timezone,
-                        render_has : content.profile_render,
-                        loading : false,
-                        errors : [],
-                        pages : content.pages,
-
-                        indicators: content.indicators,
-                        resources_access_colors: content.resources_access_colors,
-                        inverted_time_colors: content.inverted_time_colors,
-                        inverted_time: content.indicators.inverted_time,
-                        hours_sessions: content.indicators.hours_sessions,
-                        sections: content.indicators.sections,
-                        sections_map: null,
-                        week_progress: 0,
-                        resource_access_categories: [],
-                        resource_access_data: [],
-                        modules_dialog: false,
+  function init(content) {
+    // //console.log(content);
+    Vue.use(Vuetify);
+    Vue.component("pagination", Pagination);
+    Vue.component("chart", ChartStatic);
+    Vue.component("pageheader", PageHeader);
+    Vue.component("modulesform", ModulesForm);
+    Vue.component("helpdialog", HelpDialog);
+    let vue = new Vue({
+      delimiters: ["[[", "]]"],
+      el: "#work_sessions",
+      vuetify: new Vuetify(),
+      data() {
+        return {
+          strings: content.strings,
+          groups: content.groups,
+          userid: content.userid,
+          courseid: content.courseid,
+          timezone: content.timezone,
+          render_has: content.profile_render,
+          loading: false,
+          errors: [],
+          pages: content.pages,
 
-                        help_dialog: false,
-                        help_contents: [],
-                    }
-                },
-                beforeMount(){
-                    this.create_section_map();
-                    this.set_modules_in_sections();
-                    this.calculate_resources_access();
-                },
-                mounted(){
-                    document.querySelector("#sessions-loader").style.display = "none";
-                    document.querySelector("#work_sessions").style.display = "block";
-                    setTimeout(function() {
-                        vue.setGraphicsEventListeners();
-                    })
-                },
-                methods : {
-                    get_help_content(){
-                        let contents = [];
-                        contents.push({
-                            title: this.strings.section_help_title,
-                            description: this.strings.section_help_description,
-                        });
-                        return contents;
-                    },
+          indicators: content.indicators,
+          resources_access_colors: content.resources_access_colors,
+          inverted_time_colors: content.inverted_time_colors,
+          inverted_time: content.indicators.inverted_time,
+          hours_sessions: content.indicators.hours_sessions,
+          sections: content.indicators.sections,
+          sections_map: null,
+          week_progress: 0,
+          resource_access_categories: [],
+          resource_access_data: [],
+          modules_dialog: false,
 
-                    build_inverted_time_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'bar',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {text: null};
-                        chart.colors = this.inverted_time_colors;
-                        chart.xAxis = {
-                            type: 'category',
-                            crosshair: true,
-                        };
-                        chart.yAxis = {
-                            title: {
-                                text: this.strings.inverted_time_chart_x_axis,
-                            }
-                        };
-                        chart.tooltip = {
-                            shared:true,
-                            useHTML:true,
-                            formatter: function () {
-                                let category_name = this.points[0].key;
-                                let time = vue.convert_time(this.y);
-                                return `<b>${category_name}: </b>${time}`;
-                            }
-                        };
-                        chart.legend = {
-                            enabled: false
-                        };
-                        chart.series = [{
-                            colorByPoint: true,
-                            data: this.inverted_time.data
-                        }];
-                        return chart;
-                    },
+          help_dialog: false,
+          help_contents: [],
+        };
+      },
+      beforeMount() {
+        this.create_section_map();
+        this.set_modules_in_sections();
+        this.calculate_resources_access();
+      },
+      mounted() {
+        document.querySelector("#sessions-loader").style.display = "none";
+        document.querySelector("#work_sessions").style.display = "block";
+        setTimeout(function () {
+          vue.setGraphicsEventListeners();
+        });
+      },
+      methods: {
+        get_help_content() {
+          let contents = [];
+          contents.push({
+            title: this.strings.section_help_title,
+            description: this.strings.section_help_description,
+          });
+          return contents;
+        },
 
-                    build_hours_session_chart() {
-                        let chart = new Object();
-                        chart.title = {text: null};
-                        chart.chart = {
-                            type: 'heatmap',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.xAxis = {
-                            categories: this.strings.days,
-                        };
-                        chart.yAxis = {
-                            categories: this.strings.hours,
-                            title: null,
-                            reversed: true,
-                        };
-                        chart.colorAxis = {
-                            min: 0,
-                            minColor: '#E0E0E0',
-                            maxColor: '#118AB2'
-                        };
-                        chart.legend = {
-                            layout: 'horizontal',
-                            verticalAlign: 'bottom',
-                        };
-                        chart.tooltip = {
-                            formatter: function () {
-                                let xCategoryName = vue.get_point_category_name(this.point, 'x');
-                                let yCategoryName = vue.get_point_category_name(this.point, 'y');
-                                let label = vue.strings.sessions_text;
-                                if (this.point.value == 1) {
-                                    label = vue.strings.session_text;
-                                }
-                                return '<b>' + xCategoryName + ' ' + yCategoryName + '</b>: '
-                                    + this.point.value +' ' + label;
-                            }
-                        };
-                        chart.series = [{
-                            borderWidth: 2,
-                            borderColor: '#FAFAFA',
-                            data: this.hours_sessions,
-                        }];
-                        return chart;
-                    },
+        build_inverted_time_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "bar",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.inverted_time_colors;
+          chart.xAxis = {
+            type: "category",
+            crosshair: true,
+          };
+          chart.yAxis = {
+            title: {
+              text: this.strings.inverted_time_chart_x_axis,
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            formatter: function () {
+              let category_name = this.points[0].key;
+              let time = vue.convert_time(this.y);
+              return `<b>${category_name}: </b>${time}`;
+            },
+          };
+          chart.legend = {
+            enabled: false,
+          };
+          chart.series = [
+            {
+              colorByPoint: true,
+              data: this.inverted_time.data,
+            },
+          ];
+          return chart;
+        },
 
-                    build_resources_access_chart() {
-                        let chart = new Object();
-                        chart.chart = {
-                            type: 'column',
-                            backgroundColor: null,
-                            style: {fontFamily: 'poppins'},
-                        };
-                        chart.title = {text: null};
-                        chart.colors = this.resources_access_colors;
-                        chart.xAxis = {
-                            categories: this.resource_access_categories,
-                            crosshair: true,
-                            title: {
-                                text: this.strings.resource_access_x_axis
-                            },
-                        };
-                        chart.yAxis = {
-                            min: 0,
-                            title: {
-                                text: this.strings.resource_access_y_axis
-                            },
-                        };
-                        chart.plotOptions = {
-                            column: {
-                                stacking: 'normal',
-                            },
-                            series: {
-                                cursor: 'pointer',
-                                point: {
-                                    events: {
-                                        click: function () {
-                                            vue.addLogsIntoDB("viewed", "resources_access", "chart_details", "Provide details informations about the consulted resources");
-                                            vue.modules_dialog = true;
-                                        }
-                                    }
-                                }
-                            }
-                        };
-                        chart.tooltip = {
-                            shared: true,
-                            useHTML: true,
-                            footerFormat: `<i>${this.strings.modules_details}</i>`,
-                        };
-                        chart.series = this.resource_access_data;
-                        return chart;
-                    },
+        build_hours_session_chart() {
+          let chart = new Object();
+          chart.title = { text: null };
+          chart.chart = {
+            type: "heatmap",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.xAxis = {
+            categories: this.strings.days,
+          };
+          chart.yAxis = {
+            categories: this.strings.hours,
+            title: null,
+            reversed: true,
+          };
+          chart.colorAxis = {
+            min: 0,
+            minColor: "#E0E0E0",
+            maxColor: "#118AB2",
+          };
+          chart.legend = {
+            layout: "horizontal",
+            verticalAlign: "bottom",
+          };
+          chart.tooltip = {
+            formatter: function () {
+              let xCategoryName = vue.get_point_category_name(this.point, "x");
+              let yCategoryName = vue.get_point_category_name(this.point, "y");
+              let label = vue.strings.sessions_text;
+              if (this.point.value == 1) {
+                label = vue.strings.session_text;
+              }
+              return (
+                "<b>" +
+                xCategoryName +
+                " " +
+                yCategoryName +
+                "</b>: " +
+                this.point.value +
+                " " +
+                label
+              );
+            },
+          };
+          chart.series = [
+            {
+              borderWidth: 2,
+              borderColor: "#FAFAFA",
+              data: this.hours_sessions,
+            },
+          ];
+          return chart;
+        },
 
-                    update_interactions(week){
-                        this.loading = true;
-                        this.errors = [];
-                        let data = {
-                            action : "studentsessions",
-                            userid : this.userid,
-                            courseid : this.courseid,
-                            weekcode : week.weekcode,
-                            profile : this.render_has,
-                        }
-                        Axios({
-                            method:'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params : data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                                this.inverted_time = response.data.data.indicators.inverted_time;
-                                this.hours_sessions = response.data.data.indicators.hours_sessions;
-                                this.sections = response.data.data.indicators.sections;
-                                this.set_modules_in_sections();
-                                this.calculate_resources_access();
-                            } else {
-                                this.error_messages.push(this.strings.error_network);
-                            }
-                        }).catch((e) => {
-                            this.errors.push(this.strings.api_error_network);
-                        }).finally(() => {
-                            this.loading = false;
-                            vue.addLogsIntoDB("viewed", "week_"+week.weekcode, "week_section", "Week section that allows you to obtain information on a specific week");
-                            vue.setGraphicsEventListeners();
-                        });
-                        return this.data;
-                    },
+        build_resources_access_chart() {
+          let chart = new Object();
+          chart.chart = {
+            type: "column",
+            backgroundColor: null,
+            style: { fontFamily: "poppins" },
+          };
+          chart.title = { text: null };
+          chart.colors = this.resources_access_colors;
+          chart.xAxis = {
+            categories: this.resource_access_categories,
+            crosshair: true,
+            title: {
+              text: this.strings.resource_access_x_axis,
+            },
+          };
+          chart.yAxis = {
+            min: 0,
+            title: {
+              text: this.strings.resource_access_y_axis,
+            },
+          };
+          chart.plotOptions = {
+            column: {
+              stacking: "normal",
+            },
+            series: {
+              cursor: "pointer",
+              point: {
+                events: {
+                  click: function () {
+                    vue.addLogsIntoDB(
+                      "viewed",
+                      "resources_access",
+                      "chart_details",
+                      "Provide details informations about the consulted resources"
+                    );
+                    vue.modules_dialog = true;
+                  },
+                },
+              },
+            },
+          };
+          chart.tooltip = {
+            shared: true,
+            useHTML: true,
+            footerFormat: `<i>${this.strings.modules_details}</i>`,
+          };
+          chart.series = this.resource_access_data;
+          return chart;
+        },
 
-                    create_section_map() {
-                        let sectionsMap = new Map();
-                        let sectionid = 0;
-                        this.indicators.course_cms.forEach(cm => {
-                            sectionid = Number(cm.section);
-                            if (!sectionsMap.has(sectionid)) {
-                                sectionsMap.set(sectionid, [cm]);
-                            } else {
-                                sectionsMap.get(sectionid).push(cm);
-                            }
-                        });
-                        this.sections_map = sectionsMap;
-                    },
+        update_interactions(week) {
+          this.loading = true;
+          this.errors = [];
+          let data = {
+            action: "studentsessions",
+            userid: this.userid,
+            courseid: this.courseid,
+            weekcode: week.weekcode,
+            profile: this.render_has,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+                this.inverted_time =
+                  response.data.data.indicators.inverted_time;
+                this.hours_sessions =
+                  response.data.data.indicators.hours_sessions;
+                this.sections = response.data.data.indicators.sections;
+                this.set_modules_in_sections();
+                this.calculate_resources_access();
+              } else {
+                this.error_messages.push(this.strings.error_network);
+              }
+            })
+            .catch((e) => {
+              this.errors.push(this.strings.api_error_network);
+            })
+            .finally(() => {
+              this.loading = false;
+              vue.addLogsIntoDB(
+                "viewed",
+                "week_" + week.weekcode,
+                "week_section",
+                "Week section that allows you to obtain information on a specific week"
+              );
+              vue.setGraphicsEventListeners();
+            });
+          return this.data;
+        },
 
-                    set_modules_in_sections() {
-                        let sectionid;
-                        this.sections.forEach(section => {
-                            sectionid = Number(section.sectionid);
-                            section.sectionid = sectionid;
-                            section.modules = (this.sections_map.has(sectionid)) ? this.sections_map.get(sectionid) : [];
-                        });
-                    },
+        create_section_map() {
+          let sectionsMap = new Map();
+          let sectionid = 0;
+          this.indicators.course_cms.forEach((cm) => {
+            sectionid = Number(cm.section);
+            if (!sectionsMap.has(sectionid)) {
+              sectionsMap.set(sectionid, [cm]);
+            } else {
+              sectionsMap.get(sectionid).push(cm);
+            }
+          });
+          this.sections_map = sectionsMap;
+        },
 
-                    calculate_resources_access() {
-                        let modulesMap = new Map();
-                        let moduleid, user_cm, mod, total_modules = 0, access_modules = 0;
-                        let modules_names = this.strings.modules_names;
-                        this.sections.forEach(section => {
-                            section.modules.forEach(module => {
-                                (!modulesMap.has(module.modname)) && modulesMap.set(module.modname,{complete:0,pending:0});
-                                mod = modulesMap.get(module.modname);
-                                moduleid = Number(module.id);
-                                module.id = moduleid;
-                                module.complete = false;
-                                module.viewed = false;
-                                module.interactions = 0;
+        set_modules_in_sections() {
+          let sectionid;
+          this.sections.forEach((section) => {
+            sectionid = Number(section.sectionid);
+            section.sectionid = sectionid;
+            section.modules = this.sections_map.has(sectionid)
+              ? this.sections_map.get(sectionid)
+              : [];
+          });
+        },
 
-                                user_cm = this.indicators.user_cms[`cm${module.id}`];
-                                if (user_cm) {
-                                    module.complete = user_cm.complete;
-                                    module.viewed = user_cm.viewed;
-                                    module.interactions = user_cm.interactions;
-                                    (user_cm.complete) ? mod.complete++ : mod.pending++;
-                                    (user_cm.complete) && access_modules++;
-                                } else {
-                                    mod.pending++
-                                }
-                                total_modules++;
-                            });
-                        });
-                        let categories = [], complete_data = [], pending_data = [];
-                        modulesMap.forEach(function(value, key) {
-                            categories.push(modules_names[key] || key);
-                            complete_data.push(value.complete);
-                            pending_data.push(value.pending);
-                        });
-                        this.resource_access_categories = categories;
-                        this.resource_access_data = [
-                            { name: this.strings.resource_access_legend1, data: complete_data },
-                            { name: this.strings.resource_access_legend2, data: pending_data },
-                        ];
-                        this.week_progress = Math.floor((access_modules*100)/total_modules) || 0;
-                    },
+        calculate_resources_access() {
+          let modulesMap = new Map();
+          let moduleid,
+            user_cm,
+            mod,
+            total_modules = 0,
+            access_modules = 0;
+          let modules_names = this.strings.modules_names;
+          this.sections.forEach((section) => {
+            section.modules.forEach((module) => {
+              !modulesMap.has(module.modname) &&
+                modulesMap.set(module.modname, { complete: 0, pending: 0 });
+              mod = modulesMap.get(module.modname);
+              moduleid = Number(module.id);
+              module.id = moduleid;
+              module.complete = false;
+              module.viewed = false;
+              module.interactions = 0;
 
-                    get_progress_percentage() {
-                        return `${this.week_progress} %`;
-                    },
+              user_cm = this.indicators.user_cms[`cm${module.id}`];
+              if (user_cm) {
+                module.complete = user_cm.complete;
+                module.viewed = user_cm.viewed;
+                module.interactions = user_cm.interactions;
+                user_cm.complete ? mod.complete++ : mod.pending++;
+                user_cm.complete && access_modules++;
+              } else {
+                mod.pending++;
+              }
+              total_modules++;
+            });
+          });
+          let categories = [],
+            complete_data = [],
+            pending_data = [];
+          modulesMap.forEach(function (value, key) {
+            categories.push(modules_names[key] || key);
+            complete_data.push(value.complete);
+            pending_data.push(value.pending);
+          });
+          this.resource_access_categories = categories;
+          this.resource_access_data = [
+            { name: this.strings.resource_access_legend1, data: complete_data },
+            { name: this.strings.resource_access_legend2, data: pending_data },
+          ];
+          this.week_progress =
+            Math.floor((access_modules * 100) / total_modules) || 0;
+        },
 
-                    get_point_category_name(point, dimension) {
-                        let series = point.series,
-                            isY = dimension === 'y',
-                            axis = series[isY ? 'yAxis' : 'xAxis'];
-                        return axis.categories[point[isY ? 'y' : 'x']];
-                    },
+        get_progress_percentage() {
+          return `${this.week_progress} %`;
+        },
 
-                    get_module_icon(modname){
-                        return `${M.cfg.wwwroot}/theme/image.php/boost/${modname}/1/icon`;
-                    },
+        get_point_category_name(point, dimension) {
+          let series = point.series,
+            isY = dimension === "y",
+            axis = series[isY ? "yAxis" : "xAxis"];
+          return axis.categories[point[isY ? "y" : "x"]];
+        },
 
-                    get_module_url(module){
-                        return `${M.cfg.wwwroot}/mod/${module.modname}/view.php?id=${module.id}`;
-                    },
+        get_module_icon(modname) {
+          return `${M.cfg.wwwroot}/theme/image.php/boost/${modname}/1/icon`;
+        },
 
-                    get_interactions_number(interactions){
-                        let interactions_text = (interactions == 1) ? this.strings.modules_interaction : this.strings.modules_interactions;
-                        return `(${interactions} ${interactions_text})`;
-                    },
+        get_module_url(module) {
+          return `${M.cfg.wwwroot}/mod/${module.modname}/view.php?id=${module.id}`;
+        },
 
-                    convert_time(time) {
-                        time *= 3600; // pasar las horas a segundos
-                        let h = this.strings.hours_short;
-                        let m = this.strings.minutes_short;
-                        let s = this.strings.seconds_short;
-                        let hours = Math.floor(time / 3600);
-                        let minutes = Math.floor((time % 3600) / 60);
-                        let seconds = Math.floor(time % 60);
-                        let text;
-                        if (hours >= 1) {
-                            if (minutes >= 1) {
-                                text = `${hours}${h} ${minutes}${m}`;
-                            } else {
-                                text = `${hours}${h}`;
-                            }
-                        } else if ((minutes >= 1)) {
-                            if (seconds >= 1) {
-                                text = `${minutes}${m} ${seconds}${s}`;
-                            } else {
-                                text = `${minutes}${m}`;
-                            }
-                        } else {
-                            text = `${seconds}${s}`;
-                        }
-                        return text;
-                    },
+        get_interactions_number(interactions) {
+          let interactions_text =
+            interactions == 1
+              ? this.strings.modules_interaction
+              : this.strings.modules_interactions;
+          return `(${interactions} ${interactions_text})`;
+        },
 
-                    update_modules_dialog (value) {
-                        this.modules_dialog = value;
-                    },
+        convert_time(time) {
+          time *= 3600; // pasar las horas a segundos
+          let h = this.strings.hours_short;
+          let m = this.strings.minutes_short;
+          let s = this.strings.seconds_short;
+          let hours = Math.floor(time / 3600);
+          let minutes = Math.floor((time % 3600) / 60);
+          let seconds = Math.floor(time % 60);
+          let text;
+          if (hours >= 1) {
+            if (minutes >= 1) {
+              text = `${hours}${h} ${minutes}${m}`;
+            } else {
+              text = `${hours}${h}`;
+            }
+          } else if (minutes >= 1) {
+            if (seconds >= 1) {
+              text = `${minutes}${m} ${seconds}${s}`;
+            } else {
+              text = `${minutes}${m}`;
+            }
+          } else {
+            text = `${seconds}${s}`;
+          }
+          return text;
+        },
 
-                    open_chart_help(chart) {
-                        let contents = [];
-                        let action = "";
-                        let objectType = "";
-                        let objectName = "";
-                        let objectDescription = "";
-                        if (chart == "inverted_time") {
-                            contents.push({
-                                title: this.strings.inverted_time_help_title,
-                                description: this.strings.inverted_time_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.inverted_time_help_description_p2,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "invested_time";
-                            objectDescription = "Help section that provides information about the invested time chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "hours_session") {
-                            contents.push({
-                                title: this.strings.hours_session_help_title,
-                                description: this.strings.hours_session_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.hours_session_help_description_p2,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "hours_session";
-                            objectDescription = "Help section that provides information about the hours session chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        } else if (chart == "resources_access") {
-                            contents.push({
-                                title: this.strings.resources_access_help_title,
-                                description: this.strings.resources_access_help_description_p1,
-                            });
-                            contents.push({
-                                description: this.strings.resources_access_help_description_p2,
-                            });
-                            contents.push({
-                                description: this.strings.resources_access_help_description_p3,
-                            });
-                            action = "viewed";
-                            objectType = "help";
-                            objectName = "resources_access";
-                            objectDescription = "Help section that provides information about the resources access chart";
-                            this.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                        }
-                        this.help_contents = contents;
-                        if (this.help_contents.length) {
-                            this.help_dialog = true;
-                        }
-                    },
+        update_modules_dialog(value) {
+          this.modules_dialog = value;
+        },
 
-                    update_help_dialog (value) {
-                        this.help_dialog = value;
-                    },
+        open_chart_help(chart) {
+          let contents = [];
+          let action = "";
+          let objectType = "";
+          let objectName = "";
+          let objectDescription = "";
+          if (chart == "inverted_time") {
+            contents.push({
+              title: this.strings.inverted_time_help_title,
+              description: this.strings.inverted_time_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.inverted_time_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "invested_time";
+            objectDescription = "Help section that provides information about the invested time chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "hours_session") {
+            contents.push({
+              title: this.strings.hours_session_help_title,
+              description: this.strings.hours_session_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.hours_session_help_description_p2,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "hours_session";
+            objectDescription =
+              "Help section that provides information about the hours session chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          } else if (chart == "resources_access") {
+            contents.push({
+              title: this.strings.resources_access_help_title,
+              description: this.strings.resources_access_help_description_p1,
+            });
+            contents.push({
+              description: this.strings.resources_access_help_description_p2,
+            });
+            contents.push({
+              description: this.strings.resources_access_help_description_p3,
+            });
+            action = "viewed";
+            objectType = "help";
+            objectName = "resources_access";
+            objectDescription =
+              "Help section that provides information about the resources access chart";
+            this.addLogsIntoDB(
+              action,
+              objectName,
+              objectType,
+              objectDescription
+            );
+          }
+          this.help_contents = contents;
+          if (this.help_contents.length) {
+            this.help_dialog = true;
+          }
+        },
 
-                    get_timezone(){
-                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`
-                        return information;
-                    },
+        update_help_dialog(value) {
+          this.help_dialog = value;
+        },
 
-                    setGraphicsEventListeners() {
-                        let graphics = document.querySelectorAll('.highcharts-container');
-                        if(graphics.length<1) {
-                            setTimeout(vue.setGraphicsEventListeners,500);
-                        } else {
-                            graphics[0].id = "inverted_time";
-                            graphics[1].id = "hours_session";
-                            graphics[2].id = "resources_access";
-                            graphics.forEach((graph) => {
-                                graph.addEventListener('mouseenter', vue.addLogsViewGraphic);
-                            })
-                        }
-                    },
+        get_timezone() {
+          let information = `${this.strings.ss_change_timezone} ${this.timezone}`;
+          return information;
+        },
 
-                    addLogsViewGraphic(e) {
-                        event.stopPropagation();
-                        var action = "";
-                        var objectName = "";
-                        var objectType = "";
-                        var objectDescription = "";
-                        switch(e.target.id) {
-                            case "inverted_time":
-                                action = "viewed";
-                                objectName = "invested_time";
-                                objectType = "chart";
-                                objectDescription = "Bar chart that shows";
-                                break;
-                            case "hours_session":
-                                action = "viewed";
-                                objectName = "hours_session";
-                                objectType = "chart";
-                                objectDescription = "Chart showing";
-                                break;
-                            case "resources_access":
-                                action = "viewed";
-                                objectName = "resources_access";
-                                objectType = "chart";
-                                objectDescription = "Chart showing ";
-                                break;
-                        }
-                        vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
-                    },
+        setGraphicsEventListeners() {
+          let graphics = document.querySelectorAll(".highcharts-container");
+          if (graphics.length < 1) {
+            setTimeout(vue.setGraphicsEventListeners, 500);
+          } else {
+            graphics[0].id = "inverted_time";
+            graphics[1].id = "hours_session";
+            graphics[2].id = "resources_access";
+            graphics.forEach((graph) => {
+              graph.addEventListener("mouseenter", vue.addLogsViewGraphic);
+            });
+          }
+        },
 
-                    addLogsIntoDB(action, objectName, objectType, objectDescription) {
-                        let data = {
-                            courseid: content.courseid,
-                            userid: content.userid,
-                            action: "addLogs",
-                            sectionname: "STUDENT_STUDY_SESSIONS",
-                            actiontype: action,
-                            objectType: objectType,
-                            objectName: objectName,
-                            currentUrl: document.location.href,
-                            objectDescription: objectDescription,
-                        };
-                        Axios({
-                            method:'get',
-                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
-                            params : data,
-                        }).then((response) => {
-                            if (response.status == 200 && response.data.ok) {
-                            }
-                        }).catch((e) => {
-                        });
-                    },
+        addLogsViewGraphic(e) {
+          event.stopPropagation();
+          var action = "";
+          var objectName = "";
+          var objectType = "";
+          var objectDescription = "";
+          switch (e.target.id) {
+            case "inverted_time":
+              action = "viewed";
+              objectName = "invested_time";
+              objectType = "chart";
+              objectDescription = "Bar chart that shows";
+              break;
+            case "hours_session":
+              action = "viewed";
+              objectName = "hours_session";
+              objectType = "chart";
+              objectDescription = "Chart showing";
+              break;
+            case "resources_access":
+              action = "viewed";
+              objectName = "resources_access";
+              objectType = "chart";
+              objectDescription = "Chart showing ";
+              break;
+          }
+          vue.addLogsIntoDB(action, objectName, objectType, objectDescription);
+        },
 
-                }
+        addLogsIntoDB(action, objectName, objectType, objectDescription) {
+          let data = {
+            courseid: content.courseid,
+            userid: content.userid,
+            action: "addLogs",
+            sectionname: "STUDENT_STUDY_SESSIONS",
+            actiontype: action,
+            objectType: objectType,
+            objectName: objectName,
+            currentUrl: document.location.href,
+            objectDescription: objectDescription,
+          };
+          Axios({
+            method: "get",
+            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+            params: data,
+          })
+            .then((response) => {
+              if (response.status == 200 && response.data.ok) {
+              }
             })
-        }
+            .catch((e) => {});
+        },
+      },
+    });
+  }
 
-        return {
-            init : init
-        };
-    });
\ No newline at end of file
+  return {
+    init: init,
+  };
+});
diff --git a/notemyprogress/amd/src/teacher.js b/notemyprogress/amd/src/teacher.js
new file mode 100644
index 0000000000000000000000000000000000000000..25b58222436c3453d4e40f7103826300830921b8
--- /dev/null
+++ b/notemyprogress/amd/src/teacher.js
@@ -0,0 +1,272 @@
+define(["local_notemyprogress/vue",
+        "local_notemyprogress/vuetify",
+        "local_notemyprogress/axios",
+        "local_notemyprogress/pagination",
+        "local_notemyprogress/chartstatic",
+        "local_notemyprogress/pageheader",
+        "local_notemyprogress/helpdialog",
+    ],
+    function(Vue, Vuetify, Axios, Pagination, ChartStatic, PageHeader, HelpDialog) {
+        "use strict";
+
+        function init(content) {
+            // //console.log(content);
+            Vue.use(Vuetify);
+            Vue.component('pagination', Pagination);
+            Vue.component('chart', ChartStatic);
+            Vue.component('pageheader', PageHeader);
+            Vue.component('helpdialog', HelpDialog);
+            let vue = new Vue({
+                delimiters: ["[[", "]]"],
+                el: "#teacher",
+                vuetify: new Vuetify(),
+                data() {
+                    return {
+                        strings : content.strings,
+                        groups : content.groups,
+                        userid : content.userid,
+                        courseid : content.courseid,
+                        timezone : content.timezone,
+                        render_has : content.profile_render,
+
+                        indicators: content.indicators,
+                        week_resources_colors: content.week_resources_colors,
+                        search: null,
+                        week_resources_categories: [],
+                        week_resources_data: [],
+
+                        help_dialog: false,
+                        help_contents: [],
+                    }
+                },
+                beforeMount(){
+                    this.calculate_week_resources();
+                },
+                mounted(){
+                    document.querySelector("#sessions-loader").style.display = "none";
+                    document.querySelector("#teacher").style.display = "block";
+                },
+                methods : {
+                    get_help_content(){
+                        let contents = [];
+                        contents.push({
+                            title: this.strings.section_help_title,
+                            description: this.strings.section_help_description,
+                        });
+                        return contents;
+                    },
+
+                    get_course_grade(){
+                        let grade = Number(this.indicators.course.grademax);
+                        return (this.isInt(grade)) ? grade : grade.toFixed(2);
+                    },
+
+                    calculate_week_resources() {
+                        let categories = [], data = [];
+                        let week_name;
+                        this.indicators.weeks.forEach(week => {
+                            week_name = `${week.name} ${(week.position+1)}`;
+                            categories.push(week_name);
+                            data.push(week.cms);
+                        });
+                        let name = this.capitalizeFirstLetter(this.strings.teacher_indicators_modules);
+                        this.week_resources_categories = categories;
+                        this.week_resources_data = [{ name, data}];
+                    },
+
+                    build_week_resources_chart() {
+                        let chart = new Object();
+                        chart.chart = {
+                            type: 'bar',
+                            backgroundColor: null,
+                            style: {fontFamily: 'poppins'},
+                        };
+                        chart.title = {
+                            text: null,
+                        };
+                        chart.colors = this.week_resources_colors;
+                        chart.xAxis = {
+                            //categories: this.week_resources_categories
+                            categories:;
+                            
+                        };
+                        chart.yAxis = {
+                            min: 0,
+                                title: {
+                                //text: this.strings.teacher_indicators_week_resources_yaxis_title
+                                text:;
+                            }
+                        };
+                        chart.legend = {
+                            enabled: false
+                        };
+                       // chart.series = this.week_resources_data;
+                       chart.series = ;
+                        return chart;
+                    },
+
+                    build_weeks_sessions_chart() {
+                        let chart = new Object();
+                        chart.chart = {
+                            type: 'heatmap',
+                            backgroundColor: null,
+                            style: {fontFamily: 'poppins'},
+                        };
+                        chart.title = {
+                            text: null,
+                        };
+                        chart.xAxis = {
+                            categories: this.strings.weeks,
+                        };
+                        chart.yAxis = {
+                            categories: this.indicators.sessions.categories,
+                            title: null,
+                            reversed: true,
+                        };
+                        chart.colorAxis = {
+                            min: 0,
+                            minColor: '#E0E0E0',
+                            maxColor: '#118AB2'
+                        };
+                        chart.legend = {
+                            layout: 'horizontal',
+                            verticalAlign: 'bottom',
+                        };
+                        chart.tooltip = {
+                            formatter: function () {
+                                let days = vue.indicators.sessions.weeks[this.point.y][this.point.x] || '';
+                                let xCategoryName = vue.get_point_category_name(this.point, 'x');
+                                let yCategoryName = vue.get_point_category_name(this.point, 'y');
+                                let label = vue.strings.teacher_indicators_sessions;
+                                if (this.point.value == 1) {
+                                    label = vue.strings.teacher_indicators_session;
+                                }
+                                return '<b>' + yCategoryName + ' ' + xCategoryName + '</b>: '
+                                    + this.point.value +' ' + label + '<br/>' + days;
+                            }
+                        };
+                        chart.series = [{
+                            borderWidth: 2,
+                            borderColor: '#FAFAFA',
+                            data: this.indicators.sessions.data,
+                        }];
+                        return chart;
+                    },
+
+                    table_headers(){
+                        let headers = [
+                            { text: '', value : 'id', align : 'center', sortable : false},
+                            { text: this.strings.thead_name , value : 'firstname'},
+                            { text: this.strings.thead_lastname , value : 'lastname'},
+                            { text: this.strings.thead_email , value : 'email'},
+                            { text: this.strings.thead_progress , value : 'progress_percentage',  align : 'center'},
+                            { text: this.strings.thead_sessions , value : 'sessions_number',  align : 'center'},
+                            { text: this.strings.thead_time , value : 'inverted_time', align : 'center'},
+                        ];
+                        return headers;
+                    },
+
+                    get_picture_url(userid){
+                        let url = `${M.cfg.wwwroot}/user/pix.php?file=/${userid}/f1.jpg`;
+                        return url;
+                    },
+
+                    get_percentage_progress(value){
+                        return `${value} %`;
+                    },
+
+                    get_progress_tooltip(item){
+                        let module_label = this.strings.teacher_indicators_modules;
+                        let finished_label = this.strings.teacher_indicators_finished;
+                        if (item.cms.complete == 1) {
+                            module_label = this.strings.teacher_indicators_module;
+                            finished_label = this.strings.teacher_indicators_finalized;
+                        }
+                        return `${item.cms.complete} ${module_label} ${finished_label} ${this.strings.of_conector} ${item.cms.total}`;
+                    },
+
+                    get_point_category_name(point, dimension) {
+                        let series = point.series,
+                            isY = dimension === 'y',
+                            axis = series[isY ? 'yAxis' : 'xAxis'];
+                        return axis.categories[point[isY ? 'y' : 'x']];
+                    },
+
+                    capitalizeFirstLetter(string) {
+                        return string.charAt(0).toUpperCase() + string.slice(1);
+                    },
+
+                    isInt(n) {
+                        return n % 1 === 0;
+                    },
+
+                    open_chart_help(chart) {
+                        let contents = [];
+                        if (chart == "week_resources") {
+                            contents.push({
+                                title: this.strings.week_resources_help_title,
+                                description: this.strings.week_resources_help_description_p1,
+                            });
+                            contents.push({
+                                description: this.strings.week_resources_help_description_p2,
+                            });
+                        } else if (chart == "weeks_sessions") {
+                            contents.push({
+                                title: this.strings.weeks_sessions_help_title,
+                                description: this.strings.week_sessions_help_description_p1,
+                            });
+                            contents.push({
+                                description: this.strings.week_sessions_help_description_p2,
+                            });
+                        } else if (chart == "progress_table") {
+                            contents.push({
+                                title: this.strings.progress_table_help_title,
+                                description: this.strings.progress_table_help_description,
+                            });
+                        }
+                        this.help_contents = contents;
+                        if (this.help_contents.length) {
+                            this.help_dialog = true;
+                        }
+                    },
+
+                    update_help_dialog (value) {
+                        this.help_dialog = value;
+                    },
+
+                    get_timezone(){
+                        let information = `${this.strings.ss_change_timezone} ${this.timezone}`
+                        return information;
+                    },
+
+                    addLogsIntoDB(action, objectName, objectType, objectDescription) {
+                        let data = {
+                            courseid: content.courseid,
+                            userid: content.userid,
+                            action: "addLogs",
+                            sectionname: "TEACHER_GENERAL_INDICATORS",
+                            actiontype: action,
+                            objectType: objectType,
+                            objectName: objectName,
+                            currentUrl: document.location.href,
+                            objectDescription: objectDescription,
+                        };
+                        Axios({
+                            method:'get',
+                            url: M.cfg.wwwroot + "/local/notemyprogress/ajax.php",
+                            params : data,
+                        }).then((response) => {
+                            if (response.status == 200 && response.data.ok) {
+                            }
+                        }).catch((e) => {
+                        });
+                    },
+
+                }
+            })
+        }
+
+        return {
+            init : init
+        };
+    });
\ No newline at end of file
diff --git a/notemyprogress/classes/configweeks.php b/notemyprogress/classes/configweeks.php
index 6812ff9fdff215a7c9f322f14290a4d6569c7ea6..285d68d8c3a2d02821de66b66cf7f0f8d7ea342c 100644
--- a/notemyprogress/classes/configweeks.php
+++ b/notemyprogress/classes/configweeks.php
@@ -29,7 +29,8 @@ require_once("lib_trait.php");
 
 use stdClass;
 
-class configweeks {
+class configweeks
+{
     use \lib_trait;
 
     public $course;
@@ -39,7 +40,8 @@ class configweeks {
     public $current_sections;
     public $startin;
 
-    function __construct($course, $userid){
+    function __construct($course, $userid)
+    {
         global $DB;
         $this->course = self::get_course($course);
         $this->user = self::get_user($userid);
@@ -51,16 +53,17 @@ class configweeks {
     }
 
     /**
-     * Gets the last instance configured for the weeks of Note My Progress.If you have not yet been
-     * Configured weeks in a course, the last instance is the one that creates the plugin by default.
+     * Gets the last instance configured for Fliplearning weeks. If no weeks have been 
+     * configured in a course yet, the last instance is the one created by default by the plugin.
      *
-     * @return mixed A FieldSet object that contains the first record that Match makes with the query
+     * @return mixed a fieldset object that contains the first record that matches the query.
      */
-    public function last_instance(){
+    public function last_instance()
+    {
         global $DB;
         $sql = "select * from {notemyprogress_instances} where courseid = ? order by id desc LIMIT 1";
         $instance = $DB->get_record_sql($sql, array($this->course->id));
-        if(!isset($instance) || empty($instance)){
+        if (!isset($instance) || empty($instance)) {
             $instance = self::create_instance($this->course->id);
         }
         return $instance;
@@ -72,7 +75,8 @@ class configweeks {
      *
      * @return mixed A FieldSet object that contains the created record
      */
-    public function create_instance(){
+    public function create_instance()
+    {
         global $DB;
         $instance = new stdClass();
         $instance->courseid = $this->course->id;
@@ -89,7 +93,8 @@ class configweeks {
      *
      * @return Array a list with the weeks configured in a course
      */
-    public function get_weeks(){
+    public function get_weeks()
+    {
         global $DB;
         $sql = "SELECT * FROM {notemyprogress_weeks} 
                 WHERE courseid = ? AND instanceid = ? AND timedeleted IS NULL ORDER BY POSITION ASC";
@@ -104,21 +109,22 @@ class configweeks {
      * @return Array a list with the weeks of the course and sections assigned to each
      * @throws Coding_Exception |DML_EXCEPTION.
      */
-    public function get_weeks_with_sections(){
+    public function get_weeks_with_sections()
+    {
         $weeks = $this->weeks;
-        if(count($weeks) == 0){
+        if (count($weeks) == 0) {
             $weeks[] = self::create_first_week();
             $this->weeks = $weeks;
         }
         $course_sections = self::get_course_sections();
-        foreach($weeks as $position => $week){
+        foreach ($weeks as $position => $week) {
             $week->removable = true;
-            if($position == 0){
+            if ($position == 0) {
                 $week->removable = false;
             }
             $week->sections = array();
             $week->name = get_string('setweeks_week', 'local_notemyprogress');
-            if(!isset($week->date_format)) {
+            if (!isset($week->date_format)) {
                 $week->date_format = "Y-m-d";
                 $week->weekstartlabel = self::to_format("Y-m-d", $week->weekstart);
                 $week->weekendlabel = self::to_format("Y-m-d", $week->weekend);
@@ -128,7 +134,7 @@ class configweeks {
             $week->position = $position;
             $week->delete_confirm = false;
             $sections = self::get_week_sections($week->weekcode);
-            foreach($sections as $key => $section){
+            foreach ($sections as $key => $section) {
                 $section->name = $section->section_name;
                 $section->visible = self::get_current_visibility($section->sectionid);
                 $section = self::validate_section($section, $course_sections);
@@ -145,7 +151,8 @@ class configweeks {
      * @return stdClass An object with the week created
      * @throws dml_exception
      */
-    private function create_first_week(){
+    private function create_first_week()
+    {
         global $DB;
         $start = strtotime('next monday');
         $end = strtotime('next monday + 6 day') + 86399;
@@ -167,12 +174,13 @@ class configweeks {
     }
 
     /**
-     * Genera un código de identificación para una semana de Note My Progress. El código se forma
-     * en base al año actual, id de la instancia de Note My Progress en el curso y posición de la semana
+     * Genera un código de identificación para una semana de Fliplearning. El código se forma
+     * en base al año actual, id de la instancia de Fliplearning en el curso y posición de la semana
      *
      * @return int entero que representa el identificador de la semana
      */
-    private function generate_week_code($weekposition){
+    private function generate_week_code($weekposition)
+    {
         $code = $this->instance->year . $this->instance->id . $this->course->id . $weekposition;
         $code = (int) $code;
         return $code;
@@ -185,7 +193,8 @@ class configweeks {
      *
      * @return array lista con las secciones asignadas a la semana
      */
-    public function get_week_sections ($weekcode){
+    public function get_week_sections($weekcode)
+    {
         global $DB;
         $sql = "select * from {notemyprogress_sections} where weekcode = ? and timedeleted IS NULL order by position asc";
         $week_sections = $DB->get_records_sql($sql, array($weekcode));
@@ -200,9 +209,10 @@ class configweeks {
      * @return boolean valor booleano que representa si la sección es visible o no. Retorna null en caso de
      *                 no encontrar la sección
      */
-    private function get_current_visibility($sectionid){
-        foreach($this->current_sections as $section){
-            if($section['sectionid'] == $sectionid){
+    private function get_current_visibility($sectionid)
+    {
+        foreach ($this->current_sections as $section) {
+            if ($section['sectionid'] == $sectionid) {
                 return $section['visible'];
             }
         }
@@ -218,12 +228,13 @@ class configweeks {
      *
      * @return object objeto con la sección actualizada
      */
-    private function validate_section($section, $course_sections){
+    private function validate_section($section, $course_sections)
+    {
         $exist = false;
-        foreach($course_sections as $key => $course_section){
-            if($section->sectionid == $course_section['sectionid']){
+        foreach ($course_sections as $key => $course_section) {
+            if ($section->sectionid == $course_section['sectionid']) {
                 $exist = true;
-                if($section->name != $course_section['name']){
+                if ($section->name != $course_section['name']) {
                     self::update_section_name($section->sectionid, $course_section['name']);
                     $section->name = $course_section['name'];
                 }
@@ -235,29 +246,31 @@ class configweeks {
     }
 
     /**
-     * Actualiza el nombre de una sección de Note My Progress
+     * Actualiza el nombre de una sección de Fliplearning
      *
      * @param object $sectionid id de la seccion para actualizar
      * @param object $name nuevo nombre para la sección
      *
      * @return void
      */
-    private function update_section_name($sectionid, $name){
+    private function update_section_name($sectionid, $name)
+    {
         global $DB;
         $sql = "update {notemyprogress_sections} set section_name = ? where sectionid = ?";
         $DB->execute($sql, array($name, $sectionid));
     }
 
     /**
-     * Verifica si un curso tiene configurada las semanas de Note My Progress
+     * Verifica si un curso tiene configurada las semanas de Fliplearning
      *
      * @return boolean valor booleano que representa si las semanas han sido configuradas
      */
-    public function is_set(){
+    public function is_set()
+    {
         $is_set = true;
         $settings = self::get_settings();
-        foreach($settings as $configured){
-            if(!$configured){
+        foreach ($settings as $configured) {
+            if (!$configured) {
                 $is_set = false;
                 break;
             }
@@ -266,11 +279,12 @@ class configweeks {
     }
 
     /**
-     * Obtiene las configuraciones de Note My Progress en un curso
+     * Obtiene las configuraciones de Fliplearning en un curso
      *
      * @return array lista de valores booleanos con las configuraciones del curso
      */
-    public function get_settings(){
+    public function get_settings()
+    {
         $tz = self::get_timezone();
         date_default_timezone_set($tz);
         $course_start = $this->startin;
@@ -283,14 +297,14 @@ class configweeks {
         $first_week = new stdClass();
         $first_week->has_sections = isset($weeks[0]) && !empty($weeks[0]->sections);
         $first_week->started = time() >= $course_start;
-        if($first_week->has_sections){
+        if ($first_week->has_sections) {
             $settings['weeks'] = true;
         }
-        if($first_week->started){
+        if ($first_week->started) {
             $settings['course_start'] = true;
         }
         $students = self::get_student_ids();
-        if(!empty($students)){
+        if (!empty($students)) {
             $settings['has_students'] = true;
         }
         return $settings;
@@ -298,17 +312,18 @@ class configweeks {
 
     /**
      * Obtiene una lista de las secciones de un curso (sin la configuración de
-     * las semanas de Note My Progress)
+     * las semanas de Fliplearning)
      *
      * @return array lista de secciones del curso
      */
-    public function get_sections_without_week(){
+    public function get_sections_without_week()
+    {
         $course_sections = self::get_course_sections();
         $weeks = self::get_weeks_with_sections();
-        foreach($weeks as $key => $week){
-            foreach($week->sections as $section){
-                foreach($course_sections as $index => $course_section){
-                    if($course_section['sectionid'] == $section->sectionid){
+        foreach ($weeks as $key => $week) {
+            foreach ($week->sections as $section) {
+                foreach ($course_sections as $index => $course_section) {
+                    if ($course_section['sectionid'] == $section->sectionid) {
                         unset($course_sections[$index]);
                     }
                 }
@@ -319,17 +334,18 @@ class configweeks {
     }
 
     /**
-     * Guarda las semanas de Note My Progress configuradas en un curso
+     * Guarda las semanas de Fliplearning configuradas en un curso
      *
      * @param array $weeks semanas a guardar
      *
      * @return void
      * @throws Exception
      */
-    public function save_weeks($weeks){
+    public function save_weeks($weeks)
+    {
         global $DB;
         self::delete_weeks();
-        foreach($weeks as $key => $week){
+        foreach ($weeks as $key => $week) {
             $week = self::save_week($week, $key);
             self::save_week_sections($week->weekcode, $week->sections);
         }
@@ -341,13 +357,14 @@ class configweeks {
      * @return void
      * @throws dml_exception
      */
-    public function delete_weeks(){
+    public function delete_weeks()
+    {
         global $DB;
         $weeks = $this->weeks;
-        foreach($weeks as $week){
+        foreach ($weeks as $week) {
             self::delete_week_sections($week->weekcode);
             $sql = "update {notemyprogress_weeks} set timedeleted = ? where id = ?";
-            $DB->execute($sql, array(self::now_timestamp() , $week->id));
+            $DB->execute($sql, array(self::now_timestamp(), $week->id));
         }
     }
 
@@ -359,10 +376,11 @@ class configweeks {
      * @return void
      * @throws dml_exception
      */
-    public function delete_week_sections($weekcode){
+    public function delete_week_sections($weekcode)
+    {
         global $DB;
         $sql = "update {notemyprogress_sections} set timedeleted = ? where weekcode = ?";
-        $DB->execute($sql, array(self::now_timestamp() , $weekcode));
+        $DB->execute($sql, array(self::now_timestamp(), $weekcode));
     }
 
     /**
@@ -374,7 +392,8 @@ class configweeks {
      * @return void
      * @throws Exception
      */
-    private function save_week($week, $position){
+    private function save_week($week, $position)
+    {
         global $DB;
         $week->weekcode = self::generate_week_code($position);
         $week->position = $position;
@@ -401,9 +420,10 @@ class configweeks {
      * @return void
      * @throws dml_exception
      */
-    public function save_week_sections($weekcode, $sections){
+    public function save_week_sections($weekcode, $sections)
+    {
         self::delete_week_sections($weekcode);
-        foreach ($sections as $position => $section){
+        foreach ($sections as $position => $section) {
             self::save_week_section($section, $weekcode, $position);
         }
     }
@@ -417,7 +437,8 @@ class configweeks {
      *
      * @return void
      */
-    private function save_week_section($section, $weekcode, $position){
+    private function save_week_section($section, $weekcode, $position)
+    {
         global $DB;
         $section->sectionid = $section->sid;
         $section->section_name = self::get_section_name_from_id($section->sectionid, $position);
@@ -438,7 +459,8 @@ class configweeks {
      *
      * @return void
      */
-    private function get_section_name_from_id($sectionid, $position){
+    private function get_section_name_from_id($sectionid, $position)
+    {
         global $DB;
         $result = $DB->get_record("course_sections", ["id" => $sectionid]);
         $name = self::get_section_name($result, $position);
@@ -454,18 +476,19 @@ class configweeks {
      *
      * @return Object object with the current week at the last week
      */
-    public function get_current_week($last_if_course_finished = true){
+    public function get_current_week($last_if_course_finished = true)
+    {
         $current = null;
         $now = time();
         $lastweek = null;
-        foreach($this->weeks as $week){
+        foreach ($this->weeks as $week) {
             $lastweek = $week;
-            if($now >= $week->weekstart  && $now <= $week->weekend){
+            if ($now >= $week->weekstart  && $now <= $week->weekend) {
                 $current = $week;
                 break;
             }
         }
-        if($last_if_course_finished){
+        if ($last_if_course_finished) {
             $current = $lastweek;
         }
         return $current;
@@ -479,11 +502,12 @@ class configweeks {
      * @return object Object with the week to which the current date corresponds less 7 days.In case of
      * Do not find it Returns NULL
      */
-    public function get_past_week(){
+    public function get_past_week()
+    {
         $past = null;
         $day_past_week = strtotime("-7 day", time());
-        foreach($this->weeks as $week){
-            if($day_past_week >= $week->weekstart && $day_past_week <= $week->weekend){
+        foreach ($this->weeks as $week) {
+            if ($day_past_week >= $week->weekstart && $day_past_week <= $week->weekend) {
                 $past = $week;
                 break;
             }
@@ -491,10 +515,11 @@ class configweeks {
         return $past;
     }
 
-    public function get_weeks_paginator(){
+    public function get_weeks_paginator()
+    {
         $pages = array();
         $current_week = self::get_current_week();
-        foreach($this->weeks as $key => $week){
+        foreach ($this->weeks as $key => $week) {
             $page = new stdClass();
             $page->number = $key + 1;
             $page->weekcode = $week->weekcode;
@@ -505,6 +530,8 @@ class configweeks {
             $page->is_current_week = $week->weekcode == $current_week->weekcode ? true : false;
             array_push($pages, $page);
         }
+        //file_put_contents('D:\Alexis\Stage_IRIT\NMP\debug\log.txt', print_r("pages = ", TRUE), FILE_APPEND);    
+        //file_put_contents('D:\Alexis\Stage_IRIT\NMP\debug\log.txt', print_r($pages, TRUE), FILE_APPEND);
         return $pages;
     }
 }
diff --git a/notemyprogress/classes/lib_trait.php b/notemyprogress/classes/lib_trait.php
index faca18082dc6ee0bf2bc1eb8d2bbc65046d9d5be..6cf0537022a54ce834b8e0a3ee1ee08ec7e3f7d7 100644
--- a/notemyprogress/classes/lib_trait.php
+++ b/notemyprogress/classes/lib_trait.php
@@ -26,7 +26,11 @@
 
 require_once(dirname(__FILE__) . '/../../../config.php');
 
-trait lib_trait {
+
+use \local_notemyprogress\resourcetype as resourcetype;
+
+trait lib_trait
+{
 
     /**
      * Obtiene el registro de un curso en base al parámetro $course.
@@ -38,11 +42,12 @@ trait lib_trait {
      *
      * @return mixed un objeto fieldset que contiene el primer registro que hace match a la consulta
      */
-    public function get_course($course){
-        if(gettype($course) == "string"){
+    public function get_course($course)
+    {
+        if (gettype($course) == "string") {
             $course = (int) $course;
         }
-        if(gettype($course) == "integer"){
+        if (gettype($course) == "integer") {
             $course = self::get_course_from_id($course);
         }
         return $course;
@@ -55,7 +60,8 @@ trait lib_trait {
      *
      * @return mixed un objeto fieldset que contiene el primer registro que hace match a la consulta
      */
-    public static function get_course_from_id($courseid){
+    public static function get_course_from_id($courseid)
+    {
         global $DB;
         $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
         return $course;
@@ -71,11 +77,12 @@ trait lib_trait {
      *
      * @RETURN MIXED An Fieldset object containing the first record that matches the consultation
      */
-    public function get_user($user){
-        if(gettype($user) == "string"){
+    public function get_user($user)
+    {
+        if (gettype($user) == "string") {
             $user = (int) $user;
         }
-        if(gettype($user) == "integer"){
+        if (gettype($user) == "integer") {
             $user = self::get_user_from_id($user);
         }
         return $user;
@@ -88,33 +95,36 @@ trait lib_trait {
      *
      * @return mixed un objeto fieldset que contiene el primer registro que hace match a la consulta
      */
-    public static function get_user_from_id($userid){
+    public static function get_user_from_id($userid)
+    {
         global $DB;
         $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
         return $user;
     }
 
-    protected function get_full_users(){
+    protected function get_full_users()
+    {
         global $DB;
         $users = [];
         list($in, $invalues) = $DB->get_in_or_equal($this->users);
         $fields = self::USER_FIELDS;
         $sql = "SELECT $fields FROM {user} WHERE id $in ORDER BY lastname ASC";
         $rows = $DB->get_recordset_sql($sql, $invalues);
-        foreach($rows as $key => $row){
+        foreach ($rows as $key => $row) {
             $users[$row->id] = $row;
         }
         $rows->close();
         return $users;
     }
 
-    protected function get_users_last_access(){
+    protected function get_users_last_access()
+    {
         global $DB;
         $user_access = [];
         list($in, $invalues) = $DB->get_in_or_equal($this->users);
         $sql = "SELECT *  FROM {user_lastaccess} WHERE courseid = {$this->course->id} AND userid $in";
         $rows = $DB->get_recordset_sql($sql, $invalues);
-        foreach($rows as $row){
+        foreach ($rows as $row) {
             $user_access[$row->userid] = $row;
         }
         $rows->close();
@@ -127,7 +137,8 @@ trait lib_trait {
      *
      * @return array con las secciones del curso
      */
-    public function get_course_sections(){
+    public function get_course_sections()
+    {
         $modinfo  = get_fast_modinfo($this->course->id);
         $sections = $modinfo->get_section_info_all();
         $sections = self::format_sections($sections);
@@ -142,9 +153,10 @@ trait lib_trait {
      *
      * @return array un vector que contiene las secciones de un curso con un grupo de campos reducido
      */
-    private function format_sections($sections){
+    private function format_sections($sections)
+    {
         $full_sections = array();
-        foreach ($sections as $index => $section){
+        foreach ($sections as $index => $section) {
             $full_section = [
                 'sectionid' => $section->id,
                 'section' => $section->section,
@@ -166,8 +178,9 @@ trait lib_trait {
      *
      * @return string cadena de texto que contiene el nombre de las sección
      */
-    private function get_section_name($section, $current_index){
-        if(isset($section->name) ){
+    private function get_section_name($section, $current_index)
+    {
+        if (isset($section->name)) {
             return $section->name;
         }
         $build_name = get_string("course_format_{$this->course->format}", 'local_notemyprogress');
@@ -175,11 +188,14 @@ trait lib_trait {
         return $name;
     }
 
-    public function get_course_modules($include_hidden_cms = false, $formatted = true){
+    public function get_course_modules($include_hidden_cms = false, $formatted = true)
+    {
         $modinfo = get_fast_modinfo($this->course->id);
         $modules = $modinfo->get_cms();
         if (!$include_hidden_cms) {
-            $modules = array_filter($modules, function($module){ return $module->visible == 1;});
+            $modules = array_filter($modules, function ($module) {
+                return $module->visible == 1;
+            });
         }
         if ($formatted) {
             $modules = self::format_course_module($modules);
@@ -187,14 +203,16 @@ trait lib_trait {
         return $modules;
     }
 
-    public function get_course_module($id){
+    public function get_course_module($id)
+    {
         $cm = get_course_and_cm_from_cmid($id)[1];
         return $cm;
     }
 
-    private function format_course_module($modules){
+    private function format_course_module($modules)
+    {
         $full_modules = array();
-        foreach ($modules as $module){
+        foreach ($modules as $module) {
             $full_module = [
                 'id' => $module->id,
                 'module' => $module->module,
@@ -212,10 +230,11 @@ trait lib_trait {
         return $full_modules;
     }
 
-    protected function get_course_modules_from_sections($sections, $include_hidden_cms = false, $formatted = false){
+    protected function get_course_modules_from_sections($sections, $include_hidden_cms = false, $formatted = false)
+    {
         $cms = array();
-        foreach($sections as $key => $section){
-            if($section->visible != 1){
+        foreach ($sections as $key => $section) {
+            if ($section->visible != 1) {
                 continue;
             }
             $modules = self::get_sequence_section($section->sectionid);
@@ -223,7 +242,9 @@ trait lib_trait {
         }
         if (count($cms)) {
             if (!$include_hidden_cms) {
-                $cms = array_filter($cms, function($module){ return ($module && $module->visible == 1);});
+                $cms = array_filter($cms, function ($module) {
+                    return ($module && $module->visible == 1);
+                });
             }
             if ($formatted) {
                 $cms = self::format_course_module($cms);
@@ -232,19 +253,25 @@ trait lib_trait {
         return $cms;
     }
 
-    public function get_sequence_section($sectionid) {
+    public function get_sequence_section($sectionid)
+    {
         global $DB;
         $sql =  "select sequence from {course_sections} where id = ?";
         $sequence = $DB->get_record_sql($sql, array($sectionid));
+        //debug_text::print("sequence", $sequence);
         $course_modules = self::get_course_module_section($sequence->sequence);
+        //debug_text::print("course_modules", $course_modules);
         return $course_modules;
     }
 
-    public function get_course_module_section($sequence) {
+    public function get_course_module_section($sequence)
+    {
+        // //file_put_contents('D:\Alexis\Stage_IRIT\NMP\debug\log.txt', print_r("sequence = \r\n", TRUE), FILE_APPEND);
+        // //file_put_contents('D:\Alexis\Stage_IRIT\NMP\debug\log.txt', print_r($sequence, TRUE), FILE_APPEND);
         $sequence = explode(',', $sequence);
         $course_modules = array();
         foreach ($sequence as $key => $course_module_id) {
-            $module = get_coursemodule_from_id( '', $course_module_id, $this->course->id, MUST_EXIST);
+            $module = get_coursemodule_from_id('', $course_module_id, $this->course->id, MUST_EXIST);
             array_push($course_modules, $module);
         }
         return $course_modules;
@@ -259,10 +286,11 @@ trait lib_trait {
      *
      * @return string text chain with the formatted date
      */
-    public function to_format($format, $timestamp){
+    public function to_format($format, $timestamp)
+    {
         $tz = self::get_timezone();
         date_default_timezone_set($tz);
-        if(gettype($timestamp) == "string"){
+        if (gettype($timestamp) == "string") {
             $timestamp = (int) $timestamp;
         }
         $date = date($format, $timestamp);
@@ -276,7 +304,8 @@ trait lib_trait {
      *
      * @return int entero que representa la cantidad de segundos desde la Época Unix hasta la fecha actual
      */
-    public function now_timestamp(){
+    public function now_timestamp()
+    {
         $tz = self::get_timezone();
         date_default_timezone_set($tz);
         $now = new DateTime();
@@ -294,7 +323,8 @@ trait lib_trait {
      * @return int entero que representa la cantidad de segundos desde la Época Unix hasta la fecha enviada
      * @throws Exception
      */
-    public function to_timestamp($date){
+    public function to_timestamp($date)
+    {
         $tz = self::get_timezone();
         date_default_timezone_set($tz);
         $fecha = new DateTime($date);
@@ -308,16 +338,18 @@ trait lib_trait {
      *
      * @return string cadena de texto con una zona horaria
      */
-    public function get_timezone(){
+    public function get_timezone()
+    {
         $timezone = usertimezone($this->user->timezone);
         $timezone = self::accent_remover($timezone);
-        if(!self::is_valid_timezone($timezone)){
+        if (!self::is_valid_timezone($timezone)) {
             $timezone = self::get_server_timezone();
         }
         return $timezone;
     }
 
-    public function get_server_timezone(){
+    public function get_server_timezone()
+    {
         $date = new DateTime();
         $timeZone = $date->getTimezone();
         return $timeZone->getName();
@@ -330,7 +362,8 @@ trait lib_trait {
      *
      * @return string cadena de texto con una zona horaria sin acentos
      */
-    public function accent_remover($cadena){
+    public function accent_remover($cadena)
+    {
         $cadena = str_replace(
             array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
             array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
@@ -339,19 +372,23 @@ trait lib_trait {
         $cadena = str_replace(
             array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
             array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
-            $cadena );
+            $cadena
+        );
         $cadena = str_replace(
             array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
             array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
-            $cadena );
+            $cadena
+        );
         $cadena = str_replace(
             array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
             array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
-            $cadena );
+            $cadena
+        );
         $cadena = str_replace(
             array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
             array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
-            $cadena );
+            $cadena
+        );
         $cadena = str_replace(
             array('ñ', 'Ñ', 'ç', 'Ç'),
             array('n', 'N', 'c', 'C'),
@@ -368,7 +405,8 @@ trait lib_trait {
      *
      * @return boolean valor booleano que representa si la zona horaria es válida
      */
-    public function is_valid_timezone($timezone) {
+    public function is_valid_timezone($timezone)
+    {
         return in_array($timezone, timezone_identifiers_list());
     }
 
@@ -377,16 +415,17 @@ trait lib_trait {
      *
      * @return array lista con todos los ids de los estudiantes
      */
-    public function get_student_ids($filtered_with_groups = true){
+    public function get_student_ids($filtered_with_groups = true)
+    {
         $roles = array(5);
         $students = array();
         $users = array();
         $context = context_course::instance($this->course->id);
-        foreach($roles as $role){
+        foreach ($roles as $role) {
             $users = array_merge($users, get_role_users($role, $context));
         }
-        foreach($users as $user){
-            if(!in_array($user->id, $students)){
+        foreach ($users as $user) {
+            if (!in_array($user->id, $students)) {
                 $students[] = $user->id;
             }
         }
@@ -396,34 +435,37 @@ trait lib_trait {
         return $students;
     }
 
-    protected function filter_users_by_selected_group($users) {
+    protected function filter_users_by_selected_group($users)
+    {
         global $COURSE, $USER;
         $group_manager = new \local_notemyprogress\group_manager($COURSE, $USER);
         $participants = new \local_notemyprogress\course_participant($USER->id, $COURSE->id);
         $groups = $participants->all_groups_with_members($COURSE->groupmode);
         $selectedgroup = $group_manager->selected_group();
-        if(!isset($selectedgroup->groupid) || $selectedgroup->groupid == 0 ){
+        if (!isset($selectedgroup->groupid) || $selectedgroup->groupid == 0) {
             return $users;
         }
         foreach ($groups as $group) {
-            if($selectedgroup->groupid == $group->id){
+            if ($selectedgroup->groupid == $group->id) {
                 $users = self::extract_users_in_group($users, $group->members);
             }
         }
         return $users;
     }
 
-    private function extract_users_in_group($allusers, $ingroup){
+    private function extract_users_in_group($allusers, $ingroup)
+    {
         $extracted = array();
-        foreach($allusers as $userid){
-            if(isset($ingroup[$userid]) && !in_array($userid, $extracted)){
+        foreach ($allusers as $userid) {
+            if (isset($ingroup[$userid]) && !in_array($userid, $extracted)) {
                 array_push($extracted, $userid);
             }
         }
         return $extracted;
     }
 
-    protected function get_users_from_ids($ids){
+    protected function get_users_from_ids($ids)
+    {
         global $DB;
         list($in, $invalues) = $DB->get_in_or_equal($ids);
         $fields = self::USER_FIELDS;
@@ -433,16 +475,17 @@ trait lib_trait {
         return $users;
     }
 
-    public function extract_ids ($elements){
+    public function extract_ids($elements)
+    {
         $ids = array();
-        if(gettype($elements) == 'array' && count($elements)>0){
-            foreach($elements as $key => $element){
-                if(gettype($element) == "array"){
-                    if(isset($element['id'])){
+        if (gettype($elements) == 'array' && count($elements) > 0) {
+            foreach ($elements as $key => $element) {
+                if (gettype($element) == "array") {
+                    if (isset($element['id'])) {
                         $ids[] = $element['id'];
                     }
-                }elseif(gettype($element) == "object"){
-                    if(isset($element->id)){
+                } elseif (gettype($element) == "object") {
+                    if (isset($element->id)) {
                         $ids[] = $element->id;
                     }
                 }
@@ -451,16 +494,17 @@ trait lib_trait {
         return $ids;
     }
 
-    public function extract_elements_field($elements, $field){
+    public function extract_elements_field($elements, $field)
+    {
         $list = array();
-        if(gettype($elements) == 'array'){
-            foreach($elements as $key => $element){
-                if(gettype($element) == "array"){
-                    if(isset($element[$field])){
+        if (gettype($elements) == 'array') {
+            foreach ($elements as $key => $element) {
+                if (gettype($element) == "array") {
+                    if (isset($element[$field])) {
                         $list[] = $element[$field];
                     }
-                }elseif(gettype($element) == "object"){
-                    if(isset($element->$field)){
+                } elseif (gettype($element) == "object") {
+                    if (isset($element->$field)) {
                         $list[] = $element->$field;
                     }
                 }
@@ -469,7 +513,8 @@ trait lib_trait {
         return $list;
     }
 
-    public function convert_time($measure, $time, $type = "hour"){
+    public function convert_time($measure, $time, $type = "hour")
+    {
         $response = false;
         $valid_params = true;
         if ($measure == 'minutes') {
@@ -479,7 +524,7 @@ trait lib_trait {
         } else {
             $valid_params = false;
         }
-        if($valid_params){
+        if ($valid_params) {
             $horas = floor($time / 3600);
             $minutos = floor(($time % 3600) / 60);
             $segundos = $time % 60;
@@ -492,7 +537,8 @@ trait lib_trait {
         return $response;
     }
 
-    protected function convert_time_as_string($hours, $minutes, $seconds = null){
+    protected function convert_time_as_string($hours, $minutes, $seconds = null)
+    {
         $text = [
             'minute' => get_string("fml_minute", "local_notemyprogress"),
             'minutes' => get_string("fml_minutes", "local_notemyprogress"),
@@ -503,7 +549,7 @@ trait lib_trait {
         ];
         $hour = new stdClass();
         $hour->text = $hours == 1 ? $text['hour'] : $text['hours'];
-        $hour->stringify_value = $hours <= 9 ? "0$hours" : $hours ;
+        $hour->stringify_value = $hours <= 9 ? "0$hours" : $hours;
         $hour->output = $hours == 0 ? "" : "$hour->stringify_value $hour->text";
 
         $minute = new stdClass();
@@ -524,8 +570,9 @@ trait lib_trait {
         return $response;
     }
 
-    protected function convert_time_as_hour($hours, $minutes, $seconds = null){
-        $hour = $hours <= 9 ? "0$hours" : $hours ;
+    protected function convert_time_as_hour($hours, $minutes, $seconds = null)
+    {
+        $hour = $hours <= 9 ? "0$hours" : $hours;
         $minute = $minutes <= 9 ? "0$minutes" : $minutes;
         $second = $seconds <= 9 ? "0$seconds" : $seconds;
         $response = "$hour:$minute:$second";
@@ -533,28 +580,30 @@ trait lib_trait {
         return $response;
     }
 
-    public function minutes_to_hours($minutes, $decimals = 2){
+    public function minutes_to_hours($minutes, $decimals = 2)
+    {
         $hours = 0;
-        if($minutes <= 0){
+        if ($minutes <= 0) {
             return $hours;
-        }else{
-            if($decimals > 0){
+        } else {
+            if ($decimals > 0) {
                 $hours = number_format($minutes / 60, 2);
-            }else{
+            } else {
                 $hours = $minutes / 60;
             }
         }
         return $hours;
     }
 
-    protected function get_date_label($date) {
+    protected function get_date_label($date)
+    {
         $date = (int) $date;
         $tz = self::get_timezone();
         date_default_timezone_set($tz);
         $day_number = date('d', $date);
-        $day_code = strtolower(date('D',$date));
+        $day_code = strtolower(date('D', $date));
         $day_name = get_string("fml_{$day_code}_short", 'local_notemyprogress');
-        $month_code = strtolower(date('M',$date));
+        $month_code = strtolower(date('M', $date));
         $month_name = get_string("fml_{$month_code}_short", 'local_notemyprogress');
         $year = date('Y', $date);
         $hour = date('g', $date);
@@ -573,7 +622,8 @@ trait lib_trait {
      *
      * @return object objecto con las condiciones de busqueda para los logs de interacciones
      */
-    protected function conditions_for_work_sessions($start, $end){
+    protected function conditions_for_work_sessions($start, $end)
+    {
         $conditions = array();
         if (isset($start)) {
             $condition = new stdClass();
@@ -591,4 +641,42 @@ trait lib_trait {
         }
         return $conditions;
     }
-}
\ No newline at end of file
+
+    //Planning
+
+    public function get_resource_type($cm)
+    {
+        global $DB;
+        $query = "SELECT f.mimetype FROM {files} f JOIN {context} c  ON c.id = f.contextid
+                  WHERE c.instanceid = ? AND contextlevel = ? AND f.mimetype <> 'NULL' AND f.filesize > 0";
+        $file = $DB->get_record_sql($query, array($cm, CONTEXT_MODULE));
+        if (!isset($file->mimetype)) {
+            $type = resourcetype::get_default_type();
+        } else {
+            $type = resourcetype::get_type($file->mimetype);
+        }
+
+        return $type;
+    }
+
+    public function update_array_key_by($field, $values)
+    {
+        $transformed = array();
+        foreach ($values as $value) {
+            if (gettype($value) == 'array' && isset($value[$field])) {
+                $transformed[$value[$field]] = $value;
+            }
+            if (gettype($value) == 'object' && isset($value->$field)) {
+                $transformed[$value->$field] = $value;
+            }
+        }
+        return $transformed;
+    }
+
+    public function day_to_english($day)
+    {
+        $day = strtolower($day);
+        $days_EN = ["lun" => "mon", "mar" => "tue", "mier" => "wed", "jue" => "thu", "vie" => "fri", "sab" => "sat", "dom" => "sun"];
+        return isset($days_EN[$day]) ? $days_EN[$day] : null;
+    }
+}
diff --git a/notemyprogress/classes/metareflexion.php b/notemyprogress/classes/metareflexion.php
new file mode 100644
index 0000000000000000000000000000000000000000..f66991f3037309dd1969c2fee89d01e6368b0463
--- /dev/null
+++ b/notemyprogress/classes/metareflexion.php
@@ -0,0 +1,429 @@
+<?php
+
+namespace local_notemyprogress;
+
+require_once("lib_trait.php");
+
+
+use stdClass;
+
+class metareflexion
+{
+    use \lib_trait;
+
+    public $course;
+    public $user;
+    public $weekcode;
+    public $hours;
+    public $metareflexionid;
+
+    public $lastweekid;
+    public $classroom_hours;
+    public $hours_off_course;
+    public $previous_class_learning;
+    public $benefit_going_class;
+
+    public $days;
+    public $goals_committed;
+    public $goals_completed;
+    public $questions;
+
+    function __construct($course, $userid, $idmetareflexion = null)
+    {
+        global $DB;
+
+        $this->course = self::get_course($course);
+        $this->user = self::get_user($userid);
+
+        $configweeks = new \local_notemyprogress\configweeks($this->course->id, $this->user->id);
+        $this->weeks = $configweeks->get_weeks_with_sections();
+        //debug_text::print("this->weeks",$this->weeks);
+        $this->current_week = $configweeks->get_current_week();
+        $this->past_week = $configweeks->get_past_week();
+
+        $this->weekcode = null;
+        $this->days = [];
+        $this->hours = null;
+        $this->goals_committed = [];
+        $this->metareflexionid = $idmetareflexion;
+    }
+
+
+    public function get_days_committed($id_module)
+    {
+        global $DB;
+        $sql = "select d.description from {notemyprogress_days} d,{notemyprogress_days_modules} dm where d.id = dm.id_days and dm.id_course_modules = ?";
+        $days = $DB->get_records_sql($sql, array($id_module));
+        return $days;
+    }
+
+
+    // public function get_previous_weeks(){
+    //     global $DB;
+    //     $weeks = $this->weeks;
+    //     foreach ($weeks as $key => $week) {
+    //         $sql =  "select * from {mdl_notemyprogress_questions} where weekcode = ? and userid = ? order by id desc limit 1";
+    //         $questions = $DB->get_records_sql($sql, array($week->weekcode, $this->user->id));
+    //         foreach ($weeks as $key => $week) {
+    //         }
+    //     }
+    // }
+
+    public function find_last_week()
+    {
+        $set_last_week = self::set_last_week();
+        if (empty($set_last_week)) {
+            $set_last_week = new stdClass();
+        }
+        $fq = self::find_questions($set_last_week);
+        $set_last_week->questions = $fq;
+        return $set_last_week;
+    }
+
+    public function set_last_week()
+    {
+        global $DB;
+        $last_week = new stdClass();
+        $last_week->userid = $this->user->id;
+        $last_week->weekcode = null;
+        $last_week->classroom_hours = 0;
+        $last_week->hours_off_course = 0;
+        $last_week->objectives_reached = null;
+        $last_week->previous_class_learning = null;
+        $last_week->benefit_going_class = null;
+        $last_week->feeling = null;
+        if (empty($this->past_week)) {
+            return null;
+        } else {
+            $sql =  "select * from {st_rpt_work_last_weeks} where weekcode = ? and userid = ? order by id desc limit 1";
+            $last_week_query = $DB->get_record_sql($sql, array($this->past_week->weekcode, $this->user->id));
+            if (!empty($last_week_query)) {
+                $last_week = $last_week_query;
+                $last_week->weekcode = $this->past_week->weekcode;
+            }
+        }
+        return $last_week;
+    }
+
+    private function find_questions($last_week)
+    {
+        global $DB;
+        $sql =  "select * from {st_rpt_questions}";
+        $questions = $DB->get_records_sql($sql);
+        foreach ($questions as $key => $question) {
+            $answers = self::find_answers($question->id);
+            if ($question->id == 1) {
+                $objectives_reached = isset($last_week->objectives_reached) ? $last_week->objectives_reached : null;
+                $question->answer_selected = $objectives_reached;
+            } elseif ($question->id == 2) {
+                $previous_class_learning = isset($last_week->previous_class_learning) ? $last_week->previous_class_learning : null;
+                $question->answer_selected = $previous_class_learning;
+            } elseif ($question->id == 3) {
+                $benefit_going_class = isset($last_week->benefit_going_class) ? $last_week->benefit_going_class : null;
+                $question->answer_selected = $benefit_going_class;
+            } elseif ($question->id == 4) {
+                $feeling = isset($last_week->feeling) ? $last_week->feeling : null;
+                $question->answer_selected = $feeling;
+            }
+
+            $question->answers = $answers;
+        }
+        $questions = self::update_texts_from_strings($questions);
+        //debug_text::print("questions",$questions);
+        return $questions;
+    }
+
+    private function update_texts_from_strings($questions)
+    {
+        foreach ($questions as $question) {
+            $question->enunciated = get_string($question->enunciated, 'local_notemyprogress');
+            foreach ($question->answers as $answer) {
+                $answer->enunciated = get_string($answer->enunciated, 'local_notemyprogress');
+            }
+        }
+        return $questions;
+    }
+
+    public function find_answers($id_questions)
+    {
+        global $DB;
+        $sql =  "select * from {st_rpt_answers} where questionid = ?";
+        $answers = $DB->get_records_sql($sql, array($id_questions));
+        return $answers;
+    }
+
+
+
+    public function find_current_week_new($reports)
+    {
+        $array_current_week = array();
+
+        $current_wk_schedule = self::get_schedules($this->current_week->weekcode);
+        //debug_text::print("current_wk_schedule",$current_wk_schedule);
+
+        //debug_text::print("this->current_week", $this->current_week);
+        foreach ($this->current_week->sections as $key => $section) {
+            //debug_text::print("sectionid", $section->sectionid);
+            $course_modules = self::get_sequence_section($section->sectionid);
+            //debug_text::print("course_modules", $course_modules);
+            foreach ($course_modules as $key => $cm) {
+                //debug_text::print("cm", $cm);
+                //if ($cm->modname == "resource") {
+                //debug_text::print("resource");
+                $cm->modname = self::get_resource_type($cm->id);
+                // if ($current_wk_schedule) {
+                //     //debug_text::print("current_wk_schedule exists");
+                //     $days_committed_for_module = $this->get_days_committed($cm->id);
+                //     foreach ($days_committed_for_module as $key => $day) {
+                //         array_push($days_committed[$day->description], $cm->id);
+                //     }
+                // }
+            }
+        }
+        
+        //debug_text::print("days_committed", $days_committed);
+
+        $current_week = new stdClass();
+        $current_week->weekly_schedules_id = null;
+        $current_week->weekcode = $this->current_week->weekcode;
+        
+        $current_week->weekly_schedules_goals = [];
+        $dias_planificados = array(
+            "monday" => array(),
+            "tuesday" => array(),
+            "wednesday" => array(),
+            "thursday" => array(),
+            "friday" => array(),
+            "saturday" => array(),
+            "sunday" => array(),
+        );
+        $dias_trabajados = array(
+            "monday" => array(),
+            "tuesday" => array(),
+            "wednesday" => array(),
+            "thursday" => array(),
+            "friday" => array(),
+            "saturday" => array(),
+            "sunday" => array(),
+        );
+        $weekly_schedules_days = new stdClass();
+        $weekly_schedules_days->dias_planificados = $dias_planificados;
+        $weekly_schedules_days->dias_trabajados = $dias_trabajados;
+        $current_week->weekly_schedules_days = $weekly_schedules_days;
+       
+        $current_week->weekly_schedules_hours = 1;
+        
+        $current_week->weekly_cm = $course_modules;
+        $goals_cat = $this->get_goals_cat();
+        //$goals_committed = array();
+        if ($current_wk_schedule) {
+             $current_week->weekly_schedules_id = $current_wk_schedule->id;
+             $current_week->weekly_schedules_goals = $reports->goals_report_metereflexion($current_week->weekcode);
+             $current_week->weekly_schedules_days = $reports->days_report_metereflexion($current_week->weekcode);
+             //array_push($goals_committed, self::get_goals_id($current_wk_schedule));
+         }
+         $current_week->weekly_schedules_hours = $reports->hours_report_metereflexion($current_week->weekcode);
+        $current_week->goals_categories = $goals_cat;
+        //$current_week->goals_committed = [];
+
+        array_push($array_current_week, $current_week);
+        return $array_current_week;
+    }
+
+    public function get_schedules($weekcode)
+    {
+        global $DB;
+        $sql =  "select * from {st_rpt_weekly_schedules} where userid = ? and weekcode = ?";
+        $cm_week_schedules = $DB->get_record_sql($sql, array($this->user->id, $weekcode));
+        return $cm_week_schedules;
+    }
+
+
+    public function save_metareflexion()
+    {
+        if (!isset($this->weekcode) || !isset($this->days) || !isset($this->goals_committed) || !isset($this->hours)) {
+            return false;
+        }
+       //debug_text::print("this->goals_committed in metareflexion", $this->goals_committed);
+
+        global $DB;
+        //Add the weekly schedule to the st_rpt_weekly_schedules table
+        $metareflexion = new stdClass();
+        $metareflexion->userid = $this->user->id;
+        $metareflexion->weekcode = $this->weekcode;
+        $metareflexion->days = $this->days;
+        $metareflexion->hours = $this->hours;
+        $metareflexion->timecreated = self::now_timestamp();
+        $metareflexion->timemodified = self::now_timestamp();
+        $meta = $DB->insert_record("st_rpt_weekly_schedules", $metareflexion, true);
+
+        //Add goals committed to the notemyprogress_goals table
+        foreach ($this->goals_committed as $key => $id_goal_cat) {
+            $goal = new stdClass();
+            //$goal->userid = $this->user->id;
+            $goal->id_goals_categories = $id_goal_cat;
+            $goal->id_weekly_schedules = (self::get_schedules($this->weekcode))->id;
+            //$goal->completed = 0;
+            //debug_text::print("goal",$goal);
+            $DB->insert_record("notemyprogress_goals", $goal, true);
+
+        }
+        //debug_text::print("finished");
+        //Create days in notemyprogress_days table
+        $day_descriptions = array("monday", "tuesday", "wednesday", "thursday", "friday", 'saturday', 'sunday');
+        $d_array = json_decode($this->days, true);
+        foreach ($day_descriptions as $day_description) {
+            $day = new stdClass();
+            $day->userid = $this->user->id;
+            $day->id_weekly_schedules = $meta;
+            $day->description = $day_description;
+            $id_day = $DB->insert_record("notemyprogress_days", $day, true);
+            //Create an entry in notemyprogress_days_modules table for each day and module associated
+            foreach ($d_array[$day_description] as $key => $id_module) {
+                $days_modules = new stdClass();
+                $days_modules->id_course_modules = $id_module;
+                $days_modules->id_days = $id_day;
+                $DB->insert_record("notemyprogress_days_modules", $days_modules, true);
+            }
+        }
+        //return metareflexion created
+        $this->metareflexionid = $meta;
+        $metareflexion->id = $meta;
+        return $metareflexion;
+    }
+
+    public function update_metareflexion()
+    {
+        if (!isset($this->metareflexionid) || !isset($this->days) || !isset($this->goals_committed) || !isset($this->hours)) {
+            return false;
+        }
+        global $DB;
+        //update schedule
+        $metareflexion = new stdClass();
+        $metareflexion->id = $this->metareflexionid;
+        $metareflexion->hours = $this->hours;
+        $metareflexion->timemodified = self::now_timestamp();
+        //debug_text::print("metareflexion",$metareflexion);
+        $sql = "update {st_rpt_weekly_schedules} set hours = ?, timemodified = ? where id = ?";
+        $result = $DB->execute($sql, array($this->hours, self::now_timestamp(), $this->metareflexionid));
+
+        // //delete or add goals committed to the notemyprogress_goals table
+        // $sql = "select id from {notemyprogress_goals}";
+        // $query_goals = $DB->get_records_sql($sql);
+        // $goals_stored = array();
+        // foreach ($query_goals as $key => $goal) {
+        //     array_push($goal->id);
+        // }
+        // $goals_to_add = array_diff($this->goals_committed, $goals_stored);
+        // $goals_to_remove = array_diff($goals_stored, $this->goals_committed);
+        // //Add the goals in $this->goals_committed and absent in the notemyprogress_goals table
+        // foreach ($goals_to_add as $key => $id_goal) {
+        //     $goal = new stdClass();
+        //     $goal->userid = $this->user->id;
+        //     $goal->id_goals_categories = $id_goal;
+        //     $goal->weekcode = $this->weekcode;
+        //     $goal->completed = 0;
+        //     $DB->insert_record("notemyprogress_goals", $goal, true);
+        // }
+        // //Delete the goals absent in $this->goals_committed and currently stored in the notemyprogress_goals table
+        // foreach ($goals_to_remove as $key => $id_goal) {
+        //     $sql = "delete from {notemyprogress_goals} where id = ?";
+        //     $result = $DB->execute($sql, array($id_goal));
+        // }
+
+        //debug_text::print("metareflexion->id",$metareflexion->id);
+        //Delete previous notemyprogress_goals entries
+        $sql = "delete from {notemyprogress_goals} where id_weekly_schedules = ? ";
+        $result = $DB->execute($sql,array($metareflexion->id));
+        //debug_text::print("after delete");
+        //Add entries
+        //debug_text::print("this->goals_committed",$this->goals_committed);
+        foreach ($this->goals_committed as $key => $id_goal) {
+            $goal = new stdClass();
+            //$goal->userid = $this->user->id;
+            $goal->id_goals_categories = $id_goal;
+            $goal->id_weekly_schedules = (self::get_schedules($this->weekcode))->id;
+            //$goal->completed = 0;
+            $DB->insert_record("notemyprogress_goals", $goal, true);
+        }
+        //debug_text::print("hello123423");
+
+        //Delete previous notemyprogress_days_modules entries
+        $sql = "delete from {notemyprogress_days_modules} where id_days in (Select id from {notemyprogress_days} where id_weekly_schedules = ?) ";
+        $result = $DB->execute($sql,array($metareflexion->id));
+        //debug_text::print("after delete2");
+        //Add entries
+        $d_array = json_decode($this->days, true);
+        foreach ($d_array as $key => $day) {
+            //debug_text::print("this->metareflexionid",$this->metareflexionid);
+            //debug_text::print("key",$key);
+            $sql = "select id from {notemyprogress_days} where id_weekly_schedules = ? and description = ? ";
+            $id_day = $DB->get_record_sql($sql, array($this->metareflexionid, $key));
+            //debug_text::print("id_day",$id_day);
+            //Create an entry in notemyprogress_days_modules table for each day and module associated
+            foreach ($day as $key => $id_module) {
+                //debug_text::print("module");
+                $days_modules = new stdClass();
+                $days_modules->id_course_modules = $id_module;
+                $days_modules->id_days = $id_day->id;
+                //debug_text::print("days_modules",$days_modules);
+                $DB->insert_record("notemyprogress_days_modules", $days_modules, true);
+            }
+        }
+        return $metareflexion;
+    }
+
+    public function save_lastweek()
+    {
+        //debug_text::print("enter save_lastweek ");
+        global $DB;
+        $lastweek = new stdClass();
+        $lastweek->userid = $this->user->id;
+        $lastweek->weekcode = $this->weekcode;
+        $lastweek->classroom_hours = $this->classroom_hours;
+        $lastweek->hours_off_course = $this->hours_off_course;
+        $lastweek->objectives_reached =  $this->objectives_reached;
+        $lastweek->previous_class_learning = $this->previous_class_learning;
+        $lastweek->benefit_going_class = $this->benefit_going_class;
+        $lastweek->feeling = $this->feeling;
+        //debug_text::print("lastweek",$lastweek);
+        $id = $DB->insert_record("st_rpt_work_last_weeks", $lastweek, true);
+        $lastweek->id = $id;
+        return $lastweek;
+    }
+
+    public function update_lastweek()
+    {
+         if (!isset($this->lastweekid) || !isset($this->classroom_hours) || !isset($this->hours_off_course) || !isset($this->previous_class_learning) || !isset($this->benefit_going_class)) {
+             return false;
+         }
+        global $DB;
+        $lastweek = new stdClass();
+        $lastweek->id = $this->lastweekid;
+        $lastweek->classroom_hours = $this->classroom_hours;
+        $lastweek->hours_off_course = $this->hours_off_course;
+        $lastweek->objectives_reached =  $this->objectives_reached;
+        $lastweek->previous_class_learning = $this->previous_class_learning;
+        $lastweek->benefit_going_class = $this->benefit_going_class;
+        $lastweek->feeling = $this->feeling;
+        //debug_text::print("lastweek",$lastweek);
+        $sql = "update {st_rpt_work_last_weeks} set classroom_hours = ?, hours_off_course = ?,objectives_reached = ?, previous_class_learning = ?, benefit_going_class = ? ,feeling = ?  where id = ?";
+        $result = $DB->execute($sql, array($lastweek->classroom_hours,  $lastweek->hours_off_course,$lastweek->objectives_reached ,$lastweek->previous_class_learning, $lastweek->benefit_going_class,$lastweek->feeling, $lastweek->id));
+        return $lastweek;
+    }
+
+    public function get_goals_cat()
+    {
+        global $DB;
+        $sql =  "select * from {notemyprogress_goals_ct}";
+        $goals_cat_res = $DB->get_records_sql($sql);
+        return $goals_cat_res;
+    }
+    public function get_goals_id($week_schedule)
+    {
+        global $DB;
+        $sql =  "select g.id from {notemyprogress_goals} g";
+        $goals_res = $DB->get_records_sql($sql);
+        return $goals_res;
+    }
+}
diff --git a/notemyprogress/classes/phpml/ModelManager.php b/notemyprogress/classes/phpml/ModelManager.php
index e0f5be579262af8cc08ecc5b910acdd3a418e7d9..b8fc2573e9e5884072726337ae44eb52514dea50 100644
--- a/notemyprogress/classes/phpml/ModelManager.php
+++ b/notemyprogress/classes/phpml/ModelManager.php
@@ -20,7 +20,7 @@ class ModelManager
             throw new SerializeException(sprintf('Class "%s" cannot be serialized.', gettype($estimator)));
         }
 
-        $result = file_put_contents($filepath, $serialized, LOCK_EX);
+        $result = //file_put_contents($filepath, $serialized, LOCK_EX);
         if ($result === false) {
             throw new FileException(sprintf('File "%s" cannot be saved.', basename($filepath)));
         }
diff --git a/notemyprogress/classes/phpml/SupportVectorMachine/SupportVectorMachine.php b/notemyprogress/classes/phpml/SupportVectorMachine/SupportVectorMachine.php
index e320567b65b63ac1fda4a68356e7914be33b178b..0ccd0c865b1abd1566449107f47b6a28c51a04ca 100644
--- a/notemyprogress/classes/phpml/SupportVectorMachine/SupportVectorMachine.php
+++ b/notemyprogress/classes/phpml/SupportVectorMachine/SupportVectorMachine.php
@@ -120,10 +120,10 @@ class SupportVectorMachine
         $this->shrinking = $shrinking;
         $this->probabilityEstimates = $probabilityEstimates;
 
-        $rootPath = realpath(implode(DIRECTORY_SEPARATOR, [__DIR__, '..', '..'])).DIRECTORY_SEPARATOR;
+        $rootPath = realpath(implode(DIRECTORY_SEPARATOR, [__DIR__, '..', '..'])) . DIRECTORY_SEPARATOR;
 
-        $this->binPath = $rootPath.'bin'.DIRECTORY_SEPARATOR.'libsvm'.DIRECTORY_SEPARATOR;
-        $this->varPath = $rootPath.'var'.DIRECTORY_SEPARATOR;
+        $this->binPath = $rootPath . 'bin' . DIRECTORY_SEPARATOR . 'libsvm' . DIRECTORY_SEPARATOR;
+        $this->varPath = $rootPath . 'var' . DIRECTORY_SEPARATOR;
     }
 
     public function setBinPath(string $binPath): void
@@ -150,12 +150,12 @@ class SupportVectorMachine
         $this->targets = array_merge($this->targets, $targets);
 
         $trainingSet = DataTransformer::trainingSet($this->samples, $this->targets, in_array($this->type, [Type::EPSILON_SVR, Type::NU_SVR], true));
-        file_put_contents($trainingSetFileName = $this->varPath.uniqid('phpml', true), $trainingSet);
-        $modelFileName = $trainingSetFileName.'-model';
+        //file_put_contents($trainingSetFileName = $this->varPath . uniqid('phpml', true), $trainingSet);
+        $modelFileName = $trainingSetFileName . '-model';
 
         $command = $this->buildTrainCommand($trainingSetFileName, $modelFileName);
         $output = [];
-        exec(escapeshellcmd($command).' 2>&1', $output, $return);
+        exec(escapeshellcmd($command) . ' 2>&1', $output, $return);
 
         unlink($trainingSetFileName);
 
@@ -226,9 +226,9 @@ class SupportVectorMachine
     private function runSvmPredict(array $samples, bool $probabilityEstimates): string
     {
         $testSet = DataTransformer::testSet($samples);
-        file_put_contents($testSetFileName = $this->varPath.uniqid('phpml', true), $testSet);
-        file_put_contents($modelFileName = $testSetFileName.'-model', $this->model);
-        $outputFileName = $testSetFileName.'-output';
+        //file_put_contents($testSetFileName = $this->varPath . uniqid('phpml', true), $testSet);
+        //file_put_contents($modelFileName = $testSetFileName . '-model', $this->model);
+        $outputFileName = $testSetFileName . '-output';
 
         $command = $this->buildPredictCommand(
             $testSetFileName,
@@ -237,7 +237,7 @@ class SupportVectorMachine
             $probabilityEstimates
         );
         $output = [];
-        exec(escapeshellcmd($command).' 2>&1', $output, $return);
+        exec(escapeshellcmd($command) . ' 2>&1', $output, $return);
 
         unlink($testSetFileName);
         unlink($modelFileName);
@@ -277,7 +277,7 @@ class SupportVectorMachine
             $this->cost,
             $this->nu,
             $this->degree,
-            $this->gamma !== null ? ' -g '.$this->gamma : '',
+            $this->gamma !== null ? ' -g ' . $this->gamma : '',
             $this->coef0,
             $this->epsilon,
             $this->cacheSize,
@@ -321,7 +321,7 @@ class SupportVectorMachine
 
         $osExtension = $this->getOSExtension();
         foreach (['svm-predict', 'svm-scale', 'svm-train'] as $filename) {
-            $filePath = $path.$filename.$osExtension;
+            $filePath = $path . $filename . $osExtension;
             if (!file_exists($filePath)) {
                 throw new InvalidArgumentException(sprintf('File "%s" not found', $filePath));
             }
diff --git a/notemyprogress/classes/report.php b/notemyprogress/classes/report.php
index 5c1433bf9a96eb3566f3461cf062bfbf3d950392..080ed7cc552b440247f16c464ea1df1179bc5be5 100644
--- a/notemyprogress/classes/report.php
+++ b/notemyprogress/classes/report.php
@@ -39,798 +39,1695 @@ use stdClass;
  * @copyright   2020 Edisson Sigua <edissonf.sigua@gmail.com>, Bryan Aguilar <bryan.aguilar6174@gmail.com>
  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  */
-abstract class report {
-    use \lib_trait;
-
-    const MINUTES_TO_NEW_SESSION = 30;
-    const USER_FIELDS = "id, username, firstname, lastname, email, lastaccess, picture, deleted";
-    protected $course;
-    protected $user;
-    protected $profile;
-    protected $users;
-    protected $current_week;
-    protected $past_week;
-    protected $weeks;
-    protected $current_sections;
-    public $timezone;
-
-    function __construct($courseid, $userid){
-        $this->user = self::get_user($userid);
-        $this->course = self::get_course($courseid);
-        $this->timezone = self::get_timezone($userid);
-        date_default_timezone_set($this->timezone);
-        $this->users = array();
-        $configweeks = new \local_notemyprogress\configweeks($this->course->id, $this->user->id);
-        $this->weeks = $configweeks->weeks;
-        $this->current_sections = $configweeks->current_sections;
-        $this->current_week = $configweeks->get_current_week();
-        $this->past_week = $configweeks->get_past_week();
-    }
-
-    abstract public function set_users();
-
-    abstract public function set_profile();
-
-    public function render_has(){
-        return $this->profile;
-    }
-
-    protected function course_is_valid(){
-        $in_transit = isset($this->current_week) || isset($this->past_week) ? true : false;
-        $has_users = count($this->users) > 0 ? true : false;
-        return $in_transit && $has_users;
-    }
-
-    /**
-     * Verifica si el curso aún no ha terminado o si el tiempo transcurrido desde que ha terminado las
-     * semanas configuradas de Note My Progress es menor a una semana
-     *
-     * @return boolean valor booleano que indica si el curso aun sigue activo
-     */
-    protected function course_in_transit(){
-        $in_transit = isset($this->current_week) || isset($this->past_week) ? true : false;
-        return $in_transit;
-    }
-
-    /**
-     * Verifica si el curso tiene estudiantes
-     *
-     * @return boolean valor booleano que indica si el curso tiene estudiantes
-     */
-    protected function course_has_users(){
-        $has_users = count($this->users) > 0 ? true : false;
-        return $has_users;
-    }
-
-    /**
-     * Busca la semana con codigo igual al parametro $weekcode y lo retorna. En caso de no encontrar
-     * la semana con el codigo de paramtero, se imprime un error
-     *
-     * @param string $weekcode identificador de la semana que se desea obtener
-     *
-     * @return object objecto con la semana que hace match con el parametro
-     */
-    protected function find_week($weekcode){
-        foreach($this->weeks as $week){
-            if($weekcode == $week->weekcode){
-                return $week;
-            }
-        }
-        print_error("Weekcode not found");
-    }
-
-    protected function get_progress_table($users, $cms, $enable_completion, $include_sessions = false) {
-        $table = array();
-        $total_cms = count($cms);
-        if ($total_cms > 0) {
-            foreach ($users as $user) {
-                $cms_interaction = self::cms_interactions($cms, $user, $enable_completion);
-                $progress_percentage = (int)(($cms_interaction->complete * 100)/$total_cms);
-                $inverted_time_label = self::convert_time($user->time_format, $user->summary->added, "hour");
-                $user_record = self::get_user($user->userid);
-
-                $record = new stdClass();
-                $record->id = $user_record->id;
-                $record->firstname = $user_record->firstname;
-                $record->lastname = $user_record->lastname;
-                $record->username = $user_record->username;
-                $record->email = $user_record->email;
-                $record->progress_percentage = $progress_percentage;
-                $record->cms = $cms_interaction;
-                $record->sessions_number = $user->summary->count;
-                $record->inverted_time = $user->summary->added;
-                $record->inverted_time_label = $inverted_time_label;
-
-                if ($include_sessions) {
-                    $record->sessions = $user->sessions;
-                }
-                array_push($table, $record);
-            }
-        }
-        return $table;
-    }
-
-    private function cms_interactions($cms, $user, $cms_completion_enabled){
-        $complete_cms = 0;
-        $cms_ids = array();
-        $viewed_cms = 0;
-        foreach ($cms as $module) {
-            $finished = null;
-            if ($cms_completion_enabled) {
-                $module_completion_configure = $module['completion'] != 0;
-                if ($module_completion_configure) {
-                    $finished = self::finished_cm_by_conditions($user->userid, $module['id']);
-                }
-            }
-            $interactions = self::count_cm_interactions($user, $module['id']);
-            $viewed = ($interactions > 0);
-            $finished = (!isset($finished)) ? $viewed : $finished;
-
-            $cm = new stdClass();
-            $cm->id = $module['id'];
-            $cm->interactions = $interactions;
-            $cm->complete = false;
-            $cm->viewed = false;
-            if ($viewed) {
-                $viewed_cms++;
-                $cm->viewed = true;
-            }
-            if ($finished) {
-                $complete_cms++;
-                $cm->complete = true;
-            }
-            if ($viewed || $finished) {
-                $cmid = "cm".$module['id'];
-                $cms_ids[$cmid] = $cm;
-            }
-        }
-        $interaction = new stdClass();
-        $interaction->complete = $complete_cms;
-        $interaction->viewed = $viewed_cms;
-        $interaction->modules = $cms_ids;
-        $interaction->total = count($cms);
-        return $interaction;
-    }
-
-    private function finished_cm_by_conditions($userid, $cm_id){
-        global $DB;
-        $complete = false;
-        $item = $DB->get_record('course_modules_completion',
-            array('coursemoduleid' => $cm_id, 'userid' => $userid), 'id, timemodified');
-        if ($item) {
-            $complete = true;
-        }
-        return $complete;
+abstract class report
+{
+  use \lib_trait;
+
+  const MINUTES_TO_NEW_SESSION = 30;
+  const USER_FIELDS = "id, username, firstname, lastname, email, lastaccess, picture, deleted";
+  protected $course;
+  protected $user;
+  protected $profile;
+  protected $users;
+  protected $current_week;
+  protected $past_week;
+  protected $weeks;
+  protected $current_sections;
+  public $timezone;
+
+  function __construct($courseid, $userid)
+  {
+    $this->user = self::get_user($userid);
+    $this->course = self::get_course($courseid);
+    $this->timezone = self::get_timezone($userid);
+    date_default_timezone_set($this->timezone);
+    $this->users = array();
+    $configweeks = new \local_notemyprogress\configweeks($this->course->id, $this->user->id);
+    $this->weeks = $configweeks->weeks;
+    $this->current_sections = $configweeks->current_sections;
+    $this->current_week = $configweeks->get_current_week();
+    $this->past_week = $configweeks->get_past_week();
+  }
+
+  abstract public function set_users();
+
+  abstract public function set_profile();
+
+
+  public function questions_report_metereflexion($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
     }
-
-    private function count_cm_interactions($user, $cm_id){
-        $cm_logs = 0;
-        foreach ($user->logs as $log) {
-            if ($log->contextlevel == 70 && $log->contextinstanceid == $cm_id) {
-                $cm_logs++;
-            }
-        }
-        return $cm_logs;
-    }
-
-    protected function get_sessions_by_weeks($user_sessions) {
-        $months = array();
-        foreach($user_sessions as $sessions){
-            foreach($sessions as $session){
-                $resp = self::get_month_and_week_number((int) $session->start);
-                $month = $resp->month;
-                $week = $resp->week;
-
-                if(!isset($months[$month])){
-                    $months[$month] = array();
-                }
-                if(!isset($months[$month][$week])){
-                    $months[$month][$week] = 1;
-                } else {
-                    $months[$month][$week]++;
-                }
-            }
-        }
-        return $months;
-    }
-
-    protected function get_sessions_by_weeks_summary($months, $startdate) {
-        $startdate = strtotime('first day of this month', $startdate);
-        $month_number = ((int) date("n", $startdate)) - 1;
-
-        $summary = array();
-        $categories = array();
-        $week_dates = array();
-        if (!empty($months)) {
-            for ($y = 0; $y <= 11; $y++) {
-                $month_code = self::get_month_code($month_number);
-                if (isset($months[$month_code])) {
-                    $weeks = $months[$month_code];
-                }
-                for ($x = 0; $x <= 4; $x++) {
-                    $value = 0;
-                    if(isset($weeks)) {
-                        if (isset($weeks[$x])) {
-                            $value=$weeks[$x];
-                        }
-                    }
-                    $element = array("x" => $x, "y" => $y, "value" => $value);
-                    array_push($summary, $element);
-                }
-                $weeks = null;
-
-                $dates = self::get_weeks_of_month($startdate);
-                array_push($week_dates, $dates);
-
-                $month_number++;
-                if ($month_number > 11) {
-                    $month_number = 0;
-                }
-
-                $month_name = get_string("fml_".$month_code."_short", "local_notemyprogress");
-                $year = date("Y", $startdate);
-                $category_name = "$month_name $year";
-                array_push($categories, $category_name);
-
-                $startdate = strtotime('first day of +1 month',$startdate);
-            }
-        }
-        $response = new stdClass();
-        $response->data = $summary;
-        $response->categories = $categories;
-        $response->weeks = $week_dates;
-        return $response;
+    if (!self::course_has_users()) {
+      return null;
     }
-
-    private function get_month_code($key) {
-        $months = array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec");
-        return $months[$key];
+    $week = $this->current_week;
+    //debug_text::print("this->past_week",$this->past_week);
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
     }
 
-    private function get_weeks_of_month($date) {
-        $weeks = array();
-        $month_code = strtolower(date("M", $date));
-        $date = strtotime("first monday of this month", $date);
-        while (strtolower(date("M", $date)) == $month_code) {
-
-            $day_code = strtolower(date("D", $date));
-            $start_day_name = get_string("fml_$day_code", "local_notemyprogress");
-            $start_day_number = strtolower(date("d", $date));
-
-            $end = strtotime("+ 7 days", $date) - 1;
-            $day_code = strtolower(date("D", $end));
-            $end_day_name = get_string("fml_$day_code", "local_notemyprogress");
-            $end_day_number = strtolower(date("d", $end));
+    $last_week = new stdClass();
+    $last_week->userid = $this->user->id;
+    $last_week->weekcode = $week->weekcode;
+    $last_week->classroom_hours = 0;
+    $last_week->hours_off_course = 0;
+    $last_week->objectives_reached = null;
+    $last_week->previous_class_learning = null;
+    $last_week->benefit_going_class = null;
+    $last_week->feeling = null;
+
+    //debug_text::print("week",$week);
+    $query_last_week = self::get_last($week->weekcode);
+    if ($query_last_week != null){
+      $last_week = $query_last_week;
+    }
 
-            $label = "$start_day_name $start_day_number - $end_day_name $end_day_number";
-            array_push($weeks, $label);
-            $month_code = strtolower(date("M", $date));
-            $date = strtotime("+ 7 days", $date);
+    //Questions
+    $questions = self::find_questions($last_week);
+    $last_week->questions = $questions;
+
+    //debug_text::print("last_week",$last_week);
+    return $last_week;
+  }
+
+
+  private function find_questions($last_week)
+  {
+      global $DB;
+      $sql =  "select * from {st_rpt_questions}";
+      $questions = $DB->get_records_sql($sql);
+      foreach ($questions as $key => $question) {
+          $answers = self::find_answers($question->id);
+          if ($question->id == 1) {
+              $objectives_reached = isset($last_week->objectives_reached) ? $last_week->objectives_reached : null;
+              $question->answer_selected = $objectives_reached;
+          } elseif ($question->id == 2) {
+              $previous_class_learning = isset($last_week->previous_class_learning) ? $last_week->previous_class_learning : null;
+              $question->answer_selected = $previous_class_learning;
+          } elseif ($question->id == 3) {
+              $benefit_going_class = isset($last_week->benefit_going_class) ? $last_week->benefit_going_class : null;
+              $question->answer_selected = $benefit_going_class;
+          } elseif ($question->id == 4) {
+              $feeling = isset($last_week->feeling) ? $last_week->feeling : null;
+              $question->answer_selected = $feeling;
+          }
+
+          $question->answers = $answers;
+      }
+      $questions = self::update_texts_from_strings($questions);
+      //debug_text::print("questions",$questions);
+      return $questions;
+  }
+  
+  private function update_texts_from_strings($questions)
+  {
+      foreach ($questions as $question) {
+          $question->enunciated = get_string($question->enunciated, 'local_notemyprogress');
+          foreach ($question->answers as $answer) {
+              $answer->enunciated = get_string($answer->enunciated, 'local_notemyprogress');
+          }
+      }
+      return $questions;
+  }
+
+  public function find_answers($id_questions)
+  {
+      global $DB;
+      $sql =  "select * from {st_rpt_answers} where questionid = ?";
+      $answers = $DB->get_records_sql($sql, array($id_questions));
+      return $answers;
+  }
+
+
+  public function get_last($weekcode){
+    global $DB;
+    $sql =  "select * from {st_rpt_work_last_weeks} where weekcode = ? and userid = ? order by id desc limit 1";
+    $last_week_query = $DB->get_record_sql($sql, array($weekcode, $this->user->id));
+    return $last_week_query;
+  }
+
+
+  public function get_week_schedule()
+  {
+      global $DB;
+      $weeks = $this->weeks;
+      $array_ws = [];
+      $sql =  "select * from {st_rpt_weekly_schedules} where userid = ?";
+      $week_schedules = $DB->get_records_sql($sql, array($this->user->id));
+      foreach($weeks as $week){
+          $array_ws[$week->weekcode] = false;
+          foreach($week_schedules as $week_schedule){
+              if ($week->weekcode == $week_schedule->weekcode){
+                  $array_ws[$week->weekcode] = true;
+              }
+          }
+      }
+      //debug_text::print("array_ws",$array_ws);
+      return $array_ws;
+  }
+  
+  public function render_has()
+  {
+    return $this->profile;
+  }
+
+  protected function course_is_valid()
+  {
+    $in_transit = isset($this->current_week) || isset($this->past_week) ? true : false;
+    $has_users = count($this->users) > 0 ? true : false;
+    return $in_transit && $has_users;
+  }
+
+  /**
+   * Verifica si el curso aún no ha terminado o si el tiempo transcurrido desde que ha terminado las
+   * semanas configuradas de Fliplearning es menor a una semana
+   *
+   * @return boolean valor booleano que indica si el curso aun sigue activo
+   */
+  protected function course_in_transit()
+  {
+    $in_transit = isset($this->current_week) || isset($this->past_week) ? true : false;
+    return $in_transit;
+  }
+
+  /**
+   * Verifica si el curso tiene estudiantes
+   *
+   * @return boolean valor booleano que indica si el curso tiene estudiantes
+   */
+  protected function course_has_users()
+  {
+    $has_users = count($this->users) > 0 ? true : false;
+    return $has_users;
+  }
+
+  /**
+   * Busca la semana con codigo igual al parametro $weekcode y lo retorna. En caso de no encontrar
+   * la semana con el codigo de paramtero, se imprime un error
+   *
+   * @param string $weekcode identificador de la semana que se desea obtener
+   *
+   * @return object objecto con la semana que hace match con el parametro
+   */
+  protected function find_week($weekcode)
+  {
+    foreach ($this->weeks as $week) {
+      if ($weekcode == $week->weekcode) {
+        return $week;
+      }
+    }
+    //print_error("Weekcode not found");
+  }
+
+  protected function get_progress_table($users, $cms, $enable_completion, $include_sessions = false)
+  {
+    $table = array();
+    $total_cms = count($cms);
+    if ($total_cms > 0) {
+      foreach ($users as $user) {
+        $cms_interaction = self::cms_interactions($cms, $user, $enable_completion);
+        $progress_percentage = (int)(($cms_interaction->complete * 100) / $total_cms);
+        $inverted_time_label = self::convert_time($user->time_format, $user->summary->added, "hour");
+        $user_record = self::get_user($user->userid);
+
+        $record = new stdClass();
+        $record->id = $user_record->id;
+        $record->firstname = $user_record->firstname;
+        $record->lastname = $user_record->lastname;
+        $record->username = $user_record->username;
+        $record->email = $user_record->email;
+        $record->progress_percentage = $progress_percentage;
+        $record->cms = $cms_interaction;
+        $record->sessions_number = $user->summary->count;
+        $record->inverted_time = $user->summary->added;
+        $record->inverted_time_label = $inverted_time_label;
+
+        if ($include_sessions) {
+          $record->sessions = $user->sessions;
         }
-        return $weeks;
+        array_push($table, $record);
+      }
     }
-
-    private function get_month_and_week_number($date) {
-        $monday_of_week = strtotime( 'monday this week', $date);
-        $first_monday_month = strtotime("first monday of this month", $monday_of_week);
-        $first_sunday_month = strtotime("+ 7 days", $first_monday_month) - 1;
-        $week_number = 0;
-        while ($first_sunday_month < $date) {
-            $first_sunday_month = strtotime("+ 7 days", $first_sunday_month);
-            $week_number++;
+    ////debug_text::print("table",$table);
+    return $table;
+  }
+
+  private function cms_interactions($cms, $user, $cms_completion_enabled)
+  {
+    $complete_cms = 0;
+    $cms_ids = array();
+    $viewed_cms = 0;
+    foreach ($cms as $module) {
+      $finished = null;
+      if ($cms_completion_enabled) {
+        $module_completion_configure = $module['completion'] != 0;
+        if ($module_completion_configure) {
+          $finished = self::finished_cm_by_conditions($user->userid, $module['id']);
         }
-        $resp = new stdClass();
-        $resp->month = strtolower(date("M", $first_monday_month));
-        $resp->week = $week_number;
-        return $resp;
-    }
-
-    protected function get_sessions_by_hours($user_sessions) {
-        $schedules = array();
-        foreach($user_sessions as $sessions){
-            foreach($sessions as $session){
-                $start = (int) $session->start;
-                $day = strtolower(date("D", $start));
-                $hour = date("G", $start);
-
-                if(!isset($schedules[$day])){
-                    $schedules[$day] = array();
-                }
-                if(!isset($schedules[$day][$hour])){
-                    $schedules[$day][$hour] = 1;
-                } else {
-                    $schedules[$day][$hour]++;
-                }
-            }
+      }
+      $interactions = self::count_cm_interactions($user, $module['id']);
+      $viewed = ($interactions > 0);
+      $finished = (!isset($finished)) ? $viewed : $finished;
+
+      $cm = new stdClass();
+      $cm->id = $module['id'];
+      $cm->interactions = $interactions;
+      $cm->complete = false;
+      $cm->viewed = false;
+      if ($viewed) {
+        $viewed_cms++;
+        $cm->viewed = true;
+      }
+      if ($finished) {
+        $complete_cms++;
+        $cm->complete = true;
+      }
+      if ($viewed || $finished) {
+        $cmid = "cm" . $module['id'];
+        $cms_ids[$cmid] = $cm;
+      }
+    }
+    $interaction = new stdClass();
+    $interaction->complete = $complete_cms;
+    $interaction->viewed = $viewed_cms;
+    $interaction->modules = $cms_ids;
+    $interaction->total = count($cms);
+    return $interaction;
+  }
+
+  private function finished_cm_by_conditions($userid, $cm_id)
+  {
+    global $DB;
+    $complete = false;
+    $item = $DB->get_record(
+      'course_modules_completion',
+      array('coursemoduleid' => $cm_id, 'userid' => $userid),
+      'id, timemodified'
+    );
+    if ($item) {
+      $complete = true;
+    }
+    return $complete;
+  }
+
+  private function count_cm_interactions($user, $cm_id)
+  {
+    $cm_logs = 0;
+    foreach ($user->logs as $log) {
+      if ($log->contextlevel == 70 && $log->contextinstanceid == $cm_id) {
+        $cm_logs++;
+      }
+    }
+    return $cm_logs;
+  }
+
+  protected function get_sessions_by_weeks($user_sessions)
+  {
+    $months = array();
+    foreach ($user_sessions as $sessions) {
+      foreach ($sessions as $session) {
+        $resp = self::get_month_and_week_number((int) $session->start);
+        $month = $resp->month;
+        $week = $resp->week;
+
+        if (!isset($months[$month])) {
+          $months[$month] = array();
         }
-        return $schedules;
-    }
-
-    protected function get_sessions_by_hours_summary($schedules) {
-        $summary = array();
-        if (!empty($schedules)) {
-            for ($x = 0; $x <= 6; $x++) {
-                $day_code = self::get_day_code($x);
-                if (isset($schedules[$day_code])) {
-                    $hours = $schedules[$day_code];
-                }
-                for ($y = 0; $y <= 23; $y++) {
-                    $value = 0;
-                    if(isset($hours)) {
-                        if (isset($hours[$y])) {
-                            $value=$hours[$y];
-                        }
-                    }
-                    $element = array(
-                        "x" => $x,
-                        "y" => $y,
-                        "value" => $value,
-                    );
-                    array_push($summary, $element);
-                }
-                $hours = null;
-            }
+        if (!isset($months[$month][$week])) {
+          $months[$month][$week] = 1;
+        } else {
+          $months[$month][$week]++;
         }
-        return $summary;
+      }
     }
+    return $months;
+  }
+
+  protected function get_sessions_by_weeks_summary($months, $startdate)
+  {
+    $startdate = strtotime('first day of this month', $startdate);
+    $month_number = ((int) date("n", $startdate)) - 1;
+
+    $summary = array();
+    $categories = array();
+    $week_dates = array();
+    if (!empty($months)) {
+      for ($y = 0; $y <= 11; $y++) {
+        $month_code = self::get_month_code($month_number);
+        if (isset($months[$month_code])) {
+          $weeks = $months[$month_code];
+        }
+        for ($x = 0; $x <= 4; $x++) {
+          $value = 0;
+          if (isset($weeks)) {
+            if (isset($weeks[$x])) {
+              $value = $weeks[$x];
+            }
+          }
+          $element = array("x" => $x, "y" => $y, "value" => $value);
+          array_push($summary, $element);
+        }
+        $weeks = null;
 
-    public function get_inverted_time_summary($inverted_time, $expected_time, $average_time = true){
-        $response = new stdClass();
-        $response->expected_time = $expected_time;
-        $response->expected_time_converted = self::convert_time("hours", $expected_time, "string");
-        $response->inverted_time = self::minutes_to_hours($inverted_time->average, -1);
-        $response->inverted_time_converted = self::convert_time("hours", $response->inverted_time, "string");
+        $dates = self::get_weeks_of_month($startdate);
+        array_push($week_dates, $dates);
 
-        $inverted_time = new stdClass();
-        $inverted_time->name = get_string("fml_inverted_time","local_notemyprogress");
-        $inverted_time->y = $response->inverted_time;
+        $month_number++;
+        if ($month_number > 11) {
+          $month_number = 0;
+        }
 
-        $expected_time = new stdClass();
-        $expected_time->name = get_string("fml_expected_time","local_notemyprogress");
-        $expected_time->y = $response->expected_time;
+        $month_name = get_string("fml_" . $month_code . "_short", "local_notemyprogress");
+        $year = date("Y", $startdate);
+        $category_name = "$month_name $year";
+        array_push($categories, $category_name);
 
-        if (!$average_time) {
-            $inverted_time->name = get_string("fml_student_inverted_time","local_notemyprogress");
-            $expected_time->name = get_string("fml_student_expected_time","local_notemyprogress");
+        $startdate = strtotime('first day of +1 month', $startdate);
+      }
+    }
+    $response = new stdClass();
+    $response->data = $summary;
+    $response->categories = $categories;
+    $response->weeks = $week_dates;
+    return $response;
+  }
+
+  private function get_month_code($key)
+  {
+    $months = array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec");
+    return $months[$key];
+  }
+
+  private function get_weeks_of_month($date)
+  {
+    $weeks = array();
+    $month_code = strtolower(date("M", $date));
+    $date = strtotime("first monday of this month", $date);
+    while (strtolower(date("M", $date)) == $month_code) {
+
+      $day_code = strtolower(date("D", $date));
+      $start_day_name = get_string("fml_$day_code", "local_notemyprogress");
+      $start_day_number = strtolower(date("d", $date));
+
+      $end = strtotime("+ 7 days", $date) - 1;
+      $day_code = strtolower(date("D", $end));
+      $end_day_name = get_string("fml_$day_code", "local_notemyprogress");
+      $end_day_number = strtolower(date("d", $end));
+
+      $label = "$start_day_name $start_day_number - $end_day_name $end_day_number";
+      array_push($weeks, $label);
+      $month_code = strtolower(date("M", $date));
+      $date = strtotime("+ 7 days", $date);
+    }
+    return $weeks;
+  }
+
+  private function get_month_and_week_number($date)
+  {
+    $monday_of_week = strtotime('monday this week', $date);
+    $first_monday_month = strtotime("first monday of this month", $monday_of_week);
+    $first_sunday_month = strtotime("+ 7 days", $first_monday_month) - 1;
+    $week_number = 0;
+    while ($first_sunday_month < $date) {
+      $first_sunday_month = strtotime("+ 7 days", $first_sunday_month);
+      $week_number++;
+    }
+    $resp = new stdClass();
+    $resp->month = strtolower(date("M", $first_monday_month));
+    $resp->week = $week_number;
+    return $resp;
+  }
+
+  protected function get_sessions_by_hours($user_sessions)
+  {
+    $schedules = array();
+    foreach ($user_sessions as $sessions) {
+      foreach ($sessions as $session) {
+        $start = (int) $session->start;
+        $day = strtolower(date("D", $start));
+        $hour = date("G", $start);
+
+        if (!isset($schedules[$day])) {
+          $schedules[$day] = array();
         }
-        $data[] = $inverted_time;
-        $data[] = $expected_time;
-
-        $response->data = $data;
-        return $response;
-    }
-
-    protected function get_day_code($key) {
-        $days = array("mon", "tue", "wed", "thu", "fri", "sat", "sun");
-        return $days[$key];
-    }
-
-    protected function get_work_sessions($start, $end){
-        $conditions = self::conditions_for_work_sessions($start, $end);
-        $sessions_users = self::get_sessions_from_logs($conditions);
-        return $sessions_users;
-    }
-
-    protected function get_sessions_from_logs($conditions){
-        $users = array();
-        $user_logs = self::get_logs($conditions);
-        foreach($user_logs as $userid => $logs){
-            $sessions = self::get_sessions($logs);
-            $summary = self::calculate_average("duration", $sessions);
-            $active_days = self::get_active_days($logs);
-            $user = new stdClass();
-            $user->userid = $userid;
-            $user->count_logs = count($logs);
-            $user->active_days = $active_days;
-            $user->time_format = "minutes";
-            $user->summary = $summary;
-            $user->sessions = $sessions;
-            $user->logs = $logs;
-            $users[] = $user;
+        if (!isset($schedules[$day][$hour])) {
+          $schedules[$day][$hour] = 1;
+        } else {
+          $schedules[$day][$hour]++;
         }
-        return $users;
-    }
-
-    /**
-     * Obtiene una lista indexada por el id de usuario que contiene en cada posicion los logs
-     * del usuario.
-     *
-     * @param array $filters lista de condiciones para la busqueda de los logs, en caso de no especificarse,
-     *                       se toma como una lista vacía
-     *
-     * @return array lista de usuarios con sus logs
-     */
-    protected function get_logs($filters = array()){
-        global $DB;
-        $users = array();
-        $conditions = self::get_query_from_conditions($filters);
-        list($in, $invalues) = $DB->get_in_or_equal($this->users);
-        $sql = "SELECT * FROM {logstore_standard_log} 
-                WHERE courseid = {$this->course->id} {$conditions} AND userid $in ORDER BY timecreated ASC";
-        $logs = $DB->get_recordset_sql($sql, $invalues);
-        foreach($logs as $key => $log){
-            if(!isset($users[$log->userid])){
-                $users[$log->userid] = array();
-            }
-            $users[$log->userid][] = $log;
+      }
+    }
+    return $schedules;
+  }
+
+  protected function get_sessions_by_hours_summary($schedules)
+  {
+    $summary = array();
+    if (!empty($schedules)) {
+      for ($x = 0; $x <= 6; $x++) {
+        $day_code = self::get_day_code($x);
+        if (isset($schedules[$day_code])) {
+          $hours = $schedules[$day_code];
         }
-        $logs->close();
-        foreach($this->users as $userid){
-            if(!isset($users[$userid])){
-                $users[$userid] = array();
+        for ($y = 0; $y <= 23; $y++) {
+          $value = 0;
+          if (isset($hours)) {
+            if (isset($hours[$y])) {
+              $value = $hours[$y];
             }
+          }
+          $element = array(
+            "x" => $x,
+            "y" => $y,
+            "value" => $value,
+          );
+          array_push($summary, $element);
         }
-        return $users;
-    }
-
-    /**
-     * Obtiene una cadena de texto que representa una condicion 'where' de busqueda en lenguaje sql
-     * cuyos campos se concatenan en base al parámetro $filters con el prefijo $prefix
-     *
-     * @param array $filters lista de condiciones para la cadena de texto que representa la condicion
-     * @param string $prefix prefijo con el que se une cada condicion de la variable $filters. Si se
-     *                       omite, por defecto toma el valor de and
-     *
-     * @return string cadena de texto que representa una condicional 'where' el lenguaje sql
-     */
-    private function get_query_from_conditions($filters = array(), $prefix = "and"){
-        $conditions = "";
-        foreach($filters as $filter){
-            $operator = isset($filter->operator) ? $filter->operator : "=";
-            $conditions .= " {$prefix} {$filter->field} {$operator} '{$filter->value}' ";
-        }
-        return $conditions;
+        $hours = null;
+      }
+    }
+    return $summary;
+  }
+
+  public function get_inverted_time_summary($inverted_time, $expected_time, $average_time = true)
+  {
+    $response = new stdClass();
+    $response->expected_time = $expected_time;
+    $response->expected_time_converted = self::convert_time("hours", $expected_time, "string");
+    $response->inverted_time = self::minutes_to_hours($inverted_time->average, -1);
+    $response->inverted_time_converted = self::convert_time("hours", $response->inverted_time, "string");
+
+    $inverted_time = new stdClass();
+    $inverted_time->name = get_string("fml_inverted_time", "local_notemyprogress");
+    $inverted_time->y = $response->inverted_time;
+
+    $expected_time = new stdClass();
+    $expected_time->name = get_string("fml_expected_time", "local_notemyprogress");
+    $expected_time->y = $response->expected_time;
+
+    if (!$average_time) {
+      $inverted_time->name = get_string("fml_student_inverted_time", "local_notemyprogress");
+      $expected_time->name = get_string("fml_student_expected_time", "local_notemyprogress");
+    }
+    $data[] = $inverted_time;
+    $data[] = $expected_time;
+
+    $response->data = $data;
+    return $response;
+  }
+
+  protected function get_day_code($key)
+  {
+    $days = array("mon", "tue", "wed", "thu", "fri", "sat", "sun");
+    return $days[$key];
+  }
+
+  protected function get_work_sessions($start, $end)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    $conditions = self::conditions_for_work_sessions($start, $end);
+    $sessions_users = self::get_sessions_from_logs($conditions);
+    //debug_text::print("sessions_users",$sessions_users);
+    return $sessions_users;
+  }
+
+  protected function get_sessions_from_logs($conditions)
+  {
+    $users = array();
+    $user_logs = self::get_logs($conditions);
+    foreach ($user_logs as $userid => $logs) {
+      $sessions = self::get_sessions($logs);
+      $summary = self::calculate_average("duration", $sessions);
+      $active_days = self::get_active_days($logs);
+      $user = new stdClass();
+      $user->userid = $userid;
+      $user->count_logs = count($logs);
+      $user->active_days = $active_days;
+      $user->time_format = "minutes";
+      $user->summary = $summary;
+      $user->sessions = $sessions;
+      $user->logs = $logs;
+      $users[] = $user;
+    }
+    return $users;
+  }
+
+  /**
+   * Gets a list indexed by user id containing in each position the user's logs.
+   *
+   * @param array $filters list of conditions for searching the logs, if not specified, it is taken as an empty list.
+   *
+   * @return array list of users with their logs.
+   */
+  protected function get_logs($filters = array())
+  {
+    global $DB;
+    $users = array();
+    $conditions = self::get_query_from_conditions($filters);
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $sql = "SELECT * FROM {logstore_standard_log} 
+                WHERE courseid = {$this->course->id} {$conditions} AND userid $in ORDER BY timecreated ASC";
+    $logs = $DB->get_recordset_sql($sql, $invalues);
+    foreach ($logs as $key => $log) {
+      if (!isset($users[$log->userid])) {
+        $users[$log->userid] = array();
+      }
+      $users[$log->userid][] = $log;
+    }
+    $logs->close();
+    foreach ($this->users as $userid) {
+      if (!isset($users[$userid])) {
+        $users[$userid] = array();
+      }
     }
+    ////debug_text::print("users",$users);
+    return $users;
+  }
+
+  /**
+   * Obtiene una cadena de texto que representa una condicion 'where' de busqueda en lenguaje sql
+   * cuyos campos se concatenan en base al parámetro $filters con el prefijo $prefix
+   *
+   * @param array $filters lista de condiciones para la cadena de texto que representa la condicion
+   * @param string $prefix prefijo con el que se une cada condicion de la variable $filters. Si se
+   *                       omite, por defecto toma el valor de and
+   *
+   * @return string cadena de texto que representa una condicional 'where' el lenguaje sql
+   */
+  private function get_query_from_conditions($filters = array(), $prefix = "and")
+  {
+    $conditions = "";
+    foreach ($filters as $filter) {
+      $operator = isset($filter->operator) ? $filter->operator : "=";
+      $conditions .= " {$prefix} {$filter->field} {$operator} '{$filter->value}' ";
+    }
+    return $conditions;
+  }
+
+  private function get_sessions($logs)
+  {
+    $sessions = array();
+    if (count($logs) == 0) {
+      return $sessions;
+    }
+    $session = new stdClass();
+    $session->duration = 0;
+    $session->start = $logs[0]->timecreated;
+    $session->end = null;;
+    $previous = $logs[0];
+    foreach ($logs as $key => $log) {
+      $time_difference = self::diff_in_minutes($log->timecreated, $previous->timecreated);
+      if ($time_difference >= self::MINUTES_TO_NEW_SESSION) {
+        $session->end = $previous->timecreated;
+        $session->duration = self::diff_in_minutes($session->end, $session->start);
+        $sessions[] = $session;
 
-    private function get_sessions($logs){
-        $sessions = array();
-        if(count($logs) == 0){
-            return $sessions;
-        }
         $session = new stdClass();
         $session->duration = 0;
-        $session->start = $logs[0]->timecreated;
-        $session->end = null;;
-        $previous = $logs[0];
-        foreach($logs as $key => $log){
-            $time_difference = self::diff_in_minutes($log->timecreated, $previous->timecreated);
-            if($time_difference >= self::MINUTES_TO_NEW_SESSION){
-                $session->end = $previous->timecreated;
-                $session->duration = self::diff_in_minutes($session->end, $session->start);
-                $sessions[] = $session;
-
-                $session = new stdClass();
-                $session->duration = 0;
-                $session->start = $log->timecreated;
-                $session->end = null;
-            }
-            $previous = $log;
+        $session->start = $log->timecreated;
+        $session->end = null;
+      }
+      $previous = $log;
+    }
+    if (!isset($session->end)) {
+      $session->end = $previous->timecreated;
+      $time_difference = self::diff_in_minutes($session->end, $session->start);
+      $session->duration = $time_difference;
+      $sessions[] = $session;
+    }
+    return $sessions;
+  }
+
+  private function diff_in_minutes($timestamp1, $timestamp2)
+  {
+    if (gettype($timestamp1) == "string") {
+      $timestamp1 = (int) $timestamp1;
+    }
+    if (gettype($timestamp2) == "string") {
+      $timestamp2 = (int) $timestamp2;
+    }
+    $interval = ($timestamp1 - $timestamp2) / 60;
+    return $interval;
+  }
+
+  protected function calculate_average($field, $values, $consider_zero_elements = true)
+  {
+    $counter = 0;
+    $total = 0;
+    foreach ($values as $value) {
+      if (gettype($value) == "object") {
+        if (isset($value->$field)) {
+          if (!$consider_zero_elements && $value->$field == 0) {
+            continue;
+          }
+          $counter++;
+          $total += $value->$field;
         }
-        if(!isset($session->end)){
-            $session->end = $previous->timecreated;
-            $time_difference = self::diff_in_minutes($session->end, $session->start);
-            $session->duration = $time_difference;
-            $sessions[] = $session;
+      } elseif (gettype($value) == "array") {
+        if (isset($value[$field])) {
+          if (!$consider_zero_elements && $value[$field] == 0) {
+            continue;
+          }
+          $counter++;
+          $total += $value[$field];
         }
-        return $sessions;
+      }
     }
 
-    private function diff_in_minutes($timestamp1, $timestamp2){
-        if(gettype($timestamp1) == "string"){
-            $timestamp1 = (int) $timestamp1;
+    $average = $counter > 0 ? ($total / $counter) : 0;
+    $result = new stdClass();
+    $result->count = $counter;
+    $result->added = $total;
+    $result->average = $average;
+    return $result;
+  }
+
+  private function get_active_days($logs)
+  {
+    $days_count = 0;
+    if (count($logs) == 0) {
+      return $days_count;
+    }
+    $days = array();
+    foreach ($logs as $key => $log) {
+      $year = date("Y", $log->timecreated);
+      $month = date("m", $log->timecreated);
+      $day = date("d", $log->timecreated);
+      $label = $year . $month . $day;
+      if (!isset($days[$label])) {
+        $days[$label] = 1;
+      }
+    }
+    $days_count = count($days);
+    return $days_count;
+  }
+
+  protected function get_users_course_grade($users)
+  {
+    global $DB;
+    $item = $DB->get_record(
+      'grade_items',
+      array('courseid' => $this->course->id, 'itemtype' => 'course'),
+      'id, courseid, grademax'
+    );
+    if ($item) {
+      $sql = "SELECT id, userid, rawgrademax, finalgrade FROM {grade_grades} 
+                WHERE itemid = {$item->id} AND finalgrade IS NOT NULL";
+      $rows = $DB->get_records_sql($sql);
+      $grades = array();
+      foreach ($rows as $row) {
+        $grades[$row->userid] = $row;
+      }
+
+      foreach ($users as $user) {
+        $grade = new stdClass();
+        $grade->finalgrade = 0;
+        $grade->maxgrade = $item->grademax;
+        if (isset($grades[$user->id])) {
+          $grade->finalgrade = $grades[$user->id]->finalgrade;
         }
-        if(gettype($timestamp2) == "string"){
-            $timestamp2 = (int) $timestamp2;
+        $user->coursegrade = $grade;
+      }
+    } else {
+      foreach ($users as $user) {
+        $grade = new stdClass();
+        $grade->finalgrade = 0;
+        $grade->maxgrade = 0;
+        $user->coursegrade = $grade;
+      }
+    }
+    return $users;
+  }
+
+  protected function get_users_items_grades($users)
+  {
+    global $DB;
+    $items = $this->get_grade_items();
+    $items = $this->format_items($items);
+    $items = $this->set_average_max_min_grade($items, $users);
+
+    $itemsids = $this->extract_elements_field($items, 'id');
+    if (count($itemsids) > 0) {
+      list($in, $invalues) = $DB->get_in_or_equal($itemsids);
+      $sql = "SELECT id, itemid, userid, finalgrade FROM {grade_grades} 
+                WHERE itemid $in AND finalgrade IS NOT NULL ORDER BY itemid, userid";
+      $rows = $DB->get_recordset_sql($sql, $invalues);
+
+      $itemsgraded = array();
+      foreach ($rows as $row) {
+        $itemsgraded[$row->itemid][$row->userid] = $row;
+      }
+      $rows->close();
+
+      foreach ($users as $user) {
+        $useritems = array();
+        foreach ($items as $item) {
+          $useritem = new stdClass();
+          $useritem->average = $item->average;
+          $useritem->average_percentage = $item->average_percentage;
+          $useritem->categoryid = $item->categoryid;
+          $useritem->coursemoduleid = $item->coursemoduleid;
+          $useritem->finalgrade = 0;
+          $useritem->gradecount = $item->gradecount;
+          $useritem->grademax = $item->grademax;
+          $useritem->grademin = $item->grademin;
+          $useritem->id = $item->id;
+          $useritem->iteminstance = $item->iteminstance;
+          $useritem->itemmodule = $item->itemmodule;
+          $useritem->itemname = $item->itemname;
+          $useritem->maxrating = $item->maxrating;
+          $useritem->minrating = $item->minrating;
+          if (isset($itemsgraded[$item->id][$user->id])) {
+            $useritem->finalgrade = $itemsgraded[$item->id][$user->id]->finalgrade;
+          }
+          array_push($useritems, $useritem);
         }
-        $interval = ($timestamp1 - $timestamp2) / 60;
-        return $interval;
-    }
-
-    protected function calculate_average($field , $values, $consider_zero_elements = true){
-        $counter = 0;
-        $total = 0;
-        foreach($values as $value){
-            if(gettype($value) == "object"){
-                if(isset($value->$field)){
-                    if(!$consider_zero_elements && $value->$field == 0){
-                        continue;
-                    }
-                    $counter++;
-                    $total += $value->$field;
-                }
-            }elseif(gettype($value) == "array"){
-                if(isset($value[$field])){
-                    if(!$consider_zero_elements && $value[$field] == 0){
-                        continue;
-                    }
-                    $counter++;
-                    $total += $value[$field];
-                }
-            }
+        $user->gradeitems = $useritems;
+      }
+    }
+    return $users;
+  }
+
+  protected function get_grade_categories()
+  {
+    global $DB;
+    $sql = "SELECT * FROM {grade_categories} WHERE courseid = {$this->course->id} ORDER BY path";
+    $result = $DB->get_records_sql($sql);
+    $result = array_values($result);
+    return $result;
+  }
+
+  protected function get_grade_items()
+  {
+    global $DB;
+    $items = $DB->get_records(
+      'grade_items',
+      array('courseid' => $this->course->id, 'itemtype' => 'mod')
+    );
+    if (!$items) {
+      $items = array();
+    }
+
+    //        $sql = "SELECT * FROM {grade_items} WHERE courseid = {$this->course->id} AND itemtype = 'mod' and gradetype = 1";
+    //        $result = $DB->get_records_sql($sql);
+    //        $result = array_values($result);
+    return $items;
+  }
+
+  protected function format_items($items)
+  {
+    $response = array();
+    foreach ($items as $item) {
+      $format_item = new stdClass();
+      $format_item->id = (int) $item->id;
+      $format_item->categoryid = (int) $item->categoryid;
+      $format_item->itemname = $item->itemname;
+      $format_item->itemmodule = $item->itemmodule;
+      $format_item->iteminstance = (int) $item->iteminstance;
+      $format_item->grademax = (int) $item->grademax;
+      $format_item->grademin = (int) $item->grademin;
+      $coursemoduleid = $this->get_course_module_id($item);
+      $format_item->coursemoduleid = $coursemoduleid;
+      array_push($response, $format_item);
+    }
+    return $response;
+  }
+
+  protected function get_course_module_id($item)
+  {
+    global $DB;
+    $coursemoduleid = false;
+    if (isset($item->itemmodule)) {
+      $result = $DB->get_record('modules', array('name' => $item->itemmodule), 'id', MUST_EXIST);
+      $moduleid =  $result->id;
+      $result = $DB->get_record(
+        'course_modules',
+        array('course' => $this->course->id, 'module' => $moduleid, 'instance' => $item->iteminstance),
+        'id',
+        MUST_EXIST
+      );
+      $coursemoduleid = (int) $result->id;
+    }
+    return $coursemoduleid;
+  }
+
+  protected function set_average_max_min_grade($items, $users)
+  {
+    foreach ($items as $item) {
+      $result = $this->get_average_max_min_grade($item->id);
+      $grades = $this->get_item_grades($item->id, $users);
+      $item->average_percentage = $this->convert_value_to_percentage($result->avg, $item->grademax);
+      $item->average = $result->avg;
+      $item->maxrating = $result->max;
+      $item->minrating = $result->min;
+      $item->gradecount = (int) $result->count;
+      $item->grades = $grades;
+    }
+    return $items;
+  }
+
+  private function get_item_grades($itemid, $users)
+  {
+    global $DB;
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $sql = "SELECT id, rawgrade, rawgrademax, rawgrademin, userid FROM {grade_grades} 
+                WHERE itemid = {$itemid} AND rawgrade IS NOT NULL AND userid {$in}";
+    $grades = $DB->get_records_sql($sql, $invalues);
+    $grades = array_values($grades);
+    foreach ($grades as $grade) {
+      $grade->rawgrade = (int) $grade->rawgrade;
+      $grade->rawgrademax = (int) $grade->rawgrademax;
+      $grade->rawgrademin = (int) $grade->rawgrademin;
+      $grade->userid = (int) $grade->userid;
+      if (isset($users[$grade->userid])) {
+        $grade->user = $users[$grade->userid];
+      }
+    }
+    return $grades;
+  }
+
+  private function convert_value_to_percentage($value, $maxvalue)
+  {
+    $percentage = 0;
+    if ($maxvalue > 0) {
+      $percentage = ($value * 100) / $maxvalue;
+    }
+    return $percentage;
+  }
+
+  private function get_average_max_min_grade($itemid)
+  {
+    global $DB;
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $sql = "SELECT COUNT(*) as count, MAX(rawgrade) as max, MIN(rawgrade) as min, AVG(rawgrade) as avg
+                FROM {grade_grades} WHERE itemid = {$itemid} AND rawgrade IS NOT NULL AND userid {$in}";
+    $result = $DB->get_records_sql($sql, $invalues);
+    $result = array_values($result);
+    return $result[0];
+  }
+
+  public function get_chart_langs()
+  {
+    $langs = array(
+      "loading" => get_string("chart_loading", "local_notemyprogress"),
+      "exportButtonTitle" => get_string("chart_exportButtonTitle", "local_notemyprogress"),
+      "printButtonTitle" => get_string("chart_printButtonTitle", "local_notemyprogress"),
+      "rangeSelectorFrom" => get_string("chart_rangeSelectorFrom", "local_notemyprogress"),
+      "rangeSelectorTo" => get_string("chart_rangeSelectorTo", "local_notemyprogress"),
+      "rangeSelectorZoom" => get_string("chart_rangeSelectorZoom", "local_notemyprogress"),
+      "downloadPNG" => get_string("chart_downloadPNG", "local_notemyprogress"),
+      "downloadJPEG" => get_string("chart_downloadJPEG", "local_notemyprogress"),
+      "downloadPDF" => get_string("chart_downloadPDF", "local_notemyprogress"),
+      "downloadSVG" => get_string("chart_downloadSVG", "local_notemyprogress"),
+      "downloadCSV" => get_string("chart_downloadCSV", "local_notemyprogress"),
+      "downloadXLS" => get_string("chart_downloadXLS", "local_notemyprogress"),
+      "exitFullscreen" => get_string("chart_exitFullscreen", "local_notemyprogress"),
+      "hideData" => get_string("chart_hideData", "local_notemyprogress"),
+      "noData" => get_string("chart_noData", "local_notemyprogress"),
+      "printChart" => get_string("chart_printChart", "local_notemyprogress"),
+      "viewData" => get_string("chart_viewData", "local_notemyprogress"),
+      "viewFullscreen" => get_string("chart_viewFullscreen", "local_notemyprogress"),
+      "resetZoom" => get_string("chart_resetZoom", "local_notemyprogress"),
+      "resetZoomTitle" => get_string("chart_resetZoomTitle", "local_notemyprogress"),
+      "months" => array(
+        get_string("fml_jan", "local_notemyprogress"),
+        get_string("fml_feb", "local_notemyprogress"),
+        get_string("fml_mar", "local_notemyprogress"),
+        get_string("fml_apr", "local_notemyprogress"),
+        get_string("fml_may", "local_notemyprogress"),
+        get_string("fml_jun", "local_notemyprogress"),
+        get_string("fml_jul", "local_notemyprogress"),
+        get_string("fml_aug", "local_notemyprogress"),
+        get_string("fml_sep", "local_notemyprogress"),
+        get_string("fml_oct", "local_notemyprogress"),
+        get_string("fml_nov", "local_notemyprogress"),
+        get_string("fml_dec", "local_notemyprogress"),
+      ),
+      "shortMonths" => array(
+        get_string("fml_jan_short", "local_notemyprogress"),
+        get_string("fml_feb_short", "local_notemyprogress"),
+        get_string("fml_mar_short", "local_notemyprogress"),
+        get_string("fml_apr_short", "local_notemyprogress"),
+        get_string("fml_may_short", "local_notemyprogress"),
+        get_string("fml_jun_short", "local_notemyprogress"),
+        get_string("fml_jul_short", "local_notemyprogress"),
+        get_string("fml_aug_short", "local_notemyprogress"),
+        get_string("fml_sep_short", "local_notemyprogress"),
+        get_string("fml_oct_short", "local_notemyprogress"),
+        get_string("fml_nov_short", "local_notemyprogress"),
+        get_string("fml_dec_short", "local_notemyprogress"),
+      ),
+      "weekdays" => array(
+        get_string("fml_sun", "local_notemyprogress"),
+        get_string("fml_mon", "local_notemyprogress"),
+        get_string("fml_tue", "local_notemyprogress"),
+        get_string("fml_wed", "local_notemyprogress"),
+        get_string("fml_thu", "local_notemyprogress"),
+        get_string("fml_fri", "local_notemyprogress"),
+        get_string("fml_sat", "local_notemyprogress"),
+      ),
+      "shortWeekdays" => array(
+        get_string("fml_sun_short", "local_notemyprogress"),
+        get_string("fml_mon_short", "local_notemyprogress"),
+        get_string("fml_tue_short", "local_notemyprogress"),
+        get_string("fml_wed_short", "local_notemyprogress"),
+        get_string("fml_thu_short", "local_notemyprogress"),
+        get_string("fml_fri_short", "local_notemyprogress"),
+        get_string("fml_sat_short", "local_notemyprogress"),
+      ),
+    );
+    return $langs;
+  }
+
+  //Planning
+
+
+  public function status_planning($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    $tz = self::get_timezone();
+    date_default_timezone_set($tz);
+    $planifications = self::days_report_metereflexion($weekcode);
+    ////debug_text::print("planifications",$planifications);  
+    $weekstart = $week->weekstart;
+    $current_time = time();
+    $status = self::get_respect_planning($planifications,$week);
+
+    // foreach ($planifications->dias_planificados as $key => $planification) {
+    //   $current_day = strtotime($weekstart . " + $key day");
+    //   if ($planification) {
+    //     if ($planifications->dias_trabajados[$key] > 0) {
+    //       array_push($status, 'completed');
+    //     } else {
+    //       if ($current_day < $current_time) {
+    //         array_push($status, 'failed');
+    //       } else {
+    //         array_push($status, 'pending');
+    //       }
+    //     }
+    //   } else {
+    //     array_push($status, 'unplanned');
+    //   }
+    // }
+    ////debug_text::print("status",$status);  
+    return $status;
+  }
+
+  public function students_planification_summary($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    $schedule = self::get_schedule($week->weekcode);
+    $worked_sessions = self::get_work_sessions($week->weekstart, $week->weekend);
+    $summary = self::verify_students_planifications($worked_sessions, $schedule);
+    $summary = self::summary_process($summary);
+    return $summary;
+  }
+
+  private function summary_process($days)
+  {
+    foreach ($days as $day) {
+      $day->percentage = 0;
+      $day->count_students = count($day->students);
+      if ($day->count_planned > 0) {
+        $day->percentage = round(($day->count_accomplished * 100 / $day->count_planned), 1);
+      }
+    }
+    return $days;
+  }
+
+  private function verify_students_planifications($worked_sessions, $planifications)
+  {
+    $worked_sessions = self::update_array_key_by('userid', $worked_sessions);
+    $summary = self::create_planifications_week_summary();
+    foreach ($planifications as $planification) {
+      $days = explode(',', $planification->days);
+      foreach ($days as $day) {
+        if (!in_array($planification->userid, $summary[$day]->students)) {
+          $summary[$day]->count_planned++;
+          if (self::planned_accomplished($day, $planification->userid, $worked_sessions)) {
+            $summary[$day]->count_accomplished++;
+          }
+          array_push($summary[$day]->students, $planification->userid);
+        }
+      }
+    }
+    return $summary;
+  }
+
+  private function planned_accomplished($day, $userid, $course_sessions)
+  {
+    $tz = self::get_timezone();
+    date_default_timezone_set($tz);
+    $accomplished = false;
+    if (isset($course_sessions[$userid])) {
+      $user_sessions = $course_sessions[$userid];
+      foreach ($user_sessions->sessions as $session) {
+        if (self::day_to_english($day) == strtolower(date('D', $session->start))) {
+          $accomplished = true;
+          break;
         }
+      }
+    }
+    return $accomplished;
+  }
+
+  private function create_planifications_week_summary()
+  {
+    $summary = new stdClass();
+    $summary->count_planned = 0;
+    $summary->count_accomplished = 0;
+    $summary->students = array();
+    $week = array(
+      'lun' => clone $summary,
+      'mar' => clone $summary,
+      'mie' => clone $summary,
+      'jue' => clone $summary,
+      'vie' => clone $summary,
+      'sab' => clone $summary,
+      'dom' => clone $summary,
+    );
+    return $week;
+  }
+
+  private function get_schedule($weekcode)
+  {
+    global $DB;
+    $planifications = $DB->get_records('st_rpt_weekly_schedules', array('weekcode' => $weekcode,'userid' => $this->user->id));
+    return reset($planifications);
+  }
+
+  public function days_report_metereflexion($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
 
-        $average = $counter > 0 ? ($total / $counter) : 0;
-        $result = new stdClass();
-        $result->count = $counter;
-        $result->added = $total;
-        $result->average = $average;
-        return $result;
+    //$number_planned_days = self::planned_days($weekcode);
+    $days_module_planned =  self::get_modules_days_planned($week->weekcode);
+    
+    $work_sessions = self::get_work_sessions($week->weekstart, $week->weekend);
+    $days_module_worked = self::get_modules_days_worked($work_sessions);
+    //debug_text::print("days_module_planned",$days_module_planned);
+    //debug_text::print("days_module_worked",$days_module_worked);
+
+
+    //$number_planned_days_logs = self::number_schedules_day_log($work_sessions);
+    $data_report_meta = new stdClass();
+    $data_report_meta->dias_planificados = $days_module_planned;
+    $data_report_meta->dias_trabajados = $days_module_worked;
+    //debug_text::print("data_report_meta",$data_report_meta);   
+    return $data_report_meta;
+  }
+
+  protected function planned_days($weekcode = null)
+  {
+    if (empty($this->users)) {
+      return null;
     }
 
-    private function get_active_days($logs){
-        $days_count = 0;
-        if(count($logs) == 0){
-            return $days_count;
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+
+    global $DB;
+
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $params = array_merge(array($week->weekcode), $invalues);
+    $sql =  "select * from {st_rpt_weekly_schedules} where weekcode = ? and userid $in";
+    $week_schedules = $DB->get_records_sql($sql, $params);
+
+    $number_per_day = self::number_schedules_day($week_schedules);
+
+    return $number_per_day;
+  }
+
+
+  /**
+   * Gets the module id from mdl_course_modules with the instance and type of the 'mdl_{type}' table"
+   **/
+
+  protected function get_module_id($instance, $type)
+  {
+    global $DB;
+    $sql = "select cm.id from {course_modules} cm,{modules} m where cm.module = m.id and cm.instance = ? and m.name = ?";
+    $id = $DB->get_record_sql($sql, array($instance, $type));
+    return $id;
+  }
+
+  protected function get_modules_days_worked($work_sessions)
+  {
+    $days_worked = array(
+      "monday" => array(),
+      "tuesday" => array(),
+      "wednesday" => array(),
+      "thursday" => array(),
+      "friday" => array(),
+      "saturday" => array(),
+      "sunday" => array(),
+    );
+    $logs = $work_sessions[0]->logs;
+    //debug_text::print("work_sessions[0]->logs",$work_sessions[0]->logs);
+    foreach ($logs as $log) {
+      if (strpos($log->eventname, "course_module_viewed")) {
+        $moduleid = $this->get_module_id($log->objectid, $log->objecttable);
+        switch (date('N', $log->timecreated)) {
+          case 1:
+            array_push($days_worked["monday"], $moduleid->id);
+            break;
+          case 2:
+            array_push($days_worked["tuesday"], $moduleid->id);
+            break;
+          case 3:
+            array_push($days_worked["wednesday"], $moduleid->id);
+            break;
+          case 4:
+            array_push($days_worked["thursday"], $moduleid->id);
+            break;
+          case 5:
+            array_push($days_worked["friday"], $moduleid->id);
+            break;
+          case 6:
+            array_push($days_worked["saturday"], $moduleid->id);
+            break;
+          case 7:
+            array_push($days_worked["sunday"], $moduleid->id);
+            break;
         }
-        $days = array();
-        foreach($logs as $key => $log){
-            $year = date("Y", $log->timecreated);
-            $month = date("m", $log->timecreated);
-            $day = date("d", $log->timecreated);
-            $label = $year.$month.$day;
-            if (!isset($days[$label])) {
-                $days[$label] = 1;
-            }
+      }
+    }
+    //debug_text::print("days_committed",$days_worked);
+    return $days_worked;
+  }
+
+  protected function get_modules_days_planned($weekcode)
+  {
+    $days_planned = array(
+      "monday" => array(),
+      "tuesday" => array(),
+      "wednesday" => array(),
+      "thursday" => array(),
+      "friday" => array(),
+      "saturday" => array(),
+      "sunday" => array(),
+    );
+    $mods_days =  self::get_modules_days_by_week($weekcode);
+    foreach ($mods_days as $key => $mod_day) {
+      ////debug_text::print("mod_day",$mod_day);
+      array_push($days_planned[$mod_day->daydesc], $mod_day->cmid);
+    }
+    //debug_text::print("days_planned",$days_planned);
+    return $days_planned;
+  }
+
+  protected function get_modules_days_by_week($weekcode)
+  {
+    //debug_text::print("week_schedule->id",$week_schedule->id);
+    //debug_text::print("this->user->id",$this->user->id);
+    global $DB;
+    $sql = "select dm.id, dm.id_course_modules cmid, d.description daydesc from {notemyprogress_days_modules} dm,{notemyprogress_days} d, {st_rpt_weekly_schedules} ws where dm.id_days = d.id and d.id_weekly_schedules = ws.id and ws.weekcode = ? and ws.userid = ? ";
+    $mods_weeks = $DB->get_records_sql($sql, array($weekcode,$this->user->id));
+    //debug_text::print("mods_weeks",$mods_weeks);
+    return $mods_weeks;
+  }
+
+  protected function get_num_day($day){
+    if ($day == "monday" ){
+      return 1;
+    }
+    elseif($day == "tuesday" ){
+      return 2;
+    }
+    elseif($day == "wednesday" ){
+      return 3;
+    }
+    elseif($day == "thursday" ){
+      return 4;
+    }
+    elseif($day == "friday" ){
+      return 5;
+    }
+    elseif($day == "saturday" ){
+      return 6;
+    }
+    elseif($day == "sunday" ){
+      return 7;
+    }
+  }
+
+
+  protected function get_respect_planning($planifications,$week)
+  {
+    $days_module_planned = $planifications->dias_planificados;
+    $days_module_worked = $planifications->dias_trabajados;
+    $status = [];
+    $weekstart = $week->weekstart;
+    $current_time = time();
+    //debug_text::print("days_module_planned",$days_module_planned);
+    foreach ($days_module_planned as $key => $day_planned) {
+      $day_num =  self::get_num_day($key);
+      $current_day = strtotime("+ $day_num day ",$weekstart);
+      //debug_text::print("day_num",$day_num);
+      //debug_text::print("key",$key);
+      //debug_text::print("weekstart",$weekstart);
+      //debug_text::print("current_time",$current_time);
+      //debug_text::print("current_day",$current_day);
+      if ($day_planned) {
+        if (!array_diff($day_planned, $days_module_worked[$key])) {
+          array_push($status, 'completed');
+        } else {
+          if ($current_day < $current_time) {
+            array_push($status, 'failed');
+          } else {
+            array_push($status, 'pending');
+          }
         }
-        $days_count = count($days);
-        return $days_count;
+      } else {
+        array_push($status, 'unplanned');
+      }
     }
-
-    protected function get_users_course_grade($users) {
-        global $DB;
-        $item = $DB->get_record('grade_items',
-            array('courseid' => $this->course->id, 'itemtype' => 'course'), 'id, courseid, grademax');
-        if ($item) {
-            $sql = "SELECT id, userid, rawgrademax, finalgrade FROM {grade_grades} 
-                WHERE itemid = {$item->id} AND finalgrade IS NOT NULL";
-            $rows = $DB->get_records_sql($sql);
-            $grades = array();
-            foreach ($rows as $row) {
-                $grades[$row->userid] = $row;
+    //debug_text::print("status",$status);     
+    return $status;
+  }
+
+
+  protected function number_schedules_day_log($work_sessions)
+  {
+    $count_days_log = new stdClass();
+    $count_days_log->lun = 0;
+    $count_days_log->mar = 0;
+    $count_days_log->mie = 0;
+    $count_days_log->jue = 0;
+    $count_days_log->vie = 0;
+    $count_days_log->sab = 0;
+    $count_days_log->dom = 0;
+    foreach ($work_sessions as $key => $work_session) {
+      $lun_status = false;
+      $mar_status = false;
+      $mie_status = false;
+      $jue_status = false;
+      $vie_status = false;
+      $sab_status = false;
+      $dom_status = false;
+      foreach ($work_session->sessions as $key => $session) {
+        $day = self::day_week($session->end);
+        switch ($day) {
+          case 'lun':
+            if (!$lun_status) {
+              $count_days_log->lun++;
+              $lun_status = true;
             }
-
-            foreach ($users as $user) {
-                $grade = new stdClass();
-                $grade->finalgrade = 0;
-                $grade->maxgrade = $item->grademax;
-                if (isset($grades[$user->id])) {
-                    $grade->finalgrade = $grades[$user->id]->finalgrade;
-                }
-                $user->coursegrade = $grade;
+            break;
+          case 'mar':
+            if (!$mar_status) {
+              $count_days_log->mar++;
+              $mar_status = true;
             }
-        } else {
-            foreach ($users as $user) {
-                $grade = new stdClass();
-                $grade->finalgrade = 0;
-                $grade->maxgrade = 0;
-                $user->coursegrade = $grade;
+            break;
+          case 'mie':
+            if (!$mie_status) {
+              $count_days_log->mie++;
+              $mie_status = true;
+            }
+            break;
+          case 'jue':
+            if (!$jue_status) {
+              $count_days_log->jue++;
+              $jue_status = true;
             }
+            break;
+          case 'vie':
+            if (!$vie_status) {
+              $count_days_log->vie++;
+              $vie_status = true;
+            }
+            break;
+          case 'sab':
+            if (!$sab_status) {
+              $count_days_log->sab++;
+              $sab_status = true;
+            }
+            break;
+          case 'dom':
+            if (!$dom_status) {
+              $count_days_log->dom++;
+              $dom_status = true;
+            }
+            break;
         }
-        return $users;
+      }
+    }
+    $data_days = array();
+    foreach (array_values((array)$count_days_log) as $key => $value) {
+      array_push($data_days, $value);
+    }
+    return $data_days;
+  }
+
+  protected function day_week($fecha)
+  {
+    switch (date('w', $fecha)) {
+      case 1:
+        return "lun";
+        break;
+      case 2:
+        return "mar";
+        break;
+      case 3:
+        return "mie";
+        break;
+      case 4:
+        return "jue";
+        break;
+      case 5:
+        return "vie";
+        break;
+      case 6:
+        return "sab";
+        break;
+      case 7:
+        return "dom";
+        break;
+    }
+  }
+
+  // protected function number_schedules_day($week_schedules)
+  // {
+  //   $count_planned_days = new stdClass();
+  //   $count_planned_days->lun = 0;
+  //   $count_planned_days->mar = 0;
+  //   $count_planned_days->mie = 0;
+  //   $count_planned_days->jue = 0;
+  //   $count_planned_days->vie = 0;
+  //   $count_planned_days->sab = 0;
+  //   $count_planned_days->dom = 0;
+
+  //   foreach ($week_schedules as $key => $week_schedule) {
+  //     $days = explode(',', $week_schedule->days);
+
+  //     foreach ($days as $key => $day) {
+  //       switch ($day) {
+  //         case 'lun':
+  //           $count_planned_days->lun++;
+  //           break;
+  //         case 'mar':
+  //           $count_planned_days->mar++;
+  //           break;
+  //         case 'mie':
+  //           $count_planned_days->mie++;
+  //           break;
+  //         case 'jue':
+  //           $count_planned_days->jue++;
+  //           break;
+  //         case 'vie':
+  //           $count_planned_days->vie++;
+  //           break;
+  //         case 'sab':
+  //           $count_planned_days->sab++;
+  //           break;
+  //         case 'dom':
+  //           $count_planned_days->dom++;
+  //           break;
+  //       }
+  //     }
+  //   }
+
+  //   $data_days = array();
+  //   foreach (array_values((array)$count_planned_days) as $key => $value) {
+  //     array_push($data_days, $value);
+  //   }
+
+  //   return $data_days;
+  // }
+
+  public function goals_report_metereflexion($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    $schedule = self::get_schedule($week->weekcode);
+    if ($schedule != null) {
+      $query_goals = $this->get_goals_id($schedule);
+      //debug_text::print("query_goals",$query_goals);
+    } else {
+      $query_goals = [];
     }
+    return $query_goals;
+  }
+
+  public function get_goals_id($week_schedule)
+  {
+    global $DB;
+    //debug_text::print("week_schedule->id",$week_schedule->id);
+    //debug_text::print("this->user->id",$this->user->id);
+    $sql =  "select g.id_goals_categories from {notemyprogress_goals} g,{st_rpt_weekly_schedules} ws where g.id_weekly_schedules = ws.id and g.id_weekly_schedules = ? and ws.userid = ? ";
+    $goals_res = array_values($DB->get_records_sql($sql, array($week_schedule->id,$this->user->id)));
+    $arr_goal = [];
+    foreach($goals_res as $key=>$id_obj){
+      array_push($arr_goal,$id_obj->id_goals_categories);
+    }
+    return $arr_goal;
+  }
 
-    protected function get_users_items_grades($users) {
-        global $DB;
-        $items = $this->get_grade_items();
-        $items = $this->format_items($items);
-        $items = $this->set_average_max_min_grade($items, $users);
 
-        $itemsids = $this->extract_elements_field($items, 'id');
-        if (count($itemsids) > 0) {
-            list($in, $invalues) = $DB->get_in_or_equal($itemsids);
-            $sql = "SELECT id, itemid, userid, finalgrade FROM {grade_grades} 
-                WHERE itemid $in AND finalgrade IS NOT NULL ORDER BY itemid, userid";
-            $rows = $DB->get_recordset_sql($sql, $invalues);
+  public function hours_report_metereflexion($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
 
-            $itemsgraded = array();
-            foreach($rows as $row){
-                $itemsgraded[$row->itemid][$row->userid] = $row;
-            }
-            $rows->close();
-
-            foreach ($users as $user) {
-                $useritems = array();
-                foreach ($items as $item) {
-                    $useritem = new stdClass();
-                    $useritem->average = $item->average;
-                    $useritem->average_percentage = $item->average_percentage;
-                    $useritem->categoryid = $item->categoryid;
-                    $useritem->coursemoduleid = $item->coursemoduleid;
-                    $useritem->finalgrade = 0;
-                    $useritem->gradecount = $item->gradecount;
-                    $useritem->grademax = $item->grademax;
-                    $useritem->grademin = $item->grademin;
-                    $useritem->id = $item->id;
-                    $useritem->iteminstance = $item->iteminstance;
-                    $useritem->itemmodule = $item->itemmodule;
-                    $useritem->itemname = $item->itemname;
-                    $useritem->maxrating = $item->maxrating;
-                    $useritem->minrating = $item->minrating;
-                    if (isset($itemsgraded[$item->id][$user->id])) {
-                        $useritem->finalgrade = $itemsgraded[$item->id][$user->id]->finalgrade;
-                    }
-                    array_push($useritems, $useritem);
-                }
-                $user->gradeitems = $useritems;
-            }
+    $work_sessions = self::get_work_sessions($week->weekstart, $week->weekend);
+    $user_with_planning = 0;
+    $sum_hours_work = 0;
+
+    if (self::render_has() == 'student') {
+      $label_horas = self::convert_time('minutes', round($work_sessions[0]->summary->added, 0));
+      $sum_hours_work = round($work_sessions[0]->summary->added, 2) / 60;
+    } else {
+      foreach ($work_sessions as $key => $work_session) {
+        if ($work_session->summary->added > 0) {
+          $user_with_planning++;
+          $sum_hours_work += $work_session->summary->added;
         }
-        return $users;
+      }
+      $label_horas = self::convert_time('minutes', $sum_hours_work / count($work_sessions));
+      $sum_hours_work = round($sum_hours_work / count($work_sessions), 2) / 60;
     }
 
-    protected function get_grade_categories () {
-        global $DB;
-        $sql = "SELECT * FROM {grade_categories} WHERE courseid = {$this->course->id} ORDER BY path";
-        $result = $DB->get_records_sql($sql);
-        $result = array_values($result);
-        return $result;
+    $sum_hours_per_week = self::planned_week($weekcode);
+    //debug_text::print("sum_hours_per_week",$sum_hours_per_week = null);
+
+    $data_report_meta_hours = new stdClass();
+    $data_report_meta_hours->title = 'Tiempo invertido';
+    $data_report_meta_hours->horas_trabajadas = $sum_hours_work;
+    $data_report_meta_hours->label_horas_trabajadas = $label_horas;
+    $data_report_meta_hours->horas_planificadas = $sum_hours_per_week != null ? $sum_hours_per_week : 0 ;
+    $data_report_meta_hours->label_horas_planificadas = self::convert_time('hours', $sum_hours_per_week);
+    $data_report_meta_hours->total_users = count($work_sessions);
+    $data_report_meta_hours->interacted_users = $user_with_planning;
+    return $data_report_meta_hours;
+  }
+
+  protected function planned_week($weekcode = null)
+  {
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    global $DB;
+    if (empty($this->users)) {
+      return 0;
+    }
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $sql =  "select * from {st_rpt_weekly_schedules} where weekcode = ? and userid $in";
+    $params = array_merge(array($week->weekcode), $invalues);
+    $week_schedules = $DB->get_records_sql($sql, $params);
+    $result = self::calculate_average("hours", $week_schedules);
+    $result = $result->average;
+    return $result;
+  }
+
+  public function classroom_report_metareflexion($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
     }
 
-    protected function get_grade_items () {
-        global $DB;
-        $items = $DB->get_records('grade_items',
-            array('courseid' => $this->course->id, 'itemtype' => 'mod'));
-        if (!$items) {
-            $items = array();
-        }
+    $average_classroom = self::average_classroom($weekcode);
+    $average_of_classroom = self::average_of_classroom($weekcode);
+
+    $data_last_week = new stdClass();
+    $data_last_week->average_classroom = $average_classroom;
+    $data_last_week->average_of_classroom = $average_of_classroom;
 
-//        $sql = "SELECT * FROM {grade_items} WHERE courseid = {$this->course->id} AND itemtype = 'mod' and gradetype = 1";
-//        $result = $DB->get_records_sql($sql);
-//        $result = array_values($result);
-        return $items;
+    return $data_last_week;
+  }
+
+  protected function average_classroom($weekcode = null)
+  {
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    global $DB;
+    if (empty($this->users)) {
+      return 0;
     }
 
-    protected function format_items ($items) {
-        $response = array();
-        foreach ($items as $item) {
-            $format_item = new stdClass();
-            $format_item->id = (int) $item->id;
-            $format_item->categoryid = (int) $item->categoryid;
-            $format_item->itemname = $item->itemname;
-            $format_item->itemmodule = $item->itemmodule;
-            $format_item->iteminstance = (int) $item->iteminstance;
-            $format_item->grademax = (int) $item->grademax;
-            $format_item->grademin = (int) $item->grademin;
-            $coursemoduleid = $this->get_course_module_id($item);
-            $format_item->coursemoduleid = $coursemoduleid;
-            array_push($response, $format_item);
-        }
-        return $response;
-    }
-
-    protected function get_course_module_id($item) {
-        global $DB;
-        $coursemoduleid = false;
-        if (isset($item->itemmodule)) {
-            $result = $DB->get_record('modules', array('name' => $item->itemmodule), 'id', MUST_EXIST);
-            $moduleid =  $result->id;
-            $result = $DB->get_record('course_modules',
-                array('course' => $this->course->id, 'module' => $moduleid, 'instance' => $item->iteminstance),
-                'id', MUST_EXIST);
-            $coursemoduleid = (int) $result->id;
-        }
-        return $coursemoduleid;
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $sql = "select * from {st_rpt_work_last_weeks} where weekcode = ? and userid $in";
+    $params = array_merge(array($week->weekcode), $invalues);
+    $presence_clases = $DB->get_records_sql($sql, $params);
+
+    $sum_classroom_hours = 0;
+    foreach ($presence_clases as $key => $presence_clase) {
+      $sum_classroom_hours += $presence_clase->classroom_hours;
     }
 
-    protected function set_average_max_min_grade ($items, $users) {
-        foreach ($items as $item) {
-            $result = $this->get_average_max_min_grade($item->id);
-            $grades = $this->get_item_grades($item->id, $users);
-            $item->average_percentage = $this->convert_value_to_percentage($result->avg, $item->grademax);
-            $item->average = $result->avg;
-            $item->maxrating = $result->max;
-            $item->minrating = $result->min;
-            $item->gradecount = (int) $result->count;
-            $item->grades = $grades;
-        }
-        return $items;
+    $average_horas_presence_clases = 0;
+
+    if (!empty($presence_clases)) {
+      $average_horas_presence_clases = round($sum_classroom_hours / count($presence_clases), 1);
     }
 
-    private function get_item_grades($itemid, $users) {
-        global $DB;
-        list($in, $invalues) = $DB->get_in_or_equal($this->users);
-        $sql = "SELECT id, rawgrade, rawgrademax, rawgrademin, userid FROM {grade_grades} 
-                WHERE itemid = {$itemid} AND rawgrade IS NOT NULL AND userid {$in}";
-        $grades = $DB->get_records_sql($sql, $invalues);
-        $grades = array_values($grades);
-        foreach ($grades as $grade) {
-            $grade->rawgrade = (int) $grade->rawgrade;
-            $grade->rawgrademax = (int) $grade->rawgrademax;
-            $grade->rawgrademin = (int) $grade->rawgrademin;
-            $grade->userid = (int) $grade->userid;
-            if (isset($users[$grade->userid])) {
-                $grade->user = $users[$grade->userid];
-            }
-        }
-        return $grades;
+    return $average_horas_presence_clases;
+  }
+
+  protected function average_of_classroom($weekcode = null)
+  {
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    global $DB;
+    if (empty($this->users)) {
+      return 0;
     }
 
-    private function convert_value_to_percentage($value, $maxvalue) {
-        $percentage = 0;
-        if ($maxvalue > 0) {
-            $percentage = ($value * 100)/$maxvalue;
-        }
-        return $percentage;
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $sql = "select * from {st_rpt_work_last_weeks} where weekcode = ? and userid $in";
+    $params = array_merge(array($week->weekcode), $invalues);
+    $presence_clases = $DB->get_records_sql($sql, $params);
+
+    $sum_hours_off_course = 0;
+    foreach ($presence_clases as $key => $presence_clase) {
+      $sum_hours_off_course += $presence_clase->hours_off_course;
     }
 
-    private function get_average_max_min_grade($itemid) {
-        global $DB;
-        list($in, $invalues) = $DB->get_in_or_equal($this->users);
-        $sql = "SELECT COUNT(*) as count, MAX(rawgrade) as max, MIN(rawgrade) as min, AVG(rawgrade) as avg
-                FROM {grade_grades} WHERE itemid = {$itemid} AND rawgrade IS NOT NULL AND userid {$in}";
-        $result = $DB->get_records_sql($sql, $invalues);
-        $result = array_values($result);
-        return $result[0];
-    }
-
-    public function get_chart_langs() {
-        $langs = array(
-            "loading" => get_string("chart_loading", "local_notemyprogress"),
-            "exportButtonTitle" => get_string("chart_exportButtonTitle", "local_notemyprogress"),
-            "printButtonTitle" => get_string("chart_printButtonTitle", "local_notemyprogress"),
-            "rangeSelectorFrom" => get_string("chart_rangeSelectorFrom", "local_notemyprogress"),
-            "rangeSelectorTo" => get_string("chart_rangeSelectorTo", "local_notemyprogress"),
-            "rangeSelectorZoom" => get_string("chart_rangeSelectorZoom", "local_notemyprogress"),
-            "downloadPNG" => get_string("chart_downloadPNG", "local_notemyprogress"),
-            "downloadJPEG" => get_string("chart_downloadJPEG", "local_notemyprogress"),
-            "downloadPDF" => get_string("chart_downloadPDF", "local_notemyprogress"),
-            "downloadSVG" => get_string("chart_downloadSVG", "local_notemyprogress"),
-            "downloadCSV" => get_string("chart_downloadCSV", "local_notemyprogress"),
-            "downloadXLS" => get_string("chart_downloadXLS", "local_notemyprogress"),
-            "exitFullscreen" => get_string("chart_exitFullscreen", "local_notemyprogress"),
-            "hideData" => get_string("chart_hideData", "local_notemyprogress"),
-            "noData" => get_string("chart_noData", "local_notemyprogress"),
-            "printChart" => get_string("chart_printChart", "local_notemyprogress"),
-            "viewData" => get_string("chart_viewData", "local_notemyprogress"),
-            "viewFullscreen" => get_string("chart_viewFullscreen", "local_notemyprogress"),
-            "resetZoom" => get_string("chart_resetZoom", "local_notemyprogress"),
-            "resetZoomTitle" => get_string("chart_resetZoomTitle", "local_notemyprogress"),
-            "months" => array(
-                get_string("fml_jan", "local_notemyprogress"),
-                get_string("fml_feb", "local_notemyprogress"),
-                get_string("fml_mar", "local_notemyprogress"),
-                get_string("fml_apr", "local_notemyprogress"),
-                get_string("fml_may", "local_notemyprogress"),
-                get_string("fml_jun", "local_notemyprogress"),
-                get_string("fml_jul", "local_notemyprogress"),
-                get_string("fml_aug", "local_notemyprogress"),
-                get_string("fml_sep", "local_notemyprogress"),
-                get_string("fml_oct", "local_notemyprogress"),
-                get_string("fml_nov", "local_notemyprogress"),
-                get_string("fml_dec", "local_notemyprogress"),
-            ),
-            "shortMonths" => array(
-                get_string("fml_jan_short", "local_notemyprogress"),
-                get_string("fml_feb_short", "local_notemyprogress"),
-                get_string("fml_mar_short", "local_notemyprogress"),
-                get_string("fml_apr_short", "local_notemyprogress"),
-                get_string("fml_may_short", "local_notemyprogress"),
-                get_string("fml_jun_short", "local_notemyprogress"),
-                get_string("fml_jul_short", "local_notemyprogress"),
-                get_string("fml_aug_short", "local_notemyprogress"),
-                get_string("fml_sep_short", "local_notemyprogress"),
-                get_string("fml_oct_short", "local_notemyprogress"),
-                get_string("fml_nov_short", "local_notemyprogress"),
-                get_string("fml_dec_short", "local_notemyprogress"),
-            ),
-            "weekdays" => array(
-                get_string("fml_sun", "local_notemyprogress"),
-                get_string("fml_mon", "local_notemyprogress"),
-                get_string("fml_tue", "local_notemyprogress"),
-                get_string("fml_wed", "local_notemyprogress"),
-                get_string("fml_thu", "local_notemyprogress"),
-                get_string("fml_fri", "local_notemyprogress"),
-                get_string("fml_sat", "local_notemyprogress"),
-            ),
-            "shortWeekdays" => array(
-                get_string("fml_sun_short", "local_notemyprogress"),
-                get_string("fml_mon_short", "local_notemyprogress"),
-                get_string("fml_tue_short", "local_notemyprogress"),
-                get_string("fml_wed_short", "local_notemyprogress"),
-                get_string("fml_thu_short", "local_notemyprogress"),
-                get_string("fml_fri_short", "local_notemyprogress"),
-                get_string("fml_sat_short", "local_notemyprogress"),
-            ),
-        );
-        return $langs;
-    }
-}
\ No newline at end of file
+    $average_horas_presence_clases = 0;
+
+    if (!empty($presence_clases)) {
+      $average_horas_presence_clases = round($sum_hours_off_course / count($presence_clases), 1);
+    }
+
+    return $average_horas_presence_clases;
+  }
+
+  public function report_last_week($weekcode = null)
+  {
+    if (!self::course_in_transit()) {
+      return null;
+    }
+    if (!self::course_has_users()) {
+      return null;
+    }
+    $week = $this->current_week;
+    if (!empty($weekcode)) {
+      $week = self::find_week($weekcode);
+    }
+    $work = self::get_work_last_week($week);
+
+    return $work;
+  }
+
+  private function get_work_last_week($week)
+  {
+    global $DB;
+    $sql = "select * from {st_rpt_questions}";
+    $questions = $DB->get_records_sql($sql);
+    $questions = self::add_question_alternatives($questions, $week);
+    return $questions;
+  }
+
+  private function add_question_alternatives($questions, $week)
+  {
+    global $DB;
+    if (empty($this->users)) {
+      return null;
+    }
+    list($in, $invalues) = $DB->get_in_or_equal($this->users);
+    $questions = array_values($questions);
+    foreach ($questions as $question) {
+      $question->enunciated = get_string($question->enunciated, "local_notemyprogress");
+      $params = array();
+      array_push($params, $week->weekcode);
+      $params = array_merge($params, $invalues);
+      array_push($params, $question->id);
+      $sql = "select a.*, (select count(*) from {st_rpt_work_last_weeks} where weekcode = ? and userid $in and (previous_class_learning = a.id or benefit_going_class = a.id)) as count_selections 
+              from {st_rpt_answers} a where a.questionid = ?";
+      $answers = $DB->get_records_sql($sql, $params);
+      foreach ($answers as $key => $answer) {
+        $answer->enunciated = get_string($answer->enunciated, "local_notemyprogress");
+      }
+      $question->alternatives = array_values($answers);
+    }
+    return $questions;
+  }
+}
diff --git a/notemyprogress/classes/resourcetype.php b/notemyprogress/classes/resourcetype.php
new file mode 100644
index 0000000000000000000000000000000000000000..8327ddb1c598342a37e8c9837ded3ca1257e61b1
--- /dev/null
+++ b/notemyprogress/classes/resourcetype.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace local_notemyprogress;
+
+require_once("lib_trait.php");
+
+use stdClass;
+
+
+class resourcetype
+{
+
+  const DEFAULT_TYPE = "other";
+
+  public static function get_default_type()
+  {
+    return self::DEFAULT_TYPE;
+  }
+
+  public static function get_type($mimetype)
+  {
+    $groups = array(
+      "resource_document" => self::get_document_mimetypes(),
+      "resource_image" => self::get_image_mimetypes(),
+      "resource_audio" => self::get_audio_mimetypes(),
+      "resource_video" => self::get_video_mimetypes(),
+      "resource_file" => self::get_file_mimetypes(),
+      "resource_script" => self::get_script_mimetypes(),
+      "resource_text" => self::get_text_mimetypes(),
+      "resource_download" => self::get_download_mimetypes()
+    );
+    $type = self::DEFAULT_TYPE;
+    foreach ($groups as $group_name => $group) {
+      if (in_array($mimetype, $group)) {
+        $type = $group_name;
+        break;
+      }
+    }
+    return $type;
+  }
+
+  public static function get_document_mimetypes()
+  {
+    $documents = [
+      "application/pdf", "application/x-abiword", "application/octet-stream", "application/msword",
+      "application/vnd.oasis.opendocument.presentation", "application/vnd.oasis.opendocument.spreadsheet",
+      "application/vnd.oasis.opendocument.text", "application/vnd.ms-powerpoint", "application/vnd.visio",
+      "application/vnd.ms-excel"
+    ];
+    return $documents;
+  }
+
+  public static function get_image_mimetypes()
+  {
+    $images = [
+      "image/jpeg", "image/png", "image/gif", "image/x-icon", "image/svg+xml", "image/webp", "audio/3gpp",
+      "audio/3gpp2"
+    ];
+    return $images;
+  }
+
+  public static function get_audio_mimetypes()
+  {
+    $audio = ["audio/aac", "audio/midi", "audio/ogg", "audio/x-wav", "audio/webm"];
+    return $audio;
+  }
+  public static function get_video_mimetypes()
+  {
+    $video = ["video/mp4", "video/x-msvideo", "video/mpeg", "video/ogg", "video/webm", "video/3gpp", "video/3gpp2"];
+    return $video;
+  }
+
+  public static function get_file_mimetypes()
+  {
+    $files = [
+      "application/x-rar-compressed", "application/zip", "application/x-bzip", "application/x-bzip2",
+      "application/x-7z-compressed"
+    ];
+    return $files;
+  }
+
+  public static function get_script_mimetypes()
+  {
+    $scripts = [
+      "application/octet-stream", "application/x-csh", "text/css", "application/java-archive",
+      "application/javascript", "application/json", "application/x-sh", "application/xml"
+    ];
+    return $scripts;
+  }
+
+  public static function get_text_mimetypes()
+  {
+    $text = ["text/csv", "text/plain", "text/html", "text/calendar", "application/rtf", "application/xhtml+xml"];
+    return $text;
+  }
+  public static function get_download_mimetypes()
+  {
+    $downloads = ["file_download"];
+    return $downloads;
+  }
+}
diff --git a/notemyprogress/classes/srlog.php b/notemyprogress/classes/srlog.php
new file mode 100644
index 0000000000000000000000000000000000000000..d38e57387127b44336eccb92b1ee359c03ab8092
--- /dev/null
+++ b/notemyprogress/classes/srlog.php
@@ -0,0 +1,117 @@
+<?php
+require_once dirname(__FILE__) . '/../../../course/lib.php';
+class local_student_reports_srlog
+{
+
+  public static function create($component, $action, $userid, $courseid)
+  {
+    global $DB;
+    $user = self::get_user($userid);
+    $course = self::get_course($courseid);
+    $log = new stdClass();
+    $log->userid = $user->id;
+    $log->username = $user->username;
+    $log->name = $user->firstname;
+    $log->lastname = $user->lastname;
+    $log->email = $user->email;
+    $log->current_roles = self::get_user_roles($courseid, $userid);
+    $log->courseid = $course->id;
+    $log->coursename = $course->fullname;
+    $log->courseshortname = $course->shortname;
+    $log->component = $component;
+    $log->action = $action;
+    $log->timecreated = time();
+    $id = $DB->insert_record("notemyprogress_logs", $log, true);
+    $log->id = $id;
+    return $log;
+  }
+
+  public static function get_user_roles($courseid, $userid)
+  {
+    $user_roles = array();
+    $admins = array_values(get_admins());
+    foreach ($admins as $admin) {
+      if ($admin->id == $userid) {
+        $user_roles[] = 'admin';
+      }
+    }
+    $context = context_course::instance($courseid);
+    $roles = get_user_roles($context, $userid);
+    foreach ($roles as $role) {
+      $user_roles[] = $role->shortname;
+    }
+    $user_roles = implode(', ', $user_roles);
+    return $user_roles;
+  }
+
+  public static function get_user($userid)
+  {
+    global $DB;
+    $sql = "select * from {user} where id = ?";
+    $user = $DB->get_record_sql($sql, array($userid));
+    return $user;
+  }
+
+  public static function get_course($courseid)
+  {
+    global $DB;
+    $sql = "select * from {course} where id = ?";
+    $user = $DB->get_record_sql($sql, array($courseid));
+    return $user;
+  }
+
+  public static function create_file($courseid)
+  {
+    self::remove_old_logs_from_disk($courseid);
+    set_time_limit(0);
+    global $DB;
+
+    $headers = array(
+      get_string('logs_header_logid', 'local_notemyprogress'),
+      get_string('logs_header_userid', 'local_notemyprogress'),
+      get_string('logs_header_username', 'local_notemyprogress'),
+      get_string('logs_header_names', 'local_notemyprogress'),
+      get_string('logs_header_lastnames', 'local_notemyprogress'),
+      get_string('logs_header_email', 'local_notemyprogress'),
+      get_string('logs_header_roles', 'local_notemyprogress'),
+      get_string('logs_header_courseid', 'local_notemyprogress'),
+      get_string('logs_header_component', 'local_notemyprogress'),
+      get_string('logs_header_action', 'local_notemyprogress'),
+      get_string('logs_header_timecreated', 'local_notemyprogress')
+    );
+
+    $logs = $DB->get_recordset("notemyprogress_logs", array("courseid" => $courseid));
+    $path = dirname(__FILE__) . "/../downloads/";
+    $filename = "Registros" . "_curso__" . $courseid . "__.csv";
+
+    $file = fopen($path . $filename, 'w');
+    fprintf($file, chr(0xEF) . chr(0xBB) . chr(0xBF));
+    fputcsv($file, $headers, ";");
+    foreach ($logs as $log) {
+      $date = DateTime::createFromFormat('U', $log->timecreated);
+      $date->setTimeZone(new DateTimeZone('UTC'));
+      $log->timecreated = $date->format('Y-m-d H:i:s e');
+      fputcsv($file, (array) $log, ";");
+    }
+    fclose($file);
+    $logs->close();
+
+    return $filename;
+  }
+
+  public static function remove_old_logs_from_disk($courseid)
+  {
+    $path = dirname(__FILE__) . "/../downloads";
+    $files = glob($path . '/*');
+    foreach ($files as $file) {
+      if (is_file($file)) {
+        $route_parts = explode("__", $file);
+        foreach ($route_parts as $route_part) {
+          if ($route_part == $courseid) {
+            unlink($file);
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/notemyprogress/classes/student.php b/notemyprogress/classes/student.php
index 95fd96880333df5452273d84e40aadeb59af8071..818e05ab95d410152fc85e3da3dafe53c1e5e0aa 100644
--- a/notemyprogress/classes/student.php
+++ b/notemyprogress/classes/student.php
@@ -27,52 +27,152 @@ namespace local_notemyprogress;
 
 use stdClass;
 
-class student extends report {
+class student extends report
+{
 
-    function __construct($courseid, $userid){
+    function __construct($courseid, $userid)
+    {
         parent::__construct($courseid, $userid);
         self::set_profile();
         self::set_users();
     }
 
+
+    public function get_modules_completion($weekcode = null)
+    {
+        if (!self::course_in_transit()) {
+            return null;
+        }
+        if (!self::course_has_users()) {
+            return null;
+        }
+        $week = $this->current_week;
+
+        if (!empty($weekcode)) {
+            $week = self::find_week($weekcode);
+        }
+
+        $course_modules = self::get_course_modules_from_sections($week->sections);
+        $course_modules = self::set_finished_modules($course_modules);
+        $summary = self::summary_finished_course_modules($course_modules);
+        return $summary;
+    }
+
+    private function set_finished_modules($course_modules)
+    {
+        $finished = self::get_finished_course_module($course_modules);
+        foreach ($course_modules as $key => $course_module) {
+            if (empty($course_module)) {
+                continue;
+            }
+            $course_module->finished = false;
+            $findies = array_filter($finished, function ($e) use ($course_module) {
+                return $e->contextinstanceid == $course_module->id;
+            });
+            if (!empty($findies)) {
+                $findies = array_values($findies);
+                $course_module->finished = self::to_format("Y-m-d H:i:s", $findies[0]->timecreated);
+            }
+        }
+        return $course_modules;
+    }
+
+    private function get_finished_course_module($course_modules)
+    {
+        if (empty($course_modules)) {
+            return array();
+        }
+        global $DB;
+        $finished = array();
+        $course_modules = self::extract_ids($course_modules);
+        list($users_in, $users_values) = $DB->get_in_or_equal($this->users);
+        list($course_modules_in, $course_modules_values) = $DB->get_in_or_equal($course_modules);
+        $sql_values = array_merge($users_values, $course_modules_values);
+        $sql = "select * from {logstore_standard_log} where courseid = {$this->course->id} AND userid $users_in AND contextinstanceid $course_modules_in order by timecreated asc";
+        $logs = $DB->get_recordset_sql($sql, $sql_values);
+        foreach ($logs as $key => $log) {
+            $findies = array_filter($finished, function ($e) use ($log) {return $e->contextinstanceid == $log->contextinstanceid;});
+            if (count($findies) == 0) {
+                array_push($finished, $log);
+            }
+        }
+        $logs->close();
+        return $finished;
+    }
+
+    private function summary_finished_course_modules($course_modules)
+    {
+        $groups = array();
+        foreach ($course_modules as $key => $course_module) {
+            if (empty($course_module)) {
+                continue;
+            }
+            if ($course_module->modname == "resource") {
+                $course_module->modname = self::get_resource_type($course_module->id);
+            }
+
+            if (!isset($groups[$course_module->modname])) {
+                $group = new stdClass();
+                $group->count_all = 0;
+                $group->count_pending = 0;
+                $group->count_finished = 0;
+                $groups[$course_module->modname] = $group;
+            }
+            $current_group = $groups[$course_module->modname];
+            $current_group->count_all++;
+            if ($course_module->finished) {
+                $current_group->count_finished++;
+            } else {
+                $current_group->count_pending++;
+            }
+        }
+        return $groups;
+    }
+
+
     /**
      * Almacena el perfil de visualización de la clase en la variable $profile de clase
      */
-    public function set_profile(){
+    public function set_profile()
+    {
         $this->profile = "student";
     }
 
     /**
      * Almacena el id del estudiante en la variable $users de la clase
      */
-    public function set_users(){
+    public function set_users()
+    {
         $this->users = array($this->user->id);
         return $this->users;
     }
 
-    public function get_general_indicators () {
-        if(!self::course_in_transit()){
+    public function get_general_indicators()
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
 
         $start = null;
-        if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
+        if (isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
             $start = $this->course->startdate;
         }
         $end = null;
-        if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
+        if (isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
             $end = $this->course->enddate;
         }
         $enable_completion = false;
-        if(isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
+        if (isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
             $enable_completion = true;
         }
 
         $cms = self::get_course_modules();
-        $cms = array_filter($cms, function($cm){ return $cm['modname'] != 'label';});
+        $cms = array_filter($cms, function ($cm) {
+            return $cm['modname'] != 'label';
+        });
         $cms = array_values($cms);
 
         $user_sessions = self::get_work_sessions($start, $end);
@@ -81,7 +181,9 @@ class student extends report {
         $user = $this->get_users_course_grade($user);
         $user = $this->get_users_items_grades($user);
 
-        $sessions = array_map(function($user_sessions){ return $user_sessions->sessions;}, $user_sessions);
+        $sessions = array_map(function ($user_sessions) {
+            return $user_sessions->sessions;
+        }, $user_sessions);
         $sessions = self::get_sessions_by_weeks($sessions);
         $sessions = self::get_sessions_by_weeks_summary($sessions, (int) $this->course->startdate);
 
@@ -96,25 +198,30 @@ class student extends report {
         return $response;
     }
 
-    public function get_sessions($weekcode = null, $include_weeks = true){
-        if(!self::course_in_transit()){
+    public function get_sessions($weekcode = null, $include_weeks = true)
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
 
         $week = $this->current_week;
-        if(!empty($weekcode)){
+        if (!empty($weekcode)) {
             $week = self::find_week($weekcode);
         }
 
         $work_sessions = self::get_work_sessions($week->weekstart, $week->weekend);
-        $sessions = array_map(function($user_sessions){ return $user_sessions->sessions;}, $work_sessions);
+        $sessions = array_map(function ($user_sessions) {
+            return $user_sessions->sessions;
+        }, $work_sessions);
         $sessions = self::get_sessions_by_hours($sessions);
         $sessions = self::get_sessions_by_hours_summary($sessions);
 
-        $inverted_time = array_map(function($user_sessions){ return $user_sessions->summary;}, $work_sessions);
+        $inverted_time = array_map(function ($user_sessions) {
+            return $user_sessions->summary;
+        }, $work_sessions);
         $inverted_time = self::calculate_average("added", $inverted_time);
         $inverted_time = self::get_inverted_time_summary($inverted_time, (int) $week->hours_dedications, false);
 
@@ -124,30 +231,32 @@ class student extends report {
 
         if ($include_weeks) {
             $start = null;
-            if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
+            if (isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
                 $start = $this->course->startdate;
             }
             $end = null;
-            if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
+            if (isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
                 $end = $this->course->enddate;
             }
             $enable_completion = false;
-            if(isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
+            if (isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
                 $enable_completion = true;
             }
 
             $work_sessions = self::get_work_sessions($start, $end);
             $cms = self::get_course_modules();
-            $cms = array_filter($cms, function($cm){ return $cm['modname'] != 'label';});
+            $cms = array_filter($cms, function ($cm) {
+                return $cm['modname'] != 'label';
+            });
             $cms = array_values($cms);
             $user = self::get_progress_table($work_sessions, $cms, $enable_completion);
 
             $response->course_cms = $cms;
             $response->user_cms = $user[0]->cms->modules;
-//            $response->weeks = $this->weeks;
-//            $response->sections = $this->current_sections;
+            //            $response->weeks = $this->weeks;
+            //            $response->sections = $this->current_sections;
         }
         $response->sections = $week->sections;
         return $response;
     }
-}
\ No newline at end of file
+}
diff --git a/notemyprogress/classes/student_planning.php b/notemyprogress/classes/student_planning.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/notemyprogress/classes/teacher.php b/notemyprogress/classes/teacher.php
index 0de1044fdd394f4c8286985bfdf39addd62af7d2..99ed2080ae1eaf5324cbe97f86cf0433d01e921e 100644
--- a/notemyprogress/classes/teacher.php
+++ b/notemyprogress/classes/teacher.php
@@ -27,9 +27,11 @@ namespace local_notemyprogress;
 
 use stdClass;
 
-class teacher extends report {
+class teacher extends report
+{
 
-    function __construct($courseid, $userid){
+    function __construct($courseid, $userid)
+    {
         parent::__construct($courseid, $userid);
         self::set_profile();
         self::set_users();
@@ -38,43 +40,50 @@ class teacher extends report {
     /**
      * Almacena el perfil de visualización de la clase en la variable $profile de clase
      */
-    public function set_profile(){
+    public function set_profile()
+    {
         $this->profile = "teacher";
     }
 
     /**
      * Almacena los ids de los estudiantes en la variable $users de la clase
      */
-    public function set_users(){
+    public function set_users()
+    {
         $this->users = self::get_student_ids();
         return $this->users;
     }
 
-    public function get_general_indicators(){
-        if(!self::course_is_valid()){
+    public function get_general_indicators()
+    {
+        if (!self::course_is_valid()) {
             return null;
         }
         $start = null;
-        if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
+        if (isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
             $start = $this->course->startdate;
         }
         $end = null;
-        if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
+        if (isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
             $end = $this->course->enddate;
         }
         $enable_completion = false;
-        if(isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
+        if (isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
             $enable_completion = true;
         }
 
         $work_sessions = self::get_work_sessions($start, $end);
 
-        $sessions = array_map(function($user_sessions){ return $user_sessions->sessions;}, $work_sessions);
+        $sessions = array_map(function ($user_sessions) {
+            return $user_sessions->sessions;
+        }, $work_sessions);
         $sessions = self::get_sessions_by_weeks($sessions);
         $sessions = self::get_sessions_by_weeks_summary($sessions, (int) $this->course->startdate);
 
         $cms = self::get_course_modules();
-        $cms = array_filter($cms, function($cm){ return $cm['modname'] != 'label';});
+        $cms = array_filter($cms, function ($cm) {
+            return $cm['modname'] != 'label';
+        });
         $table = self::get_progress_table($work_sessions, $cms, $enable_completion);
 
         $weeks_cms = $this->count_week_cms($cms);
@@ -91,7 +100,8 @@ class teacher extends report {
         return $response;
     }
 
-    private function count_week_cms ($cms) {
+    private function count_week_cms($cms)
+    {
         $sections_cms = array();
         foreach ($cms as $cm) {
             $sectionid = $cm['section'];
@@ -118,7 +128,8 @@ class teacher extends report {
         return $weeks;
     }
 
-    private function get_course_details() {
+    private function get_course_details()
+    {
         $course = new stdClass();
         $course->fullname = $this->course->fullname;
         $course->shortname = $this->course->shortname;
@@ -149,7 +160,8 @@ class teacher extends report {
         return $course;
     }
 
-    private function format_date($date) {
+    private function format_date($date)
+    {
         $date = (int) $date;
         $year = date("Y", $date);
         $month = strtolower(date("M", $date));
@@ -163,10 +175,14 @@ class teacher extends report {
         return $date;
     }
 
-    protected function get_course_grade() {
+    protected function get_course_grade()
+    {
         global $DB;
-        $item = $DB->get_record('grade_items',
-            array('courseid' => $this->course->id, 'itemtype' => 'course'), 'id, grademax');
+        $item = $DB->get_record(
+            'grade_items',
+            array('courseid' => $this->course->id, 'itemtype' => 'course'),
+            'id, grademax'
+        );
         $grade = 0;
         if ($item) {
             $grade = $item->grademax;
@@ -183,17 +199,20 @@ class teacher extends report {
      *
      * @return object objeto con los datos para la visualizacion
      */
-    public function get_sessions($weekcode = null){
-        if(!self::course_is_valid()){
+    public function get_sessions($weekcode = null)
+    {
+        if (!self::course_is_valid()) {
             return null;
         }
         $week = $this->current_week;
-        if(!empty($weekcode)){
+        if (!empty($weekcode)) {
             $week = self::find_week($weekcode);
         }
 
         $work_sessions = self::get_work_sessions($week->weekstart, $week->weekend);
-        $sessions = array_map(function($user_sessions){ return $user_sessions->sessions;}, $work_sessions);
+        $sessions = array_map(function ($user_sessions) {
+            return $user_sessions->sessions;
+        }, $work_sessions);
 
         $sessions_count = self::count_sessions_by_duration($sessions);
         $sessions_count = self::count_sessions_by_duration_summary($sessions_count, $week->weekstart, $week->weekend);
@@ -201,7 +220,9 @@ class teacher extends report {
         $sessions = self::get_sessions_by_hours($sessions);
         $sessions = self::get_sessions_by_hours_summary($sessions);
 
-        $inverted_time = array_map(function($user_sessions){ return $user_sessions->summary;}, $work_sessions);
+        $inverted_time = array_map(function ($user_sessions) {
+            return $user_sessions->summary;
+        }, $work_sessions);
         $inverted_time = self::calculate_average("added", $inverted_time);
         $inverted_time = self::get_inverted_time_summary($inverted_time, (int) $week->hours_dedications);
 
@@ -213,90 +234,94 @@ class teacher extends report {
         return $response;
     }
 
-//    public function weeks_sessions(){
-//        if(!self::course_in_transit()){
-//            return null;
-//        }
-//        if(!self::course_has_users()){
-//            return null;
-//        }
-//        $start = null;
-//        if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
-//            $start = $this->course->startdate;
-//        }
-//        $end = null;
-//        if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
-//            $end = $this->course->enddate;
-//        }
-//        $work_sessions = self::get_work_sessions($start, $end);
-//        $work_sessions = array_map(function($user_sessions){ return $user_sessions->sessions;}, $work_sessions);
-//        $months = self::get_sessions_by_weeks($work_sessions);
-//        $response = self::get_sessions_by_weeks_summary($months, (int) $this->course->startdate);
-//        return $response;
-//    }
-//
-//    public function progress_table(){
-//        if(!self::course_in_transit()){
-//            return null;
-//        }
-//        if(!self::course_has_users()){
-//            return null;
-//        }
-//        $start = null;
-//        if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
-//            $start = $this->course->startdate;
-//        }
-//        $end = null;
-//        if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
-//            $end = $this->course->enddate;
-//        }
-//
-//        $enable_completion = false;
-//        if(isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
-//            $enable_completion = true;
-//        }
-//
-//        $users_sessions = self::get_work_sessions($start, $end);
-//        $cms = self::get_course_modules();
-//        $table = self::get_progress_table($users_sessions, $cms, $enable_completion);
-//        return $table;
-//    }
-
-    public function count_sessions($weekcode = null){
-        if(!self::course_in_transit()){
+    //    public function weeks_sessions(){
+    //        if(!self::course_in_transit()){
+    //            return null;
+    //        }
+    //        if(!self::course_has_users()){
+    //            return null;
+    //        }
+    //        $start = null;
+    //        if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
+    //            $start = $this->course->startdate;
+    //        }
+    //        $end = null;
+    //        if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
+    //            $end = $this->course->enddate;
+    //        }
+    //        $work_sessions = self::get_work_sessions($start, $end);
+    //        $work_sessions = array_map(function($user_sessions){ return $user_sessions->sessions;}, $work_sessions);
+    //        $months = self::get_sessions_by_weeks($work_sessions);
+    //        $response = self::get_sessions_by_weeks_summary($months, (int) $this->course->startdate);
+    //        return $response;
+    //    }
+    //
+    //    public function progress_table(){
+    //        if(!self::course_in_transit()){
+    //            return null;
+    //        }
+    //        if(!self::course_has_users()){
+    //            return null;
+    //        }
+    //        $start = null;
+    //        if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
+    //            $start = $this->course->startdate;
+    //        }
+    //        $end = null;
+    //        if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
+    //            $end = $this->course->enddate;
+    //        }
+    //
+    //        $enable_completion = false;
+    //        if(isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
+    //            $enable_completion = true;
+    //        }
+    //
+    //        $users_sessions = self::get_work_sessions($start, $end);
+    //        $cms = self::get_course_modules();
+    //        $table = self::get_progress_table($users_sessions, $cms, $enable_completion);
+    //        return $table;
+    //    }
+
+    public function count_sessions($weekcode = null)
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
         $week = $this->current_week;
-        if(!empty($weekcode)){
+        if (!empty($weekcode)) {
             $week = self::find_week($weekcode);
         }
 
         $work_sessions = self::get_work_sessions($week->weekstart, $week->weekend);
-        $work_sessions = array_map(function($user_sessions){ return $user_sessions->sessions;}, $work_sessions);
+        $work_sessions = array_map(function ($user_sessions) {
+            return $user_sessions->sessions;
+        }, $work_sessions);
         $sessions_count = self::count_sessions_by_duration($work_sessions);
         $response = self::count_sessions_by_duration_summary($sessions_count, $week->weekstart, $week->weekend);
         return $response;
     }
 
-    private function count_sessions_by_duration($user_sessions) {
+    private function count_sessions_by_duration($user_sessions)
+    {
         $summary = array();
-        foreach($user_sessions as $sessions){
-            foreach($sessions as $session){
+        foreach ($user_sessions as $sessions) {
+            foreach ($sessions as $session) {
                 $month = strtolower(date("M", (int) $session->start));
                 $day = strtolower(date("j", (int) $session->start));
                 $day = "$month $day";
 
                 $session_label = "greater60";
                 if ($session->duration < 30) {
-                    $session_label='smaller30';
+                    $session_label = 'smaller30';
                 } elseif ($session->duration < 60) {
-                    $session_label='greater60';
+                    $session_label = 'greater60';
                 }
 
-                if(!isset($summary[$day])){
+                if (!isset($summary[$day])) {
                     $summary[$day] = array();
                 }
                 if (!isset($summary[$day][$session_label])) {
@@ -309,7 +334,8 @@ class teacher extends report {
         return $summary;
     }
 
-    private function count_sessions_by_duration_summary($sessions_count, $start) {
+    private function count_sessions_by_duration_summary($sessions_count, $start)
+    {
         $categories = array();
 
         $data = new stdClass();
@@ -322,7 +348,7 @@ class teacher extends report {
         $names->greater30 = get_string("fml_greater30", "local_notemyprogress");
         $names->greater60 = get_string("fml_greater60", "local_notemyprogress");
 
-        for ($i = 0; $i < 7; $i++ ) {
+        for ($i = 0; $i < 7; $i++) {
             $month = strtolower(date("M", $start));
             $day = strtolower(date("j", $start));
             $label = "$month $day";
@@ -330,19 +356,19 @@ class teacher extends report {
             if (isset($sessions_count[$label])) {
                 $count = $sessions_count[$label];
                 $value = 0;
-                if(isset($count['smaller30'])){
+                if (isset($count['smaller30'])) {
                     $value = $count['smaller30'];
                 }
                 $data->smaller30[] = $value;
 
                 $value = 0;
-                if(isset($count['greater30'])){
+                if (isset($count['greater30'])) {
                     $value = $count['greater30'];
                 }
                 $data->greater30[] = $value;
 
                 $value = 0;
-                if(isset($count['greater60'])){
+                if (isset($count['greater60'])) {
                     $value = $count['greater60'];
                 }
                 $data->greater60[] = $value;
@@ -377,46 +403,53 @@ class teacher extends report {
         return $summary;
     }
 
-    private function get_month_name($month_code) {
-        $text = "fml_".$month_code."_short";
+    private function get_month_name($month_code)
+    {
+        $text = "fml_" . $month_code . "_short";
         $month_name = get_string($text, "local_notemyprogress");
         return $month_name;
     }
 
-    public function inverted_time($weekcode = null){
-        if(!self::course_in_transit()){
+    public function inverted_time($weekcode = null)
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
         $week = $this->current_week;
-        if(!empty($weekcode)){
+        if (!empty($weekcode)) {
             $week = self::find_week($weekcode);
         }
 
         $work_sessions = self::get_work_sessions($week->weekstart, $week->weekend);
-        $inverted_time = array_map(function($user_sessions){ return $user_sessions->summary;}, $work_sessions);
+        $inverted_time = array_map(function ($user_sessions) {
+            return $user_sessions->summary;
+        }, $work_sessions);
         $inverted_time = self::calculate_average("added", $inverted_time);
 
         $response = self::get_inverted_time_summary($inverted_time, (int) $week->hours_dedications);
         return $response;
     }
 
-    public function assignments_submissions($weekcode = null){
-        if(!self::course_in_transit()){
+    public function assignments_submissions($weekcode = null)
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
         $week = $this->current_week;
-        if(!empty($weekcode)){
+        if (!empty($weekcode)) {
             $week = self::find_week($weekcode);
         }
 
         $week_modules = self::get_course_modules_from_sections($week->sections);
-        $assign_modules = array_filter($week_modules, function($module){ return $module->modname == 'assign';});
+        $assign_modules = array_filter($week_modules, function ($module) {
+            return $module->modname == 'assign';
+        });
         $assign_ids = self::extract_elements_field($assign_modules, "instance");
         $valid_assigns = self::get_valid_assigns($assign_ids);
         $assign_ids = self::extract_ids($valid_assigns);
@@ -425,7 +458,8 @@ class teacher extends report {
         return $response;
     }
 
-    private function get_valid_assigns($assign_ids){
+    private function get_valid_assigns($assign_ids)
+    {
         global $DB;
         $assigns = array();
         if (count($assign_ids) > 0) {
@@ -437,7 +471,8 @@ class teacher extends report {
         return $assigns;
     }
 
-    private function get_assigns_submissions($assign_ids, $user_ids){
+    private function get_assigns_submissions($assign_ids, $user_ids)
+    {
         global $DB;
         $submissions = array();
         if (!empty($assign_ids)) {
@@ -463,13 +498,14 @@ class teacher extends report {
         return $submissions;
     }
 
-    private function get_submissions($assigns, $assign_submissions, $users){
+    private function get_submissions($assigns, $assign_submissions, $users)
+    {
         global $DB;
 
         $categories = array();
         $modules = array();
         $submissions_users = array();
-        $assignmoduleid=1;
+        $assignmoduleid = 1;
 
         $data = new stdClass();
         $data->intime_sub = array();
@@ -505,8 +541,11 @@ class teacher extends report {
             $category_name = "<b>$assign->name</b><br>$date_label";
             array_push($categories, $category_name);
 
-            $module = $DB->get_field('course_modules', 'id',
-                array('course' => $assign->course, 'module' => $assignmoduleid, 'instance' => $assign->id));
+            $module = $DB->get_field(
+                'course_modules',
+                'id',
+                array('course' => $assign->course, 'module' => $assignmoduleid, 'instance' => $assign->id)
+            );
             array_push($modules, $module);
         }
 
@@ -536,7 +575,8 @@ class teacher extends report {
         return $response;
     }
 
-    private function count_submissions($submissions, $users_ids) {
+    private function count_submissions($submissions, $users_ids)
+    {
         $submitted_users = array();
         $data = array();
         $data['intime_sub'] = array();
@@ -544,7 +584,7 @@ class teacher extends report {
         $data['no_sub'] = array();
 
         foreach ($submissions as $submission) {
-            if ( ($submission->duedate == "0") || ( ((int) $submission->timecreated) <= ((int) $submission->duedate) ) ) {
+            if (($submission->duedate == "0") || (((int) $submission->timecreated) <= ((int) $submission->duedate))) {
                 array_push($data['intime_sub'], $submission->userid);
             } else {
                 array_push($data['late_sub'], $submission->userid);
@@ -555,33 +595,37 @@ class teacher extends report {
         return $data;
     }
 
-    private function get_submissions_with_users($submissions) {
+    private function get_submissions_with_users($submissions)
+    {
         $data = array();
         foreach ($submissions as $index => $users) {
             $values = array();
             if (count($users) > 0) {
                 $values = self::get_users_from_ids($users);
             }
-            $data[$index]=$values;
+            $data[$index] = $values;
         }
         $data = array_values($data);
         return $data;
     }
 
-    public function resources_access($weekcode = null){
-        if(!self::course_in_transit()){
+    public function resources_access($weekcode = null)
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
         $week = $this->current_week;
-        if(!empty($weekcode)){
+        if (!empty($weekcode)) {
             $week = self::find_week($weekcode);
         }
 
         $week_modules = self::get_course_modules_from_sections($week->sections);
-        $week_modules = array_filter($week_modules, function($module){ return $module->modname != 'label';});
+        $week_modules = array_filter($week_modules, function ($module) {
+            return $module->modname != 'label';
+        });
         $week_modules = self::set_resources_access_users($week_modules, $this->users, $this->course->id);
         $response = self::get_access_modules_summary($week_modules);
         $users = self::get_users_from_ids($this->users);
@@ -589,7 +633,8 @@ class teacher extends report {
         return $response;
     }
 
-    private function set_resources_access_users($modules, $user_ids, $course_id){
+    private function set_resources_access_users($modules, $user_ids, $course_id)
+    {
         foreach ($modules as $module) {
             $access_users = self::get_access_modules($course_id, $module->id, $user_ids);
             $module->users = $access_users;
@@ -597,7 +642,8 @@ class teacher extends report {
         return $modules;
     }
 
-    private function get_access_modules($course_id, $module_id, $user_ids){
+    private function get_access_modules($course_id, $module_id, $user_ids)
+    {
         global $DB;
         $contextlevel = 70;
         list($in_users, $invalues_users) = $DB->get_in_or_equal($user_ids);
@@ -615,7 +661,8 @@ class teacher extends report {
         return $ids;
     }
 
-    private function get_access_modules_summary($modules){
+    private function get_access_modules_summary($modules)
+    {
         $summary = array();
         $types = array();
         foreach ($modules as $module) {
@@ -629,8 +676,8 @@ class teacher extends report {
             if (!isset($types[$module->modname])) {
                 $type_name = $module->modname;
                 $identifier = "fml_{$module->modname}";
-                if (get_string_manager()->string_exists($identifier,"local_notemyprogress")) {
-                    $type_name = get_string($identifier,"local_notemyprogress");
+                if (get_string_manager()->string_exists($identifier, "local_notemyprogress")) {
+                    $type_name = get_string($identifier, "local_notemyprogress");
                 }
                 $element = new stdClass();
                 $element->type = $module->modname;
@@ -646,7 +693,8 @@ class teacher extends report {
         return $response;
     }
 
-    public function grade_items() {
+    public function grade_items()
+    {
         $categories = $this->get_grade_categories();
         $items = $this->get_grade_items();
         $items = $this->format_items($items);
@@ -660,7 +708,8 @@ class teacher extends report {
         return $response;
     }
 
-    private function get_grade_categories_with_items ($categories, $items) {
+    private function get_grade_categories_with_items($categories, $items)
+    {
         $categories_items = array();
         foreach ($categories as $category) {
             $category_items = $this->get_grade_items_from_category($categories, $items, $category->id);
@@ -677,7 +726,8 @@ class teacher extends report {
         return $categories_items;
     }
 
-    private function get_grade_items_from_category($categories, $items, $categoryid) {
+    private function get_grade_items_from_category($categories, $items, $categoryid)
+    {
         $selected_items = $this->filter_items_by_category($items, $categoryid);
         $child_categories = $this->get_child_categories($categories, $categoryid);
         foreach ($child_categories as $categoryid) {
@@ -687,7 +737,8 @@ class teacher extends report {
         return $selected_items;
     }
 
-    private function filter_items_by_category ($items, $categoryid) {
+    private function filter_items_by_category($items, $categoryid)
+    {
         $selected_items = [];
         foreach ($items as $item) {
             if ($item->categoryid == $categoryid) {
@@ -697,7 +748,8 @@ class teacher extends report {
         return $selected_items;
     }
 
-    private function get_child_categories($categories, $categoryid) {
+    private function get_child_categories($categories, $categoryid)
+    {
         $child_categories = array();
         foreach ($categories as $category) {
             if ($category->parent == $categoryid) {
@@ -707,25 +759,29 @@ class teacher extends report {
         return $child_categories;
     }
 
-    public function quiz_attempts($weekcode = null){
-        if(!self::course_in_transit()){
+    public function quiz_attempts($weekcode = null)
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
         $week = $this->current_week;
-        if(!empty($weekcode)){
+        if (!empty($weekcode)) {
             $week = self::find_week($weekcode);
         }
 
         $week_modules = self::get_course_modules_from_sections($week->sections);
-        $quiz_modules = array_filter($week_modules, function($module){ return $module->modname == 'quiz';});
+        $quiz_modules = array_filter($week_modules, function ($module) {
+            return $module->modname == 'quiz';
+        });
         $response = $this->get_quiz_attempts_summary($quiz_modules);
         return $response;
     }
 
-    private function get_quiz_attempts_summary($quiz_modules) {
+    private function get_quiz_attempts_summary($quiz_modules)
+    {
         $quizzes = array();
         foreach ($quiz_modules as $module) {
             $quiz = new stdClass();
@@ -744,7 +800,8 @@ class teacher extends report {
         return $quizzes;
     }
 
-    private function get_quiz_attempts($quizid) {
+    private function get_quiz_attempts($quizid)
+    {
         global $DB;
         list($in, $invalues) = $DB->get_in_or_equal($this->users);
         $sql = "SELECT id, quiz, userid, attempt, uniqueid, currentpage, state, sumgrades FROM {quiz_attempts} 
@@ -783,7 +840,8 @@ class teacher extends report {
         return $attempt;
     }
 
-    private function get_questions_attempts($quizid) {
+    private function get_questions_attempts($quizid)
+    {
         global $DB;
         list($in, $invalues) = $DB->get_in_or_equal($this->users);
         $sql = "SELECT qattstep.id as id, quizatt.id as quizattid, quizatt.quiz, quizatt.userid, quizatt.attempt, 
@@ -836,11 +894,12 @@ class teacher extends report {
         return $questions;
     }
 
-    public function get_dropout_clusters() {
-        if(!self::course_in_transit()){
+    public function get_dropout_clusters()
+    {
+        if (!self::course_in_transit()) {
             return null;
         }
-        if(!self::course_has_users()){
+        if (!self::course_has_users()) {
             return null;
         }
 
@@ -850,20 +909,22 @@ class teacher extends report {
         if (count($clusters)) {
             $response->clusters = $clusters;
             $start = null;
-            if(isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
+            if (isset($this->course->startdate) && ((int)$this->course->startdate) > 0) {
                 $start = $this->course->startdate;
             }
             $end = null;
-            if(isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
+            if (isset($this->course->enddate) && ((int)$this->course->enddate) > 0) {
                 $end = $this->course->enddate;
             }
             $enable_completion = false;
-            if(isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
+            if (isset($this->course->enablecompletion) && ((int)$this->course->enablecompletion) == 1) {
                 $enable_completion = true;
             }
 
             $cms = self::get_course_modules();
-            $cms = array_filter($cms, function($cm){ return $cm['modname'] != 'label';});
+            $cms = array_filter($cms, function ($cm) {
+                return $cm['modname'] != 'label';
+            });
             $cms = array_values($cms);
 
             $users = self::get_work_sessions($start, $end);
@@ -883,7 +944,8 @@ class teacher extends report {
         return $response;
     }
 
-    public function get_clusters() {
+    public function get_clusters()
+    {
         global $DB;
         $sql = "SELECT * FROM {notemyprogress_clustering} WHERE courseid = {$this->course->id} AND active = 1";
         $rows = $DB->get_records_sql($sql);
@@ -894,7 +956,7 @@ class teacher extends report {
         foreach ($rows as $row) {
             if (!isset($clusters[$row->cluster])) {
                 $cluster = new stdClass();
-                $cluster->name = $cluster_text." ".($row->cluster+1);
+                $cluster->name = $cluster_text . " " . ($row->cluster + 1);
                 $cluster->number = $row->cluster;
                 $cluster->users = array();
                 array_push($cluster->users, $row->userid);
@@ -906,7 +968,8 @@ class teacher extends report {
         return $clusters;
     }
 
-    private function get_users_details($users, $cms, $users_access) {
+    private function get_users_details($users, $cms, $users_access)
+    {
         date_default_timezone_set(self::get_timezone());
         $total_cms = count($cms);
         if ($total_cms > 0) {
@@ -917,7 +980,8 @@ class teacher extends report {
         return $users;
     }
 
-    private function get_user_last_access($userid, $users_access) {
+    private function get_user_last_access($userid, $users_access)
+    {
         $access = new stdClass();
         $access->label = get_string("fml_dropout_user_never_access", "local_notemyprogress");
         $access->timestamp = 0;
@@ -940,7 +1004,8 @@ class teacher extends report {
         return $access;
     }
 
-    private function time_elapsed_string($timestamp) {
+    private function time_elapsed_string($timestamp)
+    {
         $now = (int) date("U");
         $diff = $now - $timestamp;
         $ago = get_string("fml_ago", "local_notemyprogress");
@@ -986,5 +1051,4 @@ class teacher extends report {
         $text = get_string("fml_now", "local_notemyprogress");
         return "$text";
     }
-
 }
diff --git a/notemyprogress/css/materialdesignicons.css b/notemyprogress/css/materialdesignicons.css
index 68dee157359be6849d0d775b378e087b1851ec07..741d922f30eee458110add5ac3bd1c69a0fd65e2 100644
--- a/notemyprogress/css/materialdesignicons.css
+++ b/notemyprogress/css/materialdesignicons.css
@@ -1,12117 +1,3 @@
-@font-face {
-  font-family: "Material Design Icons";
-  src: url("../fonts/materialdesignicons-webfont.eot?v=3.9.97");
-  src: url("../fonts/materialdesignicons-webfont.eot?#iefix&v=3.9.97")
-      format("embedded-opentype"),
-    url("../fonts/materialdesignicons-webfont.woff2?v=3.9.97") format("woff2"),
-    url("../fonts/materialdesignicons-webfont.woff?v=3.9.97") format("woff"),
-    url("../fonts/materialdesignicons-webfont.ttf?v=3.9.97") format("truetype");
-  font-weight: normal;
-  font-style: normal;
-}
-.mdi:before,
-.mdi-set {
-  display: inline-block;
-  font: normal normal normal 24px/1 "Material Design Icons";
-  font-size: inherit;
-  text-rendering: auto;
-  line-height: inherit;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-.mdi-access-point::before {
-  content: "\F002";
-}
-.mdi-access-point-network::before {
-  content: "\F003";
-}
-.mdi-access-point-network-off::before {
-  content: "\FBBD";
-}
-.mdi-account::before {
-  content: "\F004";
-}
-.mdi-account-alert::before {
-  content: "\F005";
-}
-.mdi-account-alert-outline::before {
-  content: "\FB2C";
-}
-.mdi-account-arrow-left::before {
-  content: "\FB2D";
-}
-.mdi-account-arrow-left-outline::before {
-  content: "\FB2E";
-}
-.mdi-account-arrow-right::before {
-  content: "\FB2F";
-}
-.mdi-account-arrow-right-outline::before {
-  content: "\FB30";
-}
-.mdi-account-badge::before {
-  content: "\FD83";
-}
-.mdi-account-badge-alert::before {
-  content: "\FD84";
-}
-.mdi-account-badge-alert-outline::before {
-  content: "\FD85";
-}
-.mdi-account-badge-horizontal::before {
-  content: "\FDF0";
-}
-.mdi-account-badge-horizontal-outline::before {
-  content: "\FDF1";
-}
-.mdi-account-badge-outline::before {
-  content: "\FD86";
-}
-.mdi-account-box::before {
-  content: "\F006";
-}
-.mdi-account-box-multiple::before {
-  content: "\F933";
-}
-.mdi-account-box-outline::before {
-  content: "\F007";
-}
-.mdi-account-card-details::before {
-  content: "\F5D2";
-}
-.mdi-account-card-details-outline::before {
-  content: "\FD87";
-}
-.mdi-account-check::before {
-  content: "\F008";
-}
-.mdi-account-check-outline::before {
-  content: "\FBBE";
-}
-.mdi-account-child::before {
-  content: "\FA88";
-}
-.mdi-account-child-circle::before {
-  content: "\FA89";
-}
-.mdi-account-circle::before {
-  content: "\F009";
-}
-.mdi-account-circle-outline::before {
-  content: "\FB31";
-}
-.mdi-account-clock::before {
-  content: "\FB32";
-}
-.mdi-account-clock-outline::before {
-  content: "\FB33";
-}
-.mdi-account-convert::before {
-  content: "\F00A";
-}
-.mdi-account-details::before {
-  content: "\F631";
-}
-.mdi-account-edit::before {
-  content: "\F6BB";
-}
-.mdi-account-group::before {
-  content: "\F848";
-}
-.mdi-account-group-outline::before {
-  content: "\FB34";
-}
-.mdi-account-heart::before {
-  content: "\F898";
-}
-.mdi-account-heart-outline::before {
-  content: "\FBBF";
-}
-.mdi-account-key::before {
-  content: "\F00B";
-}
-.mdi-account-key-outline::before {
-  content: "\FBC0";
-}
-.mdi-account-minus::before {
-  content: "\F00D";
-}
-.mdi-account-minus-outline::before {
-  content: "\FAEB";
-}
-.mdi-account-multiple::before {
-  content: "\F00E";
-}
-.mdi-account-multiple-check::before {
-  content: "\F8C4";
-}
-.mdi-account-multiple-minus::before {
-  content: "\F5D3";
-}
-.mdi-account-multiple-minus-outline::before {
-  content: "\FBC1";
-}
-.mdi-account-multiple-outline::before {
-  content: "\F00F";
-}
-.mdi-account-multiple-plus::before {
-  content: "\F010";
-}
-.mdi-account-multiple-plus-outline::before {
-  content: "\F7FF";
-}
-.mdi-account-network::before {
-  content: "\F011";
-}
-.mdi-account-network-outline::before {
-  content: "\FBC2";
-}
-.mdi-account-off::before {
-  content: "\F012";
-}
-.mdi-account-off-outline::before {
-  content: "\FBC3";
-}
-.mdi-account-outline::before {
-  content: "\F013";
-}
-.mdi-account-plus::before {
-  content: "\F014";
-}
-.mdi-account-plus-outline::before {
-  content: "\F800";
-}
-.mdi-account-question::before {
-  content: "\FB35";
-}
-.mdi-account-question-outline::before {
-  content: "\FB36";
-}
-.mdi-account-remove::before {
-  content: "\F015";
-}
-.mdi-account-remove-outline::before {
-  content: "\FAEC";
-}
-.mdi-account-search::before {
-  content: "\F016";
-}
-.mdi-account-search-outline::before {
-  content: "\F934";
-}
-.mdi-account-settings::before {
-  content: "\F630";
-}
-.mdi-account-star::before {
-  content: "\F017";
-}
-.mdi-account-star-outline::before {
-  content: "\FBC4";
-}
-.mdi-account-supervisor::before {
-  content: "\FA8A";
-}
-.mdi-account-supervisor-circle::before {
-  content: "\FA8B";
-}
-.mdi-account-switch::before {
-  content: "\F019";
-}
-.mdi-account-tie::before {
-  content: "\FCBF";
-}
-.mdi-accusoft::before {
-  content: "\F849";
-}
-.mdi-adchoices::before {
-  content: "\FD1E";
-}
-.mdi-adjust::before {
-  content: "\F01A";
-}
-.mdi-adobe::before {
-  content: "\F935";
-}
-.mdi-air-conditioner::before {
-  content: "\F01B";
-}
-.mdi-air-filter::before {
-  content: "\FD1F";
-}
-.mdi-air-horn::before {
-  content: "\FD88";
-}
-.mdi-air-purifier::before {
-  content: "\FD20";
-}
-.mdi-airbag::before {
-  content: "\FBC5";
-}
-.mdi-airballoon::before {
-  content: "\F01C";
-}
-.mdi-airplane::before {
-  content: "\F01D";
-}
-.mdi-airplane-landing::before {
-  content: "\F5D4";
-}
-.mdi-airplane-off::before {
-  content: "\F01E";
-}
-.mdi-airplane-takeoff::before {
-  content: "\F5D5";
-}
-.mdi-airplay::before {
-  content: "\F01F";
-}
-.mdi-airport::before {
-  content: "\F84A";
-}
-.mdi-alarm::before {
-  content: "\F020";
-}
-.mdi-alarm-bell::before {
-  content: "\F78D";
-}
-.mdi-alarm-check::before {
-  content: "\F021";
-}
-.mdi-alarm-light::before {
-  content: "\F78E";
-}
-.mdi-alarm-light-outline::before {
-  content: "\FBC6";
-}
-.mdi-alarm-multiple::before {
-  content: "\F022";
-}
-.mdi-alarm-note::before {
-  content: "\FE8E";
-}
-.mdi-alarm-note-off::before {
-  content: "\FE8F";
-}
-.mdi-alarm-off::before {
-  content: "\F023";
-}
-.mdi-alarm-plus::before {
-  content: "\F024";
-}
-.mdi-alarm-snooze::before {
-  content: "\F68D";
-}
-.mdi-album::before {
-  content: "\F025";
-}
-.mdi-alert::before {
-  content: "\F026";
-}
-.mdi-alert-box::before {
-  content: "\F027";
-}
-.mdi-alert-box-outline::before {
-  content: "\FCC0";
-}
-.mdi-alert-circle::before {
-  content: "\F028";
-}
-.mdi-alert-circle-outline::before {
-  content: "\F5D6";
-}
-.mdi-alert-decagram::before {
-  content: "\F6BC";
-}
-.mdi-alert-decagram-outline::before {
-  content: "\FCC1";
-}
-.mdi-alert-octagon::before {
-  content: "\F029";
-}
-.mdi-alert-octagon-outline::before {
-  content: "\FCC2";
-}
-.mdi-alert-octagram::before {
-  content: "\F766";
-}
-.mdi-alert-octagram-outline::before {
-  content: "\FCC3";
-}
-.mdi-alert-outline::before {
-  content: "\F02A";
-}
-.mdi-alien::before {
-  content: "\F899";
-}
-.mdi-all-inclusive::before {
-  content: "\F6BD";
-}
-.mdi-alpha::before {
-  content: "\F02B";
-}
-.mdi-alpha-a::before {
-  content: "\41";
-}
-.mdi-alpha-a-box::before {
-  content: "\FAED";
-}
-.mdi-alpha-a-box-outline::before {
-  content: "\FBC7";
-}
-.mdi-alpha-a-circle::before {
-  content: "\FBC8";
-}
-.mdi-alpha-a-circle-outline::before {
-  content: "\FBC9";
-}
-.mdi-alpha-b::before {
-  content: "\42";
-}
-.mdi-alpha-b-box::before {
-  content: "\FAEE";
-}
-.mdi-alpha-b-box-outline::before {
-  content: "\FBCA";
-}
-.mdi-alpha-b-circle::before {
-  content: "\FBCB";
-}
-.mdi-alpha-b-circle-outline::before {
-  content: "\FBCC";
-}
-.mdi-alpha-c::before {
-  content: "\43";
-}
-.mdi-alpha-c-box::before {
-  content: "\FAEF";
-}
-.mdi-alpha-c-box-outline::before {
-  content: "\FBCD";
-}
-.mdi-alpha-c-circle::before {
-  content: "\FBCE";
-}
-.mdi-alpha-c-circle-outline::before {
-  content: "\FBCF";
-}
-.mdi-alpha-d::before {
-  content: "\44";
-}
-.mdi-alpha-d-box::before {
-  content: "\FAF0";
-}
-.mdi-alpha-d-box-outline::before {
-  content: "\FBD0";
-}
-.mdi-alpha-d-circle::before {
-  content: "\FBD1";
-}
-.mdi-alpha-d-circle-outline::before {
-  content: "\FBD2";
-}
-.mdi-alpha-e::before {
-  content: "\45";
-}
-.mdi-alpha-e-box::before {
-  content: "\FAF1";
-}
-.mdi-alpha-e-box-outline::before {
-  content: "\FBD3";
-}
-.mdi-alpha-e-circle::before {
-  content: "\FBD4";
-}
-.mdi-alpha-e-circle-outline::before {
-  content: "\FBD5";
-}
-.mdi-alpha-f::before {
-  content: "\46";
-}
-.mdi-alpha-f-box::before {
-  content: "\FAF2";
-}
-.mdi-alpha-f-box-outline::before {
-  content: "\FBD6";
-}
-.mdi-alpha-f-circle::before {
-  content: "\FBD7";
-}
-.mdi-alpha-f-circle-outline::before {
-  content: "\FBD8";
-}
-.mdi-alpha-g::before {
-  content: "\47";
-}
-.mdi-alpha-g-box::before {
-  content: "\FAF3";
-}
-.mdi-alpha-g-box-outline::before {
-  content: "\FBD9";
-}
-.mdi-alpha-g-circle::before {
-  content: "\FBDA";
-}
-.mdi-alpha-g-circle-outline::before {
-  content: "\FBDB";
-}
-.mdi-alpha-h::before {
-  content: "\48";
-}
-.mdi-alpha-h-box::before {
-  content: "\FAF4";
-}
-.mdi-alpha-h-box-outline::before {
-  content: "\FBDC";
-}
-.mdi-alpha-h-circle::before {
-  content: "\FBDD";
-}
-.mdi-alpha-h-circle-outline::before {
-  content: "\FBDE";
-}
-.mdi-alpha-i::before {
-  content: "\49";
-}
-.mdi-alpha-i-box::before {
-  content: "\FAF5";
-}
-.mdi-alpha-i-box-outline::before {
-  content: "\FBDF";
-}
-.mdi-alpha-i-circle::before {
-  content: "\FBE0";
-}
-.mdi-alpha-i-circle-outline::before {
-  content: "\FBE1";
-}
-.mdi-alpha-j::before {
-  content: "\4A";
-}
-.mdi-alpha-j-box::before {
-  content: "\FAF6";
-}
-.mdi-alpha-j-box-outline::before {
-  content: "\FBE2";
-}
-.mdi-alpha-j-circle::before {
-  content: "\FBE3";
-}
-.mdi-alpha-j-circle-outline::before {
-  content: "\FBE4";
-}
-.mdi-alpha-k::before {
-  content: "\4B";
-}
-.mdi-alpha-k-box::before {
-  content: "\FAF7";
-}
-.mdi-alpha-k-box-outline::before {
-  content: "\FBE5";
-}
-.mdi-alpha-k-circle::before {
-  content: "\FBE6";
-}
-.mdi-alpha-k-circle-outline::before {
-  content: "\FBE7";
-}
-.mdi-alpha-l::before {
-  content: "\4C";
-}
-.mdi-alpha-l-box::before {
-  content: "\FAF8";
-}
-.mdi-alpha-l-box-outline::before {
-  content: "\FBE8";
-}
-.mdi-alpha-l-circle::before {
-  content: "\FBE9";
-}
-.mdi-alpha-l-circle-outline::before {
-  content: "\FBEA";
-}
-.mdi-alpha-m::before {
-  content: "\4D";
-}
-.mdi-alpha-m-box::before {
-  content: "\FAF9";
-}
-.mdi-alpha-m-box-outline::before {
-  content: "\FBEB";
-}
-.mdi-alpha-m-circle::before {
-  content: "\FBEC";
-}
-.mdi-alpha-m-circle-outline::before {
-  content: "\FBED";
-}
-.mdi-alpha-n::before {
-  content: "\4E";
-}
-.mdi-alpha-n-box::before {
-  content: "\FAFA";
-}
-.mdi-alpha-n-box-outline::before {
-  content: "\FBEE";
-}
-.mdi-alpha-n-circle::before {
-  content: "\FBEF";
-}
-.mdi-alpha-n-circle-outline::before {
-  content: "\FBF0";
-}
-.mdi-alpha-o::before {
-  content: "\4F";
-}
-.mdi-alpha-o-box::before {
-  content: "\FAFB";
-}
-.mdi-alpha-o-box-outline::before {
-  content: "\FBF1";
-}
-.mdi-alpha-o-circle::before {
-  content: "\FBF2";
-}
-.mdi-alpha-o-circle-outline::before {
-  content: "\FBF3";
-}
-.mdi-alpha-p::before {
-  content: "\50";
-}
-.mdi-alpha-p-box::before {
-  content: "\FAFC";
-}
-.mdi-alpha-p-box-outline::before {
-  content: "\FBF4";
-}
-.mdi-alpha-p-circle::before {
-  content: "\FBF5";
-}
-.mdi-alpha-p-circle-outline::before {
-  content: "\FBF6";
-}
-.mdi-alpha-q::before {
-  content: "\51";
-}
-.mdi-alpha-q-box::before {
-  content: "\FAFD";
-}
-.mdi-alpha-q-box-outline::before {
-  content: "\FBF7";
-}
-.mdi-alpha-q-circle::before {
-  content: "\FBF8";
-}
-.mdi-alpha-q-circle-outline::before {
-  content: "\FBF9";
-}
-.mdi-alpha-r::before {
-  content: "\52";
-}
-.mdi-alpha-r-box::before {
-  content: "\FAFE";
-}
-.mdi-alpha-r-box-outline::before {
-  content: "\FBFA";
-}
-.mdi-alpha-r-circle::before {
-  content: "\FBFB";
-}
-.mdi-alpha-r-circle-outline::before {
-  content: "\FBFC";
-}
-.mdi-alpha-s::before {
-  content: "\53";
-}
-.mdi-alpha-s-box::before {
-  content: "\FAFF";
-}
-.mdi-alpha-s-box-outline::before {
-  content: "\FBFD";
-}
-.mdi-alpha-s-circle::before {
-  content: "\FBFE";
-}
-.mdi-alpha-s-circle-outline::before {
-  content: "\FBFF";
-}
-.mdi-alpha-t::before {
-  content: "\54";
-}
-.mdi-alpha-t-box::before {
-  content: "\FB00";
-}
-.mdi-alpha-t-box-outline::before {
-  content: "\FC00";
-}
-.mdi-alpha-t-circle::before {
-  content: "\FC01";
-}
-.mdi-alpha-t-circle-outline::before {
-  content: "\FC02";
-}
-.mdi-alpha-u::before {
-  content: "\55";
-}
-.mdi-alpha-u-box::before {
-  content: "\FB01";
-}
-.mdi-alpha-u-box-outline::before {
-  content: "\FC03";
-}
-.mdi-alpha-u-circle::before {
-  content: "\FC04";
-}
-.mdi-alpha-u-circle-outline::before {
-  content: "\FC05";
-}
-.mdi-alpha-v::before {
-  content: "\56";
-}
-.mdi-alpha-v-box::before {
-  content: "\FB02";
-}
-.mdi-alpha-v-box-outline::before {
-  content: "\FC06";
-}
-.mdi-alpha-v-circle::before {
-  content: "\FC07";
-}
-.mdi-alpha-v-circle-outline::before {
-  content: "\FC08";
-}
-.mdi-alpha-w::before {
-  content: "\57";
-}
-.mdi-alpha-w-box::before {
-  content: "\FB03";
-}
-.mdi-alpha-w-box-outline::before {
-  content: "\FC09";
-}
-.mdi-alpha-w-circle::before {
-  content: "\FC0A";
-}
-.mdi-alpha-w-circle-outline::before {
-  content: "\FC0B";
-}
-.mdi-alpha-x::before {
-  content: "\58";
-}
-.mdi-alpha-x-box::before {
-  content: "\FB04";
-}
-.mdi-alpha-x-box-outline::before {
-  content: "\FC0C";
-}
-.mdi-alpha-x-circle::before {
-  content: "\FC0D";
-}
-.mdi-alpha-x-circle-outline::before {
-  content: "\FC0E";
-}
-.mdi-alpha-y::before {
-  content: "\59";
-}
-.mdi-alpha-y-box::before {
-  content: "\FB05";
-}
-.mdi-alpha-y-box-outline::before {
-  content: "\FC0F";
-}
-.mdi-alpha-y-circle::before {
-  content: "\FC10";
-}
-.mdi-alpha-y-circle-outline::before {
-  content: "\FC11";
-}
-.mdi-alpha-z::before {
-  content: "\5A";
-}
-.mdi-alpha-z-box::before {
-  content: "\FB06";
-}
-.mdi-alpha-z-box-outline::before {
-  content: "\FC12";
-}
-.mdi-alpha-z-circle::before {
-  content: "\FC13";
-}
-.mdi-alpha-z-circle-outline::before {
-  content: "\FC14";
-}
-.mdi-alphabetical::before {
-  content: "\F02C";
-}
-.mdi-altimeter::before {
-  content: "\F5D7";
-}
-.mdi-amazon::before {
-  content: "\F02D";
-}
-.mdi-amazon-alexa::before {
-  content: "\F8C5";
-}
-.mdi-amazon-drive::before {
-  content: "\F02E";
-}
-.mdi-ambulance::before {
-  content: "\F02F";
-}
-.mdi-ammunition::before {
-  content: "\FCC4";
-}
-.mdi-ampersand::before {
-  content: "\FA8C";
-}
-.mdi-amplifier::before {
-  content: "\F030";
-}
-.mdi-anchor::before {
-  content: "\F031";
-}
-.mdi-android::before {
-  content: "\F032";
-}
-.mdi-android-auto::before {
-  content: "\FA8D";
-}
-.mdi-android-debug-bridge::before {
-  content: "\F033";
-}
-.mdi-android-head::before {
-  content: "\F78F";
-}
-.mdi-android-messages::before {
-  content: "\FD21";
-}
-.mdi-android-studio::before {
-  content: "\F034";
-}
-.mdi-angle-acute::before {
-  content: "\F936";
-}
-.mdi-angle-obtuse::before {
-  content: "\F937";
-}
-.mdi-angle-right::before {
-  content: "\F938";
-}
-.mdi-angular::before {
-  content: "\F6B1";
-}
-.mdi-angularjs::before {
-  content: "\F6BE";
-}
-.mdi-animation::before {
-  content: "\F5D8";
-}
-.mdi-animation-outline::before {
-  content: "\FA8E";
-}
-.mdi-animation-play::before {
-  content: "\F939";
-}
-.mdi-animation-play-outline::before {
-  content: "\FA8F";
-}
-.mdi-anvil::before {
-  content: "\F89A";
-}
-.mdi-apple::before {
-  content: "\F035";
-}
-.mdi-apple-finder::before {
-  content: "\F036";
-}
-.mdi-apple-icloud::before {
-  content: "\F038";
-}
-.mdi-apple-ios::before {
-  content: "\F037";
-}
-.mdi-apple-keyboard-caps::before {
-  content: "\F632";
-}
-.mdi-apple-keyboard-command::before {
-  content: "\F633";
-}
-.mdi-apple-keyboard-control::before {
-  content: "\F634";
-}
-.mdi-apple-keyboard-option::before {
-  content: "\F635";
-}
-.mdi-apple-keyboard-shift::before {
-  content: "\F636";
-}
-.mdi-apple-safari::before {
-  content: "\F039";
-}
-.mdi-application::before {
-  content: "\F614";
-}
-.mdi-application-export::before {
-  content: "\FD89";
-}
-.mdi-application-import::before {
-  content: "\FD8A";
-}
-.mdi-apps::before {
-  content: "\F03B";
-}
-.mdi-apps-box::before {
-  content: "\FD22";
-}
-.mdi-arch::before {
-  content: "\F8C6";
-}
-.mdi-archive::before {
-  content: "\F03C";
-}
-.mdi-arrange-bring-forward::before {
-  content: "\F03D";
-}
-.mdi-arrange-bring-to-front::before {
-  content: "\F03E";
-}
-.mdi-arrange-send-backward::before {
-  content: "\F03F";
-}
-.mdi-arrange-send-to-back::before {
-  content: "\F040";
-}
-.mdi-arrow-all::before {
-  content: "\F041";
-}
-.mdi-arrow-bottom-left::before {
-  content: "\F042";
-}
-.mdi-arrow-bottom-left-bold-outline::before {
-  content: "\F9B6";
-}
-.mdi-arrow-bottom-left-thick::before {
-  content: "\F9B7";
-}
-.mdi-arrow-bottom-right::before {
-  content: "\F043";
-}
-.mdi-arrow-bottom-right-bold-outline::before {
-  content: "\F9B8";
-}
-.mdi-arrow-bottom-right-thick::before {
-  content: "\F9B9";
-}
-.mdi-arrow-collapse::before {
-  content: "\F615";
-}
-.mdi-arrow-collapse-all::before {
-  content: "\F044";
-}
-.mdi-arrow-collapse-down::before {
-  content: "\F791";
-}
-.mdi-arrow-collapse-horizontal::before {
-  content: "\F84B";
-}
-.mdi-arrow-collapse-left::before {
-  content: "\F792";
-}
-.mdi-arrow-collapse-right::before {
-  content: "\F793";
-}
-.mdi-arrow-collapse-up::before {
-  content: "\F794";
-}
-.mdi-arrow-collapse-vertical::before {
-  content: "\F84C";
-}
-.mdi-arrow-decision::before {
-  content: "\F9BA";
-}
-.mdi-arrow-decision-auto::before {
-  content: "\F9BB";
-}
-.mdi-arrow-decision-auto-outline::before {
-  content: "\F9BC";
-}
-.mdi-arrow-decision-outline::before {
-  content: "\F9BD";
-}
-.mdi-arrow-down::before {
-  content: "\F045";
-}
-.mdi-arrow-down-bold::before {
-  content: "\F72D";
-}
-.mdi-arrow-down-bold-box::before {
-  content: "\F72E";
-}
-.mdi-arrow-down-bold-box-outline::before {
-  content: "\F72F";
-}
-.mdi-arrow-down-bold-circle::before {
-  content: "\F047";
-}
-.mdi-arrow-down-bold-circle-outline::before {
-  content: "\F048";
-}
-.mdi-arrow-down-bold-hexagon-outline::before {
-  content: "\F049";
-}
-.mdi-arrow-down-bold-outline::before {
-  content: "\F9BE";
-}
-.mdi-arrow-down-box::before {
-  content: "\F6BF";
-}
-.mdi-arrow-down-circle::before {
-  content: "\FCB7";
-}
-.mdi-arrow-down-circle-outline::before {
-  content: "\FCB8";
-}
-.mdi-arrow-down-drop-circle::before {
-  content: "\F04A";
-}
-.mdi-arrow-down-drop-circle-outline::before {
-  content: "\F04B";
-}
-.mdi-arrow-down-thick::before {
-  content: "\F046";
-}
-.mdi-arrow-expand::before {
-  content: "\F616";
-}
-.mdi-arrow-expand-all::before {
-  content: "\F04C";
-}
-.mdi-arrow-expand-down::before {
-  content: "\F795";
-}
-.mdi-arrow-expand-horizontal::before {
-  content: "\F84D";
-}
-.mdi-arrow-expand-left::before {
-  content: "\F796";
-}
-.mdi-arrow-expand-right::before {
-  content: "\F797";
-}
-.mdi-arrow-expand-up::before {
-  content: "\F798";
-}
-.mdi-arrow-expand-vertical::before {
-  content: "\F84E";
-}
-.mdi-arrow-left::before {
-  content: "\F04D";
-}
-.mdi-arrow-left-bold::before {
-  content: "\F730";
-}
-.mdi-arrow-left-bold-box::before {
-  content: "\F731";
-}
-.mdi-arrow-left-bold-box-outline::before {
-  content: "\F732";
-}
-.mdi-arrow-left-bold-circle::before {
-  content: "\F04F";
-}
-.mdi-arrow-left-bold-circle-outline::before {
-  content: "\F050";
-}
-.mdi-arrow-left-bold-hexagon-outline::before {
-  content: "\F051";
-}
-.mdi-arrow-left-bold-outline::before {
-  content: "\F9BF";
-}
-.mdi-arrow-left-box::before {
-  content: "\F6C0";
-}
-.mdi-arrow-left-circle::before {
-  content: "\FCB9";
-}
-.mdi-arrow-left-circle-outline::before {
-  content: "\FCBA";
-}
-.mdi-arrow-left-drop-circle::before {
-  content: "\F052";
-}
-.mdi-arrow-left-drop-circle-outline::before {
-  content: "\F053";
-}
-.mdi-arrow-left-right::before {
-  content: "\FE90";
-}
-.mdi-arrow-left-right-bold::before {
-  content: "\FE91";
-}
-.mdi-arrow-left-right-bold-outline::before {
-  content: "\F9C0";
-}
-.mdi-arrow-left-thick::before {
-  content: "\F04E";
-}
-.mdi-arrow-right::before {
-  content: "\F054";
-}
-.mdi-arrow-right-bold::before {
-  content: "\F733";
-}
-.mdi-arrow-right-bold-box::before {
-  content: "\F734";
-}
-.mdi-arrow-right-bold-box-outline::before {
-  content: "\F735";
-}
-.mdi-arrow-right-bold-circle::before {
-  content: "\F056";
-}
-.mdi-arrow-right-bold-circle-outline::before {
-  content: "\F057";
-}
-.mdi-arrow-right-bold-hexagon-outline::before {
-  content: "\F058";
-}
-.mdi-arrow-right-bold-outline::before {
-  content: "\F9C1";
-}
-.mdi-arrow-right-box::before {
-  content: "\F6C1";
-}
-.mdi-arrow-right-circle::before {
-  content: "\FCBB";
-}
-.mdi-arrow-right-circle-outline::before {
-  content: "\FCBC";
-}
-.mdi-arrow-right-drop-circle::before {
-  content: "\F059";
-}
-.mdi-arrow-right-drop-circle-outline::before {
-  content: "\F05A";
-}
-.mdi-arrow-right-thick::before {
-  content: "\F055";
-}
-.mdi-arrow-split-horizontal::before {
-  content: "\F93A";
-}
-.mdi-arrow-split-vertical::before {
-  content: "\F93B";
-}
-.mdi-arrow-top-left::before {
-  content: "\F05B";
-}
-.mdi-arrow-top-left-bold-outline::before {
-  content: "\F9C2";
-}
-.mdi-arrow-top-left-bottom-right::before {
-  content: "\FE92";
-}
-.mdi-arrow-top-left-bottom-right-bold::before {
-  content: "\FE93";
-}
-.mdi-arrow-top-left-thick::before {
-  content: "\F9C3";
-}
-.mdi-arrow-top-right::before {
-  content: "\F05C";
-}
-.mdi-arrow-top-right-bold-outline::before {
-  content: "\F9C4";
-}
-.mdi-arrow-top-right-bottom-left::before {
-  content: "\FE94";
-}
-.mdi-arrow-top-right-bottom-left-bold::before {
-  content: "\FE95";
-}
-.mdi-arrow-top-right-thick::before {
-  content: "\F9C5";
-}
-.mdi-arrow-up::before {
-  content: "\F05D";
-}
-.mdi-arrow-up-bold::before {
-  content: "\F736";
-}
-.mdi-arrow-up-bold-box::before {
-  content: "\F737";
-}
-.mdi-arrow-up-bold-box-outline::before {
-  content: "\F738";
-}
-.mdi-arrow-up-bold-circle::before {
-  content: "\F05F";
-}
-.mdi-arrow-up-bold-circle-outline::before {
-  content: "\F060";
-}
-.mdi-arrow-up-bold-hexagon-outline::before {
-  content: "\F061";
-}
-.mdi-arrow-up-bold-outline::before {
-  content: "\F9C6";
-}
-.mdi-arrow-up-box::before {
-  content: "\F6C2";
-}
-.mdi-arrow-up-circle::before {
-  content: "\FCBD";
-}
-.mdi-arrow-up-circle-outline::before {
-  content: "\FCBE";
-}
-.mdi-arrow-up-down::before {
-  content: "\FE96";
-}
-.mdi-arrow-up-down-bold::before {
-  content: "\FE97";
-}
-.mdi-arrow-up-down-bold-outline::before {
-  content: "\F9C7";
-}
-.mdi-arrow-up-drop-circle::before {
-  content: "\F062";
-}
-.mdi-arrow-up-drop-circle-outline::before {
-  content: "\F063";
-}
-.mdi-arrow-up-thick::before {
-  content: "\F05E";
-}
-.mdi-artist::before {
-  content: "\F802";
-}
-.mdi-artist-outline::before {
-  content: "\FCC5";
-}
-.mdi-artstation::before {
-  content: "\FB37";
-}
-.mdi-aspect-ratio::before {
-  content: "\FA23";
-}
-.mdi-assistant::before {
-  content: "\F064";
-}
-.mdi-asterisk::before {
-  content: "\F6C3";
-}
-.mdi-at::before {
-  content: "\F065";
-}
-.mdi-atlassian::before {
-  content: "\F803";
-}
-.mdi-atm::before {
-  content: "\FD23";
-}
-.mdi-atom::before {
-  content: "\F767";
-}
-.mdi-atom-variant::before {
-  content: "\FE98";
-}
-.mdi-attachment::before {
-  content: "\F066";
-}
-.mdi-audio-video::before {
-  content: "\F93C";
-}
-.mdi-audiobook::before {
-  content: "\F067";
-}
-.mdi-augmented-reality::before {
-  content: "\F84F";
-}
-.mdi-auto-fix::before {
-  content: "\F068";
-}
-.mdi-auto-upload::before {
-  content: "\F069";
-}
-.mdi-autorenew::before {
-  content: "\F06A";
-}
-.mdi-av-timer::before {
-  content: "\F06B";
-}
-.mdi-aws::before {
-  content: "\FDF2";
-}
-.mdi-axe::before {
-  content: "\F8C7";
-}
-.mdi-axis::before {
-  content: "\FD24";
-}
-.mdi-axis-arrow::before {
-  content: "\FD25";
-}
-.mdi-axis-arrow-lock::before {
-  content: "\FD26";
-}
-.mdi-axis-lock::before {
-  content: "\FD27";
-}
-.mdi-axis-x-arrow::before {
-  content: "\FD28";
-}
-.mdi-axis-x-arrow-lock::before {
-  content: "\FD29";
-}
-.mdi-axis-x-rotate-clockwise::before {
-  content: "\FD2A";
-}
-.mdi-axis-x-rotate-counterclockwise::before {
-  content: "\FD2B";
-}
-.mdi-axis-x-y-arrow-lock::before {
-  content: "\FD2C";
-}
-.mdi-axis-y-arrow::before {
-  content: "\FD2D";
-}
-.mdi-axis-y-arrow-lock::before {
-  content: "\FD2E";
-}
-.mdi-axis-y-rotate-clockwise::before {
-  content: "\FD2F";
-}
-.mdi-axis-y-rotate-counterclockwise::before {
-  content: "\FD30";
-}
-.mdi-axis-z-arrow::before {
-  content: "\FD31";
-}
-.mdi-axis-z-arrow-lock::before {
-  content: "\FD32";
-}
-.mdi-axis-z-rotate-clockwise::before {
-  content: "\FD33";
-}
-.mdi-axis-z-rotate-counterclockwise::before {
-  content: "\FD34";
-}
-.mdi-azure::before {
-  content: "\F804";
-}
-.mdi-babel::before {
-  content: "\FA24";
-}
-.mdi-baby::before {
-  content: "\F06C";
-}
-.mdi-baby-bottle::before {
-  content: "\FF56";
-}
-.mdi-baby-bottle-outline::before {
-  content: "\FF57";
-}
-.mdi-baby-buggy::before {
-  content: "\F68E";
-}
-.mdi-baby-face::before {
-  content: "\FE99";
-}
-.mdi-baby-face-outline::before {
-  content: "\FE9A";
-}
-.mdi-backburger::before {
-  content: "\F06D";
-}
-.mdi-backspace::before {
-  content: "\F06E";
-}
-.mdi-backspace-outline::before {
-  content: "\FB38";
-}
-.mdi-backspace-reverse::before {
-  content: "\FE9B";
-}
-.mdi-backspace-reverse-outline::before {
-  content: "\FE9C";
-}
-.mdi-backup-restore::before {
-  content: "\F06F";
-}
-.mdi-bacteria::before {
-  content: "\FEF2";
-}
-.mdi-bacteria-outline::before {
-  content: "\FEF3";
-}
-.mdi-badminton::before {
-  content: "\F850";
-}
-.mdi-bag-carry-on::before {
-  content: "\FF58";
-}
-.mdi-bag-carry-on-check::before {
-  content: "\FD41";
-}
-.mdi-bag-carry-on-off::before {
-  content: "\FF59";
-}
-.mdi-bag-checked::before {
-  content: "\FF5A";
-}
-.mdi-bag-personal::before {
-  content: "\FDF3";
-}
-.mdi-bag-personal-off::before {
-  content: "\FDF4";
-}
-.mdi-bag-personal-off-outline::before {
-  content: "\FDF5";
-}
-.mdi-bag-personal-outline::before {
-  content: "\FDF6";
-}
-.mdi-baguette::before {
-  content: "\FF5B";
-}
-.mdi-balloon::before {
-  content: "\FA25";
-}
-.mdi-ballot::before {
-  content: "\F9C8";
-}
-.mdi-ballot-outline::before {
-  content: "\F9C9";
-}
-.mdi-ballot-recount::before {
-  content: "\FC15";
-}
-.mdi-ballot-recount-outline::before {
-  content: "\FC16";
-}
-.mdi-bandage::before {
-  content: "\FD8B";
-}
-.mdi-bandcamp::before {
-  content: "\F674";
-}
-.mdi-bank::before {
-  content: "\F070";
-}
-.mdi-bank-minus::before {
-  content: "\FD8C";
-}
-.mdi-bank-outline::before {
-  content: "\FE9D";
-}
-.mdi-bank-plus::before {
-  content: "\FD8D";
-}
-.mdi-bank-remove::before {
-  content: "\FD8E";
-}
-.mdi-bank-transfer::before {
-  content: "\FA26";
-}
-.mdi-bank-transfer-in::before {
-  content: "\FA27";
-}
-.mdi-bank-transfer-out::before {
-  content: "\FA28";
-}
-.mdi-barcode::before {
-  content: "\F071";
-}
-.mdi-barcode-scan::before {
-  content: "\F072";
-}
-.mdi-barley::before {
-  content: "\F073";
-}
-.mdi-barley-off::before {
-  content: "\FB39";
-}
-.mdi-barn::before {
-  content: "\FB3A";
-}
-.mdi-barrel::before {
-  content: "\F074";
-}
-.mdi-baseball::before {
-  content: "\F851";
-}
-.mdi-baseball-bat::before {
-  content: "\F852";
-}
-.mdi-basecamp::before {
-  content: "\F075";
-}
-.mdi-basket::before {
-  content: "\F076";
-}
-.mdi-basket-fill::before {
-  content: "\F077";
-}
-.mdi-basket-unfill::before {
-  content: "\F078";
-}
-.mdi-basketball::before {
-  content: "\F805";
-}
-.mdi-basketball-hoop::before {
-  content: "\FC17";
-}
-.mdi-basketball-hoop-outline::before {
-  content: "\FC18";
-}
-.mdi-bat::before {
-  content: "\FB3B";
-}
-.mdi-battery::before {
-  content: "\F079";
-}
-.mdi-battery-10::before {
-  content: "\F07A";
-}
-.mdi-battery-10-bluetooth::before {
-  content: "\F93D";
-}
-.mdi-battery-20::before {
-  content: "\F07B";
-}
-.mdi-battery-20-bluetooth::before {
-  content: "\F93E";
-}
-.mdi-battery-30::before {
-  content: "\F07C";
-}
-.mdi-battery-30-bluetooth::before {
-  content: "\F93F";
-}
-.mdi-battery-40::before {
-  content: "\F07D";
-}
-.mdi-battery-40-bluetooth::before {
-  content: "\F940";
-}
-.mdi-battery-50::before {
-  content: "\F07E";
-}
-.mdi-battery-50-bluetooth::before {
-  content: "\F941";
-}
-.mdi-battery-60::before {
-  content: "\F07F";
-}
-.mdi-battery-60-bluetooth::before {
-  content: "\F942";
-}
-.mdi-battery-70::before {
-  content: "\F080";
-}
-.mdi-battery-70-bluetooth::before {
-  content: "\F943";
-}
-.mdi-battery-80::before {
-  content: "\F081";
-}
-.mdi-battery-80-bluetooth::before {
-  content: "\F944";
-}
-.mdi-battery-90::before {
-  content: "\F082";
-}
-.mdi-battery-90-bluetooth::before {
-  content: "\F945";
-}
-.mdi-battery-alert::before {
-  content: "\F083";
-}
-.mdi-battery-alert-bluetooth::before {
-  content: "\F946";
-}
-.mdi-battery-bluetooth::before {
-  content: "\F947";
-}
-.mdi-battery-bluetooth-variant::before {
-  content: "\F948";
-}
-.mdi-battery-charging::before {
-  content: "\F084";
-}
-.mdi-battery-charging-10::before {
-  content: "\F89B";
-}
-.mdi-battery-charging-100::before {
-  content: "\F085";
-}
-.mdi-battery-charging-20::before {
-  content: "\F086";
-}
-.mdi-battery-charging-30::before {
-  content: "\F087";
-}
-.mdi-battery-charging-40::before {
-  content: "\F088";
-}
-.mdi-battery-charging-50::before {
-  content: "\F89C";
-}
-.mdi-battery-charging-60::before {
-  content: "\F089";
-}
-.mdi-battery-charging-70::before {
-  content: "\F89D";
-}
-.mdi-battery-charging-80::before {
-  content: "\F08A";
-}
-.mdi-battery-charging-90::before {
-  content: "\F08B";
-}
-.mdi-battery-charging-outline::before {
-  content: "\F89E";
-}
-.mdi-battery-charging-wireless::before {
-  content: "\F806";
-}
-.mdi-battery-charging-wireless-10::before {
-  content: "\F807";
-}
-.mdi-battery-charging-wireless-20::before {
-  content: "\F808";
-}
-.mdi-battery-charging-wireless-30::before {
-  content: "\F809";
-}
-.mdi-battery-charging-wireless-40::before {
-  content: "\F80A";
-}
-.mdi-battery-charging-wireless-50::before {
-  content: "\F80B";
-}
-.mdi-battery-charging-wireless-60::before {
-  content: "\F80C";
-}
-.mdi-battery-charging-wireless-70::before {
-  content: "\F80D";
-}
-.mdi-battery-charging-wireless-80::before {
-  content: "\F80E";
-}
-.mdi-battery-charging-wireless-90::before {
-  content: "\F80F";
-}
-.mdi-battery-charging-wireless-alert::before {
-  content: "\F810";
-}
-.mdi-battery-charging-wireless-outline::before {
-  content: "\F811";
-}
-.mdi-battery-minus::before {
-  content: "\F08C";
-}
-.mdi-battery-negative::before {
-  content: "\F08D";
-}
-.mdi-battery-outline::before {
-  content: "\F08E";
-}
-.mdi-battery-plus::before {
-  content: "\F08F";
-}
-.mdi-battery-positive::before {
-  content: "\F090";
-}
-.mdi-battery-unknown::before {
-  content: "\F091";
-}
-.mdi-battery-unknown-bluetooth::before {
-  content: "\F949";
-}
-.mdi-battlenet::before {
-  content: "\FB3C";
-}
-.mdi-beach::before {
-  content: "\F092";
-}
-.mdi-beaker::before {
-  content: "\FCC6";
-}
-.mdi-beaker-outline::before {
-  content: "\F68F";
-}
-.mdi-beats::before {
-  content: "\F097";
-}
-.mdi-bed-empty::before {
-  content: "\F89F";
-}
-.mdi-beer::before {
-  content: "\F098";
-}
-.mdi-behance::before {
-  content: "\F099";
-}
-.mdi-bell::before {
-  content: "\F09A";
-}
-.mdi-bell-alert::before {
-  content: "\FD35";
-}
-.mdi-bell-alert-outline::before {
-  content: "\FE9E";
-}
-.mdi-bell-circle::before {
-  content: "\FD36";
-}
-.mdi-bell-circle-outline::before {
-  content: "\FD37";
-}
-.mdi-bell-off::before {
-  content: "\F09B";
-}
-.mdi-bell-off-outline::before {
-  content: "\FA90";
-}
-.mdi-bell-outline::before {
-  content: "\F09C";
-}
-.mdi-bell-plus::before {
-  content: "\F09D";
-}
-.mdi-bell-plus-outline::before {
-  content: "\FA91";
-}
-.mdi-bell-ring::before {
-  content: "\F09E";
-}
-.mdi-bell-ring-outline::before {
-  content: "\F09F";
-}
-.mdi-bell-sleep::before {
-  content: "\F0A0";
-}
-.mdi-bell-sleep-outline::before {
-  content: "\FA92";
-}
-.mdi-beta::before {
-  content: "\F0A1";
-}
-.mdi-betamax::before {
-  content: "\F9CA";
-}
-.mdi-biathlon::before {
-  content: "\FDF7";
-}
-.mdi-bible::before {
-  content: "\F0A2";
-}
-.mdi-bike::before {
-  content: "\F0A3";
-}
-.mdi-billiards::before {
-  content: "\FB3D";
-}
-.mdi-billiards-rack::before {
-  content: "\FB3E";
-}
-.mdi-bing::before {
-  content: "\F0A4";
-}
-.mdi-binoculars::before {
-  content: "\F0A5";
-}
-.mdi-bio::before {
-  content: "\F0A6";
-}
-.mdi-biohazard::before {
-  content: "\F0A7";
-}
-.mdi-bitbucket::before {
-  content: "\F0A8";
-}
-.mdi-bitcoin::before {
-  content: "\F812";
-}
-.mdi-black-mesa::before {
-  content: "\F0A9";
-}
-.mdi-blackberry::before {
-  content: "\F0AA";
-}
-.mdi-blender::before {
-  content: "\FCC7";
-}
-.mdi-blender-software::before {
-  content: "\F0AB";
-}
-.mdi-blinds::before {
-  content: "\F0AC";
-}
-.mdi-block-helper::before {
-  content: "\F0AD";
-}
-.mdi-blogger::before {
-  content: "\F0AE";
-}
-.mdi-blood-bag::before {
-  content: "\FCC8";
-}
-.mdi-bluetooth::before {
-  content: "\F0AF";
-}
-.mdi-bluetooth-audio::before {
-  content: "\F0B0";
-}
-.mdi-bluetooth-connect::before {
-  content: "\F0B1";
-}
-.mdi-bluetooth-off::before {
-  content: "\F0B2";
-}
-.mdi-bluetooth-settings::before {
-  content: "\F0B3";
-}
-.mdi-bluetooth-transfer::before {
-  content: "\F0B4";
-}
-.mdi-blur::before {
-  content: "\F0B5";
-}
-.mdi-blur-linear::before {
-  content: "\F0B6";
-}
-.mdi-blur-off::before {
-  content: "\F0B7";
-}
-.mdi-blur-radial::before {
-  content: "\F0B8";
-}
-.mdi-bolnisi-cross::before {
-  content: "\FCC9";
-}
-.mdi-bolt::before {
-  content: "\FD8F";
-}
-.mdi-bomb::before {
-  content: "\F690";
-}
-.mdi-bomb-off::before {
-  content: "\F6C4";
-}
-.mdi-bone::before {
-  content: "\F0B9";
-}
-.mdi-book::before {
-  content: "\F0BA";
-}
-.mdi-book-lock::before {
-  content: "\F799";
-}
-.mdi-book-lock-open::before {
-  content: "\F79A";
-}
-.mdi-book-minus::before {
-  content: "\F5D9";
-}
-.mdi-book-minus-multiple::before {
-  content: "\FA93";
-}
-.mdi-book-multiple::before {
-  content: "\F0BB";
-}
-.mdi-book-open::before {
-  content: "\F0BD";
-}
-.mdi-book-open-outline::before {
-  content: "\FB3F";
-}
-.mdi-book-open-page-variant::before {
-  content: "\F5DA";
-}
-.mdi-book-open-variant::before {
-  content: "\F0BE";
-}
-.mdi-book-outline::before {
-  content: "\FB40";
-}
-.mdi-book-play::before {
-  content: "\FE9F";
-}
-.mdi-book-play-outline::before {
-  content: "\FEA0";
-}
-.mdi-book-plus::before {
-  content: "\F5DB";
-}
-.mdi-book-plus-multiple::before {
-  content: "\FA94";
-}
-.mdi-book-remove::before {
-  content: "\FA96";
-}
-.mdi-book-remove-multiple::before {
-  content: "\FA95";
-}
-.mdi-book-search::before {
-  content: "\FEA1";
-}
-.mdi-book-search-outline::before {
-  content: "\FEA2";
-}
-.mdi-book-variant::before {
-  content: "\F0BF";
-}
-.mdi-book-variant-multiple::before {
-  content: "\F0BC";
-}
-.mdi-bookmark::before {
-  content: "\F0C0";
-}
-.mdi-bookmark-check::before {
-  content: "\F0C1";
-}
-.mdi-bookmark-minus::before {
-  content: "\F9CB";
-}
-.mdi-bookmark-minus-outline::before {
-  content: "\F9CC";
-}
-.mdi-bookmark-multiple::before {
-  content: "\FDF8";
-}
-.mdi-bookmark-multiple-outline::before {
-  content: "\FDF9";
-}
-.mdi-bookmark-music::before {
-  content: "\F0C2";
-}
-.mdi-bookmark-off::before {
-  content: "\F9CD";
-}
-.mdi-bookmark-off-outline::before {
-  content: "\F9CE";
-}
-.mdi-bookmark-outline::before {
-  content: "\F0C3";
-}
-.mdi-bookmark-plus::before {
-  content: "\F0C5";
-}
-.mdi-bookmark-plus-outline::before {
-  content: "\F0C4";
-}
-.mdi-bookmark-remove::before {
-  content: "\F0C6";
-}
-.mdi-boom-gate::before {
-  content: "\FEA3";
-}
-.mdi-boom-gate-alert::before {
-  content: "\FEA4";
-}
-.mdi-boom-gate-alert-outline::before {
-  content: "\FEA5";
-}
-.mdi-boom-gate-down::before {
-  content: "\FEA6";
-}
-.mdi-boom-gate-down-outline::before {
-  content: "\FEA7";
-}
-.mdi-boom-gate-outline::before {
-  content: "\FEA8";
-}
-.mdi-boom-gate-up::before {
-  content: "\FEA9";
-}
-.mdi-boom-gate-up-outline::before {
-  content: "\FEAA";
-}
-.mdi-boombox::before {
-  content: "\F5DC";
-}
-.mdi-bootstrap::before {
-  content: "\F6C5";
-}
-.mdi-border-all::before {
-  content: "\F0C7";
-}
-.mdi-border-all-variant::before {
-  content: "\F8A0";
-}
-.mdi-border-bottom::before {
-  content: "\F0C8";
-}
-.mdi-border-bottom-variant::before {
-  content: "\F8A1";
-}
-.mdi-border-color::before {
-  content: "\F0C9";
-}
-.mdi-border-horizontal::before {
-  content: "\F0CA";
-}
-.mdi-border-inside::before {
-  content: "\F0CB";
-}
-.mdi-border-left::before {
-  content: "\F0CC";
-}
-.mdi-border-left-variant::before {
-  content: "\F8A2";
-}
-.mdi-border-none::before {
-  content: "\F0CD";
-}
-.mdi-border-none-variant::before {
-  content: "\F8A3";
-}
-.mdi-border-outside::before {
-  content: "\F0CE";
-}
-.mdi-border-right::before {
-  content: "\F0CF";
-}
-.mdi-border-right-variant::before {
-  content: "\F8A4";
-}
-.mdi-border-style::before {
-  content: "\F0D0";
-}
-.mdi-border-top::before {
-  content: "\F0D1";
-}
-.mdi-border-top-variant::before {
-  content: "\F8A5";
-}
-.mdi-border-vertical::before {
-  content: "\F0D2";
-}
-.mdi-bottle-wine::before {
-  content: "\F853";
-}
-.mdi-bow-tie::before {
-  content: "\F677";
-}
-.mdi-bowl::before {
-  content: "\F617";
-}
-.mdi-bowling::before {
-  content: "\F0D3";
-}
-.mdi-box::before {
-  content: "\F0D4";
-}
-.mdi-box-cutter::before {
-  content: "\F0D5";
-}
-.mdi-box-shadow::before {
-  content: "\F637";
-}
-.mdi-boxing-glove::before {
-  content: "\FB41";
-}
-.mdi-braille::before {
-  content: "\F9CF";
-}
-.mdi-brain::before {
-  content: "\F9D0";
-}
-.mdi-bread-slice::before {
-  content: "\FCCA";
-}
-.mdi-bread-slice-outline::before {
-  content: "\FCCB";
-}
-.mdi-bridge::before {
-  content: "\F618";
-}
-.mdi-briefcase::before {
-  content: "\F0D6";
-}
-.mdi-briefcase-account::before {
-  content: "\FCCC";
-}
-.mdi-briefcase-account-outline::before {
-  content: "\FCCD";
-}
-.mdi-briefcase-check::before {
-  content: "\F0D7";
-}
-.mdi-briefcase-download::before {
-  content: "\F0D8";
-}
-.mdi-briefcase-download-outline::before {
-  content: "\FC19";
-}
-.mdi-briefcase-edit::before {
-  content: "\FA97";
-}
-.mdi-briefcase-edit-outline::before {
-  content: "\FC1A";
-}
-.mdi-briefcase-minus::before {
-  content: "\FA29";
-}
-.mdi-briefcase-minus-outline::before {
-  content: "\FC1B";
-}
-.mdi-briefcase-outline::before {
-  content: "\F813";
-}
-.mdi-briefcase-plus::before {
-  content: "\FA2A";
-}
-.mdi-briefcase-plus-outline::before {
-  content: "\FC1C";
-}
-.mdi-briefcase-remove::before {
-  content: "\FA2B";
-}
-.mdi-briefcase-remove-outline::before {
-  content: "\FC1D";
-}
-.mdi-briefcase-search::before {
-  content: "\FA2C";
-}
-.mdi-briefcase-search-outline::before {
-  content: "\FC1E";
-}
-.mdi-briefcase-upload::before {
-  content: "\F0D9";
-}
-.mdi-briefcase-upload-outline::before {
-  content: "\FC1F";
-}
-.mdi-brightness-1::before {
-  content: "\F0DA";
-}
-.mdi-brightness-2::before {
-  content: "\F0DB";
-}
-.mdi-brightness-3::before {
-  content: "\F0DC";
-}
-.mdi-brightness-4::before {
-  content: "\F0DD";
-}
-.mdi-brightness-5::before {
-  content: "\F0DE";
-}
-.mdi-brightness-6::before {
-  content: "\F0DF";
-}
-.mdi-brightness-7::before {
-  content: "\F0E0";
-}
-.mdi-brightness-auto::before {
-  content: "\F0E1";
-}
-.mdi-brightness-percent::before {
-  content: "\FCCE";
-}
-.mdi-broom::before {
-  content: "\F0E2";
-}
-.mdi-brush::before {
-  content: "\F0E3";
-}
-.mdi-buddhism::before {
-  content: "\F94A";
-}
-.mdi-buffer::before {
-  content: "\F619";
-}
-.mdi-bug::before {
-  content: "\F0E4";
-}
-.mdi-bug-check::before {
-  content: "\FA2D";
-}
-.mdi-bug-check-outline::before {
-  content: "\FA2E";
-}
-.mdi-bug-outline::before {
-  content: "\FA2F";
-}
-.mdi-bugle::before {
-  content: "\FD90";
-}
-.mdi-bulldozer::before {
-  content: "\FB07";
-}
-.mdi-bullet::before {
-  content: "\FCCF";
-}
-.mdi-bulletin-board::before {
-  content: "\F0E5";
-}
-.mdi-bullhorn::before {
-  content: "\F0E6";
-}
-.mdi-bullhorn-outline::before {
-  content: "\FB08";
-}
-.mdi-bullseye::before {
-  content: "\F5DD";
-}
-.mdi-bullseye-arrow::before {
-  content: "\F8C8";
-}
-.mdi-bus::before {
-  content: "\F0E7";
-}
-.mdi-bus-alert::before {
-  content: "\FA98";
-}
-.mdi-bus-articulated-end::before {
-  content: "\F79B";
-}
-.mdi-bus-articulated-front::before {
-  content: "\F79C";
-}
-.mdi-bus-clock::before {
-  content: "\F8C9";
-}
-.mdi-bus-double-decker::before {
-  content: "\F79D";
-}
-.mdi-bus-multiple::before {
-  content: "\FF5C";
-}
-.mdi-bus-school::before {
-  content: "\F79E";
-}
-.mdi-bus-side::before {
-  content: "\F79F";
-}
-.mdi-cached::before {
-  content: "\F0E8";
-}
-.mdi-cactus::before {
-  content: "\FD91";
-}
-.mdi-cake::before {
-  content: "\F0E9";
-}
-.mdi-cake-layered::before {
-  content: "\F0EA";
-}
-.mdi-cake-variant::before {
-  content: "\F0EB";
-}
-.mdi-calculator::before {
-  content: "\F0EC";
-}
-.mdi-calculator-variant::before {
-  content: "\FA99";
-}
-.mdi-calendar::before {
-  content: "\F0ED";
-}
-.mdi-calendar-account::before {
-  content: "\FEF4";
-}
-.mdi-calendar-account-outline::before {
-  content: "\FEF5";
-}
-.mdi-calendar-alert::before {
-  content: "\FA30";
-}
-.mdi-calendar-blank::before {
-  content: "\F0EE";
-}
-.mdi-calendar-blank-outline::before {
-  content: "\FB42";
-}
-.mdi-calendar-check::before {
-  content: "\F0EF";
-}
-.mdi-calendar-check-outline::before {
-  content: "\FC20";
-}
-.mdi-calendar-clock::before {
-  content: "\F0F0";
-}
-.mdi-calendar-edit::before {
-  content: "\F8A6";
-}
-.mdi-calendar-export::before {
-  content: "\FB09";
-}
-.mdi-calendar-heart::before {
-  content: "\F9D1";
-}
-.mdi-calendar-import::before {
-  content: "\FB0A";
-}
-.mdi-calendar-minus::before {
-  content: "\FD38";
-}
-.mdi-calendar-month::before {
-  content: "\FDFA";
-}
-.mdi-calendar-month-outline::before {
-  content: "\FDFB";
-}
-.mdi-calendar-multiple::before {
-  content: "\F0F1";
-}
-.mdi-calendar-multiple-check::before {
-  content: "\F0F2";
-}
-.mdi-calendar-multiselect::before {
-  content: "\FA31";
-}
-.mdi-calendar-outline::before {
-  content: "\FB43";
-}
-.mdi-calendar-plus::before {
-  content: "\F0F3";
-}
-.mdi-calendar-question::before {
-  content: "\F691";
-}
-.mdi-calendar-range::before {
-  content: "\F678";
-}
-.mdi-calendar-range-outline::before {
-  content: "\FB44";
-}
-.mdi-calendar-remove::before {
-  content: "\F0F4";
-}
-.mdi-calendar-remove-outline::before {
-  content: "\FC21";
-}
-.mdi-calendar-repeat::before {
-  content: "\FEAB";
-}
-.mdi-calendar-repeat-outline::before {
-  content: "\FEAC";
-}
-.mdi-calendar-search::before {
-  content: "\F94B";
-}
-.mdi-calendar-star::before {
-  content: "\F9D2";
-}
-.mdi-calendar-text::before {
-  content: "\F0F5";
-}
-.mdi-calendar-text-outline::before {
-  content: "\FC22";
-}
-.mdi-calendar-today::before {
-  content: "\F0F6";
-}
-.mdi-calendar-week::before {
-  content: "\FA32";
-}
-.mdi-calendar-week-begin::before {
-  content: "\FA33";
-}
-.mdi-calendar-weekend::before {
-  content: "\FEF6";
-}
-.mdi-calendar-weekend-outline::before {
-  content: "\FEF7";
-}
-.mdi-call-made::before {
-  content: "\F0F7";
-}
-.mdi-call-merge::before {
-  content: "\F0F8";
-}
-.mdi-call-missed::before {
-  content: "\F0F9";
-}
-.mdi-call-received::before {
-  content: "\F0FA";
-}
-.mdi-call-split::before {
-  content: "\F0FB";
-}
-.mdi-camcorder::before {
-  content: "\F0FC";
-}
-.mdi-camcorder-box::before {
-  content: "\F0FD";
-}
-.mdi-camcorder-box-off::before {
-  content: "\F0FE";
-}
-.mdi-camcorder-off::before {
-  content: "\F0FF";
-}
-.mdi-camera::before {
-  content: "\F100";
-}
-.mdi-camera-account::before {
-  content: "\F8CA";
-}
-.mdi-camera-burst::before {
-  content: "\F692";
-}
-.mdi-camera-control::before {
-  content: "\FB45";
-}
-.mdi-camera-enhance::before {
-  content: "\F101";
-}
-.mdi-camera-enhance-outline::before {
-  content: "\FB46";
-}
-.mdi-camera-front::before {
-  content: "\F102";
-}
-.mdi-camera-front-variant::before {
-  content: "\F103";
-}
-.mdi-camera-gopro::before {
-  content: "\F7A0";
-}
-.mdi-camera-image::before {
-  content: "\F8CB";
-}
-.mdi-camera-iris::before {
-  content: "\F104";
-}
-.mdi-camera-metering-center::before {
-  content: "\F7A1";
-}
-.mdi-camera-metering-matrix::before {
-  content: "\F7A2";
-}
-.mdi-camera-metering-partial::before {
-  content: "\F7A3";
-}
-.mdi-camera-metering-spot::before {
-  content: "\F7A4";
-}
-.mdi-camera-off::before {
-  content: "\F5DF";
-}
-.mdi-camera-outline::before {
-  content: "\FD39";
-}
-.mdi-camera-party-mode::before {
-  content: "\F105";
-}
-.mdi-camera-plus::before {
-  content: "\FEF8";
-}
-.mdi-camera-plus-outline::before {
-  content: "\FEF9";
-}
-.mdi-camera-rear::before {
-  content: "\F106";
-}
-.mdi-camera-rear-variant::before {
-  content: "\F107";
-}
-.mdi-camera-retake::before {
-  content: "\FDFC";
-}
-.mdi-camera-retake-outline::before {
-  content: "\FDFD";
-}
-.mdi-camera-switch::before {
-  content: "\F108";
-}
-.mdi-camera-timer::before {
-  content: "\F109";
-}
-.mdi-camera-wireless::before {
-  content: "\FD92";
-}
-.mdi-camera-wireless-outline::before {
-  content: "\FD93";
-}
-.mdi-campfire::before {
-  content: "\FEFA";
-}
-.mdi-cancel::before {
-  content: "\F739";
-}
-.mdi-candle::before {
-  content: "\F5E2";
-}
-.mdi-candycane::before {
-  content: "\F10A";
-}
-.mdi-cannabis::before {
-  content: "\F7A5";
-}
-.mdi-caps-lock::before {
-  content: "\FA9A";
-}
-.mdi-car::before {
-  content: "\F10B";
-}
-.mdi-car-back::before {
-  content: "\FDFE";
-}
-.mdi-car-battery::before {
-  content: "\F10C";
-}
-.mdi-car-brake-abs::before {
-  content: "\FC23";
-}
-.mdi-car-brake-alert::before {
-  content: "\FC24";
-}
-.mdi-car-brake-hold::before {
-  content: "\FD3A";
-}
-.mdi-car-brake-parking::before {
-  content: "\FD3B";
-}
-.mdi-car-connected::before {
-  content: "\F10D";
-}
-.mdi-car-convertible::before {
-  content: "\F7A6";
-}
-.mdi-car-cruise-control::before {
-  content: "\FD3C";
-}
-.mdi-car-defrost-front::before {
-  content: "\FD3D";
-}
-.mdi-car-defrost-rear::before {
-  content: "\FD3E";
-}
-.mdi-car-door::before {
-  content: "\FB47";
-}
-.mdi-car-electric::before {
-  content: "\FB48";
-}
-.mdi-car-esp::before {
-  content: "\FC25";
-}
-.mdi-car-estate::before {
-  content: "\F7A7";
-}
-.mdi-car-hatchback::before {
-  content: "\F7A8";
-}
-.mdi-car-key::before {
-  content: "\FB49";
-}
-.mdi-car-light-dimmed::before {
-  content: "\FC26";
-}
-.mdi-car-light-fog::before {
-  content: "\FC27";
-}
-.mdi-car-light-high::before {
-  content: "\FC28";
-}
-.mdi-car-limousine::before {
-  content: "\F8CC";
-}
-.mdi-car-multiple::before {
-  content: "\FB4A";
-}
-.mdi-car-off::before {
-  content: "\FDFF";
-}
-.mdi-car-parking-lights::before {
-  content: "\FD3F";
-}
-.mdi-car-pickup::before {
-  content: "\F7A9";
-}
-.mdi-car-shift-pattern::before {
-  content: "\FF5D";
-}
-.mdi-car-side::before {
-  content: "\F7AA";
-}
-.mdi-car-sports::before {
-  content: "\F7AB";
-}
-.mdi-car-tire-alert::before {
-  content: "\FC29";
-}
-.mdi-car-traction-control::before {
-  content: "\FD40";
-}
-.mdi-car-wash::before {
-  content: "\F10E";
-}
-.mdi-caravan::before {
-  content: "\F7AC";
-}
-.mdi-card::before {
-  content: "\FB4B";
-}
-.mdi-card-bulleted::before {
-  content: "\FB4C";
-}
-.mdi-card-bulleted-off::before {
-  content: "\FB4D";
-}
-.mdi-card-bulleted-off-outline::before {
-  content: "\FB4E";
-}
-.mdi-card-bulleted-outline::before {
-  content: "\FB4F";
-}
-.mdi-card-bulleted-settings::before {
-  content: "\FB50";
-}
-.mdi-card-bulleted-settings-outline::before {
-  content: "\FB51";
-}
-.mdi-card-outline::before {
-  content: "\FB52";
-}
-.mdi-card-text::before {
-  content: "\FB53";
-}
-.mdi-card-text-outline::before {
-  content: "\FB54";
-}
-.mdi-cards::before {
-  content: "\F638";
-}
-.mdi-cards-club::before {
-  content: "\F8CD";
-}
-.mdi-cards-diamond::before {
-  content: "\F8CE";
-}
-.mdi-cards-heart::before {
-  content: "\F8CF";
-}
-.mdi-cards-outline::before {
-  content: "\F639";
-}
-.mdi-cards-playing-outline::before {
-  content: "\F63A";
-}
-.mdi-cards-spade::before {
-  content: "\F8D0";
-}
-.mdi-cards-variant::before {
-  content: "\F6C6";
-}
-.mdi-carrot::before {
-  content: "\F10F";
-}
-.mdi-cart::before {
-  content: "\F110";
-}
-.mdi-cart-arrow-down::before {
-  content: "\FD42";
-}
-.mdi-cart-arrow-right::before {
-  content: "\FC2A";
-}
-.mdi-cart-arrow-up::before {
-  content: "\FD43";
-}
-.mdi-cart-minus::before {
-  content: "\FD44";
-}
-.mdi-cart-off::before {
-  content: "\F66B";
-}
-.mdi-cart-outline::before {
-  content: "\F111";
-}
-.mdi-cart-plus::before {
-  content: "\F112";
-}
-.mdi-cart-remove::before {
-  content: "\FD45";
-}
-.mdi-case-sensitive-alt::before {
-  content: "\F113";
-}
-.mdi-cash::before {
-  content: "\F114";
-}
-.mdi-cash-100::before {
-  content: "\F115";
-}
-.mdi-cash-marker::before {
-  content: "\FD94";
-}
-.mdi-cash-multiple::before {
-  content: "\F116";
-}
-.mdi-cash-refund::before {
-  content: "\FA9B";
-}
-.mdi-cash-register::before {
-  content: "\FCD0";
-}
-.mdi-cash-usd::before {
-  content: "\F117";
-}
-.mdi-cassette::before {
-  content: "\F9D3";
-}
-.mdi-cast::before {
-  content: "\F118";
-}
-.mdi-cast-connected::before {
-  content: "\F119";
-}
-.mdi-cast-education::before {
-  content: "\FE6D";
-}
-.mdi-cast-off::before {
-  content: "\F789";
-}
-.mdi-castle::before {
-  content: "\F11A";
-}
-.mdi-cat::before {
-  content: "\F11B";
-}
-.mdi-cctv::before {
-  content: "\F7AD";
-}
-.mdi-ceiling-light::before {
-  content: "\F768";
-}
-.mdi-cellphone::before {
-  content: "\F11C";
-}
-.mdi-cellphone-android::before {
-  content: "\F11D";
-}
-.mdi-cellphone-arrow-down::before {
-  content: "\F9D4";
-}
-.mdi-cellphone-basic::before {
-  content: "\F11E";
-}
-.mdi-cellphone-dock::before {
-  content: "\F11F";
-}
-.mdi-cellphone-erase::before {
-  content: "\F94C";
-}
-.mdi-cellphone-information::before {
-  content: "\FF5E";
-}
-.mdi-cellphone-iphone::before {
-  content: "\F120";
-}
-.mdi-cellphone-key::before {
-  content: "\F94D";
-}
-.mdi-cellphone-link::before {
-  content: "\F121";
-}
-.mdi-cellphone-link-off::before {
-  content: "\F122";
-}
-.mdi-cellphone-lock::before {
-  content: "\F94E";
-}
-.mdi-cellphone-message::before {
-  content: "\F8D2";
-}
-.mdi-cellphone-nfc::before {
-  content: "\FEAD";
-}
-.mdi-cellphone-off::before {
-  content: "\F94F";
-}
-.mdi-cellphone-screenshot::before {
-  content: "\FA34";
-}
-.mdi-cellphone-settings::before {
-  content: "\F123";
-}
-.mdi-cellphone-settings-variant::before {
-  content: "\F950";
-}
-.mdi-cellphone-sound::before {
-  content: "\F951";
-}
-.mdi-cellphone-text::before {
-  content: "\F8D1";
-}
-.mdi-cellphone-wireless::before {
-  content: "\F814";
-}
-.mdi-celtic-cross::before {
-  content: "\FCD1";
-}
-.mdi-certificate::before {
-  content: "\F124";
-}
-.mdi-chair-rolling::before {
-  content: "\FFBA";
-}
-.mdi-chair-school::before {
-  content: "\F125";
-}
-.mdi-charity::before {
-  content: "\FC2B";
-}
-.mdi-chart-arc::before {
-  content: "\F126";
-}
-.mdi-chart-areaspline::before {
-  content: "\F127";
-}
-.mdi-chart-areaspline-variant::before {
-  content: "\FEAE";
-}
-.mdi-chart-bar::before {
-  content: "\F128";
-}
-.mdi-chart-bar-stacked::before {
-  content: "\F769";
-}
-.mdi-chart-bell-curve::before {
-  content: "\FC2C";
-}
-.mdi-chart-bubble::before {
-  content: "\F5E3";
-}
-.mdi-chart-donut::before {
-  content: "\F7AE";
-}
-.mdi-chart-donut-variant::before {
-  content: "\F7AF";
-}
-.mdi-chart-gantt::before {
-  content: "\F66C";
-}
-.mdi-chart-histogram::before {
-  content: "\F129";
-}
-.mdi-chart-line::before {
-  content: "\F12A";
-}
-.mdi-chart-line-stacked::before {
-  content: "\F76A";
-}
-.mdi-chart-line-variant::before {
-  content: "\F7B0";
-}
-.mdi-chart-multiline::before {
-  content: "\F8D3";
-}
-.mdi-chart-pie::before {
-  content: "\F12B";
-}
-.mdi-chart-scatter-plot::before {
-  content: "\FEAF";
-}
-.mdi-chart-scatter-plot-hexbin::before {
-  content: "\F66D";
-}
-.mdi-chart-timeline::before {
-  content: "\F66E";
-}
-.mdi-chart-timeline-variant::before {
-  content: "\FEB0";
-}
-.mdi-chart-tree::before {
-  content: "\FEB1";
-}
-.mdi-chat::before {
-  content: "\FB55";
-}
-.mdi-chat-alert::before {
-  content: "\FB56";
-}
-.mdi-chat-outline::before {
-  content: "\FEFB";
-}
-.mdi-chat-processing::before {
-  content: "\FB57";
-}
-.mdi-check::before {
-  content: "\F12C";
-}
-.mdi-check-all::before {
-  content: "\F12D";
-}
-.mdi-check-bold::before {
-  content: "\FE6E";
-}
-.mdi-check-box-multiple-outline::before {
-  content: "\FC2D";
-}
-.mdi-check-box-outline::before {
-  content: "\FC2E";
-}
-.mdi-check-circle::before {
-  content: "\F5E0";
-}
-.mdi-check-circle-outline::before {
-  content: "\F5E1";
-}
-.mdi-check-decagram::before {
-  content: "\F790";
-}
-.mdi-check-network::before {
-  content: "\FC2F";
-}
-.mdi-check-network-outline::before {
-  content: "\FC30";
-}
-.mdi-check-outline::before {
-  content: "\F854";
-}
-.mdi-check-underline::before {
-  content: "\FE70";
-}
-.mdi-check-underline-circle::before {
-  content: "\FE71";
-}
-.mdi-check-underline-circle-outline::before {
-  content: "\FE72";
-}
-.mdi-checkbook::before {
-  content: "\FA9C";
-}
-.mdi-checkbox-blank::before {
-  content: "\F12E";
-}
-.mdi-checkbox-blank-circle::before {
-  content: "\F12F";
-}
-.mdi-checkbox-blank-circle-outline::before {
-  content: "\F130";
-}
-.mdi-checkbox-blank-outline::before {
-  content: "\F131";
-}
-.mdi-checkbox-intermediate::before {
-  content: "\F855";
-}
-.mdi-checkbox-marked::before {
-  content: "\F132";
-}
-.mdi-checkbox-marked-circle::before {
-  content: "\F133";
-}
-.mdi-checkbox-marked-circle-outline::before {
-  content: "\F134";
-}
-.mdi-checkbox-marked-outline::before {
-  content: "\F135";
-}
-.mdi-checkbox-multiple-blank::before {
-  content: "\F136";
-}
-.mdi-checkbox-multiple-blank-circle::before {
-  content: "\F63B";
-}
-.mdi-checkbox-multiple-blank-circle-outline::before {
-  content: "\F63C";
-}
-.mdi-checkbox-multiple-blank-outline::before {
-  content: "\F137";
-}
-.mdi-checkbox-multiple-marked::before {
-  content: "\F138";
-}
-.mdi-checkbox-multiple-marked-circle::before {
-  content: "\F63D";
-}
-.mdi-checkbox-multiple-marked-circle-outline::before {
-  content: "\F63E";
-}
-.mdi-checkbox-multiple-marked-outline::before {
-  content: "\F139";
-}
-.mdi-checkerboard::before {
-  content: "\F13A";
-}
-.mdi-chef-hat::before {
-  content: "\FB58";
-}
-.mdi-chemical-weapon::before {
-  content: "\F13B";
-}
-.mdi-chess-bishop::before {
-  content: "\F85B";
-}
-.mdi-chess-king::before {
-  content: "\F856";
-}
-.mdi-chess-knight::before {
-  content: "\F857";
-}
-.mdi-chess-pawn::before {
-  content: "\F858";
-}
-.mdi-chess-queen::before {
-  content: "\F859";
-}
-.mdi-chess-rook::before {
-  content: "\F85A";
-}
-.mdi-chevron-double-down::before {
-  content: "\F13C";
-}
-.mdi-chevron-double-left::before {
-  content: "\F13D";
-}
-.mdi-chevron-double-right::before {
-  content: "\F13E";
-}
-.mdi-chevron-double-up::before {
-  content: "\F13F";
-}
-.mdi-chevron-down::before {
-  content: "\F140";
-}
-.mdi-chevron-down-box::before {
-  content: "\F9D5";
-}
-.mdi-chevron-down-box-outline::before {
-  content: "\F9D6";
-}
-.mdi-chevron-down-circle::before {
-  content: "\FB0B";
-}
-.mdi-chevron-down-circle-outline::before {
-  content: "\FB0C";
-}
-.mdi-chevron-left::before {
-  content: "\F141";
-}
-.mdi-chevron-left-box::before {
-  content: "\F9D7";
-}
-.mdi-chevron-left-box-outline::before {
-  content: "\F9D8";
-}
-.mdi-chevron-left-circle::before {
-  content: "\FB0D";
-}
-.mdi-chevron-left-circle-outline::before {
-  content: "\FB0E";
-}
-.mdi-chevron-right::before {
-  content: "\F142";
-}
-.mdi-chevron-right-box::before {
-  content: "\F9D9";
-}
-.mdi-chevron-right-box-outline::before {
-  content: "\F9DA";
-}
-.mdi-chevron-right-circle::before {
-  content: "\FB0F";
-}
-.mdi-chevron-right-circle-outline::before {
-  content: "\FB10";
-}
-.mdi-chevron-triple-down::before {
-  content: "\FD95";
-}
-.mdi-chevron-triple-left::before {
-  content: "\FD96";
-}
-.mdi-chevron-triple-right::before {
-  content: "\FD97";
-}
-.mdi-chevron-triple-up::before {
-  content: "\FD98";
-}
-.mdi-chevron-up::before {
-  content: "\F143";
-}
-.mdi-chevron-up-box::before {
-  content: "\F9DB";
-}
-.mdi-chevron-up-box-outline::before {
-  content: "\F9DC";
-}
-.mdi-chevron-up-circle::before {
-  content: "\FB11";
-}
-.mdi-chevron-up-circle-outline::before {
-  content: "\FB12";
-}
-.mdi-chili-hot::before {
-  content: "\F7B1";
-}
-.mdi-chili-medium::before {
-  content: "\F7B2";
-}
-.mdi-chili-mild::before {
-  content: "\F7B3";
-}
-.mdi-chip::before {
-  content: "\F61A";
-}
-.mdi-christianity::before {
-  content: "\F952";
-}
-.mdi-christianity-outline::before {
-  content: "\FCD2";
-}
-.mdi-church::before {
-  content: "\F144";
-}
-.mdi-circle::before {
-  content: "\F764";
-}
-.mdi-circle-double::before {
-  content: "\FEB2";
-}
-.mdi-circle-edit-outline::before {
-  content: "\F8D4";
-}
-.mdi-circle-expand::before {
-  content: "\FEB3";
-}
-.mdi-circle-medium::before {
-  content: "\F9DD";
-}
-.mdi-circle-outline::before {
-  content: "\F765";
-}
-.mdi-circle-slice-1::before {
-  content: "\FA9D";
-}
-.mdi-circle-slice-2::before {
-  content: "\FA9E";
-}
-.mdi-circle-slice-3::before {
-  content: "\FA9F";
-}
-.mdi-circle-slice-4::before {
-  content: "\FAA0";
-}
-.mdi-circle-slice-5::before {
-  content: "\FAA1";
-}
-.mdi-circle-slice-6::before {
-  content: "\FAA2";
-}
-.mdi-circle-slice-7::before {
-  content: "\FAA3";
-}
-.mdi-circle-slice-8::before {
-  content: "\FAA4";
-}
-.mdi-circle-small::before {
-  content: "\F9DE";
-}
-.mdi-circular-saw::before {
-  content: "\FE73";
-}
-.mdi-cisco-webex::before {
-  content: "\F145";
-}
-.mdi-city::before {
-  content: "\F146";
-}
-.mdi-city-variant::before {
-  content: "\FA35";
-}
-.mdi-city-variant-outline::before {
-  content: "\FA36";
-}
-.mdi-clipboard::before {
-  content: "\F147";
-}
-.mdi-clipboard-account::before {
-  content: "\F148";
-}
-.mdi-clipboard-account-outline::before {
-  content: "\FC31";
-}
-.mdi-clipboard-alert::before {
-  content: "\F149";
-}
-.mdi-clipboard-alert-outline::before {
-  content: "\FCD3";
-}
-.mdi-clipboard-arrow-down::before {
-  content: "\F14A";
-}
-.mdi-clipboard-arrow-down-outline::before {
-  content: "\FC32";
-}
-.mdi-clipboard-arrow-left::before {
-  content: "\F14B";
-}
-.mdi-clipboard-arrow-left-outline::before {
-  content: "\FCD4";
-}
-.mdi-clipboard-arrow-right::before {
-  content: "\FCD5";
-}
-.mdi-clipboard-arrow-right-outline::before {
-  content: "\FCD6";
-}
-.mdi-clipboard-arrow-up::before {
-  content: "\FC33";
-}
-.mdi-clipboard-arrow-up-outline::before {
-  content: "\FC34";
-}
-.mdi-clipboard-check::before {
-  content: "\F14C";
-}
-.mdi-clipboard-check-outline::before {
-  content: "\F8A7";
-}
-.mdi-clipboard-flow::before {
-  content: "\F6C7";
-}
-.mdi-clipboard-outline::before {
-  content: "\F14D";
-}
-.mdi-clipboard-play::before {
-  content: "\FC35";
-}
-.mdi-clipboard-play-outline::before {
-  content: "\FC36";
-}
-.mdi-clipboard-plus::before {
-  content: "\F750";
-}
-.mdi-clipboard-pulse::before {
-  content: "\F85C";
-}
-.mdi-clipboard-pulse-outline::before {
-  content: "\F85D";
-}
-.mdi-clipboard-text::before {
-  content: "\F14E";
-}
-.mdi-clipboard-text-outline::before {
-  content: "\FA37";
-}
-.mdi-clipboard-text-play::before {
-  content: "\FC37";
-}
-.mdi-clipboard-text-play-outline::before {
-  content: "\FC38";
-}
-.mdi-clippy::before {
-  content: "\F14F";
-}
-.mdi-clock::before {
-  content: "\F953";
-}
-.mdi-clock-alert::before {
-  content: "\F954";
-}
-.mdi-clock-alert-outline::before {
-  content: "\F5CE";
-}
-.mdi-clock-digital::before {
-  content: "\FEB4";
-}
-.mdi-clock-end::before {
-  content: "\F151";
-}
-.mdi-clock-fast::before {
-  content: "\F152";
-}
-.mdi-clock-in::before {
-  content: "\F153";
-}
-.mdi-clock-out::before {
-  content: "\F154";
-}
-.mdi-clock-outline::before {
-  content: "\F150";
-}
-.mdi-clock-start::before {
-  content: "\F155";
-}
-.mdi-close::before {
-  content: "\F156";
-}
-.mdi-close-box::before {
-  content: "\F157";
-}
-.mdi-close-box-multiple::before {
-  content: "\FC39";
-}
-.mdi-close-box-multiple-outline::before {
-  content: "\FC3A";
-}
-.mdi-close-box-outline::before {
-  content: "\F158";
-}
-.mdi-close-circle::before {
-  content: "\F159";
-}
-.mdi-close-circle-outline::before {
-  content: "\F15A";
-}
-.mdi-close-network::before {
-  content: "\F15B";
-}
-.mdi-close-network-outline::before {
-  content: "\FC3B";
-}
-.mdi-close-octagon::before {
-  content: "\F15C";
-}
-.mdi-close-octagon-outline::before {
-  content: "\F15D";
-}
-.mdi-close-outline::before {
-  content: "\F6C8";
-}
-.mdi-closed-caption::before {
-  content: "\F15E";
-}
-.mdi-closed-caption-outline::before {
-  content: "\FD99";
-}
-.mdi-cloud::before {
-  content: "\F15F";
-}
-.mdi-cloud-alert::before {
-  content: "\F9DF";
-}
-.mdi-cloud-braces::before {
-  content: "\F7B4";
-}
-.mdi-cloud-check::before {
-  content: "\F160";
-}
-.mdi-cloud-circle::before {
-  content: "\F161";
-}
-.mdi-cloud-download::before {
-  content: "\F162";
-}
-.mdi-cloud-download-outline::before {
-  content: "\FB59";
-}
-.mdi-cloud-off-outline::before {
-  content: "\F164";
-}
-.mdi-cloud-outline::before {
-  content: "\F163";
-}
-.mdi-cloud-print::before {
-  content: "\F165";
-}
-.mdi-cloud-print-outline::before {
-  content: "\F166";
-}
-.mdi-cloud-question::before {
-  content: "\FA38";
-}
-.mdi-cloud-search::before {
-  content: "\F955";
-}
-.mdi-cloud-search-outline::before {
-  content: "\F956";
-}
-.mdi-cloud-sync::before {
-  content: "\F63F";
-}
-.mdi-cloud-tags::before {
-  content: "\F7B5";
-}
-.mdi-cloud-upload::before {
-  content: "\F167";
-}
-.mdi-cloud-upload-outline::before {
-  content: "\FB5A";
-}
-.mdi-clover::before {
-  content: "\F815";
-}
-.mdi-code-array::before {
-  content: "\F168";
-}
-.mdi-code-braces::before {
-  content: "\F169";
-}
-.mdi-code-brackets::before {
-  content: "\F16A";
-}
-.mdi-code-equal::before {
-  content: "\F16B";
-}
-.mdi-code-greater-than::before {
-  content: "\F16C";
-}
-.mdi-code-greater-than-or-equal::before {
-  content: "\F16D";
-}
-.mdi-code-less-than::before {
-  content: "\F16E";
-}
-.mdi-code-less-than-or-equal::before {
-  content: "\F16F";
-}
-.mdi-code-not-equal::before {
-  content: "\F170";
-}
-.mdi-code-not-equal-variant::before {
-  content: "\F171";
-}
-.mdi-code-parentheses::before {
-  content: "\F172";
-}
-.mdi-code-string::before {
-  content: "\F173";
-}
-.mdi-code-tags::before {
-  content: "\F174";
-}
-.mdi-code-tags-check::before {
-  content: "\F693";
-}
-.mdi-codepen::before {
-  content: "\F175";
-}
-.mdi-coffee::before {
-  content: "\F176";
-}
-.mdi-coffee-off::before {
-  content: "\FFCA";
-}
-.mdi-coffee-off-outline::before {
-  content: "\FFCB";
-}
-.mdi-coffee-outline::before {
-  content: "\F6C9";
-}
-.mdi-coffee-to-go::before {
-  content: "\F177";
-}
-.mdi-coffin::before {
-  content: "\FB5B";
-}
-.mdi-cogs::before {
-  content: "\F8D5";
-}
-.mdi-coin::before {
-  content: "\F178";
-}
-.mdi-coins::before {
-  content: "\F694";
-}
-.mdi-collage::before {
-  content: "\F640";
-}
-.mdi-collapse-all::before {
-  content: "\FAA5";
-}
-.mdi-collapse-all-outline::before {
-  content: "\FAA6";
-}
-.mdi-color-helper::before {
-  content: "\F179";
-}
-.mdi-comma::before {
-  content: "\FE74";
-}
-.mdi-comma-box::before {
-  content: "\FE75";
-}
-.mdi-comma-box-outline::before {
-  content: "\FE76";
-}
-.mdi-comma-circle::before {
-  content: "\FE77";
-}
-.mdi-comma-circle-outline::before {
-  content: "\FE78";
-}
-.mdi-comment::before {
-  content: "\F17A";
-}
-.mdi-comment-account::before {
-  content: "\F17B";
-}
-.mdi-comment-account-outline::before {
-  content: "\F17C";
-}
-.mdi-comment-alert::before {
-  content: "\F17D";
-}
-.mdi-comment-alert-outline::before {
-  content: "\F17E";
-}
-.mdi-comment-arrow-left::before {
-  content: "\F9E0";
-}
-.mdi-comment-arrow-left-outline::before {
-  content: "\F9E1";
-}
-.mdi-comment-arrow-right::before {
-  content: "\F9E2";
-}
-.mdi-comment-arrow-right-outline::before {
-  content: "\F9E3";
-}
-.mdi-comment-check::before {
-  content: "\F17F";
-}
-.mdi-comment-check-outline::before {
-  content: "\F180";
-}
-.mdi-comment-eye::before {
-  content: "\FA39";
-}
-.mdi-comment-eye-outline::before {
-  content: "\FA3A";
-}
-.mdi-comment-multiple::before {
-  content: "\F85E";
-}
-.mdi-comment-multiple-outline::before {
-  content: "\F181";
-}
-.mdi-comment-outline::before {
-  content: "\F182";
-}
-.mdi-comment-plus::before {
-  content: "\F9E4";
-}
-.mdi-comment-plus-outline::before {
-  content: "\F183";
-}
-.mdi-comment-processing::before {
-  content: "\F184";
-}
-.mdi-comment-processing-outline::before {
-  content: "\F185";
-}
-.mdi-comment-question::before {
-  content: "\F816";
-}
-.mdi-comment-question-outline::before {
-  content: "\F186";
-}
-.mdi-comment-remove::before {
-  content: "\F5DE";
-}
-.mdi-comment-remove-outline::before {
-  content: "\F187";
-}
-.mdi-comment-search::before {
-  content: "\FA3B";
-}
-.mdi-comment-search-outline::before {
-  content: "\FA3C";
-}
-.mdi-comment-text::before {
-  content: "\F188";
-}
-.mdi-comment-text-multiple::before {
-  content: "\F85F";
-}
-.mdi-comment-text-multiple-outline::before {
-  content: "\F860";
-}
-.mdi-comment-text-outline::before {
-  content: "\F189";
-}
-.mdi-compare::before {
-  content: "\F18A";
-}
-.mdi-compass::before {
-  content: "\F18B";
-}
-.mdi-compass-off::before {
-  content: "\FB5C";
-}
-.mdi-compass-off-outline::before {
-  content: "\FB5D";
-}
-.mdi-compass-outline::before {
-  content: "\F18C";
-}
-.mdi-console::before {
-  content: "\F18D";
-}
-.mdi-console-line::before {
-  content: "\F7B6";
-}
-.mdi-console-network::before {
-  content: "\F8A8";
-}
-.mdi-console-network-outline::before {
-  content: "\FC3C";
-}
-.mdi-contact-mail::before {
-  content: "\F18E";
-}
-.mdi-contact-mail-outline::before {
-  content: "\FEB5";
-}
-.mdi-contact-phone::before {
-  content: "\FEB6";
-}
-.mdi-contact-phone-outline::before {
-  content: "\FEB7";
-}
-.mdi-contactless-payment::before {
-  content: "\FD46";
-}
-.mdi-contacts::before {
-  content: "\F6CA";
-}
-.mdi-contain::before {
-  content: "\FA3D";
-}
-.mdi-contain-end::before {
-  content: "\FA3E";
-}
-.mdi-contain-start::before {
-  content: "\FA3F";
-}
-.mdi-content-copy::before {
-  content: "\F18F";
-}
-.mdi-content-cut::before {
-  content: "\F190";
-}
-.mdi-content-duplicate::before {
-  content: "\F191";
-}
-.mdi-content-paste::before {
-  content: "\F192";
-}
-.mdi-content-save::before {
-  content: "\F193";
-}
-.mdi-content-save-alert::before {
-  content: "\FF5F";
-}
-.mdi-content-save-alert-outline::before {
-  content: "\FF60";
-}
-.mdi-content-save-all::before {
-  content: "\F194";
-}
-.mdi-content-save-all-outline::before {
-  content: "\FF61";
-}
-.mdi-content-save-edit::before {
-  content: "\FCD7";
-}
-.mdi-content-save-edit-outline::before {
-  content: "\FCD8";
-}
-.mdi-content-save-move::before {
-  content: "\FE79";
-}
-.mdi-content-save-move-outline::before {
-  content: "\FE7A";
-}
-.mdi-content-save-outline::before {
-  content: "\F817";
-}
-.mdi-content-save-settings::before {
-  content: "\F61B";
-}
-.mdi-content-save-settings-outline::before {
-  content: "\FB13";
-}
-.mdi-contrast::before {
-  content: "\F195";
-}
-.mdi-contrast-box::before {
-  content: "\F196";
-}
-.mdi-contrast-circle::before {
-  content: "\F197";
-}
-.mdi-controller-classic::before {
-  content: "\FB5E";
-}
-.mdi-controller-classic-outline::before {
-  content: "\FB5F";
-}
-.mdi-cookie::before {
-  content: "\F198";
-}
-.mdi-copyright::before {
-  content: "\F5E6";
-}
-.mdi-cordova::before {
-  content: "\F957";
-}
-.mdi-corn::before {
-  content: "\F7B7";
-}
-.mdi-counter::before {
-  content: "\F199";
-}
-.mdi-cow::before {
-  content: "\F19A";
-}
-.mdi-cowboy::before {
-  content: "\FEB8";
-}
-.mdi-cpu-32-bit::before {
-  content: "\FEFC";
-}
-.mdi-cpu-64-bit::before {
-  content: "\FEFD";
-}
-.mdi-crane::before {
-  content: "\F861";
-}
-.mdi-creation::before {
-  content: "\F1C9";
-}
-.mdi-creative-commons::before {
-  content: "\FD47";
-}
-.mdi-credit-card::before {
-  content: "\F19B";
-}
-.mdi-credit-card-clock::before {
-  content: "\FEFE";
-}
-.mdi-credit-card-clock-outline::before {
-  content: "\FFBC";
-}
-.mdi-credit-card-marker::before {
-  content: "\FD9A";
-}
-.mdi-credit-card-multiple::before {
-  content: "\F19C";
-}
-.mdi-credit-card-off::before {
-  content: "\F5E4";
-}
-.mdi-credit-card-plus::before {
-  content: "\F675";
-}
-.mdi-credit-card-refund::before {
-  content: "\FAA7";
-}
-.mdi-credit-card-scan::before {
-  content: "\F19D";
-}
-.mdi-credit-card-settings::before {
-  content: "\F8D6";
-}
-.mdi-credit-card-wireless::before {
-  content: "\FD48";
-}
-.mdi-cricket::before {
-  content: "\FD49";
-}
-.mdi-crop::before {
-  content: "\F19E";
-}
-.mdi-crop-free::before {
-  content: "\F19F";
-}
-.mdi-crop-landscape::before {
-  content: "\F1A0";
-}
-.mdi-crop-portrait::before {
-  content: "\F1A1";
-}
-.mdi-crop-rotate::before {
-  content: "\F695";
-}
-.mdi-crop-square::before {
-  content: "\F1A2";
-}
-.mdi-crosshairs::before {
-  content: "\F1A3";
-}
-.mdi-crosshairs-gps::before {
-  content: "\F1A4";
-}
-.mdi-crosshairs-off::before {
-  content: "\FF62";
-}
-.mdi-crown::before {
-  content: "\F1A5";
-}
-.mdi-cryengine::before {
-  content: "\F958";
-}
-.mdi-crystal-ball::before {
-  content: "\FB14";
-}
-.mdi-cube::before {
-  content: "\F1A6";
-}
-.mdi-cube-outline::before {
-  content: "\F1A7";
-}
-.mdi-cube-scan::before {
-  content: "\FB60";
-}
-.mdi-cube-send::before {
-  content: "\F1A8";
-}
-.mdi-cube-unfolded::before {
-  content: "\F1A9";
-}
-.mdi-cup::before {
-  content: "\F1AA";
-}
-.mdi-cup-off::before {
-  content: "\F5E5";
-}
-.mdi-cup-water::before {
-  content: "\F1AB";
-}
-.mdi-cupboard::before {
-  content: "\FF63";
-}
-.mdi-cupboard-outline::before {
-  content: "\FF64";
-}
-.mdi-cupcake::before {
-  content: "\F959";
-}
-.mdi-curling::before {
-  content: "\F862";
-}
-.mdi-currency-bdt::before {
-  content: "\F863";
-}
-.mdi-currency-brl::before {
-  content: "\FB61";
-}
-.mdi-currency-btc::before {
-  content: "\F1AC";
-}
-.mdi-currency-chf::before {
-  content: "\F7B8";
-}
-.mdi-currency-cny::before {
-  content: "\F7B9";
-}
-.mdi-currency-eth::before {
-  content: "\F7BA";
-}
-.mdi-currency-eur::before {
-  content: "\F1AD";
-}
-.mdi-currency-gbp::before {
-  content: "\F1AE";
-}
-.mdi-currency-ils::before {
-  content: "\FC3D";
-}
-.mdi-currency-inr::before {
-  content: "\F1AF";
-}
-.mdi-currency-jpy::before {
-  content: "\F7BB";
-}
-.mdi-currency-krw::before {
-  content: "\F7BC";
-}
-.mdi-currency-kzt::before {
-  content: "\F864";
-}
-.mdi-currency-ngn::before {
-  content: "\F1B0";
-}
-.mdi-currency-php::before {
-  content: "\F9E5";
-}
-.mdi-currency-rial::before {
-  content: "\FEB9";
-}
-.mdi-currency-rub::before {
-  content: "\F1B1";
-}
-.mdi-currency-sign::before {
-  content: "\F7BD";
-}
-.mdi-currency-try::before {
-  content: "\F1B2";
-}
-.mdi-currency-twd::before {
-  content: "\F7BE";
-}
-.mdi-currency-usd::before {
-  content: "\F1B3";
-}
-.mdi-currency-usd-off::before {
-  content: "\F679";
-}
-.mdi-current-ac::before {
-  content: "\F95A";
-}
-.mdi-current-dc::before {
-  content: "\F95B";
-}
-.mdi-cursor-default::before {
-  content: "\F1B4";
-}
-.mdi-cursor-default-click::before {
-  content: "\FCD9";
-}
-.mdi-cursor-default-click-outline::before {
-  content: "\FCDA";
-}
-.mdi-cursor-default-outline::before {
-  content: "\F1B5";
-}
-.mdi-cursor-move::before {
-  content: "\F1B6";
-}
-.mdi-cursor-pointer::before {
-  content: "\F1B7";
-}
-.mdi-cursor-text::before {
-  content: "\F5E7";
-}
-.mdi-database::before {
-  content: "\F1B8";
-}
-.mdi-database-check::before {
-  content: "\FAA8";
-}
-.mdi-database-edit::before {
-  content: "\FB62";
-}
-.mdi-database-export::before {
-  content: "\F95D";
-}
-.mdi-database-import::before {
-  content: "\F95C";
-}
-.mdi-database-lock::before {
-  content: "\FAA9";
-}
-.mdi-database-minus::before {
-  content: "\F1B9";
-}
-.mdi-database-plus::before {
-  content: "\F1BA";
-}
-.mdi-database-refresh::before {
-  content: "\FCDB";
-}
-.mdi-database-remove::before {
-  content: "\FCDC";
-}
-.mdi-database-search::before {
-  content: "\F865";
-}
-.mdi-database-settings::before {
-  content: "\FCDD";
-}
-.mdi-death-star::before {
-  content: "\F8D7";
-}
-.mdi-death-star-variant::before {
-  content: "\F8D8";
-}
-.mdi-deathly-hallows::before {
-  content: "\FB63";
-}
-.mdi-debian::before {
-  content: "\F8D9";
-}
-.mdi-debug-step-into::before {
-  content: "\F1BB";
-}
-.mdi-debug-step-out::before {
-  content: "\F1BC";
-}
-.mdi-debug-step-over::before {
-  content: "\F1BD";
-}
-.mdi-decagram::before {
-  content: "\F76B";
-}
-.mdi-decagram-outline::before {
-  content: "\F76C";
-}
-.mdi-decimal-decrease::before {
-  content: "\F1BE";
-}
-.mdi-decimal-increase::before {
-  content: "\F1BF";
-}
-.mdi-delete::before {
-  content: "\F1C0";
-}
-.mdi-delete-circle::before {
-  content: "\F682";
-}
-.mdi-delete-circle-outline::before {
-  content: "\FB64";
-}
-.mdi-delete-empty::before {
-  content: "\F6CB";
-}
-.mdi-delete-empty-outline::before {
-  content: "\FEBA";
-}
-.mdi-delete-forever::before {
-  content: "\F5E8";
-}
-.mdi-delete-forever-outline::before {
-  content: "\FB65";
-}
-.mdi-delete-outline::before {
-  content: "\F9E6";
-}
-.mdi-delete-restore::before {
-  content: "\F818";
-}
-.mdi-delete-sweep::before {
-  content: "\F5E9";
-}
-.mdi-delete-sweep-outline::before {
-  content: "\FC3E";
-}
-.mdi-delete-variant::before {
-  content: "\F1C1";
-}
-.mdi-delta::before {
-  content: "\F1C2";
-}
-.mdi-desk-lamp::before {
-  content: "\F95E";
-}
-.mdi-deskphone::before {
-  content: "\F1C3";
-}
-.mdi-desktop-classic::before {
-  content: "\F7BF";
-}
-.mdi-desktop-mac::before {
-  content: "\F1C4";
-}
-.mdi-desktop-mac-dashboard::before {
-  content: "\F9E7";
-}
-.mdi-desktop-tower::before {
-  content: "\F1C5";
-}
-.mdi-desktop-tower-monitor::before {
-  content: "\FAAA";
-}
-.mdi-details::before {
-  content: "\F1C6";
-}
-.mdi-dev-to::before {
-  content: "\FD4A";
-}
-.mdi-developer-board::before {
-  content: "\F696";
-}
-.mdi-deviantart::before {
-  content: "\F1C7";
-}
-.mdi-dialpad::before {
-  content: "\F61C";
-}
-.mdi-diameter::before {
-  content: "\FC3F";
-}
-.mdi-diameter-outline::before {
-  content: "\FC40";
-}
-.mdi-diameter-variant::before {
-  content: "\FC41";
-}
-.mdi-diamond::before {
-  content: "\FB66";
-}
-.mdi-diamond-outline::before {
-  content: "\FB67";
-}
-.mdi-diamond-stone::before {
-  content: "\F1C8";
-}
-.mdi-dice-1::before {
-  content: "\F1CA";
-}
-.mdi-dice-2::before {
-  content: "\F1CB";
-}
-.mdi-dice-3::before {
-  content: "\F1CC";
-}
-.mdi-dice-4::before {
-  content: "\F1CD";
-}
-.mdi-dice-5::before {
-  content: "\F1CE";
-}
-.mdi-dice-6::before {
-  content: "\F1CF";
-}
-.mdi-dice-d10::before {
-  content: "\F76E";
-}
-.mdi-dice-d12::before {
-  content: "\F866";
-}
-.mdi-dice-d20::before {
-  content: "\F5EA";
-}
-.mdi-dice-d4::before {
-  content: "\F5EB";
-}
-.mdi-dice-d6::before {
-  content: "\F5EC";
-}
-.mdi-dice-d8::before {
-  content: "\F5ED";
-}
-.mdi-dice-multiple::before {
-  content: "\F76D";
-}
-.mdi-dictionary::before {
-  content: "\F61D";
-}
-.mdi-dip-switch::before {
-  content: "\F7C0";
-}
-.mdi-directions::before {
-  content: "\F1D0";
-}
-.mdi-directions-fork::before {
-  content: "\F641";
-}
-.mdi-disc::before {
-  content: "\F5EE";
-}
-.mdi-disc-alert::before {
-  content: "\F1D1";
-}
-.mdi-disc-player::before {
-  content: "\F95F";
-}
-.mdi-discord::before {
-  content: "\F66F";
-}
-.mdi-dishwasher::before {
-  content: "\FAAB";
-}
-.mdi-disqus::before {
-  content: "\F1D2";
-}
-.mdi-disqus-outline::before {
-  content: "\F1D3";
-}
-.mdi-diving-flippers::before {
-  content: "\FD9B";
-}
-.mdi-diving-helmet::before {
-  content: "\FD9C";
-}
-.mdi-diving-scuba::before {
-  content: "\FD9D";
-}
-.mdi-diving-scuba-flag::before {
-  content: "\FD9E";
-}
-.mdi-diving-scuba-tank::before {
-  content: "\FD9F";
-}
-.mdi-diving-scuba-tank-multiple::before {
-  content: "\FDA0";
-}
-.mdi-diving-snorkel::before {
-  content: "\FDA1";
-}
-.mdi-division::before {
-  content: "\F1D4";
-}
-.mdi-division-box::before {
-  content: "\F1D5";
-}
-.mdi-dlna::before {
-  content: "\FA40";
-}
-.mdi-dna::before {
-  content: "\F683";
-}
-.mdi-dns::before {
-  content: "\F1D6";
-}
-.mdi-dns-outline::before {
-  content: "\FB68";
-}
-.mdi-do-not-disturb::before {
-  content: "\F697";
-}
-.mdi-do-not-disturb-off::before {
-  content: "\F698";
-}
-.mdi-docker::before {
-  content: "\F867";
-}
-.mdi-doctor::before {
-  content: "\FA41";
-}
-.mdi-dog::before {
-  content: "\FA42";
-}
-.mdi-dog-service::before {
-  content: "\FAAC";
-}
-.mdi-dog-side::before {
-  content: "\FA43";
-}
-.mdi-dolby::before {
-  content: "\F6B2";
-}
-.mdi-dolly::before {
-  content: "\FEBB";
-}
-.mdi-domain::before {
-  content: "\F1D7";
-}
-.mdi-domain-off::before {
-  content: "\FD4B";
-}
-.mdi-donkey::before {
-  content: "\F7C1";
-}
-.mdi-door::before {
-  content: "\F819";
-}
-.mdi-door-closed::before {
-  content: "\F81A";
-}
-.mdi-door-open::before {
-  content: "\F81B";
-}
-.mdi-doorbell-video::before {
-  content: "\F868";
-}
-.mdi-dot-net::before {
-  content: "\FAAD";
-}
-.mdi-dots-horizontal::before {
-  content: "\F1D8";
-}
-.mdi-dots-horizontal-circle::before {
-  content: "\F7C2";
-}
-.mdi-dots-horizontal-circle-outline::before {
-  content: "\FB69";
-}
-.mdi-dots-vertical::before {
-  content: "\F1D9";
-}
-.mdi-dots-vertical-circle::before {
-  content: "\F7C3";
-}
-.mdi-dots-vertical-circle-outline::before {
-  content: "\FB6A";
-}
-.mdi-douban::before {
-  content: "\F699";
-}
-.mdi-download::before {
-  content: "\F1DA";
-}
-.mdi-download-multiple::before {
-  content: "\F9E8";
-}
-.mdi-download-network::before {
-  content: "\F6F3";
-}
-.mdi-download-network-outline::before {
-  content: "\FC42";
-}
-.mdi-download-outline::before {
-  content: "\FB6B";
-}
-.mdi-drag::before {
-  content: "\F1DB";
-}
-.mdi-drag-horizontal::before {
-  content: "\F1DC";
-}
-.mdi-drag-variant::before {
-  content: "\FB6C";
-}
-.mdi-drag-vertical::before {
-  content: "\F1DD";
-}
-.mdi-drama-masks::before {
-  content: "\FCDE";
-}
-.mdi-draw::before {
-  content: "\FF66";
-}
-.mdi-drawing::before {
-  content: "\F1DE";
-}
-.mdi-drawing-box::before {
-  content: "\F1DF";
-}
-.mdi-dresser::before {
-  content: "\FF67";
-}
-.mdi-dresser-outline::before {
-  content: "\FF68";
-}
-.mdi-dribbble::before {
-  content: "\F1E0";
-}
-.mdi-dribbble-box::before {
-  content: "\F1E1";
-}
-.mdi-drone::before {
-  content: "\F1E2";
-}
-.mdi-dropbox::before {
-  content: "\F1E3";
-}
-.mdi-drupal::before {
-  content: "\F1E4";
-}
-.mdi-duck::before {
-  content: "\F1E5";
-}
-.mdi-dumbbell::before {
-  content: "\F1E6";
-}
-.mdi-dump-truck::before {
-  content: "\FC43";
-}
-.mdi-ear-hearing::before {
-  content: "\F7C4";
-}
-.mdi-ear-hearing-off::before {
-  content: "\FA44";
-}
-.mdi-earth::before {
-  content: "\F1E7";
-}
-.mdi-earth-box::before {
-  content: "\F6CC";
-}
-.mdi-earth-box-off::before {
-  content: "\F6CD";
-}
-.mdi-earth-off::before {
-  content: "\F1E8";
-}
-.mdi-edge::before {
-  content: "\F1E9";
-}
-.mdi-egg::before {
-  content: "\FAAE";
-}
-.mdi-egg-easter::before {
-  content: "\FAAF";
-}
-.mdi-eight-track::before {
-  content: "\F9E9";
-}
-.mdi-eject::before {
-  content: "\F1EA";
-}
-.mdi-eject-outline::before {
-  content: "\FB6D";
-}
-.mdi-electric-switch::before {
-  content: "\FEBC";
-}
-.mdi-elephant::before {
-  content: "\F7C5";
-}
-.mdi-elevation-decline::before {
-  content: "\F1EB";
-}
-.mdi-elevation-rise::before {
-  content: "\F1EC";
-}
-.mdi-elevator::before {
-  content: "\F1ED";
-}
-.mdi-ellipse::before {
-  content: "\FEBD";
-}
-.mdi-ellipse-outline::before {
-  content: "\FEBE";
-}
-.mdi-email::before {
-  content: "\F1EE";
-}
-.mdi-email-alert::before {
-  content: "\F6CE";
-}
-.mdi-email-box::before {
-  content: "\FCDF";
-}
-.mdi-email-check::before {
-  content: "\FAB0";
-}
-.mdi-email-check-outline::before {
-  content: "\FAB1";
-}
-.mdi-email-edit::before {
-  content: "\FF00";
-}
-.mdi-email-edit-outline::before {
-  content: "\FF01";
-}
-.mdi-email-lock::before {
-  content: "\F1F1";
-}
-.mdi-email-mark-as-unread::before {
-  content: "\FB6E";
-}
-.mdi-email-minus::before {
-  content: "\FF02";
-}
-.mdi-email-minus-outline::before {
-  content: "\FF03";
-}
-.mdi-email-multiple::before {
-  content: "\FF04";
-}
-.mdi-email-multiple-outline::before {
-  content: "\FF05";
-}
-.mdi-email-open::before {
-  content: "\F1EF";
-}
-.mdi-email-open-multiple::before {
-  content: "\FF06";
-}
-.mdi-email-open-multiple-outline::before {
-  content: "\FF07";
-}
-.mdi-email-open-outline::before {
-  content: "\F5EF";
-}
-.mdi-email-outline::before {
-  content: "\F1F0";
-}
-.mdi-email-plus::before {
-  content: "\F9EA";
-}
-.mdi-email-plus-outline::before {
-  content: "\F9EB";
-}
-.mdi-email-search::before {
-  content: "\F960";
-}
-.mdi-email-search-outline::before {
-  content: "\F961";
-}
-.mdi-email-variant::before {
-  content: "\F5F0";
-}
-.mdi-ember::before {
-  content: "\FB15";
-}
-.mdi-emby::before {
-  content: "\F6B3";
-}
-.mdi-emoticon::before {
-  content: "\FC44";
-}
-.mdi-emoticon-angry::before {
-  content: "\FC45";
-}
-.mdi-emoticon-angry-outline::before {
-  content: "\FC46";
-}
-.mdi-emoticon-cool::before {
-  content: "\FC47";
-}
-.mdi-emoticon-cool-outline::before {
-  content: "\F1F3";
-}
-.mdi-emoticon-cry::before {
-  content: "\FC48";
-}
-.mdi-emoticon-cry-outline::before {
-  content: "\FC49";
-}
-.mdi-emoticon-dead::before {
-  content: "\FC4A";
-}
-.mdi-emoticon-dead-outline::before {
-  content: "\F69A";
-}
-.mdi-emoticon-devil::before {
-  content: "\FC4B";
-}
-.mdi-emoticon-devil-outline::before {
-  content: "\F1F4";
-}
-.mdi-emoticon-excited::before {
-  content: "\FC4C";
-}
-.mdi-emoticon-excited-outline::before {
-  content: "\F69B";
-}
-.mdi-emoticon-frown::before {
-  content: "\FF69";
-}
-.mdi-emoticon-frown-outline::before {
-  content: "\FF6A";
-}
-.mdi-emoticon-happy::before {
-  content: "\FC4D";
-}
-.mdi-emoticon-happy-outline::before {
-  content: "\F1F5";
-}
-.mdi-emoticon-kiss::before {
-  content: "\FC4E";
-}
-.mdi-emoticon-kiss-outline::before {
-  content: "\FC4F";
-}
-.mdi-emoticon-neutral::before {
-  content: "\FC50";
-}
-.mdi-emoticon-neutral-outline::before {
-  content: "\F1F6";
-}
-.mdi-emoticon-outline::before {
-  content: "\F1F2";
-}
-.mdi-emoticon-poop::before {
-  content: "\F1F7";
-}
-.mdi-emoticon-poop-outline::before {
-  content: "\FC51";
-}
-.mdi-emoticon-sad::before {
-  content: "\FC52";
-}
-.mdi-emoticon-sad-outline::before {
-  content: "\F1F8";
-}
-.mdi-emoticon-tongue::before {
-  content: "\F1F9";
-}
-.mdi-emoticon-tongue-outline::before {
-  content: "\FC53";
-}
-.mdi-emoticon-wink::before {
-  content: "\FC54";
-}
-.mdi-emoticon-wink-outline::before {
-  content: "\FC55";
-}
-.mdi-engine::before {
-  content: "\F1FA";
-}
-.mdi-engine-off::before {
-  content: "\FA45";
-}
-.mdi-engine-off-outline::before {
-  content: "\FA46";
-}
-.mdi-engine-outline::before {
-  content: "\F1FB";
-}
-.mdi-equal::before {
-  content: "\F1FC";
-}
-.mdi-equal-box::before {
-  content: "\F1FD";
-}
-.mdi-equalizer::before {
-  content: "\FEBF";
-}
-.mdi-equalizer-outline::before {
-  content: "\FEC0";
-}
-.mdi-eraser::before {
-  content: "\F1FE";
-}
-.mdi-eraser-variant::before {
-  content: "\F642";
-}
-.mdi-escalator::before {
-  content: "\F1FF";
-}
-.mdi-eslint::before {
-  content: "\FC56";
-}
-.mdi-et::before {
-  content: "\FAB2";
-}
-.mdi-ethereum::before {
-  content: "\F869";
-}
-.mdi-ethernet::before {
-  content: "\F200";
-}
-.mdi-ethernet-cable::before {
-  content: "\F201";
-}
-.mdi-ethernet-cable-off::before {
-  content: "\F202";
-}
-.mdi-etsy::before {
-  content: "\F203";
-}
-.mdi-ev-station::before {
-  content: "\F5F1";
-}
-.mdi-eventbrite::before {
-  content: "\F7C6";
-}
-.mdi-evernote::before {
-  content: "\F204";
-}
-.mdi-exclamation::before {
-  content: "\F205";
-}
-.mdi-exit-run::before {
-  content: "\FA47";
-}
-.mdi-exit-to-app::before {
-  content: "\F206";
-}
-.mdi-expand-all::before {
-  content: "\FAB3";
-}
-.mdi-expand-all-outline::before {
-  content: "\FAB4";
-}
-.mdi-exponent::before {
-  content: "\F962";
-}
-.mdi-exponent-box::before {
-  content: "\F963";
-}
-.mdi-export::before {
-  content: "\F207";
-}
-.mdi-export-variant::before {
-  content: "\FB6F";
-}
-.mdi-eye::before {
-  content: "\F208";
-}
-.mdi-eye-check::before {
-  content: "\FCE0";
-}
-.mdi-eye-check-outline::before {
-  content: "\FCE1";
-}
-.mdi-eye-circle::before {
-  content: "\FB70";
-}
-.mdi-eye-circle-outline::before {
-  content: "\FB71";
-}
-.mdi-eye-off::before {
-  content: "\F209";
-}
-.mdi-eye-off-outline::before {
-  content: "\F6D0";
-}
-.mdi-eye-outline::before {
-  content: "\F6CF";
-}
-.mdi-eye-plus::before {
-  content: "\F86A";
-}
-.mdi-eye-plus-outline::before {
-  content: "\F86B";
-}
-.mdi-eye-settings::before {
-  content: "\F86C";
-}
-.mdi-eye-settings-outline::before {
-  content: "\F86D";
-}
-.mdi-eyedropper::before {
-  content: "\F20A";
-}
-.mdi-eyedropper-variant::before {
-  content: "\F20B";
-}
-.mdi-face::before {
-  content: "\F643";
-}
-.mdi-face-agent::before {
-  content: "\FD4C";
-}
-.mdi-face-outline::before {
-  content: "\FB72";
-}
-.mdi-face-profile::before {
-  content: "\F644";
-}
-.mdi-face-recognition::before {
-  content: "\FC57";
-}
-.mdi-facebook::before {
-  content: "\F20C";
-}
-.mdi-facebook-box::before {
-  content: "\F20D";
-}
-.mdi-facebook-messenger::before {
-  content: "\F20E";
-}
-.mdi-facebook-workplace::before {
-  content: "\FB16";
-}
-.mdi-factory::before {
-  content: "\F20F";
-}
-.mdi-fan::before {
-  content: "\F210";
-}
-.mdi-fan-off::before {
-  content: "\F81C";
-}
-.mdi-fast-forward::before {
-  content: "\F211";
-}
-.mdi-fast-forward-10::before {
-  content: "\FD4D";
-}
-.mdi-fast-forward-30::before {
-  content: "\FCE2";
-}
-.mdi-fast-forward-outline::before {
-  content: "\F6D1";
-}
-.mdi-fax::before {
-  content: "\F212";
-}
-.mdi-feather::before {
-  content: "\F6D2";
-}
-.mdi-feature-search::before {
-  content: "\FA48";
-}
-.mdi-feature-search-outline::before {
-  content: "\FA49";
-}
-.mdi-fedora::before {
-  content: "\F8DA";
-}
-.mdi-ferris-wheel::before {
-  content: "\FEC1";
-}
-.mdi-ferry::before {
-  content: "\F213";
-}
-.mdi-file::before {
-  content: "\F214";
-}
-.mdi-file-account::before {
-  content: "\F73A";
-}
-.mdi-file-alert::before {
-  content: "\FA4A";
-}
-.mdi-file-alert-outline::before {
-  content: "\FA4B";
-}
-.mdi-file-cabinet::before {
-  content: "\FAB5";
-}
-.mdi-file-cad::before {
-  content: "\FF08";
-}
-.mdi-file-cad-box::before {
-  content: "\FF09";
-}
-.mdi-file-cancel::before {
-  content: "\FDA2";
-}
-.mdi-file-cancel-outline::before {
-  content: "\FDA3";
-}
-.mdi-file-chart::before {
-  content: "\F215";
-}
-.mdi-file-check::before {
-  content: "\F216";
-}
-.mdi-file-check-outline::before {
-  content: "\FE7B";
-}
-.mdi-file-cloud::before {
-  content: "\F217";
-}
-.mdi-file-compare::before {
-  content: "\F8A9";
-}
-.mdi-file-delimited::before {
-  content: "\F218";
-}
-.mdi-file-delimited-outline::before {
-  content: "\FEC2";
-}
-.mdi-file-document::before {
-  content: "\F219";
-}
-.mdi-file-document-box::before {
-  content: "\F21A";
-}
-.mdi-file-document-box-check::before {
-  content: "\FEC3";
-}
-.mdi-file-document-box-check-outline::before {
-  content: "\FEC4";
-}
-.mdi-file-document-box-minus::before {
-  content: "\FEC5";
-}
-.mdi-file-document-box-minus-outline::before {
-  content: "\FEC6";
-}
-.mdi-file-document-box-multiple::before {
-  content: "\FAB6";
-}
-.mdi-file-document-box-multiple-outline::before {
-  content: "\FAB7";
-}
-.mdi-file-document-box-outline::before {
-  content: "\F9EC";
-}
-.mdi-file-document-box-plus::before {
-  content: "\FEC7";
-}
-.mdi-file-document-box-plus-outline::before {
-  content: "\FEC8";
-}
-.mdi-file-document-box-remove::before {
-  content: "\FEC9";
-}
-.mdi-file-document-box-remove-outline::before {
-  content: "\FECA";
-}
-.mdi-file-document-box-search::before {
-  content: "\FECB";
-}
-.mdi-file-document-box-search-outline::before {
-  content: "\FECC";
-}
-.mdi-file-document-edit::before {
-  content: "\FDA4";
-}
-.mdi-file-document-edit-outline::before {
-  content: "\FDA5";
-}
-.mdi-file-document-outline::before {
-  content: "\F9ED";
-}
-.mdi-file-download::before {
-  content: "\F964";
-}
-.mdi-file-download-outline::before {
-  content: "\F965";
-}
-.mdi-file-excel::before {
-  content: "\F21B";
-}
-.mdi-file-excel-box::before {
-  content: "\F21C";
-}
-.mdi-file-export::before {
-  content: "\F21D";
-}
-.mdi-file-eye::before {
-  content: "\FDA6";
-}
-.mdi-file-eye-outline::before {
-  content: "\FDA7";
-}
-.mdi-file-find::before {
-  content: "\F21E";
-}
-.mdi-file-find-outline::before {
-  content: "\FB73";
-}
-.mdi-file-hidden::before {
-  content: "\F613";
-}
-.mdi-file-image::before {
-  content: "\F21F";
-}
-.mdi-file-image-outline::before {
-  content: "\FECD";
-}
-.mdi-file-import::before {
-  content: "\F220";
-}
-.mdi-file-lock::before {
-  content: "\F221";
-}
-.mdi-file-move::before {
-  content: "\FAB8";
-}
-.mdi-file-multiple::before {
-  content: "\F222";
-}
-.mdi-file-music::before {
-  content: "\F223";
-}
-.mdi-file-music-outline::before {
-  content: "\FE7C";
-}
-.mdi-file-outline::before {
-  content: "\F224";
-}
-.mdi-file-pdf::before {
-  content: "\F225";
-}
-.mdi-file-pdf-box::before {
-  content: "\F226";
-}
-.mdi-file-pdf-outline::before {
-  content: "\FE7D";
-}
-.mdi-file-percent::before {
-  content: "\F81D";
-}
-.mdi-file-plus::before {
-  content: "\F751";
-}
-.mdi-file-plus-outline::before {
-  content: "\FF0A";
-}
-.mdi-file-powerpoint::before {
-  content: "\F227";
-}
-.mdi-file-powerpoint-box::before {
-  content: "\F228";
-}
-.mdi-file-presentation-box::before {
-  content: "\F229";
-}
-.mdi-file-question::before {
-  content: "\F86E";
-}
-.mdi-file-remove::before {
-  content: "\FB74";
-}
-.mdi-file-replace::before {
-  content: "\FB17";
-}
-.mdi-file-replace-outline::before {
-  content: "\FB18";
-}
-.mdi-file-restore::before {
-  content: "\F670";
-}
-.mdi-file-search::before {
-  content: "\FC58";
-}
-.mdi-file-search-outline::before {
-  content: "\FC59";
-}
-.mdi-file-send::before {
-  content: "\F22A";
-}
-.mdi-file-table::before {
-  content: "\FC5A";
-}
-.mdi-file-table-outline::before {
-  content: "\FC5B";
-}
-.mdi-file-tree::before {
-  content: "\F645";
-}
-.mdi-file-undo::before {
-  content: "\F8DB";
-}
-.mdi-file-upload::before {
-  content: "\FA4C";
-}
-.mdi-file-upload-outline::before {
-  content: "\FA4D";
-}
-.mdi-file-video::before {
-  content: "\F22B";
-}
-.mdi-file-video-outline::before {
-  content: "\FE10";
-}
-.mdi-file-word::before {
-  content: "\F22C";
-}
-.mdi-file-word-box::before {
-  content: "\F22D";
-}
-.mdi-file-xml::before {
-  content: "\F22E";
-}
-.mdi-film::before {
-  content: "\F22F";
-}
-.mdi-filmstrip::before {
-  content: "\F230";
-}
-.mdi-filmstrip-off::before {
-  content: "\F231";
-}
-.mdi-filter::before {
-  content: "\F232";
-}
-.mdi-filter-minus::before {
-  content: "\FF0B";
-}
-.mdi-filter-minus-outline::before {
-  content: "\FF0C";
-}
-.mdi-filter-outline::before {
-  content: "\F233";
-}
-.mdi-filter-plus::before {
-  content: "\FF0D";
-}
-.mdi-filter-plus-outline::before {
-  content: "\FF0E";
-}
-.mdi-filter-remove::before {
-  content: "\F234";
-}
-.mdi-filter-remove-outline::before {
-  content: "\F235";
-}
-.mdi-filter-variant::before {
-  content: "\F236";
-}
-.mdi-finance::before {
-  content: "\F81E";
-}
-.mdi-find-replace::before {
-  content: "\F6D3";
-}
-.mdi-fingerprint::before {
-  content: "\F237";
-}
-.mdi-fingerprint-off::before {
-  content: "\FECE";
-}
-.mdi-fire::before {
-  content: "\F238";
-}
-.mdi-fire-extinguisher::before {
-  content: "\FF0F";
-}
-.mdi-fire-truck::before {
-  content: "\F8AA";
-}
-.mdi-firebase::before {
-  content: "\F966";
-}
-.mdi-firefox::before {
-  content: "\F239";
-}
-.mdi-fireplace::before {
-  content: "\FE11";
-}
-.mdi-fireplace-off::before {
-  content: "\FE12";
-}
-.mdi-firework::before {
-  content: "\FE13";
-}
-.mdi-fish::before {
-  content: "\F23A";
-}
-.mdi-fishbowl::before {
-  content: "\FF10";
-}
-.mdi-fishbowl-outline::before {
-  content: "\FF11";
-}
-.mdi-fit-to-page::before {
-  content: "\FF12";
-}
-.mdi-fit-to-page-outline::before {
-  content: "\FF13";
-}
-.mdi-flag::before {
-  content: "\F23B";
-}
-.mdi-flag-checkered::before {
-  content: "\F23C";
-}
-.mdi-flag-minus::before {
-  content: "\FB75";
-}
-.mdi-flag-outline::before {
-  content: "\F23D";
-}
-.mdi-flag-plus::before {
-  content: "\FB76";
-}
-.mdi-flag-remove::before {
-  content: "\FB77";
-}
-.mdi-flag-triangle::before {
-  content: "\F23F";
-}
-.mdi-flag-variant::before {
-  content: "\F240";
-}
-.mdi-flag-variant-outline::before {
-  content: "\F23E";
-}
-.mdi-flare::before {
-  content: "\FD4E";
-}
-.mdi-flash::before {
-  content: "\F241";
-}
-.mdi-flash-alert::before {
-  content: "\FF14";
-}
-.mdi-flash-alert-outline::before {
-  content: "\FF15";
-}
-.mdi-flash-auto::before {
-  content: "\F242";
-}
-.mdi-flash-circle::before {
-  content: "\F81F";
-}
-.mdi-flash-off::before {
-  content: "\F243";
-}
-.mdi-flash-outline::before {
-  content: "\F6D4";
-}
-.mdi-flash-red-eye::before {
-  content: "\F67A";
-}
-.mdi-flashlight::before {
-  content: "\F244";
-}
-.mdi-flashlight-off::before {
-  content: "\F245";
-}
-.mdi-flask::before {
-  content: "\F093";
-}
-.mdi-flask-empty::before {
-  content: "\F094";
-}
-.mdi-flask-empty-outline::before {
-  content: "\F095";
-}
-.mdi-flask-outline::before {
-  content: "\F096";
-}
-.mdi-flattr::before {
-  content: "\F246";
-}
-.mdi-flickr::before {
-  content: "\FCE3";
-}
-.mdi-flip-to-back::before {
-  content: "\F247";
-}
-.mdi-flip-to-front::before {
-  content: "\F248";
-}
-.mdi-floor-lamp::before {
-  content: "\F8DC";
-}
-.mdi-floor-plan::before {
-  content: "\F820";
-}
-.mdi-floppy::before {
-  content: "\F249";
-}
-.mdi-floppy-variant::before {
-  content: "\F9EE";
-}
-.mdi-flower::before {
-  content: "\F24A";
-}
-.mdi-flower-outline::before {
-  content: "\F9EF";
-}
-.mdi-flower-poppy::before {
-  content: "\FCE4";
-}
-.mdi-flower-tulip::before {
-  content: "\F9F0";
-}
-.mdi-flower-tulip-outline::before {
-  content: "\F9F1";
-}
-.mdi-focus-auto::before {
-  content: "\FF6B";
-}
-.mdi-focus-field::before {
-  content: "\FF6C";
-}
-.mdi-focus-field-horizontal::before {
-  content: "\FF6D";
-}
-.mdi-focus-field-vertical::before {
-  content: "\FF6E";
-}
-.mdi-folder::before {
-  content: "\F24B";
-}
-.mdi-folder-account::before {
-  content: "\F24C";
-}
-.mdi-folder-account-outline::before {
-  content: "\FB78";
-}
-.mdi-folder-alert::before {
-  content: "\FDA8";
-}
-.mdi-folder-alert-outline::before {
-  content: "\FDA9";
-}
-.mdi-folder-clock::before {
-  content: "\FAB9";
-}
-.mdi-folder-clock-outline::before {
-  content: "\FABA";
-}
-.mdi-folder-download::before {
-  content: "\F24D";
-}
-.mdi-folder-edit::before {
-  content: "\F8DD";
-}
-.mdi-folder-edit-outline::before {
-  content: "\FDAA";
-}
-.mdi-folder-google-drive::before {
-  content: "\F24E";
-}
-.mdi-folder-image::before {
-  content: "\F24F";
-}
-.mdi-folder-key::before {
-  content: "\F8AB";
-}
-.mdi-folder-key-network::before {
-  content: "\F8AC";
-}
-.mdi-folder-key-network-outline::before {
-  content: "\FC5C";
-}
-.mdi-folder-lock::before {
-  content: "\F250";
-}
-.mdi-folder-lock-open::before {
-  content: "\F251";
-}
-.mdi-folder-move::before {
-  content: "\F252";
-}
-.mdi-folder-multiple::before {
-  content: "\F253";
-}
-.mdi-folder-multiple-image::before {
-  content: "\F254";
-}
-.mdi-folder-multiple-outline::before {
-  content: "\F255";
-}
-.mdi-folder-network::before {
-  content: "\F86F";
-}
-.mdi-folder-network-outline::before {
-  content: "\FC5D";
-}
-.mdi-folder-open::before {
-  content: "\F76F";
-}
-.mdi-folder-open-outline::before {
-  content: "\FDAB";
-}
-.mdi-folder-outline::before {
-  content: "\F256";
-}
-.mdi-folder-plus::before {
-  content: "\F257";
-}
-.mdi-folder-plus-outline::before {
-  content: "\FB79";
-}
-.mdi-folder-pound::before {
-  content: "\FCE5";
-}
-.mdi-folder-pound-outline::before {
-  content: "\FCE6";
-}
-.mdi-folder-remove::before {
-  content: "\F258";
-}
-.mdi-folder-remove-outline::before {
-  content: "\FB7A";
-}
-.mdi-folder-search::before {
-  content: "\F967";
-}
-.mdi-folder-search-outline::before {
-  content: "\F968";
-}
-.mdi-folder-star::before {
-  content: "\F69C";
-}
-.mdi-folder-star-outline::before {
-  content: "\FB7B";
-}
-.mdi-folder-sync::before {
-  content: "\FCE7";
-}
-.mdi-folder-sync-outline::before {
-  content: "\FCE8";
-}
-.mdi-folder-text::before {
-  content: "\FC5E";
-}
-.mdi-folder-text-outline::before {
-  content: "\FC5F";
-}
-.mdi-folder-upload::before {
-  content: "\F259";
-}
-.mdi-font-awesome::before {
-  content: "\F03A";
-}
-.mdi-food::before {
-  content: "\F25A";
-}
-.mdi-food-apple::before {
-  content: "\F25B";
-}
-.mdi-food-apple-outline::before {
-  content: "\FC60";
-}
-.mdi-food-croissant::before {
-  content: "\F7C7";
-}
-.mdi-food-fork-drink::before {
-  content: "\F5F2";
-}
-.mdi-food-off::before {
-  content: "\F5F3";
-}
-.mdi-food-variant::before {
-  content: "\F25C";
-}
-.mdi-foot-print::before {
-  content: "\FF6F";
-}
-.mdi-football::before {
-  content: "\F25D";
-}
-.mdi-football-australian::before {
-  content: "\F25E";
-}
-.mdi-football-helmet::before {
-  content: "\F25F";
-}
-.mdi-forklift::before {
-  content: "\F7C8";
-}
-.mdi-format-align-bottom::before {
-  content: "\F752";
-}
-.mdi-format-align-center::before {
-  content: "\F260";
-}
-.mdi-format-align-justify::before {
-  content: "\F261";
-}
-.mdi-format-align-left::before {
-  content: "\F262";
-}
-.mdi-format-align-middle::before {
-  content: "\F753";
-}
-.mdi-format-align-right::before {
-  content: "\F263";
-}
-.mdi-format-align-top::before {
-  content: "\F754";
-}
-.mdi-format-annotation-minus::before {
-  content: "\FABB";
-}
-.mdi-format-annotation-plus::before {
-  content: "\F646";
-}
-.mdi-format-bold::before {
-  content: "\F264";
-}
-.mdi-format-clear::before {
-  content: "\F265";
-}
-.mdi-format-color-fill::before {
-  content: "\F266";
-}
-.mdi-format-color-highlight::before {
-  content: "\FE14";
-}
-.mdi-format-color-text::before {
-  content: "\F69D";
-}
-.mdi-format-columns::before {
-  content: "\F8DE";
-}
-.mdi-format-float-center::before {
-  content: "\F267";
-}
-.mdi-format-float-left::before {
-  content: "\F268";
-}
-.mdi-format-float-none::before {
-  content: "\F269";
-}
-.mdi-format-float-right::before {
-  content: "\F26A";
-}
-.mdi-format-font::before {
-  content: "\F6D5";
-}
-.mdi-format-font-size-decrease::before {
-  content: "\F9F2";
-}
-.mdi-format-font-size-increase::before {
-  content: "\F9F3";
-}
-.mdi-format-header-1::before {
-  content: "\F26B";
-}
-.mdi-format-header-2::before {
-  content: "\F26C";
-}
-.mdi-format-header-3::before {
-  content: "\F26D";
-}
-.mdi-format-header-4::before {
-  content: "\F26E";
-}
-.mdi-format-header-5::before {
-  content: "\F26F";
-}
-.mdi-format-header-6::before {
-  content: "\F270";
-}
-.mdi-format-header-decrease::before {
-  content: "\F271";
-}
-.mdi-format-header-equal::before {
-  content: "\F272";
-}
-.mdi-format-header-increase::before {
-  content: "\F273";
-}
-.mdi-format-header-pound::before {
-  content: "\F274";
-}
-.mdi-format-horizontal-align-center::before {
-  content: "\F61E";
-}
-.mdi-format-horizontal-align-left::before {
-  content: "\F61F";
-}
-.mdi-format-horizontal-align-right::before {
-  content: "\F620";
-}
-.mdi-format-indent-decrease::before {
-  content: "\F275";
-}
-.mdi-format-indent-increase::before {
-  content: "\F276";
-}
-.mdi-format-italic::before {
-  content: "\F277";
-}
-.mdi-format-letter-case::before {
-  content: "\FB19";
-}
-.mdi-format-letter-case-lower::before {
-  content: "\FB1A";
-}
-.mdi-format-letter-case-upper::before {
-  content: "\FB1B";
-}
-.mdi-format-line-spacing::before {
-  content: "\F278";
-}
-.mdi-format-line-style::before {
-  content: "\F5C8";
-}
-.mdi-format-line-weight::before {
-  content: "\F5C9";
-}
-.mdi-format-list-bulleted::before {
-  content: "\F279";
-}
-.mdi-format-list-bulleted-square::before {
-  content: "\FDAC";
-}
-.mdi-format-list-bulleted-type::before {
-  content: "\F27A";
-}
-.mdi-format-list-checkbox::before {
-  content: "\F969";
-}
-.mdi-format-list-checks::before {
-  content: "\F755";
-}
-.mdi-format-list-numbered::before {
-  content: "\F27B";
-}
-.mdi-format-list-numbered-rtl::before {
-  content: "\FCE9";
-}
-.mdi-format-list-triangle::before {
-  content: "\FECF";
-}
-.mdi-format-overline::before {
-  content: "\FED0";
-}
-.mdi-format-page-break::before {
-  content: "\F6D6";
-}
-.mdi-format-paint::before {
-  content: "\F27C";
-}
-.mdi-format-paragraph::before {
-  content: "\F27D";
-}
-.mdi-format-pilcrow::before {
-  content: "\F6D7";
-}
-.mdi-format-quote-close::before {
-  content: "\F27E";
-}
-.mdi-format-quote-open::before {
-  content: "\F756";
-}
-.mdi-format-rotate-90::before {
-  content: "\F6A9";
-}
-.mdi-format-section::before {
-  content: "\F69E";
-}
-.mdi-format-size::before {
-  content: "\F27F";
-}
-.mdi-format-strikethrough::before {
-  content: "\F280";
-}
-.mdi-format-strikethrough-variant::before {
-  content: "\F281";
-}
-.mdi-format-subscript::before {
-  content: "\F282";
-}
-.mdi-format-superscript::before {
-  content: "\F283";
-}
-.mdi-format-text::before {
-  content: "\F284";
-}
-.mdi-format-text-rotation-down::before {
-  content: "\FD4F";
-}
-.mdi-format-text-rotation-none::before {
-  content: "\FD50";
-}
-.mdi-format-text-variant::before {
-  content: "\FE15";
-}
-.mdi-format-text-wrapping-clip::before {
-  content: "\FCEA";
-}
-.mdi-format-text-wrapping-overflow::before {
-  content: "\FCEB";
-}
-.mdi-format-text-wrapping-wrap::before {
-  content: "\FCEC";
-}
-.mdi-format-textbox::before {
-  content: "\FCED";
-}
-.mdi-format-textdirection-l-to-r::before {
-  content: "\F285";
-}
-.mdi-format-textdirection-r-to-l::before {
-  content: "\F286";
-}
-.mdi-format-title::before {
-  content: "\F5F4";
-}
-.mdi-format-underline::before {
-  content: "\F287";
-}
-.mdi-format-vertical-align-bottom::before {
-  content: "\F621";
-}
-.mdi-format-vertical-align-center::before {
-  content: "\F622";
-}
-.mdi-format-vertical-align-top::before {
-  content: "\F623";
-}
-.mdi-format-wrap-inline::before {
-  content: "\F288";
-}
-.mdi-format-wrap-square::before {
-  content: "\F289";
-}
-.mdi-format-wrap-tight::before {
-  content: "\F28A";
-}
-.mdi-format-wrap-top-bottom::before {
-  content: "\F28B";
-}
-.mdi-forum::before {
-  content: "\F28C";
-}
-.mdi-forum-outline::before {
-  content: "\F821";
-}
-.mdi-forward::before {
-  content: "\F28D";
-}
-.mdi-forwardburger::before {
-  content: "\FD51";
-}
-.mdi-fountain::before {
-  content: "\F96A";
-}
-.mdi-fountain-pen::before {
-  content: "\FCEE";
-}
-.mdi-fountain-pen-tip::before {
-  content: "\FCEF";
-}
-.mdi-foursquare::before {
-  content: "\F28E";
-}
-.mdi-freebsd::before {
-  content: "\F8DF";
-}
-.mdi-frequently-asked-questions::before {
-  content: "\FED1";
-}
-.mdi-fridge::before {
-  content: "\F290";
-}
-.mdi-fridge-bottom::before {
-  content: "\F292";
-}
-.mdi-fridge-outline::before {
-  content: "\F28F";
-}
-.mdi-fridge-top::before {
-  content: "\F291";
-}
-.mdi-fuel::before {
-  content: "\F7C9";
-}
-.mdi-fullscreen::before {
-  content: "\F293";
-}
-.mdi-fullscreen-exit::before {
-  content: "\F294";
-}
-.mdi-function::before {
-  content: "\F295";
-}
-.mdi-function-variant::before {
-  content: "\F870";
-}
-.mdi-fuse::before {
-  content: "\FC61";
-}
-.mdi-fuse-blade::before {
-  content: "\FC62";
-}
-.mdi-gamepad::before {
-  content: "\F296";
-}
-.mdi-gamepad-circle::before {
-  content: "\FE16";
-}
-.mdi-gamepad-circle-down::before {
-  content: "\FE17";
-}
-.mdi-gamepad-circle-left::before {
-  content: "\FE18";
-}
-.mdi-gamepad-circle-outline::before {
-  content: "\FE19";
-}
-.mdi-gamepad-circle-right::before {
-  content: "\FE1A";
-}
-.mdi-gamepad-circle-up::before {
-  content: "\FE1B";
-}
-.mdi-gamepad-down::before {
-  content: "\FE1C";
-}
-.mdi-gamepad-left::before {
-  content: "\FE1D";
-}
-.mdi-gamepad-right::before {
-  content: "\FE1E";
-}
-.mdi-gamepad-round::before {
-  content: "\FE1F";
-}
-.mdi-gamepad-round-down::before {
-  content: "\FE7E";
-}
-.mdi-gamepad-round-left::before {
-  content: "\FE7F";
-}
-.mdi-gamepad-round-outline::before {
-  content: "\FE80";
-}
-.mdi-gamepad-round-right::before {
-  content: "\FE81";
-}
-.mdi-gamepad-round-up::before {
-  content: "\FE82";
-}
-.mdi-gamepad-square::before {
-  content: "\FED2";
-}
-.mdi-gamepad-square-outline::before {
-  content: "\FED3";
-}
-.mdi-gamepad-up::before {
-  content: "\FE83";
-}
-.mdi-gamepad-variant::before {
-  content: "\F297";
-}
-.mdi-gamepad-variant-outline::before {
-  content: "\FED4";
-}
-.mdi-gantry-crane::before {
-  content: "\FDAD";
-}
-.mdi-garage::before {
-  content: "\F6D8";
-}
-.mdi-garage-alert::before {
-  content: "\F871";
-}
-.mdi-garage-open::before {
-  content: "\F6D9";
-}
-.mdi-gas-cylinder::before {
-  content: "\F647";
-}
-.mdi-gas-station::before {
-  content: "\F298";
-}
-.mdi-gas-station-outline::before {
-  content: "\FED5";
-}
-.mdi-gate::before {
-  content: "\F299";
-}
-.mdi-gate-and::before {
-  content: "\F8E0";
-}
-.mdi-gate-nand::before {
-  content: "\F8E1";
-}
-.mdi-gate-nor::before {
-  content: "\F8E2";
-}
-.mdi-gate-not::before {
-  content: "\F8E3";
-}
-.mdi-gate-or::before {
-  content: "\F8E4";
-}
-.mdi-gate-xnor::before {
-  content: "\F8E5";
-}
-.mdi-gate-xor::before {
-  content: "\F8E6";
-}
-.mdi-gatsby::before {
-  content: "\FE84";
-}
-.mdi-gauge::before {
-  content: "\F29A";
-}
-.mdi-gauge-empty::before {
-  content: "\F872";
-}
-.mdi-gauge-full::before {
-  content: "\F873";
-}
-.mdi-gauge-low::before {
-  content: "\F874";
-}
-.mdi-gavel::before {
-  content: "\F29B";
-}
-.mdi-gender-female::before {
-  content: "\F29C";
-}
-.mdi-gender-male::before {
-  content: "\F29D";
-}
-.mdi-gender-male-female::before {
-  content: "\F29E";
-}
-.mdi-gender-transgender::before {
-  content: "\F29F";
-}
-.mdi-gentoo::before {
-  content: "\F8E7";
-}
-.mdi-gesture::before {
-  content: "\F7CA";
-}
-.mdi-gesture-double-tap::before {
-  content: "\F73B";
-}
-.mdi-gesture-pinch::before {
-  content: "\FABC";
-}
-.mdi-gesture-spread::before {
-  content: "\FABD";
-}
-.mdi-gesture-swipe::before {
-  content: "\FD52";
-}
-.mdi-gesture-swipe-down::before {
-  content: "\F73C";
-}
-.mdi-gesture-swipe-horizontal::before {
-  content: "\FABE";
-}
-.mdi-gesture-swipe-left::before {
-  content: "\F73D";
-}
-.mdi-gesture-swipe-right::before {
-  content: "\F73E";
-}
-.mdi-gesture-swipe-up::before {
-  content: "\F73F";
-}
-.mdi-gesture-swipe-vertical::before {
-  content: "\FABF";
-}
-.mdi-gesture-tap::before {
-  content: "\F740";
-}
-.mdi-gesture-tap-hold::before {
-  content: "\FD53";
-}
-.mdi-gesture-two-double-tap::before {
-  content: "\F741";
-}
-.mdi-gesture-two-tap::before {
-  content: "\F742";
-}
-.mdi-ghost::before {
-  content: "\F2A0";
-}
-.mdi-ghost-off::before {
-  content: "\F9F4";
-}
-.mdi-gif::before {
-  content: "\FD54";
-}
-.mdi-gift::before {
-  content: "\FE85";
-}
-.mdi-gift-outline::before {
-  content: "\F2A1";
-}
-.mdi-git::before {
-  content: "\F2A2";
-}
-.mdi-github-box::before {
-  content: "\F2A3";
-}
-.mdi-github-circle::before {
-  content: "\F2A4";
-}
-.mdi-github-face::before {
-  content: "\F6DA";
-}
-.mdi-gitlab::before {
-  content: "\FB7C";
-}
-.mdi-glass-cocktail::before {
-  content: "\F356";
-}
-.mdi-glass-flute::before {
-  content: "\F2A5";
-}
-.mdi-glass-mug::before {
-  content: "\F2A6";
-}
-.mdi-glass-stange::before {
-  content: "\F2A7";
-}
-.mdi-glass-tulip::before {
-  content: "\F2A8";
-}
-.mdi-glass-wine::before {
-  content: "\F875";
-}
-.mdi-glassdoor::before {
-  content: "\F2A9";
-}
-.mdi-glasses::before {
-  content: "\F2AA";
-}
-.mdi-globe-model::before {
-  content: "\F8E8";
-}
-.mdi-gmail::before {
-  content: "\F2AB";
-}
-.mdi-gnome::before {
-  content: "\F2AC";
-}
-.mdi-go-kart::before {
-  content: "\FD55";
-}
-.mdi-go-kart-track::before {
-  content: "\FD56";
-}
-.mdi-gog::before {
-  content: "\FB7D";
-}
-.mdi-golf::before {
-  content: "\F822";
-}
-.mdi-gondola::before {
-  content: "\F685";
-}
-.mdi-goodreads::before {
-  content: "\FD57";
-}
-.mdi-google::before {
-  content: "\F2AD";
-}
-.mdi-google-adwords::before {
-  content: "\FC63";
-}
-.mdi-google-allo::before {
-  content: "\F801";
-}
-.mdi-google-analytics::before {
-  content: "\F7CB";
-}
-.mdi-google-assistant::before {
-  content: "\F7CC";
-}
-.mdi-google-cardboard::before {
-  content: "\F2AE";
-}
-.mdi-google-chrome::before {
-  content: "\F2AF";
-}
-.mdi-google-circles::before {
-  content: "\F2B0";
-}
-.mdi-google-circles-communities::before {
-  content: "\F2B1";
-}
-.mdi-google-circles-extended::before {
-  content: "\F2B2";
-}
-.mdi-google-circles-group::before {
-  content: "\F2B3";
-}
-.mdi-google-classroom::before {
-  content: "\F2C0";
-}
-.mdi-google-controller::before {
-  content: "\F2B4";
-}
-.mdi-google-controller-off::before {
-  content: "\F2B5";
-}
-.mdi-google-drive::before {
-  content: "\F2B6";
-}
-.mdi-google-earth::before {
-  content: "\F2B7";
-}
-.mdi-google-fit::before {
-  content: "\F96B";
-}
-.mdi-google-glass::before {
-  content: "\F2B8";
-}
-.mdi-google-hangouts::before {
-  content: "\F2C9";
-}
-.mdi-google-home::before {
-  content: "\F823";
-}
-.mdi-google-keep::before {
-  content: "\F6DB";
-}
-.mdi-google-lens::before {
-  content: "\F9F5";
-}
-.mdi-google-maps::before {
-  content: "\F5F5";
-}
-.mdi-google-nearby::before {
-  content: "\F2B9";
-}
-.mdi-google-pages::before {
-  content: "\F2BA";
-}
-.mdi-google-photos::before {
-  content: "\F6DC";
-}
-.mdi-google-physical-web::before {
-  content: "\F2BB";
-}
-.mdi-google-play::before {
-  content: "\F2BC";
-}
-.mdi-google-plus::before {
-  content: "\F2BD";
-}
-.mdi-google-plus-box::before {
-  content: "\F2BE";
-}
-.mdi-google-podcast::before {
-  content: "\FED6";
-}
-.mdi-google-spreadsheet::before {
-  content: "\F9F6";
-}
-.mdi-google-street-view::before {
-  content: "\FC64";
-}
-.mdi-google-translate::before {
-  content: "\F2BF";
-}
-.mdi-gpu::before {
-  content: "\F8AD";
-}
-.mdi-gradient::before {
-  content: "\F69F";
-}
-.mdi-grain::before {
-  content: "\FD58";
-}
-.mdi-graphql::before {
-  content: "\F876";
-}
-.mdi-grave-stone::before {
-  content: "\FB7E";
-}
-.mdi-grease-pencil::before {
-  content: "\F648";
-}
-.mdi-greater-than::before {
-  content: "\F96C";
-}
-.mdi-greater-than-or-equal::before {
-  content: "\F96D";
-}
-.mdi-grid::before {
-  content: "\F2C1";
-}
-.mdi-grid-large::before {
-  content: "\F757";
-}
-.mdi-grid-off::before {
-  content: "\F2C2";
-}
-.mdi-grill::before {
-  content: "\FE86";
-}
-.mdi-group::before {
-  content: "\F2C3";
-}
-.mdi-guitar-acoustic::before {
-  content: "\F770";
-}
-.mdi-guitar-electric::before {
-  content: "\F2C4";
-}
-.mdi-guitar-pick::before {
-  content: "\F2C5";
-}
-.mdi-guitar-pick-outline::before {
-  content: "\F2C6";
-}
-.mdi-guy-fawkes-mask::before {
-  content: "\F824";
-}
-.mdi-hackernews::before {
-  content: "\F624";
-}
-.mdi-hail::before {
-  content: "\FAC0";
-}
-.mdi-halloween::before {
-  content: "\FB7F";
-}
-.mdi-hamburger::before {
-  content: "\F684";
-}
-.mdi-hammer::before {
-  content: "\F8E9";
-}
-.mdi-hand::before {
-  content: "\FA4E";
-}
-.mdi-hand-left::before {
-  content: "\FE87";
-}
-.mdi-hand-okay::before {
-  content: "\FA4F";
-}
-.mdi-hand-peace::before {
-  content: "\FA50";
-}
-.mdi-hand-peace-variant::before {
-  content: "\FA51";
-}
-.mdi-hand-pointing-down::before {
-  content: "\FA52";
-}
-.mdi-hand-pointing-left::before {
-  content: "\FA53";
-}
-.mdi-hand-pointing-right::before {
-  content: "\F2C7";
-}
-.mdi-hand-pointing-up::before {
-  content: "\FA54";
-}
-.mdi-hand-right::before {
-  content: "\FE88";
-}
-.mdi-hand-saw::before {
-  content: "\FE89";
-}
-.mdi-handball::before {
-  content: "\FF70";
-}
-.mdi-hanger::before {
-  content: "\F2C8";
-}
-.mdi-hard-hat::before {
-  content: "\F96E";
-}
-.mdi-harddisk::before {
-  content: "\F2CA";
-}
-.mdi-hat-fedora::before {
-  content: "\FB80";
-}
-.mdi-hazard-lights::before {
-  content: "\FC65";
-}
-.mdi-hdr::before {
-  content: "\FD59";
-}
-.mdi-hdr-off::before {
-  content: "\FD5A";
-}
-.mdi-headphones::before {
-  content: "\F2CB";
-}
-.mdi-headphones-bluetooth::before {
-  content: "\F96F";
-}
-.mdi-headphones-box::before {
-  content: "\F2CC";
-}
-.mdi-headphones-off::before {
-  content: "\F7CD";
-}
-.mdi-headphones-settings::before {
-  content: "\F2CD";
-}
-.mdi-headset::before {
-  content: "\F2CE";
-}
-.mdi-headset-dock::before {
-  content: "\F2CF";
-}
-.mdi-headset-off::before {
-  content: "\F2D0";
-}
-.mdi-heart::before {
-  content: "\F2D1";
-}
-.mdi-heart-box::before {
-  content: "\F2D2";
-}
-.mdi-heart-box-outline::before {
-  content: "\F2D3";
-}
-.mdi-heart-broken::before {
-  content: "\F2D4";
-}
-.mdi-heart-broken-outline::before {
-  content: "\FCF0";
-}
-.mdi-heart-circle::before {
-  content: "\F970";
-}
-.mdi-heart-circle-outline::before {
-  content: "\F971";
-}
-.mdi-heart-flash::before {
-  content: "\FF16";
-}
-.mdi-heart-half::before {
-  content: "\F6DE";
-}
-.mdi-heart-half-full::before {
-  content: "\F6DD";
-}
-.mdi-heart-half-outline::before {
-  content: "\F6DF";
-}
-.mdi-heart-multiple::before {
-  content: "\FA55";
-}
-.mdi-heart-multiple-outline::before {
-  content: "\FA56";
-}
-.mdi-heart-off::before {
-  content: "\F758";
-}
-.mdi-heart-outline::before {
-  content: "\F2D5";
-}
-.mdi-heart-pulse::before {
-  content: "\F5F6";
-}
-.mdi-helicopter::before {
-  content: "\FAC1";
-}
-.mdi-help::before {
-  content: "\F2D6";
-}
-.mdi-help-box::before {
-  content: "\F78A";
-}
-.mdi-help-circle::before {
-  content: "\F2D7";
-}
-.mdi-help-circle-outline::before {
-  content: "\F625";
-}
-.mdi-help-network::before {
-  content: "\F6F4";
-}
-.mdi-help-network-outline::before {
-  content: "\FC66";
-}
-.mdi-help-rhombus::before {
-  content: "\FB81";
-}
-.mdi-help-rhombus-outline::before {
-  content: "\FB82";
-}
-.mdi-hexagon::before {
-  content: "\F2D8";
-}
-.mdi-hexagon-multiple::before {
-  content: "\F6E0";
-}
-.mdi-hexagon-outline::before {
-  content: "\F2D9";
-}
-.mdi-hexagon-slice-1::before {
-  content: "\FAC2";
-}
-.mdi-hexagon-slice-2::before {
-  content: "\FAC3";
-}
-.mdi-hexagon-slice-3::before {
-  content: "\FAC4";
-}
-.mdi-hexagon-slice-4::before {
-  content: "\FAC5";
-}
-.mdi-hexagon-slice-5::before {
-  content: "\FAC6";
-}
-.mdi-hexagon-slice-6::before {
-  content: "\FAC7";
-}
-.mdi-hexagram::before {
-  content: "\FAC8";
-}
-.mdi-hexagram-outline::before {
-  content: "\FAC9";
-}
-.mdi-high-definition::before {
-  content: "\F7CE";
-}
-.mdi-high-definition-box::before {
-  content: "\F877";
-}
-.mdi-highway::before {
-  content: "\F5F7";
-}
-.mdi-hiking::before {
-  content: "\FD5B";
-}
-.mdi-hinduism::before {
-  content: "\F972";
-}
-.mdi-history::before {
-  content: "\F2DA";
-}
-.mdi-hockey-puck::before {
-  content: "\F878";
-}
-.mdi-hockey-sticks::before {
-  content: "\F879";
-}
-.mdi-hololens::before {
-  content: "\F2DB";
-}
-.mdi-home::before {
-  content: "\F2DC";
-}
-.mdi-home-account::before {
-  content: "\F825";
-}
-.mdi-home-alert::before {
-  content: "\F87A";
-}
-.mdi-home-analytics::before {
-  content: "\FED7";
-}
-.mdi-home-assistant::before {
-  content: "\F7CF";
-}
-.mdi-home-automation::before {
-  content: "\F7D0";
-}
-.mdi-home-circle::before {
-  content: "\F7D1";
-}
-.mdi-home-city::before {
-  content: "\FCF1";
-}
-.mdi-home-city-outline::before {
-  content: "\FCF2";
-}
-.mdi-home-currency-usd::before {
-  content: "\F8AE";
-}
-.mdi-home-export-outline::before {
-  content: "\FFB8";
-}
-.mdi-home-flood::before {
-  content: "\FF17";
-}
-.mdi-home-floor-0::before {
-  content: "\FDAE";
-}
-.mdi-home-floor-1::before {
-  content: "\FD5C";
-}
-.mdi-home-floor-2::before {
-  content: "\FD5D";
-}
-.mdi-home-floor-3::before {
-  content: "\FD5E";
-}
-.mdi-home-floor-a::before {
-  content: "\FD5F";
-}
-.mdi-home-floor-b::before {
-  content: "\FD60";
-}
-.mdi-home-floor-g::before {
-  content: "\FD61";
-}
-.mdi-home-floor-l::before {
-  content: "\FD62";
-}
-.mdi-home-floor-negative-1::before {
-  content: "\FDAF";
-}
-.mdi-home-group::before {
-  content: "\FDB0";
-}
-.mdi-home-heart::before {
-  content: "\F826";
-}
-.mdi-home-import-outline::before {
-  content: "\FFB9";
-}
-.mdi-home-lock::before {
-  content: "\F8EA";
-}
-.mdi-home-lock-open::before {
-  content: "\F8EB";
-}
-.mdi-home-map-marker::before {
-  content: "\F5F8";
-}
-.mdi-home-minus::before {
-  content: "\F973";
-}
-.mdi-home-modern::before {
-  content: "\F2DD";
-}
-.mdi-home-outline::before {
-  content: "\F6A0";
-}
-.mdi-home-plus::before {
-  content: "\F974";
-}
-.mdi-home-thermometer::before {
-  content: "\FF71";
-}
-.mdi-home-thermometer-outline::before {
-  content: "\FF72";
-}
-.mdi-home-variant::before {
-  content: "\F2DE";
-}
-.mdi-home-variant-outline::before {
-  content: "\FB83";
-}
-.mdi-hook::before {
-  content: "\F6E1";
-}
-.mdi-hook-off::before {
-  content: "\F6E2";
-}
-.mdi-hops::before {
-  content: "\F2DF";
-}
-.mdi-horseshoe::before {
-  content: "\FA57";
-}
-.mdi-hospital::before {
-  content: "\F2E0";
-}
-.mdi-hospital-building::before {
-  content: "\F2E1";
-}
-.mdi-hospital-marker::before {
-  content: "\F2E2";
-}
-.mdi-hot-tub::before {
-  content: "\F827";
-}
-.mdi-hotel::before {
-  content: "\F2E3";
-}
-.mdi-houzz::before {
-  content: "\F2E4";
-}
-.mdi-houzz-box::before {
-  content: "\F2E5";
-}
-.mdi-hubspot::before {
-  content: "\FCF3";
-}
-.mdi-hulu::before {
-  content: "\F828";
-}
-.mdi-human::before {
-  content: "\F2E6";
-}
-.mdi-human-child::before {
-  content: "\F2E7";
-}
-.mdi-human-female::before {
-  content: "\F649";
-}
-.mdi-human-female-boy::before {
-  content: "\FA58";
-}
-.mdi-human-female-female::before {
-  content: "\FA59";
-}
-.mdi-human-female-girl::before {
-  content: "\FA5A";
-}
-.mdi-human-greeting::before {
-  content: "\F64A";
-}
-.mdi-human-handsdown::before {
-  content: "\F64B";
-}
-.mdi-human-handsup::before {
-  content: "\F64C";
-}
-.mdi-human-male::before {
-  content: "\F64D";
-}
-.mdi-human-male-boy::before {
-  content: "\FA5B";
-}
-.mdi-human-male-female::before {
-  content: "\F2E8";
-}
-.mdi-human-male-girl::before {
-  content: "\FA5C";
-}
-.mdi-human-male-height::before {
-  content: "\FF18";
-}
-.mdi-human-male-height-variant::before {
-  content: "\FF19";
-}
-.mdi-human-male-male::before {
-  content: "\FA5D";
-}
-.mdi-human-pregnant::before {
-  content: "\F5CF";
-}
-.mdi-humble-bundle::before {
-  content: "\F743";
-}
-.mdi-ice-cream::before {
-  content: "\F829";
-}
-.mdi-ice-pop::before {
-  content: "\FF1A";
-}
-.mdi-identifier::before {
-  content: "\FF1B";
-}
-.mdi-iframe::before {
-  content: "\FC67";
-}
-.mdi-iframe-outline::before {
-  content: "\FC68";
-}
-.mdi-image::before {
-  content: "\F2E9";
-}
-.mdi-image-album::before {
-  content: "\F2EA";
-}
-.mdi-image-area::before {
-  content: "\F2EB";
-}
-.mdi-image-area-close::before {
-  content: "\F2EC";
-}
-.mdi-image-broken::before {
-  content: "\F2ED";
-}
-.mdi-image-broken-variant::before {
-  content: "\F2EE";
-}
-.mdi-image-filter::before {
-  content: "\F2EF";
-}
-.mdi-image-filter-black-white::before {
-  content: "\F2F0";
-}
-.mdi-image-filter-center-focus::before {
-  content: "\F2F1";
-}
-.mdi-image-filter-center-focus-strong::before {
-  content: "\FF1C";
-}
-.mdi-image-filter-center-focus-strong-outline::before {
-  content: "\FF1D";
-}
-.mdi-image-filter-center-focus-weak::before {
-  content: "\F2F2";
-}
-.mdi-image-filter-drama::before {
-  content: "\F2F3";
-}
-.mdi-image-filter-frames::before {
-  content: "\F2F4";
-}
-.mdi-image-filter-hdr::before {
-  content: "\F2F5";
-}
-.mdi-image-filter-none::before {
-  content: "\F2F6";
-}
-.mdi-image-filter-tilt-shift::before {
-  content: "\F2F7";
-}
-.mdi-image-filter-vintage::before {
-  content: "\F2F8";
-}
-.mdi-image-frame::before {
-  content: "\FE8A";
-}
-.mdi-image-move::before {
-  content: "\F9F7";
-}
-.mdi-image-multiple::before {
-  content: "\F2F9";
-}
-.mdi-image-off::before {
-  content: "\F82A";
-}
-.mdi-image-outline::before {
-  content: "\F975";
-}
-.mdi-image-plus::before {
-  content: "\F87B";
-}
-.mdi-image-search::before {
-  content: "\F976";
-}
-.mdi-image-search-outline::before {
-  content: "\F977";
-}
-.mdi-image-size-select-actual::before {
-  content: "\FC69";
-}
-.mdi-image-size-select-large::before {
-  content: "\FC6A";
-}
-.mdi-image-size-select-small::before {
-  content: "\FC6B";
-}
-.mdi-import::before {
-  content: "\F2FA";
-}
-.mdi-inbox::before {
-  content: "\F686";
-}
-.mdi-inbox-arrow-down::before {
-  content: "\F2FB";
-}
-.mdi-inbox-arrow-up::before {
-  content: "\F3D1";
-}
-.mdi-inbox-multiple::before {
-  content: "\F8AF";
-}
-.mdi-inbox-multiple-outline::before {
-  content: "\FB84";
-}
-.mdi-incognito::before {
-  content: "\F5F9";
-}
-.mdi-infinity::before {
-  content: "\F6E3";
-}
-.mdi-information::before {
-  content: "\F2FC";
-}
-.mdi-information-outline::before {
-  content: "\F2FD";
-}
-.mdi-information-variant::before {
-  content: "\F64E";
-}
-.mdi-instagram::before {
-  content: "\F2FE";
-}
-.mdi-instapaper::before {
-  content: "\F2FF";
-}
-.mdi-internet-explorer::before {
-  content: "\F300";
-}
-.mdi-invert-colors::before {
-  content: "\F301";
-}
-.mdi-invert-colors-off::before {
-  content: "\FE8B";
-}
-.mdi-ip::before {
-  content: "\FA5E";
-}
-.mdi-ip-network::before {
-  content: "\FA5F";
-}
-.mdi-ip-network-outline::before {
-  content: "\FC6C";
-}
-.mdi-ipod::before {
-  content: "\FC6D";
-}
-.mdi-islam::before {
-  content: "\F978";
-}
-.mdi-itunes::before {
-  content: "\F676";
-}
-.mdi-jabber::before {
-  content: "\FDB1";
-}
-.mdi-jeepney::before {
-  content: "\F302";
-}
-.mdi-jellyfish::before {
-  content: "\FF1E";
-}
-.mdi-jellyfish-outline::before {
-  content: "\FF1F";
-}
-.mdi-jira::before {
-  content: "\F303";
-}
-.mdi-jquery::before {
-  content: "\F87C";
-}
-.mdi-jsfiddle::before {
-  content: "\F304";
-}
-.mdi-json::before {
-  content: "\F626";
-}
-.mdi-judaism::before {
-  content: "\F979";
-}
-.mdi-kabaddi::before {
-  content: "\FD63";
-}
-.mdi-karate::before {
-  content: "\F82B";
-}
-.mdi-keg::before {
-  content: "\F305";
-}
-.mdi-kettle::before {
-  content: "\F5FA";
-}
-.mdi-kettle-outline::before {
-  content: "\FF73";
-}
-.mdi-key::before {
-  content: "\F306";
-}
-.mdi-key-change::before {
-  content: "\F307";
-}
-.mdi-key-minus::before {
-  content: "\F308";
-}
-.mdi-key-outline::before {
-  content: "\FDB2";
-}
-.mdi-key-plus::before {
-  content: "\F309";
-}
-.mdi-key-remove::before {
-  content: "\F30A";
-}
-.mdi-key-variant::before {
-  content: "\F30B";
-}
-.mdi-keyboard::before {
-  content: "\F30C";
-}
-.mdi-keyboard-backspace::before {
-  content: "\F30D";
-}
-.mdi-keyboard-caps::before {
-  content: "\F30E";
-}
-.mdi-keyboard-close::before {
-  content: "\F30F";
-}
-.mdi-keyboard-off::before {
-  content: "\F310";
-}
-.mdi-keyboard-off-outline::before {
-  content: "\FE8C";
-}
-.mdi-keyboard-outline::before {
-  content: "\F97A";
-}
-.mdi-keyboard-return::before {
-  content: "\F311";
-}
-.mdi-keyboard-settings::before {
-  content: "\F9F8";
-}
-.mdi-keyboard-settings-outline::before {
-  content: "\F9F9";
-}
-.mdi-keyboard-tab::before {
-  content: "\F312";
-}
-.mdi-keyboard-variant::before {
-  content: "\F313";
-}
-.mdi-kickstarter::before {
-  content: "\F744";
-}
-.mdi-knife::before {
-  content: "\F9FA";
-}
-.mdi-knife-military::before {
-  content: "\F9FB";
-}
-.mdi-kodi::before {
-  content: "\F314";
-}
-.mdi-label::before {
-  content: "\F315";
-}
-.mdi-label-off::before {
-  content: "\FACA";
-}
-.mdi-label-off-outline::before {
-  content: "\FACB";
-}
-.mdi-label-outline::before {
-  content: "\F316";
-}
-.mdi-label-variant::before {
-  content: "\FACC";
-}
-.mdi-label-variant-outline::before {
-  content: "\FACD";
-}
-.mdi-ladybug::before {
-  content: "\F82C";
-}
-.mdi-lambda::before {
-  content: "\F627";
-}
-.mdi-lamp::before {
-  content: "\F6B4";
-}
-.mdi-lan::before {
-  content: "\F317";
-}
-.mdi-lan-connect::before {
-  content: "\F318";
-}
-.mdi-lan-disconnect::before {
-  content: "\F319";
-}
-.mdi-lan-pending::before {
-  content: "\F31A";
-}
-.mdi-language-c::before {
-  content: "\F671";
-}
-.mdi-language-cpp::before {
-  content: "\F672";
-}
-.mdi-language-csharp::before {
-  content: "\F31B";
-}
-.mdi-language-css3::before {
-  content: "\F31C";
-}
-.mdi-language-go::before {
-  content: "\F7D2";
-}
-.mdi-language-haskell::before {
-  content: "\FC6E";
-}
-.mdi-language-html5::before {
-  content: "\F31D";
-}
-.mdi-language-java::before {
-  content: "\FB1C";
-}
-.mdi-language-javascript::before {
-  content: "\F31E";
-}
-.mdi-language-lua::before {
-  content: "\F8B0";
-}
-.mdi-language-php::before {
-  content: "\F31F";
-}
-.mdi-language-python::before {
-  content: "\F320";
-}
-.mdi-language-python-text::before {
-  content: "\F321";
-}
-.mdi-language-r::before {
-  content: "\F7D3";
-}
-.mdi-language-ruby-on-rails::before {
-  content: "\FACE";
-}
-.mdi-language-swift::before {
-  content: "\F6E4";
-}
-.mdi-language-typescript::before {
-  content: "\F6E5";
-}
-.mdi-laptop::before {
-  content: "\F322";
-}
-.mdi-laptop-chromebook::before {
-  content: "\F323";
-}
-.mdi-laptop-mac::before {
-  content: "\F324";
-}
-.mdi-laptop-off::before {
-  content: "\F6E6";
-}
-.mdi-laptop-windows::before {
-  content: "\F325";
-}
-.mdi-laravel::before {
-  content: "\FACF";
-}
-.mdi-lasso::before {
-  content: "\FF20";
-}
-.mdi-lastfm::before {
-  content: "\F326";
-}
-.mdi-lastpass::before {
-  content: "\F446";
-}
-.mdi-latitude::before {
-  content: "\FF74";
-}
-.mdi-launch::before {
-  content: "\F327";
-}
-.mdi-lava-lamp::before {
-  content: "\F7D4";
-}
-.mdi-layers::before {
-  content: "\F328";
-}
-.mdi-layers-minus::before {
-  content: "\FE8D";
-}
-.mdi-layers-off::before {
-  content: "\F329";
-}
-.mdi-layers-off-outline::before {
-  content: "\F9FC";
-}
-.mdi-layers-outline::before {
-  content: "\F9FD";
-}
-.mdi-layers-plus::before {
-  content: "\FE30";
-}
-.mdi-layers-remove::before {
-  content: "\FE31";
-}
-.mdi-layers-triple::before {
-  content: "\FF75";
-}
-.mdi-layers-triple-outline::before {
-  content: "\FF76";
-}
-.mdi-lead-pencil::before {
-  content: "\F64F";
-}
-.mdi-leaf::before {
-  content: "\F32A";
-}
-.mdi-leaf-maple::before {
-  content: "\FC6F";
-}
-.mdi-leak::before {
-  content: "\FDB3";
-}
-.mdi-leak-off::before {
-  content: "\FDB4";
-}
-.mdi-led-off::before {
-  content: "\F32B";
-}
-.mdi-led-on::before {
-  content: "\F32C";
-}
-.mdi-led-outline::before {
-  content: "\F32D";
-}
-.mdi-led-strip::before {
-  content: "\F7D5";
-}
-.mdi-led-variant-off::before {
-  content: "\F32E";
-}
-.mdi-led-variant-on::before {
-  content: "\F32F";
-}
-.mdi-led-variant-outline::before {
-  content: "\F330";
-}
-.mdi-less-than::before {
-  content: "\F97B";
-}
-.mdi-less-than-or-equal::before {
-  content: "\F97C";
-}
-.mdi-library::before {
-  content: "\F331";
-}
-.mdi-library-books::before {
-  content: "\F332";
-}
-.mdi-library-movie::before {
-  content: "\FCF4";
-}
-.mdi-library-music::before {
-  content: "\F333";
-}
-.mdi-library-music-outline::before {
-  content: "\FF21";
-}
-.mdi-library-plus::before {
-  content: "\F334";
-}
-.mdi-library-shelves::before {
-  content: "\FB85";
-}
-.mdi-library-video::before {
-  content: "\FCF5";
-}
-.mdi-lifebuoy::before {
-  content: "\F87D";
-}
-.mdi-light-switch::before {
-  content: "\F97D";
-}
-.mdi-lightbulb::before {
-  content: "\F335";
-}
-.mdi-lightbulb-off::before {
-  content: "\FE32";
-}
-.mdi-lightbulb-off-outline::before {
-  content: "\FE33";
-}
-.mdi-lightbulb-on::before {
-  content: "\F6E7";
-}
-.mdi-lightbulb-on-outline::before {
-  content: "\F6E8";
-}
-.mdi-lightbulb-outline::before {
-  content: "\F336";
-}
-.mdi-lighthouse::before {
-  content: "\F9FE";
-}
-.mdi-lighthouse-on::before {
-  content: "\F9FF";
-}
-.mdi-link::before {
-  content: "\F337";
-}
-.mdi-link-box::before {
-  content: "\FCF6";
-}
-.mdi-link-box-outline::before {
-  content: "\FCF7";
-}
-.mdi-link-box-variant::before {
-  content: "\FCF8";
-}
-.mdi-link-box-variant-outline::before {
-  content: "\FCF9";
-}
-.mdi-link-off::before {
-  content: "\F338";
-}
-.mdi-link-plus::before {
-  content: "\FC70";
-}
-.mdi-link-variant::before {
-  content: "\F339";
-}
-.mdi-link-variant-off::before {
-  content: "\F33A";
-}
-.mdi-linkedin::before {
-  content: "\F33B";
-}
-.mdi-linkedin-box::before {
-  content: "\F33C";
-}
-.mdi-linux::before {
-  content: "\F33D";
-}
-.mdi-linux-mint::before {
-  content: "\F8EC";
-}
-.mdi-litecoin::before {
-  content: "\FA60";
-}
-.mdi-loading::before {
-  content: "\F771";
-}
-.mdi-lock::before {
-  content: "\F33E";
-}
-.mdi-lock-alert::before {
-  content: "\F8ED";
-}
-.mdi-lock-clock::before {
-  content: "\F97E";
-}
-.mdi-lock-open::before {
-  content: "\F33F";
-}
-.mdi-lock-open-outline::before {
-  content: "\F340";
-}
-.mdi-lock-outline::before {
-  content: "\F341";
-}
-.mdi-lock-pattern::before {
-  content: "\F6E9";
-}
-.mdi-lock-plus::before {
-  content: "\F5FB";
-}
-.mdi-lock-question::before {
-  content: "\F8EE";
-}
-.mdi-lock-reset::before {
-  content: "\F772";
-}
-.mdi-lock-smart::before {
-  content: "\F8B1";
-}
-.mdi-locker::before {
-  content: "\F7D6";
-}
-.mdi-locker-multiple::before {
-  content: "\F7D7";
-}
-.mdi-login::before {
-  content: "\F342";
-}
-.mdi-login-variant::before {
-  content: "\F5FC";
-}
-.mdi-logout::before {
-  content: "\F343";
-}
-.mdi-logout-variant::before {
-  content: "\F5FD";
-}
-.mdi-longitude::before {
-  content: "\FF77";
-}
-.mdi-looks::before {
-  content: "\F344";
-}
-.mdi-loop::before {
-  content: "\F6EA";
-}
-.mdi-loupe::before {
-  content: "\F345";
-}
-.mdi-lumx::before {
-  content: "\F346";
-}
-.mdi-lyft::before {
-  content: "\FB1D";
-}
-.mdi-magnet::before {
-  content: "\F347";
-}
-.mdi-magnet-on::before {
-  content: "\F348";
-}
-.mdi-magnify::before {
-  content: "\F349";
-}
-.mdi-magnify-close::before {
-  content: "\F97F";
-}
-.mdi-magnify-minus::before {
-  content: "\F34A";
-}
-.mdi-magnify-minus-cursor::before {
-  content: "\FA61";
-}
-.mdi-magnify-minus-outline::before {
-  content: "\F6EB";
-}
-.mdi-magnify-plus::before {
-  content: "\F34B";
-}
-.mdi-magnify-plus-cursor::before {
-  content: "\FA62";
-}
-.mdi-magnify-plus-outline::before {
-  content: "\F6EC";
-}
-.mdi-mail::before {
-  content: "\FED8";
-}
-.mdi-mail-ru::before {
-  content: "\F34C";
-}
-.mdi-mailbox::before {
-  content: "\F6ED";
-}
-.mdi-mailbox-open::before {
-  content: "\FD64";
-}
-.mdi-mailbox-open-outline::before {
-  content: "\FD65";
-}
-.mdi-mailbox-open-up::before {
-  content: "\FD66";
-}
-.mdi-mailbox-open-up-outline::before {
-  content: "\FD67";
-}
-.mdi-mailbox-outline::before {
-  content: "\FD68";
-}
-.mdi-mailbox-up::before {
-  content: "\FD69";
-}
-.mdi-mailbox-up-outline::before {
-  content: "\FD6A";
-}
-.mdi-map::before {
-  content: "\F34D";
-}
-.mdi-map-check::before {
-  content: "\FED9";
-}
-.mdi-map-check-outline::before {
-  content: "\FEDA";
-}
-.mdi-map-clock::before {
-  content: "\FCFA";
-}
-.mdi-map-clock-outline::before {
-  content: "\FCFB";
-}
-.mdi-map-legend::before {
-  content: "\FA00";
-}
-.mdi-map-marker::before {
-  content: "\F34E";
-}
-.mdi-map-marker-alert::before {
-  content: "\FF22";
-}
-.mdi-map-marker-alert-outline::before {
-  content: "\FF23";
-}
-.mdi-map-marker-check::before {
-  content: "\FC71";
-}
-.mdi-map-marker-circle::before {
-  content: "\F34F";
-}
-.mdi-map-marker-distance::before {
-  content: "\F8EF";
-}
-.mdi-map-marker-minus::before {
-  content: "\F650";
-}
-.mdi-map-marker-multiple::before {
-  content: "\F350";
-}
-.mdi-map-marker-off::before {
-  content: "\F351";
-}
-.mdi-map-marker-outline::before {
-  content: "\F7D8";
-}
-.mdi-map-marker-path::before {
-  content: "\FCFC";
-}
-.mdi-map-marker-plus::before {
-  content: "\F651";
-}
-.mdi-map-marker-question::before {
-  content: "\FF24";
-}
-.mdi-map-marker-question-outline::before {
-  content: "\FF25";
-}
-.mdi-map-marker-radius::before {
-  content: "\F352";
-}
-.mdi-map-marker-remove::before {
-  content: "\FF26";
-}
-.mdi-map-marker-remove-variant::before {
-  content: "\FF27";
-}
-.mdi-map-minus::before {
-  content: "\F980";
-}
-.mdi-map-outline::before {
-  content: "\F981";
-}
-.mdi-map-plus::before {
-  content: "\F982";
-}
-.mdi-map-search::before {
-  content: "\F983";
-}
-.mdi-map-search-outline::before {
-  content: "\F984";
-}
-.mdi-mapbox::before {
-  content: "\FB86";
-}
-.mdi-margin::before {
-  content: "\F353";
-}
-.mdi-markdown::before {
-  content: "\F354";
-}
-.mdi-markdown-outline::before {
-  content: "\FF78";
-}
-.mdi-marker::before {
-  content: "\F652";
-}
-.mdi-marker-cancel::before {
-  content: "\FDB5";
-}
-.mdi-marker-check::before {
-  content: "\F355";
-}
-.mdi-mastodon::before {
-  content: "\FAD0";
-}
-.mdi-mastodon-variant::before {
-  content: "\FAD1";
-}
-.mdi-material-design::before {
-  content: "\F985";
-}
-.mdi-material-ui::before {
-  content: "\F357";
-}
-.mdi-math-compass::before {
-  content: "\F358";
-}
-.mdi-math-cos::before {
-  content: "\FC72";
-}
-.mdi-math-sin::before {
-  content: "\FC73";
-}
-.mdi-math-tan::before {
-  content: "\FC74";
-}
-.mdi-matrix::before {
-  content: "\F628";
-}
-.mdi-maxcdn::before {
-  content: "\F359";
-}
-.mdi-medal::before {
-  content: "\F986";
-}
-.mdi-medical-bag::before {
-  content: "\F6EE";
-}
-.mdi-medium::before {
-  content: "\F35A";
-}
-.mdi-meetup::before {
-  content: "\FAD2";
-}
-.mdi-memory::before {
-  content: "\F35B";
-}
-.mdi-menu::before {
-  content: "\F35C";
-}
-.mdi-menu-down::before {
-  content: "\F35D";
-}
-.mdi-menu-down-outline::before {
-  content: "\F6B5";
-}
-.mdi-menu-left::before {
-  content: "\F35E";
-}
-.mdi-menu-left-outline::before {
-  content: "\FA01";
-}
-.mdi-menu-open::before {
-  content: "\FB87";
-}
-.mdi-menu-right::before {
-  content: "\F35F";
-}
-.mdi-menu-right-outline::before {
-  content: "\FA02";
-}
-.mdi-menu-swap::before {
-  content: "\FA63";
-}
-.mdi-menu-swap-outline::before {
-  content: "\FA64";
-}
-.mdi-menu-up::before {
-  content: "\F360";
-}
-.mdi-menu-up-outline::before {
-  content: "\F6B6";
-}
-.mdi-merge::before {
-  content: "\FF79";
-}
-.mdi-message::before {
-  content: "\F361";
-}
-.mdi-message-alert::before {
-  content: "\F362";
-}
-.mdi-message-alert-outline::before {
-  content: "\FA03";
-}
-.mdi-message-bulleted::before {
-  content: "\F6A1";
-}
-.mdi-message-bulleted-off::before {
-  content: "\F6A2";
-}
-.mdi-message-draw::before {
-  content: "\F363";
-}
-.mdi-message-image::before {
-  content: "\F364";
-}
-.mdi-message-outline::before {
-  content: "\F365";
-}
-.mdi-message-plus::before {
-  content: "\F653";
-}
-.mdi-message-processing::before {
-  content: "\F366";
-}
-.mdi-message-reply::before {
-  content: "\F367";
-}
-.mdi-message-reply-text::before {
-  content: "\F368";
-}
-.mdi-message-settings::before {
-  content: "\F6EF";
-}
-.mdi-message-settings-variant::before {
-  content: "\F6F0";
-}
-.mdi-message-text::before {
-  content: "\F369";
-}
-.mdi-message-text-outline::before {
-  content: "\F36A";
-}
-.mdi-message-video::before {
-  content: "\F36B";
-}
-.mdi-meteor::before {
-  content: "\F629";
-}
-.mdi-metronome::before {
-  content: "\F7D9";
-}
-.mdi-metronome-tick::before {
-  content: "\F7DA";
-}
-.mdi-micro-sd::before {
-  content: "\F7DB";
-}
-.mdi-microphone::before {
-  content: "\F36C";
-}
-.mdi-microphone-minus::before {
-  content: "\F8B2";
-}
-.mdi-microphone-off::before {
-  content: "\F36D";
-}
-.mdi-microphone-outline::before {
-  content: "\F36E";
-}
-.mdi-microphone-plus::before {
-  content: "\F8B3";
-}
-.mdi-microphone-settings::before {
-  content: "\F36F";
-}
-.mdi-microphone-variant::before {
-  content: "\F370";
-}
-.mdi-microphone-variant-off::before {
-  content: "\F371";
-}
-.mdi-microscope::before {
-  content: "\F654";
-}
-.mdi-microsoft::before {
-  content: "\F372";
-}
-.mdi-microsoft-dynamics::before {
-  content: "\F987";
-}
-.mdi-microwave::before {
-  content: "\FC75";
-}
-.mdi-middleware::before {
-  content: "\FF7A";
-}
-.mdi-middleware-outline::before {
-  content: "\FF7B";
-}
-.mdi-midi::before {
-  content: "\F8F0";
-}
-.mdi-midi-port::before {
-  content: "\F8F1";
-}
-.mdi-mine::before {
-  content: "\FDB6";
-}
-.mdi-minecraft::before {
-  content: "\F373";
-}
-.mdi-mini-sd::before {
-  content: "\FA04";
-}
-.mdi-minidisc::before {
-  content: "\FA05";
-}
-.mdi-minus::before {
-  content: "\F374";
-}
-.mdi-minus-box::before {
-  content: "\F375";
-}
-.mdi-minus-box-outline::before {
-  content: "\F6F1";
-}
-.mdi-minus-circle::before {
-  content: "\F376";
-}
-.mdi-minus-circle-outline::before {
-  content: "\F377";
-}
-.mdi-minus-network::before {
-  content: "\F378";
-}
-.mdi-minus-network-outline::before {
-  content: "\FC76";
-}
-.mdi-mixcloud::before {
-  content: "\F62A";
-}
-.mdi-mixed-martial-arts::before {
-  content: "\FD6B";
-}
-.mdi-mixed-reality::before {
-  content: "\F87E";
-}
-.mdi-mixer::before {
-  content: "\F7DC";
-}
-.mdi-molecule::before {
-  content: "\FB88";
-}
-.mdi-monitor::before {
-  content: "\F379";
-}
-.mdi-monitor-cellphone::before {
-  content: "\F988";
-}
-.mdi-monitor-cellphone-star::before {
-  content: "\F989";
-}
-.mdi-monitor-dashboard::before {
-  content: "\FA06";
-}
-.mdi-monitor-lock::before {
-  content: "\FDB7";
-}
-.mdi-monitor-multiple::before {
-  content: "\F37A";
-}
-.mdi-monitor-off::before {
-  content: "\FD6C";
-}
-.mdi-monitor-screenshot::before {
-  content: "\FE34";
-}
-.mdi-monitor-speaker::before {
-  content: "\FF7C";
-}
-.mdi-monitor-speaker-off::before {
-  content: "\FF7D";
-}
-.mdi-monitor-star::before {
-  content: "\FDB8";
-}
-.mdi-moon-first-quarter::before {
-  content: "\FF7E";
-}
-.mdi-moon-full::before {
-  content: "\FF7F";
-}
-.mdi-moon-last-quarter::before {
-  content: "\FF80";
-}
-.mdi-moon-new::before {
-  content: "\FF81";
-}
-.mdi-moon-waning-crescent::before {
-  content: "\FF82";
-}
-.mdi-moon-waning-gibbous::before {
-  content: "\FF83";
-}
-.mdi-moon-waxing-crescent::before {
-  content: "\FF84";
-}
-.mdi-moon-waxing-gibbous::before {
-  content: "\FF85";
-}
-.mdi-more::before {
-  content: "\F37B";
-}
-.mdi-mother-nurse::before {
-  content: "\FCFD";
-}
-.mdi-motion-sensor::before {
-  content: "\FD6D";
-}
-.mdi-motorbike::before {
-  content: "\F37C";
-}
-.mdi-mouse::before {
-  content: "\F37D";
-}
-.mdi-mouse-bluetooth::before {
-  content: "\F98A";
-}
-.mdi-mouse-off::before {
-  content: "\F37E";
-}
-.mdi-mouse-variant::before {
-  content: "\F37F";
-}
-.mdi-mouse-variant-off::before {
-  content: "\F380";
-}
-.mdi-move-resize::before {
-  content: "\F655";
-}
-.mdi-move-resize-variant::before {
-  content: "\F656";
-}
-.mdi-movie::before {
-  content: "\F381";
-}
-.mdi-movie-outline::before {
-  content: "\FDB9";
-}
-.mdi-movie-roll::before {
-  content: "\F7DD";
-}
-.mdi-muffin::before {
-  content: "\F98B";
-}
-.mdi-multiplication::before {
-  content: "\F382";
-}
-.mdi-multiplication-box::before {
-  content: "\F383";
-}
-.mdi-mushroom::before {
-  content: "\F7DE";
-}
-.mdi-mushroom-outline::before {
-  content: "\F7DF";
-}
-.mdi-music::before {
-  content: "\F759";
-}
-.mdi-music-accidental-double-flat::before {
-  content: "\FF86";
-}
-.mdi-music-accidental-double-sharp::before {
-  content: "\FF87";
-}
-.mdi-music-accidental-flat::before {
-  content: "\FF88";
-}
-.mdi-music-accidental-natural::before {
-  content: "\FF89";
-}
-.mdi-music-accidental-sharp::before {
-  content: "\FF8A";
-}
-.mdi-music-box::before {
-  content: "\F384";
-}
-.mdi-music-box-outline::before {
-  content: "\F385";
-}
-.mdi-music-circle::before {
-  content: "\F386";
-}
-.mdi-music-circle-outline::before {
-  content: "\FAD3";
-}
-.mdi-music-clef-alto::before {
-  content: "\FF8B";
-}
-.mdi-music-clef-bass::before {
-  content: "\FF8C";
-}
-.mdi-music-clef-treble::before {
-  content: "\FF8D";
-}
-.mdi-music-note::before {
-  content: "\F387";
-}
-.mdi-music-note-bluetooth::before {
-  content: "\F5FE";
-}
-.mdi-music-note-bluetooth-off::before {
-  content: "\F5FF";
-}
-.mdi-music-note-eighth::before {
-  content: "\F388";
-}
-.mdi-music-note-eighth-dotted::before {
-  content: "\FF8E";
-}
-.mdi-music-note-half::before {
-  content: "\F389";
-}
-.mdi-music-note-half-dotted::before {
-  content: "\FF8F";
-}
-.mdi-music-note-off::before {
-  content: "\F38A";
-}
-.mdi-music-note-off-outline::before {
-  content: "\FF90";
-}
-.mdi-music-note-outline::before {
-  content: "\FF91";
-}
-.mdi-music-note-plus::before {
-  content: "\FDBA";
-}
-.mdi-music-note-quarter::before {
-  content: "\F38B";
-}
-.mdi-music-note-quarter-dotted::before {
-  content: "\FF92";
-}
-.mdi-music-note-sixteenth::before {
-  content: "\F38C";
-}
-.mdi-music-note-sixteenth-dotted::before {
-  content: "\FF93";
-}
-.mdi-music-note-whole::before {
-  content: "\F38D";
-}
-.mdi-music-note-whole-dotted::before {
-  content: "\FF94";
-}
-.mdi-music-off::before {
-  content: "\F75A";
-}
-.mdi-music-rest-eighth::before {
-  content: "\FF95";
-}
-.mdi-music-rest-half::before {
-  content: "\FF96";
-}
-.mdi-music-rest-quarter::before {
-  content: "\FF97";
-}
-.mdi-music-rest-sixteenth::before {
-  content: "\FF98";
-}
-.mdi-music-rest-whole::before {
-  content: "\FF99";
-}
-.mdi-nail::before {
-  content: "\FDBB";
-}
-.mdi-nas::before {
-  content: "\F8F2";
-}
-.mdi-nativescript::before {
-  content: "\F87F";
-}
-.mdi-nature::before {
-  content: "\F38E";
-}
-.mdi-nature-people::before {
-  content: "\F38F";
-}
-.mdi-navigation::before {
-  content: "\F390";
-}
-.mdi-near-me::before {
-  content: "\F5CD";
-}
-.mdi-necklace::before {
-  content: "\FF28";
-}
-.mdi-needle::before {
-  content: "\F391";
-}
-.mdi-netflix::before {
-  content: "\F745";
-}
-.mdi-network::before {
-  content: "\F6F2";
-}
-.mdi-network-off::before {
-  content: "\FC77";
-}
-.mdi-network-off-outline::before {
-  content: "\FC78";
-}
-.mdi-network-outline::before {
-  content: "\FC79";
-}
-.mdi-network-strength-1::before {
-  content: "\F8F3";
-}
-.mdi-network-strength-1-alert::before {
-  content: "\F8F4";
-}
-.mdi-network-strength-2::before {
-  content: "\F8F5";
-}
-.mdi-network-strength-2-alert::before {
-  content: "\F8F6";
-}
-.mdi-network-strength-3::before {
-  content: "\F8F7";
-}
-.mdi-network-strength-3-alert::before {
-  content: "\F8F8";
-}
-.mdi-network-strength-4::before {
-  content: "\F8F9";
-}
-.mdi-network-strength-4-alert::before {
-  content: "\F8FA";
-}
-.mdi-network-strength-off::before {
-  content: "\F8FB";
-}
-.mdi-network-strength-off-outline::before {
-  content: "\F8FC";
-}
-.mdi-network-strength-outline::before {
-  content: "\F8FD";
-}
-.mdi-new-box::before {
-  content: "\F394";
-}
-.mdi-newspaper::before {
-  content: "\F395";
-}
-.mdi-newspaper-minus::before {
-  content: "\FF29";
-}
-.mdi-newspaper-plus::before {
-  content: "\FF2A";
-}
-.mdi-nfc::before {
-  content: "\F396";
-}
-.mdi-nfc-off::before {
-  content: "\FE35";
-}
-.mdi-nfc-search-variant::before {
-  content: "\FE36";
-}
-.mdi-nfc-tap::before {
-  content: "\F397";
-}
-.mdi-nfc-variant::before {
-  content: "\F398";
-}
-.mdi-nfc-variant-off::before {
-  content: "\FE37";
-}
-.mdi-ninja::before {
-  content: "\F773";
-}
-.mdi-nintendo-switch::before {
-  content: "\F7E0";
-}
-.mdi-nodejs::before {
-  content: "\F399";
-}
-.mdi-not-equal::before {
-  content: "\F98C";
-}
-.mdi-not-equal-variant::before {
-  content: "\F98D";
-}
-.mdi-note::before {
-  content: "\F39A";
-}
-.mdi-note-circle::before {
-  content: "\FEDB";
-}
-.mdi-note-multiple::before {
-  content: "\F6B7";
-}
-.mdi-note-multiple-outline::before {
-  content: "\F6B8";
-}
-.mdi-note-outline::before {
-  content: "\F39B";
-}
-.mdi-note-plus::before {
-  content: "\F39C";
-}
-.mdi-note-plus-outline::before {
-  content: "\F39D";
-}
-.mdi-note-text::before {
-  content: "\F39E";
-}
-.mdi-notebook::before {
-  content: "\F82D";
-}
-.mdi-notebook-multiple::before {
-  content: "\FE38";
-}
-.mdi-notebook-outline::before {
-  content: "\FEDC";
-}
-.mdi-notification-clear-all::before {
-  content: "\F39F";
-}
-.mdi-npm::before {
-  content: "\F6F6";
-}
-.mdi-npm-variant::before {
-  content: "\F98E";
-}
-.mdi-npm-variant-outline::before {
-  content: "\F98F";
-}
-.mdi-nuke::before {
-  content: "\F6A3";
-}
-.mdi-null::before {
-  content: "\F7E1";
-}
-.mdi-numeric::before {
-  content: "\F3A0";
-}
-.mdi-numeric-0::before {
-  content: "\30";
-}
-.mdi-numeric-0-box::before {
-  content: "\F3A1";
-}
-.mdi-numeric-0-box-multiple::before {
-  content: "\FF2B";
-}
-.mdi-numeric-0-box-multiple-outline::before {
-  content: "\F3A2";
-}
-.mdi-numeric-0-box-outline::before {
-  content: "\F3A3";
-}
-.mdi-numeric-0-circle::before {
-  content: "\FC7A";
-}
-.mdi-numeric-0-circle-outline::before {
-  content: "\FC7B";
-}
-.mdi-numeric-1::before {
-  content: "\31";
-}
-.mdi-numeric-1-box::before {
-  content: "\F3A4";
-}
-.mdi-numeric-1-box-multiple::before {
-  content: "\FF2C";
-}
-.mdi-numeric-1-box-multiple-outline::before {
-  content: "\F3A5";
-}
-.mdi-numeric-1-box-outline::before {
-  content: "\F3A6";
-}
-.mdi-numeric-1-circle::before {
-  content: "\FC7C";
-}
-.mdi-numeric-1-circle-outline::before {
-  content: "\FC7D";
-}
-.mdi-numeric-10-box::before {
-  content: "\FF9A";
-}
-.mdi-numeric-10-box-outline::before {
-  content: "\FF9B";
-}
-.mdi-numeric-2::before {
-  content: "\32";
-}
-.mdi-numeric-2-box::before {
-  content: "\F3A7";
-}
-.mdi-numeric-2-box-multiple::before {
-  content: "\FF2D";
-}
-.mdi-numeric-2-box-multiple-outline::before {
-  content: "\F3A8";
-}
-.mdi-numeric-2-box-outline::before {
-  content: "\F3A9";
-}
-.mdi-numeric-2-circle::before {
-  content: "\FC7E";
-}
-.mdi-numeric-2-circle-outline::before {
-  content: "\FC7F";
-}
-.mdi-numeric-3::before {
-  content: "\33";
-}
-.mdi-numeric-3-box::before {
-  content: "\F3AA";
-}
-.mdi-numeric-3-box-multiple::before {
-  content: "\FF2E";
-}
-.mdi-numeric-3-box-multiple-outline::before {
-  content: "\F3AB";
-}
-.mdi-numeric-3-box-outline::before {
-  content: "\F3AC";
-}
-.mdi-numeric-3-circle::before {
-  content: "\FC80";
-}
-.mdi-numeric-3-circle-outline::before {
-  content: "\FC81";
-}
-.mdi-numeric-4::before {
-  content: "\34";
-}
-.mdi-numeric-4-box::before {
-  content: "\F3AD";
-}
-.mdi-numeric-4-box-multiple::before {
-  content: "\FF2F";
-}
-.mdi-numeric-4-box-multiple-outline::before {
-  content: "\F3AE";
-}
-.mdi-numeric-4-box-outline::before {
-  content: "\F3AF";
-}
-.mdi-numeric-4-circle::before {
-  content: "\FC82";
-}
-.mdi-numeric-4-circle-outline::before {
-  content: "\FC83";
-}
-.mdi-numeric-5::before {
-  content: "\35";
-}
-.mdi-numeric-5-box::before {
-  content: "\F3B0";
-}
-.mdi-numeric-5-box-multiple::before {
-  content: "\FF30";
-}
-.mdi-numeric-5-box-multiple-outline::before {
-  content: "\F3B1";
-}
-.mdi-numeric-5-box-outline::before {
-  content: "\F3B2";
-}
-.mdi-numeric-5-circle::before {
-  content: "\FC84";
-}
-.mdi-numeric-5-circle-outline::before {
-  content: "\FC85";
-}
-.mdi-numeric-6::before {
-  content: "\36";
-}
-.mdi-numeric-6-box::before {
-  content: "\F3B3";
-}
-.mdi-numeric-6-box-multiple::before {
-  content: "\FF31";
-}
-.mdi-numeric-6-box-multiple-outline::before {
-  content: "\F3B4";
-}
-.mdi-numeric-6-box-outline::before {
-  content: "\F3B5";
-}
-.mdi-numeric-6-circle::before {
-  content: "\FC86";
-}
-.mdi-numeric-6-circle-outline::before {
-  content: "\FC87";
-}
-.mdi-numeric-7::before {
-  content: "\37";
-}
-.mdi-numeric-7-box::before {
-  content: "\F3B6";
-}
-.mdi-numeric-7-box-multiple::before {
-  content: "\FF32";
-}
-.mdi-numeric-7-box-multiple-outline::before {
-  content: "\F3B7";
-}
-.mdi-numeric-7-box-outline::before {
-  content: "\F3B8";
-}
-.mdi-numeric-7-circle::before {
-  content: "\FC88";
-}
-.mdi-numeric-7-circle-outline::before {
-  content: "\FC89";
-}
-.mdi-numeric-8::before {
-  content: "\38";
-}
-.mdi-numeric-8-box::before {
-  content: "\F3B9";
-}
-.mdi-numeric-8-box-multiple::before {
-  content: "\FF33";
-}
-.mdi-numeric-8-box-multiple-outline::before {
-  content: "\F3BA";
-}
-.mdi-numeric-8-box-outline::before {
-  content: "\F3BB";
-}
-.mdi-numeric-8-circle::before {
-  content: "\FC8A";
-}
-.mdi-numeric-8-circle-outline::before {
-  content: "\FC8B";
-}
-.mdi-numeric-9::before {
-  content: "\39";
-}
-.mdi-numeric-9-box::before {
-  content: "\F3BC";
-}
-.mdi-numeric-9-box-multiple::before {
-  content: "\FF34";
-}
-.mdi-numeric-9-box-multiple-outline::before {
-  content: "\F3BD";
-}
-.mdi-numeric-9-box-outline::before {
-  content: "\F3BE";
-}
-.mdi-numeric-9-circle::before {
-  content: "\FC8C";
-}
-.mdi-numeric-9-circle-outline::before {
-  content: "\FC8D";
-}
-.mdi-numeric-9-plus-box::before {
-  content: "\F3BF";
-}
-.mdi-numeric-9-plus-box-multiple::before {
-  content: "\FF35";
-}
-.mdi-numeric-9-plus-box-multiple-outline::before {
-  content: "\F3C0";
-}
-.mdi-numeric-9-plus-box-outline::before {
-  content: "\F3C1";
-}
-.mdi-numeric-9-plus-circle::before {
-  content: "\FC8E";
-}
-.mdi-numeric-9-plus-circle-outline::before {
-  content: "\FC8F";
-}
-.mdi-nut::before {
-  content: "\F6F7";
-}
-.mdi-nutrition::before {
-  content: "\F3C2";
-}
-.mdi-oar::before {
-  content: "\F67B";
-}
-.mdi-ocarina::before {
-  content: "\FDBC";
-}
-.mdi-octagon::before {
-  content: "\F3C3";
-}
-.mdi-octagon-outline::before {
-  content: "\F3C4";
-}
-.mdi-octagram::before {
-  content: "\F6F8";
-}
-.mdi-octagram-outline::before {
-  content: "\F774";
-}
-.mdi-odnoklassniki::before {
-  content: "\F3C5";
-}
-.mdi-office::before {
-  content: "\F3C6";
-}
-.mdi-office-building::before {
-  content: "\F990";
-}
-.mdi-oil::before {
-  content: "\F3C7";
-}
-.mdi-oil-lamp::before {
-  content: "\FF36";
-}
-.mdi-oil-temperature::before {
-  content: "\F3C8";
-}
-.mdi-omega::before {
-  content: "\F3C9";
-}
-.mdi-one-up::before {
-  content: "\FB89";
-}
-.mdi-onedrive::before {
-  content: "\F3CA";
-}
-.mdi-onenote::before {
-  content: "\F746";
-}
-.mdi-onepassword::before {
-  content: "\F880";
-}
-.mdi-opacity::before {
-  content: "\F5CC";
-}
-.mdi-open-in-app::before {
-  content: "\F3CB";
-}
-.mdi-open-in-new::before {
-  content: "\F3CC";
-}
-.mdi-open-source-initiative::before {
-  content: "\FB8A";
-}
-.mdi-openid::before {
-  content: "\F3CD";
-}
-.mdi-opera::before {
-  content: "\F3CE";
-}
-.mdi-orbit::before {
-  content: "\F018";
-}
-.mdi-origin::before {
-  content: "\FB2B";
-}
-.mdi-ornament::before {
-  content: "\F3CF";
-}
-.mdi-ornament-variant::before {
-  content: "\F3D0";
-}
-.mdi-outlook::before {
-  content: "\FCFE";
-}
-.mdi-owl::before {
-  content: "\F3D2";
-}
-.mdi-pac-man::before {
-  content: "\FB8B";
-}
-.mdi-package::before {
-  content: "\F3D3";
-}
-.mdi-package-down::before {
-  content: "\F3D4";
-}
-.mdi-package-up::before {
-  content: "\F3D5";
-}
-.mdi-package-variant::before {
-  content: "\F3D6";
-}
-.mdi-package-variant-closed::before {
-  content: "\F3D7";
-}
-.mdi-page-first::before {
-  content: "\F600";
-}
-.mdi-page-last::before {
-  content: "\F601";
-}
-.mdi-page-layout-body::before {
-  content: "\F6F9";
-}
-.mdi-page-layout-footer::before {
-  content: "\F6FA";
-}
-.mdi-page-layout-header::before {
-  content: "\F6FB";
-}
-.mdi-page-layout-header-footer::before {
-  content: "\FF9C";
-}
-.mdi-page-layout-sidebar-left::before {
-  content: "\F6FC";
-}
-.mdi-page-layout-sidebar-right::before {
-  content: "\F6FD";
-}
-.mdi-page-next::before {
-  content: "\FB8C";
-}
-.mdi-page-next-outline::before {
-  content: "\FB8D";
-}
-.mdi-page-previous::before {
-  content: "\FB8E";
-}
-.mdi-page-previous-outline::before {
-  content: "\FB8F";
-}
-.mdi-palette::before {
-  content: "\F3D8";
-}
-.mdi-palette-advanced::before {
-  content: "\F3D9";
-}
-.mdi-palette-outline::before {
-  content: "\FE6C";
-}
-.mdi-palette-swatch::before {
-  content: "\F8B4";
-}
-.mdi-pan::before {
-  content: "\FB90";
-}
-.mdi-pan-bottom-left::before {
-  content: "\FB91";
-}
-.mdi-pan-bottom-right::before {
-  content: "\FB92";
-}
-.mdi-pan-down::before {
-  content: "\FB93";
-}
-.mdi-pan-horizontal::before {
-  content: "\FB94";
-}
-.mdi-pan-left::before {
-  content: "\FB95";
-}
-.mdi-pan-right::before {
-  content: "\FB96";
-}
-.mdi-pan-top-left::before {
-  content: "\FB97";
-}
-.mdi-pan-top-right::before {
-  content: "\FB98";
-}
-.mdi-pan-up::before {
-  content: "\FB99";
-}
-.mdi-pan-vertical::before {
-  content: "\FB9A";
-}
-.mdi-panda::before {
-  content: "\F3DA";
-}
-.mdi-pandora::before {
-  content: "\F3DB";
-}
-.mdi-panorama::before {
-  content: "\F3DC";
-}
-.mdi-panorama-fisheye::before {
-  content: "\F3DD";
-}
-.mdi-panorama-horizontal::before {
-  content: "\F3DE";
-}
-.mdi-panorama-vertical::before {
-  content: "\F3DF";
-}
-.mdi-panorama-wide-angle::before {
-  content: "\F3E0";
-}
-.mdi-paper-cut-vertical::before {
-  content: "\F3E1";
-}
-.mdi-paperclip::before {
-  content: "\F3E2";
-}
-.mdi-parachute::before {
-  content: "\FC90";
-}
-.mdi-parachute-outline::before {
-  content: "\FC91";
-}
-.mdi-parking::before {
-  content: "\F3E3";
-}
-.mdi-passport::before {
-  content: "\F7E2";
-}
-.mdi-passport-biometric::before {
-  content: "\FDBD";
-}
-.mdi-patio-heater::before {
-  content: "\FF9D";
-}
-.mdi-patreon::before {
-  content: "\F881";
-}
-.mdi-pause::before {
-  content: "\F3E4";
-}
-.mdi-pause-circle::before {
-  content: "\F3E5";
-}
-.mdi-pause-circle-outline::before {
-  content: "\F3E6";
-}
-.mdi-pause-octagon::before {
-  content: "\F3E7";
-}
-.mdi-pause-octagon-outline::before {
-  content: "\F3E8";
-}
-.mdi-paw::before {
-  content: "\F3E9";
-}
-.mdi-paw-off::before {
-  content: "\F657";
-}
-.mdi-paypal::before {
-  content: "\F882";
-}
-.mdi-pdf-box::before {
-  content: "\FE39";
-}
-.mdi-peace::before {
-  content: "\F883";
-}
-.mdi-pen::before {
-  content: "\F3EA";
-}
-.mdi-pen-lock::before {
-  content: "\FDBE";
-}
-.mdi-pen-minus::before {
-  content: "\FDBF";
-}
-.mdi-pen-off::before {
-  content: "\FDC0";
-}
-.mdi-pen-plus::before {
-  content: "\FDC1";
-}
-.mdi-pen-remove::before {
-  content: "\FDC2";
-}
-.mdi-pencil::before {
-  content: "\F3EB";
-}
-.mdi-pencil-box::before {
-  content: "\F3EC";
-}
-.mdi-pencil-box-outline::before {
-  content: "\F3ED";
-}
-.mdi-pencil-circle::before {
-  content: "\F6FE";
-}
-.mdi-pencil-circle-outline::before {
-  content: "\F775";
-}
-.mdi-pencil-lock::before {
-  content: "\F3EE";
-}
-.mdi-pencil-lock-outline::before {
-  content: "\FDC3";
-}
-.mdi-pencil-minus::before {
-  content: "\FDC4";
-}
-.mdi-pencil-minus-outline::before {
-  content: "\FDC5";
-}
-.mdi-pencil-off::before {
-  content: "\F3EF";
-}
-.mdi-pencil-off-outline::before {
-  content: "\FDC6";
-}
-.mdi-pencil-outline::before {
-  content: "\FC92";
-}
-.mdi-pencil-plus::before {
-  content: "\FDC7";
-}
-.mdi-pencil-plus-outline::before {
-  content: "\FDC8";
-}
-.mdi-pencil-remove::before {
-  content: "\FDC9";
-}
-.mdi-pencil-remove-outline::before {
-  content: "\FDCA";
-}
-.mdi-penguin::before {
-  content: "\FEDD";
-}
-.mdi-pentagon::before {
-  content: "\F6FF";
-}
-.mdi-pentagon-outline::before {
-  content: "\F700";
-}
-.mdi-percent::before {
-  content: "\F3F0";
-}
-.mdi-periodic-table::before {
-  content: "\F8B5";
-}
-.mdi-periodic-table-co2::before {
-  content: "\F7E3";
-}
-.mdi-periscope::before {
-  content: "\F747";
-}
-.mdi-perspective-less::before {
-  content: "\FCFF";
-}
-.mdi-perspective-more::before {
-  content: "\FD00";
-}
-.mdi-pharmacy::before {
-  content: "\F3F1";
-}
-.mdi-phone::before {
-  content: "\F3F2";
-}
-.mdi-phone-alert::before {
-  content: "\FF37";
-}
-.mdi-phone-bluetooth::before {
-  content: "\F3F3";
-}
-.mdi-phone-classic::before {
-  content: "\F602";
-}
-.mdi-phone-forward::before {
-  content: "\F3F4";
-}
-.mdi-phone-hangup::before {
-  content: "\F3F5";
-}
-.mdi-phone-in-talk::before {
-  content: "\F3F6";
-}
-.mdi-phone-incoming::before {
-  content: "\F3F7";
-}
-.mdi-phone-lock::before {
-  content: "\F3F8";
-}
-.mdi-phone-log::before {
-  content: "\F3F9";
-}
-.mdi-phone-minus::before {
-  content: "\F658";
-}
-.mdi-phone-missed::before {
-  content: "\F3FA";
-}
-.mdi-phone-off::before {
-  content: "\FDCB";
-}
-.mdi-phone-outgoing::before {
-  content: "\F3FB";
-}
-.mdi-phone-outline::before {
-  content: "\FDCC";
-}
-.mdi-phone-paused::before {
-  content: "\F3FC";
-}
-.mdi-phone-plus::before {
-  content: "\F659";
-}
-.mdi-phone-return::before {
-  content: "\F82E";
-}
-.mdi-phone-rotate-landscape::before {
-  content: "\F884";
-}
-.mdi-phone-rotate-portrait::before {
-  content: "\F885";
-}
-.mdi-phone-settings::before {
-  content: "\F3FD";
-}
-.mdi-phone-voip::before {
-  content: "\F3FE";
-}
-.mdi-pi::before {
-  content: "\F3FF";
-}
-.mdi-pi-box::before {
-  content: "\F400";
-}
-.mdi-pi-hole::before {
-  content: "\FDCD";
-}
-.mdi-piano::before {
-  content: "\F67C";
-}
-.mdi-pickaxe::before {
-  content: "\F8B6";
-}
-.mdi-picture-in-picture-bottom-right::before {
-  content: "\FE3A";
-}
-.mdi-picture-in-picture-bottom-right-outline::before {
-  content: "\FE3B";
-}
-.mdi-picture-in-picture-top-right::before {
-  content: "\FE3C";
-}
-.mdi-picture-in-picture-top-right-outline::before {
-  content: "\FE3D";
-}
-.mdi-pier::before {
-  content: "\F886";
-}
-.mdi-pier-crane::before {
-  content: "\F887";
-}
-.mdi-pig::before {
-  content: "\F401";
-}
-.mdi-pill::before {
-  content: "\F402";
-}
-.mdi-pillar::before {
-  content: "\F701";
-}
-.mdi-pin::before {
-  content: "\F403";
-}
-.mdi-pin-off::before {
-  content: "\F404";
-}
-.mdi-pin-off-outline::before {
-  content: "\F92F";
-}
-.mdi-pin-outline::before {
-  content: "\F930";
-}
-.mdi-pine-tree::before {
-  content: "\F405";
-}
-.mdi-pine-tree-box::before {
-  content: "\F406";
-}
-.mdi-pinterest::before {
-  content: "\F407";
-}
-.mdi-pinterest-box::before {
-  content: "\F408";
-}
-.mdi-pinwheel::before {
-  content: "\FAD4";
-}
-.mdi-pinwheel-outline::before {
-  content: "\FAD5";
-}
-.mdi-pipe::before {
-  content: "\F7E4";
-}
-.mdi-pipe-disconnected::before {
-  content: "\F7E5";
-}
-.mdi-pipe-leak::before {
-  content: "\F888";
-}
-.mdi-pirate::before {
-  content: "\FA07";
-}
-.mdi-pistol::before {
-  content: "\F702";
-}
-.mdi-piston::before {
-  content: "\F889";
-}
-.mdi-pizza::before {
-  content: "\F409";
-}
-.mdi-play::before {
-  content: "\F40A";
-}
-.mdi-play-box-outline::before {
-  content: "\F40B";
-}
-.mdi-play-circle::before {
-  content: "\F40C";
-}
-.mdi-play-circle-outline::before {
-  content: "\F40D";
-}
-.mdi-play-network::before {
-  content: "\F88A";
-}
-.mdi-play-network-outline::before {
-  content: "\FC93";
-}
-.mdi-play-outline::before {
-  content: "\FF38";
-}
-.mdi-play-pause::before {
-  content: "\F40E";
-}
-.mdi-play-protected-content::before {
-  content: "\F40F";
-}
-.mdi-play-speed::before {
-  content: "\F8FE";
-}
-.mdi-playlist-check::before {
-  content: "\F5C7";
-}
-.mdi-playlist-edit::before {
-  content: "\F8FF";
-}
-.mdi-playlist-minus::before {
-  content: "\F410";
-}
-.mdi-playlist-music::before {
-  content: "\FC94";
-}
-.mdi-playlist-music-outline::before {
-  content: "\FC95";
-}
-.mdi-playlist-play::before {
-  content: "\F411";
-}
-.mdi-playlist-plus::before {
-  content: "\F412";
-}
-.mdi-playlist-remove::before {
-  content: "\F413";
-}
-.mdi-playlist-star::before {
-  content: "\FDCE";
-}
-.mdi-playstation::before {
-  content: "\F414";
-}
-.mdi-plex::before {
-  content: "\F6B9";
-}
-.mdi-plus::before {
-  content: "\F415";
-}
-.mdi-plus-box::before {
-  content: "\F416";
-}
-.mdi-plus-box-outline::before {
-  content: "\F703";
-}
-.mdi-plus-circle::before {
-  content: "\F417";
-}
-.mdi-plus-circle-multiple-outline::before {
-  content: "\F418";
-}
-.mdi-plus-circle-outline::before {
-  content: "\F419";
-}
-.mdi-plus-minus::before {
-  content: "\F991";
-}
-.mdi-plus-minus-box::before {
-  content: "\F992";
-}
-.mdi-plus-network::before {
-  content: "\F41A";
-}
-.mdi-plus-network-outline::before {
-  content: "\FC96";
-}
-.mdi-plus-one::before {
-  content: "\F41B";
-}
-.mdi-plus-outline::before {
-  content: "\F704";
-}
-.mdi-pocket::before {
-  content: "\F41C";
-}
-.mdi-podcast::before {
-  content: "\F993";
-}
-.mdi-podium::before {
-  content: "\FD01";
-}
-.mdi-podium-bronze::before {
-  content: "\FD02";
-}
-.mdi-podium-gold::before {
-  content: "\FD03";
-}
-.mdi-podium-silver::before {
-  content: "\FD04";
-}
-.mdi-point-of-sale::before {
-  content: "\FD6E";
-}
-.mdi-pokeball::before {
-  content: "\F41D";
-}
-.mdi-pokemon-go::before {
-  content: "\FA08";
-}
-.mdi-poker-chip::before {
-  content: "\F82F";
-}
-.mdi-polaroid::before {
-  content: "\F41E";
-}
-.mdi-poll::before {
-  content: "\F41F";
-}
-.mdi-poll-box::before {
-  content: "\F420";
-}
-.mdi-polymer::before {
-  content: "\F421";
-}
-.mdi-pool::before {
-  content: "\F606";
-}
-.mdi-popcorn::before {
-  content: "\F422";
-}
-.mdi-postage-stamp::before {
-  content: "\FC97";
-}
-.mdi-pot::before {
-  content: "\F65A";
-}
-.mdi-pot-mix::before {
-  content: "\F65B";
-}
-.mdi-pound::before {
-  content: "\F423";
-}
-.mdi-pound-box::before {
-  content: "\F424";
-}
-.mdi-power::before {
-  content: "\F425";
-}
-.mdi-power-cycle::before {
-  content: "\F900";
-}
-.mdi-power-off::before {
-  content: "\F901";
-}
-.mdi-power-on::before {
-  content: "\F902";
-}
-.mdi-power-plug::before {
-  content: "\F6A4";
-}
-.mdi-power-plug-off::before {
-  content: "\F6A5";
-}
-.mdi-power-settings::before {
-  content: "\F426";
-}
-.mdi-power-sleep::before {
-  content: "\F903";
-}
-.mdi-power-socket::before {
-  content: "\F427";
-}
-.mdi-power-socket-au::before {
-  content: "\F904";
-}
-.mdi-power-socket-eu::before {
-  content: "\F7E6";
-}
-.mdi-power-socket-uk::before {
-  content: "\F7E7";
-}
-.mdi-power-socket-us::before {
-  content: "\F7E8";
-}
-.mdi-power-standby::before {
-  content: "\F905";
-}
-.mdi-powershell::before {
-  content: "\FA09";
-}
-.mdi-prescription::before {
-  content: "\F705";
-}
-.mdi-presentation::before {
-  content: "\F428";
-}
-.mdi-presentation-play::before {
-  content: "\F429";
-}
-.mdi-printer::before {
-  content: "\F42A";
-}
-.mdi-printer-3d::before {
-  content: "\F42B";
-}
-.mdi-printer-3d-nozzle::before {
-  content: "\FE3E";
-}
-.mdi-printer-3d-nozzle-outline::before {
-  content: "\FE3F";
-}
-.mdi-printer-alert::before {
-  content: "\F42C";
-}
-.mdi-printer-off::before {
-  content: "\FE40";
-}
-.mdi-printer-settings::before {
-  content: "\F706";
-}
-.mdi-printer-wireless::before {
-  content: "\FA0A";
-}
-.mdi-priority-high::before {
-  content: "\F603";
-}
-.mdi-priority-low::before {
-  content: "\F604";
-}
-.mdi-professional-hexagon::before {
-  content: "\F42D";
-}
-.mdi-progress-alert::before {
-  content: "\FC98";
-}
-.mdi-progress-check::before {
-  content: "\F994";
-}
-.mdi-progress-clock::before {
-  content: "\F995";
-}
-.mdi-progress-download::before {
-  content: "\F996";
-}
-.mdi-progress-upload::before {
-  content: "\F997";
-}
-.mdi-progress-wrench::before {
-  content: "\FC99";
-}
-.mdi-projector::before {
-  content: "\F42E";
-}
-.mdi-projector-screen::before {
-  content: "\F42F";
-}
-.mdi-publish::before {
-  content: "\F6A6";
-}
-.mdi-pulse::before {
-  content: "\F430";
-}
-.mdi-pumpkin::before {
-  content: "\FB9B";
-}
-.mdi-purse::before {
-  content: "\FF39";
-}
-.mdi-purse-outline::before {
-  content: "\FF3A";
-}
-.mdi-puzzle::before {
-  content: "\F431";
-}
-.mdi-puzzle-outline::before {
-  content: "\FA65";
-}
-.mdi-qi::before {
-  content: "\F998";
-}
-.mdi-qqchat::before {
-  content: "\F605";
-}
-.mdi-qrcode::before {
-  content: "\F432";
-}
-.mdi-qrcode-edit::before {
-  content: "\F8B7";
-}
-.mdi-qrcode-scan::before {
-  content: "\F433";
-}
-.mdi-quadcopter::before {
-  content: "\F434";
-}
-.mdi-quality-high::before {
-  content: "\F435";
-}
-.mdi-quality-low::before {
-  content: "\FA0B";
-}
-.mdi-quality-medium::before {
-  content: "\FA0C";
-}
-.mdi-quicktime::before {
-  content: "\F436";
-}
-.mdi-quora::before {
-  content: "\FD05";
-}
-.mdi-rabbit::before {
-  content: "\F906";
-}
-.mdi-racing-helmet::before {
-  content: "\FD6F";
-}
-.mdi-racquetball::before {
-  content: "\FD70";
-}
-.mdi-radar::before {
-  content: "\F437";
-}
-.mdi-radiator::before {
-  content: "\F438";
-}
-.mdi-radiator-disabled::before {
-  content: "\FAD6";
-}
-.mdi-radiator-off::before {
-  content: "\FAD7";
-}
-.mdi-radio::before {
-  content: "\F439";
-}
-.mdi-radio-am::before {
-  content: "\FC9A";
-}
-.mdi-radio-fm::before {
-  content: "\FC9B";
-}
-.mdi-radio-handheld::before {
-  content: "\F43A";
-}
-.mdi-radio-tower::before {
-  content: "\F43B";
-}
-.mdi-radioactive::before {
-  content: "\F43C";
-}
-.mdi-radioactive-off::before {
-  content: "\FEDE";
-}
-.mdi-radiobox-blank::before {
-  content: "\F43D";
-}
-.mdi-radiobox-marked::before {
-  content: "\F43E";
-}
-.mdi-radius::before {
-  content: "\FC9C";
-}
-.mdi-radius-outline::before {
-  content: "\FC9D";
-}
-.mdi-railroad-light::before {
-  content: "\FF3B";
-}
-.mdi-raspberry-pi::before {
-  content: "\F43F";
-}
-.mdi-ray-end::before {
-  content: "\F440";
-}
-.mdi-ray-end-arrow::before {
-  content: "\F441";
-}
-.mdi-ray-start::before {
-  content: "\F442";
-}
-.mdi-ray-start-arrow::before {
-  content: "\F443";
-}
-.mdi-ray-start-end::before {
-  content: "\F444";
-}
-.mdi-ray-vertex::before {
-  content: "\F445";
-}
-.mdi-react::before {
-  content: "\F707";
-}
-.mdi-read::before {
-  content: "\F447";
-}
-.mdi-receipt::before {
-  content: "\F449";
-}
-.mdi-record::before {
-  content: "\F44A";
-}
-.mdi-record-circle::before {
-  content: "\FEDF";
-}
-.mdi-record-circle-outline::before {
-  content: "\FEE0";
-}
-.mdi-record-player::before {
-  content: "\F999";
-}
-.mdi-record-rec::before {
-  content: "\F44B";
-}
-.mdi-rectangle::before {
-  content: "\FE41";
-}
-.mdi-rectangle-outline::before {
-  content: "\FE42";
-}
-.mdi-recycle::before {
-  content: "\F44C";
-}
-.mdi-reddit::before {
-  content: "\F44D";
-}
-.mdi-redo::before {
-  content: "\F44E";
-}
-.mdi-redo-variant::before {
-  content: "\F44F";
-}
-.mdi-reflect-horizontal::before {
-  content: "\FA0D";
-}
-.mdi-reflect-vertical::before {
-  content: "\FA0E";
-}
-.mdi-refresh::before {
-  content: "\F450";
-}
-.mdi-regex::before {
-  content: "\F451";
-}
-.mdi-registered-trademark::before {
-  content: "\FA66";
-}
-.mdi-relative-scale::before {
-  content: "\F452";
-}
-.mdi-reload::before {
-  content: "\F453";
-}
-.mdi-reminder::before {
-  content: "\F88B";
-}
-.mdi-remote::before {
-  content: "\F454";
-}
-.mdi-remote-desktop::before {
-  content: "\F8B8";
-}
-.mdi-remote-off::before {
-  content: "\FEE1";
-}
-.mdi-remote-tv::before {
-  content: "\FEE2";
-}
-.mdi-remote-tv-off::before {
-  content: "\FEE3";
-}
-.mdi-rename-box::before {
-  content: "\F455";
-}
-.mdi-reorder-horizontal::before {
-  content: "\F687";
-}
-.mdi-reorder-vertical::before {
-  content: "\F688";
-}
-.mdi-repeat::before {
-  content: "\F456";
-}
-.mdi-repeat-off::before {
-  content: "\F457";
-}
-.mdi-repeat-once::before {
-  content: "\F458";
-}
-.mdi-replay::before {
-  content: "\F459";
-}
-.mdi-reply::before {
-  content: "\F45A";
-}
-.mdi-reply-all::before {
-  content: "\F45B";
-}
-.mdi-reply-all-outline::before {
-  content: "\FF3C";
-}
-.mdi-reply-outline::before {
-  content: "\FF3D";
-}
-.mdi-reproduction::before {
-  content: "\F45C";
-}
-.mdi-resistor::before {
-  content: "\FB1F";
-}
-.mdi-resistor-nodes::before {
-  content: "\FB20";
-}
-.mdi-resize::before {
-  content: "\FA67";
-}
-.mdi-resize-bottom-right::before {
-  content: "\F45D";
-}
-.mdi-responsive::before {
-  content: "\F45E";
-}
-.mdi-restart::before {
-  content: "\F708";
-}
-.mdi-restart-off::before {
-  content: "\FD71";
-}
-.mdi-restore::before {
-  content: "\F99A";
-}
-.mdi-restore-clock::before {
-  content: "\F6A7";
-}
-.mdi-rewind::before {
-  content: "\F45F";
-}
-.mdi-rewind-10::before {
-  content: "\FD06";
-}
-.mdi-rewind-30::before {
-  content: "\FD72";
-}
-.mdi-rewind-outline::before {
-  content: "\F709";
-}
-.mdi-rhombus::before {
-  content: "\F70A";
-}
-.mdi-rhombus-medium::before {
-  content: "\FA0F";
-}
-.mdi-rhombus-outline::before {
-  content: "\F70B";
-}
-.mdi-rhombus-split::before {
-  content: "\FA10";
-}
-.mdi-ribbon::before {
-  content: "\F460";
-}
-.mdi-rice::before {
-  content: "\F7E9";
-}
-.mdi-ring::before {
-  content: "\F7EA";
-}
-.mdi-rivet::before {
-  content: "\FE43";
-}
-.mdi-road::before {
-  content: "\F461";
-}
-.mdi-road-variant::before {
-  content: "\F462";
-}
-.mdi-robot::before {
-  content: "\F6A8";
-}
-.mdi-robot-industrial::before {
-  content: "\FB21";
-}
-.mdi-robot-vacuum::before {
-  content: "\F70C";
-}
-.mdi-robot-vacuum-variant::before {
-  content: "\F907";
-}
-.mdi-rocket::before {
-  content: "\F463";
-}
-.mdi-roller-skate::before {
-  content: "\FD07";
-}
-.mdi-rollerblade::before {
-  content: "\FD08";
-}
-.mdi-rollupjs::before {
-  content: "\FB9C";
-}
-.mdi-room-service::before {
-  content: "\F88C";
-}
-.mdi-room-service-outline::before {
-  content: "\FD73";
-}
-.mdi-rotate-3d::before {
-  content: "\FEE4";
-}
-.mdi-rotate-3d-variant::before {
-  content: "\F464";
-}
-.mdi-rotate-left::before {
-  content: "\F465";
-}
-.mdi-rotate-left-variant::before {
-  content: "\F466";
-}
-.mdi-rotate-orbit::before {
-  content: "\FD74";
-}
-.mdi-rotate-right::before {
-  content: "\F467";
-}
-.mdi-rotate-right-variant::before {
-  content: "\F468";
-}
-.mdi-rounded-corner::before {
-  content: "\F607";
-}
-.mdi-router-wireless::before {
-  content: "\F469";
-}
-.mdi-router-wireless-settings::before {
-  content: "\FA68";
-}
-.mdi-routes::before {
-  content: "\F46A";
-}
-.mdi-rowing::before {
-  content: "\F608";
-}
-.mdi-rss::before {
-  content: "\F46B";
-}
-.mdi-rss-box::before {
-  content: "\F46C";
-}
-.mdi-rss-off::before {
-  content: "\FF3E";
-}
-.mdi-ruby::before {
-  content: "\FD09";
-}
-.mdi-rugby::before {
-  content: "\FD75";
-}
-.mdi-ruler::before {
-  content: "\F46D";
-}
-.mdi-ruler-square::before {
-  content: "\FC9E";
-}
-.mdi-run::before {
-  content: "\F70D";
-}
-.mdi-run-fast::before {
-  content: "\F46E";
-}
-.mdi-sack::before {
-  content: "\FD0A";
-}
-.mdi-sack-percent::before {
-  content: "\FD0B";
-}
-.mdi-safe::before {
-  content: "\FA69";
-}
-.mdi-safety-goggles::before {
-  content: "\FD0C";
-}
-.mdi-sailing::before {
-  content: "\FEE5";
-}
-.mdi-sale::before {
-  content: "\F46F";
-}
-.mdi-salesforce::before {
-  content: "\F88D";
-}
-.mdi-sass::before {
-  content: "\F7EB";
-}
-.mdi-satellite::before {
-  content: "\F470";
-}
-.mdi-satellite-uplink::before {
-  content: "\F908";
-}
-.mdi-satellite-variant::before {
-  content: "\F471";
-}
-.mdi-sausage::before {
-  content: "\F8B9";
-}
-.mdi-saw-blade::before {
-  content: "\FE44";
-}
-.mdi-saxophone::before {
-  content: "\F609";
-}
-.mdi-scale::before {
-  content: "\F472";
-}
-.mdi-scale-balance::before {
-  content: "\F5D1";
-}
-.mdi-scale-bathroom::before {
-  content: "\F473";
-}
-.mdi-scanner::before {
-  content: "\F6AA";
-}
-.mdi-scanner-off::before {
-  content: "\F909";
-}
-.mdi-scatter-plot::before {
-  content: "\FEE6";
-}
-.mdi-scatter-plot-outline::before {
-  content: "\FEE7";
-}
-.mdi-school::before {
-  content: "\F474";
-}
-.mdi-scissors-cutting::before {
-  content: "\FA6A";
-}
-.mdi-screen-rotation::before {
-  content: "\F475";
-}
-.mdi-screen-rotation-lock::before {
-  content: "\F476";
-}
-.mdi-screw-flat-top::before {
-  content: "\FDCF";
-}
-.mdi-screw-lag::before {
-  content: "\FE54";
-}
-.mdi-screw-machine-flat-top::before {
-  content: "\FE55";
-}
-.mdi-screw-machine-round-top::before {
-  content: "\FE56";
-}
-.mdi-screw-round-top::before {
-  content: "\FE57";
-}
-.mdi-screwdriver::before {
-  content: "\F477";
-}
-.mdi-script::before {
-  content: "\FB9D";
-}
-.mdi-script-outline::before {
-  content: "\F478";
-}
-.mdi-script-text::before {
-  content: "\FB9E";
-}
-.mdi-script-text-outline::before {
-  content: "\FB9F";
-}
-.mdi-sd::before {
-  content: "\F479";
-}
-.mdi-seal::before {
-  content: "\F47A";
-}
-.mdi-search-web::before {
-  content: "\F70E";
-}
-.mdi-seat::before {
-  content: "\FC9F";
-}
-.mdi-seat-flat::before {
-  content: "\F47B";
-}
-.mdi-seat-flat-angled::before {
-  content: "\F47C";
-}
-.mdi-seat-individual-suite::before {
-  content: "\F47D";
-}
-.mdi-seat-legroom-extra::before {
-  content: "\F47E";
-}
-.mdi-seat-legroom-normal::before {
-  content: "\F47F";
-}
-.mdi-seat-legroom-reduced::before {
-  content: "\F480";
-}
-.mdi-seat-outline::before {
-  content: "\FCA0";
-}
-.mdi-seat-recline-extra::before {
-  content: "\F481";
-}
-.mdi-seat-recline-normal::before {
-  content: "\F482";
-}
-.mdi-seatbelt::before {
-  content: "\FCA1";
-}
-.mdi-security::before {
-  content: "\F483";
-}
-.mdi-security-network::before {
-  content: "\F484";
-}
-.mdi-seed::before {
-  content: "\FE45";
-}
-.mdi-seed-outline::before {
-  content: "\FE46";
-}
-.mdi-segment::before {
-  content: "\FEE8";
-}
-.mdi-select::before {
-  content: "\F485";
-}
-.mdi-select-all::before {
-  content: "\F486";
-}
-.mdi-select-color::before {
-  content: "\FD0D";
-}
-.mdi-select-compare::before {
-  content: "\FAD8";
-}
-.mdi-select-drag::before {
-  content: "\FA6B";
-}
-.mdi-select-group::before {
-  content: "\FF9F";
-}
-.mdi-select-inverse::before {
-  content: "\F487";
-}
-.mdi-select-off::before {
-  content: "\F488";
-}
-.mdi-selection::before {
-  content: "\F489";
-}
-.mdi-selection-drag::before {
-  content: "\FA6C";
-}
-.mdi-selection-ellipse::before {
-  content: "\FD0E";
-}
-.mdi-selection-ellipse-arrow-inside::before {
-  content: "\FF3F";
-}
-.mdi-selection-off::before {
-  content: "\F776";
-}
-.mdi-send::before {
-  content: "\F48A";
-}
-.mdi-send-circle::before {
-  content: "\FE58";
-}
-.mdi-send-circle-outline::before {
-  content: "\FE59";
-}
-.mdi-send-lock::before {
-  content: "\F7EC";
-}
-.mdi-serial-port::before {
-  content: "\F65C";
-}
-.mdi-server::before {
-  content: "\F48B";
-}
-.mdi-server-minus::before {
-  content: "\F48C";
-}
-.mdi-server-network::before {
-  content: "\F48D";
-}
-.mdi-server-network-off::before {
-  content: "\F48E";
-}
-.mdi-server-off::before {
-  content: "\F48F";
-}
-.mdi-server-plus::before {
-  content: "\F490";
-}
-.mdi-server-remove::before {
-  content: "\F491";
-}
-.mdi-server-security::before {
-  content: "\F492";
-}
-.mdi-set-all::before {
-  content: "\F777";
-}
-.mdi-set-center::before {
-  content: "\F778";
-}
-.mdi-set-center-right::before {
-  content: "\F779";
-}
-.mdi-set-left::before {
-  content: "\F77A";
-}
-.mdi-set-left-center::before {
-  content: "\F77B";
-}
-.mdi-set-left-right::before {
-  content: "\F77C";
-}
-.mdi-set-none::before {
-  content: "\F77D";
-}
-.mdi-set-right::before {
-  content: "\F77E";
-}
-.mdi-set-top-box::before {
-  content: "\F99E";
-}
-.mdi-settings::before {
-  content: "\F493";
-}
-.mdi-settings-box::before {
-  content: "\F494";
-}
-.mdi-settings-helper::before {
-  content: "\FA6D";
-}
-.mdi-settings-outline::before {
-  content: "\F8BA";
-}
-.mdi-shape::before {
-  content: "\F830";
-}
-.mdi-shape-circle-plus::before {
-  content: "\F65D";
-}
-.mdi-shape-outline::before {
-  content: "\F831";
-}
-.mdi-shape-plus::before {
-  content: "\F495";
-}
-.mdi-shape-polygon-plus::before {
-  content: "\F65E";
-}
-.mdi-shape-rectangle-plus::before {
-  content: "\F65F";
-}
-.mdi-shape-square-plus::before {
-  content: "\F660";
-}
-.mdi-share::before {
-  content: "\F496";
-}
-.mdi-share-off::before {
-  content: "\FF40";
-}
-.mdi-share-off-outline::before {
-  content: "\FF41";
-}
-.mdi-share-outline::before {
-  content: "\F931";
-}
-.mdi-share-variant::before {
-  content: "\F497";
-}
-.mdi-sheep::before {
-  content: "\FCA2";
-}
-.mdi-shield::before {
-  content: "\F498";
-}
-.mdi-shield-account::before {
-  content: "\F88E";
-}
-.mdi-shield-account-outline::before {
-  content: "\FA11";
-}
-.mdi-shield-airplane::before {
-  content: "\F6BA";
-}
-.mdi-shield-airplane-outline::before {
-  content: "\FCA3";
-}
-.mdi-shield-alert::before {
-  content: "\FEE9";
-}
-.mdi-shield-alert-outline::before {
-  content: "\FEEA";
-}
-.mdi-shield-car::before {
-  content: "\FFA0";
-}
-.mdi-shield-check::before {
-  content: "\F565";
-}
-.mdi-shield-check-outline::before {
-  content: "\FCA4";
-}
-.mdi-shield-cross::before {
-  content: "\FCA5";
-}
-.mdi-shield-cross-outline::before {
-  content: "\FCA6";
-}
-.mdi-shield-half-full::before {
-  content: "\F77F";
-}
-.mdi-shield-home::before {
-  content: "\F689";
-}
-.mdi-shield-home-outline::before {
-  content: "\FCA7";
-}
-.mdi-shield-key::before {
-  content: "\FBA0";
-}
-.mdi-shield-key-outline::before {
-  content: "\FBA1";
-}
-.mdi-shield-link-variant::before {
-  content: "\FD0F";
-}
-.mdi-shield-link-variant-outline::before {
-  content: "\FD10";
-}
-.mdi-shield-lock::before {
-  content: "\F99C";
-}
-.mdi-shield-lock-outline::before {
-  content: "\FCA8";
-}
-.mdi-shield-off::before {
-  content: "\F99D";
-}
-.mdi-shield-off-outline::before {
-  content: "\F99B";
-}
-.mdi-shield-outline::before {
-  content: "\F499";
-}
-.mdi-shield-plus::before {
-  content: "\FAD9";
-}
-.mdi-shield-plus-outline::before {
-  content: "\FADA";
-}
-.mdi-shield-remove::before {
-  content: "\FADB";
-}
-.mdi-shield-remove-outline::before {
-  content: "\FADC";
-}
-.mdi-shield-search::before {
-  content: "\FD76";
-}
-.mdi-ship-wheel::before {
-  content: "\F832";
-}
-.mdi-shoe-formal::before {
-  content: "\FB22";
-}
-.mdi-shoe-heel::before {
-  content: "\FB23";
-}
-.mdi-shoe-print::before {
-  content: "\FE5A";
-}
-.mdi-shopify::before {
-  content: "\FADD";
-}
-.mdi-shopping::before {
-  content: "\F49A";
-}
-.mdi-shopping-music::before {
-  content: "\F49B";
-}
-.mdi-shopping-search::before {
-  content: "\FFA1";
-}
-.mdi-shovel::before {
-  content: "\F70F";
-}
-.mdi-shovel-off::before {
-  content: "\F710";
-}
-.mdi-shower::before {
-  content: "\F99F";
-}
-.mdi-shower-head::before {
-  content: "\F9A0";
-}
-.mdi-shredder::before {
-  content: "\F49C";
-}
-.mdi-shuffle::before {
-  content: "\F49D";
-}
-.mdi-shuffle-disabled::before {
-  content: "\F49E";
-}
-.mdi-shuffle-variant::before {
-  content: "\F49F";
-}
-.mdi-sigma::before {
-  content: "\F4A0";
-}
-.mdi-sigma-lower::before {
-  content: "\F62B";
-}
-.mdi-sign-caution::before {
-  content: "\F4A1";
-}
-.mdi-sign-direction::before {
-  content: "\F780";
-}
-.mdi-sign-text::before {
-  content: "\F781";
-}
-.mdi-signal::before {
-  content: "\F4A2";
-}
-.mdi-signal-2g::before {
-  content: "\F711";
-}
-.mdi-signal-3g::before {
-  content: "\F712";
-}
-.mdi-signal-4g::before {
-  content: "\F713";
-}
-.mdi-signal-5g::before {
-  content: "\FA6E";
-}
-.mdi-signal-cellular-1::before {
-  content: "\F8BB";
-}
-.mdi-signal-cellular-2::before {
-  content: "\F8BC";
-}
-.mdi-signal-cellular-3::before {
-  content: "\F8BD";
-}
-.mdi-signal-cellular-outline::before {
-  content: "\F8BE";
-}
-.mdi-signal-distance-variant::before {
-  content: "\FE47";
-}
-.mdi-signal-hspa::before {
-  content: "\F714";
-}
-.mdi-signal-hspa-plus::before {
-  content: "\F715";
-}
-.mdi-signal-off::before {
-  content: "\F782";
-}
-.mdi-signal-variant::before {
-  content: "\F60A";
-}
-.mdi-signature::before {
-  content: "\FE5B";
-}
-.mdi-signature-freehand::before {
-  content: "\FE5C";
-}
-.mdi-signature-image::before {
-  content: "\FE5D";
-}
-.mdi-signature-text::before {
-  content: "\FE5E";
-}
-.mdi-silo::before {
-  content: "\FB24";
-}
-.mdi-silverware::before {
-  content: "\F4A3";
-}
-.mdi-silverware-fork::before {
-  content: "\F4A4";
-}
-.mdi-silverware-fork-knife::before {
-  content: "\FA6F";
-}
-.mdi-silverware-spoon::before {
-  content: "\F4A5";
-}
-.mdi-silverware-variant::before {
-  content: "\F4A6";
-}
-.mdi-sim::before {
-  content: "\F4A7";
-}
-.mdi-sim-alert::before {
-  content: "\F4A8";
-}
-.mdi-sim-off::before {
-  content: "\F4A9";
-}
-.mdi-sina-weibo::before {
-  content: "\FADE";
-}
-.mdi-sitemap::before {
-  content: "\F4AA";
-}
-.mdi-skate::before {
-  content: "\FD11";
-}
-.mdi-skew-less::before {
-  content: "\FD12";
-}
-.mdi-skew-more::before {
-  content: "\FD13";
-}
-.mdi-skip-backward::before {
-  content: "\F4AB";
-}
-.mdi-skip-backward-outline::before {
-  content: "\FF42";
-}
-.mdi-skip-forward::before {
-  content: "\F4AC";
-}
-.mdi-skip-forward-outline::before {
-  content: "\FF43";
-}
-.mdi-skip-next::before {
-  content: "\F4AD";
-}
-.mdi-skip-next-circle::before {
-  content: "\F661";
-}
-.mdi-skip-next-circle-outline::before {
-  content: "\F662";
-}
-.mdi-skip-next-outline::before {
-  content: "\FF44";
-}
-.mdi-skip-previous::before {
-  content: "\F4AE";
-}
-.mdi-skip-previous-circle::before {
-  content: "\F663";
-}
-.mdi-skip-previous-circle-outline::before {
-  content: "\F664";
-}
-.mdi-skip-previous-outline::before {
-  content: "\FF45";
-}
-.mdi-skull::before {
-  content: "\F68B";
-}
-.mdi-skull-crossbones::before {
-  content: "\FBA2";
-}
-.mdi-skull-crossbones-outline::before {
-  content: "\FBA3";
-}
-.mdi-skull-outline::before {
-  content: "\FBA4";
-}
-.mdi-skype::before {
-  content: "\F4AF";
-}
-.mdi-skype-business::before {
-  content: "\F4B0";
-}
-.mdi-slack::before {
-  content: "\F4B1";
-}
-.mdi-slackware::before {
-  content: "\F90A";
-}
-.mdi-sleep::before {
-  content: "\F4B2";
-}
-.mdi-sleep-off::before {
-  content: "\F4B3";
-}
-.mdi-slope-downhill::before {
-  content: "\FE5F";
-}
-.mdi-slope-uphill::before {
-  content: "\FE60";
-}
-.mdi-smog::before {
-  content: "\FA70";
-}
-.mdi-smoke-detector::before {
-  content: "\F392";
-}
-.mdi-smoking::before {
-  content: "\F4B4";
-}
-.mdi-smoking-off::before {
-  content: "\F4B5";
-}
-.mdi-snapchat::before {
-  content: "\F4B6";
-}
-.mdi-snowflake::before {
-  content: "\F716";
-}
-.mdi-snowflake-alert::before {
-  content: "\FF46";
-}
-.mdi-snowflake-variant::before {
-  content: "\FF47";
-}
-.mdi-snowman::before {
-  content: "\F4B7";
-}
-.mdi-soccer::before {
-  content: "\F4B8";
-}
-.mdi-soccer-field::before {
-  content: "\F833";
-}
-.mdi-sofa::before {
-  content: "\F4B9";
-}
-.mdi-solar-panel::before {
-  content: "\FD77";
-}
-.mdi-solar-panel-large::before {
-  content: "\FD78";
-}
-.mdi-solar-power::before {
-  content: "\FA71";
-}
-.mdi-solid::before {
-  content: "\F68C";
-}
-.mdi-sort::before {
-  content: "\F4BA";
-}
-.mdi-sort-alphabetical::before {
-  content: "\F4BB";
-}
-.mdi-sort-ascending::before {
-  content: "\F4BC";
-}
-.mdi-sort-descending::before {
-  content: "\F4BD";
-}
-.mdi-sort-numeric::before {
-  content: "\F4BE";
-}
-.mdi-sort-variant::before {
-  content: "\F4BF";
-}
-.mdi-sort-variant-lock::before {
-  content: "\FCA9";
-}
-.mdi-sort-variant-lock-open::before {
-  content: "\FCAA";
-}
-.mdi-soundcloud::before {
-  content: "\F4C0";
-}
-.mdi-source-branch::before {
-  content: "\F62C";
-}
-.mdi-source-commit::before {
-  content: "\F717";
-}
-.mdi-source-commit-end::before {
-  content: "\F718";
-}
-.mdi-source-commit-end-local::before {
-  content: "\F719";
-}
-.mdi-source-commit-local::before {
-  content: "\F71A";
-}
-.mdi-source-commit-next-local::before {
-  content: "\F71B";
-}
-.mdi-source-commit-start::before {
-  content: "\F71C";
-}
-.mdi-source-commit-start-next-local::before {
-  content: "\F71D";
-}
-.mdi-source-fork::before {
-  content: "\F4C1";
-}
-.mdi-source-merge::before {
-  content: "\F62D";
-}
-.mdi-source-pull::before {
-  content: "\F4C2";
-}
-.mdi-source-repository::before {
-  content: "\FCAB";
-}
-.mdi-source-repository-multiple::before {
-  content: "\FCAC";
-}
-.mdi-soy-sauce::before {
-  content: "\F7ED";
-}
-.mdi-spa::before {
-  content: "\FCAD";
-}
-.mdi-spa-outline::before {
-  content: "\FCAE";
-}
-.mdi-space-invaders::before {
-  content: "\FBA5";
-}
-.mdi-spade::before {
-  content: "\FE48";
-}
-.mdi-speaker::before {
-  content: "\F4C3";
-}
-.mdi-speaker-bluetooth::before {
-  content: "\F9A1";
-}
-.mdi-speaker-multiple::before {
-  content: "\FD14";
-}
-.mdi-speaker-off::before {
-  content: "\F4C4";
-}
-.mdi-speaker-wireless::before {
-  content: "\F71E";
-}
-.mdi-speedometer::before {
-  content: "\F4C5";
-}
-.mdi-speedometer-medium::before {
-  content: "\FFA2";
-}
-.mdi-speedometer-slow::before {
-  content: "\FFA3";
-}
-.mdi-spellcheck::before {
-  content: "\F4C6";
-}
-.mdi-spider-web::before {
-  content: "\FBA6";
-}
-.mdi-spotify::before {
-  content: "\F4C7";
-}
-.mdi-spotlight::before {
-  content: "\F4C8";
-}
-.mdi-spotlight-beam::before {
-  content: "\F4C9";
-}
-.mdi-spray::before {
-  content: "\F665";
-}
-.mdi-spray-bottle::before {
-  content: "\FADF";
-}
-.mdi-sprout::before {
-  content: "\FE49";
-}
-.mdi-sprout-outline::before {
-  content: "\FE4A";
-}
-.mdi-square::before {
-  content: "\F763";
-}
-.mdi-square-edit-outline::before {
-  content: "\F90B";
-}
-.mdi-square-inc::before {
-  content: "\F4CA";
-}
-.mdi-square-inc-cash::before {
-  content: "\F4CB";
-}
-.mdi-square-medium::before {
-  content: "\FA12";
-}
-.mdi-square-medium-outline::before {
-  content: "\FA13";
-}
-.mdi-square-outline::before {
-  content: "\F762";
-}
-.mdi-square-root::before {
-  content: "\F783";
-}
-.mdi-square-root-box::before {
-  content: "\F9A2";
-}
-.mdi-square-small::before {
-  content: "\FA14";
-}
-.mdi-squeegee::before {
-  content: "\FAE0";
-}
-.mdi-ssh::before {
-  content: "\F8BF";
-}
-.mdi-stack-exchange::before {
-  content: "\F60B";
-}
-.mdi-stack-overflow::before {
-  content: "\F4CC";
-}
-.mdi-stadium::before {
-  content: "\F71F";
-}
-.mdi-stairs::before {
-  content: "\F4CD";
-}
-.mdi-stamper::before {
-  content: "\FD15";
-}
-.mdi-standard-definition::before {
-  content: "\F7EE";
-}
-.mdi-star::before {
-  content: "\F4CE";
-}
-.mdi-star-box::before {
-  content: "\FA72";
-}
-.mdi-star-box-outline::before {
-  content: "\FA73";
-}
-.mdi-star-circle::before {
-  content: "\F4CF";
-}
-.mdi-star-circle-outline::before {
-  content: "\F9A3";
-}
-.mdi-star-face::before {
-  content: "\F9A4";
-}
-.mdi-star-four-points::before {
-  content: "\FAE1";
-}
-.mdi-star-four-points-outline::before {
-  content: "\FAE2";
-}
-.mdi-star-half::before {
-  content: "\F4D0";
-}
-.mdi-star-off::before {
-  content: "\F4D1";
-}
-.mdi-star-outline::before {
-  content: "\F4D2";
-}
-.mdi-star-three-points::before {
-  content: "\FAE3";
-}
-.mdi-star-three-points-outline::before {
-  content: "\FAE4";
-}
-.mdi-steam::before {
-  content: "\F4D3";
-}
-.mdi-steam-box::before {
-  content: "\F90C";
-}
-.mdi-steering::before {
-  content: "\F4D4";
-}
-.mdi-steering-off::before {
-  content: "\F90D";
-}
-.mdi-step-backward::before {
-  content: "\F4D5";
-}
-.mdi-step-backward-2::before {
-  content: "\F4D6";
-}
-.mdi-step-forward::before {
-  content: "\F4D7";
-}
-.mdi-step-forward-2::before {
-  content: "\F4D8";
-}
-.mdi-stethoscope::before {
-  content: "\F4D9";
-}
-.mdi-sticker::before {
-  content: "\F5D0";
-}
-.mdi-sticker-emoji::before {
-  content: "\F784";
-}
-.mdi-stocking::before {
-  content: "\F4DA";
-}
-.mdi-stop::before {
-  content: "\F4DB";
-}
-.mdi-stop-circle::before {
-  content: "\F666";
-}
-.mdi-stop-circle-outline::before {
-  content: "\F667";
-}
-.mdi-store::before {
-  content: "\F4DC";
-}
-.mdi-store-24-hour::before {
-  content: "\F4DD";
-}
-.mdi-stove::before {
-  content: "\F4DE";
-}
-.mdi-strava::before {
-  content: "\FB25";
-}
-.mdi-stretch-to-page::before {
-  content: "\FF48";
-}
-.mdi-stretch-to-page-outline::before {
-  content: "\FF49";
-}
-.mdi-subdirectory-arrow-left::before {
-  content: "\F60C";
-}
-.mdi-subdirectory-arrow-right::before {
-  content: "\F60D";
-}
-.mdi-subtitles::before {
-  content: "\FA15";
-}
-.mdi-subtitles-outline::before {
-  content: "\FA16";
-}
-.mdi-subway::before {
-  content: "\F6AB";
-}
-.mdi-subway-alert-variant::before {
-  content: "\FD79";
-}
-.mdi-subway-variant::before {
-  content: "\F4DF";
-}
-.mdi-summit::before {
-  content: "\F785";
-}
-.mdi-sunglasses::before {
-  content: "\F4E0";
-}
-.mdi-surround-sound::before {
-  content: "\F5C5";
-}
-.mdi-surround-sound-2-0::before {
-  content: "\F7EF";
-}
-.mdi-surround-sound-3-1::before {
-  content: "\F7F0";
-}
-.mdi-surround-sound-5-1::before {
-  content: "\F7F1";
-}
-.mdi-surround-sound-7-1::before {
-  content: "\F7F2";
-}
-.mdi-svg::before {
-  content: "\F720";
-}
-.mdi-swap-horizontal::before {
-  content: "\F4E1";
-}
-.mdi-swap-horizontal-bold::before {
-  content: "\FBA9";
-}
-.mdi-swap-horizontal-variant::before {
-  content: "\F8C0";
-}
-.mdi-swap-vertical::before {
-  content: "\F4E2";
-}
-.mdi-swap-vertical-bold::before {
-  content: "\FBAA";
-}
-.mdi-swap-vertical-variant::before {
-  content: "\F8C1";
-}
-.mdi-swim::before {
-  content: "\F4E3";
-}
-.mdi-switch::before {
-  content: "\F4E4";
-}
-.mdi-sword::before {
-  content: "\F4E5";
-}
-.mdi-sword-cross::before {
-  content: "\F786";
-}
-.mdi-symfony::before {
-  content: "\FAE5";
-}
-.mdi-sync::before {
-  content: "\F4E6";
-}
-.mdi-sync-alert::before {
-  content: "\F4E7";
-}
-.mdi-sync-off::before {
-  content: "\F4E8";
-}
-.mdi-tab::before {
-  content: "\F4E9";
-}
-.mdi-tab-minus::before {
-  content: "\FB26";
-}
-.mdi-tab-plus::before {
-  content: "\F75B";
-}
-.mdi-tab-remove::before {
-  content: "\FB27";
-}
-.mdi-tab-unselected::before {
-  content: "\F4EA";
-}
-.mdi-table::before {
-  content: "\F4EB";
-}
-.mdi-table-border::before {
-  content: "\FA17";
-}
-.mdi-table-column::before {
-  content: "\F834";
-}
-.mdi-table-column-plus-after::before {
-  content: "\F4EC";
-}
-.mdi-table-column-plus-before::before {
-  content: "\F4ED";
-}
-.mdi-table-column-remove::before {
-  content: "\F4EE";
-}
-.mdi-table-column-width::before {
-  content: "\F4EF";
-}
-.mdi-table-edit::before {
-  content: "\F4F0";
-}
-.mdi-table-large::before {
-  content: "\F4F1";
-}
-.mdi-table-large-plus::before {
-  content: "\FFA4";
-}
-.mdi-table-large-remove::before {
-  content: "\FFA5";
-}
-.mdi-table-merge-cells::before {
-  content: "\F9A5";
-}
-.mdi-table-of-contents::before {
-  content: "\F835";
-}
-.mdi-table-plus::before {
-  content: "\FA74";
-}
-.mdi-table-remove::before {
-  content: "\FA75";
-}
-.mdi-table-row::before {
-  content: "\F836";
-}
-.mdi-table-row-height::before {
-  content: "\F4F2";
-}
-.mdi-table-row-plus-after::before {
-  content: "\F4F3";
-}
-.mdi-table-row-plus-before::before {
-  content: "\F4F4";
-}
-.mdi-table-row-remove::before {
-  content: "\F4F5";
-}
-.mdi-table-search::before {
-  content: "\F90E";
-}
-.mdi-table-settings::before {
-  content: "\F837";
-}
-.mdi-table-tennis::before {
-  content: "\FE4B";
-}
-.mdi-tablet::before {
-  content: "\F4F6";
-}
-.mdi-tablet-android::before {
-  content: "\F4F7";
-}
-.mdi-tablet-cellphone::before {
-  content: "\F9A6";
-}
-.mdi-tablet-dashboard::before {
-  content: "\FEEB";
-}
-.mdi-tablet-ipad::before {
-  content: "\F4F8";
-}
-.mdi-taco::before {
-  content: "\F761";
-}
-.mdi-tag::before {
-  content: "\F4F9";
-}
-.mdi-tag-faces::before {
-  content: "\F4FA";
-}
-.mdi-tag-heart::before {
-  content: "\F68A";
-}
-.mdi-tag-heart-outline::before {
-  content: "\FBAB";
-}
-.mdi-tag-minus::before {
-  content: "\F90F";
-}
-.mdi-tag-multiple::before {
-  content: "\F4FB";
-}
-.mdi-tag-outline::before {
-  content: "\F4FC";
-}
-.mdi-tag-plus::before {
-  content: "\F721";
-}
-.mdi-tag-remove::before {
-  content: "\F722";
-}
-.mdi-tag-text-outline::before {
-  content: "\F4FD";
-}
-.mdi-tank::before {
-  content: "\FD16";
-}
-.mdi-tape-measure::before {
-  content: "\FB28";
-}
-.mdi-target::before {
-  content: "\F4FE";
-}
-.mdi-target-account::before {
-  content: "\FBAC";
-}
-.mdi-target-variant::before {
-  content: "\FA76";
-}
-.mdi-taxi::before {
-  content: "\F4FF";
-}
-.mdi-tea::before {
-  content: "\FD7A";
-}
-.mdi-tea-outline::before {
-  content: "\FD7B";
-}
-.mdi-teach::before {
-  content: "\F88F";
-}
-.mdi-teamviewer::before {
-  content: "\F500";
-}
-.mdi-telegram::before {
-  content: "\F501";
-}
-.mdi-telescope::before {
-  content: "\FB29";
-}
-.mdi-television::before {
-  content: "\F502";
-}
-.mdi-television-box::before {
-  content: "\F838";
-}
-.mdi-television-classic::before {
-  content: "\F7F3";
-}
-.mdi-television-classic-off::before {
-  content: "\F839";
-}
-.mdi-television-guide::before {
-  content: "\F503";
-}
-.mdi-television-off::before {
-  content: "\F83A";
-}
-.mdi-television-pause::before {
-  content: "\FFA6";
-}
-.mdi-television-play::before {
-  content: "\FEEC";
-}
-.mdi-television-stop::before {
-  content: "\FFA7";
-}
-.mdi-temperature-celsius::before {
-  content: "\F504";
-}
-.mdi-temperature-fahrenheit::before {
-  content: "\F505";
-}
-.mdi-temperature-kelvin::before {
-  content: "\F506";
-}
-.mdi-tennis::before {
-  content: "\FD7C";
-}
-.mdi-tennis-ball::before {
-  content: "\F507";
-}
-.mdi-tent::before {
-  content: "\F508";
-}
-.mdi-terrain::before {
-  content: "\F509";
-}
-.mdi-test-tube::before {
-  content: "\F668";
-}
-.mdi-test-tube-empty::before {
-  content: "\F910";
-}
-.mdi-test-tube-off::before {
-  content: "\F911";
-}
-.mdi-text::before {
-  content: "\F9A7";
-}
-.mdi-text-shadow::before {
-  content: "\F669";
-}
-.mdi-text-short::before {
-  content: "\F9A8";
-}
-.mdi-text-subject::before {
-  content: "\F9A9";
-}
-.mdi-text-to-speech::before {
-  content: "\F50A";
-}
-.mdi-text-to-speech-off::before {
-  content: "\F50B";
-}
-.mdi-textbox::before {
-  content: "\F60E";
-}
-.mdi-textbox-password::before {
-  content: "\F7F4";
-}
-.mdi-texture::before {
-  content: "\F50C";
-}
-.mdi-theater::before {
-  content: "\F50D";
-}
-.mdi-theme-light-dark::before {
-  content: "\F50E";
-}
-.mdi-thermometer::before {
-  content: "\F50F";
-}
-.mdi-thermometer-alert::before {
-  content: "\FE61";
-}
-.mdi-thermometer-chevron-down::before {
-  content: "\FE62";
-}
-.mdi-thermometer-chevron-up::before {
-  content: "\FE63";
-}
-.mdi-thermometer-lines::before {
-  content: "\F510";
-}
-.mdi-thermometer-minus::before {
-  content: "\FE64";
-}
-.mdi-thermometer-plus::before {
-  content: "\FE65";
-}
-.mdi-thermostat::before {
-  content: "\F393";
-}
-.mdi-thermostat-box::before {
-  content: "\F890";
-}
-.mdi-thought-bubble::before {
-  content: "\F7F5";
-}
-.mdi-thought-bubble-outline::before {
-  content: "\F7F6";
-}
-.mdi-thumb-down::before {
-  content: "\F511";
-}
-.mdi-thumb-down-outline::before {
-  content: "\F512";
-}
-.mdi-thumb-up::before {
-  content: "\F513";
-}
-.mdi-thumb-up-outline::before {
-  content: "\F514";
-}
-.mdi-thumbs-up-down::before {
-  content: "\F515";
-}
-.mdi-ticket::before {
-  content: "\F516";
-}
-.mdi-ticket-account::before {
-  content: "\F517";
-}
-.mdi-ticket-confirmation::before {
-  content: "\F518";
-}
-.mdi-ticket-outline::before {
-  content: "\F912";
-}
-.mdi-ticket-percent::before {
-  content: "\F723";
-}
-.mdi-tie::before {
-  content: "\F519";
-}
-.mdi-tilde::before {
-  content: "\F724";
-}
-.mdi-timelapse::before {
-  content: "\F51A";
-}
-.mdi-timeline::before {
-  content: "\FBAD";
-}
-.mdi-timeline-alert::before {
-  content: "\FFB2";
-}
-.mdi-timeline-alert-outline::before {
-  content: "\FFB5";
-}
-.mdi-timeline-help::before {
-  content: "\FFB6";
-}
-.mdi-timeline-help-outline::before {
-  content: "\FFB7";
-}
-.mdi-timeline-outline::before {
-  content: "\FBAE";
-}
-.mdi-timeline-plus::before {
-  content: "\FFB3";
-}
-.mdi-timeline-plus-outline::before {
-  content: "\FFB4";
-}
-.mdi-timeline-text::before {
-  content: "\FBAF";
-}
-.mdi-timeline-text-outline::before {
-  content: "\FBB0";
-}
-.mdi-timer::before {
-  content: "\F51B";
-}
-.mdi-timer-10::before {
-  content: "\F51C";
-}
-.mdi-timer-3::before {
-  content: "\F51D";
-}
-.mdi-timer-off::before {
-  content: "\F51E";
-}
-.mdi-timer-sand::before {
-  content: "\F51F";
-}
-.mdi-timer-sand-empty::before {
-  content: "\F6AC";
-}
-.mdi-timer-sand-full::before {
-  content: "\F78B";
-}
-.mdi-timetable::before {
-  content: "\F520";
-}
-.mdi-toaster-oven::before {
-  content: "\FCAF";
-}
-.mdi-toggle-switch::before {
-  content: "\F521";
-}
-.mdi-toggle-switch-off::before {
-  content: "\F522";
-}
-.mdi-toggle-switch-off-outline::before {
-  content: "\FA18";
-}
-.mdi-toggle-switch-outline::before {
-  content: "\FA19";
-}
-.mdi-toilet::before {
-  content: "\F9AA";
-}
-.mdi-toolbox::before {
-  content: "\F9AB";
-}
-.mdi-toolbox-outline::before {
-  content: "\F9AC";
-}
-.mdi-tooltip::before {
-  content: "\F523";
-}
-.mdi-tooltip-account::before {
-  content: "\F00C";
-}
-.mdi-tooltip-edit::before {
-  content: "\F524";
-}
-.mdi-tooltip-image::before {
-  content: "\F525";
-}
-.mdi-tooltip-image-outline::before {
-  content: "\FBB1";
-}
-.mdi-tooltip-outline::before {
-  content: "\F526";
-}
-.mdi-tooltip-plus::before {
-  content: "\FBB2";
-}
-.mdi-tooltip-plus-outline::before {
-  content: "\F527";
-}
-.mdi-tooltip-text::before {
-  content: "\F528";
-}
-.mdi-tooltip-text-outline::before {
-  content: "\FBB3";
-}
-.mdi-tooth::before {
-  content: "\F8C2";
-}
-.mdi-tooth-outline::before {
-  content: "\F529";
-}
-.mdi-tor::before {
-  content: "\F52A";
-}
-.mdi-tortoise::before {
-  content: "\FD17";
-}
-.mdi-tournament::before {
-  content: "\F9AD";
-}
-.mdi-tower-beach::before {
-  content: "\F680";
-}
-.mdi-tower-fire::before {
-  content: "\F681";
-}
-.mdi-towing::before {
-  content: "\F83B";
-}
-.mdi-track-light::before {
-  content: "\F913";
-}
-.mdi-trackpad::before {
-  content: "\F7F7";
-}
-.mdi-trackpad-lock::before {
-  content: "\F932";
-}
-.mdi-tractor::before {
-  content: "\F891";
-}
-.mdi-trademark::before {
-  content: "\FA77";
-}
-.mdi-traffic-light::before {
-  content: "\F52B";
-}
-.mdi-train::before {
-  content: "\F52C";
-}
-.mdi-train-car::before {
-  content: "\FBB4";
-}
-.mdi-train-variant::before {
-  content: "\F8C3";
-}
-.mdi-tram::before {
-  content: "\F52D";
-}
-.mdi-transcribe::before {
-  content: "\F52E";
-}
-.mdi-transcribe-close::before {
-  content: "\F52F";
-}
-.mdi-transfer-down::before {
-  content: "\FD7D";
-}
-.mdi-transfer-left::before {
-  content: "\FD7E";
-}
-.mdi-transfer-right::before {
-  content: "\F530";
-}
-.mdi-transfer-up::before {
-  content: "\FD7F";
-}
-.mdi-transit-connection::before {
-  content: "\FD18";
-}
-.mdi-transit-connection-variant::before {
-  content: "\FD19";
-}
-.mdi-transit-detour::before {
-  content: "\FFA8";
-}
-.mdi-transit-transfer::before {
-  content: "\F6AD";
-}
-.mdi-transition::before {
-  content: "\F914";
-}
-.mdi-transition-masked::before {
-  content: "\F915";
-}
-.mdi-translate::before {
-  content: "\F5CA";
-}
-.mdi-translate-off::before {
-  content: "\FE66";
-}
-.mdi-transmission-tower::before {
-  content: "\FD1A";
-}
-.mdi-trash-can::before {
-  content: "\FA78";
-}
-.mdi-trash-can-outline::before {
-  content: "\FA79";
-}
-.mdi-treasure-chest::before {
-  content: "\F725";
-}
-.mdi-tree::before {
-  content: "\F531";
-}
-.mdi-tree-outline::before {
-  content: "\FE4C";
-}
-.mdi-trello::before {
-  content: "\F532";
-}
-.mdi-trending-down::before {
-  content: "\F533";
-}
-.mdi-trending-neutral::before {
-  content: "\F534";
-}
-.mdi-trending-up::before {
-  content: "\F535";
-}
-.mdi-triangle::before {
-  content: "\F536";
-}
-.mdi-triangle-outline::before {
-  content: "\F537";
-}
-.mdi-triforce::before {
-  content: "\FBB5";
-}
-.mdi-trophy::before {
-  content: "\F538";
-}
-.mdi-trophy-award::before {
-  content: "\F539";
-}
-.mdi-trophy-broken::before {
-  content: "\FD80";
-}
-.mdi-trophy-outline::before {
-  content: "\F53A";
-}
-.mdi-trophy-variant::before {
-  content: "\F53B";
-}
-.mdi-trophy-variant-outline::before {
-  content: "\F53C";
-}
-.mdi-truck::before {
-  content: "\F53D";
-}
-.mdi-truck-check::before {
-  content: "\FCB0";
-}
-.mdi-truck-delivery::before {
-  content: "\F53E";
-}
-.mdi-truck-fast::before {
-  content: "\F787";
-}
-.mdi-truck-trailer::before {
-  content: "\F726";
-}
-.mdi-tshirt-crew::before {
-  content: "\FA7A";
-}
-.mdi-tshirt-crew-outline::before {
-  content: "\F53F";
-}
-.mdi-tshirt-v::before {
-  content: "\FA7B";
-}
-.mdi-tshirt-v-outline::before {
-  content: "\F540";
-}
-.mdi-tumble-dryer::before {
-  content: "\F916";
-}
-.mdi-tumblr::before {
-  content: "\F541";
-}
-.mdi-tumblr-box::before {
-  content: "\F917";
-}
-.mdi-tumblr-reblog::before {
-  content: "\F542";
-}
-.mdi-tune::before {
-  content: "\F62E";
-}
-.mdi-tune-vertical::before {
-  content: "\F66A";
-}
-.mdi-turnstile::before {
-  content: "\FCB1";
-}
-.mdi-turnstile-outline::before {
-  content: "\FCB2";
-}
-.mdi-turtle::before {
-  content: "\FCB3";
-}
-.mdi-twitch::before {
-  content: "\F543";
-}
-.mdi-twitter::before {
-  content: "\F544";
-}
-.mdi-twitter-box::before {
-  content: "\F545";
-}
-.mdi-twitter-circle::before {
-  content: "\F546";
-}
-.mdi-twitter-retweet::before {
-  content: "\F547";
-}
-.mdi-two-factor-authentication::before {
-  content: "\F9AE";
-}
-.mdi-typewriter::before {
-  content: "\FF4A";
-}
-.mdi-uber::before {
-  content: "\F748";
-}
-.mdi-ubisoft::before {
-  content: "\FBB6";
-}
-.mdi-ubuntu::before {
-  content: "\F548";
-}
-.mdi-ultra-high-definition::before {
-  content: "\F7F8";
-}
-.mdi-umbraco::before {
-  content: "\F549";
-}
-.mdi-umbrella::before {
-  content: "\F54A";
-}
-.mdi-umbrella-closed::before {
-  content: "\F9AF";
-}
-.mdi-umbrella-outline::before {
-  content: "\F54B";
-}
-.mdi-undo::before {
-  content: "\F54C";
-}
-.mdi-undo-variant::before {
-  content: "\F54D";
-}
-.mdi-unfold-less-horizontal::before {
-  content: "\F54E";
-}
-.mdi-unfold-less-vertical::before {
-  content: "\F75F";
-}
-.mdi-unfold-more-horizontal::before {
-  content: "\F54F";
-}
-.mdi-unfold-more-vertical::before {
-  content: "\F760";
-}
-.mdi-ungroup::before {
-  content: "\F550";
-}
-.mdi-unicode::before {
-  content: "\FEED";
-}
-.mdi-unity::before {
-  content: "\F6AE";
-}
-.mdi-unreal::before {
-  content: "\F9B0";
-}
-.mdi-untappd::before {
-  content: "\F551";
-}
-.mdi-update::before {
-  content: "\F6AF";
-}
-.mdi-upload::before {
-  content: "\F552";
-}
-.mdi-upload-multiple::before {
-  content: "\F83C";
-}
-.mdi-upload-network::before {
-  content: "\F6F5";
-}
-.mdi-upload-network-outline::before {
-  content: "\FCB4";
-}
-.mdi-upload-outline::before {
-  content: "\FE67";
-}
-.mdi-usb::before {
-  content: "\F553";
-}
-.mdi-van-passenger::before {
-  content: "\F7F9";
-}
-.mdi-van-utility::before {
-  content: "\F7FA";
-}
-.mdi-vanish::before {
-  content: "\F7FB";
-}
-.mdi-variable::before {
-  content: "\FAE6";
-}
-.mdi-vector-arrange-above::before {
-  content: "\F554";
-}
-.mdi-vector-arrange-below::before {
-  content: "\F555";
-}
-.mdi-vector-bezier::before {
-  content: "\FAE7";
-}
-.mdi-vector-circle::before {
-  content: "\F556";
-}
-.mdi-vector-circle-variant::before {
-  content: "\F557";
-}
-.mdi-vector-combine::before {
-  content: "\F558";
-}
-.mdi-vector-curve::before {
-  content: "\F559";
-}
-.mdi-vector-difference::before {
-  content: "\F55A";
-}
-.mdi-vector-difference-ab::before {
-  content: "\F55B";
-}
-.mdi-vector-difference-ba::before {
-  content: "\F55C";
-}
-.mdi-vector-ellipse::before {
-  content: "\F892";
-}
-.mdi-vector-intersection::before {
-  content: "\F55D";
-}
-.mdi-vector-line::before {
-  content: "\F55E";
-}
-.mdi-vector-point::before {
-  content: "\F55F";
-}
-.mdi-vector-polygon::before {
-  content: "\F560";
-}
-.mdi-vector-polyline::before {
-  content: "\F561";
-}
-.mdi-vector-radius::before {
-  content: "\F749";
-}
-.mdi-vector-rectangle::before {
-  content: "\F5C6";
-}
-.mdi-vector-selection::before {
-  content: "\F562";
-}
-.mdi-vector-square::before {
-  content: "\F001";
-}
-.mdi-vector-triangle::before {
-  content: "\F563";
-}
-.mdi-vector-union::before {
-  content: "\F564";
-}
-.mdi-venmo::before {
-  content: "\F578";
-}
-.mdi-vhs::before {
-  content: "\FA1A";
-}
-.mdi-vibrate::before {
-  content: "\F566";
-}
-.mdi-vibrate-off::before {
-  content: "\FCB5";
-}
-.mdi-video::before {
-  content: "\F567";
-}
-.mdi-video-3d::before {
-  content: "\F7FC";
-}
-.mdi-video-3d-variant::before {
-  content: "\FEEE";
-}
-.mdi-video-4k-box::before {
-  content: "\F83D";
-}
-.mdi-video-account::before {
-  content: "\F918";
-}
-.mdi-video-image::before {
-  content: "\F919";
-}
-.mdi-video-input-antenna::before {
-  content: "\F83E";
-}
-.mdi-video-input-component::before {
-  content: "\F83F";
-}
-.mdi-video-input-hdmi::before {
-  content: "\F840";
-}
-.mdi-video-input-scart::before {
-  content: "\FFA9";
-}
-.mdi-video-input-svideo::before {
-  content: "\F841";
-}
-.mdi-video-minus::before {
-  content: "\F9B1";
-}
-.mdi-video-off::before {
-  content: "\F568";
-}
-.mdi-video-off-outline::before {
-  content: "\FBB7";
-}
-.mdi-video-outline::before {
-  content: "\FBB8";
-}
-.mdi-video-plus::before {
-  content: "\F9B2";
-}
-.mdi-video-stabilization::before {
-  content: "\F91A";
-}
-.mdi-video-switch::before {
-  content: "\F569";
-}
-.mdi-video-vintage::before {
-  content: "\FA1B";
-}
-.mdi-video-wireless::before {
-  content: "\FEEF";
-}
-.mdi-video-wireless-outline::before {
-  content: "\FEF0";
-}
-.mdi-view-agenda::before {
-  content: "\F56A";
-}
-.mdi-view-array::before {
-  content: "\F56B";
-}
-.mdi-view-carousel::before {
-  content: "\F56C";
-}
-.mdi-view-column::before {
-  content: "\F56D";
-}
-.mdi-view-comfy::before {
-  content: "\FE4D";
-}
-.mdi-view-compact::before {
-  content: "\FE4E";
-}
-.mdi-view-compact-outline::before {
-  content: "\FE4F";
-}
-.mdi-view-dashboard::before {
-  content: "\F56E";
-}
-.mdi-view-dashboard-outline::before {
-  content: "\FA1C";
-}
-.mdi-view-dashboard-variant::before {
-  content: "\F842";
-}
-.mdi-view-day::before {
-  content: "\F56F";
-}
-.mdi-view-grid::before {
-  content: "\F570";
-}
-.mdi-view-grid-plus::before {
-  content: "\FFAA";
-}
-.mdi-view-headline::before {
-  content: "\F571";
-}
-.mdi-view-list::before {
-  content: "\F572";
-}
-.mdi-view-module::before {
-  content: "\F573";
-}
-.mdi-view-parallel::before {
-  content: "\F727";
-}
-.mdi-view-quilt::before {
-  content: "\F574";
-}
-.mdi-view-sequential::before {
-  content: "\F728";
-}
-.mdi-view-split-horizontal::before {
-  content: "\FBA7";
-}
-.mdi-view-split-vertical::before {
-  content: "\FBA8";
-}
-.mdi-view-stream::before {
-  content: "\F575";
-}
-.mdi-view-week::before {
-  content: "\F576";
-}
-.mdi-vimeo::before {
-  content: "\F577";
-}
-.mdi-violin::before {
-  content: "\F60F";
-}
-.mdi-virtual-reality::before {
-  content: "\F893";
-}
-.mdi-visual-studio::before {
-  content: "\F610";
-}
-.mdi-visual-studio-code::before {
-  content: "\FA1D";
-}
-.mdi-vk::before {
-  content: "\F579";
-}
-.mdi-vk-box::before {
-  content: "\F57A";
-}
-.mdi-vk-circle::before {
-  content: "\F57B";
-}
-.mdi-vlc::before {
-  content: "\F57C";
-}
-.mdi-voice::before {
-  content: "\F5CB";
-}
-.mdi-voice-off::before {
-  content: "\FEF1";
-}
-.mdi-voicemail::before {
-  content: "\F57D";
-}
-.mdi-volleyball::before {
-  content: "\F9B3";
-}
-.mdi-volume-high::before {
-  content: "\F57E";
-}
-.mdi-volume-low::before {
-  content: "\F57F";
-}
-.mdi-volume-medium::before {
-  content: "\F580";
-}
-.mdi-volume-minus::before {
-  content: "\F75D";
-}
-.mdi-volume-mute::before {
-  content: "\F75E";
-}
-.mdi-volume-off::before {
-  content: "\F581";
-}
-.mdi-volume-plus::before {
-  content: "\F75C";
-}
-.mdi-volume-variant-off::before {
-  content: "\FE68";
-}
-.mdi-vote::before {
-  content: "\FA1E";
-}
-.mdi-vote-outline::before {
-  content: "\FA1F";
-}
-.mdi-vpn::before {
-  content: "\F582";
-}
-.mdi-vuejs::before {
-  content: "\F843";
-}
-.mdi-vuetify::before {
-  content: "\FE50";
-}
-.mdi-walk::before {
-  content: "\F583";
-}
-.mdi-wall::before {
-  content: "\F7FD";
-}
-.mdi-wall-sconce::before {
-  content: "\F91B";
-}
-.mdi-wall-sconce-flat::before {
-  content: "\F91C";
-}
-.mdi-wall-sconce-variant::before {
-  content: "\F91D";
-}
-.mdi-wallet::before {
-  content: "\F584";
-}
-.mdi-wallet-giftcard::before {
-  content: "\F585";
-}
-.mdi-wallet-membership::before {
-  content: "\F586";
-}
-.mdi-wallet-outline::before {
-  content: "\FBB9";
-}
-.mdi-wallet-plus::before {
-  content: "\FFAB";
-}
-.mdi-wallet-plus-outline::before {
-  content: "\FFAC";
-}
-.mdi-wallet-travel::before {
-  content: "\F587";
-}
-.mdi-wallpaper::before {
-  content: "\FE69";
-}
-.mdi-wan::before {
-  content: "\F588";
-}
-.mdi-wardrobe::before {
-  content: "\FFAD";
-}
-.mdi-wardrobe-outline::before {
-  content: "\FFAE";
-}
-.mdi-warehouse::before {
-  content: "\FFBB";
-}
-.mdi-washing-machine::before {
-  content: "\F729";
-}
-.mdi-watch::before {
-  content: "\F589";
-}
-.mdi-watch-export::before {
-  content: "\F58A";
-}
-.mdi-watch-export-variant::before {
-  content: "\F894";
-}
-.mdi-watch-import::before {
-  content: "\F58B";
-}
-.mdi-watch-import-variant::before {
-  content: "\F895";
-}
-.mdi-watch-variant::before {
-  content: "\F896";
-}
-.mdi-watch-vibrate::before {
-  content: "\F6B0";
-}
-.mdi-watch-vibrate-off::before {
-  content: "\FCB6";
-}
-.mdi-water::before {
-  content: "\F58C";
-}
-.mdi-water-boiler::before {
-  content: "\FFAF";
-}
-.mdi-water-off::before {
-  content: "\F58D";
-}
-.mdi-water-outline::before {
-  content: "\FE6A";
-}
-.mdi-water-percent::before {
-  content: "\F58E";
-}
-.mdi-water-pump::before {
-  content: "\F58F";
-}
-.mdi-water-pump-off::before {
-  content: "\FFB0";
-}
-.mdi-watermark::before {
-  content: "\F612";
-}
-.mdi-wave::before {
-  content: "\FF4B";
-}
-.mdi-waves::before {
-  content: "\F78C";
-}
-.mdi-waze::before {
-  content: "\FBBA";
-}
-.mdi-weather-cloudy::before {
-  content: "\F590";
-}
-.mdi-weather-cloudy-alert::before {
-  content: "\FF4C";
-}
-.mdi-weather-cloudy-arrow-right::before {
-  content: "\FE51";
-}
-.mdi-weather-fog::before {
-  content: "\F591";
-}
-.mdi-weather-hail::before {
-  content: "\F592";
-}
-.mdi-weather-hazy::before {
-  content: "\FF4D";
-}
-.mdi-weather-hurricane::before {
-  content: "\F897";
-}
-.mdi-weather-lightning::before {
-  content: "\F593";
-}
-.mdi-weather-lightning-rainy::before {
-  content: "\F67D";
-}
-.mdi-weather-night::before {
-  content: "\F594";
-}
-.mdi-weather-night-partly-cloudy::before {
-  content: "\FF4E";
-}
-.mdi-weather-partly-cloudy::before {
-  content: "\F595";
-}
-.mdi-weather-partly-lightning::before {
-  content: "\FF4F";
-}
-.mdi-weather-partly-rainy::before {
-  content: "\FF50";
-}
-.mdi-weather-partly-snowy::before {
-  content: "\FF51";
-}
-.mdi-weather-partly-snowy-rainy::before {
-  content: "\FF52";
-}
-.mdi-weather-pouring::before {
-  content: "\F596";
-}
-.mdi-weather-rainy::before {
-  content: "\F597";
-}
-.mdi-weather-snowy::before {
-  content: "\F598";
-}
-.mdi-weather-snowy-heavy::before {
-  content: "\FF53";
-}
-.mdi-weather-snowy-rainy::before {
-  content: "\F67E";
-}
-.mdi-weather-sunny::before {
-  content: "\F599";
-}
-.mdi-weather-sunny-alert::before {
-  content: "\FF54";
-}
-.mdi-weather-sunset::before {
-  content: "\F59A";
-}
-.mdi-weather-sunset-down::before {
-  content: "\F59B";
-}
-.mdi-weather-sunset-up::before {
-  content: "\F59C";
-}
-.mdi-weather-tornado::before {
-  content: "\FF55";
-}
-.mdi-weather-windy::before {
-  content: "\F59D";
-}
-.mdi-weather-windy-variant::before {
-  content: "\F59E";
-}
-.mdi-web::before {
-  content: "\F59F";
-}
-.mdi-web-box::before {
-  content: "\FFB1";
-}
-.mdi-webcam::before {
-  content: "\F5A0";
-}
-.mdi-webhook::before {
-  content: "\F62F";
-}
-.mdi-webpack::before {
-  content: "\F72A";
-}
-.mdi-wechat::before {
-  content: "\F611";
-}
-.mdi-weight::before {
-  content: "\F5A1";
-}
-.mdi-weight-gram::before {
-  content: "\FD1B";
-}
-.mdi-weight-kilogram::before {
-  content: "\F5A2";
-}
-.mdi-weight-pound::before {
-  content: "\F9B4";
-}
-.mdi-whatsapp::before {
-  content: "\F5A3";
-}
-.mdi-wheelchair-accessibility::before {
-  content: "\F5A4";
-}
-.mdi-whistle::before {
-  content: "\F9B5";
-}
-.mdi-white-balance-auto::before {
-  content: "\F5A5";
-}
-.mdi-white-balance-incandescent::before {
-  content: "\F5A6";
-}
-.mdi-white-balance-iridescent::before {
-  content: "\F5A7";
-}
-.mdi-white-balance-sunny::before {
-  content: "\F5A8";
-}
-.mdi-widgets::before {
-  content: "\F72B";
-}
-.mdi-wifi::before {
-  content: "\F5A9";
-}
-.mdi-wifi-off::before {
-  content: "\F5AA";
-}
-.mdi-wifi-star::before {
-  content: "\FE6B";
-}
-.mdi-wifi-strength-1::before {
-  content: "\F91E";
-}
-.mdi-wifi-strength-1-alert::before {
-  content: "\F91F";
-}
-.mdi-wifi-strength-1-lock::before {
-  content: "\F920";
-}
-.mdi-wifi-strength-2::before {
-  content: "\F921";
-}
-.mdi-wifi-strength-2-alert::before {
-  content: "\F922";
-}
-.mdi-wifi-strength-2-lock::before {
-  content: "\F923";
-}
-.mdi-wifi-strength-3::before {
-  content: "\F924";
-}
-.mdi-wifi-strength-3-alert::before {
-  content: "\F925";
-}
-.mdi-wifi-strength-3-lock::before {
-  content: "\F926";
-}
-.mdi-wifi-strength-4::before {
-  content: "\F927";
-}
-.mdi-wifi-strength-4-alert::before {
-  content: "\F928";
-}
-.mdi-wifi-strength-4-lock::before {
-  content: "\F929";
-}
-.mdi-wifi-strength-alert-outline::before {
-  content: "\F92A";
-}
-.mdi-wifi-strength-lock-outline::before {
-  content: "\F92B";
-}
-.mdi-wifi-strength-off::before {
-  content: "\F92C";
-}
-.mdi-wifi-strength-off-outline::before {
-  content: "\F92D";
-}
-.mdi-wifi-strength-outline::before {
-  content: "\F92E";
-}
-.mdi-wii::before {
-  content: "\F5AB";
-}
-.mdi-wiiu::before {
-  content: "\F72C";
-}
-.mdi-wikipedia::before {
-  content: "\F5AC";
-}
-.mdi-wind-turbine::before {
-  content: "\FD81";
-}
-.mdi-window-close::before {
-  content: "\F5AD";
-}
-.mdi-window-closed::before {
-  content: "\F5AE";
-}
-.mdi-window-maximize::before {
-  content: "\F5AF";
-}
-.mdi-window-minimize::before {
-  content: "\F5B0";
-}
-.mdi-window-open::before {
-  content: "\F5B1";
-}
-.mdi-window-restore::before {
-  content: "\F5B2";
-}
-.mdi-windows::before {
-  content: "\F5B3";
-}
-.mdi-windows-classic::before {
-  content: "\FA20";
-}
-.mdi-wiper::before {
-  content: "\FAE8";
-}
-.mdi-wiper-wash::before {
-  content: "\FD82";
-}
-.mdi-wordpress::before {
-  content: "\F5B4";
-}
-.mdi-worker::before {
-  content: "\F5B5";
-}
-.mdi-wrap::before {
-  content: "\F5B6";
-}
-.mdi-wrap-disabled::before {
-  content: "\FBBB";
-}
-.mdi-wrench::before {
-  content: "\F5B7";
-}
-.mdi-wrench-outline::before {
-  content: "\FBBC";
-}
-.mdi-wunderlist::before {
-  content: "\F5B8";
-}
-.mdi-xamarin::before {
-  content: "\F844";
-}
-.mdi-xamarin-outline::before {
-  content: "\F845";
-}
-.mdi-xaml::before {
-  content: "\F673";
-}
-.mdi-xbox::before {
-  content: "\F5B9";
-}
-.mdi-xbox-controller::before {
-  content: "\F5BA";
-}
-.mdi-xbox-controller-battery-alert::before {
-  content: "\F74A";
-}
-.mdi-xbox-controller-battery-charging::before {
-  content: "\FA21";
-}
-.mdi-xbox-controller-battery-empty::before {
-  content: "\F74B";
-}
-.mdi-xbox-controller-battery-full::before {
-  content: "\F74C";
-}
-.mdi-xbox-controller-battery-low::before {
-  content: "\F74D";
-}
-.mdi-xbox-controller-battery-medium::before {
-  content: "\F74E";
-}
-.mdi-xbox-controller-battery-unknown::before {
-  content: "\F74F";
-}
-.mdi-xbox-controller-menu::before {
-  content: "\FE52";
-}
-.mdi-xbox-controller-off::before {
-  content: "\F5BB";
-}
-.mdi-xbox-controller-view::before {
-  content: "\FE53";
-}
-.mdi-xda::before {
-  content: "\F5BC";
-}
-.mdi-xing::before {
-  content: "\F5BD";
-}
-.mdi-xing-box::before {
-  content: "\F5BE";
-}
-.mdi-xing-circle::before {
-  content: "\F5BF";
-}
-.mdi-xml::before {
-  content: "\F5C0";
-}
-.mdi-xmpp::before {
-  content: "\F7FE";
-}
-.mdi-yahoo::before {
-  content: "\FB2A";
-}
-.mdi-yammer::before {
-  content: "\F788";
-}
-.mdi-yeast::before {
-  content: "\F5C1";
-}
-.mdi-yelp::before {
-  content: "\F5C2";
-}
-.mdi-yin-yang::before {
-  content: "\F67F";
-}
-.mdi-youtube::before {
-  content: "\F5C3";
-}
-.mdi-youtube-creator-studio::before {
-  content: "\F846";
-}
-.mdi-youtube-gaming::before {
-  content: "\F847";
-}
-.mdi-youtube-subscription::before {
-  content: "\FD1C";
-}
-.mdi-youtube-tv::before {
-  content: "\F448";
-}
-.mdi-z-wave::before {
-  content: "\FAE9";
-}
-.mdi-zend::before {
-  content: "\FAEA";
-}
-.mdi-zigbee::before {
-  content: "\FD1D";
-}
-.mdi-zip-box::before {
-  content: "\F5C4";
-}
-.mdi-zip-disk::before {
-  content: "\FA22";
-}
-.mdi-zodiac-aquarius::before {
-  content: "\FA7C";
-}
-.mdi-zodiac-aries::before {
-  content: "\FA7D";
-}
-.mdi-zodiac-cancer::before {
-  content: "\FA7E";
-}
-.mdi-zodiac-capricorn::before {
-  content: "\FA7F";
-}
-.mdi-zodiac-gemini::before {
-  content: "\FA80";
-}
-.mdi-zodiac-leo::before {
-  content: "\FA81";
-}
-.mdi-zodiac-libra::before {
-  content: "\FA82";
-}
-.mdi-zodiac-pisces::before {
-  content: "\FA83";
-}
-.mdi-zodiac-sagittarius::before {
-  content: "\FA84";
-}
-.mdi-zodiac-scorpio::before {
-  content: "\FA85";
-}
-.mdi-zodiac-taurus::before {
-  content: "\FA86";
-}
-.mdi-zodiac-virgo::before {
-  content: "\FA87";
-}
-.mdi-blank::before {
-  content: "\F68C";
-  visibility: hidden;
-}
-.mdi-18px.mdi-set,
-.mdi-18px.mdi:before {
-  font-size: 18px;
-}
-.mdi-24px.mdi-set,
-.mdi-24px.mdi:before {
-  font-size: 24px;
-}
-.mdi-36px.mdi-set,
-.mdi-36px.mdi:before {
-  font-size: 36px;
-}
-.mdi-48px.mdi-set,
-.mdi-48px.mdi:before {
-  font-size: 48px;
-}
-.mdi-dark:before {
-  color: rgba(0, 0, 0, 0.54);
-}
-.mdi-dark.mdi-inactive:before {
-  color: rgba(0, 0, 0, 0.26);
-}
-.mdi-light:before {
-  color: #fff;
-}
-.mdi-light.mdi-inactive:before {
-  color: rgba(255, 255, 255, 0.3);
-}
-.mdi-rotate-45:before {
-  -webkit-transform: rotate(45deg);
-  -ms-transform: rotate(45deg);
-  transform: rotate(45deg);
-}
-.mdi-rotate-90:before {
-  -webkit-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  transform: rotate(90deg);
-}
-.mdi-rotate-135:before {
-  -webkit-transform: rotate(135deg);
-  -ms-transform: rotate(135deg);
-  transform: rotate(135deg);
-}
-.mdi-rotate-180:before {
-  -webkit-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  transform: rotate(180deg);
-}
-.mdi-rotate-225:before {
-  -webkit-transform: rotate(225deg);
-  -ms-transform: rotate(225deg);
-  transform: rotate(225deg);
-}
-.mdi-rotate-270:before {
-  -webkit-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  transform: rotate(270deg);
-}
-.mdi-rotate-315:before {
-  -webkit-transform: rotate(315deg);
-  -ms-transform: rotate(315deg);
-  transform: rotate(315deg);
-}
-.mdi-flip-h:before {
-  -webkit-transform: scaleX(-1);
-  transform: scaleX(-1);
-  filter: FlipH;
-  -ms-filter: "FlipH";
-}
-.mdi-flip-v:before {
-  -webkit-transform: scaleY(-1);
-  transform: scaleY(-1);
-  filter: FlipV;
-  -ms-filter: "FlipV";
-}
-.mdi-spin:before {
-  -webkit-animation: mdi-spin 2s infinite linear;
-  animation: mdi-spin 2s infinite linear;
-}
-@-webkit-keyframes mdi-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
-@keyframes mdi-spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-    transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-    transform: rotate(359deg);
-  }
-}
+@font-face{font-family:"Material Design Icons";src:url("../fonts/materialdesignicons-webfont.eot?v=3.9.97");src:url("../fonts/materialdesignicons-webfont.eot?#iefix&v=3.9.97") format("embedded-opentype"),url("../fonts/materialdesignicons-webfont.woff2?v=3.9.97") format("woff2"),url("../fonts/materialdesignicons-webfont.woff?v=3.9.97") format("woff"),url("../fonts/materialdesignicons-webfont.ttf?v=3.9.97") format("truetype");font-weight:normal;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font:normal normal normal 24px/1 "Material Design Icons";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-access-point::before{content:"\F002"}.mdi-access-point-network::before{content:"\F003"}.mdi-access-point-network-off::before{content:"\FBBD"}.mdi-account::before{content:"\F004"}.mdi-account-alert::before{content:"\F005"}.mdi-account-alert-outline::before{content:"\FB2C"}.mdi-account-arrow-left::before{content:"\FB2D"}.mdi-account-arrow-left-outline::before{content:"\FB2E"}.mdi-account-arrow-right::before{content:"\FB2F"}.mdi-account-arrow-right-outline::before{content:"\FB30"}.mdi-account-badge::before{content:"\FD83"}.mdi-account-badge-alert::before{content:"\FD84"}.mdi-account-badge-alert-outline::before{content:"\FD85"}.mdi-account-badge-horizontal::before{content:"\FDF0"}.mdi-account-badge-horizontal-outline::before{content:"\FDF1"}.mdi-account-badge-outline::before{content:"\FD86"}.mdi-account-box::before{content:"\F006"}.mdi-account-box-multiple::before{content:"\F933"}.mdi-account-box-outline::before{content:"\F007"}.mdi-account-card-details::before{content:"\F5D2"}.mdi-account-card-details-outline::before{content:"\FD87"}.mdi-account-check::before{content:"\F008"}.mdi-account-check-outline::before{content:"\FBBE"}.mdi-account-child::before{content:"\FA88"}.mdi-account-child-circle::before{content:"\FA89"}.mdi-account-circle::before{content:"\F009"}.mdi-account-circle-outline::before{content:"\FB31"}.mdi-account-clock::before{content:"\FB32"}.mdi-account-clock-outline::before{content:"\FB33"}.mdi-account-convert::before{content:"\F00A"}.mdi-account-details::before{content:"\F631"}.mdi-account-edit::before{content:"\F6BB"}.mdi-account-group::before{content:"\F848"}.mdi-account-group-outline::before{content:"\FB34"}.mdi-account-heart::before{content:"\F898"}.mdi-account-heart-outline::before{content:"\FBBF"}.mdi-account-key::before{content:"\F00B"}.mdi-account-key-outline::before{content:"\FBC0"}.mdi-account-minus::before{content:"\F00D"}.mdi-account-minus-outline::before{content:"\FAEB"}.mdi-account-multiple::before{content:"\F00E"}.mdi-account-multiple-check::before{content:"\F8C4"}.mdi-account-multiple-minus::before{content:"\F5D3"}.mdi-account-multiple-minus-outline::before{content:"\FBC1"}.mdi-account-multiple-outline::before{content:"\F00F"}.mdi-account-multiple-plus::before{content:"\F010"}.mdi-account-multiple-plus-outline::before{content:"\F7FF"}.mdi-account-network::before{content:"\F011"}.mdi-account-network-outline::before{content:"\FBC2"}.mdi-account-off::before{content:"\F012"}.mdi-account-off-outline::before{content:"\FBC3"}.mdi-account-outline::before{content:"\F013"}.mdi-account-plus::before{content:"\F014"}.mdi-account-plus-outline::before{content:"\F800"}.mdi-account-question::before{content:"\FB35"}.mdi-account-question-outline::before{content:"\FB36"}.mdi-account-remove::before{content:"\F015"}.mdi-account-remove-outline::before{content:"\FAEC"}.mdi-account-search::before{content:"\F016"}.mdi-account-search-outline::before{content:"\F934"}.mdi-account-settings::before{content:"\F630"}.mdi-account-star::before{content:"\F017"}.mdi-account-star-outline::before{content:"\FBC4"}.mdi-account-supervisor::before{content:"\FA8A"}.mdi-account-supervisor-circle::before{content:"\FA8B"}.mdi-account-switch::before{content:"\F019"}.mdi-account-tie::before{content:"\FCBF"}.mdi-accusoft::before{content:"\F849"}.mdi-adchoices::before{content:"\FD1E"}.mdi-adjust::before{content:"\F01A"}.mdi-adobe::before{content:"\F935"}.mdi-air-conditioner::before{content:"\F01B"}.mdi-air-filter::before{content:"\FD1F"}.mdi-air-horn::before{content:"\FD88"}.mdi-air-purifier::before{content:"\FD20"}.mdi-airbag::before{content:"\FBC5"}.mdi-airballoon::before{content:"\F01C"}.mdi-airplane::before{content:"\F01D"}.mdi-airplane-landing::before{content:"\F5D4"}.mdi-airplane-off::before{content:"\F01E"}.mdi-airplane-takeoff::before{content:"\F5D5"}.mdi-airplay::before{content:"\F01F"}.mdi-airport::before{content:"\F84A"}.mdi-alarm::before{content:"\F020"}.mdi-alarm-bell::before{content:"\F78D"}.mdi-alarm-check::before{content:"\F021"}.mdi-alarm-light::before{content:"\F78E"}.mdi-alarm-light-outline::before{content:"\FBC6"}.mdi-alarm-multiple::before{content:"\F022"}.mdi-alarm-note::before{content:"\FE8E"}.mdi-alarm-note-off::before{content:"\FE8F"}.mdi-alarm-off::before{content:"\F023"}.mdi-alarm-plus::before{content:"\F024"}.mdi-alarm-snooze::before{content:"\F68D"}.mdi-album::before{content:"\F025"}.mdi-alert::before{content:"\F026"}.mdi-alert-box::before{content:"\F027"}.mdi-alert-box-outline::before{content:"\FCC0"}.mdi-alert-circle::before{content:"\F028"}.mdi-alert-circle-outline::before{content:"\F5D6"}.mdi-alert-decagram::before{content:"\F6BC"}.mdi-alert-decagram-outline::before{content:"\FCC1"}.mdi-alert-octagon::before{content:"\F029"}.mdi-alert-octagon-outline::before{content:"\FCC2"}.mdi-alert-octagram::before{content:"\F766"}.mdi-alert-octagram-outline::before{content:"\FCC3"}.mdi-alert-outline::before{content:"\F02A"}.mdi-alien::before{content:"\F899"}.mdi-all-inclusive::before{content:"\F6BD"}.mdi-alpha::before{content:"\F02B"}.mdi-alpha-a::before{content:"\41"}.mdi-alpha-a-box::before{content:"\FAED"}.mdi-alpha-a-box-outline::before{content:"\FBC7"}.mdi-alpha-a-circle::before{content:"\FBC8"}.mdi-alpha-a-circle-outline::before{content:"\FBC9"}.mdi-alpha-b::before{content:"\42"}.mdi-alpha-b-box::before{content:"\FAEE"}.mdi-alpha-b-box-outline::before{content:"\FBCA"}.mdi-alpha-b-circle::before{content:"\FBCB"}.mdi-alpha-b-circle-outline::before{content:"\FBCC"}.mdi-alpha-c::before{content:"\43"}.mdi-alpha-c-box::before{content:"\FAEF"}.mdi-alpha-c-box-outline::before{content:"\FBCD"}.mdi-alpha-c-circle::before{content:"\FBCE"}.mdi-alpha-c-circle-outline::before{content:"\FBCF"}.mdi-alpha-d::before{content:"\44"}.mdi-alpha-d-box::before{content:"\FAF0"}.mdi-alpha-d-box-outline::before{content:"\FBD0"}.mdi-alpha-d-circle::before{content:"\FBD1"}.mdi-alpha-d-circle-outline::before{content:"\FBD2"}.mdi-alpha-e::before{content:"\45"}.mdi-alpha-e-box::before{content:"\FAF1"}.mdi-alpha-e-box-outline::before{content:"\FBD3"}.mdi-alpha-e-circle::before{content:"\FBD4"}.mdi-alpha-e-circle-outline::before{content:"\FBD5"}.mdi-alpha-f::before{content:"\46"}.mdi-alpha-f-box::before{content:"\FAF2"}.mdi-alpha-f-box-outline::before{content:"\FBD6"}.mdi-alpha-f-circle::before{content:"\FBD7"}.mdi-alpha-f-circle-outline::before{content:"\FBD8"}.mdi-alpha-g::before{content:"\47"}.mdi-alpha-g-box::before{content:"\FAF3"}.mdi-alpha-g-box-outline::before{content:"\FBD9"}.mdi-alpha-g-circle::before{content:"\FBDA"}.mdi-alpha-g-circle-outline::before{content:"\FBDB"}.mdi-alpha-h::before{content:"\48"}.mdi-alpha-h-box::before{content:"\FAF4"}.mdi-alpha-h-box-outline::before{content:"\FBDC"}.mdi-alpha-h-circle::before{content:"\FBDD"}.mdi-alpha-h-circle-outline::before{content:"\FBDE"}.mdi-alpha-i::before{content:"\49"}.mdi-alpha-i-box::before{content:"\FAF5"}.mdi-alpha-i-box-outline::before{content:"\FBDF"}.mdi-alpha-i-circle::before{content:"\FBE0"}.mdi-alpha-i-circle-outline::before{content:"\FBE1"}.mdi-alpha-j::before{content:"\4A"}.mdi-alpha-j-box::before{content:"\FAF6"}.mdi-alpha-j-box-outline::before{content:"\FBE2"}.mdi-alpha-j-circle::before{content:"\FBE3"}.mdi-alpha-j-circle-outline::before{content:"\FBE4"}.mdi-alpha-k::before{content:"\4B"}.mdi-alpha-k-box::before{content:"\FAF7"}.mdi-alpha-k-box-outline::before{content:"\FBE5"}.mdi-alpha-k-circle::before{content:"\FBE6"}.mdi-alpha-k-circle-outline::before{content:"\FBE7"}.mdi-alpha-l::before{content:"\4C"}.mdi-alpha-l-box::before{content:"\FAF8"}.mdi-alpha-l-box-outline::before{content:"\FBE8"}.mdi-alpha-l-circle::before{content:"\FBE9"}.mdi-alpha-l-circle-outline::before{content:"\FBEA"}.mdi-alpha-m::before{content:"\4D"}.mdi-alpha-m-box::before{content:"\FAF9"}.mdi-alpha-m-box-outline::before{content:"\FBEB"}.mdi-alpha-m-circle::before{content:"\FBEC"}.mdi-alpha-m-circle-outline::before{content:"\FBED"}.mdi-alpha-n::before{content:"\4E"}.mdi-alpha-n-box::before{content:"\FAFA"}.mdi-alpha-n-box-outline::before{content:"\FBEE"}.mdi-alpha-n-circle::before{content:"\FBEF"}.mdi-alpha-n-circle-outline::before{content:"\FBF0"}.mdi-alpha-o::before{content:"\4F"}.mdi-alpha-o-box::before{content:"\FAFB"}.mdi-alpha-o-box-outline::before{content:"\FBF1"}.mdi-alpha-o-circle::before{content:"\FBF2"}.mdi-alpha-o-circle-outline::before{content:"\FBF3"}.mdi-alpha-p::before{content:"\50"}.mdi-alpha-p-box::before{content:"\FAFC"}.mdi-alpha-p-box-outline::before{content:"\FBF4"}.mdi-alpha-p-circle::before{content:"\FBF5"}.mdi-alpha-p-circle-outline::before{content:"\FBF6"}.mdi-alpha-q::before{content:"\51"}.mdi-alpha-q-box::before{content:"\FAFD"}.mdi-alpha-q-box-outline::before{content:"\FBF7"}.mdi-alpha-q-circle::before{content:"\FBF8"}.mdi-alpha-q-circle-outline::before{content:"\FBF9"}.mdi-alpha-r::before{content:"\52"}.mdi-alpha-r-box::before{content:"\FAFE"}.mdi-alpha-r-box-outline::before{content:"\FBFA"}.mdi-alpha-r-circle::before{content:"\FBFB"}.mdi-alpha-r-circle-outline::before{content:"\FBFC"}.mdi-alpha-s::before{content:"\53"}.mdi-alpha-s-box::before{content:"\FAFF"}.mdi-alpha-s-box-outline::before{content:"\FBFD"}.mdi-alpha-s-circle::before{content:"\FBFE"}.mdi-alpha-s-circle-outline::before{content:"\FBFF"}.mdi-alpha-t::before{content:"\54"}.mdi-alpha-t-box::before{content:"\FB00"}.mdi-alpha-t-box-outline::before{content:"\FC00"}.mdi-alpha-t-circle::before{content:"\FC01"}.mdi-alpha-t-circle-outline::before{content:"\FC02"}.mdi-alpha-u::before{content:"\55"}.mdi-alpha-u-box::before{content:"\FB01"}.mdi-alpha-u-box-outline::before{content:"\FC03"}.mdi-alpha-u-circle::before{content:"\FC04"}.mdi-alpha-u-circle-outline::before{content:"\FC05"}.mdi-alpha-v::before{content:"\56"}.mdi-alpha-v-box::before{content:"\FB02"}.mdi-alpha-v-box-outline::before{content:"\FC06"}.mdi-alpha-v-circle::before{content:"\FC07"}.mdi-alpha-v-circle-outline::before{content:"\FC08"}.mdi-alpha-w::before{content:"\57"}.mdi-alpha-w-box::before{content:"\FB03"}.mdi-alpha-w-box-outline::before{content:"\FC09"}.mdi-alpha-w-circle::before{content:"\FC0A"}.mdi-alpha-w-circle-outline::before{content:"\FC0B"}.mdi-alpha-x::before{content:"\58"}.mdi-alpha-x-box::before{content:"\FB04"}.mdi-alpha-x-box-outline::before{content:"\FC0C"}.mdi-alpha-x-circle::before{content:"\FC0D"}.mdi-alpha-x-circle-outline::before{content:"\FC0E"}.mdi-alpha-y::before{content:"\59"}.mdi-alpha-y-box::before{content:"\FB05"}.mdi-alpha-y-box-outline::before{content:"\FC0F"}.mdi-alpha-y-circle::before{content:"\FC10"}.mdi-alpha-y-circle-outline::before{content:"\FC11"}.mdi-alpha-z::before{content:"\5A"}.mdi-alpha-z-box::before{content:"\FB06"}.mdi-alpha-z-box-outline::before{content:"\FC12"}.mdi-alpha-z-circle::before{content:"\FC13"}.mdi-alpha-z-circle-outline::before{content:"\FC14"}.mdi-alphabetical::before{content:"\F02C"}.mdi-altimeter::before{content:"\F5D7"}.mdi-amazon::before{content:"\F02D"}.mdi-amazon-alexa::before{content:"\F8C5"}.mdi-amazon-drive::before{content:"\F02E"}.mdi-ambulance::before{content:"\F02F"}.mdi-ammunition::before{content:"\FCC4"}.mdi-ampersand::before{content:"\FA8C"}.mdi-amplifier::before{content:"\F030"}.mdi-anchor::before{content:"\F031"}.mdi-android::before{content:"\F032"}.mdi-android-auto::before{content:"\FA8D"}.mdi-android-debug-bridge::before{content:"\F033"}.mdi-android-head::before{content:"\F78F"}.mdi-android-messages::before{content:"\FD21"}.mdi-android-studio::before{content:"\F034"}.mdi-angle-acute::before{content:"\F936"}.mdi-angle-obtuse::before{content:"\F937"}.mdi-angle-right::before{content:"\F938"}.mdi-angular::before{content:"\F6B1"}.mdi-angularjs::before{content:"\F6BE"}.mdi-animation::before{content:"\F5D8"}.mdi-animation-outline::before{content:"\FA8E"}.mdi-animation-play::before{content:"\F939"}.mdi-animation-play-outline::before{content:"\FA8F"}.mdi-anvil::before{content:"\F89A"}.mdi-apple::before{content:"\F035"}.mdi-apple-finder::before{content:"\F036"}.mdi-apple-icloud::before{content:"\F038"}.mdi-apple-ios::before{content:"\F037"}.mdi-apple-keyboard-caps::before{content:"\F632"}.mdi-apple-keyboard-command::before{content:"\F633"}.mdi-apple-keyboard-control::before{content:"\F634"}.mdi-apple-keyboard-option::before{content:"\F635"}.mdi-apple-keyboard-shift::before{content:"\F636"}.mdi-apple-safari::before{content:"\F039"}.mdi-application::before{content:"\F614"}.mdi-application-export::before{content:"\FD89"}.mdi-application-import::before{content:"\FD8A"}.mdi-apps::before{content:"\F03B"}.mdi-apps-box::before{content:"\FD22"}.mdi-arch::before{content:"\F8C6"}.mdi-archive::before{content:"\F03C"}.mdi-arrange-bring-forward::before{content:"\F03D"}.mdi-arrange-bring-to-front::before{content:"\F03E"}.mdi-arrange-send-backward::before{content:"\F03F"}.mdi-arrange-send-to-back::before{content:"\F040"}.mdi-arrow-all::before{content:"\F041"}.mdi-arrow-bottom-left::before{content:"\F042"}.mdi-arrow-bottom-left-bold-outline::before{content:"\F9B6"}.mdi-arrow-bottom-left-thick::before{content:"\F9B7"}.mdi-arrow-bottom-right::before{content:"\F043"}.mdi-arrow-bottom-right-bold-outline::before{content:"\F9B8"}.mdi-arrow-bottom-right-thick::before{content:"\F9B9"}.mdi-arrow-collapse::before{content:"\F615"}.mdi-arrow-collapse-all::before{content:"\F044"}.mdi-arrow-collapse-down::before{content:"\F791"}.mdi-arrow-collapse-horizontal::before{content:"\F84B"}.mdi-arrow-collapse-left::before{content:"\F792"}.mdi-arrow-collapse-right::before{content:"\F793"}.mdi-arrow-collapse-up::before{content:"\F794"}.mdi-arrow-collapse-vertical::before{content:"\F84C"}.mdi-arrow-decision::before{content:"\F9BA"}.mdi-arrow-decision-auto::before{content:"\F9BB"}.mdi-arrow-decision-auto-outline::before{content:"\F9BC"}.mdi-arrow-decision-outline::before{content:"\F9BD"}.mdi-arrow-down::before{content:"\F045"}.mdi-arrow-down-bold::before{content:"\F72D"}.mdi-arrow-down-bold-box::before{content:"\F72E"}.mdi-arrow-down-bold-box-outline::before{content:"\F72F"}.mdi-arrow-down-bold-circle::before{content:"\F047"}.mdi-arrow-down-bold-circle-outline::before{content:"\F048"}.mdi-arrow-down-bold-hexagon-outline::before{content:"\F049"}.mdi-arrow-down-bold-outline::before{content:"\F9BE"}.mdi-arrow-down-box::before{content:"\F6BF"}.mdi-arrow-down-circle::before{content:"\FCB7"}.mdi-arrow-down-circle-outline::before{content:"\FCB8"}.mdi-arrow-down-drop-circle::before{content:"\F04A"}.mdi-arrow-down-drop-circle-outline::before{content:"\F04B"}.mdi-arrow-down-thick::before{content:"\F046"}.mdi-arrow-expand::before{content:"\F616"}.mdi-arrow-expand-all::before{content:"\F04C"}.mdi-arrow-expand-down::before{content:"\F795"}.mdi-arrow-expand-horizontal::before{content:"\F84D"}.mdi-arrow-expand-left::before{content:"\F796"}.mdi-arrow-expand-right::before{content:"\F797"}.mdi-arrow-expand-up::before{content:"\F798"}.mdi-arrow-expand-vertical::before{content:"\F84E"}.mdi-arrow-left::before{content:"\F04D"}.mdi-arrow-left-bold::before{content:"\F730"}.mdi-arrow-left-bold-box::before{content:"\F731"}.mdi-arrow-left-bold-box-outline::before{content:"\F732"}.mdi-arrow-left-bold-circle::before{content:"\F04F"}.mdi-arrow-left-bold-circle-outline::before{content:"\F050"}.mdi-arrow-left-bold-hexagon-outline::before{content:"\F051"}.mdi-arrow-left-bold-outline::before{content:"\F9BF"}.mdi-arrow-left-box::before{content:"\F6C0"}.mdi-arrow-left-circle::before{content:"\FCB9"}.mdi-arrow-left-circle-outline::before{content:"\FCBA"}.mdi-arrow-left-drop-circle::before{content:"\F052"}.mdi-arrow-left-drop-circle-outline::before{content:"\F053"}.mdi-arrow-left-right::before{content:"\FE90"}.mdi-arrow-left-right-bold::before{content:"\FE91"}.mdi-arrow-left-right-bold-outline::before{content:"\F9C0"}.mdi-arrow-left-thick::before{content:"\F04E"}.mdi-arrow-right::before{content:"\F054"}.mdi-arrow-right-bold::before{content:"\F733"}.mdi-arrow-right-bold-box::before{content:"\F734"}.mdi-arrow-right-bold-box-outline::before{content:"\F735"}.mdi-arrow-right-bold-circle::before{content:"\F056"}.mdi-arrow-right-bold-circle-outline::before{content:"\F057"}.mdi-arrow-right-bold-hexagon-outline::before{content:"\F058"}.mdi-arrow-right-bold-outline::before{content:"\F9C1"}.mdi-arrow-right-box::before{content:"\F6C1"}.mdi-arrow-right-circle::before{content:"\FCBB"}.mdi-arrow-right-circle-outline::before{content:"\FCBC"}.mdi-arrow-right-drop-circle::before{content:"\F059"}.mdi-arrow-right-drop-circle-outline::before{content:"\F05A"}.mdi-arrow-right-thick::before{content:"\F055"}.mdi-arrow-split-horizontal::before{content:"\F93A"}.mdi-arrow-split-vertical::before{content:"\F93B"}.mdi-arrow-top-left::before{content:"\F05B"}.mdi-arrow-top-left-bold-outline::before{content:"\F9C2"}.mdi-arrow-top-left-bottom-right::before{content:"\FE92"}.mdi-arrow-top-left-bottom-right-bold::before{content:"\FE93"}.mdi-arrow-top-left-thick::before{content:"\F9C3"}.mdi-arrow-top-right::before{content:"\F05C"}.mdi-arrow-top-right-bold-outline::before{content:"\F9C4"}.mdi-arrow-top-right-bottom-left::before{content:"\FE94"}.mdi-arrow-top-right-bottom-left-bold::before{content:"\FE95"}.mdi-arrow-top-right-thick::before{content:"\F9C5"}.mdi-arrow-up::before{content:"\F05D"}.mdi-arrow-up-bold::before{content:"\F736"}.mdi-arrow-up-bold-box::before{content:"\F737"}.mdi-arrow-up-bold-box-outline::before{content:"\F738"}.mdi-arrow-up-bold-circle::before{content:"\F05F"}.mdi-arrow-up-bold-circle-outline::before{content:"\F060"}.mdi-arrow-up-bold-hexagon-outline::before{content:"\F061"}.mdi-arrow-up-bold-outline::before{content:"\F9C6"}.mdi-arrow-up-box::before{content:"\F6C2"}.mdi-arrow-up-circle::before{content:"\FCBD"}.mdi-arrow-up-circle-outline::before{content:"\FCBE"}.mdi-arrow-up-down::before{content:"\FE96"}.mdi-arrow-up-down-bold::before{content:"\FE97"}.mdi-arrow-up-down-bold-outline::before{content:"\F9C7"}.mdi-arrow-up-drop-circle::before{content:"\F062"}.mdi-arrow-up-drop-circle-outline::before{content:"\F063"}.mdi-arrow-up-thick::before{content:"\F05E"}.mdi-artist::before{content:"\F802"}.mdi-artist-outline::before{content:"\FCC5"}.mdi-artstation::before{content:"\FB37"}.mdi-aspect-ratio::before{content:"\FA23"}.mdi-assistant::before{content:"\F064"}.mdi-asterisk::before{content:"\F6C3"}.mdi-at::before{content:"\F065"}.mdi-atlassian::before{content:"\F803"}.mdi-atm::before{content:"\FD23"}.mdi-atom::before{content:"\F767"}.mdi-atom-variant::before{content:"\FE98"}.mdi-attachment::before{content:"\F066"}.mdi-audio-video::before{content:"\F93C"}.mdi-audiobook::before{content:"\F067"}.mdi-augmented-reality::before{content:"\F84F"}.mdi-auto-fix::before{content:"\F068"}.mdi-auto-upload::before{content:"\F069"}.mdi-autorenew::before{content:"\F06A"}.mdi-av-timer::before{content:"\F06B"}.mdi-aws::before{content:"\FDF2"}.mdi-axe::before{content:"\F8C7"}.mdi-axis::before{content:"\FD24"}.mdi-axis-arrow::before{content:"\FD25"}.mdi-axis-arrow-lock::before{content:"\FD26"}.mdi-axis-lock::before{content:"\FD27"}.mdi-axis-x-arrow::before{content:"\FD28"}.mdi-axis-x-arrow-lock::before{content:"\FD29"}.mdi-axis-x-rotate-clockwise::before{content:"\FD2A"}.mdi-axis-x-rotate-counterclockwise::before{content:"\FD2B"}.mdi-axis-x-y-arrow-lock::before{content:"\FD2C"}.mdi-axis-y-arrow::before{content:"\FD2D"}.mdi-axis-y-arrow-lock::before{content:"\FD2E"}.mdi-axis-y-rotate-clockwise::before{content:"\FD2F"}.mdi-axis-y-rotate-counterclockwise::before{content:"\FD30"}.mdi-axis-z-arrow::before{content:"\FD31"}.mdi-axis-z-arrow-lock::before{content:"\FD32"}.mdi-axis-z-rotate-clockwise::before{content:"\FD33"}.mdi-axis-z-rotate-counterclockwise::before{content:"\FD34"}.mdi-azure::before{content:"\F804"}.mdi-babel::before{content:"\FA24"}.mdi-baby::before{content:"\F06C"}.mdi-baby-bottle::before{content:"\FF56"}.mdi-baby-bottle-outline::before{content:"\FF57"}.mdi-baby-buggy::before{content:"\F68E"}.mdi-baby-face::before{content:"\FE99"}.mdi-baby-face-outline::before{content:"\FE9A"}.mdi-backburger::before{content:"\F06D"}.mdi-backspace::before{content:"\F06E"}.mdi-backspace-outline::before{content:"\FB38"}.mdi-backspace-reverse::before{content:"\FE9B"}.mdi-backspace-reverse-outline::before{content:"\FE9C"}.mdi-backup-restore::before{content:"\F06F"}.mdi-bacteria::before{content:"\FEF2"}.mdi-bacteria-outline::before{content:"\FEF3"}.mdi-badminton::before{content:"\F850"}.mdi-bag-carry-on::before{content:"\FF58"}.mdi-bag-carry-on-check::before{content:"\FD41"}.mdi-bag-carry-on-off::before{content:"\FF59"}.mdi-bag-checked::before{content:"\FF5A"}.mdi-bag-personal::before{content:"\FDF3"}.mdi-bag-personal-off::before{content:"\FDF4"}.mdi-bag-personal-off-outline::before{content:"\FDF5"}.mdi-bag-personal-outline::before{content:"\FDF6"}.mdi-baguette::before{content:"\FF5B"}.mdi-balloon::before{content:"\FA25"}.mdi-ballot::before{content:"\F9C8"}.mdi-ballot-outline::before{content:"\F9C9"}.mdi-ballot-recount::before{content:"\FC15"}.mdi-ballot-recount-outline::before{content:"\FC16"}.mdi-bandage::before{content:"\FD8B"}.mdi-bandcamp::before{content:"\F674"}.mdi-bank::before{content:"\F070"}.mdi-bank-minus::before{content:"\FD8C"}.mdi-bank-outline::before{content:"\FE9D"}.mdi-bank-plus::before{content:"\FD8D"}.mdi-bank-remove::before{content:"\FD8E"}.mdi-bank-transfer::before{content:"\FA26"}.mdi-bank-transfer-in::before{content:"\FA27"}.mdi-bank-transfer-out::before{content:"\FA28"}.mdi-barcode::before{content:"\F071"}.mdi-barcode-scan::before{content:"\F072"}.mdi-barley::before{content:"\F073"}.mdi-barley-off::before{content:"\FB39"}.mdi-barn::before{content:"\FB3A"}.mdi-barrel::before{content:"\F074"}.mdi-baseball::before{content:"\F851"}.mdi-baseball-bat::before{content:"\F852"}.mdi-basecamp::before{content:"\F075"}.mdi-basket::before{content:"\F076"}.mdi-basket-fill::before{content:"\F077"}.mdi-basket-unfill::before{content:"\F078"}.mdi-basketball::before{content:"\F805"}.mdi-basketball-hoop::before{content:"\FC17"}.mdi-basketball-hoop-outline::before{content:"\FC18"}.mdi-bat::before{content:"\FB3B"}.mdi-battery::before{content:"\F079"}.mdi-battery-10::before{content:"\F07A"}.mdi-battery-10-bluetooth::before{content:"\F93D"}.mdi-battery-20::before{content:"\F07B"}.mdi-battery-20-bluetooth::before{content:"\F93E"}.mdi-battery-30::before{content:"\F07C"}.mdi-battery-30-bluetooth::before{content:"\F93F"}.mdi-battery-40::before{content:"\F07D"}.mdi-battery-40-bluetooth::before{content:"\F940"}.mdi-battery-50::before{content:"\F07E"}.mdi-battery-50-bluetooth::before{content:"\F941"}.mdi-battery-60::before{content:"\F07F"}.mdi-battery-60-bluetooth::before{content:"\F942"}.mdi-battery-70::before{content:"\F080"}.mdi-battery-70-bluetooth::before{content:"\F943"}.mdi-battery-80::before{content:"\F081"}.mdi-battery-80-bluetooth::before{content:"\F944"}.mdi-battery-90::before{content:"\F082"}.mdi-battery-90-bluetooth::before{content:"\F945"}.mdi-battery-alert::before{content:"\F083"}.mdi-battery-alert-bluetooth::before{content:"\F946"}.mdi-battery-bluetooth::before{content:"\F947"}.mdi-battery-bluetooth-variant::before{content:"\F948"}.mdi-battery-charging::before{content:"\F084"}.mdi-battery-charging-10::before{content:"\F89B"}.mdi-battery-charging-100::before{content:"\F085"}.mdi-battery-charging-20::before{content:"\F086"}.mdi-battery-charging-30::before{content:"\F087"}.mdi-battery-charging-40::before{content:"\F088"}.mdi-battery-charging-50::before{content:"\F89C"}.mdi-battery-charging-60::before{content:"\F089"}.mdi-battery-charging-70::before{content:"\F89D"}.mdi-battery-charging-80::before{content:"\F08A"}.mdi-battery-charging-90::before{content:"\F08B"}.mdi-battery-charging-outline::before{content:"\F89E"}.mdi-battery-charging-wireless::before{content:"\F806"}.mdi-battery-charging-wireless-10::before{content:"\F807"}.mdi-battery-charging-wireless-20::before{content:"\F808"}.mdi-battery-charging-wireless-30::before{content:"\F809"}.mdi-battery-charging-wireless-40::before{content:"\F80A"}.mdi-battery-charging-wireless-50::before{content:"\F80B"}.mdi-battery-charging-wireless-60::before{content:"\F80C"}.mdi-battery-charging-wireless-70::before{content:"\F80D"}.mdi-battery-charging-wireless-80::before{content:"\F80E"}.mdi-battery-charging-wireless-90::before{content:"\F80F"}.mdi-battery-charging-wireless-alert::before{content:"\F810"}.mdi-battery-charging-wireless-outline::before{content:"\F811"}.mdi-battery-minus::before{content:"\F08C"}.mdi-battery-negative::before{content:"\F08D"}.mdi-battery-outline::before{content:"\F08E"}.mdi-battery-plus::before{content:"\F08F"}.mdi-battery-positive::before{content:"\F090"}.mdi-battery-unknown::before{content:"\F091"}.mdi-battery-unknown-bluetooth::before{content:"\F949"}.mdi-battlenet::before{content:"\FB3C"}.mdi-beach::before{content:"\F092"}.mdi-beaker::before{content:"\FCC6"}.mdi-beaker-outline::before{content:"\F68F"}.mdi-beats::before{content:"\F097"}.mdi-bed-empty::before{content:"\F89F"}.mdi-beer::before{content:"\F098"}.mdi-behance::before{content:"\F099"}.mdi-bell::before{content:"\F09A"}.mdi-bell-alert::before{content:"\FD35"}.mdi-bell-alert-outline::before{content:"\FE9E"}.mdi-bell-circle::before{content:"\FD36"}.mdi-bell-circle-outline::before{content:"\FD37"}.mdi-bell-off::before{content:"\F09B"}.mdi-bell-off-outline::before{content:"\FA90"}.mdi-bell-outline::before{content:"\F09C"}.mdi-bell-plus::before{content:"\F09D"}.mdi-bell-plus-outline::before{content:"\FA91"}.mdi-bell-ring::before{content:"\F09E"}.mdi-bell-ring-outline::before{content:"\F09F"}.mdi-bell-sleep::before{content:"\F0A0"}.mdi-bell-sleep-outline::before{content:"\FA92"}.mdi-beta::before{content:"\F0A1"}.mdi-betamax::before{content:"\F9CA"}.mdi-biathlon::before{content:"\FDF7"}.mdi-bible::before{content:"\F0A2"}.mdi-bike::before{content:"\F0A3"}.mdi-billiards::before{content:"\FB3D"}.mdi-billiards-rack::before{content:"\FB3E"}.mdi-bing::before{content:"\F0A4"}.mdi-binoculars::before{content:"\F0A5"}.mdi-bio::before{content:"\F0A6"}.mdi-biohazard::before{content:"\F0A7"}.mdi-bitbucket::before{content:"\F0A8"}.mdi-bitcoin::before{content:"\F812"}.mdi-black-mesa::before{content:"\F0A9"}.mdi-blackberry::before{content:"\F0AA"}.mdi-blender::before{content:"\FCC7"}.mdi-blender-software::before{content:"\F0AB"}.mdi-blinds::before{content:"\F0AC"}.mdi-block-helper::before{content:"\F0AD"}.mdi-blogger::before{content:"\F0AE"}.mdi-blood-bag::before{content:"\FCC8"}.mdi-bluetooth::before{content:"\F0AF"}.mdi-bluetooth-audio::before{content:"\F0B0"}.mdi-bluetooth-connect::before{content:"\F0B1"}.mdi-bluetooth-off::before{content:"\F0B2"}.mdi-bluetooth-settings::before{content:"\F0B3"}.mdi-bluetooth-transfer::before{content:"\F0B4"}.mdi-blur::before{content:"\F0B5"}.mdi-blur-linear::before{content:"\F0B6"}.mdi-blur-off::before{content:"\F0B7"}.mdi-blur-radial::before{content:"\F0B8"}.mdi-bolnisi-cross::before{content:"\FCC9"}.mdi-bolt::before{content:"\FD8F"}.mdi-bomb::before{content:"\F690"}.mdi-bomb-off::before{content:"\F6C4"}.mdi-bone::before{content:"\F0B9"}.mdi-book::before{content:"\F0BA"}.mdi-book-lock::before{content:"\F799"}.mdi-book-lock-open::before{content:"\F79A"}.mdi-book-minus::before{content:"\F5D9"}.mdi-book-minus-multiple::before{content:"\FA93"}.mdi-book-multiple::before{content:"\F0BB"}.mdi-book-open::before{content:"\F0BD"}.mdi-book-open-outline::before{content:"\FB3F"}.mdi-book-open-page-variant::before{content:"\F5DA"}.mdi-book-open-variant::before{content:"\F0BE"}.mdi-book-outline::before{content:"\FB40"}.mdi-book-play::before{content:"\FE9F"}.mdi-book-play-outline::before{content:"\FEA0"}.mdi-book-plus::before{content:"\F5DB"}.mdi-book-plus-multiple::before{content:"\FA94"}.mdi-book-remove::before{content:"\FA96"}.mdi-book-remove-multiple::before{content:"\FA95"}.mdi-book-search::before{content:"\FEA1"}.mdi-book-search-outline::before{content:"\FEA2"}.mdi-book-variant::before{content:"\F0BF"}.mdi-book-variant-multiple::before{content:"\F0BC"}.mdi-bookmark::before{content:"\F0C0"}.mdi-bookmark-check::before{content:"\F0C1"}.mdi-bookmark-minus::before{content:"\F9CB"}.mdi-bookmark-minus-outline::before{content:"\F9CC"}.mdi-bookmark-multiple::before{content:"\FDF8"}.mdi-bookmark-multiple-outline::before{content:"\FDF9"}.mdi-bookmark-music::before{content:"\F0C2"}.mdi-bookmark-off::before{content:"\F9CD"}.mdi-bookmark-off-outline::before{content:"\F9CE"}.mdi-bookmark-outline::before{content:"\F0C3"}.mdi-bookmark-plus::before{content:"\F0C5"}.mdi-bookmark-plus-outline::before{content:"\F0C4"}.mdi-bookmark-remove::before{content:"\F0C6"}.mdi-boom-gate::before{content:"\FEA3"}.mdi-boom-gate-alert::before{content:"\FEA4"}.mdi-boom-gate-alert-outline::before{content:"\FEA5"}.mdi-boom-gate-down::before{content:"\FEA6"}.mdi-boom-gate-down-outline::before{content:"\FEA7"}.mdi-boom-gate-outline::before{content:"\FEA8"}.mdi-boom-gate-up::before{content:"\FEA9"}.mdi-boom-gate-up-outline::before{content:"\FEAA"}.mdi-boombox::before{content:"\F5DC"}.mdi-bootstrap::before{content:"\F6C5"}.mdi-border-all::before{content:"\F0C7"}.mdi-border-all-variant::before{content:"\F8A0"}.mdi-border-bottom::before{content:"\F0C8"}.mdi-border-bottom-variant::before{content:"\F8A1"}.mdi-border-color::before{content:"\F0C9"}.mdi-border-horizontal::before{content:"\F0CA"}.mdi-border-inside::before{content:"\F0CB"}.mdi-border-left::before{content:"\F0CC"}.mdi-border-left-variant::before{content:"\F8A2"}.mdi-border-none::before{content:"\F0CD"}.mdi-border-none-variant::before{content:"\F8A3"}.mdi-border-outside::before{content:"\F0CE"}.mdi-border-right::before{content:"\F0CF"}.mdi-border-right-variant::before{content:"\F8A4"}.mdi-border-style::before{content:"\F0D0"}.mdi-border-top::before{content:"\F0D1"}.mdi-border-top-variant::before{content:"\F8A5"}.mdi-border-vertical::before{content:"\F0D2"}.mdi-bottle-wine::before{content:"\F853"}.mdi-bow-tie::before{content:"\F677"}.mdi-bowl::before{content:"\F617"}.mdi-bowling::before{content:"\F0D3"}.mdi-box::before{content:"\F0D4"}.mdi-box-cutter::before{content:"\F0D5"}.mdi-box-shadow::before{content:"\F637"}.mdi-boxing-glove::before{content:"\FB41"}.mdi-braille::before{content:"\F9CF"}.mdi-brain::before{content:"\F9D0"}.mdi-bread-slice::before{content:"\FCCA"}.mdi-bread-slice-outline::before{content:"\FCCB"}.mdi-bridge::before{content:"\F618"}.mdi-briefcase::before{content:"\F0D6"}.mdi-briefcase-account::before{content:"\FCCC"}.mdi-briefcase-account-outline::before{content:"\FCCD"}.mdi-briefcase-check::before{content:"\F0D7"}.mdi-briefcase-download::before{content:"\F0D8"}.mdi-briefcase-download-outline::before{content:"\FC19"}.mdi-briefcase-edit::before{content:"\FA97"}.mdi-briefcase-edit-outline::before{content:"\FC1A"}.mdi-briefcase-minus::before{content:"\FA29"}.mdi-briefcase-minus-outline::before{content:"\FC1B"}.mdi-briefcase-outline::before{content:"\F813"}.mdi-briefcase-plus::before{content:"\FA2A"}.mdi-briefcase-plus-outline::before{content:"\FC1C"}.mdi-briefcase-remove::before{content:"\FA2B"}.mdi-briefcase-remove-outline::before{content:"\FC1D"}.mdi-briefcase-search::before{content:"\FA2C"}.mdi-briefcase-search-outline::before{content:"\FC1E"}.mdi-briefcase-upload::before{content:"\F0D9"}.mdi-briefcase-upload-outline::before{content:"\FC1F"}.mdi-brightness-1::before{content:"\F0DA"}.mdi-brightness-2::before{content:"\F0DB"}.mdi-brightness-3::before{content:"\F0DC"}.mdi-brightness-4::before{content:"\F0DD"}.mdi-brightness-5::before{content:"\F0DE"}.mdi-brightness-6::before{content:"\F0DF"}.mdi-brightness-7::before{content:"\F0E0"}.mdi-brightness-auto::before{content:"\F0E1"}.mdi-brightness-percent::before{content:"\FCCE"}.mdi-broom::before{content:"\F0E2"}.mdi-brush::before{content:"\F0E3"}.mdi-buddhism::before{content:"\F94A"}.mdi-buffer::before{content:"\F619"}.mdi-bug::before{content:"\F0E4"}.mdi-bug-check::before{content:"\FA2D"}.mdi-bug-check-outline::before{content:"\FA2E"}.mdi-bug-outline::before{content:"\FA2F"}.mdi-bugle::before{content:"\FD90"}.mdi-bulldozer::before{content:"\FB07"}.mdi-bullet::before{content:"\FCCF"}.mdi-bulletin-board::before{content:"\F0E5"}.mdi-bullhorn::before{content:"\F0E6"}.mdi-bullhorn-outline::before{content:"\FB08"}.mdi-bullseye::before{content:"\F5DD"}.mdi-bullseye-arrow::before{content:"\F8C8"}.mdi-bus::before{content:"\F0E7"}.mdi-bus-alert::before{content:"\FA98"}.mdi-bus-articulated-end::before{content:"\F79B"}.mdi-bus-articulated-front::before{content:"\F79C"}.mdi-bus-clock::before{content:"\F8C9"}.mdi-bus-double-decker::before{content:"\F79D"}.mdi-bus-multiple::before{content:"\FF5C"}.mdi-bus-school::before{content:"\F79E"}.mdi-bus-side::before{content:"\F79F"}.mdi-cached::before{content:"\F0E8"}.mdi-cactus::before{content:"\FD91"}.mdi-cake::before{content:"\F0E9"}.mdi-cake-layered::before{content:"\F0EA"}.mdi-cake-variant::before{content:"\F0EB"}.mdi-calculator::before{content:"\F0EC"}.mdi-calculator-variant::before{content:"\FA99"}.mdi-calendar::before{content:"\F0ED"}.mdi-calendar-account::before{content:"\FEF4"}.mdi-calendar-account-outline::before{content:"\FEF5"}.mdi-calendar-alert::before{content:"\FA30"}.mdi-calendar-blank::before{content:"\F0EE"}.mdi-calendar-blank-outline::before{content:"\FB42"}.mdi-calendar-check::before{content:"\F0EF"}.mdi-calendar-check-outline::before{content:"\FC20"}.mdi-calendar-clock::before{content:"\F0F0"}.mdi-calendar-edit::before{content:"\F8A6"}.mdi-calendar-export::before{content:"\FB09"}.mdi-calendar-heart::before{content:"\F9D1"}.mdi-calendar-import::before{content:"\FB0A"}.mdi-calendar-minus::before{content:"\FD38"}.mdi-calendar-month::before{content:"\FDFA"}.mdi-calendar-month-outline::before{content:"\FDFB"}.mdi-calendar-multiple::before{content:"\F0F1"}.mdi-calendar-multiple-check::before{content:"\F0F2"}.mdi-calendar-multiselect::before{content:"\FA31"}.mdi-calendar-outline::before{content:"\FB43"}.mdi-calendar-plus::before{content:"\F0F3"}.mdi-calendar-question::before{content:"\F691"}.mdi-calendar-range::before{content:"\F678"}.mdi-calendar-range-outline::before{content:"\FB44"}.mdi-calendar-remove::before{content:"\F0F4"}.mdi-calendar-remove-outline::before{content:"\FC21"}.mdi-calendar-repeat::before{content:"\FEAB"}.mdi-calendar-repeat-outline::before{content:"\FEAC"}.mdi-calendar-search::before{content:"\F94B"}.mdi-calendar-star::before{content:"\F9D2"}.mdi-calendar-text::before{content:"\F0F5"}.mdi-calendar-text-outline::before{content:"\FC22"}.mdi-calendar-today::before{content:"\F0F6"}.mdi-calendar-week::before{content:"\FA32"}.mdi-calendar-week-begin::before{content:"\FA33"}.mdi-calendar-weekend::before{content:"\FEF6"}.mdi-calendar-weekend-outline::before{content:"\FEF7"}.mdi-call-made::before{content:"\F0F7"}.mdi-call-merge::before{content:"\F0F8"}.mdi-call-missed::before{content:"\F0F9"}.mdi-call-received::before{content:"\F0FA"}.mdi-call-split::before{content:"\F0FB"}.mdi-camcorder::before{content:"\F0FC"}.mdi-camcorder-box::before{content:"\F0FD"}.mdi-camcorder-box-off::before{content:"\F0FE"}.mdi-camcorder-off::before{content:"\F0FF"}.mdi-camera::before{content:"\F100"}.mdi-camera-account::before{content:"\F8CA"}.mdi-camera-burst::before{content:"\F692"}.mdi-camera-control::before{content:"\FB45"}.mdi-camera-enhance::before{content:"\F101"}.mdi-camera-enhance-outline::before{content:"\FB46"}.mdi-camera-front::before{content:"\F102"}.mdi-camera-front-variant::before{content:"\F103"}.mdi-camera-gopro::before{content:"\F7A0"}.mdi-camera-image::before{content:"\F8CB"}.mdi-camera-iris::before{content:"\F104"}.mdi-camera-metering-center::before{content:"\F7A1"}.mdi-camera-metering-matrix::before{content:"\F7A2"}.mdi-camera-metering-partial::before{content:"\F7A3"}.mdi-camera-metering-spot::before{content:"\F7A4"}.mdi-camera-off::before{content:"\F5DF"}.mdi-camera-outline::before{content:"\FD39"}.mdi-camera-party-mode::before{content:"\F105"}.mdi-camera-plus::before{content:"\FEF8"}.mdi-camera-plus-outline::before{content:"\FEF9"}.mdi-camera-rear::before{content:"\F106"}.mdi-camera-rear-variant::before{content:"\F107"}.mdi-camera-retake::before{content:"\FDFC"}.mdi-camera-retake-outline::before{content:"\FDFD"}.mdi-camera-switch::before{content:"\F108"}.mdi-camera-timer::before{content:"\F109"}.mdi-camera-wireless::before{content:"\FD92"}.mdi-camera-wireless-outline::before{content:"\FD93"}.mdi-campfire::before{content:"\FEFA"}.mdi-cancel::before{content:"\F739"}.mdi-candle::before{content:"\F5E2"}.mdi-candycane::before{content:"\F10A"}.mdi-cannabis::before{content:"\F7A5"}.mdi-caps-lock::before{content:"\FA9A"}.mdi-car::before{content:"\F10B"}.mdi-car-back::before{content:"\FDFE"}.mdi-car-battery::before{content:"\F10C"}.mdi-car-brake-abs::before{content:"\FC23"}.mdi-car-brake-alert::before{content:"\FC24"}.mdi-car-brake-hold::before{content:"\FD3A"}.mdi-car-brake-parking::before{content:"\FD3B"}.mdi-car-connected::before{content:"\F10D"}.mdi-car-convertible::before{content:"\F7A6"}.mdi-car-cruise-control::before{content:"\FD3C"}.mdi-car-defrost-front::before{content:"\FD3D"}.mdi-car-defrost-rear::before{content:"\FD3E"}.mdi-car-door::before{content:"\FB47"}.mdi-car-electric::before{content:"\FB48"}.mdi-car-esp::before{content:"\FC25"}.mdi-car-estate::before{content:"\F7A7"}.mdi-car-hatchback::before{content:"\F7A8"}.mdi-car-key::before{content:"\FB49"}.mdi-car-light-dimmed::before{content:"\FC26"}.mdi-car-light-fog::before{content:"\FC27"}.mdi-car-light-high::before{content:"\FC28"}.mdi-car-limousine::before{content:"\F8CC"}.mdi-car-multiple::before{content:"\FB4A"}.mdi-car-off::before{content:"\FDFF"}.mdi-car-parking-lights::before{content:"\FD3F"}.mdi-car-pickup::before{content:"\F7A9"}.mdi-car-shift-pattern::before{content:"\FF5D"}.mdi-car-side::before{content:"\F7AA"}.mdi-car-sports::before{content:"\F7AB"}.mdi-car-tire-alert::before{content:"\FC29"}.mdi-car-traction-control::before{content:"\FD40"}.mdi-car-wash::before{content:"\F10E"}.mdi-caravan::before{content:"\F7AC"}.mdi-card::before{content:"\FB4B"}.mdi-card-bulleted::before{content:"\FB4C"}.mdi-card-bulleted-off::before{content:"\FB4D"}.mdi-card-bulleted-off-outline::before{content:"\FB4E"}.mdi-card-bulleted-outline::before{content:"\FB4F"}.mdi-card-bulleted-settings::before{content:"\FB50"}.mdi-card-bulleted-settings-outline::before{content:"\FB51"}.mdi-card-outline::before{content:"\FB52"}.mdi-card-text::before{content:"\FB53"}.mdi-card-text-outline::before{content:"\FB54"}.mdi-cards::before{content:"\F638"}.mdi-cards-club::before{content:"\F8CD"}.mdi-cards-diamond::before{content:"\F8CE"}.mdi-cards-heart::before{content:"\F8CF"}.mdi-cards-outline::before{content:"\F639"}.mdi-cards-playing-outline::before{content:"\F63A"}.mdi-cards-spade::before{content:"\F8D0"}.mdi-cards-variant::before{content:"\F6C6"}.mdi-carrot::before{content:"\F10F"}.mdi-cart::before{content:"\F110"}.mdi-cart-arrow-down::before{content:"\FD42"}.mdi-cart-arrow-right::before{content:"\FC2A"}.mdi-cart-arrow-up::before{content:"\FD43"}.mdi-cart-minus::before{content:"\FD44"}.mdi-cart-off::before{content:"\F66B"}.mdi-cart-outline::before{content:"\F111"}.mdi-cart-plus::before{content:"\F112"}.mdi-cart-remove::before{content:"\FD45"}.mdi-case-sensitive-alt::before{content:"\F113"}.mdi-cash::before{content:"\F114"}.mdi-cash-100::before{content:"\F115"}.mdi-cash-marker::before{content:"\FD94"}.mdi-cash-multiple::before{content:"\F116"}.mdi-cash-refund::before{content:"\FA9B"}.mdi-cash-register::before{content:"\FCD0"}.mdi-cash-usd::before{content:"\F117"}.mdi-cassette::before{content:"\F9D3"}.mdi-cast::before{content:"\F118"}.mdi-cast-connected::before{content:"\F119"}.mdi-cast-education::before{content:"\FE6D"}.mdi-cast-off::before{content:"\F789"}.mdi-castle::before{content:"\F11A"}.mdi-cat::before{content:"\F11B"}.mdi-cctv::before{content:"\F7AD"}.mdi-ceiling-light::before{content:"\F768"}.mdi-cellphone::before{content:"\F11C"}.mdi-cellphone-android::before{content:"\F11D"}.mdi-cellphone-arrow-down::before{content:"\F9D4"}.mdi-cellphone-basic::before{content:"\F11E"}.mdi-cellphone-dock::before{content:"\F11F"}.mdi-cellphone-erase::before{content:"\F94C"}.mdi-cellphone-information::before{content:"\FF5E"}.mdi-cellphone-iphone::before{content:"\F120"}.mdi-cellphone-key::before{content:"\F94D"}.mdi-cellphone-link::before{content:"\F121"}.mdi-cellphone-link-off::before{content:"\F122"}.mdi-cellphone-lock::before{content:"\F94E"}.mdi-cellphone-message::before{content:"\F8D2"}.mdi-cellphone-nfc::before{content:"\FEAD"}.mdi-cellphone-off::before{content:"\F94F"}.mdi-cellphone-screenshot::before{content:"\FA34"}.mdi-cellphone-settings::before{content:"\F123"}.mdi-cellphone-settings-variant::before{content:"\F950"}.mdi-cellphone-sound::before{content:"\F951"}.mdi-cellphone-text::before{content:"\F8D1"}.mdi-cellphone-wireless::before{content:"\F814"}.mdi-celtic-cross::before{content:"\FCD1"}.mdi-certificate::before{content:"\F124"}.mdi-chair-rolling::before{content:"\FFBA"}.mdi-chair-school::before{content:"\F125"}.mdi-charity::before{content:"\FC2B"}.mdi-chart-arc::before{content:"\F126"}.mdi-chart-areaspline::before{content:"\F127"}.mdi-chart-areaspline-variant::before{content:"\FEAE"}.mdi-chart-bar::before{content:"\F128"}.mdi-chart-bar-stacked::before{content:"\F769"}.mdi-chart-bell-curve::before{content:"\FC2C"}.mdi-chart-bubble::before{content:"\F5E3"}.mdi-chart-donut::before{content:"\F7AE"}.mdi-chart-donut-variant::before{content:"\F7AF"}.mdi-chart-gantt::before{content:"\F66C"}.mdi-chart-histogram::before{content:"\F129"}.mdi-chart-line::before{content:"\F12A"}.mdi-chart-line-stacked::before{content:"\F76A"}.mdi-chart-line-variant::before{content:"\F7B0"}.mdi-chart-multiline::before{content:"\F8D3"}.mdi-chart-pie::before{content:"\F12B"}.mdi-chart-scatter-plot::before{content:"\FEAF"}.mdi-chart-scatter-plot-hexbin::before{content:"\F66D"}.mdi-chart-timeline::before{content:"\F66E"}.mdi-chart-timeline-variant::before{content:"\FEB0"}.mdi-chart-tree::before{content:"\FEB1"}.mdi-chat::before{content:"\FB55"}.mdi-chat-alert::before{content:"\FB56"}.mdi-chat-outline::before{content:"\FEFB"}.mdi-chat-processing::before{content:"\FB57"}.mdi-check::before{content:"\F12C"}.mdi-check-all::before{content:"\F12D"}.mdi-check-bold::before{content:"\FE6E"}.mdi-check-box-multiple-outline::before{content:"\FC2D"}.mdi-check-box-outline::before{content:"\FC2E"}.mdi-check-circle::before{content:"\F5E0"}.mdi-check-circle-outline::before{content:"\F5E1"}.mdi-check-decagram::before{content:"\F790"}.mdi-check-network::before{content:"\FC2F"}.mdi-check-network-outline::before{content:"\FC30"}.mdi-check-outline::before{content:"\F854"}.mdi-check-underline::before{content:"\FE70"}.mdi-check-underline-circle::before{content:"\FE71"}.mdi-check-underline-circle-outline::before{content:"\FE72"}.mdi-checkbook::before{content:"\FA9C"}.mdi-checkbox-blank::before{content:"\F12E"}.mdi-checkbox-blank-circle::before{content:"\F12F"}.mdi-checkbox-blank-circle-outline::before{content:"\F130"}.mdi-checkbox-blank-outline::before{content:"\F131"}.mdi-checkbox-intermediate::before{content:"\F855"}.mdi-checkbox-marked::before{content:"\F132"}.mdi-checkbox-marked-circle::before{content:"\F133"}.mdi-checkbox-marked-circle-outline::before{content:"\F134"}.mdi-checkbox-marked-outline::before{content:"\F135"}.mdi-checkbox-multiple-blank::before{content:"\F136"}.mdi-checkbox-multiple-blank-circle::before{content:"\F63B"}.mdi-checkbox-multiple-blank-circle-outline::before{content:"\F63C"}.mdi-checkbox-multiple-blank-outline::before{content:"\F137"}.mdi-checkbox-multiple-marked::before{content:"\F138"}.mdi-checkbox-multiple-marked-circle::before{content:"\F63D"}.mdi-checkbox-multiple-marked-circle-outline::before{content:"\F63E"}.mdi-checkbox-multiple-marked-outline::before{content:"\F139"}.mdi-checkerboard::before{content:"\F13A"}.mdi-chef-hat::before{content:"\FB58"}.mdi-chemical-weapon::before{content:"\F13B"}.mdi-chess-bishop::before{content:"\F85B"}.mdi-chess-king::before{content:"\F856"}.mdi-chess-knight::before{content:"\F857"}.mdi-chess-pawn::before{content:"\F858"}.mdi-chess-queen::before{content:"\F859"}.mdi-chess-rook::before{content:"\F85A"}.mdi-chevron-double-down::before{content:"\F13C"}.mdi-chevron-double-left::before{content:"\F13D"}.mdi-chevron-double-right::before{content:"\F13E"}.mdi-chevron-double-up::before{content:"\F13F"}.mdi-chevron-down::before{content:"\F140"}.mdi-chevron-down-box::before{content:"\F9D5"}.mdi-chevron-down-box-outline::before{content:"\F9D6"}.mdi-chevron-down-circle::before{content:"\FB0B"}.mdi-chevron-down-circle-outline::before{content:"\FB0C"}.mdi-chevron-left::before{content:"\F141"}.mdi-chevron-left-box::before{content:"\F9D7"}.mdi-chevron-left-box-outline::before{content:"\F9D8"}.mdi-chevron-left-circle::before{content:"\FB0D"}.mdi-chevron-left-circle-outline::before{content:"\FB0E"}.mdi-chevron-right::before{content:"\F142"}.mdi-chevron-right-box::before{content:"\F9D9"}.mdi-chevron-right-box-outline::before{content:"\F9DA"}.mdi-chevron-right-circle::before{content:"\FB0F"}.mdi-chevron-right-circle-outline::before{content:"\FB10"}.mdi-chevron-triple-down::before{content:"\FD95"}.mdi-chevron-triple-left::before{content:"\FD96"}.mdi-chevron-triple-right::before{content:"\FD97"}.mdi-chevron-triple-up::before{content:"\FD98"}.mdi-chevron-up::before{content:"\F143"}.mdi-chevron-up-box::before{content:"\F9DB"}.mdi-chevron-up-box-outline::before{content:"\F9DC"}.mdi-chevron-up-circle::before{content:"\FB11"}.mdi-chevron-up-circle-outline::before{content:"\FB12"}.mdi-chili-hot::before{content:"\F7B1"}.mdi-chili-medium::before{content:"\F7B2"}.mdi-chili-mild::before{content:"\F7B3"}.mdi-chip::before{content:"\F61A"}.mdi-christianity::before{content:"\F952"}.mdi-christianity-outline::before{content:"\FCD2"}.mdi-church::before{content:"\F144"}.mdi-circle::before{content:"\F764"}.mdi-circle-double::before{content:"\FEB2"}.mdi-circle-edit-outline::before{content:"\F8D4"}.mdi-circle-expand::before{content:"\FEB3"}.mdi-circle-medium::before{content:"\F9DD"}.mdi-circle-outline::before{content:"\F765"}.mdi-circle-slice-1::before{content:"\FA9D"}.mdi-circle-slice-2::before{content:"\FA9E"}.mdi-circle-slice-3::before{content:"\FA9F"}.mdi-circle-slice-4::before{content:"\FAA0"}.mdi-circle-slice-5::before{content:"\FAA1"}.mdi-circle-slice-6::before{content:"\FAA2"}.mdi-circle-slice-7::before{content:"\FAA3"}.mdi-circle-slice-8::before{content:"\FAA4"}.mdi-circle-small::before{content:"\F9DE"}.mdi-circular-saw::before{content:"\FE73"}.mdi-cisco-webex::before{content:"\F145"}.mdi-city::before{content:"\F146"}.mdi-city-variant::before{content:"\FA35"}.mdi-city-variant-outline::before{content:"\FA36"}.mdi-clipboard::before{content:"\F147"}.mdi-clipboard-account::before{content:"\F148"}.mdi-clipboard-account-outline::before{content:"\FC31"}.mdi-clipboard-alert::before{content:"\F149"}.mdi-clipboard-alert-outline::before{content:"\FCD3"}.mdi-clipboard-arrow-down::before{content:"\F14A"}.mdi-clipboard-arrow-down-outline::before{content:"\FC32"}.mdi-clipboard-arrow-left::before{content:"\F14B"}.mdi-clipboard-arrow-left-outline::before{content:"\FCD4"}.mdi-clipboard-arrow-right::before{content:"\FCD5"}.mdi-clipboard-arrow-right-outline::before{content:"\FCD6"}.mdi-clipboard-arrow-up::before{content:"\FC33"}.mdi-clipboard-arrow-up-outline::before{content:"\FC34"}.mdi-clipboard-check::before{content:"\F14C"}.mdi-clipboard-check-outline::before{content:"\F8A7"}.mdi-clipboard-flow::before{content:"\F6C7"}.mdi-clipboard-outline::before{content:"\F14D"}.mdi-clipboard-play::before{content:"\FC35"}.mdi-clipboard-play-outline::before{content:"\FC36"}.mdi-clipboard-plus::before{content:"\F750"}.mdi-clipboard-pulse::before{content:"\F85C"}.mdi-clipboard-pulse-outline::before{content:"\F85D"}.mdi-clipboard-text::before{content:"\F14E"}.mdi-clipboard-text-outline::before{content:"\FA37"}.mdi-clipboard-text-play::before{content:"\FC37"}.mdi-clipboard-text-play-outline::before{content:"\FC38"}.mdi-clippy::before{content:"\F14F"}.mdi-clock::before{content:"\F953"}.mdi-clock-alert::before{content:"\F954"}.mdi-clock-alert-outline::before{content:"\F5CE"}.mdi-clock-digital::before{content:"\FEB4"}.mdi-clock-end::before{content:"\F151"}.mdi-clock-fast::before{content:"\F152"}.mdi-clock-in::before{content:"\F153"}.mdi-clock-out::before{content:"\F154"}.mdi-clock-outline::before{content:"\F150"}.mdi-clock-start::before{content:"\F155"}.mdi-close::before{content:"\F156"}.mdi-close-box::before{content:"\F157"}.mdi-close-box-multiple::before{content:"\FC39"}.mdi-close-box-multiple-outline::before{content:"\FC3A"}.mdi-close-box-outline::before{content:"\F158"}.mdi-close-circle::before{content:"\F159"}.mdi-close-circle-outline::before{content:"\F15A"}.mdi-close-network::before{content:"\F15B"}.mdi-close-network-outline::before{content:"\FC3B"}.mdi-close-octagon::before{content:"\F15C"}.mdi-close-octagon-outline::before{content:"\F15D"}.mdi-close-outline::before{content:"\F6C8"}.mdi-closed-caption::before{content:"\F15E"}.mdi-closed-caption-outline::before{content:"\FD99"}.mdi-cloud::before{content:"\F15F"}.mdi-cloud-alert::before{content:"\F9DF"}.mdi-cloud-braces::before{content:"\F7B4"}.mdi-cloud-check::before{content:"\F160"}.mdi-cloud-circle::before{content:"\F161"}.mdi-cloud-download::before{content:"\F162"}.mdi-cloud-download-outline::before{content:"\FB59"}.mdi-cloud-off-outline::before{content:"\F164"}.mdi-cloud-outline::before{content:"\F163"}.mdi-cloud-print::before{content:"\F165"}.mdi-cloud-print-outline::before{content:"\F166"}.mdi-cloud-question::before{content:"\FA38"}.mdi-cloud-search::before{content:"\F955"}.mdi-cloud-search-outline::before{content:"\F956"}.mdi-cloud-sync::before{content:"\F63F"}.mdi-cloud-tags::before{content:"\F7B5"}.mdi-cloud-upload::before{content:"\F167"}.mdi-cloud-upload-outline::before{content:"\FB5A"}.mdi-clover::before{content:"\F815"}.mdi-code-array::before{content:"\F168"}.mdi-code-braces::before{content:"\F169"}.mdi-code-brackets::before{content:"\F16A"}.mdi-code-equal::before{content:"\F16B"}.mdi-code-greater-than::before{content:"\F16C"}.mdi-code-greater-than-or-equal::before{content:"\F16D"}.mdi-code-less-than::before{content:"\F16E"}.mdi-code-less-than-or-equal::before{content:"\F16F"}.mdi-code-not-equal::before{content:"\F170"}.mdi-code-not-equal-variant::before{content:"\F171"}.mdi-code-parentheses::before{content:"\F172"}.mdi-code-string::before{content:"\F173"}.mdi-code-tags::before{content:"\F174"}.mdi-code-tags-check::before{content:"\F693"}.mdi-codepen::before{content:"\F175"}.mdi-coffee::before{content:"\F176"}.mdi-coffee-off::before{content:"\FFCA"}.mdi-coffee-off-outline::before{content:"\FFCB"}.mdi-coffee-outline::before{content:"\F6C9"}.mdi-coffee-to-go::before{content:"\F177"}.mdi-coffin::before{content:"\FB5B"}.mdi-cogs::before{content:"\F8D5"}.mdi-coin::before{content:"\F178"}.mdi-coins::before{content:"\F694"}.mdi-collage::before{content:"\F640"}.mdi-collapse-all::before{content:"\FAA5"}.mdi-collapse-all-outline::before{content:"\FAA6"}.mdi-color-helper::before{content:"\F179"}.mdi-comma::before{content:"\FE74"}.mdi-comma-box::before{content:"\FE75"}.mdi-comma-box-outline::before{content:"\FE76"}.mdi-comma-circle::before{content:"\FE77"}.mdi-comma-circle-outline::before{content:"\FE78"}.mdi-comment::before{content:"\F17A"}.mdi-comment-account::before{content:"\F17B"}.mdi-comment-account-outline::before{content:"\F17C"}.mdi-comment-alert::before{content:"\F17D"}.mdi-comment-alert-outline::before{content:"\F17E"}.mdi-comment-arrow-left::before{content:"\F9E0"}.mdi-comment-arrow-left-outline::before{content:"\F9E1"}.mdi-comment-arrow-right::before{content:"\F9E2"}.mdi-comment-arrow-right-outline::before{content:"\F9E3"}.mdi-comment-check::before{content:"\F17F"}.mdi-comment-check-outline::before{content:"\F180"}.mdi-comment-eye::before{content:"\FA39"}.mdi-comment-eye-outline::before{content:"\FA3A"}.mdi-comment-multiple::before{content:"\F85E"}.mdi-comment-multiple-outline::before{content:"\F181"}.mdi-comment-outline::before{content:"\F182"}.mdi-comment-plus::before{content:"\F9E4"}.mdi-comment-plus-outline::before{content:"\F183"}.mdi-comment-processing::before{content:"\F184"}.mdi-comment-processing-outline::before{content:"\F185"}.mdi-comment-question::before{content:"\F816"}.mdi-comment-question-outline::before{content:"\F186"}.mdi-comment-remove::before{content:"\F5DE"}.mdi-comment-remove-outline::before{content:"\F187"}.mdi-comment-search::before{content:"\FA3B"}.mdi-comment-search-outline::before{content:"\FA3C"}.mdi-comment-text::before{content:"\F188"}.mdi-comment-text-multiple::before{content:"\F85F"}.mdi-comment-text-multiple-outline::before{content:"\F860"}.mdi-comment-text-outline::before{content:"\F189"}.mdi-compare::before{content:"\F18A"}.mdi-compass::before{content:"\F18B"}.mdi-compass-off::before{content:"\FB5C"}.mdi-compass-off-outline::before{content:"\FB5D"}.mdi-compass-outline::before{content:"\F18C"}.mdi-console::before{content:"\F18D"}.mdi-console-line::before{content:"\F7B6"}.mdi-console-network::before{content:"\F8A8"}.mdi-console-network-outline::before{content:"\FC3C"}.mdi-contact-mail::before{content:"\F18E"}.mdi-contact-mail-outline::before{content:"\FEB5"}.mdi-contact-phone::before{content:"\FEB6"}.mdi-contact-phone-outline::before{content:"\FEB7"}.mdi-contactless-payment::before{content:"\FD46"}.mdi-contacts::before{content:"\F6CA"}.mdi-contain::before{content:"\FA3D"}.mdi-contain-end::before{content:"\FA3E"}.mdi-contain-start::before{content:"\FA3F"}.mdi-content-copy::before{content:"\F18F"}.mdi-content-cut::before{content:"\F190"}.mdi-content-duplicate::before{content:"\F191"}.mdi-content-paste::before{content:"\F192"}.mdi-content-save::before{content:"\F193"}.mdi-content-save-alert::before{content:"\FF5F"}.mdi-content-save-alert-outline::before{content:"\FF60"}.mdi-content-save-all::before{content:"\F194"}.mdi-content-save-all-outline::before{content:"\FF61"}.mdi-content-save-edit::before{content:"\FCD7"}.mdi-content-save-edit-outline::before{content:"\FCD8"}.mdi-content-save-move::before{content:"\FE79"}.mdi-content-save-move-outline::before{content:"\FE7A"}.mdi-content-save-outline::before{content:"\F817"}.mdi-content-save-settings::before{content:"\F61B"}.mdi-content-save-settings-outline::before{content:"\FB13"}.mdi-contrast::before{content:"\F195"}.mdi-contrast-box::before{content:"\F196"}.mdi-contrast-circle::before{content:"\F197"}.mdi-controller-classic::before{content:"\FB5E"}.mdi-controller-classic-outline::before{content:"\FB5F"}.mdi-cookie::before{content:"\F198"}.mdi-copyright::before{content:"\F5E6"}.mdi-cordova::before{content:"\F957"}.mdi-corn::before{content:"\F7B7"}.mdi-counter::before{content:"\F199"}.mdi-cow::before{content:"\F19A"}.mdi-cowboy::before{content:"\FEB8"}.mdi-cpu-32-bit::before{content:"\FEFC"}.mdi-cpu-64-bit::before{content:"\FEFD"}.mdi-crane::before{content:"\F861"}.mdi-creation::before{content:"\F1C9"}.mdi-creative-commons::before{content:"\FD47"}.mdi-credit-card::before{content:"\F19B"}.mdi-credit-card-clock::before{content:"\FEFE"}.mdi-credit-card-clock-outline::before{content:"\FFBC"}.mdi-credit-card-marker::before{content:"\FD9A"}.mdi-credit-card-multiple::before{content:"\F19C"}.mdi-credit-card-off::before{content:"\F5E4"}.mdi-credit-card-plus::before{content:"\F675"}.mdi-credit-card-refund::before{content:"\FAA7"}.mdi-credit-card-scan::before{content:"\F19D"}.mdi-credit-card-settings::before{content:"\F8D6"}.mdi-credit-card-wireless::before{content:"\FD48"}.mdi-cricket::before{content:"\FD49"}.mdi-crop::before{content:"\F19E"}.mdi-crop-free::before{content:"\F19F"}.mdi-crop-landscape::before{content:"\F1A0"}.mdi-crop-portrait::before{content:"\F1A1"}.mdi-crop-rotate::before{content:"\F695"}.mdi-crop-square::before{content:"\F1A2"}.mdi-crosshairs::before{content:"\F1A3"}.mdi-crosshairs-gps::before{content:"\F1A4"}.mdi-crosshairs-off::before{content:"\FF62"}.mdi-crown::before{content:"\F1A5"}.mdi-cryengine::before{content:"\F958"}.mdi-crystal-ball::before{content:"\FB14"}.mdi-cube::before{content:"\F1A6"}.mdi-cube-outline::before{content:"\F1A7"}.mdi-cube-scan::before{content:"\FB60"}.mdi-cube-send::before{content:"\F1A8"}.mdi-cube-unfolded::before{content:"\F1A9"}.mdi-cup::before{content:"\F1AA"}.mdi-cup-off::before{content:"\F5E5"}.mdi-cup-water::before{content:"\F1AB"}.mdi-cupboard::before{content:"\FF63"}.mdi-cupboard-outline::before{content:"\FF64"}.mdi-cupcake::before{content:"\F959"}.mdi-curling::before{content:"\F862"}.mdi-currency-bdt::before{content:"\F863"}.mdi-currency-brl::before{content:"\FB61"}.mdi-currency-btc::before{content:"\F1AC"}.mdi-currency-chf::before{content:"\F7B8"}.mdi-currency-cny::before{content:"\F7B9"}.mdi-currency-eth::before{content:"\F7BA"}.mdi-currency-eur::before{content:"\F1AD"}.mdi-currency-gbp::before{content:"\F1AE"}.mdi-currency-ils::before{content:"\FC3D"}.mdi-currency-inr::before{content:"\F1AF"}.mdi-currency-jpy::before{content:"\F7BB"}.mdi-currency-krw::before{content:"\F7BC"}.mdi-currency-kzt::before{content:"\F864"}.mdi-currency-ngn::before{content:"\F1B0"}.mdi-currency-php::before{content:"\F9E5"}.mdi-currency-rial::before{content:"\FEB9"}.mdi-currency-rub::before{content:"\F1B1"}.mdi-currency-sign::before{content:"\F7BD"}.mdi-currency-try::before{content:"\F1B2"}.mdi-currency-twd::before{content:"\F7BE"}.mdi-currency-usd::before{content:"\F1B3"}.mdi-currency-usd-off::before{content:"\F679"}.mdi-current-ac::before{content:"\F95A"}.mdi-current-dc::before{content:"\F95B"}.mdi-cursor-default::before{content:"\F1B4"}.mdi-cursor-default-click::before{content:"\FCD9"}.mdi-cursor-default-click-outline::before{content:"\FCDA"}.mdi-cursor-default-outline::before{content:"\F1B5"}.mdi-cursor-move::before{content:"\F1B6"}.mdi-cursor-pointer::before{content:"\F1B7"}.mdi-cursor-text::before{content:"\F5E7"}.mdi-database::before{content:"\F1B8"}.mdi-database-check::before{content:"\FAA8"}.mdi-database-edit::before{content:"\FB62"}.mdi-database-export::before{content:"\F95D"}.mdi-database-import::before{content:"\F95C"}.mdi-database-lock::before{content:"\FAA9"}.mdi-database-minus::before{content:"\F1B9"}.mdi-database-plus::before{content:"\F1BA"}.mdi-database-refresh::before{content:"\FCDB"}.mdi-database-remove::before{content:"\FCDC"}.mdi-database-search::before{content:"\F865"}.mdi-database-settings::before{content:"\FCDD"}.mdi-death-star::before{content:"\F8D7"}.mdi-death-star-variant::before{content:"\F8D8"}.mdi-deathly-hallows::before{content:"\FB63"}.mdi-debian::before{content:"\F8D9"}.mdi-debug-step-into::before{content:"\F1BB"}.mdi-debug-step-out::before{content:"\F1BC"}.mdi-debug-step-over::before{content:"\F1BD"}.mdi-decagram::before{content:"\F76B"}.mdi-decagram-outline::before{content:"\F76C"}.mdi-decimal-decrease::before{content:"\F1BE"}.mdi-decimal-increase::before{content:"\F1BF"}.mdi-delete::before{content:"\F1C0"}.mdi-delete-circle::before{content:"\F682"}.mdi-delete-circle-outline::before{content:"\FB64"}.mdi-delete-empty::before{content:"\F6CB"}.mdi-delete-empty-outline::before{content:"\FEBA"}.mdi-delete-forever::before{content:"\F5E8"}.mdi-delete-forever-outline::before{content:"\FB65"}.mdi-delete-outline::before{content:"\F9E6"}.mdi-delete-restore::before{content:"\F818"}.mdi-delete-sweep::before{content:"\F5E9"}.mdi-delete-sweep-outline::before{content:"\FC3E"}.mdi-delete-variant::before{content:"\F1C1"}.mdi-delta::before{content:"\F1C2"}.mdi-desk-lamp::before{content:"\F95E"}.mdi-deskphone::before{content:"\F1C3"}.mdi-desktop-classic::before{content:"\F7BF"}.mdi-desktop-mac::before{content:"\F1C4"}.mdi-desktop-mac-dashboard::before{content:"\F9E7"}.mdi-desktop-tower::before{content:"\F1C5"}.mdi-desktop-tower-monitor::before{content:"\FAAA"}.mdi-details::before{content:"\F1C6"}.mdi-dev-to::before{content:"\FD4A"}.mdi-developer-board::before{content:"\F696"}.mdi-deviantart::before{content:"\F1C7"}.mdi-dialpad::before{content:"\F61C"}.mdi-diameter::before{content:"\FC3F"}.mdi-diameter-outline::before{content:"\FC40"}.mdi-diameter-variant::before{content:"\FC41"}.mdi-diamond::before{content:"\FB66"}.mdi-diamond-outline::before{content:"\FB67"}.mdi-diamond-stone::before{content:"\F1C8"}.mdi-dice-1::before{content:"\F1CA"}.mdi-dice-2::before{content:"\F1CB"}.mdi-dice-3::before{content:"\F1CC"}.mdi-dice-4::before{content:"\F1CD"}.mdi-dice-5::before{content:"\F1CE"}.mdi-dice-6::before{content:"\F1CF"}.mdi-dice-d10::before{content:"\F76E"}.mdi-dice-d12::before{content:"\F866"}.mdi-dice-d20::before{content:"\F5EA"}.mdi-dice-d4::before{content:"\F5EB"}.mdi-dice-d6::before{content:"\F5EC"}.mdi-dice-d8::before{content:"\F5ED"}.mdi-dice-multiple::before{content:"\F76D"}.mdi-dictionary::before{content:"\F61D"}.mdi-dip-switch::before{content:"\F7C0"}.mdi-directions::before{content:"\F1D0"}.mdi-directions-fork::before{content:"\F641"}.mdi-disc::before{content:"\F5EE"}.mdi-disc-alert::before{content:"\F1D1"}.mdi-disc-player::before{content:"\F95F"}.mdi-discord::before{content:"\F66F"}.mdi-dishwasher::before{content:"\FAAB"}.mdi-disqus::before{content:"\F1D2"}.mdi-disqus-outline::before{content:"\F1D3"}.mdi-diving-flippers::before{content:"\FD9B"}.mdi-diving-helmet::before{content:"\FD9C"}.mdi-diving-scuba::before{content:"\FD9D"}.mdi-diving-scuba-flag::before{content:"\FD9E"}.mdi-diving-scuba-tank::before{content:"\FD9F"}.mdi-diving-scuba-tank-multiple::before{content:"\FDA0"}.mdi-diving-snorkel::before{content:"\FDA1"}.mdi-division::before{content:"\F1D4"}.mdi-division-box::before{content:"\F1D5"}.mdi-dlna::before{content:"\FA40"}.mdi-dna::before{content:"\F683"}.mdi-dns::before{content:"\F1D6"}.mdi-dns-outline::before{content:"\FB68"}.mdi-do-not-disturb::before{content:"\F697"}.mdi-do-not-disturb-off::before{content:"\F698"}.mdi-docker::before{content:"\F867"}.mdi-doctor::before{content:"\FA41"}.mdi-dog::before{content:"\FA42"}.mdi-dog-service::before{content:"\FAAC"}.mdi-dog-side::before{content:"\FA43"}.mdi-dolby::before{content:"\F6B2"}.mdi-dolly::before{content:"\FEBB"}.mdi-domain::before{content:"\F1D7"}.mdi-domain-off::before{content:"\FD4B"}.mdi-donkey::before{content:"\F7C1"}.mdi-door::before{content:"\F819"}.mdi-door-closed::before{content:"\F81A"}.mdi-door-open::before{content:"\F81B"}.mdi-doorbell-video::before{content:"\F868"}.mdi-dot-net::before{content:"\FAAD"}.mdi-dots-horizontal::before{content:"\F1D8"}.mdi-dots-horizontal-circle::before{content:"\F7C2"}.mdi-dots-horizontal-circle-outline::before{content:"\FB69"}.mdi-dots-vertical::before{content:"\F1D9"}.mdi-dots-vertical-circle::before{content:"\F7C3"}.mdi-dots-vertical-circle-outline::before{content:"\FB6A"}.mdi-douban::before{content:"\F699"}.mdi-download::before{content:"\F1DA"}.mdi-download-multiple::before{content:"\F9E8"}.mdi-download-network::before{content:"\F6F3"}.mdi-download-network-outline::before{content:"\FC42"}.mdi-download-outline::before{content:"\FB6B"}.mdi-drag::before{content:"\F1DB"}.mdi-drag-horizontal::before{content:"\F1DC"}.mdi-drag-variant::before{content:"\FB6C"}.mdi-drag-vertical::before{content:"\F1DD"}.mdi-drama-masks::before{content:"\FCDE"}.mdi-draw::before{content:"\FF66"}.mdi-drawing::before{content:"\F1DE"}.mdi-drawing-box::before{content:"\F1DF"}.mdi-dresser::before{content:"\FF67"}.mdi-dresser-outline::before{content:"\FF68"}.mdi-dribbble::before{content:"\F1E0"}.mdi-dribbble-box::before{content:"\F1E1"}.mdi-drone::before{content:"\F1E2"}.mdi-dropbox::before{content:"\F1E3"}.mdi-drupal::before{content:"\F1E4"}.mdi-duck::before{content:"\F1E5"}.mdi-dumbbell::before{content:"\F1E6"}.mdi-dump-truck::before{content:"\FC43"}.mdi-ear-hearing::before{content:"\F7C4"}.mdi-ear-hearing-off::before{content:"\FA44"}.mdi-earth::before{content:"\F1E7"}.mdi-earth-box::before{content:"\F6CC"}.mdi-earth-box-off::before{content:"\F6CD"}.mdi-earth-off::before{content:"\F1E8"}.mdi-edge::before{content:"\F1E9"}.mdi-egg::before{content:"\FAAE"}.mdi-egg-easter::before{content:"\FAAF"}.mdi-eight-track::before{content:"\F9E9"}.mdi-eject::before{content:"\F1EA"}.mdi-eject-outline::before{content:"\FB6D"}.mdi-electric-switch::before{content:"\FEBC"}.mdi-elephant::before{content:"\F7C5"}.mdi-elevation-decline::before{content:"\F1EB"}.mdi-elevation-rise::before{content:"\F1EC"}.mdi-elevator::before{content:"\F1ED"}.mdi-ellipse::before{content:"\FEBD"}.mdi-ellipse-outline::before{content:"\FEBE"}.mdi-email::before{content:"\F1EE"}.mdi-email-alert::before{content:"\F6CE"}.mdi-email-box::before{content:"\FCDF"}.mdi-email-check::before{content:"\FAB0"}.mdi-email-check-outline::before{content:"\FAB1"}.mdi-email-edit::before{content:"\FF00"}.mdi-email-edit-outline::before{content:"\FF01"}.mdi-email-lock::before{content:"\F1F1"}.mdi-email-mark-as-unread::before{content:"\FB6E"}.mdi-email-minus::before{content:"\FF02"}.mdi-email-minus-outline::before{content:"\FF03"}.mdi-email-multiple::before{content:"\FF04"}.mdi-email-multiple-outline::before{content:"\FF05"}.mdi-email-open::before{content:"\F1EF"}.mdi-email-open-multiple::before{content:"\FF06"}.mdi-email-open-multiple-outline::before{content:"\FF07"}.mdi-email-open-outline::before{content:"\F5EF"}.mdi-email-outline::before{content:"\F1F0"}.mdi-email-plus::before{content:"\F9EA"}.mdi-email-plus-outline::before{content:"\F9EB"}.mdi-email-search::before{content:"\F960"}.mdi-email-search-outline::before{content:"\F961"}.mdi-email-variant::before{content:"\F5F0"}.mdi-ember::before{content:"\FB15"}.mdi-emby::before{content:"\F6B3"}.mdi-emoticon::before{content:"\FC44"}.mdi-emoticon-angry::before{content:"\FC45"}.mdi-emoticon-angry-outline::before{content:"\FC46"}.mdi-emoticon-cool::before{content:"\FC47"}.mdi-emoticon-cool-outline::before{content:"\F1F3"}.mdi-emoticon-cry::before{content:"\FC48"}.mdi-emoticon-cry-outline::before{content:"\FC49"}.mdi-emoticon-dead::before{content:"\FC4A"}.mdi-emoticon-dead-outline::before{content:"\F69A"}.mdi-emoticon-devil::before{content:"\FC4B"}.mdi-emoticon-devil-outline::before{content:"\F1F4"}.mdi-emoticon-excited::before{content:"\FC4C"}.mdi-emoticon-excited-outline::before{content:"\F69B"}.mdi-emoticon-frown::before{content:"\FF69"}.mdi-emoticon-frown-outline::before{content:"\FF6A"}.mdi-emoticon-happy::before{content:"\FC4D"}.mdi-emoticon-happy-outline::before{content:"\F1F5"}.mdi-emoticon-kiss::before{content:"\FC4E"}.mdi-emoticon-kiss-outline::before{content:"\FC4F"}.mdi-emoticon-neutral::before{content:"\FC50"}.mdi-emoticon-neutral-outline::before{content:"\F1F6"}.mdi-emoticon-outline::before{content:"\F1F2"}.mdi-emoticon-poop::before{content:"\F1F7"}.mdi-emoticon-poop-outline::before{content:"\FC51"}.mdi-emoticon-sad::before{content:"\FC52"}.mdi-emoticon-sad-outline::before{content:"\F1F8"}.mdi-emoticon-tongue::before{content:"\F1F9"}.mdi-emoticon-tongue-outline::before{content:"\FC53"}.mdi-emoticon-wink::before{content:"\FC54"}.mdi-emoticon-wink-outline::before{content:"\FC55"}.mdi-engine::before{content:"\F1FA"}.mdi-engine-off::before{content:"\FA45"}.mdi-engine-off-outline::before{content:"\FA46"}.mdi-engine-outline::before{content:"\F1FB"}.mdi-equal::before{content:"\F1FC"}.mdi-equal-box::before{content:"\F1FD"}.mdi-equalizer::before{content:"\FEBF"}.mdi-equalizer-outline::before{content:"\FEC0"}.mdi-eraser::before{content:"\F1FE"}.mdi-eraser-variant::before{content:"\F642"}.mdi-escalator::before{content:"\F1FF"}.mdi-eslint::before{content:"\FC56"}.mdi-et::before{content:"\FAB2"}.mdi-ethereum::before{content:"\F869"}.mdi-ethernet::before{content:"\F200"}.mdi-ethernet-cable::before{content:"\F201"}.mdi-ethernet-cable-off::before{content:"\F202"}.mdi-etsy::before{content:"\F203"}.mdi-ev-station::before{content:"\F5F1"}.mdi-eventbrite::before{content:"\F7C6"}.mdi-evernote::before{content:"\F204"}.mdi-exclamation::before{content:"\F205"}.mdi-exit-run::before{content:"\FA47"}.mdi-exit-to-app::before{content:"\F206"}.mdi-expand-all::before{content:"\FAB3"}.mdi-expand-all-outline::before{content:"\FAB4"}.mdi-exponent::before{content:"\F962"}.mdi-exponent-box::before{content:"\F963"}.mdi-export::before{content:"\F207"}.mdi-export-variant::before{content:"\FB6F"}.mdi-eye::before{content:"\F208"}.mdi-eye-check::before{content:"\FCE0"}.mdi-eye-check-outline::before{content:"\FCE1"}.mdi-eye-circle::before{content:"\FB70"}.mdi-eye-circle-outline::before{content:"\FB71"}.mdi-eye-off::before{content:"\F209"}.mdi-eye-off-outline::before{content:"\F6D0"}.mdi-eye-outline::before{content:"\F6CF"}.mdi-eye-plus::before{content:"\F86A"}.mdi-eye-plus-outline::before{content:"\F86B"}.mdi-eye-settings::before{content:"\F86C"}.mdi-eye-settings-outline::before{content:"\F86D"}.mdi-eyedropper::before{content:"\F20A"}.mdi-eyedropper-variant::before{content:"\F20B"}.mdi-face::before{content:"\F643"}.mdi-face-agent::before{content:"\FD4C"}.mdi-face-outline::before{content:"\FB72"}.mdi-face-profile::before{content:"\F644"}.mdi-face-recognition::before{content:"\FC57"}.mdi-facebook::before{content:"\F20C"}.mdi-facebook-box::before{content:"\F20D"}.mdi-facebook-messenger::before{content:"\F20E"}.mdi-facebook-workplace::before{content:"\FB16"}.mdi-factory::before{content:"\F20F"}.mdi-fan::before{content:"\F210"}.mdi-fan-off::before{content:"\F81C"}.mdi-fast-forward::before{content:"\F211"}.mdi-fast-forward-10::before{content:"\FD4D"}.mdi-fast-forward-30::before{content:"\FCE2"}.mdi-fast-forward-outline::before{content:"\F6D1"}.mdi-fax::before{content:"\F212"}.mdi-feather::before{content:"\F6D2"}.mdi-feature-search::before{content:"\FA48"}.mdi-feature-search-outline::before{content:"\FA49"}.mdi-fedora::before{content:"\F8DA"}.mdi-ferris-wheel::before{content:"\FEC1"}.mdi-ferry::before{content:"\F213"}.mdi-file::before{content:"\F214"}.mdi-file-account::before{content:"\F73A"}.mdi-file-alert::before{content:"\FA4A"}.mdi-file-alert-outline::before{content:"\FA4B"}.mdi-file-cabinet::before{content:"\FAB5"}.mdi-file-cad::before{content:"\FF08"}.mdi-file-cad-box::before{content:"\FF09"}.mdi-file-cancel::before{content:"\FDA2"}.mdi-file-cancel-outline::before{content:"\FDA3"}.mdi-file-chart::before{content:"\F215"}.mdi-file-check::before{content:"\F216"}.mdi-file-check-outline::before{content:"\FE7B"}.mdi-file-cloud::before{content:"\F217"}.mdi-file-compare::before{content:"\F8A9"}.mdi-file-delimited::before{content:"\F218"}.mdi-file-delimited-outline::before{content:"\FEC2"}.mdi-file-document::before{content:"\F219"}.mdi-file-document-box::before{content:"\F21A"}.mdi-file-document-box-check::before{content:"\FEC3"}.mdi-file-document-box-check-outline::before{content:"\FEC4"}.mdi-file-document-box-minus::before{content:"\FEC5"}.mdi-file-document-box-minus-outline::before{content:"\FEC6"}.mdi-file-document-box-multiple::before{content:"\FAB6"}.mdi-file-document-box-multiple-outline::before{content:"\FAB7"}.mdi-file-document-box-outline::before{content:"\F9EC"}.mdi-file-document-box-plus::before{content:"\FEC7"}.mdi-file-document-box-plus-outline::before{content:"\FEC8"}.mdi-file-document-box-remove::before{content:"\FEC9"}.mdi-file-document-box-remove-outline::before{content:"\FECA"}.mdi-file-document-box-search::before{content:"\FECB"}.mdi-file-document-box-search-outline::before{content:"\FECC"}.mdi-file-document-edit::before{content:"\FDA4"}.mdi-file-document-edit-outline::before{content:"\FDA5"}.mdi-file-document-outline::before{content:"\F9ED"}.mdi-file-download::before{content:"\F964"}.mdi-file-download-outline::before{content:"\F965"}.mdi-file-excel::before{content:"\F21B"}.mdi-file-excel-box::before{content:"\F21C"}.mdi-file-export::before{content:"\F21D"}.mdi-file-eye::before{content:"\FDA6"}.mdi-file-eye-outline::before{content:"\FDA7"}.mdi-file-find::before{content:"\F21E"}.mdi-file-find-outline::before{content:"\FB73"}.mdi-file-hidden::before{content:"\F613"}.mdi-file-image::before{content:"\F21F"}.mdi-file-image-outline::before{content:"\FECD"}.mdi-file-import::before{content:"\F220"}.mdi-file-lock::before{content:"\F221"}.mdi-file-move::before{content:"\FAB8"}.mdi-file-multiple::before{content:"\F222"}.mdi-file-music::before{content:"\F223"}.mdi-file-music-outline::before{content:"\FE7C"}.mdi-file-outline::before{content:"\F224"}.mdi-file-pdf::before{content:"\F225"}.mdi-file-pdf-box::before{content:"\F226"}.mdi-file-pdf-outline::before{content:"\FE7D"}.mdi-file-percent::before{content:"\F81D"}.mdi-file-plus::before{content:"\F751"}.mdi-file-plus-outline::before{content:"\FF0A"}.mdi-file-powerpoint::before{content:"\F227"}.mdi-file-powerpoint-box::before{content:"\F228"}.mdi-file-presentation-box::before{content:"\F229"}.mdi-file-question::before{content:"\F86E"}.mdi-file-remove::before{content:"\FB74"}.mdi-file-replace::before{content:"\FB17"}.mdi-file-replace-outline::before{content:"\FB18"}.mdi-file-restore::before{content:"\F670"}.mdi-file-search::before{content:"\FC58"}.mdi-file-search-outline::before{content:"\FC59"}.mdi-file-send::before{content:"\F22A"}.mdi-file-table::before{content:"\FC5A"}.mdi-file-table-outline::before{content:"\FC5B"}.mdi-file-tree::before{content:"\F645"}.mdi-file-undo::before{content:"\F8DB"}.mdi-file-upload::before{content:"\FA4C"}.mdi-file-upload-outline::before{content:"\FA4D"}.mdi-file-video::before{content:"\F22B"}.mdi-file-video-outline::before{content:"\FE10"}.mdi-file-word::before{content:"\F22C"}.mdi-file-word-box::before{content:"\F22D"}.mdi-file-xml::before{content:"\F22E"}.mdi-film::before{content:"\F22F"}.mdi-filmstrip::before{content:"\F230"}.mdi-filmstrip-off::before{content:"\F231"}.mdi-filter::before{content:"\F232"}.mdi-filter-minus::before{content:"\FF0B"}.mdi-filter-minus-outline::before{content:"\FF0C"}.mdi-filter-outline::before{content:"\F233"}.mdi-filter-plus::before{content:"\FF0D"}.mdi-filter-plus-outline::before{content:"\FF0E"}.mdi-filter-remove::before{content:"\F234"}.mdi-filter-remove-outline::before{content:"\F235"}.mdi-filter-variant::before{content:"\F236"}.mdi-finance::before{content:"\F81E"}.mdi-find-replace::before{content:"\F6D3"}.mdi-fingerprint::before{content:"\F237"}.mdi-fingerprint-off::before{content:"\FECE"}.mdi-fire::before{content:"\F238"}.mdi-fire-extinguisher::before{content:"\FF0F"}.mdi-fire-truck::before{content:"\F8AA"}.mdi-firebase::before{content:"\F966"}.mdi-firefox::before{content:"\F239"}.mdi-fireplace::before{content:"\FE11"}.mdi-fireplace-off::before{content:"\FE12"}.mdi-firework::before{content:"\FE13"}.mdi-fish::before{content:"\F23A"}.mdi-fishbowl::before{content:"\FF10"}.mdi-fishbowl-outline::before{content:"\FF11"}.mdi-fit-to-page::before{content:"\FF12"}.mdi-fit-to-page-outline::before{content:"\FF13"}.mdi-flag::before{content:"\F23B"}.mdi-flag-checkered::before{content:"\F23C"}.mdi-flag-minus::before{content:"\FB75"}.mdi-flag-outline::before{content:"\F23D"}.mdi-flag-plus::before{content:"\FB76"}.mdi-flag-remove::before{content:"\FB77"}.mdi-flag-triangle::before{content:"\F23F"}.mdi-flag-variant::before{content:"\F240"}.mdi-flag-variant-outline::before{content:"\F23E"}.mdi-flare::before{content:"\FD4E"}.mdi-flash::before{content:"\F241"}.mdi-flash-alert::before{content:"\FF14"}.mdi-flash-alert-outline::before{content:"\FF15"}.mdi-flash-auto::before{content:"\F242"}.mdi-flash-circle::before{content:"\F81F"}.mdi-flash-off::before{content:"\F243"}.mdi-flash-outline::before{content:"\F6D4"}.mdi-flash-red-eye::before{content:"\F67A"}.mdi-flashlight::before{content:"\F244"}.mdi-flashlight-off::before{content:"\F245"}.mdi-flask::before{content:"\F093"}.mdi-flask-empty::before{content:"\F094"}.mdi-flask-empty-outline::before{content:"\F095"}.mdi-flask-outline::before{content:"\F096"}.mdi-flattr::before{content:"\F246"}.mdi-flickr::before{content:"\FCE3"}.mdi-flip-to-back::before{content:"\F247"}.mdi-flip-to-front::before{content:"\F248"}.mdi-floor-lamp::before{content:"\F8DC"}.mdi-floor-plan::before{content:"\F820"}.mdi-floppy::before{content:"\F249"}.mdi-floppy-variant::before{content:"\F9EE"}.mdi-flower::before{content:"\F24A"}.mdi-flower-outline::before{content:"\F9EF"}.mdi-flower-poppy::before{content:"\FCE4"}.mdi-flower-tulip::before{content:"\F9F0"}.mdi-flower-tulip-outline::before{content:"\F9F1"}.mdi-focus-auto::before{content:"\FF6B"}.mdi-focus-field::before{content:"\FF6C"}.mdi-focus-field-horizontal::before{content:"\FF6D"}.mdi-focus-field-vertical::before{content:"\FF6E"}.mdi-folder::before{content:"\F24B"}.mdi-folder-account::before{content:"\F24C"}.mdi-folder-account-outline::before{content:"\FB78"}.mdi-folder-alert::before{content:"\FDA8"}.mdi-folder-alert-outline::before{content:"\FDA9"}.mdi-folder-clock::before{content:"\FAB9"}.mdi-folder-clock-outline::before{content:"\FABA"}.mdi-folder-download::before{content:"\F24D"}.mdi-folder-edit::before{content:"\F8DD"}.mdi-folder-edit-outline::before{content:"\FDAA"}.mdi-folder-google-drive::before{content:"\F24E"}.mdi-folder-image::before{content:"\F24F"}.mdi-folder-key::before{content:"\F8AB"}.mdi-folder-key-network::before{content:"\F8AC"}.mdi-folder-key-network-outline::before{content:"\FC5C"}.mdi-folder-lock::before{content:"\F250"}.mdi-folder-lock-open::before{content:"\F251"}.mdi-folder-move::before{content:"\F252"}.mdi-folder-multiple::before{content:"\F253"}.mdi-folder-multiple-image::before{content:"\F254"}.mdi-folder-multiple-outline::before{content:"\F255"}.mdi-folder-network::before{content:"\F86F"}.mdi-folder-network-outline::before{content:"\FC5D"}.mdi-folder-open::before{content:"\F76F"}.mdi-folder-open-outline::before{content:"\FDAB"}.mdi-folder-outline::before{content:"\F256"}.mdi-folder-plus::before{content:"\F257"}.mdi-folder-plus-outline::before{content:"\FB79"}.mdi-folder-pound::before{content:"\FCE5"}.mdi-folder-pound-outline::before{content:"\FCE6"}.mdi-folder-remove::before{content:"\F258"}.mdi-folder-remove-outline::before{content:"\FB7A"}.mdi-folder-search::before{content:"\F967"}.mdi-folder-search-outline::before{content:"\F968"}.mdi-folder-star::before{content:"\F69C"}.mdi-folder-star-outline::before{content:"\FB7B"}.mdi-folder-sync::before{content:"\FCE7"}.mdi-folder-sync-outline::before{content:"\FCE8"}.mdi-folder-text::before{content:"\FC5E"}.mdi-folder-text-outline::before{content:"\FC5F"}.mdi-folder-upload::before{content:"\F259"}.mdi-font-awesome::before{content:"\F03A"}.mdi-food::before{content:"\F25A"}.mdi-food-apple::before{content:"\F25B"}.mdi-food-apple-outline::before{content:"\FC60"}.mdi-food-croissant::before{content:"\F7C7"}.mdi-food-fork-drink::before{content:"\F5F2"}.mdi-food-off::before{content:"\F5F3"}.mdi-food-variant::before{content:"\F25C"}.mdi-foot-print::before{content:"\FF6F"}.mdi-football::before{content:"\F25D"}.mdi-football-australian::before{content:"\F25E"}.mdi-football-helmet::before{content:"\F25F"}.mdi-forklift::before{content:"\F7C8"}.mdi-format-align-bottom::before{content:"\F752"}.mdi-format-align-center::before{content:"\F260"}.mdi-format-align-justify::before{content:"\F261"}.mdi-format-align-left::before{content:"\F262"}.mdi-format-align-middle::before{content:"\F753"}.mdi-format-align-right::before{content:"\F263"}.mdi-format-align-top::before{content:"\F754"}.mdi-format-annotation-minus::before{content:"\FABB"}.mdi-format-annotation-plus::before{content:"\F646"}.mdi-format-bold::before{content:"\F264"}.mdi-format-clear::before{content:"\F265"}.mdi-format-color-fill::before{content:"\F266"}.mdi-format-color-highlight::before{content:"\FE14"}.mdi-format-color-text::before{content:"\F69D"}.mdi-format-columns::before{content:"\F8DE"}.mdi-format-float-center::before{content:"\F267"}.mdi-format-float-left::before{content:"\F268"}.mdi-format-float-none::before{content:"\F269"}.mdi-format-float-right::before{content:"\F26A"}.mdi-format-font::before{content:"\F6D5"}.mdi-format-font-size-decrease::before{content:"\F9F2"}.mdi-format-font-size-increase::before{content:"\F9F3"}.mdi-format-header-1::before{content:"\F26B"}.mdi-format-header-2::before{content:"\F26C"}.mdi-format-header-3::before{content:"\F26D"}.mdi-format-header-4::before{content:"\F26E"}.mdi-format-header-5::before{content:"\F26F"}.mdi-format-header-6::before{content:"\F270"}.mdi-format-header-decrease::before{content:"\F271"}.mdi-format-header-equal::before{content:"\F272"}.mdi-format-header-increase::before{content:"\F273"}.mdi-format-header-pound::before{content:"\F274"}.mdi-format-horizontal-align-center::before{content:"\F61E"}.mdi-format-horizontal-align-left::before{content:"\F61F"}.mdi-format-horizontal-align-right::before{content:"\F620"}.mdi-format-indent-decrease::before{content:"\F275"}.mdi-format-indent-increase::before{content:"\F276"}.mdi-format-italic::before{content:"\F277"}.mdi-format-letter-case::before{content:"\FB19"}.mdi-format-letter-case-lower::before{content:"\FB1A"}.mdi-format-letter-case-upper::before{content:"\FB1B"}.mdi-format-line-spacing::before{content:"\F278"}.mdi-format-line-style::before{content:"\F5C8"}.mdi-format-line-weight::before{content:"\F5C9"}.mdi-format-list-bulleted::before{content:"\F279"}.mdi-format-list-bulleted-square::before{content:"\FDAC"}.mdi-format-list-bulleted-type::before{content:"\F27A"}.mdi-format-list-checkbox::before{content:"\F969"}.mdi-format-list-checks::before{content:"\F755"}.mdi-format-list-numbered::before{content:"\F27B"}.mdi-format-list-numbered-rtl::before{content:"\FCE9"}.mdi-format-list-triangle::before{content:"\FECF"}.mdi-format-overline::before{content:"\FED0"}.mdi-format-page-break::before{content:"\F6D6"}.mdi-format-paint::before{content:"\F27C"}.mdi-format-paragraph::before{content:"\F27D"}.mdi-format-pilcrow::before{content:"\F6D7"}.mdi-format-quote-close::before{content:"\F27E"}.mdi-format-quote-open::before{content:"\F756"}.mdi-format-rotate-90::before{content:"\F6A9"}.mdi-format-section::before{content:"\F69E"}.mdi-format-size::before{content:"\F27F"}.mdi-format-strikethrough::before{content:"\F280"}.mdi-format-strikethrough-variant::before{content:"\F281"}.mdi-format-subscript::before{content:"\F282"}.mdi-format-superscript::before{content:"\F283"}.mdi-format-text::before{content:"\F284"}.mdi-format-text-rotation-down::before{content:"\FD4F"}.mdi-format-text-rotation-none::before{content:"\FD50"}.mdi-format-text-variant::before{content:"\FE15"}.mdi-format-text-wrapping-clip::before{content:"\FCEA"}.mdi-format-text-wrapping-overflow::before{content:"\FCEB"}.mdi-format-text-wrapping-wrap::before{content:"\FCEC"}.mdi-format-textbox::before{content:"\FCED"}.mdi-format-textdirection-l-to-r::before{content:"\F285"}.mdi-format-textdirection-r-to-l::before{content:"\F286"}.mdi-format-title::before{content:"\F5F4"}.mdi-format-underline::before{content:"\F287"}.mdi-format-vertical-align-bottom::before{content:"\F621"}.mdi-format-vertical-align-center::before{content:"\F622"}.mdi-format-vertical-align-top::before{content:"\F623"}.mdi-format-wrap-inline::before{content:"\F288"}.mdi-format-wrap-square::before{content:"\F289"}.mdi-format-wrap-tight::before{content:"\F28A"}.mdi-format-wrap-top-bottom::before{content:"\F28B"}.mdi-forum::before{content:"\F28C"}.mdi-forum-outline::before{content:"\F821"}.mdi-forward::before{content:"\F28D"}.mdi-forwardburger::before{content:"\FD51"}.mdi-fountain::before{content:"\F96A"}.mdi-fountain-pen::before{content:"\FCEE"}.mdi-fountain-pen-tip::before{content:"\FCEF"}.mdi-foursquare::before{content:"\F28E"}.mdi-freebsd::before{content:"\F8DF"}.mdi-frequently-asked-questions::before{content:"\FED1"}.mdi-fridge::before{content:"\F290"}.mdi-fridge-bottom::before{content:"\F292"}.mdi-fridge-outline::before{content:"\F28F"}.mdi-fridge-top::before{content:"\F291"}.mdi-fuel::before{content:"\F7C9"}.mdi-fullscreen::before{content:"\F293"}.mdi-fullscreen-exit::before{content:"\F294"}.mdi-function::before{content:"\F295"}.mdi-function-variant::before{content:"\F870"}.mdi-fuse::before{content:"\FC61"}.mdi-fuse-blade::before{content:"\FC62"}.mdi-gamepad::before{content:"\F296"}.mdi-gamepad-circle::before{content:"\FE16"}.mdi-gamepad-circle-down::before{content:"\FE17"}.mdi-gamepad-circle-left::before{content:"\FE18"}.mdi-gamepad-circle-outline::before{content:"\FE19"}.mdi-gamepad-circle-right::before{content:"\FE1A"}.mdi-gamepad-circle-up::before{content:"\FE1B"}.mdi-gamepad-down::before{content:"\FE1C"}.mdi-gamepad-left::before{content:"\FE1D"}.mdi-gamepad-right::before{content:"\FE1E"}.mdi-gamepad-round::before{content:"\FE1F"}.mdi-gamepad-round-down::before{content:"\FE7E"}.mdi-gamepad-round-left::before{content:"\FE7F"}.mdi-gamepad-round-outline::before{content:"\FE80"}.mdi-gamepad-round-right::before{content:"\FE81"}.mdi-gamepad-round-up::before{content:"\FE82"}.mdi-gamepad-square::before{content:"\FED2"}.mdi-gamepad-square-outline::before{content:"\FED3"}.mdi-gamepad-up::before{content:"\FE83"}.mdi-gamepad-variant::before{content:"\F297"}.mdi-gamepad-variant-outline::before{content:"\FED4"}.mdi-gantry-crane::before{content:"\FDAD"}.mdi-garage::before{content:"\F6D8"}.mdi-garage-alert::before{content:"\F871"}.mdi-garage-open::before{content:"\F6D9"}.mdi-gas-cylinder::before{content:"\F647"}.mdi-gas-station::before{content:"\F298"}.mdi-gas-station-outline::before{content:"\FED5"}.mdi-gate::before{content:"\F299"}.mdi-gate-and::before{content:"\F8E0"}.mdi-gate-nand::before{content:"\F8E1"}.mdi-gate-nor::before{content:"\F8E2"}.mdi-gate-not::before{content:"\F8E3"}.mdi-gate-or::before{content:"\F8E4"}.mdi-gate-xnor::before{content:"\F8E5"}.mdi-gate-xor::before{content:"\F8E6"}.mdi-gatsby::before{content:"\FE84"}.mdi-gauge::before{content:"\F29A"}.mdi-gauge-empty::before{content:"\F872"}.mdi-gauge-full::before{content:"\F873"}.mdi-gauge-low::before{content:"\F874"}.mdi-gavel::before{content:"\F29B"}.mdi-gender-female::before{content:"\F29C"}.mdi-gender-male::before{content:"\F29D"}.mdi-gender-male-female::before{content:"\F29E"}.mdi-gender-transgender::before{content:"\F29F"}.mdi-gentoo::before{content:"\F8E7"}.mdi-gesture::before{content:"\F7CA"}.mdi-gesture-double-tap::before{content:"\F73B"}.mdi-gesture-pinch::before{content:"\FABC"}.mdi-gesture-spread::before{content:"\FABD"}.mdi-gesture-swipe::before{content:"\FD52"}.mdi-gesture-swipe-down::before{content:"\F73C"}.mdi-gesture-swipe-horizontal::before{content:"\FABE"}.mdi-gesture-swipe-left::before{content:"\F73D"}.mdi-gesture-swipe-right::before{content:"\F73E"}.mdi-gesture-swipe-up::before{content:"\F73F"}.mdi-gesture-swipe-vertical::before{content:"\FABF"}.mdi-gesture-tap::before{content:"\F740"}.mdi-gesture-tap-hold::before{content:"\FD53"}.mdi-gesture-two-double-tap::before{content:"\F741"}.mdi-gesture-two-tap::before{content:"\F742"}.mdi-ghost::before{content:"\F2A0"}.mdi-ghost-off::before{content:"\F9F4"}.mdi-gif::before{content:"\FD54"}.mdi-gift::before{content:"\FE85"}.mdi-gift-outline::before{content:"\F2A1"}.mdi-git::before{content:"\F2A2"}.mdi-github-box::before{content:"\F2A3"}.mdi-github-circle::before{content:"\F2A4"}.mdi-github-face::before{content:"\F6DA"}.mdi-gitlab::before{content:"\FB7C"}.mdi-glass-cocktail::before{content:"\F356"}.mdi-glass-flute::before{content:"\F2A5"}.mdi-glass-mug::before{content:"\F2A6"}.mdi-glass-stange::before{content:"\F2A7"}.mdi-glass-tulip::before{content:"\F2A8"}.mdi-glass-wine::before{content:"\F875"}.mdi-glassdoor::before{content:"\F2A9"}.mdi-glasses::before{content:"\F2AA"}.mdi-globe-model::before{content:"\F8E8"}.mdi-gmail::before{content:"\F2AB"}.mdi-gnome::before{content:"\F2AC"}.mdi-go-kart::before{content:"\FD55"}.mdi-go-kart-track::before{content:"\FD56"}.mdi-gog::before{content:"\FB7D"}.mdi-golf::before{content:"\F822"}.mdi-gondola::before{content:"\F685"}.mdi-goodreads::before{content:"\FD57"}.mdi-google::before{content:"\F2AD"}.mdi-google-adwords::before{content:"\FC63"}.mdi-google-allo::before{content:"\F801"}.mdi-google-analytics::before{content:"\F7CB"}.mdi-google-assistant::before{content:"\F7CC"}.mdi-google-cardboard::before{content:"\F2AE"}.mdi-google-chrome::before{content:"\F2AF"}.mdi-google-circles::before{content:"\F2B0"}.mdi-google-circles-communities::before{content:"\F2B1"}.mdi-google-circles-extended::before{content:"\F2B2"}.mdi-google-circles-group::before{content:"\F2B3"}.mdi-google-classroom::before{content:"\F2C0"}.mdi-google-controller::before{content:"\F2B4"}.mdi-google-controller-off::before{content:"\F2B5"}.mdi-google-drive::before{content:"\F2B6"}.mdi-google-earth::before{content:"\F2B7"}.mdi-google-fit::before{content:"\F96B"}.mdi-google-glass::before{content:"\F2B8"}.mdi-google-hangouts::before{content:"\F2C9"}.mdi-google-home::before{content:"\F823"}.mdi-google-keep::before{content:"\F6DB"}.mdi-google-lens::before{content:"\F9F5"}.mdi-google-maps::before{content:"\F5F5"}.mdi-google-nearby::before{content:"\F2B9"}.mdi-google-pages::before{content:"\F2BA"}.mdi-google-photos::before{content:"\F6DC"}.mdi-google-physical-web::before{content:"\F2BB"}.mdi-google-play::before{content:"\F2BC"}.mdi-google-plus::before{content:"\F2BD"}.mdi-google-plus-box::before{content:"\F2BE"}.mdi-google-podcast::before{content:"\FED6"}.mdi-google-spreadsheet::before{content:"\F9F6"}.mdi-google-street-view::before{content:"\FC64"}.mdi-google-translate::before{content:"\F2BF"}.mdi-gpu::before{content:"\F8AD"}.mdi-gradient::before{content:"\F69F"}.mdi-grain::before{content:"\FD58"}.mdi-graphql::before{content:"\F876"}.mdi-grave-stone::before{content:"\FB7E"}.mdi-grease-pencil::before{content:"\F648"}.mdi-greater-than::before{content:"\F96C"}.mdi-greater-than-or-equal::before{content:"\F96D"}.mdi-grid::before{content:"\F2C1"}.mdi-grid-large::before{content:"\F757"}.mdi-grid-off::before{content:"\F2C2"}.mdi-grill::before{content:"\FE86"}.mdi-group::before{content:"\F2C3"}.mdi-guitar-acoustic::before{content:"\F770"}.mdi-guitar-electric::before{content:"\F2C4"}.mdi-guitar-pick::before{content:"\F2C5"}.mdi-guitar-pick-outline::before{content:"\F2C6"}.mdi-guy-fawkes-mask::before{content:"\F824"}.mdi-hackernews::before{content:"\F624"}.mdi-hail::before{content:"\FAC0"}.mdi-halloween::before{content:"\FB7F"}.mdi-hamburger::before{content:"\F684"}.mdi-hammer::before{content:"\F8E9"}.mdi-hand::before{content:"\FA4E"}.mdi-hand-left::before{content:"\FE87"}.mdi-hand-okay::before{content:"\FA4F"}.mdi-hand-peace::before{content:"\FA50"}.mdi-hand-peace-variant::before{content:"\FA51"}.mdi-hand-pointing-down::before{content:"\FA52"}.mdi-hand-pointing-left::before{content:"\FA53"}.mdi-hand-pointing-right::before{content:"\F2C7"}.mdi-hand-pointing-up::before{content:"\FA54"}.mdi-hand-right::before{content:"\FE88"}.mdi-hand-saw::before{content:"\FE89"}.mdi-handball::before{content:"\FF70"}.mdi-hanger::before{content:"\F2C8"}.mdi-hard-hat::before{content:"\F96E"}.mdi-harddisk::before{content:"\F2CA"}.mdi-hat-fedora::before{content:"\FB80"}.mdi-hazard-lights::before{content:"\FC65"}.mdi-hdr::before{content:"\FD59"}.mdi-hdr-off::before{content:"\FD5A"}.mdi-headphones::before{content:"\F2CB"}.mdi-headphones-bluetooth::before{content:"\F96F"}.mdi-headphones-box::before{content:"\F2CC"}.mdi-headphones-off::before{content:"\F7CD"}.mdi-headphones-settings::before{content:"\F2CD"}.mdi-headset::before{content:"\F2CE"}.mdi-headset-dock::before{content:"\F2CF"}.mdi-headset-off::before{content:"\F2D0"}.mdi-heart::before{content:"\F2D1"}.mdi-heart-box::before{content:"\F2D2"}.mdi-heart-box-outline::before{content:"\F2D3"}.mdi-heart-broken::before{content:"\F2D4"}.mdi-heart-broken-outline::before{content:"\FCF0"}.mdi-heart-circle::before{content:"\F970"}.mdi-heart-circle-outline::before{content:"\F971"}.mdi-heart-flash::before{content:"\FF16"}.mdi-heart-half::before{content:"\F6DE"}.mdi-heart-half-full::before{content:"\F6DD"}.mdi-heart-half-outline::before{content:"\F6DF"}.mdi-heart-multiple::before{content:"\FA55"}.mdi-heart-multiple-outline::before{content:"\FA56"}.mdi-heart-off::before{content:"\F758"}.mdi-heart-outline::before{content:"\F2D5"}.mdi-heart-pulse::before{content:"\F5F6"}.mdi-helicopter::before{content:"\FAC1"}.mdi-help::before{content:"\F2D6"}.mdi-help-box::before{content:"\F78A"}.mdi-help-circle::before{content:"\F2D7"}.mdi-help-circle-outline::before{content:"\F625"}.mdi-help-network::before{content:"\F6F4"}.mdi-help-network-outline::before{content:"\FC66"}.mdi-help-rhombus::before{content:"\FB81"}.mdi-help-rhombus-outline::before{content:"\FB82"}.mdi-hexagon::before{content:"\F2D8"}.mdi-hexagon-multiple::before{content:"\F6E0"}.mdi-hexagon-outline::before{content:"\F2D9"}.mdi-hexagon-slice-1::before{content:"\FAC2"}.mdi-hexagon-slice-2::before{content:"\FAC3"}.mdi-hexagon-slice-3::before{content:"\FAC4"}.mdi-hexagon-slice-4::before{content:"\FAC5"}.mdi-hexagon-slice-5::before{content:"\FAC6"}.mdi-hexagon-slice-6::before{content:"\FAC7"}.mdi-hexagram::before{content:"\FAC8"}.mdi-hexagram-outline::before{content:"\FAC9"}.mdi-high-definition::before{content:"\F7CE"}.mdi-high-definition-box::before{content:"\F877"}.mdi-highway::before{content:"\F5F7"}.mdi-hiking::before{content:"\FD5B"}.mdi-hinduism::before{content:"\F972"}.mdi-history::before{content:"\F2DA"}.mdi-hockey-puck::before{content:"\F878"}.mdi-hockey-sticks::before{content:"\F879"}.mdi-hololens::before{content:"\F2DB"}.mdi-home::before{content:"\F2DC"}.mdi-home-account::before{content:"\F825"}.mdi-home-alert::before{content:"\F87A"}.mdi-home-analytics::before{content:"\FED7"}.mdi-home-assistant::before{content:"\F7CF"}.mdi-home-automation::before{content:"\F7D0"}.mdi-home-circle::before{content:"\F7D1"}.mdi-home-city::before{content:"\FCF1"}.mdi-home-city-outline::before{content:"\FCF2"}.mdi-home-currency-usd::before{content:"\F8AE"}.mdi-home-export-outline::before{content:"\FFB8"}.mdi-home-flood::before{content:"\FF17"}.mdi-home-floor-0::before{content:"\FDAE"}.mdi-home-floor-1::before{content:"\FD5C"}.mdi-home-floor-2::before{content:"\FD5D"}.mdi-home-floor-3::before{content:"\FD5E"}.mdi-home-floor-a::before{content:"\FD5F"}.mdi-home-floor-b::before{content:"\FD60"}.mdi-home-floor-g::before{content:"\FD61"}.mdi-home-floor-l::before{content:"\FD62"}.mdi-home-floor-negative-1::before{content:"\FDAF"}.mdi-home-group::before{content:"\FDB0"}.mdi-home-heart::before{content:"\F826"}.mdi-home-import-outline::before{content:"\FFB9"}.mdi-home-lock::before{content:"\F8EA"}.mdi-home-lock-open::before{content:"\F8EB"}.mdi-home-map-marker::before{content:"\F5F8"}.mdi-home-minus::before{content:"\F973"}.mdi-home-modern::before{content:"\F2DD"}.mdi-home-outline::before{content:"\F6A0"}.mdi-home-plus::before{content:"\F974"}.mdi-home-thermometer::before{content:"\FF71"}.mdi-home-thermometer-outline::before{content:"\FF72"}.mdi-home-variant::before{content:"\F2DE"}.mdi-home-variant-outline::before{content:"\FB83"}.mdi-hook::before{content:"\F6E1"}.mdi-hook-off::before{content:"\F6E2"}.mdi-hops::before{content:"\F2DF"}.mdi-horseshoe::before{content:"\FA57"}.mdi-hospital::before{content:"\F2E0"}.mdi-hospital-building::before{content:"\F2E1"}.mdi-hospital-marker::before{content:"\F2E2"}.mdi-hot-tub::before{content:"\F827"}.mdi-hotel::before{content:"\F2E3"}.mdi-houzz::before{content:"\F2E4"}.mdi-houzz-box::before{content:"\F2E5"}.mdi-hubspot::before{content:"\FCF3"}.mdi-hulu::before{content:"\F828"}.mdi-human::before{content:"\F2E6"}.mdi-human-child::before{content:"\F2E7"}.mdi-human-female::before{content:"\F649"}.mdi-human-female-boy::before{content:"\FA58"}.mdi-human-female-female::before{content:"\FA59"}.mdi-human-female-girl::before{content:"\FA5A"}.mdi-human-greeting::before{content:"\F64A"}.mdi-human-handsdown::before{content:"\F64B"}.mdi-human-handsup::before{content:"\F64C"}.mdi-human-male::before{content:"\F64D"}.mdi-human-male-boy::before{content:"\FA5B"}.mdi-human-male-female::before{content:"\F2E8"}.mdi-human-male-girl::before{content:"\FA5C"}.mdi-human-male-height::before{content:"\FF18"}.mdi-human-male-height-variant::before{content:"\FF19"}.mdi-human-male-male::before{content:"\FA5D"}.mdi-human-pregnant::before{content:"\F5CF"}.mdi-humble-bundle::before{content:"\F743"}.mdi-ice-cream::before{content:"\F829"}.mdi-ice-pop::before{content:"\FF1A"}.mdi-identifier::before{content:"\FF1B"}.mdi-iframe::before{content:"\FC67"}.mdi-iframe-outline::before{content:"\FC68"}.mdi-image::before{content:"\F2E9"}.mdi-image-album::before{content:"\F2EA"}.mdi-image-area::before{content:"\F2EB"}.mdi-image-area-close::before{content:"\F2EC"}.mdi-image-broken::before{content:"\F2ED"}.mdi-image-broken-variant::before{content:"\F2EE"}.mdi-image-filter::before{content:"\F2EF"}.mdi-image-filter-black-white::before{content:"\F2F0"}.mdi-image-filter-center-focus::before{content:"\F2F1"}.mdi-image-filter-center-focus-strong::before{content:"\FF1C"}.mdi-image-filter-center-focus-strong-outline::before{content:"\FF1D"}.mdi-image-filter-center-focus-weak::before{content:"\F2F2"}.mdi-image-filter-drama::before{content:"\F2F3"}.mdi-image-filter-frames::before{content:"\F2F4"}.mdi-image-filter-hdr::before{content:"\F2F5"}.mdi-image-filter-none::before{content:"\F2F6"}.mdi-image-filter-tilt-shift::before{content:"\F2F7"}.mdi-image-filter-vintage::before{content:"\F2F8"}.mdi-image-frame::before{content:"\FE8A"}.mdi-image-move::before{content:"\F9F7"}.mdi-image-multiple::before{content:"\F2F9"}.mdi-image-off::before{content:"\F82A"}.mdi-image-outline::before{content:"\F975"}.mdi-image-plus::before{content:"\F87B"}.mdi-image-search::before{content:"\F976"}.mdi-image-search-outline::before{content:"\F977"}.mdi-image-size-select-actual::before{content:"\FC69"}.mdi-image-size-select-large::before{content:"\FC6A"}.mdi-image-size-select-small::before{content:"\FC6B"}.mdi-import::before{content:"\F2FA"}.mdi-inbox::before{content:"\F686"}.mdi-inbox-arrow-down::before{content:"\F2FB"}.mdi-inbox-arrow-up::before{content:"\F3D1"}.mdi-inbox-multiple::before{content:"\F8AF"}.mdi-inbox-multiple-outline::before{content:"\FB84"}.mdi-incognito::before{content:"\F5F9"}.mdi-infinity::before{content:"\F6E3"}.mdi-information::before{content:"\F2FC"}.mdi-information-outline::before{content:"\F2FD"}.mdi-information-variant::before{content:"\F64E"}.mdi-instagram::before{content:"\F2FE"}.mdi-instapaper::before{content:"\F2FF"}.mdi-internet-explorer::before{content:"\F300"}.mdi-invert-colors::before{content:"\F301"}.mdi-invert-colors-off::before{content:"\FE8B"}.mdi-ip::before{content:"\FA5E"}.mdi-ip-network::before{content:"\FA5F"}.mdi-ip-network-outline::before{content:"\FC6C"}.mdi-ipod::before{content:"\FC6D"}.mdi-islam::before{content:"\F978"}.mdi-itunes::before{content:"\F676"}.mdi-jabber::before{content:"\FDB1"}.mdi-jeepney::before{content:"\F302"}.mdi-jellyfish::before{content:"\FF1E"}.mdi-jellyfish-outline::before{content:"\FF1F"}.mdi-jira::before{content:"\F303"}.mdi-jquery::before{content:"\F87C"}.mdi-jsfiddle::before{content:"\F304"}.mdi-json::before{content:"\F626"}.mdi-judaism::before{content:"\F979"}.mdi-kabaddi::before{content:"\FD63"}.mdi-karate::before{content:"\F82B"}.mdi-keg::before{content:"\F305"}.mdi-kettle::before{content:"\F5FA"}.mdi-kettle-outline::before{content:"\FF73"}.mdi-key::before{content:"\F306"}.mdi-key-change::before{content:"\F307"}.mdi-key-minus::before{content:"\F308"}.mdi-key-outline::before{content:"\FDB2"}.mdi-key-plus::before{content:"\F309"}.mdi-key-remove::before{content:"\F30A"}.mdi-key-variant::before{content:"\F30B"}.mdi-keyboard::before{content:"\F30C"}.mdi-keyboard-backspace::before{content:"\F30D"}.mdi-keyboard-caps::before{content:"\F30E"}.mdi-keyboard-close::before{content:"\F30F"}.mdi-keyboard-off::before{content:"\F310"}.mdi-keyboard-off-outline::before{content:"\FE8C"}.mdi-keyboard-outline::before{content:"\F97A"}.mdi-keyboard-return::before{content:"\F311"}.mdi-keyboard-settings::before{content:"\F9F8"}.mdi-keyboard-settings-outline::before{content:"\F9F9"}.mdi-keyboard-tab::before{content:"\F312"}.mdi-keyboard-variant::before{content:"\F313"}.mdi-kickstarter::before{content:"\F744"}.mdi-knife::before{content:"\F9FA"}.mdi-knife-military::before{content:"\F9FB"}.mdi-kodi::before{content:"\F314"}.mdi-label::before{content:"\F315"}.mdi-label-off::before{content:"\FACA"}.mdi-label-off-outline::before{content:"\FACB"}.mdi-label-outline::before{content:"\F316"}.mdi-label-variant::before{content:"\FACC"}.mdi-label-variant-outline::before{content:"\FACD"}.mdi-ladybug::before{content:"\F82C"}.mdi-lambda::before{content:"\F627"}.mdi-lamp::before{content:"\F6B4"}.mdi-lan::before{content:"\F317"}.mdi-lan-connect::before{content:"\F318"}.mdi-lan-disconnect::before{content:"\F319"}.mdi-lan-pending::before{content:"\F31A"}.mdi-language-c::before{content:"\F671"}.mdi-language-cpp::before{content:"\F672"}.mdi-language-csharp::before{content:"\F31B"}.mdi-language-css3::before{content:"\F31C"}.mdi-language-go::before{content:"\F7D2"}.mdi-language-haskell::before{content:"\FC6E"}.mdi-language-html5::before{content:"\F31D"}.mdi-language-java::before{content:"\FB1C"}.mdi-language-javascript::before{content:"\F31E"}.mdi-language-lua::before{content:"\F8B0"}.mdi-language-php::before{content:"\F31F"}.mdi-language-python::before{content:"\F320"}.mdi-language-python-text::before{content:"\F321"}.mdi-language-r::before{content:"\F7D3"}.mdi-language-ruby-on-rails::before{content:"\FACE"}.mdi-language-swift::before{content:"\F6E4"}.mdi-language-typescript::before{content:"\F6E5"}.mdi-laptop::before{content:"\F322"}.mdi-laptop-chromebook::before{content:"\F323"}.mdi-laptop-mac::before{content:"\F324"}.mdi-laptop-off::before{content:"\F6E6"}.mdi-laptop-windows::before{content:"\F325"}.mdi-laravel::before{content:"\FACF"}.mdi-lasso::before{content:"\FF20"}.mdi-lastfm::before{content:"\F326"}.mdi-lastpass::before{content:"\F446"}.mdi-latitude::before{content:"\FF74"}.mdi-launch::before{content:"\F327"}.mdi-lava-lamp::before{content:"\F7D4"}.mdi-layers::before{content:"\F328"}.mdi-layers-minus::before{content:"\FE8D"}.mdi-layers-off::before{content:"\F329"}.mdi-layers-off-outline::before{content:"\F9FC"}.mdi-layers-outline::before{content:"\F9FD"}.mdi-layers-plus::before{content:"\FE30"}.mdi-layers-remove::before{content:"\FE31"}.mdi-layers-triple::before{content:"\FF75"}.mdi-layers-triple-outline::before{content:"\FF76"}.mdi-lead-pencil::before{content:"\F64F"}.mdi-leaf::before{content:"\F32A"}.mdi-leaf-maple::before{content:"\FC6F"}.mdi-leak::before{content:"\FDB3"}.mdi-leak-off::before{content:"\FDB4"}.mdi-led-off::before{content:"\F32B"}.mdi-led-on::before{content:"\F32C"}.mdi-led-outline::before{content:"\F32D"}.mdi-led-strip::before{content:"\F7D5"}.mdi-led-variant-off::before{content:"\F32E"}.mdi-led-variant-on::before{content:"\F32F"}.mdi-led-variant-outline::before{content:"\F330"}.mdi-less-than::before{content:"\F97B"}.mdi-less-than-or-equal::before{content:"\F97C"}.mdi-library::before{content:"\F331"}.mdi-library-books::before{content:"\F332"}.mdi-library-movie::before{content:"\FCF4"}.mdi-library-music::before{content:"\F333"}.mdi-library-music-outline::before{content:"\FF21"}.mdi-library-plus::before{content:"\F334"}.mdi-library-shelves::before{content:"\FB85"}.mdi-library-video::before{content:"\FCF5"}.mdi-lifebuoy::before{content:"\F87D"}.mdi-light-switch::before{content:"\F97D"}.mdi-lightbulb::before{content:"\F335"}.mdi-lightbulb-off::before{content:"\FE32"}.mdi-lightbulb-off-outline::before{content:"\FE33"}.mdi-lightbulb-on::before{content:"\F6E7"}.mdi-lightbulb-on-outline::before{content:"\F6E8"}.mdi-lightbulb-outline::before{content:"\F336"}.mdi-lighthouse::before{content:"\F9FE"}.mdi-lighthouse-on::before{content:"\F9FF"}.mdi-link::before{content:"\F337"}.mdi-link-box::before{content:"\FCF6"}.mdi-link-box-outline::before{content:"\FCF7"}.mdi-link-box-variant::before{content:"\FCF8"}.mdi-link-box-variant-outline::before{content:"\FCF9"}.mdi-link-off::before{content:"\F338"}.mdi-link-plus::before{content:"\FC70"}.mdi-link-variant::before{content:"\F339"}.mdi-link-variant-off::before{content:"\F33A"}.mdi-linkedin::before{content:"\F33B"}.mdi-linkedin-box::before{content:"\F33C"}.mdi-linux::before{content:"\F33D"}.mdi-linux-mint::before{content:"\F8EC"}.mdi-litecoin::before{content:"\FA60"}.mdi-loading::before{content:"\F771"}.mdi-lock::before{content:"\F33E"}.mdi-lock-alert::before{content:"\F8ED"}.mdi-lock-clock::before{content:"\F97E"}.mdi-lock-open::before{content:"\F33F"}.mdi-lock-open-outline::before{content:"\F340"}.mdi-lock-outline::before{content:"\F341"}.mdi-lock-pattern::before{content:"\F6E9"}.mdi-lock-plus::before{content:"\F5FB"}.mdi-lock-question::before{content:"\F8EE"}.mdi-lock-reset::before{content:"\F772"}.mdi-lock-smart::before{content:"\F8B1"}.mdi-locker::before{content:"\F7D6"}.mdi-locker-multiple::before{content:"\F7D7"}.mdi-login::before{content:"\F342"}.mdi-login-variant::before{content:"\F5FC"}.mdi-logout::before{content:"\F343"}.mdi-logout-variant::before{content:"\F5FD"}.mdi-longitude::before{content:"\FF77"}.mdi-looks::before{content:"\F344"}.mdi-loop::before{content:"\F6EA"}.mdi-loupe::before{content:"\F345"}.mdi-lumx::before{content:"\F346"}.mdi-lyft::before{content:"\FB1D"}.mdi-magnet::before{content:"\F347"}.mdi-magnet-on::before{content:"\F348"}.mdi-magnify::before{content:"\F349"}.mdi-magnify-close::before{content:"\F97F"}.mdi-magnify-minus::before{content:"\F34A"}.mdi-magnify-minus-cursor::before{content:"\FA61"}.mdi-magnify-minus-outline::before{content:"\F6EB"}.mdi-magnify-plus::before{content:"\F34B"}.mdi-magnify-plus-cursor::before{content:"\FA62"}.mdi-magnify-plus-outline::before{content:"\F6EC"}.mdi-mail::before{content:"\FED8"}.mdi-mail-ru::before{content:"\F34C"}.mdi-mailbox::before{content:"\F6ED"}.mdi-mailbox-open::before{content:"\FD64"}.mdi-mailbox-open-outline::before{content:"\FD65"}.mdi-mailbox-open-up::before{content:"\FD66"}.mdi-mailbox-open-up-outline::before{content:"\FD67"}.mdi-mailbox-outline::before{content:"\FD68"}.mdi-mailbox-up::before{content:"\FD69"}.mdi-mailbox-up-outline::before{content:"\FD6A"}.mdi-map::before{content:"\F34D"}.mdi-map-check::before{content:"\FED9"}.mdi-map-check-outline::before{content:"\FEDA"}.mdi-map-clock::before{content:"\FCFA"}.mdi-map-clock-outline::before{content:"\FCFB"}.mdi-map-legend::before{content:"\FA00"}.mdi-map-marker::before{content:"\F34E"}.mdi-map-marker-alert::before{content:"\FF22"}.mdi-map-marker-alert-outline::before{content:"\FF23"}.mdi-map-marker-check::before{content:"\FC71"}.mdi-map-marker-circle::before{content:"\F34F"}.mdi-map-marker-distance::before{content:"\F8EF"}.mdi-map-marker-minus::before{content:"\F650"}.mdi-map-marker-multiple::before{content:"\F350"}.mdi-map-marker-off::before{content:"\F351"}.mdi-map-marker-outline::before{content:"\F7D8"}.mdi-map-marker-path::before{content:"\FCFC"}.mdi-map-marker-plus::before{content:"\F651"}.mdi-map-marker-question::before{content:"\FF24"}.mdi-map-marker-question-outline::before{content:"\FF25"}.mdi-map-marker-radius::before{content:"\F352"}.mdi-map-marker-remove::before{content:"\FF26"}.mdi-map-marker-remove-variant::before{content:"\FF27"}.mdi-map-minus::before{content:"\F980"}.mdi-map-outline::before{content:"\F981"}.mdi-map-plus::before{content:"\F982"}.mdi-map-search::before{content:"\F983"}.mdi-map-search-outline::before{content:"\F984"}.mdi-mapbox::before{content:"\FB86"}.mdi-margin::before{content:"\F353"}.mdi-markdown::before{content:"\F354"}.mdi-markdown-outline::before{content:"\FF78"}.mdi-marker::before{content:"\F652"}.mdi-marker-cancel::before{content:"\FDB5"}.mdi-marker-check::before{content:"\F355"}.mdi-mastodon::before{content:"\FAD0"}.mdi-mastodon-variant::before{content:"\FAD1"}.mdi-material-design::before{content:"\F985"}.mdi-material-ui::before{content:"\F357"}.mdi-math-compass::before{content:"\F358"}.mdi-math-cos::before{content:"\FC72"}.mdi-math-sin::before{content:"\FC73"}.mdi-math-tan::before{content:"\FC74"}.mdi-matrix::before{content:"\F628"}.mdi-maxcdn::before{content:"\F359"}.mdi-medal::before{content:"\F986"}.mdi-medical-bag::before{content:"\F6EE"}.mdi-medium::before{content:"\F35A"}.mdi-meetup::before{content:"\FAD2"}.mdi-memory::before{content:"\F35B"}.mdi-menu::before{content:"\F35C"}.mdi-menu-down::before{content:"\F35D"}.mdi-menu-down-outline::before{content:"\F6B5"}.mdi-menu-left::before{content:"\F35E"}.mdi-menu-left-outline::before{content:"\FA01"}.mdi-menu-open::before{content:"\FB87"}.mdi-menu-right::before{content:"\F35F"}.mdi-menu-right-outline::before{content:"\FA02"}.mdi-menu-swap::before{content:"\FA63"}.mdi-menu-swap-outline::before{content:"\FA64"}.mdi-menu-up::before{content:"\F360"}.mdi-menu-up-outline::before{content:"\F6B6"}.mdi-merge::before{content:"\FF79"}.mdi-message::before{content:"\F361"}.mdi-message-alert::before{content:"\F362"}.mdi-message-alert-outline::before{content:"\FA03"}.mdi-message-bulleted::before{content:"\F6A1"}.mdi-message-bulleted-off::before{content:"\F6A2"}.mdi-message-draw::before{content:"\F363"}.mdi-message-image::before{content:"\F364"}.mdi-message-outline::before{content:"\F365"}.mdi-message-plus::before{content:"\F653"}.mdi-message-processing::before{content:"\F366"}.mdi-message-reply::before{content:"\F367"}.mdi-message-reply-text::before{content:"\F368"}.mdi-message-settings::before{content:"\F6EF"}.mdi-message-settings-variant::before{content:"\F6F0"}.mdi-message-text::before{content:"\F369"}.mdi-message-text-outline::before{content:"\F36A"}.mdi-message-video::before{content:"\F36B"}.mdi-meteor::before{content:"\F629"}.mdi-metronome::before{content:"\F7D9"}.mdi-metronome-tick::before{content:"\F7DA"}.mdi-micro-sd::before{content:"\F7DB"}.mdi-microphone::before{content:"\F36C"}.mdi-microphone-minus::before{content:"\F8B2"}.mdi-microphone-off::before{content:"\F36D"}.mdi-microphone-outline::before{content:"\F36E"}.mdi-microphone-plus::before{content:"\F8B3"}.mdi-microphone-settings::before{content:"\F36F"}.mdi-microphone-variant::before{content:"\F370"}.mdi-microphone-variant-off::before{content:"\F371"}.mdi-microscope::before{content:"\F654"}.mdi-microsoft::before{content:"\F372"}.mdi-microsoft-dynamics::before{content:"\F987"}.mdi-microwave::before{content:"\FC75"}.mdi-middleware::before{content:"\FF7A"}.mdi-middleware-outline::before{content:"\FF7B"}.mdi-midi::before{content:"\F8F0"}.mdi-midi-port::before{content:"\F8F1"}.mdi-mine::before{content:"\FDB6"}.mdi-minecraft::before{content:"\F373"}.mdi-mini-sd::before{content:"\FA04"}.mdi-minidisc::before{content:"\FA05"}.mdi-minus::before{content:"\F374"}.mdi-minus-box::before{content:"\F375"}.mdi-minus-box-outline::before{content:"\F6F1"}.mdi-minus-circle::before{content:"\F376"}.mdi-minus-circle-outline::before{content:"\F377"}.mdi-minus-network::before{content:"\F378"}.mdi-minus-network-outline::before{content:"\FC76"}.mdi-mixcloud::before{content:"\F62A"}.mdi-mixed-martial-arts::before{content:"\FD6B"}.mdi-mixed-reality::before{content:"\F87E"}.mdi-mixer::before{content:"\F7DC"}.mdi-molecule::before{content:"\FB88"}.mdi-monitor::before{content:"\F379"}.mdi-monitor-cellphone::before{content:"\F988"}.mdi-monitor-cellphone-star::before{content:"\F989"}.mdi-monitor-dashboard::before{content:"\FA06"}.mdi-monitor-lock::before{content:"\FDB7"}.mdi-monitor-multiple::before{content:"\F37A"}.mdi-monitor-off::before{content:"\FD6C"}.mdi-monitor-screenshot::before{content:"\FE34"}.mdi-monitor-speaker::before{content:"\FF7C"}.mdi-monitor-speaker-off::before{content:"\FF7D"}.mdi-monitor-star::before{content:"\FDB8"}.mdi-moon-first-quarter::before{content:"\FF7E"}.mdi-moon-full::before{content:"\FF7F"}.mdi-moon-last-quarter::before{content:"\FF80"}.mdi-moon-new::before{content:"\FF81"}.mdi-moon-waning-crescent::before{content:"\FF82"}.mdi-moon-waning-gibbous::before{content:"\FF83"}.mdi-moon-waxing-crescent::before{content:"\FF84"}.mdi-moon-waxing-gibbous::before{content:"\FF85"}.mdi-more::before{content:"\F37B"}.mdi-mother-nurse::before{content:"\FCFD"}.mdi-motion-sensor::before{content:"\FD6D"}.mdi-motorbike::before{content:"\F37C"}.mdi-mouse::before{content:"\F37D"}.mdi-mouse-bluetooth::before{content:"\F98A"}.mdi-mouse-off::before{content:"\F37E"}.mdi-mouse-variant::before{content:"\F37F"}.mdi-mouse-variant-off::before{content:"\F380"}.mdi-move-resize::before{content:"\F655"}.mdi-move-resize-variant::before{content:"\F656"}.mdi-movie::before{content:"\F381"}.mdi-movie-outline::before{content:"\FDB9"}.mdi-movie-roll::before{content:"\F7DD"}.mdi-muffin::before{content:"\F98B"}.mdi-multiplication::before{content:"\F382"}.mdi-multiplication-box::before{content:"\F383"}.mdi-mushroom::before{content:"\F7DE"}.mdi-mushroom-outline::before{content:"\F7DF"}.mdi-music::before{content:"\F759"}.mdi-music-accidental-double-flat::before{content:"\FF86"}.mdi-music-accidental-double-sharp::before{content:"\FF87"}.mdi-music-accidental-flat::before{content:"\FF88"}.mdi-music-accidental-natural::before{content:"\FF89"}.mdi-music-accidental-sharp::before{content:"\FF8A"}.mdi-music-box::before{content:"\F384"}.mdi-music-box-outline::before{content:"\F385"}.mdi-music-circle::before{content:"\F386"}.mdi-music-circle-outline::before{content:"\FAD3"}.mdi-music-clef-alto::before{content:"\FF8B"}.mdi-music-clef-bass::before{content:"\FF8C"}.mdi-music-clef-treble::before{content:"\FF8D"}.mdi-music-note::before{content:"\F387"}.mdi-music-note-bluetooth::before{content:"\F5FE"}.mdi-music-note-bluetooth-off::before{content:"\F5FF"}.mdi-music-note-eighth::before{content:"\F388"}.mdi-music-note-eighth-dotted::before{content:"\FF8E"}.mdi-music-note-half::before{content:"\F389"}.mdi-music-note-half-dotted::before{content:"\FF8F"}.mdi-music-note-off::before{content:"\F38A"}.mdi-music-note-off-outline::before{content:"\FF90"}.mdi-music-note-outline::before{content:"\FF91"}.mdi-music-note-plus::before{content:"\FDBA"}.mdi-music-note-quarter::before{content:"\F38B"}.mdi-music-note-quarter-dotted::before{content:"\FF92"}.mdi-music-note-sixteenth::before{content:"\F38C"}.mdi-music-note-sixteenth-dotted::before{content:"\FF93"}.mdi-music-note-whole::before{content:"\F38D"}.mdi-music-note-whole-dotted::before{content:"\FF94"}.mdi-music-off::before{content:"\F75A"}.mdi-music-rest-eighth::before{content:"\FF95"}.mdi-music-rest-half::before{content:"\FF96"}.mdi-music-rest-quarter::before{content:"\FF97"}.mdi-music-rest-sixteenth::before{content:"\FF98"}.mdi-music-rest-whole::before{content:"\FF99"}.mdi-nail::before{content:"\FDBB"}.mdi-nas::before{content:"\F8F2"}.mdi-nativescript::before{content:"\F87F"}.mdi-nature::before{content:"\F38E"}.mdi-nature-people::before{content:"\F38F"}.mdi-navigation::before{content:"\F390"}.mdi-near-me::before{content:"\F5CD"}.mdi-necklace::before{content:"\FF28"}.mdi-needle::before{content:"\F391"}.mdi-netflix::before{content:"\F745"}.mdi-network::before{content:"\F6F2"}.mdi-network-off::before{content:"\FC77"}.mdi-network-off-outline::before{content:"\FC78"}.mdi-network-outline::before{content:"\FC79"}.mdi-network-strength-1::before{content:"\F8F3"}.mdi-network-strength-1-alert::before{content:"\F8F4"}.mdi-network-strength-2::before{content:"\F8F5"}.mdi-network-strength-2-alert::before{content:"\F8F6"}.mdi-network-strength-3::before{content:"\F8F7"}.mdi-network-strength-3-alert::before{content:"\F8F8"}.mdi-network-strength-4::before{content:"\F8F9"}.mdi-network-strength-4-alert::before{content:"\F8FA"}.mdi-network-strength-off::before{content:"\F8FB"}.mdi-network-strength-off-outline::before{content:"\F8FC"}.mdi-network-strength-outline::before{content:"\F8FD"}.mdi-new-box::before{content:"\F394"}.mdi-newspaper::before{content:"\F395"}.mdi-newspaper-minus::before{content:"\FF29"}.mdi-newspaper-plus::before{content:"\FF2A"}.mdi-nfc::before{content:"\F396"}.mdi-nfc-off::before{content:"\FE35"}.mdi-nfc-search-variant::before{content:"\FE36"}.mdi-nfc-tap::before{content:"\F397"}.mdi-nfc-variant::before{content:"\F398"}.mdi-nfc-variant-off::before{content:"\FE37"}.mdi-ninja::before{content:"\F773"}.mdi-nintendo-switch::before{content:"\F7E0"}.mdi-nodejs::before{content:"\F399"}.mdi-not-equal::before{content:"\F98C"}.mdi-not-equal-variant::before{content:"\F98D"}.mdi-note::before{content:"\F39A"}.mdi-note-circle::before{content:"\FEDB"}.mdi-note-multiple::before{content:"\F6B7"}.mdi-note-multiple-outline::before{content:"\F6B8"}.mdi-note-outline::before{content:"\F39B"}.mdi-note-plus::before{content:"\F39C"}.mdi-note-plus-outline::before{content:"\F39D"}.mdi-note-text::before{content:"\F39E"}.mdi-notebook::before{content:"\F82D"}.mdi-notebook-multiple::before{content:"\FE38"}.mdi-notebook-outline::before{content:"\FEDC"}.mdi-notification-clear-all::before{content:"\F39F"}.mdi-npm::before{content:"\F6F6"}.mdi-npm-variant::before{content:"\F98E"}.mdi-npm-variant-outline::before{content:"\F98F"}.mdi-nuke::before{content:"\F6A3"}.mdi-null::before{content:"\F7E1"}.mdi-numeric::before{content:"\F3A0"}.mdi-numeric-0::before{content:"\30"}.mdi-numeric-0-box::before{content:"\F3A1"}.mdi-numeric-0-box-multiple::before{content:"\FF2B"}.mdi-numeric-0-box-multiple-outline::before{content:"\F3A2"}.mdi-numeric-0-box-outline::before{content:"\F3A3"}.mdi-numeric-0-circle::before{content:"\FC7A"}.mdi-numeric-0-circle-outline::before{content:"\FC7B"}.mdi-numeric-1::before{content:"\31"}.mdi-numeric-1-box::before{content:"\F3A4"}.mdi-numeric-1-box-multiple::before{content:"\FF2C"}.mdi-numeric-1-box-multiple-outline::before{content:"\F3A5"}.mdi-numeric-1-box-outline::before{content:"\F3A6"}.mdi-numeric-1-circle::before{content:"\FC7C"}.mdi-numeric-1-circle-outline::before{content:"\FC7D"}.mdi-numeric-10-box::before{content:"\FF9A"}.mdi-numeric-10-box-outline::before{content:"\FF9B"}.mdi-numeric-2::before{content:"\32"}.mdi-numeric-2-box::before{content:"\F3A7"}.mdi-numeric-2-box-multiple::before{content:"\FF2D"}.mdi-numeric-2-box-multiple-outline::before{content:"\F3A8"}.mdi-numeric-2-box-outline::before{content:"\F3A9"}.mdi-numeric-2-circle::before{content:"\FC7E"}.mdi-numeric-2-circle-outline::before{content:"\FC7F"}.mdi-numeric-3::before{content:"\33"}.mdi-numeric-3-box::before{content:"\F3AA"}.mdi-numeric-3-box-multiple::before{content:"\FF2E"}.mdi-numeric-3-box-multiple-outline::before{content:"\F3AB"}.mdi-numeric-3-box-outline::before{content:"\F3AC"}.mdi-numeric-3-circle::before{content:"\FC80"}.mdi-numeric-3-circle-outline::before{content:"\FC81"}.mdi-numeric-4::before{content:"\34"}.mdi-numeric-4-box::before{content:"\F3AD"}.mdi-numeric-4-box-multiple::before{content:"\FF2F"}.mdi-numeric-4-box-multiple-outline::before{content:"\F3AE"}.mdi-numeric-4-box-outline::before{content:"\F3AF"}.mdi-numeric-4-circle::before{content:"\FC82"}.mdi-numeric-4-circle-outline::before{content:"\FC83"}.mdi-numeric-5::before{content:"\35"}.mdi-numeric-5-box::before{content:"\F3B0"}.mdi-numeric-5-box-multiple::before{content:"\FF30"}.mdi-numeric-5-box-multiple-outline::before{content:"\F3B1"}.mdi-numeric-5-box-outline::before{content:"\F3B2"}.mdi-numeric-5-circle::before{content:"\FC84"}.mdi-numeric-5-circle-outline::before{content:"\FC85"}.mdi-numeric-6::before{content:"\36"}.mdi-numeric-6-box::before{content:"\F3B3"}.mdi-numeric-6-box-multiple::before{content:"\FF31"}.mdi-numeric-6-box-multiple-outline::before{content:"\F3B4"}.mdi-numeric-6-box-outline::before{content:"\F3B5"}.mdi-numeric-6-circle::before{content:"\FC86"}.mdi-numeric-6-circle-outline::before{content:"\FC87"}.mdi-numeric-7::before{content:"\37"}.mdi-numeric-7-box::before{content:"\F3B6"}.mdi-numeric-7-box-multiple::before{content:"\FF32"}.mdi-numeric-7-box-multiple-outline::before{content:"\F3B7"}.mdi-numeric-7-box-outline::before{content:"\F3B8"}.mdi-numeric-7-circle::before{content:"\FC88"}.mdi-numeric-7-circle-outline::before{content:"\FC89"}.mdi-numeric-8::before{content:"\38"}.mdi-numeric-8-box::before{content:"\F3B9"}.mdi-numeric-8-box-multiple::before{content:"\FF33"}.mdi-numeric-8-box-multiple-outline::before{content:"\F3BA"}.mdi-numeric-8-box-outline::before{content:"\F3BB"}.mdi-numeric-8-circle::before{content:"\FC8A"}.mdi-numeric-8-circle-outline::before{content:"\FC8B"}.mdi-numeric-9::before{content:"\39"}.mdi-numeric-9-box::before{content:"\F3BC"}.mdi-numeric-9-box-multiple::before{content:"\FF34"}.mdi-numeric-9-box-multiple-outline::before{content:"\F3BD"}.mdi-numeric-9-box-outline::before{content:"\F3BE"}.mdi-numeric-9-circle::before{content:"\FC8C"}.mdi-numeric-9-circle-outline::before{content:"\FC8D"}.mdi-numeric-9-plus-box::before{content:"\F3BF"}.mdi-numeric-9-plus-box-multiple::before{content:"\FF35"}.mdi-numeric-9-plus-box-multiple-outline::before{content:"\F3C0"}.mdi-numeric-9-plus-box-outline::before{content:"\F3C1"}.mdi-numeric-9-plus-circle::before{content:"\FC8E"}.mdi-numeric-9-plus-circle-outline::before{content:"\FC8F"}.mdi-nut::before{content:"\F6F7"}.mdi-nutrition::before{content:"\F3C2"}.mdi-oar::before{content:"\F67B"}.mdi-ocarina::before{content:"\FDBC"}.mdi-octagon::before{content:"\F3C3"}.mdi-octagon-outline::before{content:"\F3C4"}.mdi-octagram::before{content:"\F6F8"}.mdi-octagram-outline::before{content:"\F774"}.mdi-odnoklassniki::before{content:"\F3C5"}.mdi-office::before{content:"\F3C6"}.mdi-office-building::before{content:"\F990"}.mdi-oil::before{content:"\F3C7"}.mdi-oil-lamp::before{content:"\FF36"}.mdi-oil-temperature::before{content:"\F3C8"}.mdi-omega::before{content:"\F3C9"}.mdi-one-up::before{content:"\FB89"}.mdi-onedrive::before{content:"\F3CA"}.mdi-onenote::before{content:"\F746"}.mdi-onepassword::before{content:"\F880"}.mdi-opacity::before{content:"\F5CC"}.mdi-open-in-app::before{content:"\F3CB"}.mdi-open-in-new::before{content:"\F3CC"}.mdi-open-source-initiative::before{content:"\FB8A"}.mdi-openid::before{content:"\F3CD"}.mdi-opera::before{content:"\F3CE"}.mdi-orbit::before{content:"\F018"}.mdi-origin::before{content:"\FB2B"}.mdi-ornament::before{content:"\F3CF"}.mdi-ornament-variant::before{content:"\F3D0"}.mdi-outlook::before{content:"\FCFE"}.mdi-owl::before{content:"\F3D2"}.mdi-pac-man::before{content:"\FB8B"}.mdi-package::before{content:"\F3D3"}.mdi-package-down::before{content:"\F3D4"}.mdi-package-up::before{content:"\F3D5"}.mdi-package-variant::before{content:"\F3D6"}.mdi-package-variant-closed::before{content:"\F3D7"}.mdi-page-first::before{content:"\F600"}.mdi-page-last::before{content:"\F601"}.mdi-page-layout-body::before{content:"\F6F9"}.mdi-page-layout-footer::before{content:"\F6FA"}.mdi-page-layout-header::before{content:"\F6FB"}.mdi-page-layout-header-footer::before{content:"\FF9C"}.mdi-page-layout-sidebar-left::before{content:"\F6FC"}.mdi-page-layout-sidebar-right::before{content:"\F6FD"}.mdi-page-next::before{content:"\FB8C"}.mdi-page-next-outline::before{content:"\FB8D"}.mdi-page-previous::before{content:"\FB8E"}.mdi-page-previous-outline::before{content:"\FB8F"}.mdi-palette::before{content:"\F3D8"}.mdi-palette-advanced::before{content:"\F3D9"}.mdi-palette-outline::before{content:"\FE6C"}.mdi-palette-swatch::before{content:"\F8B4"}.mdi-pan::before{content:"\FB90"}.mdi-pan-bottom-left::before{content:"\FB91"}.mdi-pan-bottom-right::before{content:"\FB92"}.mdi-pan-down::before{content:"\FB93"}.mdi-pan-horizontal::before{content:"\FB94"}.mdi-pan-left::before{content:"\FB95"}.mdi-pan-right::before{content:"\FB96"}.mdi-pan-top-left::before{content:"\FB97"}.mdi-pan-top-right::before{content:"\FB98"}.mdi-pan-up::before{content:"\FB99"}.mdi-pan-vertical::before{content:"\FB9A"}.mdi-panda::before{content:"\F3DA"}.mdi-pandora::before{content:"\F3DB"}.mdi-panorama::before{content:"\F3DC"}.mdi-panorama-fisheye::before{content:"\F3DD"}.mdi-panorama-horizontal::before{content:"\F3DE"}.mdi-panorama-vertical::before{content:"\F3DF"}.mdi-panorama-wide-angle::before{content:"\F3E0"}.mdi-paper-cut-vertical::before{content:"\F3E1"}.mdi-paperclip::before{content:"\F3E2"}.mdi-parachute::before{content:"\FC90"}.mdi-parachute-outline::before{content:"\FC91"}.mdi-parking::before{content:"\F3E3"}.mdi-passport::before{content:"\F7E2"}.mdi-passport-biometric::before{content:"\FDBD"}.mdi-patio-heater::before{content:"\FF9D"}.mdi-patreon::before{content:"\F881"}.mdi-pause::before{content:"\F3E4"}.mdi-pause-circle::before{content:"\F3E5"}.mdi-pause-circle-outline::before{content:"\F3E6"}.mdi-pause-octagon::before{content:"\F3E7"}.mdi-pause-octagon-outline::before{content:"\F3E8"}.mdi-paw::before{content:"\F3E9"}.mdi-paw-off::before{content:"\F657"}.mdi-paypal::before{content:"\F882"}.mdi-pdf-box::before{content:"\FE39"}.mdi-peace::before{content:"\F883"}.mdi-pen::before{content:"\F3EA"}.mdi-pen-lock::before{content:"\FDBE"}.mdi-pen-minus::before{content:"\FDBF"}.mdi-pen-off::before{content:"\FDC0"}.mdi-pen-plus::before{content:"\FDC1"}.mdi-pen-remove::before{content:"\FDC2"}.mdi-pencil::before{content:"\F3EB"}.mdi-pencil-box::before{content:"\F3EC"}.mdi-pencil-box-outline::before{content:"\F3ED"}.mdi-pencil-circle::before{content:"\F6FE"}.mdi-pencil-circle-outline::before{content:"\F775"}.mdi-pencil-lock::before{content:"\F3EE"}.mdi-pencil-lock-outline::before{content:"\FDC3"}.mdi-pencil-minus::before{content:"\FDC4"}.mdi-pencil-minus-outline::before{content:"\FDC5"}.mdi-pencil-off::before{content:"\F3EF"}.mdi-pencil-off-outline::before{content:"\FDC6"}.mdi-pencil-outline::before{content:"\FC92"}.mdi-pencil-plus::before{content:"\FDC7"}.mdi-pencil-plus-outline::before{content:"\FDC8"}.mdi-pencil-remove::before{content:"\FDC9"}.mdi-pencil-remove-outline::before{content:"\FDCA"}.mdi-penguin::before{content:"\FEDD"}.mdi-pentagon::before{content:"\F6FF"}.mdi-pentagon-outline::before{content:"\F700"}.mdi-percent::before{content:"\F3F0"}.mdi-periodic-table::before{content:"\F8B5"}.mdi-periodic-table-co2::before{content:"\F7E3"}.mdi-periscope::before{content:"\F747"}.mdi-perspective-less::before{content:"\FCFF"}.mdi-perspective-more::before{content:"\FD00"}.mdi-pharmacy::before{content:"\F3F1"}.mdi-phone::before{content:"\F3F2"}.mdi-phone-alert::before{content:"\FF37"}.mdi-phone-bluetooth::before{content:"\F3F3"}.mdi-phone-classic::before{content:"\F602"}.mdi-phone-forward::before{content:"\F3F4"}.mdi-phone-hangup::before{content:"\F3F5"}.mdi-phone-in-talk::before{content:"\F3F6"}.mdi-phone-incoming::before{content:"\F3F7"}.mdi-phone-lock::before{content:"\F3F8"}.mdi-phone-log::before{content:"\F3F9"}.mdi-phone-minus::before{content:"\F658"}.mdi-phone-missed::before{content:"\F3FA"}.mdi-phone-off::before{content:"\FDCB"}.mdi-phone-outgoing::before{content:"\F3FB"}.mdi-phone-outline::before{content:"\FDCC"}.mdi-phone-paused::before{content:"\F3FC"}.mdi-phone-plus::before{content:"\F659"}.mdi-phone-return::before{content:"\F82E"}.mdi-phone-rotate-landscape::before{content:"\F884"}.mdi-phone-rotate-portrait::before{content:"\F885"}.mdi-phone-settings::before{content:"\F3FD"}.mdi-phone-voip::before{content:"\F3FE"}.mdi-pi::before{content:"\F3FF"}.mdi-pi-box::before{content:"\F400"}.mdi-pi-hole::before{content:"\FDCD"}.mdi-piano::before{content:"\F67C"}.mdi-pickaxe::before{content:"\F8B6"}.mdi-picture-in-picture-bottom-right::before{content:"\FE3A"}.mdi-picture-in-picture-bottom-right-outline::before{content:"\FE3B"}.mdi-picture-in-picture-top-right::before{content:"\FE3C"}.mdi-picture-in-picture-top-right-outline::before{content:"\FE3D"}.mdi-pier::before{content:"\F886"}.mdi-pier-crane::before{content:"\F887"}.mdi-pig::before{content:"\F401"}.mdi-pill::before{content:"\F402"}.mdi-pillar::before{content:"\F701"}.mdi-pin::before{content:"\F403"}.mdi-pin-off::before{content:"\F404"}.mdi-pin-off-outline::before{content:"\F92F"}.mdi-pin-outline::before{content:"\F930"}.mdi-pine-tree::before{content:"\F405"}.mdi-pine-tree-box::before{content:"\F406"}.mdi-pinterest::before{content:"\F407"}.mdi-pinterest-box::before{content:"\F408"}.mdi-pinwheel::before{content:"\FAD4"}.mdi-pinwheel-outline::before{content:"\FAD5"}.mdi-pipe::before{content:"\F7E4"}.mdi-pipe-disconnected::before{content:"\F7E5"}.mdi-pipe-leak::before{content:"\F888"}.mdi-pirate::before{content:"\FA07"}.mdi-pistol::before{content:"\F702"}.mdi-piston::before{content:"\F889"}.mdi-pizza::before{content:"\F409"}.mdi-play::before{content:"\F40A"}.mdi-play-box-outline::before{content:"\F40B"}.mdi-play-circle::before{content:"\F40C"}.mdi-play-circle-outline::before{content:"\F40D"}.mdi-play-network::before{content:"\F88A"}.mdi-play-network-outline::before{content:"\FC93"}.mdi-play-outline::before{content:"\FF38"}.mdi-play-pause::before{content:"\F40E"}.mdi-play-protected-content::before{content:"\F40F"}.mdi-play-speed::before{content:"\F8FE"}.mdi-playlist-check::before{content:"\F5C7"}.mdi-playlist-edit::before{content:"\F8FF"}.mdi-playlist-minus::before{content:"\F410"}.mdi-playlist-music::before{content:"\FC94"}.mdi-playlist-music-outline::before{content:"\FC95"}.mdi-playlist-play::before{content:"\F411"}.mdi-playlist-plus::before{content:"\F412"}.mdi-playlist-remove::before{content:"\F413"}.mdi-playlist-star::before{content:"\FDCE"}.mdi-playstation::before{content:"\F414"}.mdi-plex::before{content:"\F6B9"}.mdi-plus::before{content:"\F415"}.mdi-plus-box::before{content:"\F416"}.mdi-plus-box-outline::before{content:"\F703"}.mdi-plus-circle::before{content:"\F417"}.mdi-plus-circle-multiple-outline::before{content:"\F418"}.mdi-plus-circle-outline::before{content:"\F419"}.mdi-plus-minus::before{content:"\F991"}.mdi-plus-minus-box::before{content:"\F992"}.mdi-plus-network::before{content:"\F41A"}.mdi-plus-network-outline::before{content:"\FC96"}.mdi-plus-one::before{content:"\F41B"}.mdi-plus-outline::before{content:"\F704"}.mdi-pocket::before{content:"\F41C"}.mdi-podcast::before{content:"\F993"}.mdi-podium::before{content:"\FD01"}.mdi-podium-bronze::before{content:"\FD02"}.mdi-podium-gold::before{content:"\FD03"}.mdi-podium-silver::before{content:"\FD04"}.mdi-point-of-sale::before{content:"\FD6E"}.mdi-pokeball::before{content:"\F41D"}.mdi-pokemon-go::before{content:"\FA08"}.mdi-poker-chip::before{content:"\F82F"}.mdi-polaroid::before{content:"\F41E"}.mdi-poll::before{content:"\F41F"}.mdi-poll-box::before{content:"\F420"}.mdi-polymer::before{content:"\F421"}.mdi-pool::before{content:"\F606"}.mdi-popcorn::before{content:"\F422"}.mdi-postage-stamp::before{content:"\FC97"}.mdi-pot::before{content:"\F65A"}.mdi-pot-mix::before{content:"\F65B"}.mdi-pound::before{content:"\F423"}.mdi-pound-box::before{content:"\F424"}.mdi-power::before{content:"\F425"}.mdi-power-cycle::before{content:"\F900"}.mdi-power-off::before{content:"\F901"}.mdi-power-on::before{content:"\F902"}.mdi-power-plug::before{content:"\F6A4"}.mdi-power-plug-off::before{content:"\F6A5"}.mdi-power-settings::before{content:"\F426"}.mdi-power-sleep::before{content:"\F903"}.mdi-power-socket::before{content:"\F427"}.mdi-power-socket-au::before{content:"\F904"}.mdi-power-socket-eu::before{content:"\F7E6"}.mdi-power-socket-uk::before{content:"\F7E7"}.mdi-power-socket-us::before{content:"\F7E8"}.mdi-power-standby::before{content:"\F905"}.mdi-powershell::before{content:"\FA09"}.mdi-prescription::before{content:"\F705"}.mdi-presentation::before{content:"\F428"}.mdi-presentation-play::before{content:"\F429"}.mdi-printer::before{content:"\F42A"}.mdi-printer-3d::before{content:"\F42B"}.mdi-printer-3d-nozzle::before{content:"\FE3E"}.mdi-printer-3d-nozzle-outline::before{content:"\FE3F"}.mdi-printer-alert::before{content:"\F42C"}.mdi-printer-off::before{content:"\FE40"}.mdi-printer-settings::before{content:"\F706"}.mdi-printer-wireless::before{content:"\FA0A"}.mdi-priority-high::before{content:"\F603"}.mdi-priority-low::before{content:"\F604"}.mdi-professional-hexagon::before{content:"\F42D"}.mdi-progress-alert::before{content:"\FC98"}.mdi-progress-check::before{content:"\F994"}.mdi-progress-clock::before{content:"\F995"}.mdi-progress-download::before{content:"\F996"}.mdi-progress-upload::before{content:"\F997"}.mdi-progress-wrench::before{content:"\FC99"}.mdi-projector::before{content:"\F42E"}.mdi-projector-screen::before{content:"\F42F"}.mdi-publish::before{content:"\F6A6"}.mdi-pulse::before{content:"\F430"}.mdi-pumpkin::before{content:"\FB9B"}.mdi-purse::before{content:"\FF39"}.mdi-purse-outline::before{content:"\FF3A"}.mdi-puzzle::before{content:"\F431"}.mdi-puzzle-outline::before{content:"\FA65"}.mdi-qi::before{content:"\F998"}.mdi-qqchat::before{content:"\F605"}.mdi-qrcode::before{content:"\F432"}.mdi-qrcode-edit::before{content:"\F8B7"}.mdi-qrcode-scan::before{content:"\F433"}.mdi-quadcopter::before{content:"\F434"}.mdi-quality-high::before{content:"\F435"}.mdi-quality-low::before{content:"\FA0B"}.mdi-quality-medium::before{content:"\FA0C"}.mdi-quicktime::before{content:"\F436"}.mdi-quora::before{content:"\FD05"}.mdi-rabbit::before{content:"\F906"}.mdi-racing-helmet::before{content:"\FD6F"}.mdi-racquetball::before{content:"\FD70"}.mdi-radar::before{content:"\F437"}.mdi-radiator::before{content:"\F438"}.mdi-radiator-disabled::before{content:"\FAD6"}.mdi-radiator-off::before{content:"\FAD7"}.mdi-radio::before{content:"\F439"}.mdi-radio-am::before{content:"\FC9A"}.mdi-radio-fm::before{content:"\FC9B"}.mdi-radio-handheld::before{content:"\F43A"}.mdi-radio-tower::before{content:"\F43B"}.mdi-radioactive::before{content:"\F43C"}.mdi-radioactive-off::before{content:"\FEDE"}.mdi-radiobox-blank::before{content:"\F43D"}.mdi-radiobox-marked::before{content:"\F43E"}.mdi-radius::before{content:"\FC9C"}.mdi-radius-outline::before{content:"\FC9D"}.mdi-railroad-light::before{content:"\FF3B"}.mdi-raspberry-pi::before{content:"\F43F"}.mdi-ray-end::before{content:"\F440"}.mdi-ray-end-arrow::before{content:"\F441"}.mdi-ray-start::before{content:"\F442"}.mdi-ray-start-arrow::before{content:"\F443"}.mdi-ray-start-end::before{content:"\F444"}.mdi-ray-vertex::before{content:"\F445"}.mdi-react::before{content:"\F707"}.mdi-read::before{content:"\F447"}.mdi-receipt::before{content:"\F449"}.mdi-record::before{content:"\F44A"}.mdi-record-circle::before{content:"\FEDF"}.mdi-record-circle-outline::before{content:"\FEE0"}.mdi-record-player::before{content:"\F999"}.mdi-record-rec::before{content:"\F44B"}.mdi-rectangle::before{content:"\FE41"}.mdi-rectangle-outline::before{content:"\FE42"}.mdi-recycle::before{content:"\F44C"}.mdi-reddit::before{content:"\F44D"}.mdi-redo::before{content:"\F44E"}.mdi-redo-variant::before{content:"\F44F"}.mdi-reflect-horizontal::before{content:"\FA0D"}.mdi-reflect-vertical::before{content:"\FA0E"}.mdi-refresh::before{content:"\F450"}.mdi-regex::before{content:"\F451"}.mdi-registered-trademark::before{content:"\FA66"}.mdi-relative-scale::before{content:"\F452"}.mdi-reload::before{content:"\F453"}.mdi-reminder::before{content:"\F88B"}.mdi-remote::before{content:"\F454"}.mdi-remote-desktop::before{content:"\F8B8"}.mdi-remote-off::before{content:"\FEE1"}.mdi-remote-tv::before{content:"\FEE2"}.mdi-remote-tv-off::before{content:"\FEE3"}.mdi-rename-box::before{content:"\F455"}.mdi-reorder-horizontal::before{content:"\F687"}.mdi-reorder-vertical::before{content:"\F688"}.mdi-repeat::before{content:"\F456"}.mdi-repeat-off::before{content:"\F457"}.mdi-repeat-once::before{content:"\F458"}.mdi-replay::before{content:"\F459"}.mdi-reply::before{content:"\F45A"}.mdi-reply-all::before{content:"\F45B"}.mdi-reply-all-outline::before{content:"\FF3C"}.mdi-reply-outline::before{content:"\FF3D"}.mdi-reproduction::before{content:"\F45C"}.mdi-resistor::before{content:"\FB1F"}.mdi-resistor-nodes::before{content:"\FB20"}.mdi-resize::before{content:"\FA67"}.mdi-resize-bottom-right::before{content:"\F45D"}.mdi-responsive::before{content:"\F45E"}.mdi-restart::before{content:"\F708"}.mdi-restart-off::before{content:"\FD71"}.mdi-restore::before{content:"\F99A"}.mdi-restore-clock::before{content:"\F6A7"}.mdi-rewind::before{content:"\F45F"}.mdi-rewind-10::before{content:"\FD06"}.mdi-rewind-30::before{content:"\FD72"}.mdi-rewind-outline::before{content:"\F709"}.mdi-rhombus::before{content:"\F70A"}.mdi-rhombus-medium::before{content:"\FA0F"}.mdi-rhombus-outline::before{content:"\F70B"}.mdi-rhombus-split::before{content:"\FA10"}.mdi-ribbon::before{content:"\F460"}.mdi-rice::before{content:"\F7E9"}.mdi-ring::before{content:"\F7EA"}.mdi-rivet::before{content:"\FE43"}.mdi-road::before{content:"\F461"}.mdi-road-variant::before{content:"\F462"}.mdi-robot::before{content:"\F6A8"}.mdi-robot-industrial::before{content:"\FB21"}.mdi-robot-vacuum::before{content:"\F70C"}.mdi-robot-vacuum-variant::before{content:"\F907"}.mdi-rocket::before{content:"\F463"}.mdi-roller-skate::before{content:"\FD07"}.mdi-rollerblade::before{content:"\FD08"}.mdi-rollupjs::before{content:"\FB9C"}.mdi-room-service::before{content:"\F88C"}.mdi-room-service-outline::before{content:"\FD73"}.mdi-rotate-3d::before{content:"\FEE4"}.mdi-rotate-3d-variant::before{content:"\F464"}.mdi-rotate-left::before{content:"\F465"}.mdi-rotate-left-variant::before{content:"\F466"}.mdi-rotate-orbit::before{content:"\FD74"}.mdi-rotate-right::before{content:"\F467"}.mdi-rotate-right-variant::before{content:"\F468"}.mdi-rounded-corner::before{content:"\F607"}.mdi-router-wireless::before{content:"\F469"}.mdi-router-wireless-settings::before{content:"\FA68"}.mdi-routes::before{content:"\F46A"}.mdi-rowing::before{content:"\F608"}.mdi-rss::before{content:"\F46B"}.mdi-rss-box::before{content:"\F46C"}.mdi-rss-off::before{content:"\FF3E"}.mdi-ruby::before{content:"\FD09"}.mdi-rugby::before{content:"\FD75"}.mdi-ruler::before{content:"\F46D"}.mdi-ruler-square::before{content:"\FC9E"}.mdi-run::before{content:"\F70D"}.mdi-run-fast::before{content:"\F46E"}.mdi-sack::before{content:"\FD0A"}.mdi-sack-percent::before{content:"\FD0B"}.mdi-safe::before{content:"\FA69"}.mdi-safety-goggles::before{content:"\FD0C"}.mdi-sailing::before{content:"\FEE5"}.mdi-sale::before{content:"\F46F"}.mdi-salesforce::before{content:"\F88D"}.mdi-sass::before{content:"\F7EB"}.mdi-satellite::before{content:"\F470"}.mdi-satellite-uplink::before{content:"\F908"}.mdi-satellite-variant::before{content:"\F471"}.mdi-sausage::before{content:"\F8B9"}.mdi-saw-blade::before{content:"\FE44"}.mdi-saxophone::before{content:"\F609"}.mdi-scale::before{content:"\F472"}.mdi-scale-balance::before{content:"\F5D1"}.mdi-scale-bathroom::before{content:"\F473"}.mdi-scanner::before{content:"\F6AA"}.mdi-scanner-off::before{content:"\F909"}.mdi-scatter-plot::before{content:"\FEE6"}.mdi-scatter-plot-outline::before{content:"\FEE7"}.mdi-school::before{content:"\F474"}.mdi-scissors-cutting::before{content:"\FA6A"}.mdi-screen-rotation::before{content:"\F475"}.mdi-screen-rotation-lock::before{content:"\F476"}.mdi-screw-flat-top::before{content:"\FDCF"}.mdi-screw-lag::before{content:"\FE54"}.mdi-screw-machine-flat-top::before{content:"\FE55"}.mdi-screw-machine-round-top::before{content:"\FE56"}.mdi-screw-round-top::before{content:"\FE57"}.mdi-screwdriver::before{content:"\F477"}.mdi-script::before{content:"\FB9D"}.mdi-script-outline::before{content:"\F478"}.mdi-script-text::before{content:"\FB9E"}.mdi-script-text-outline::before{content:"\FB9F"}.mdi-sd::before{content:"\F479"}.mdi-seal::before{content:"\F47A"}.mdi-search-web::before{content:"\F70E"}.mdi-seat::before{content:"\FC9F"}.mdi-seat-flat::before{content:"\F47B"}.mdi-seat-flat-angled::before{content:"\F47C"}.mdi-seat-individual-suite::before{content:"\F47D"}.mdi-seat-legroom-extra::before{content:"\F47E"}.mdi-seat-legroom-normal::before{content:"\F47F"}.mdi-seat-legroom-reduced::before{content:"\F480"}.mdi-seat-outline::before{content:"\FCA0"}.mdi-seat-recline-extra::before{content:"\F481"}.mdi-seat-recline-normal::before{content:"\F482"}.mdi-seatbelt::before{content:"\FCA1"}.mdi-security::before{content:"\F483"}.mdi-security-network::before{content:"\F484"}.mdi-seed::before{content:"\FE45"}.mdi-seed-outline::before{content:"\FE46"}.mdi-segment::before{content:"\FEE8"}.mdi-select::before{content:"\F485"}.mdi-select-all::before{content:"\F486"}.mdi-select-color::before{content:"\FD0D"}.mdi-select-compare::before{content:"\FAD8"}.mdi-select-drag::before{content:"\FA6B"}.mdi-select-group::before{content:"\FF9F"}.mdi-select-inverse::before{content:"\F487"}.mdi-select-off::before{content:"\F488"}.mdi-selection::before{content:"\F489"}.mdi-selection-drag::before{content:"\FA6C"}.mdi-selection-ellipse::before{content:"\FD0E"}.mdi-selection-ellipse-arrow-inside::before{content:"\FF3F"}.mdi-selection-off::before{content:"\F776"}.mdi-send::before{content:"\F48A"}.mdi-send-circle::before{content:"\FE58"}.mdi-send-circle-outline::before{content:"\FE59"}.mdi-send-lock::before{content:"\F7EC"}.mdi-serial-port::before{content:"\F65C"}.mdi-server::before{content:"\F48B"}.mdi-server-minus::before{content:"\F48C"}.mdi-server-network::before{content:"\F48D"}.mdi-server-network-off::before{content:"\F48E"}.mdi-server-off::before{content:"\F48F"}.mdi-server-plus::before{content:"\F490"}.mdi-server-remove::before{content:"\F491"}.mdi-server-security::before{content:"\F492"}.mdi-set-all::before{content:"\F777"}.mdi-set-center::before{content:"\F778"}.mdi-set-center-right::before{content:"\F779"}.mdi-set-left::before{content:"\F77A"}.mdi-set-left-center::before{content:"\F77B"}.mdi-set-left-right::before{content:"\F77C"}.mdi-set-none::before{content:"\F77D"}.mdi-set-right::before{content:"\F77E"}.mdi-set-top-box::before{content:"\F99E"}.mdi-settings::before{content:"\F493"}.mdi-settings-box::before{content:"\F494"}.mdi-settings-helper::before{content:"\FA6D"}.mdi-settings-outline::before{content:"\F8BA"}.mdi-shape::before{content:"\F830"}.mdi-shape-circle-plus::before{content:"\F65D"}.mdi-shape-outline::before{content:"\F831"}.mdi-shape-plus::before{content:"\F495"}.mdi-shape-polygon-plus::before{content:"\F65E"}.mdi-shape-rectangle-plus::before{content:"\F65F"}.mdi-shape-square-plus::before{content:"\F660"}.mdi-share::before{content:"\F496"}.mdi-share-off::before{content:"\FF40"}.mdi-share-off-outline::before{content:"\FF41"}.mdi-share-outline::before{content:"\F931"}.mdi-share-variant::before{content:"\F497"}.mdi-sheep::before{content:"\FCA2"}.mdi-shield::before{content:"\F498"}.mdi-shield-account::before{content:"\F88E"}.mdi-shield-account-outline::before{content:"\FA11"}.mdi-shield-airplane::before{content:"\F6BA"}.mdi-shield-airplane-outline::before{content:"\FCA3"}.mdi-shield-alert::before{content:"\FEE9"}.mdi-shield-alert-outline::before{content:"\FEEA"}.mdi-shield-car::before{content:"\FFA0"}.mdi-shield-check::before{content:"\F565"}.mdi-shield-check-outline::before{content:"\FCA4"}.mdi-shield-cross::before{content:"\FCA5"}.mdi-shield-cross-outline::before{content:"\FCA6"}.mdi-shield-half-full::before{content:"\F77F"}.mdi-shield-home::before{content:"\F689"}.mdi-shield-home-outline::before{content:"\FCA7"}.mdi-shield-key::before{content:"\FBA0"}.mdi-shield-key-outline::before{content:"\FBA1"}.mdi-shield-link-variant::before{content:"\FD0F"}.mdi-shield-link-variant-outline::before{content:"\FD10"}.mdi-shield-lock::before{content:"\F99C"}.mdi-shield-lock-outline::before{content:"\FCA8"}.mdi-shield-off::before{content:"\F99D"}.mdi-shield-off-outline::before{content:"\F99B"}.mdi-shield-outline::before{content:"\F499"}.mdi-shield-plus::before{content:"\FAD9"}.mdi-shield-plus-outline::before{content:"\FADA"}.mdi-shield-remove::before{content:"\FADB"}.mdi-shield-remove-outline::before{content:"\FADC"}.mdi-shield-search::before{content:"\FD76"}.mdi-ship-wheel::before{content:"\F832"}.mdi-shoe-formal::before{content:"\FB22"}.mdi-shoe-heel::before{content:"\FB23"}.mdi-shoe-print::before{content:"\FE5A"}.mdi-shopify::before{content:"\FADD"}.mdi-shopping::before{content:"\F49A"}.mdi-shopping-music::before{content:"\F49B"}.mdi-shopping-search::before{content:"\FFA1"}.mdi-shovel::before{content:"\F70F"}.mdi-shovel-off::before{content:"\F710"}.mdi-shower::before{content:"\F99F"}.mdi-shower-head::before{content:"\F9A0"}.mdi-shredder::before{content:"\F49C"}.mdi-shuffle::before{content:"\F49D"}.mdi-shuffle-disabled::before{content:"\F49E"}.mdi-shuffle-variant::before{content:"\F49F"}.mdi-sigma::before{content:"\F4A0"}.mdi-sigma-lower::before{content:"\F62B"}.mdi-sign-caution::before{content:"\F4A1"}.mdi-sign-direction::before{content:"\F780"}.mdi-sign-text::before{content:"\F781"}.mdi-signal::before{content:"\F4A2"}.mdi-signal-2g::before{content:"\F711"}.mdi-signal-3g::before{content:"\F712"}.mdi-signal-4g::before{content:"\F713"}.mdi-signal-5g::before{content:"\FA6E"}.mdi-signal-cellular-1::before{content:"\F8BB"}.mdi-signal-cellular-2::before{content:"\F8BC"}.mdi-signal-cellular-3::before{content:"\F8BD"}.mdi-signal-cellular-outline::before{content:"\F8BE"}.mdi-signal-distance-variant::before{content:"\FE47"}.mdi-signal-hspa::before{content:"\F714"}.mdi-signal-hspa-plus::before{content:"\F715"}.mdi-signal-off::before{content:"\F782"}.mdi-signal-variant::before{content:"\F60A"}.mdi-signature::before{content:"\FE5B"}.mdi-signature-freehand::before{content:"\FE5C"}.mdi-signature-image::before{content:"\FE5D"}.mdi-signature-text::before{content:"\FE5E"}.mdi-silo::before{content:"\FB24"}.mdi-silverware::before{content:"\F4A3"}.mdi-silverware-fork::before{content:"\F4A4"}.mdi-silverware-fork-knife::before{content:"\FA6F"}.mdi-silverware-spoon::before{content:"\F4A5"}.mdi-silverware-variant::before{content:"\F4A6"}.mdi-sim::before{content:"\F4A7"}.mdi-sim-alert::before{content:"\F4A8"}.mdi-sim-off::before{content:"\F4A9"}.mdi-sina-weibo::before{content:"\FADE"}.mdi-sitemap::before{content:"\F4AA"}.mdi-skate::before{content:"\FD11"}.mdi-skew-less::before{content:"\FD12"}.mdi-skew-more::before{content:"\FD13"}.mdi-skip-backward::before{content:"\F4AB"}.mdi-skip-backward-outline::before{content:"\FF42"}.mdi-skip-forward::before{content:"\F4AC"}.mdi-skip-forward-outline::before{content:"\FF43"}.mdi-skip-next::before{content:"\F4AD"}.mdi-skip-next-circle::before{content:"\F661"}.mdi-skip-next-circle-outline::before{content:"\F662"}.mdi-skip-next-outline::before{content:"\FF44"}.mdi-skip-previous::before{content:"\F4AE"}.mdi-skip-previous-circle::before{content:"\F663"}.mdi-skip-previous-circle-outline::before{content:"\F664"}.mdi-skip-previous-outline::before{content:"\FF45"}.mdi-skull::before{content:"\F68B"}.mdi-skull-crossbones::before{content:"\FBA2"}.mdi-skull-crossbones-outline::before{content:"\FBA3"}.mdi-skull-outline::before{content:"\FBA4"}.mdi-skype::before{content:"\F4AF"}.mdi-skype-business::before{content:"\F4B0"}.mdi-slack::before{content:"\F4B1"}.mdi-slackware::before{content:"\F90A"}.mdi-sleep::before{content:"\F4B2"}.mdi-sleep-off::before{content:"\F4B3"}.mdi-slope-downhill::before{content:"\FE5F"}.mdi-slope-uphill::before{content:"\FE60"}.mdi-smog::before{content:"\FA70"}.mdi-smoke-detector::before{content:"\F392"}.mdi-smoking::before{content:"\F4B4"}.mdi-smoking-off::before{content:"\F4B5"}.mdi-snapchat::before{content:"\F4B6"}.mdi-snowflake::before{content:"\F716"}.mdi-snowflake-alert::before{content:"\FF46"}.mdi-snowflake-variant::before{content:"\FF47"}.mdi-snowman::before{content:"\F4B7"}.mdi-soccer::before{content:"\F4B8"}.mdi-soccer-field::before{content:"\F833"}.mdi-sofa::before{content:"\F4B9"}.mdi-solar-panel::before{content:"\FD77"}.mdi-solar-panel-large::before{content:"\FD78"}.mdi-solar-power::before{content:"\FA71"}.mdi-solid::before{content:"\F68C"}.mdi-sort::before{content:"\F4BA"}.mdi-sort-alphabetical::before{content:"\F4BB"}.mdi-sort-ascending::before{content:"\F4BC"}.mdi-sort-descending::before{content:"\F4BD"}.mdi-sort-numeric::before{content:"\F4BE"}.mdi-sort-variant::before{content:"\F4BF"}.mdi-sort-variant-lock::before{content:"\FCA9"}.mdi-sort-variant-lock-open::before{content:"\FCAA"}.mdi-soundcloud::before{content:"\F4C0"}.mdi-source-branch::before{content:"\F62C"}.mdi-source-commit::before{content:"\F717"}.mdi-source-commit-end::before{content:"\F718"}.mdi-source-commit-end-local::before{content:"\F719"}.mdi-source-commit-local::before{content:"\F71A"}.mdi-source-commit-next-local::before{content:"\F71B"}.mdi-source-commit-start::before{content:"\F71C"}.mdi-source-commit-start-next-local::before{content:"\F71D"}.mdi-source-fork::before{content:"\F4C1"}.mdi-source-merge::before{content:"\F62D"}.mdi-source-pull::before{content:"\F4C2"}.mdi-source-repository::before{content:"\FCAB"}.mdi-source-repository-multiple::before{content:"\FCAC"}.mdi-soy-sauce::before{content:"\F7ED"}.mdi-spa::before{content:"\FCAD"}.mdi-spa-outline::before{content:"\FCAE"}.mdi-space-invaders::before{content:"\FBA5"}.mdi-spade::before{content:"\FE48"}.mdi-speaker::before{content:"\F4C3"}.mdi-speaker-bluetooth::before{content:"\F9A1"}.mdi-speaker-multiple::before{content:"\FD14"}.mdi-speaker-off::before{content:"\F4C4"}.mdi-speaker-wireless::before{content:"\F71E"}.mdi-speedometer::before{content:"\F4C5"}.mdi-speedometer-medium::before{content:"\FFA2"}.mdi-speedometer-slow::before{content:"\FFA3"}.mdi-spellcheck::before{content:"\F4C6"}.mdi-spider-web::before{content:"\FBA6"}.mdi-spotify::before{content:"\F4C7"}.mdi-spotlight::before{content:"\F4C8"}.mdi-spotlight-beam::before{content:"\F4C9"}.mdi-spray::before{content:"\F665"}.mdi-spray-bottle::before{content:"\FADF"}.mdi-sprout::before{content:"\FE49"}.mdi-sprout-outline::before{content:"\FE4A"}.mdi-square::before{content:"\F763"}.mdi-square-edit-outline::before{content:"\F90B"}.mdi-square-inc::before{content:"\F4CA"}.mdi-square-inc-cash::before{content:"\F4CB"}.mdi-square-medium::before{content:"\FA12"}.mdi-square-medium-outline::before{content:"\FA13"}.mdi-square-outline::before{content:"\F762"}.mdi-square-root::before{content:"\F783"}.mdi-square-root-box::before{content:"\F9A2"}.mdi-square-small::before{content:"\FA14"}.mdi-squeegee::before{content:"\FAE0"}.mdi-ssh::before{content:"\F8BF"}.mdi-stack-exchange::before{content:"\F60B"}.mdi-stack-overflow::before{content:"\F4CC"}.mdi-stadium::before{content:"\F71F"}.mdi-stairs::before{content:"\F4CD"}.mdi-stamper::before{content:"\FD15"}.mdi-standard-definition::before{content:"\F7EE"}.mdi-star::before{content:"\F4CE"}.mdi-star-box::before{content:"\FA72"}.mdi-star-box-outline::before{content:"\FA73"}.mdi-star-circle::before{content:"\F4CF"}.mdi-star-circle-outline::before{content:"\F9A3"}.mdi-star-face::before{content:"\F9A4"}.mdi-star-four-points::before{content:"\FAE1"}.mdi-star-four-points-outline::before{content:"\FAE2"}.mdi-star-half::before{content:"\F4D0"}.mdi-star-off::before{content:"\F4D1"}.mdi-star-outline::before{content:"\F4D2"}.mdi-star-three-points::before{content:"\FAE3"}.mdi-star-three-points-outline::before{content:"\FAE4"}.mdi-steam::before{content:"\F4D3"}.mdi-steam-box::before{content:"\F90C"}.mdi-steering::before{content:"\F4D4"}.mdi-steering-off::before{content:"\F90D"}.mdi-step-backward::before{content:"\F4D5"}.mdi-step-backward-2::before{content:"\F4D6"}.mdi-step-forward::before{content:"\F4D7"}.mdi-step-forward-2::before{content:"\F4D8"}.mdi-stethoscope::before{content:"\F4D9"}.mdi-sticker::before{content:"\F5D0"}.mdi-sticker-emoji::before{content:"\F784"}.mdi-stocking::before{content:"\F4DA"}.mdi-stop::before{content:"\F4DB"}.mdi-stop-circle::before{content:"\F666"}.mdi-stop-circle-outline::before{content:"\F667"}.mdi-store::before{content:"\F4DC"}.mdi-store-24-hour::before{content:"\F4DD"}.mdi-stove::before{content:"\F4DE"}.mdi-strava::before{content:"\FB25"}.mdi-stretch-to-page::before{content:"\FF48"}.mdi-stretch-to-page-outline::before{content:"\FF49"}.mdi-subdirectory-arrow-left::before{content:"\F60C"}.mdi-subdirectory-arrow-right::before{content:"\F60D"}.mdi-subtitles::before{content:"\FA15"}.mdi-subtitles-outline::before{content:"\FA16"}.mdi-subway::before{content:"\F6AB"}.mdi-subway-alert-variant::before{content:"\FD79"}.mdi-subway-variant::before{content:"\F4DF"}.mdi-summit::before{content:"\F785"}.mdi-sunglasses::before{content:"\F4E0"}.mdi-surround-sound::before{content:"\F5C5"}.mdi-surround-sound-2-0::before{content:"\F7EF"}.mdi-surround-sound-3-1::before{content:"\F7F0"}.mdi-surround-sound-5-1::before{content:"\F7F1"}.mdi-surround-sound-7-1::before{content:"\F7F2"}.mdi-svg::before{content:"\F720"}.mdi-swap-horizontal::before{content:"\F4E1"}.mdi-swap-horizontal-bold::before{content:"\FBA9"}.mdi-swap-horizontal-variant::before{content:"\F8C0"}.mdi-swap-vertical::before{content:"\F4E2"}.mdi-swap-vertical-bold::before{content:"\FBAA"}.mdi-swap-vertical-variant::before{content:"\F8C1"}.mdi-swim::before{content:"\F4E3"}.mdi-switch::before{content:"\F4E4"}.mdi-sword::before{content:"\F4E5"}.mdi-sword-cross::before{content:"\F786"}.mdi-symfony::before{content:"\FAE5"}.mdi-sync::before{content:"\F4E6"}.mdi-sync-alert::before{content:"\F4E7"}.mdi-sync-off::before{content:"\F4E8"}.mdi-tab::before{content:"\F4E9"}.mdi-tab-minus::before{content:"\FB26"}.mdi-tab-plus::before{content:"\F75B"}.mdi-tab-remove::before{content:"\FB27"}.mdi-tab-unselected::before{content:"\F4EA"}.mdi-table::before{content:"\F4EB"}.mdi-table-border::before{content:"\FA17"}.mdi-table-column::before{content:"\F834"}.mdi-table-column-plus-after::before{content:"\F4EC"}.mdi-table-column-plus-before::before{content:"\F4ED"}.mdi-table-column-remove::before{content:"\F4EE"}.mdi-table-column-width::before{content:"\F4EF"}.mdi-table-edit::before{content:"\F4F0"}.mdi-table-large::before{content:"\F4F1"}.mdi-table-large-plus::before{content:"\FFA4"}.mdi-table-large-remove::before{content:"\FFA5"}.mdi-table-merge-cells::before{content:"\F9A5"}.mdi-table-of-contents::before{content:"\F835"}.mdi-table-plus::before{content:"\FA74"}.mdi-table-remove::before{content:"\FA75"}.mdi-table-row::before{content:"\F836"}.mdi-table-row-height::before{content:"\F4F2"}.mdi-table-row-plus-after::before{content:"\F4F3"}.mdi-table-row-plus-before::before{content:"\F4F4"}.mdi-table-row-remove::before{content:"\F4F5"}.mdi-table-search::before{content:"\F90E"}.mdi-table-settings::before{content:"\F837"}.mdi-table-tennis::before{content:"\FE4B"}.mdi-tablet::before{content:"\F4F6"}.mdi-tablet-android::before{content:"\F4F7"}.mdi-tablet-cellphone::before{content:"\F9A6"}.mdi-tablet-dashboard::before{content:"\FEEB"}.mdi-tablet-ipad::before{content:"\F4F8"}.mdi-taco::before{content:"\F761"}.mdi-tag::before{content:"\F4F9"}.mdi-tag-faces::before{content:"\F4FA"}.mdi-tag-heart::before{content:"\F68A"}.mdi-tag-heart-outline::before{content:"\FBAB"}.mdi-tag-minus::before{content:"\F90F"}.mdi-tag-multiple::before{content:"\F4FB"}.mdi-tag-outline::before{content:"\F4FC"}.mdi-tag-plus::before{content:"\F721"}.mdi-tag-remove::before{content:"\F722"}.mdi-tag-text-outline::before{content:"\F4FD"}.mdi-tank::before{content:"\FD16"}.mdi-tape-measure::before{content:"\FB28"}.mdi-target::before{content:"\F4FE"}.mdi-target-account::before{content:"\FBAC"}.mdi-target-variant::before{content:"\FA76"}.mdi-taxi::before{content:"\F4FF"}.mdi-tea::before{content:"\FD7A"}.mdi-tea-outline::before{content:"\FD7B"}.mdi-teach::before{content:"\F88F"}.mdi-teamviewer::before{content:"\F500"}.mdi-telegram::before{content:"\F501"}.mdi-telescope::before{content:"\FB29"}.mdi-television::before{content:"\F502"}.mdi-television-box::before{content:"\F838"}.mdi-television-classic::before{content:"\F7F3"}.mdi-television-classic-off::before{content:"\F839"}.mdi-television-guide::before{content:"\F503"}.mdi-television-off::before{content:"\F83A"}.mdi-television-pause::before{content:"\FFA6"}.mdi-television-play::before{content:"\FEEC"}.mdi-television-stop::before{content:"\FFA7"}.mdi-temperature-celsius::before{content:"\F504"}.mdi-temperature-fahrenheit::before{content:"\F505"}.mdi-temperature-kelvin::before{content:"\F506"}.mdi-tennis::before{content:"\FD7C"}.mdi-tennis-ball::before{content:"\F507"}.mdi-tent::before{content:"\F508"}.mdi-terrain::before{content:"\F509"}.mdi-test-tube::before{content:"\F668"}.mdi-test-tube-empty::before{content:"\F910"}.mdi-test-tube-off::before{content:"\F911"}.mdi-text::before{content:"\F9A7"}.mdi-text-shadow::before{content:"\F669"}.mdi-text-short::before{content:"\F9A8"}.mdi-text-subject::before{content:"\F9A9"}.mdi-text-to-speech::before{content:"\F50A"}.mdi-text-to-speech-off::before{content:"\F50B"}.mdi-textbox::before{content:"\F60E"}.mdi-textbox-password::before{content:"\F7F4"}.mdi-texture::before{content:"\F50C"}.mdi-theater::before{content:"\F50D"}.mdi-theme-light-dark::before{content:"\F50E"}.mdi-thermometer::before{content:"\F50F"}.mdi-thermometer-alert::before{content:"\FE61"}.mdi-thermometer-chevron-down::before{content:"\FE62"}.mdi-thermometer-chevron-up::before{content:"\FE63"}.mdi-thermometer-lines::before{content:"\F510"}.mdi-thermometer-minus::before{content:"\FE64"}.mdi-thermometer-plus::before{content:"\FE65"}.mdi-thermostat::before{content:"\F393"}.mdi-thermostat-box::before{content:"\F890"}.mdi-thought-bubble::before{content:"\F7F5"}.mdi-thought-bubble-outline::before{content:"\F7F6"}.mdi-thumb-down::before{content:"\F511"}.mdi-mdi-thumb-down-outline::before{content:"\F512"}.mdi-thumb-up::before{content:"\F513"}.mdi-thumb-up-outline::before{content:"\F514"}.mdi-thumbs-up-down::before{content:"\F515"}.mdi-ticket::before{content:"\F516"}.mdi-ticket-account::before{content:"\F517"}.mdi-ticket-confirmation::before{content:"\F518"}.mdi-ticket-outline::before{content:"\F912"}.mdi-ticket-percent::before{content:"\F723"}.mdi-tie::before{content:"\F519"}.mdi-tilde::before{content:"\F724"}.mdi-timelapse::before{content:"\F51A"}.mdi-timeline::before{content:"\FBAD"}.mdi-timeline-alert::before{content:"\FFB2"}.mdi-timeline-alert-outline::before{content:"\FFB5"}.mdi-timeline-help::before{content:"\FFB6"}.mdi-timeline-help-outline::before{content:"\FFB7"}.mdi-timeline-outline::before{content:"\FBAE"}.mdi-timeline-plus::before{content:"\FFB3"}.mdi-timeline-plus-outline::before{content:"\FFB4"}.mdi-timeline-text::before{content:"\FBAF"}.mdi-timeline-text-outline::before{content:"\FBB0"}.mdi-timer::before{content:"\F51B"}.mdi-timer-10::before{content:"\F51C"}.mdi-timer-3::before{content:"\F51D"}.mdi-timer-off::before{content:"\F51E"}.mdi-timer-sand::before{content:"\F51F"}.mdi-timer-sand-empty::before{content:"\F6AC"}.mdi-timer-sand-full::before{content:"\F78B"}.mdi-timetable::before{content:"\F520"}.mdi-toaster-oven::before{content:"\FCAF"}.mdi-toggle-switch::before{content:"\F521"}.mdi-toggle-switch-off::before{content:"\F522"}.mdi-toggle-switch-off-outline::before{content:"\FA18"}.mdi-toggle-switch-outline::before{content:"\FA19"}.mdi-toilet::before{content:"\F9AA"}.mdi-toolbox::before{content:"\F9AB"}.mdi-toolbox-outline::before{content:"\F9AC"}.mdi-tooltip::before{content:"\F523"}.mdi-tooltip-account::before{content:"\F00C"}.mdi-tooltip-edit::before{content:"\F524"}.mdi-tooltip-image::before{content:"\F525"}.mdi-tooltip-image-outline::before{content:"\FBB1"}.mdi-tooltip-outline::before{content:"\F526"}.mdi-tooltip-plus::before{content:"\FBB2"}.mdi-tooltip-plus-outline::before{content:"\F527"}.mdi-tooltip-text::before{content:"\F528"}.mdi-tooltip-text-outline::before{content:"\FBB3"}.mdi-tooth::before{content:"\F8C2"}.mdi-tooth-outline::before{content:"\F529"}.mdi-tor::before{content:"\F52A"}.mdi-tortoise::before{content:"\FD17"}.mdi-tournament::before{content:"\F9AD"}.mdi-tower-beach::before{content:"\F680"}.mdi-tower-fire::before{content:"\F681"}.mdi-towing::before{content:"\F83B"}.mdi-track-light::before{content:"\F913"}.mdi-trackpad::before{content:"\F7F7"}.mdi-trackpad-lock::before{content:"\F932"}.mdi-tractor::before{content:"\F891"}.mdi-trademark::before{content:"\FA77"}.mdi-traffic-light::before{content:"\F52B"}.mdi-train::before{content:"\F52C"}.mdi-train-car::before{content:"\FBB4"}.mdi-train-variant::before{content:"\F8C3"}.mdi-tram::before{content:"\F52D"}.mdi-transcribe::before{content:"\F52E"}.mdi-transcribe-close::before{content:"\F52F"}.mdi-transfer-down::before{content:"\FD7D"}.mdi-transfer-left::before{content:"\FD7E"}.mdi-transfer-right::before{content:"\F530"}.mdi-transfer-up::before{content:"\FD7F"}.mdi-transit-connection::before{content:"\FD18"}.mdi-transit-connection-variant::before{content:"\FD19"}.mdi-transit-detour::before{content:"\FFA8"}.mdi-transit-transfer::before{content:"\F6AD"}.mdi-transition::before{content:"\F914"}.mdi-transition-masked::before{content:"\F915"}.mdi-translate::before{content:"\F5CA"}.mdi-translate-off::before{content:"\FE66"}.mdi-transmission-tower::before{content:"\FD1A"}.mdi-trash-can::before{content:"\FA78"}.mdi-trash-can-outline::before{content:"\FA79"}.mdi-treasure-chest::before{content:"\F725"}.mdi-tree::before{content:"\F531"}.mdi-tree-outline::before{content:"\FE4C"}.mdi-trello::before{content:"\F532"}.mdi-trending-down::before{content:"\F533"}.mdi-trending-neutral::before{content:"\F534"}.mdi-trending-up::before{content:"\F535"}.mdi-triangle::before{content:"\F536"}.mdi-triangle-outline::before{content:"\F537"}.mdi-triforce::before{content:"\FBB5"}.mdi-trophy::before{content:"\F538"}.mdi-trophy-award::before{content:"\F539"}.mdi-trophy-broken::before{content:"\FD80"}.mdi-trophy-outline::before{content:"\F53A"}.mdi-trophy-variant::before{content:"\F53B"}.mdi-trophy-variant-outline::before{content:"\F53C"}.mdi-truck::before{content:"\F53D"}.mdi-truck-check::before{content:"\FCB0"}.mdi-truck-delivery::before{content:"\F53E"}.mdi-truck-fast::before{content:"\F787"}.mdi-truck-trailer::before{content:"\F726"}.mdi-tshirt-crew::before{content:"\FA7A"}.mdi-tshirt-crew-outline::before{content:"\F53F"}.mdi-tshirt-v::before{content:"\FA7B"}.mdi-tshirt-v-outline::before{content:"\F540"}.mdi-tumble-dryer::before{content:"\F916"}.mdi-tumblr::before{content:"\F541"}.mdi-tumblr-box::before{content:"\F917"}.mdi-tumblr-reblog::before{content:"\F542"}.mdi-tune::before{content:"\F62E"}.mdi-tune-vertical::before{content:"\F66A"}.mdi-turnstile::before{content:"\FCB1"}.mdi-turnstile-outline::before{content:"\FCB2"}.mdi-turtle::before{content:"\FCB3"}.mdi-twitch::before{content:"\F543"}.mdi-twitter::before{content:"\F544"}.mdi-twitter-box::before{content:"\F545"}.mdi-twitter-circle::before{content:"\F546"}.mdi-twitter-retweet::before{content:"\F547"}.mdi-two-factor-authentication::before{content:"\F9AE"}.mdi-typewriter::before{content:"\FF4A"}.mdi-uber::before{content:"\F748"}.mdi-ubisoft::before{content:"\FBB6"}.mdi-ubuntu::before{content:"\F548"}.mdi-ultra-high-definition::before{content:"\F7F8"}.mdi-umbraco::before{content:"\F549"}.mdi-umbrella::before{content:"\F54A"}.mdi-umbrella-closed::before{content:"\F9AF"}.mdi-umbrella-outline::before{content:"\F54B"}.mdi-undo::before{content:"\F54C"}.mdi-undo-variant::before{content:"\F54D"}.mdi-unfold-less-horizontal::before{content:"\F54E"}.mdi-unfold-less-vertical::before{content:"\F75F"}.mdi-unfold-more-horizontal::before{content:"\F54F"}.mdi-unfold-more-vertical::before{content:"\F760"}.mdi-ungroup::before{content:"\F550"}.mdi-unicode::before{content:"\FEED"}.mdi-unity::before{content:"\F6AE"}.mdi-unreal::before{content:"\F9B0"}.mdi-untappd::before{content:"\F551"}.mdi-update::before{content:"\F6AF"}.mdi-upload::before{content:"\F552"}.mdi-upload-multiple::before{content:"\F83C"}.mdi-upload-network::before{content:"\F6F5"}.mdi-upload-network-outline::before{content:"\FCB4"}.mdi-upload-outline::before{content:"\FE67"}.mdi-usb::before{content:"\F553"}.mdi-van-passenger::before{content:"\F7F9"}.mdi-van-utility::before{content:"\F7FA"}.mdi-vanish::before{content:"\F7FB"}.mdi-variable::before{content:"\FAE6"}.mdi-vector-arrange-above::before{content:"\F554"}.mdi-vector-arrange-below::before{content:"\F555"}.mdi-vector-bezier::before{content:"\FAE7"}.mdi-vector-circle::before{content:"\F556"}.mdi-vector-circle-variant::before{content:"\F557"}.mdi-vector-combine::before{content:"\F558"}.mdi-vector-curve::before{content:"\F559"}.mdi-vector-difference::before{content:"\F55A"}.mdi-vector-difference-ab::before{content:"\F55B"}.mdi-vector-difference-ba::before{content:"\F55C"}.mdi-vector-ellipse::before{content:"\F892"}.mdi-vector-intersection::before{content:"\F55D"}.mdi-vector-line::before{content:"\F55E"}.mdi-vector-point::before{content:"\F55F"}.mdi-vector-polygon::before{content:"\F560"}.mdi-vector-polyline::before{content:"\F561"}.mdi-vector-radius::before{content:"\F749"}.mdi-vector-rectangle::before{content:"\F5C6"}.mdi-vector-selection::before{content:"\F562"}.mdi-vector-square::before{content:"\F001"}.mdi-vector-triangle::before{content:"\F563"}.mdi-vector-union::before{content:"\F564"}.mdi-venmo::before{content:"\F578"}.mdi-vhs::before{content:"\FA1A"}.mdi-vibrate::before{content:"\F566"}.mdi-vibrate-off::before{content:"\FCB5"}.mdi-video::before{content:"\F567"}.mdi-video-3d::before{content:"\F7FC"}.mdi-video-3d-variant::before{content:"\FEEE"}.mdi-video-4k-box::before{content:"\F83D"}.mdi-video-account::before{content:"\F918"}.mdi-video-image::before{content:"\F919"}.mdi-video-input-antenna::before{content:"\F83E"}.mdi-video-input-component::before{content:"\F83F"}.mdi-video-input-hdmi::before{content:"\F840"}.mdi-video-input-scart::before{content:"\FFA9"}.mdi-video-input-svideo::before{content:"\F841"}.mdi-video-minus::before{content:"\F9B1"}.mdi-video-off::before{content:"\F568"}.mdi-video-off-outline::before{content:"\FBB7"}.mdi-video-outline::before{content:"\FBB8"}.mdi-video-plus::before{content:"\F9B2"}.mdi-video-stabilization::before{content:"\F91A"}.mdi-video-switch::before{content:"\F569"}.mdi-video-vintage::before{content:"\FA1B"}.mdi-video-wireless::before{content:"\FEEF"}.mdi-video-wireless-outline::before{content:"\FEF0"}.mdi-view-agenda::before{content:"\F56A"}.mdi-view-array::before{content:"\F56B"}.mdi-view-carousel::before{content:"\F56C"}.mdi-view-column::before{content:"\F56D"}.mdi-view-comfy::before{content:"\FE4D"}.mdi-view-compact::before{content:"\FE4E"}.mdi-view-compact-outline::before{content:"\FE4F"}.mdi-view-dashboard::before{content:"\F56E"}.mdi-view-dashboard-outline::before{content:"\FA1C"}.mdi-view-dashboard-variant::before{content:"\F842"}.mdi-view-day::before{content:"\F56F"}.mdi-view-grid::before{content:"\F570"}.mdi-view-grid-plus::before{content:"\FFAA"}.mdi-view-headline::before{content:"\F571"}.mdi-view-list::before{content:"\F572"}.mdi-view-module::before{content:"\F573"}.mdi-view-parallel::before{content:"\F727"}.mdi-view-quilt::before{content:"\F574"}.mdi-view-sequential::before{content:"\F728"}.mdi-view-split-horizontal::before{content:"\FBA7"}.mdi-view-split-vertical::before{content:"\FBA8"}.mdi-view-stream::before{content:"\F575"}.mdi-view-week::before{content:"\F576"}.mdi-vimeo::before{content:"\F577"}.mdi-violin::before{content:"\F60F"}.mdi-virtual-reality::before{content:"\F893"}.mdi-visual-studio::before{content:"\F610"}.mdi-visual-studio-code::before{content:"\FA1D"}.mdi-vk::before{content:"\F579"}.mdi-vk-box::before{content:"\F57A"}.mdi-vk-circle::before{content:"\F57B"}.mdi-vlc::before{content:"\F57C"}.mdi-voice::before{content:"\F5CB"}.mdi-voice-off::before{content:"\FEF1"}.mdi-voicemail::before{content:"\F57D"}.mdi-volleyball::before{content:"\F9B3"}.mdi-volume-high::before{content:"\F57E"}.mdi-volume-low::before{content:"\F57F"}.mdi-volume-medium::before{content:"\F580"}.mdi-volume-minus::before{content:"\F75D"}.mdi-volume-mute::before{content:"\F75E"}.mdi-volume-off::before{content:"\F581"}.mdi-volume-plus::before{content:"\F75C"}.mdi-volume-variant-off::before{content:"\FE68"}.mdi-vote::before{content:"\FA1E"}.mdi-vote-outline::before{content:"\FA1F"}.mdi-vpn::before{content:"\F582"}.mdi-vuejs::before{content:"\F843"}.mdi-vuetify::before{content:"\FE50"}.mdi-walk::before{content:"\F583"}.mdi-wall::before{content:"\F7FD"}.mdi-wall-sconce::before{content:"\F91B"}.mdi-wall-sconce-flat::before{content:"\F91C"}.mdi-wall-sconce-variant::before{content:"\F91D"}.mdi-wallet::before{content:"\F584"}.mdi-wallet-giftcard::before{content:"\F585"}.mdi-wallet-membership::before{content:"\F586"}.mdi-wallet-outline::before{content:"\FBB9"}.mdi-wallet-plus::before{content:"\FFAB"}.mdi-wallet-plus-outline::before{content:"\FFAC"}.mdi-wallet-travel::before{content:"\F587"}.mdi-wallpaper::before{content:"\FE69"}.mdi-wan::before{content:"\F588"}.mdi-wardrobe::before{content:"\FFAD"}.mdi-wardrobe-outline::before{content:"\FFAE"}.mdi-warehouse::before{content:"\FFBB"}.mdi-washing-machine::before{content:"\F729"}.mdi-watch::before{content:"\F589"}.mdi-watch-export::before{content:"\F58A"}.mdi-watch-export-variant::before{content:"\F894"}.mdi-watch-import::before{content:"\F58B"}.mdi-watch-import-variant::before{content:"\F895"}.mdi-watch-variant::before{content:"\F896"}.mdi-watch-vibrate::before{content:"\F6B0"}.mdi-watch-vibrate-off::before{content:"\FCB6"}.mdi-water::before{content:"\F58C"}.mdi-water-boiler::before{content:"\FFAF"}.mdi-water-off::before{content:"\F58D"}.mdi-water-outline::before{content:"\FE6A"}.mdi-water-percent::before{content:"\F58E"}.mdi-water-pump::before{content:"\F58F"}.mdi-water-pump-off::before{content:"\FFB0"}.mdi-watermark::before{content:"\F612"}.mdi-wave::before{content:"\FF4B"}.mdi-waves::before{content:"\F78C"}.mdi-waze::before{content:"\FBBA"}.mdi-weather-cloudy::before{content:"\F590"}.mdi-weather-cloudy-alert::before{content:"\FF4C"}.mdi-weather-cloudy-arrow-right::before{content:"\FE51"}.mdi-weather-fog::before{content:"\F591"}.mdi-weather-hail::before{content:"\F592"}.mdi-weather-hazy::before{content:"\FF4D"}.mdi-weather-hurricane::before{content:"\F897"}.mdi-weather-lightning::before{content:"\F593"}.mdi-weather-lightning-rainy::before{content:"\F67D"}.mdi-weather-night::before{content:"\F594"}.mdi-weather-night-partly-cloudy::before{content:"\FF4E"}.mdi-weather-partly-cloudy::before{content:"\F595"}.mdi-weather-partly-lightning::before{content:"\FF4F"}.mdi-weather-partly-rainy::before{content:"\FF50"}.mdi-weather-partly-snowy::before{content:"\FF51"}.mdi-weather-partly-snowy-rainy::before{content:"\FF52"}.mdi-weather-pouring::before{content:"\F596"}.mdi-weather-rainy::before{content:"\F597"}.mdi-weather-snowy::before{content:"\F598"}.mdi-weather-snowy-heavy::before{content:"\FF53"}.mdi-weather-snowy-rainy::before{content:"\F67E"}.mdi-weather-sunny::before{content:"\F599"}.mdi-weather-sunny-alert::before{content:"\FF54"}.mdi-weather-sunset::before{content:"\F59A"}.mdi-weather-sunset-down::before{content:"\F59B"}.mdi-weather-sunset-up::before{content:"\F59C"}.mdi-weather-tornado::before{content:"\FF55"}.mdi-weather-windy::before{content:"\F59D"}.mdi-weather-windy-variant::before{content:"\F59E"}.mdi-web::before{content:"\F59F"}.mdi-web-box::before{content:"\FFB1"}.mdi-webcam::before{content:"\F5A0"}.mdi-webhook::before{content:"\F62F"}.mdi-webpack::before{content:"\F72A"}.mdi-wechat::before{content:"\F611"}.mdi-weight::before{content:"\F5A1"}.mdi-weight-gram::before{content:"\FD1B"}.mdi-weight-kilogram::before{content:"\F5A2"}.mdi-weight-pound::before{content:"\F9B4"}.mdi-whatsapp::before{content:"\F5A3"}.mdi-wheelchair-accessibility::before{content:"\F5A4"}.mdi-whistle::before{content:"\F9B5"}.mdi-white-balance-auto::before{content:"\F5A5"}.mdi-white-balance-incandescent::before{content:"\F5A6"}.mdi-white-balance-iridescent::before{content:"\F5A7"}.mdi-white-balance-sunny::before{content:"\F5A8"}.mdi-widgets::before{content:"\F72B"}.mdi-wifi::before{content:"\F5A9"}.mdi-wifi-off::before{content:"\F5AA"}.mdi-wifi-star::before{content:"\FE6B"}.mdi-wifi-strength-1::before{content:"\F91E"}.mdi-wifi-strength-1-alert::before{content:"\F91F"}.mdi-wifi-strength-1-lock::before{content:"\F920"}.mdi-wifi-strength-2::before{content:"\F921"}.mdi-wifi-strength-2-alert::before{content:"\F922"}.mdi-wifi-strength-2-lock::before{content:"\F923"}.mdi-wifi-strength-3::before{content:"\F924"}.mdi-wifi-strength-3-alert::before{content:"\F925"}.mdi-wifi-strength-3-lock::before{content:"\F926"}.mdi-wifi-strength-4::before{content:"\F927"}.mdi-wifi-strength-4-alert::before{content:"\F928"}.mdi-wifi-strength-4-lock::before{content:"\F929"}.mdi-wifi-strength-alert-outline::before{content:"\F92A"}.mdi-wifi-strength-lock-outline::before{content:"\F92B"}.mdi-wifi-strength-off::before{content:"\F92C"}.mdi-wifi-strength-off-outline::before{content:"\F92D"}.mdi-wifi-strength-outline::before{content:"\F92E"}.mdi-wii::before{content:"\F5AB"}.mdi-wiiu::before{content:"\F72C"}.mdi-wikipedia::before{content:"\F5AC"}.mdi-wind-turbine::before{content:"\FD81"}.mdi-window-close::before{content:"\F5AD"}.mdi-window-closed::before{content:"\F5AE"}.mdi-window-maximize::before{content:"\F5AF"}.mdi-window-minimize::before{content:"\F5B0"}.mdi-window-open::before{content:"\F5B1"}.mdi-window-restore::before{content:"\F5B2"}.mdi-windows::before{content:"\F5B3"}.mdi-windows-classic::before{content:"\FA20"}.mdi-wiper::before{content:"\FAE8"}.mdi-wiper-wash::before{content:"\FD82"}.mdi-wordpress::before{content:"\F5B4"}.mdi-worker::before{content:"\F5B5"}.mdi-wrap::before{content:"\F5B6"}.mdi-wrap-disabled::before{content:"\FBBB"}.mdi-wrench::before{content:"\F5B7"}.mdi-wrench-outline::before{content:"\FBBC"}.mdi-wunderlist::before{content:"\F5B8"}.mdi-xamarin::before{content:"\F844"}.mdi-xamarin-outline::before{content:"\F845"}.mdi-xaml::before{content:"\F673"}.mdi-xbox::before{content:"\F5B9"}.mdi-xbox-controller::before{content:"\F5BA"}.mdi-xbox-controller-battery-alert::before{content:"\F74A"}.mdi-xbox-controller-battery-charging::before{content:"\FA21"}.mdi-xbox-controller-battery-empty::before{content:"\F74B"}.mdi-xbox-controller-battery-full::before{content:"\F74C"}.mdi-xbox-controller-battery-low::before{content:"\F74D"}.mdi-xbox-controller-battery-medium::before{content:"\F74E"}.mdi-xbox-controller-battery-unknown::before{content:"\F74F"}.mdi-xbox-controller-menu::before{content:"\FE52"}.mdi-xbox-controller-off::before{content:"\F5BB"}.mdi-xbox-controller-view::before{content:"\FE53"}.mdi-xda::before{content:"\F5BC"}.mdi-xing::before{content:"\F5BD"}.mdi-xing-box::before{content:"\F5BE"}.mdi-xing-circle::before{content:"\F5BF"}.mdi-xml::before{content:"\F5C0"}.mdi-xmpp::before{content:"\F7FE"}.mdi-yahoo::before{content:"\FB2A"}.mdi-yammer::before{content:"\F788"}.mdi-yeast::before{content:"\F5C1"}.mdi-yelp::before{content:"\F5C2"}.mdi-yin-yang::before{content:"\F67F"}.mdi-youtube::before{content:"\F5C3"}.mdi-youtube-creator-studio::before{content:"\F846"}.mdi-youtube-gaming::before{content:"\F847"}.mdi-youtube-subscription::before{content:"\FD1C"}.mdi-youtube-tv::before{content:"\F448"}.mdi-z-wave::before{content:"\FAE9"}.mdi-zend::before{content:"\FAEA"}.mdi-zigbee::before{content:"\FD1D"}.mdi-zip-box::before{content:"\F5C4"}.mdi-zip-disk::before{content:"\FA22"}.mdi-zodiac-aquarius::before{content:"\FA7C"}.mdi-zodiac-aries::before{content:"\FA7D"}.mdi-zodiac-cancer::before{content:"\FA7E"}.mdi-zodiac-capricorn::before{content:"\FA7F"}.mdi-zodiac-gemini::before{content:"\FA80"}.mdi-zodiac-leo::before{content:"\FA81"}.mdi-zodiac-libra::before{content:"\FA82"}.mdi-zodiac-pisces::before{content:"\FA83"}.mdi-zodiac-sagittarius::before{content:"\FA84"}.mdi-zodiac-scorpio::before{content:"\FA85"}.mdi-zodiac-taurus::before{content:"\FA86"}.mdi-zodiac-virgo::before{content:"\FA87"}.mdi-blank::before{content:"\F68C";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,0.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,0.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:rgba(255,255,255,0.3)}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:"FlipV"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
 
 /*# sourceMappingURL=materialdesignicons.css.map */
diff --git a/notemyprogress/db/access.php b/notemyprogress/db/access.php
index 0ab537458d34a11dcb8a5f57816df40336b82d40..d052adf870063d1ca882b727a73818ee7f9820ee 100644
--- a/notemyprogress/db/access.php
+++ b/notemyprogress/db/access.php
@@ -72,6 +72,16 @@ $capabilities = array(
         )
     ),
 
+    'local/notemyprogress:teacher_planning' => array(
+        'captype'      => 'read',
+        'contextlevel' => CONTEXT_COURSE,
+        'archetypes'   => array(
+            'teacher'        => CAP_ALLOW,
+            'editingteacher' => CAP_ALLOW,
+            'manager'        => CAP_ALLOW,
+        )
+    ),
+
     'local/notemyprogress:assignments' => array(
         'captype'      => 'read',
         'contextlevel' => CONTEXT_COURSE,
@@ -147,6 +157,15 @@ $capabilities = array(
             'student'        => CAP_ALLOW,
         )
     ),
+
+    'local/notemyprogress:student_planning' => array(
+        'captype'      => 'read',
+        'contextlevel' => CONTEXT_COURSE,
+        'archetypes'   => array(
+            'student'        => CAP_ALLOW,
+        )
+    ),
+
     'local/notemyprogress:teacher_gamification' => array(
         'captype'      => 'read',
         'contextlevel' => CONTEXT_COURSE,
@@ -163,6 +182,8 @@ $capabilities = array(
             'student'        => CAP_ALLOW,
         )
     ),
+
+
     'local/notemyprogress:earnxp' => array(
         'captype' => 'read',
         'contextlevel' => CONTEXT_MODULE,
diff --git a/notemyprogress/db/install.php b/notemyprogress/db/install.php
index 84fd8876a68266ce049c7bf16ad191da451b5b3e..db2fce7688a7083b86b2e4a3e959484e1a08c8b8 100644
--- a/notemyprogress/db/install.php
+++ b/notemyprogress/db/install.php
@@ -28,6 +28,132 @@ defined('MOODLE_INTERNAL') || die();
 /**
  * Custom code to be run on installing the plugin.
  */
-function xmldb_local_notemyprogress_install() {
-    return true;
-}
+function xmldb_local_notemyprogress_install()
+{
+    global $DB;
+    //Create goals
+    $goal1 = new stdClass();
+    $goal2 = new stdClass();
+    $goal3 = new stdClass();
+    $goal1->description = "objectif 1";
+    $goal2->description = "objectif 2";
+    $goal3->description = "objectif 3";
+    $DB->insert_record("notemyprogress_goals_ct", $goal1, true);
+    $DB->insert_record("notemyprogress_goals_ct", $goal2, true);
+    $DB->insert_record("notemyprogress_goals_ct", $goal3, true);
+
+    //Create questions
+    $question1 = new stdClass();
+    $question2 = new stdClass();
+    $question3 = new stdClass();
+    $question4 = new stdClass();
+    $question1->description = "question1";
+    $question2->description = "question2";
+    $question3->description = "question3";
+    $question4->description = "question3";
+    $DB->insert_record("notemyprogress_questions_ct", $question1, true);
+    $DB->insert_record("notemyprogress_questions_ct", $question2, true);
+    $DB->insert_record("notemyprogress_questions_ct", $question3, true);
+    $DB->insert_record("notemyprogress_questions_ct", $question4, true);
+
+
+
+    //Question 1
+    $question = new stdClass();
+    $question->enunciated = 'question_number_one';
+    $questionid = $DB->insert_record("st_rpt_questions", $question, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_one_option_one';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_one_option_two';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    //Question 2
+
+    $question = new stdClass();
+    $question->enunciated = 'question_number_two';
+    $questionid = $DB->insert_record("st_rpt_questions", $question, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_two_option_one';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_two_option_two';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_two_option_three';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    //Question 3
+
+    $question = new stdClass();
+    $question->enunciated = 'question_number_three';
+    $questionid = $DB->insert_record("st_rpt_questions", $question, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_three_option_one';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_three_option_two';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_three_option_three';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_three_option_four';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_three_option_five';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_three_option_six';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    //Question 4
+
+    $question = new stdClass();
+    $question->enunciated = 'question_number_four';
+    $questionid = $DB->insert_record("st_rpt_questions", $question, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_four_option_one';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_four_option_two';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_four_option_three';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+    $answer = new stdClass();
+    $answer->questionid = $questionid;
+    $answer->enunciated = 'answers_number_four_option_four';
+    $DB->insert_record("st_rpt_answers", $answer, true);
+
+}
\ No newline at end of file
diff --git a/notemyprogress/db/install.xml b/notemyprogress/db/install.xml
index 98c5917c2801d6caf028c748ffe5e1beb11ad0c0..61b51441ca44979aba5fbd8a5477ee631f2183e9 100644
--- a/notemyprogress/db/install.xml
+++ b/notemyprogress/db/install.xml
@@ -1,93 +1,205 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <XMLDB PATH="local/notemyprogress/db" VERSION="2020111000" COMMENT="XMLDB file for Moodle local/notemyprogress"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
->
-    <TABLES>
-        <TABLE NAME="notemyprogress_instances" COMMENT="table notemyprogress_instances">
-            <FIELDS>
-                <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
-                <FIELD NAME="courseid" TYPE="int" LENGTH="20" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
-                <FIELD NAME="year" TYPE="int" LENGTH="20" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
-            </FIELDS>
-            <KEYS>
-                <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
-            </KEYS>
-        </TABLE>
-        <TABLE NAME="notemyprogress_weeks" COMMENT="table notemyprogress_weeks">
-            <FIELDS>
-                <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
-                <FIELD NAME="instanceid" TYPE="int" LENGTH="20" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="weekstart" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="weekend" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="position" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="modified_by" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="created_by" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="timedeleted" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
-                <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
-                <FIELD NAME="weekcode" TYPE="int" LENGTH="20" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="hours_dedications" TYPE="int" LENGTH="5" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="hours_dedications"/>
-            </FIELDS>
-            <KEYS>
-                <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
-            </KEYS>
-            <INDEXES>
-                <INDEX NAME="weekcode" UNIQUE="false" FIELDS="weekcode" HINTS="weekcode" COMMENT="weekcode index"/>
-                <INDEX NAME="instanceid" UNIQUE="false" FIELDS="instanceid" HINTS="instanceid" COMMENT="instanceid index"/>
-            </INDEXES>
-        </TABLE>
-        <TABLE NAME="notemyprogress_sections" COMMENT="table notemyprogress_sections">
-            <FIELDS>
-                <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
-                <FIELD NAME="weekcode" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="sectionid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="section_name" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="position" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="timedeleted" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
-                <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
-            </FIELDS>
-            <KEYS>
-                <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
-            </KEYS>
-        </TABLE>
-        <TABLE NAME="notemyprogress_logs" COMMENT="table notemyprogress_logs">
-            <FIELDS>
-                <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
-                <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="username" TYPE="text" NOTNULL="false" SEQUENCE="false"/>
-                <FIELD NAME="name" TYPE="char" LENGTH="1333" NOTNULL="false" SEQUENCE="false"/>
-                <FIELD NAME="lastname" TYPE="char" LENGTH="1333" NOTNULL="false" SEQUENCE="false"/>
-                <FIELD NAME="email" TYPE="char" LENGTH="1333" NOTNULL="false" SEQUENCE="false"/>
-                <FIELD NAME="current_roles" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="component" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="action" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-            </FIELDS>
-            <KEYS>
-                <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
-            </KEYS>
-        </TABLE>
-        <TABLE NAME="notemyprogress_clustering" COMMENT="table notemyprogress_clustering">
-            <FIELDS>
-                <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
-                <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="cluster" TYPE="int" LENGTH="2" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="active" TYPE="int" LENGTH="2" NOTNULL="true" SEQUENCE="false"/>
-                <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
-            </FIELDS>
-            <KEYS>
-                <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
-            </KEYS>
-            <INDEXES>
-                <INDEX NAME="courseid" UNIQUE="false" FIELDS="courseid" HINTS="courseid" COMMENT="courseid index"/>
-                <INDEX NAME="userid" UNIQUE="false" FIELDS="userid" HINTS="userid" COMMENT="userid index"/>
-            </INDEXES>
-        </TABLE>
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd">
+  <TABLES>
+    <TABLE NAME="notemyprogress_instances" COMMENT="table notemyprogress_instances">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="courseid" TYPE="int" LENGTH="20" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
+        <FIELD NAME="year" TYPE="int" LENGTH="20" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_weeks" COMMENT="table notemyprogress_weeks">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="instanceid" TYPE="int" LENGTH="20" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="weekstart" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="weekend" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="position" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="modified_by" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="created_by" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timedeleted" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
+        <FIELD NAME="weekcode" TYPE="int" LENGTH="20" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="hours_dedications" TYPE="int" LENGTH="5" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="hours_dedications"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+      <INDEXES>
+        <INDEX NAME="weekcode" UNIQUE="false" FIELDS="weekcode" HINTS="weekcode" COMMENT="weekcode index"/>
+        <INDEX NAME="instanceid" UNIQUE="false" FIELDS="instanceid" HINTS="instanceid" COMMENT="instanceid index"/>
+      </INDEXES>
+    </TABLE>
+    <TABLE NAME="st_rpt_weekly_schedules" COMMENT="table st_rpt_weekly_schedules">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="weekcode" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="hours" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="st_rpt_work_last_weeks" COMMENT="table st_rpt_work_last_weeks">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="weekcode" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="classroom_hours" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="hours_off_course" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="objectives_reached" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="previous_class_learning" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="benefit_going_class" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="feeling" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_goals" COMMENT="table notemyprogress_goals">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="id_goals_categories" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="id_weekly_schedules" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_goals_ct" COMMENT="table notemyprogress_goals_ct">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="description" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_questions" COMMENT="table notemyprogress_questions">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="id_questions_categories" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="weekcode" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="answer" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_questions_ct" COMMENT="table notemyprogress_questions_ct">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="description" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_days" COMMENT="table notemyprogress_days">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="id_weekly_schedules" TYPE="int" LENGTH="20" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="description" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+
+    <TABLE NAME="notemyprogress_days_modules" COMMENT="table notemyprogress_days_modules">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="id_course_modules" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="id_days" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+
+
+    <TABLE NAME="st_rpt_questions" COMMENT="table st_rpt_questions">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="enunciated" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="st_rpt_answers" COMMENT="table st_rpt_answers">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="questionid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="enunciated" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_sections" COMMENT="table notemyprogress_sections">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="weekcode" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="sectionid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="section_name" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="position" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timedeleted" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_logs" COMMENT="table notemyprogress_logs">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="username" TYPE="text" NOTNULL="false" SEQUENCE="false"/>
+        <FIELD NAME="name" TYPE="char" LENGTH="1333" NOTNULL="false" SEQUENCE="false"/>
+        <FIELD NAME="lastname" TYPE="char" LENGTH="1333" NOTNULL="false" SEQUENCE="false"/>
+        <FIELD NAME="email" TYPE="char" LENGTH="1333" NOTNULL="false" SEQUENCE="false"/>
+        <FIELD NAME="current_roles" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="component" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="action" TYPE="char" LENGTH="1333" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="notemyprogress_clustering" COMMENT="table notemyprogress_clustering">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
+        <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="cluster" TYPE="int" LENGTH="2" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="active" TYPE="int" LENGTH="2" NOTNULL="true" SEQUENCE="false"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id"/>
+      </KEYS>
+      <INDEXES>
+        <INDEX NAME="courseid" UNIQUE="false" FIELDS="courseid" HINTS="courseid" COMMENT="courseid index"/>
+        <INDEX NAME="userid" UNIQUE="false" FIELDS="userid" HINTS="userid" COMMENT="userid index"/>
+      </INDEXES>
+    </TABLE>
+
         <TABLE NAME="notemyprogress_levels_data" COMMENT="Default comment for the table, please edit me">
           <FIELDS>
             <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
diff --git a/notemyprogress/img/calendar.png b/notemyprogress/img/calendar.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c9eb49391736cc12991a94a5ade1e2184eefc62
Binary files /dev/null and b/notemyprogress/img/calendar.png differ
diff --git a/notemyprogress/img/empty_char.png b/notemyprogress/img/empty_char.png
new file mode 100644
index 0000000000000000000000000000000000000000..7893440e8dc636aa191ee4061db6e1ba193a1dff
Binary files /dev/null and b/notemyprogress/img/empty_char.png differ
diff --git a/notemyprogress/js/axios.js b/notemyprogress/js/axios.js
index 901b41f96ab2dee74cb0258549e7939eb52c8149..6ace1061432fa40193fcd995d6d15674276a5675 100644
--- a/notemyprogress/js/axios.js
+++ b/notemyprogress/js/axios.js
@@ -373,7 +373,7 @@
          *
          * ```js
          * var result = merge({foo: 123}, {foo: 456});
-         * console.log(result.foo); // outputs 456
+         * //console.log(result.foo); // outputs 456
          * ```
          *
          * @param {Object} obj1 Object to merge
diff --git a/notemyprogress/js/highcharts/highcharts-3d.js.map b/notemyprogress/js/highcharts/highcharts-3d.js.map
index e54f1c0b744c66b756c098fb97dbfb24bb82fac8..c11ccec9541371c9285ff3a34f0670c550244168 100644
--- a/notemyprogress/js/highcharts/highcharts-3d.js.map
+++ b/notemyprogress/js/highcharts/highcharts-3d.js.map
@@ -1 +1,701 @@
-{"version":3,"file":"highcharts-3d.js.map","lineCount":92,"mappings":"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","sources":["highcharts-3d.src.js"],"names":["factory","module","exports","define","amd","Highcharts","undefined","_registerModule","obj","path","args","fn","hasOwnProperty","apply","_modules","H","U","pick","deg2rad","perspective3D","H.perspective3D","coordinate","origin","distance","projection","Number","POSITIVE_INFINITY","z","x","y","perspective","H.perspective","points","chart","insidePlotArea","useInvertedPersp","options3d","options","inverted","plotWidth","plotHeight","depth","vd","viewDistance","scale","scale3d","beta","alpha","Math","cos","sin","plotLeft","plotTop","map","point","cosB","sinB","sinA","cosA","rotated","pointCameraDistance","H.pointCameraDistance","coordinates","sqrt","pow","plotX","plotY","plotZ","shapeArea","H.shapeArea","vertexes","area","i","length","j","shapeArea3D","shapeArea3d","H.shapeArea3d","mathModule","A","Color","Math3D","SVGElement","SVGRenderer","curveTo","cx","cy","rx","ry","start","end","dx","dy","result","arcAngle","PI","concat","dFactor","animObject","color","parse","defined","extend","merge","objectEach","charts","prototype","toLinePath","SVGRenderer.prototype.toLinePath","closed","forEach","push","toLineSegments","SVGRenderer.prototype.toLineSegments","m","face3d","SVGRenderer.prototype.face3d","renderer","ret","createElement","enabled","attr","ret.attr","hash","vertexes2d","chartIndex","visibility","d","arguments","animate","ret.animate","params","polyhedron","SVGRenderer.prototype.polyhedron","g","destroy","styledMode","faces","result.destroy","call","result.attr","val","complete","continueAnimation","pop","add","fill","result.animate","duration","element3dMethods","initArgs","elem3d","paths","pathType","zIndexes","parts","part","zIndex","group","originalDestroy","destroyParts","forcedSides","singleSetterForParts","prop","values","verb","newAttr","optionsToApply","hasZIndexes","partVal","processParts","props","partsProps","cuboidMethods","key","shapeArgs","fillSetter","front","top","brighten","indexOf","get","side","elements3d","base","cuboid","element3d","SVGRenderer.prototype.element3d","type","SVGRenderer.prototype.cuboid","cuboidPath","SVGRenderer.prototype.cuboidPath","mapSidePath","h","pArr","mapPath","height","w","width","pickShape","verticesIndex1","verticesIndex2","face1","face2","dummyFace1","dummyFace2","shape","back","path1","isFront","bottom","path2","isTop","right","left","path3","isRight","incrementX","incrementY","incrementZ","round","arc3d","SVGRenderer.prototype.arc3d","attribs","suckOutCustom","hasCA","ca","customAttribs","wrapper","side1","side2","inn","out","onAdd","wrapper.onAdd","parent","parentGroup","className","face","setPaths","wrapper.setPaths","arc3dPath","zTop","zInn","zOut","zSide1","zSide2","center","setRadialReference","wrapper.fillSetter","value","darker","setter","el","wrapper.attr","paramArr","wrapper.animate","animation","from","randomProp","random","toString","substring","anim","globalAnimation","noop","to","step","anim.step","a","fx","interpolate","pos","elem","r","innerR","wrapper.destroy","hide","wrapper.hide","show","wrapper.show","inherit","SVGRenderer.prototype.arc3dPath","toZeroPIRange","angle","ir","cs","ss","ce","se","irx","iry","b","start2","end2","midEnd","angleCorr","atan2","angleEnd","abs","angleStart","angleMid","a1","incPrecision","a2","a3","max","addEvent","wrap","Tick3D","compose","Tick3D.compose","TickClass","onAfterGetLabelPosition","wrapGetMarkPath","Tick3D.onAfterGetLabelPosition","e","axis3D","axis","fix3dPosition","Tick3D.wrapGetMarkPath","proceed","slice","Tick","Axis3DAdditions","Axis3DAdditions.prototype.fix3dPosition","isTitle","coll","chart3d","is3d","positionMode","title","position3d","labels","skew","skew3d","frame","frame3d","plotRight","plotBottom","reverseFlap","offsetX","offsetY","vecY","swapZ","isZAxis","opposite","axes","vecX","xDir","frontFacing","horiz","cosa","sinb","sina","cosb","projected","pointsProjected","matrix","Axis3DAdditions.prototype.swapZ","p","Axis3D","Axis3D.compose","AxisClass","defaultOptions","keepProps","onInit","onAfterSetOptions","onDrawCrosshair","onDestroy","axisProto","wrapGetLinePath","wrapGetPlotBandPath","wrapGetPlotLinePath","wrapGetSlotWidth","wrapGetTitlePosition","Axis3D.onAfterSetOptions","tickWidth","gridLineWidth","Axis3D.onDestroy","Axis3D.onDrawCrosshair","crosshairPos","isXAxis","axisXpos","len","axisYpos","Axis3D.onInit","Axis3D.wrapGetLinePath","Axis3D.wrapGetPlotBandPath","fromPath","getPlotLinePath","toPath","fromStartSeg","fromEndSeg","toStartSeg","toEndSeg","Axis3D.wrapGetPlotLinePath","startSegment","endSegment","pathSegments","visible","Axis3D.wrapGetSlotWidth","tick","ticks","gridGroup","categories","frameShapes","label","firstGridLine","element","childNodes","getBBox","frame3DLeft","prevLabelPos","nextLabelPos","tickId","prevTick","nextTick","xy","labelPos","slotWidth","Axis3D.wrapGetTitlePosition","Axis","__extends","extendStatics","Object","setPrototypeOf","__proto__","Array","__","constructor","create","splat","ZChart","ZChart.compose","ChartClass","onAfterGetAxes","chartProto","addZAxis","wrapAddZAxis","collectionsWithInit","zAxis","collectionsWithUpdate","ZChart.onAfterGetAxes","zAxisOptions","axisOptions","index","isX","setScale","ZChart.wrapAddZAxis","ZAxis","_super","userOptions","_this","getSeriesExtremes","ZAxis.prototype.getSeriesExtremes","hasVisibleSeries","dataMin","dataMax","ignoreMinPadding","ignoreMaxPadding","stacking","buildStacks","series","ignoreHiddenSeries","zData","min","setAxisSize","ZAxis.prototype.setAxisSize","chartWidth","setOptions","ZAxis.prototype.setOptions","offset","lineWidth","ZChartComposition","Chart","Fx","O","genericDefaultOptions","isArray","Chart3D","onAddSeries","onAfterDrawChartBox","get3dFrame","xm","xp","ym","yp","zp","xmm","size","xpp","ymm","ypp","zmm","zm","zpp","hasRendered","onAfterGetContainer","definition","tagName","textContent","name","slope","cfg","id","children","onAfterInit","s","defaultSeriesType","onAfterSetChartSize","clipBox","margin","chartHeight","fitToPlot","getScale","onBeforeRedraw","isDirtyBox","onBeforeRender","Composition","wrapIsInsidePlot","wrapRenderSeries","translate","render","wrapSetClassName","container","Composition.prototype.get3dFrame","frameOptions","faceOrientation","bottomOrientation","topOrientation","leftOrientation","rightOrientation","frontOrientation","backOrientation","defaultShowBottom","defaultShowTop","defaultShowLeft","defaultShowRight","xAxis","yAxis","getFaceOptions","sources","defaultVisible","faceAttrs","isVisible","defaultShowBack","defaultShowFront","axisLabelPosition","isValidEdge","yEdges","xBottomEdges","xTopEdges","zBottomEdges","zTopEdges","pickEdge","edges","mult","best","projections","Composition.prototype.getScale","originX","originY","MAX_VALUE","corners","corner","minX","maxX","minY","maxY","FxClass","fxProto","chartProto.is3d","propsRequireDirtyBox","propsRequireUpdateSeries","matrixSetter","fxProto.matrixSetter","interpolated","Series","translate3dPoints","H.Series.prototype.translate3dPoints","rawPoints","data","rawPoint","zValue","logarithmic","val2lin","isInside","axisZpos","projectedPoints","projectedPoint","BaseSeries","StackItem","retrieveStacks","stacks","stackNumber","stack","position","totalStacks","pointAttribs","stroke","edgeColor","edgeWidth","setState","state","inactiveOtherPoints","hasNewShapeType","_i","graphic","nodeName","columnProto","seriesTypes","column","svg","translate3dShapes","outside3dPlot","columnProto.translate3dPoints","columnProto.translate3dShapes","seriesOptions","groupZPadding","borderCrisp","borderWidth","point2dPos","reversed","grouping","tooltipPos","borderlessBase","dimensions","shapeType","clientX","plot3d","init","shapey","stackY","negative","drawDataLabels","columnGroup","getPlotBox","survive","vis","pointVis","handle3dGrouping","reversedStacks","pointClass","columnRange","columnRangeProto","columnrange","plotGroup","setVisible","dataLabel","alignTo","is","inside","xOffset","pointWidth","dLPosition","stackItem","xWidth","stackBox","baseSeriesInd","split","columnSeries","pie","slicedTranslation","translateX","slicedOffset","translateY","labelPosition","connectorPosition","yOffset","natural","breakAt","touchingSliceAt","update","markerGroup","oldtranslateX","oldtranslateY","scaleX","scaleY","attrSetters","Point","seriesType","tooltip","pointFormat","scatter","axisTypes","pointArrayMap","parallelArrays","directTouch","applyOptions"]}
\ No newline at end of file
+{
+  "version": 3,
+  "file": "highcharts-3d.js.map",
+  "lineCount": 92,
+  "mappings": "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",
+  "sources": [
+    "highcharts-3d.src.js"
+  ],
+  "names": [
+    "factory",
+    "module",
+    "exports",
+    "define",
+    "amd",
+    "Highcharts",
+    "undefined",
+    "_registerModule",
+    "obj",
+    "path",
+    "args",
+    "fn",
+    "hasOwnProperty",
+    "apply",
+    "_modules",
+    "H",
+    "U",
+    "pick",
+    "deg2rad",
+    "perspective3D",
+    "H.perspective3D",
+    "coordinate",
+    "origin",
+    "distance",
+    "projection",
+    "Number",
+    "POSITIVE_INFINITY",
+    "z",
+    "x",
+    "y",
+    "perspective",
+    "H.perspective",
+    "points",
+    "chart",
+    "insidePlotArea",
+    "useInvertedPersp",
+    "options3d",
+    "options",
+    "inverted",
+    "plotWidth",
+    "plotHeight",
+    "depth",
+    "vd",
+    "viewDistance",
+    "scale",
+    "scale3d",
+    "beta",
+    "alpha",
+    "Math",
+    "cos",
+    "sin",
+    "plotLeft",
+    "plotTop",
+    "map",
+    "point",
+    "cosB",
+    "sinB",
+    "sinA",
+    "cosA",
+    "rotated",
+    "pointCameraDistance",
+    "H.pointCameraDistance",
+    "coordinates",
+    "sqrt",
+    "pow",
+    "plotX",
+    "plotY",
+    "plotZ",
+    "shapeArea",
+    "H.shapeArea",
+    "vertexes",
+    "area",
+    "i",
+    "length",
+    "j",
+    "shapeArea3D",
+    "shapeArea3d",
+    "H.shapeArea3d",
+    "mathModule",
+    "A",
+    "Color",
+    "Math3D",
+    "SVGElement",
+    "SVGRenderer",
+    "curveTo",
+    "cx",
+    "cy",
+    "rx",
+    "ry",
+    "start",
+    "end",
+    "dx",
+    "dy",
+    "result",
+    "arcAngle",
+    "PI",
+    "concat",
+    "dFactor",
+    "animObject",
+    "color",
+    "parse",
+    "defined",
+    "extend",
+    "merge",
+    "objectEach",
+    "charts",
+    "prototype",
+    "toLinePath",
+    "SVGRenderer.prototype.toLinePath",
+    "closed",
+    "forEach",
+    "push",
+    "toLineSegments",
+    "SVGRenderer.prototype.toLineSegments",
+    "m",
+    "face3d",
+    "SVGRenderer.prototype.face3d",
+    "renderer",
+    "ret",
+    "createElement",
+    "enabled",
+    "attr",
+    "ret.attr",
+    "hash",
+    "vertexes2d",
+    "chartIndex",
+    "visibility",
+    "d",
+    "arguments",
+    "animate",
+    "ret.animate",
+    "params",
+    "polyhedron",
+    "SVGRenderer.prototype.polyhedron",
+    "g",
+    "destroy",
+    "styledMode",
+    "faces",
+    "result.destroy",
+    "call",
+    "result.attr",
+    "val",
+    "complete",
+    "continueAnimation",
+    "pop",
+    "add",
+    "fill",
+    "result.animate",
+    "duration",
+    "element3dMethods",
+    "initArgs",
+    "elem3d",
+    "paths",
+    "pathType",
+    "zIndexes",
+    "parts",
+    "part",
+    "zIndex",
+    "group",
+    "originalDestroy",
+    "destroyParts",
+    "forcedSides",
+    "singleSetterForParts",
+    "prop",
+    "values",
+    "verb",
+    "newAttr",
+    "optionsToApply",
+    "hasZIndexes",
+    "partVal",
+    "processParts",
+    "props",
+    "partsProps",
+    "cuboidMethods",
+    "key",
+    "shapeArgs",
+    "fillSetter",
+    "front",
+    "top",
+    "brighten",
+    "indexOf",
+    "get",
+    "side",
+    "elements3d",
+    "base",
+    "cuboid",
+    "element3d",
+    "SVGRenderer.prototype.element3d",
+    "type",
+    "SVGRenderer.prototype.cuboid",
+    "cuboidPath",
+    "SVGRenderer.prototype.cuboidPath",
+    "mapSidePath",
+    "h",
+    "pArr",
+    "mapPath",
+    "height",
+    "w",
+    "width",
+    "pickShape",
+    "verticesIndex1",
+    "verticesIndex2",
+    "face1",
+    "face2",
+    "dummyFace1",
+    "dummyFace2",
+    "shape",
+    "back",
+    "path1",
+    "isFront",
+    "bottom",
+    "path2",
+    "isTop",
+    "right",
+    "left",
+    "path3",
+    "isRight",
+    "incrementX",
+    "incrementY",
+    "incrementZ",
+    "round",
+    "arc3d",
+    "SVGRenderer.prototype.arc3d",
+    "attribs",
+    "suckOutCustom",
+    "hasCA",
+    "ca",
+    "customAttribs",
+    "wrapper",
+    "side1",
+    "side2",
+    "inn",
+    "out",
+    "onAdd",
+    "wrapper.onAdd",
+    "parent",
+    "parentGroup",
+    "className",
+    "face",
+    "setPaths",
+    "wrapper.setPaths",
+    "arc3dPath",
+    "zTop",
+    "zInn",
+    "zOut",
+    "zSide1",
+    "zSide2",
+    "center",
+    "setRadialReference",
+    "wrapper.fillSetter",
+    "value",
+    "darker",
+    "setter",
+    "el",
+    "wrapper.attr",
+    "paramArr",
+    "wrapper.animate",
+    "animation",
+    "from",
+    "randomProp",
+    "random",
+    "toString",
+    "substring",
+    "anim",
+    "globalAnimation",
+    "noop",
+    "to",
+    "step",
+    "anim.step",
+    "a",
+    "fx",
+    "interpolate",
+    "pos",
+    "elem",
+    "r",
+    "innerR",
+    "wrapper.destroy",
+    "hide",
+    "wrapper.hide",
+    "show",
+    "wrapper.show",
+    "inherit",
+    "SVGRenderer.prototype.arc3dPath",
+    "toZeroPIRange",
+    "angle",
+    "ir",
+    "cs",
+    "ss",
+    "ce",
+    "se",
+    "irx",
+    "iry",
+    "b",
+    "start2",
+    "end2",
+    "midEnd",
+    "angleCorr",
+    "atan2",
+    "angleEnd",
+    "abs",
+    "angleStart",
+    "angleMid",
+    "a1",
+    "incPrecision",
+    "a2",
+    "a3",
+    "max",
+    "addEvent",
+    "wrap",
+    "Tick3D",
+    "compose",
+    "Tick3D.compose",
+    "TickClass",
+    "onAfterGetLabelPosition",
+    "wrapGetMarkPath",
+    "Tick3D.onAfterGetLabelPosition",
+    "e",
+    "axis3D",
+    "axis",
+    "fix3dPosition",
+    "Tick3D.wrapGetMarkPath",
+    "proceed",
+    "slice",
+    "Tick",
+    "Axis3DAdditions",
+    "Axis3DAdditions.prototype.fix3dPosition",
+    "isTitle",
+    "coll",
+    "chart3d",
+    "is3d",
+    "positionMode",
+    "title",
+    "position3d",
+    "labels",
+    "skew",
+    "skew3d",
+    "frame",
+    "frame3d",
+    "plotRight",
+    "plotBottom",
+    "reverseFlap",
+    "offsetX",
+    "offsetY",
+    "vecY",
+    "swapZ",
+    "isZAxis",
+    "opposite",
+    "axes",
+    "vecX",
+    "xDir",
+    "frontFacing",
+    "horiz",
+    "cosa",
+    "sinb",
+    "sina",
+    "cosb",
+    "projected",
+    "pointsProjected",
+    "matrix",
+    "Axis3DAdditions.prototype.swapZ",
+    "p",
+    "Axis3D",
+    "Axis3D.compose",
+    "AxisClass",
+    "defaultOptions",
+    "keepProps",
+    "onInit",
+    "onAfterSetOptions",
+    "onDrawCrosshair",
+    "onDestroy",
+    "axisProto",
+    "wrapGetLinePath",
+    "wrapGetPlotBandPath",
+    "wrapGetPlotLinePath",
+    "wrapGetSlotWidth",
+    "wrapGetTitlePosition",
+    "Axis3D.onAfterSetOptions",
+    "tickWidth",
+    "gridLineWidth",
+    "Axis3D.onDestroy",
+    "Axis3D.onDrawCrosshair",
+    "crosshairPos",
+    "isXAxis",
+    "axisXpos",
+    "len",
+    "axisYpos",
+    "Axis3D.onInit",
+    "Axis3D.wrapGetLinePath",
+    "Axis3D.wrapGetPlotBandPath",
+    "fromPath",
+    "getPlotLinePath",
+    "toPath",
+    "fromStartSeg",
+    "fromEndSeg",
+    "toStartSeg",
+    "toEndSeg",
+    "Axis3D.wrapGetPlotLinePath",
+    "startSegment",
+    "endSegment",
+    "pathSegments",
+    "visible",
+    "Axis3D.wrapGetSlotWidth",
+    "tick",
+    "ticks",
+    "gridGroup",
+    "categories",
+    "frameShapes",
+    "label",
+    "firstGridLine",
+    "element",
+    "childNodes",
+    "getBBox",
+    "frame3DLeft",
+    "prevLabelPos",
+    "nextLabelPos",
+    "tickId",
+    "prevTick",
+    "nextTick",
+    "xy",
+    "labelPos",
+    "slotWidth",
+    "Axis3D.wrapGetTitlePosition",
+    "Axis",
+    "__extends",
+    "extendStatics",
+    "Object",
+    "setPrototypeOf",
+    "__proto__",
+    "Array",
+    "__",
+    "constructor",
+    "create",
+    "splat",
+    "ZChart",
+    "ZChart.compose",
+    "ChartClass",
+    "onAfterGetAxes",
+    "chartProto",
+    "addZAxis",
+    "wrapAddZAxis",
+    "collectionsWithInit",
+    "zAxis",
+    "collectionsWithUpdate",
+    "ZChart.onAfterGetAxes",
+    "zAxisOptions",
+    "axisOptions",
+    "index",
+    "isX",
+    "setScale",
+    "ZChart.wrapAddZAxis",
+    "ZAxis",
+    "_super",
+    "userOptions",
+    "_this",
+    "getSeriesExtremes",
+    "ZAxis.prototype.getSeriesExtremes",
+    "hasVisibleSeries",
+    "dataMin",
+    "dataMax",
+    "ignoreMinPadding",
+    "ignoreMaxPadding",
+    "stacking",
+    "buildStacks",
+    "series",
+    "ignoreHiddenSeries",
+    "zData",
+    "min",
+    "setAxisSize",
+    "ZAxis.prototype.setAxisSize",
+    "chartWidth",
+    "setOptions",
+    "ZAxis.prototype.setOptions",
+    "offset",
+    "lineWidth",
+    "ZChartComposition",
+    "Chart",
+    "Fx",
+    "O",
+    "genericDefaultOptions",
+    "isArray",
+    "Chart3D",
+    "onAddSeries",
+    "onAfterDrawChartBox",
+    "get3dFrame",
+    "xm",
+    "xp",
+    "ym",
+    "yp",
+    "zp",
+    "xmm",
+    "size",
+    "xpp",
+    "ymm",
+    "ypp",
+    "zmm",
+    "zm",
+    "zpp",
+    "hasRendered",
+    "onAfterGetContainer",
+    "definition",
+    "tagName",
+    "textContent",
+    "name",
+    "slope",
+    "cfg",
+    "id",
+    "children",
+    "onAfterInit",
+    "s",
+    "defaultSeriesType",
+    "onAfterSetChartSize",
+    "clipBox",
+    "margin",
+    "chartHeight",
+    "fitToPlot",
+    "getScale",
+    "onBeforeRedraw",
+    "isDirtyBox",
+    "onBeforeRender",
+    "Composition",
+    "wrapIsInsidePlot",
+    "wrapRenderSeries",
+    "translate",
+    "render",
+    "wrapSetClassName",
+    "container",
+    "Composition.prototype.get3dFrame",
+    "frameOptions",
+    "faceOrientation",
+    "bottomOrientation",
+    "topOrientation",
+    "leftOrientation",
+    "rightOrientation",
+    "frontOrientation",
+    "backOrientation",
+    "defaultShowBottom",
+    "defaultShowTop",
+    "defaultShowLeft",
+    "defaultShowRight",
+    "xAxis",
+    "yAxis",
+    "getFaceOptions",
+    "sources",
+    "defaultVisible",
+    "faceAttrs",
+    "isVisible",
+    "defaultShowBack",
+    "defaultShowFront",
+    "axisLabelPosition",
+    "isValidEdge",
+    "yEdges",
+    "xBottomEdges",
+    "xTopEdges",
+    "zBottomEdges",
+    "zTopEdges",
+    "pickEdge",
+    "edges",
+    "mult",
+    "best",
+    "projections",
+    "Composition.prototype.getScale",
+    "originX",
+    "originY",
+    "MAX_VALUE",
+    "corners",
+    "corner",
+    "minX",
+    "maxX",
+    "minY",
+    "maxY",
+    "FxClass",
+    "fxProto",
+    "chartProto.is3d",
+    "propsRequireDirtyBox",
+    "propsRequireUpdateSeries",
+    "matrixSetter",
+    "fxProto.matrixSetter",
+    "interpolated",
+    "Series",
+    "translate3dPoints",
+    "H.Series.prototype.translate3dPoints",
+    "rawPoints",
+    "data",
+    "rawPoint",
+    "zValue",
+    "logarithmic",
+    "val2lin",
+    "isInside",
+    "axisZpos",
+    "projectedPoints",
+    "projectedPoint",
+    "BaseSeries",
+    "StackItem",
+    "retrieveStacks",
+    "stacks",
+    "stackNumber",
+    "stack",
+    "position",
+    "totalStacks",
+    "pointAttribs",
+    "stroke",
+    "edgeColor",
+    "edgeWidth",
+    "setState",
+    "state",
+    "inactiveOtherPoints",
+    "hasNewShapeType",
+    "_i",
+    "graphic",
+    "nodeName",
+    "columnProto",
+    "seriesTypes",
+    "column",
+    "svg",
+    "translate3dShapes",
+    "outside3dPlot",
+    "columnProto.translate3dPoints",
+    "columnProto.translate3dShapes",
+    "seriesOptions",
+    "groupZPadding",
+    "borderCrisp",
+    "borderWidth",
+    "point2dPos",
+    "reversed",
+    "grouping",
+    "tooltipPos",
+    "borderlessBase",
+    "dimensions",
+    "shapeType",
+    "clientX",
+    "plot3d",
+    "init",
+    "shapey",
+    "stackY",
+    "negative",
+    "drawDataLabels",
+    "columnGroup",
+    "getPlotBox",
+    "survive",
+    "vis",
+    "pointVis",
+    "handle3dGrouping",
+    "reversedStacks",
+    "pointClass",
+    "columnRange",
+    "columnRangeProto",
+    "columnrange",
+    "plotGroup",
+    "setVisible",
+    "dataLabel",
+    "alignTo",
+    "is",
+    "inside",
+    "xOffset",
+    "pointWidth",
+    "dLPosition",
+    "stackItem",
+    "xWidth",
+    "stackBox",
+    "baseSeriesInd",
+    "split",
+    "columnSeries",
+    "pie",
+    "slicedTranslation",
+    "translateX",
+    "slicedOffset",
+    "translateY",
+    "labelPosition",
+    "connectorPosition",
+    "yOffset",
+    "natural",
+    "breakAt",
+    "touchingSliceAt",
+    "update",
+    "markerGroup",
+    "oldtranslateX",
+    "oldtranslateY",
+    "scaleX",
+    "scaleY",
+    "attrSetters",
+    "Point",
+    "seriesType",
+    "tooltip",
+    "pointFormat",
+    "scatter",
+    "axisTypes",
+    "pointArrayMap",
+    "parallelArrays",
+    "directTouch",
+    "applyOptions"
+  ]
+}
diff --git a/notemyprogress/js/highcharts/highcharts-more.js.map b/notemyprogress/js/highcharts/highcharts-more.js.map
index 2b7dcb9bdefc3e636a22cfc8c11c522f97a23c76..a22bcf105cc758ddf83f9ae5d664bb86e9ea1b89 100644
--- a/notemyprogress/js/highcharts/highcharts-more.js.map
+++ b/notemyprogress/js/highcharts/highcharts-more.js.map
@@ -1 +1,1230 @@
-{"version":3,"file":"highcharts-more.js.map","lineCount":170,"mappings":"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","sources":["highcharts-more.src.js"],"names":["factory","module","exports","define","amd","Highcharts","undefined","_registerModule","obj","path","args","fn","hasOwnProperty","apply","_modules","Chart","H","Pointer","U","centeredSeriesMixin","isInsidePane","x","y","center","Math","sqrt","pow","addEvent","extend","merge","pick","splat","prototype","collectionsWithUpdate","push","Pane","options","chart","background","coll","defaultOptions","size","innerSize","startAngle","defaultBackgroundOptions","shape","borderWidth","borderColor","backgroundColor","linearGradient","x1","y1","x2","y2","stops","from","Number","MAX_VALUE","innerRadius","to","outerRadius","init","Pane.prototype.init","pane","setOptions","Pane.prototype.setOptions","angular","render","Pane.prototype.render","backgroundOption","renderer","group","g","attr","zIndex","add","updateCenter","len","max","length","i","axis","renderBackground","destroy","splice","Pane.prototype.renderBackground","backgroundOptions","method","attribs","className","styledMode","getPlotBandPath","Pane.prototype.updateCenter","getCenter","call","update","Pane.prototype.update","redraw","axes","forEach","getHoverPane","Chart.prototype.getHoverPane","eventArgs","hoverPane","plotX","chartX","plotLeft","plotY","chartY","plotTop","inverted","e","polar","isInsidePlot","some","filter","eventArgs.filter","s","visible","shared","directTouch","enableMouseTracking","xAxis","hoverPoint","HiddenAxis","HiddenAxis.init","getOffset","axis.getOffset","axis.redraw","isDirty","axis.render","createLabelCollector","axis.createLabelCollector","setScale","axis.setScale","setCategories","axis.setCategories","setTitle","axis.setTitle","isHidden","Axis","Tick","correctFloat","defined","fireEvent","relativeLength","wrap","RadialAxis","RadialAxis.init","axisProto","axis.setOptions","userOptions","constructor","defaultPolarOptions","plotBands","axisOffset","side","getLinePath","axis.getLinePath","_lineWidth","radius","r","offset","horiz","isCircular","symbols","arc","left","top","start","startAngleRad","end","endAngleRad","open","innerR","xBounds","yBounds","postTranslate","angleRad","setAxisTranslation","axis.setAxisTranslation","transA","min","minPixelPadding","isXAxis","minPointOffset","beforeSetTickPositions","axis.beforeSetTickPositions","autoConnect","userMax","PI","categories","pointRange","closestPointRange","setAxisSize","axis.setAxisSize","isRadial","sector","width","height","getPosition","axis.getPosition","value","translatedVal","translate","axis.postTranslate","angle","cos","sin","axis.getPlotBandPath","radiusToPixels","parseInt","percentRegex","test","fullRadius","thickness","gridLineInterpolation","getPlotLinePath","concat","reverse","transFrom","transTo","xOnPerimeter","plotWidth","getCrosshairPosition","axis.getCrosshairPosition","point","shapeArgs","rectPlotY","atan2","axis.getPlotLinePath","paneInnerR","otherAxis","isCrosshair","crossPos","distance","a","b","innerRatio","tickPositions","slice","xy","getTitlePosition","axis.getTitlePosition","titleOptions","title","high","middle","low","align","labels","allowOverlap","map","pos","ticks","label","compose","RadialAxis.compose","AxisClass","TickClass","isX","chartOptions","paneIndex","defaultRadialGaugeOptions","defaultCircularOptions","defaultYAxisOptions","defaultRadialOptions","stackLabels","zoomType","labelCollector","labelCollectors","paneOptions","endAngle","preventDefault","index","indexOf","tick","labelBBox","getBBox","labelOptions","optionsY","centerSlot","correctAngle","round","labelDir","reducedAngle1","reducedAngle2","translateY","translateX","labelYPosCorrection","ret","rotation","fontMetrics","styles","fontSize","tickInterval","proceed","tickLength","tickWidth","endPoint","gridLineWidth","style","textOverflow","maxPadding","minPadding","showLastLabel","minorGridLineWidth","minorTickInterval","minorTickLength","minorTickPosition","minorTickWidth","tickPosition","text","BaseSeries","Point","isArray","isNumber","areaProto","seriesTypes","area","columnProto","column","pointProto","seriesProto","Series","seriesType","lineWidth","threshold","tooltip","pointFormat","trackByArea","dataLabels","verticalAlign","xLow","xHigh","yLow","yHigh","pointArrayMap","pointValKey","deferTranslatePolar","toYData","highToXY","rectPlotX","yAxis","plotHigh","plotHighX","plotLowX","series","hasModifyValue","modifyValue","points","isNull","plotLow","yBottom","tooltipPos","getGraphPath","highPoints","highAreaPoints","connectEnds","connectNulls","step","highAreaPoint","doCurve","pointShim","polarPlotY","lowerPath","right","higherPath","higherAreaPath","linePath","graphPath","areaPath","isArea","xMap","drawDataLabels","data","originalDataLabels","dataLabelOptions","upperDataLabelOptions","enabled","lowerDataLabelOptions","_hasPointLabels","up","inside","_plotY","dataLabel","dataLabelUpper","below","arguments","alignDataLabel","drawPoints","pointLength","origProps","isInside","negative","zone","lowerGraphic","graphic","upperGraphic","zones","getZone","isTopInside","setStackedPoints","noop","setState","prevState","state","isPolar","toPixels","stateMarkerGraphic","lowerStateMarkerGraphic","upperStateMarkerGraphic","haloPath","destroyElements","graphics","graphicName","isValid","getPointSpline","spline","O","clamp","plotOptions","arearange","columnRangeOptions","marker","states","hover","halo","safeDistance","chartWidth","chartHeight","minPointLength","pixelPos","abs","heightDifference","barX","shapeType","polarArc","pointWidth","trackerGroups","drawGraph","getSymbol","crispCol","drawTracker","getColumnMetrics","pointAttribs","animate","translate3dPoints","translate3dShapes","pointClass","ColumnSeries","colProto","dense","translatedThreshold","getThreshold","metrics","seriesBarW","barW","pointXOffset","pointPadding","ceil","barY","barH","stackHeight","stackTotal","total","stacking","topPointY","topXwidth","plotHeight","bottomXwidth","x3","x4","invBarPos","d","pInt","TrackerMixin","borderRadius","crop","defer","dial","pivot","headerFormat","showInLegend","fixedBox","forceDL","noSharedTooltip","generatePoints","dialOptions","baseLength","rearLength","baseWidth","topWidth","overshoot","pivotOptions","addClass","stroke","fill","circle","animation","plotGroup","seriesGroup","clip","clipRect","setData","processData","hasData","drawTrackerPoint","whiskerLength","fillColor","medianWidth","whiskerWidth","q1","median","q3","key","highPlot","q1Plot","q3Plot","lowPlot","medianPlot","crispCorr","crispX","halfWidth","doQuartiles","pointWiskerLength","verb","boxAttr","stemAttr","whiskersAttr","medianAttr","color","floor","stem","whiskers","box","boxPath","medianShape","medianPath","stemColor","stemWidth","dashstyle","stemDashStyle","dashStyle","whiskerColor","whiskerDashStyle","lineColor","boxDashStyle","medianColor","medianDashStyle","strokeWidth","parseFloat","grouping","linkedTo","type","valKey","linkedParent","columnMetrics","StackItem","arrayMax","arrayMin","objectEach","WaterfallAxis","onAfterBuildStacks","stacks","waterfall","changed","alreadyChanged","onAfterRender","stackLabelOptions","renderStackTotals","onBeforeRedraw","onInit","Composition","Composition.prototype.renderStackTotals","waterfallStacks","stackTotalGroup","dummyStackItem","stackItem","ChartClass","lineWidthPlus","showLine","processedYData","isIntermediateSum","isSum","previousIntermediate","halfMinPointLength","actualStack","stackKey","previousY","yValue","range","pointY","actualStackX","stackState","stateIndex","Object","absolutePos","absoluteNeg","posTotal","negTotal","connectorThreshold","reversed","yPos","hPos","setOffset","stackedYNeg","stackedYPos","minPointLengthOffset","tooltipY","force","yData","dataLength","subSum","sum","dataMin","dataMax","pt","updateParallelArrays","upColor","getCrispPath","graphNormalizer","graph","borderNormalizer","reversedXAxis","reversedYAxis","pointArgs","prevPoint","prevArgs","prevStack","isPos","prevStackX","calculateStackState","firstS","nextS","sInx","sOff","statesLen","seriesThreshold","stackThreshold","interSum","xData","xLength","actualSum","prevSum","usePercentage","totalYVal","ignoreHiddenSeries","yVal","xPoint","getExtremes","stackX","getClassName","LegendSymbolMixin","stickyTracking","followPointer","drawLegendSymbol","drawRectangle","Color","Legend","parse","stableSort","legend","bubbleLegend","connectorClassName","connectorColor","connectorDistance","connectorWidth","format","formatter","maxSize","minSize","legendIndex","ranges","sizeBy","sizeByAbsoluteValue","zThreshold","BubbleLegend","movementX","maxLabel","legendSymbol","legendItemWidth","legendItemHeight","legendItem","legendGroup","BubbleLegend.prototype.init","addToLegend","BubbleLegend.prototype.addToLegend","items","BubbleLegend.prototype.drawLegendSymbol","itemDistance","toString","getMaxLabelSize","connectorSpace","h","autoRanges","BubbleLegend.prototype.setOptions","seriesIndex","baseline","bubbleStyle","connectorStyle","labelStyle","getLabelStyles","fillOpacity","setOpacity","get","getRangeRadius","BubbleLegend.prototype.getLabelStyles","additionalLabelsStyle","labelsOnLeft","rtl","BubbleLegend.prototype.getRangeRadius","bubbleSeries","getRadius","BubbleLegend.prototype.render","connectors","bubbleItems","renderRange","hideOverlappingLabels","BubbleLegend.prototype.renderRange","labelsOptions","elementCenter","absoluteRadius","labelsAlign","connectorLength","posX","mainRange","posY","labelMovement","labelY","labelX","crispLine","formatLabel","placed","alignAttr","BubbleLegend.prototype.getMaxLabelSize","labelSize","BubbleLegend.prototype.formatLabel","numberFormatter","BubbleLegend.prototype.hideOverlappingLabels","newOpacity","oldOpacity","show","hide","getRanges","BubbleLegend.prototype.getRanges","rangesOptions","zData","minZ","maxZ","isBubble","ignoreSeries","zMin","displayNegative","zMax","predictBubbleSizes","BubbleLegend.prototype.predictBubbleSizes","legendOptions","horizontal","layout","lastLineHeight","plotSizeX","plotSizeY","minPxSize","maxPxSize","plotSize","floating","calculatedSize","updateRanges","BubbleLegend.prototype.updateRanges","bubbleLegendOptions","correctSizes","BubbleLegend.prototype.correctSizes","bubbleSeriesIndex","getVisibleBubbleSeriesIndex","destroyItem","allItems","Chart.prototype.getVisibleBubbleSeriesIndex","getLinesHeights","Legend.prototype.getLinesHeights","lines","j","itemHeight","_legendItemPos","lastLine","retranslateItems","Legend.prototype.retranslateItems","orgTranslateX","orgTranslateY","actualLine","item","status","callback","bubbleSizes","getMargins","updateNames","isNew","isNewLabel","z","animationLimit","radiusPlus","symbol","softThreshold","turboThreshold","zoneAxis","parallelArrays","specialGroup","bubblePadding","getRadii","radii","sizeByArea","zRange","hasRendered","markerAttribs","processedXData","scatter","dlBox","buildKDTree","applyZones","ttBelow","beforePadding","Axis.prototype.beforePadding","axisLength","pxMin","pxMax","dataKey","extremes","smallestSize","activeSeries","seriesOptions","allowZoomOutside","prop","isPercent","logarithmic","keys","dragNodesMixin","onMouseDown","event","normalizedEvent","pointer","normalize","fixedPosition","inDragMode","onMouseMove","diffX","diffY","graphLayoutsLookup","newPlotX","newPlotY","hasDragged","redrawHalo","restartSimulation","onMouseUp","enableSimulation","fixedDraggable","mousedownUnbinder","mousemoveUnbinder","mouseupUnbinder","container","hasDraggableNodes","draggable","ownerDocument","networkgraphIntegrations","verlet","attractiveForceFunction","k","repulsiveForceFunction","barycenter","gravitationalConstant","xFactor","yFactor","nodes","node","mass","degree","repulsive","distanceXY","factor","diffTemperature","attractive","link","massFactor","getMass","translatedX","translatedY","fromNode","toNode","integrate","friction","maxSpeed","dispX","prevX","dispY","prevY","signX","signY","temperature","vectorLength","getK","euler","getDegree","phi","distanceR","QuadTreeNode","H.QuadTreeNode","boxSize","body","isInternal","isEmpty","insert","depth","getBoxPosition","divideBox","newQuadTreeNode","updateMassAndCenter","pointMass","halfHeight","QuadTree","H.QuadTree","maxDepth","root","isRoot","insertNodes","visitNodeRecursive","beforeCallback","afterCallback","goFurther","qtNode","calculateMassAndCenter","A","setAnimation","isFunction","layouts","reingold-fruchterman","links","setInitialRendering","integration","attractiveForce","repulsiveForce","approximation","updateSimulation","enable","currentStep","forces","initialRendering","initPositions","finishedAnimating","setK","resetSimulation","createQuadTree","quadTree","forceName","applyLimits","coolDown","startTemperature","prevSystemTemperature","systemTemperature","getSystemTemperature","maxIterations","isFinite","isStable","simulation","win","cancelAnimationFrame","requestAnimationFrame","stop","setArea","w","linkLength","addElementsToCollection","elements","collection","elem","removeElementFromCollection","element","clear","forcedStop","setMaxIterations","setTemperature","setDiffTemperature","initialPositions","setCircularPositions","setRandomPositions","addToNodes","linksFrom","visitedNodes","id","sortedNodes","rootNodes","linksTo","initialPositionRadius","rootNode","unrandom","n","rand","nodesLength","name","Array","barycenterForces","getBarycenter","systemMass","cx","cy","barnesHutApproximation","quadNode","getDistXY","theta","goDeeper","repulsiveForces","repNode","attractiveForces","applyLimitBox","temperatureStep","reduce","vector","getDistR","nodeA","nodeB","xDist","yDist","absX","absY","layoutStep","beforeStep","systemsStable","afterRender","extendClass","Reingold","getSelectedParentNodes","Chart.prototype.getSelectedParentNodes","selectedParentsNodes","parentNode","selected","packedbubble","centerX","centerY","splitSeries","isParentNode","calculateParentRadius","neighbours","seriesInteraction","parentNodeLimit","parentNodeRadius","crisp","useSimulation","allowPointSelect","parentNodeFormatter","parentNodeTextPath","padding","transition","layoutAlgorithm","dragBetweenSeries","parentNodeOptions","isCartesian","requireSorting","axisTypes","searchPoint","accumulateAllPoints","allDataPoints","is","setVisible","parentNodeLayout","textPath","formatPrefix","seriesBox","bBox","p","parentNodeMass","parentPadding","minParentRadius","nodeMarker","parentOptions","brighten","opacity","visibility","parentNodesGroup","parentAttribs","createParentNodes","nodeAdded","PackedBubblePoint","dataLabelOnNull","div","addSeriesLayout","layoutOptions","graphLayoutsStorage","addLayout","forExport","collisionNmb","deferLayout","getPointRadius","positions","placeBubbles","checkOverlap","bubble1","bubble2","positionBubble","lastBubble","newOrigin","nextBubble","asin","acos","alfa","beta","finalAngle","gamma","delta","sinA","cosA","bubblePos","stage","arr","sortedArr","sort","calculatedBubble","stages","rawPositions","resizeRadius","minY","maxY","minX","POSITIVE_INFINITY","maxX","NEGATIVE_INFINITY","smallerDimension","spaceRatio","calculateZExtremes","valMin","Infinity","valMax","minRadius","maxRadius","zExtremes","removed","addPoint","remove","firePointEvent","eventType","defaultFunction","temp","select","accumulate","getSelectedPoints","SVGRenderer","animObject","find","uniqueKey","pointerProto","searchPointByAngle","seriesProto.searchPointByAngle","searchKDTree","clientX","getConnectors","seriesProto.getConnectors","segment","calculateNeighbours","addedNumber","prevPointInd","nextPointInd","previousPoint","nextPoint","previousX","nextX","nextY","leftContX","smoothing","denom","leftContY","rightContX","rightContY","dLControlPoint","dRControlPoint","leftContAngle","jointAngle","rightContAngle","prevPointCont","toXY","seriesProto.toXY","isRadialBar","polarPlotX","kdByAngle","areasplinerange","findNearestPointBy","preventPostTranslate","hasParallelCoordinates","hasClipCircleSetter","eventsToUnbind","circ","clipCircle","setClip","order","firstValid","popLastPoint","pop","polarAnimate","markerGroup","pie","isSVG","scaleX","scaleY","arearangeProto","colProto.polarArc","visibleRange","yMin","yMax","thresholdAngleRad","pointX","stack","stackValues","getStackIndicator","findAlignments","colProto.findAlignments","alignTo","labelPos","SVGRenderer.prototype.clipCircle","clipPath","createElement","defs","wrapper","isRadialSeries"]}
\ No newline at end of file
+{
+  "version": 3,
+  "file": "highcharts-more.js.map",
+  "lineCount": 170,
+  "mappings": "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",
+  "sources": [
+    "highcharts-more.src.js"
+  ],
+  "names": [
+    "factory",
+    "module",
+    "exports",
+    "define",
+    "amd",
+    "Highcharts",
+    "undefined",
+    "_registerModule",
+    "obj",
+    "path",
+    "args",
+    "fn",
+    "hasOwnProperty",
+    "apply",
+    "_modules",
+    "Chart",
+    "H",
+    "Pointer",
+    "U",
+    "centeredSeriesMixin",
+    "isInsidePane",
+    "x",
+    "y",
+    "center",
+    "Math",
+    "sqrt",
+    "pow",
+    "addEvent",
+    "extend",
+    "merge",
+    "pick",
+    "splat",
+    "prototype",
+    "collectionsWithUpdate",
+    "push",
+    "Pane",
+    "options",
+    "chart",
+    "background",
+    "coll",
+    "defaultOptions",
+    "size",
+    "innerSize",
+    "startAngle",
+    "defaultBackgroundOptions",
+    "shape",
+    "borderWidth",
+    "borderColor",
+    "backgroundColor",
+    "linearGradient",
+    "x1",
+    "y1",
+    "x2",
+    "y2",
+    "stops",
+    "from",
+    "Number",
+    "MAX_VALUE",
+    "innerRadius",
+    "to",
+    "outerRadius",
+    "init",
+    "Pane.prototype.init",
+    "pane",
+    "setOptions",
+    "Pane.prototype.setOptions",
+    "angular",
+    "render",
+    "Pane.prototype.render",
+    "backgroundOption",
+    "renderer",
+    "group",
+    "g",
+    "attr",
+    "zIndex",
+    "add",
+    "updateCenter",
+    "len",
+    "max",
+    "length",
+    "i",
+    "axis",
+    "renderBackground",
+    "destroy",
+    "splice",
+    "Pane.prototype.renderBackground",
+    "backgroundOptions",
+    "method",
+    "attribs",
+    "className",
+    "styledMode",
+    "getPlotBandPath",
+    "Pane.prototype.updateCenter",
+    "getCenter",
+    "call",
+    "update",
+    "Pane.prototype.update",
+    "redraw",
+    "axes",
+    "forEach",
+    "getHoverPane",
+    "Chart.prototype.getHoverPane",
+    "eventArgs",
+    "hoverPane",
+    "plotX",
+    "chartX",
+    "plotLeft",
+    "plotY",
+    "chartY",
+    "plotTop",
+    "inverted",
+    "e",
+    "polar",
+    "isInsidePlot",
+    "some",
+    "filter",
+    "eventArgs.filter",
+    "s",
+    "visible",
+    "shared",
+    "directTouch",
+    "enableMouseTracking",
+    "xAxis",
+    "hoverPoint",
+    "HiddenAxis",
+    "HiddenAxis.init",
+    "getOffset",
+    "axis.getOffset",
+    "axis.redraw",
+    "isDirty",
+    "axis.render",
+    "createLabelCollector",
+    "axis.createLabelCollector",
+    "setScale",
+    "axis.setScale",
+    "setCategories",
+    "axis.setCategories",
+    "setTitle",
+    "axis.setTitle",
+    "isHidden",
+    "Axis",
+    "Tick",
+    "correctFloat",
+    "defined",
+    "fireEvent",
+    "relativeLength",
+    "wrap",
+    "RadialAxis",
+    "RadialAxis.init",
+    "axisProto",
+    "axis.setOptions",
+    "userOptions",
+    "constructor",
+    "defaultPolarOptions",
+    "plotBands",
+    "axisOffset",
+    "side",
+    "getLinePath",
+    "axis.getLinePath",
+    "_lineWidth",
+    "radius",
+    "r",
+    "offset",
+    "horiz",
+    "isCircular",
+    "symbols",
+    "arc",
+    "left",
+    "top",
+    "start",
+    "startAngleRad",
+    "end",
+    "endAngleRad",
+    "open",
+    "innerR",
+    "xBounds",
+    "yBounds",
+    "postTranslate",
+    "angleRad",
+    "setAxisTranslation",
+    "axis.setAxisTranslation",
+    "transA",
+    "min",
+    "minPixelPadding",
+    "isXAxis",
+    "minPointOffset",
+    "beforeSetTickPositions",
+    "axis.beforeSetTickPositions",
+    "autoConnect",
+    "userMax",
+    "PI",
+    "categories",
+    "pointRange",
+    "closestPointRange",
+    "setAxisSize",
+    "axis.setAxisSize",
+    "isRadial",
+    "sector",
+    "width",
+    "height",
+    "getPosition",
+    "axis.getPosition",
+    "value",
+    "translatedVal",
+    "translate",
+    "axis.postTranslate",
+    "angle",
+    "cos",
+    "sin",
+    "axis.getPlotBandPath",
+    "radiusToPixels",
+    "parseInt",
+    "percentRegex",
+    "test",
+    "fullRadius",
+    "thickness",
+    "gridLineInterpolation",
+    "getPlotLinePath",
+    "concat",
+    "reverse",
+    "transFrom",
+    "transTo",
+    "xOnPerimeter",
+    "plotWidth",
+    "getCrosshairPosition",
+    "axis.getCrosshairPosition",
+    "point",
+    "shapeArgs",
+    "rectPlotY",
+    "atan2",
+    "axis.getPlotLinePath",
+    "paneInnerR",
+    "otherAxis",
+    "isCrosshair",
+    "crossPos",
+    "distance",
+    "a",
+    "b",
+    "innerRatio",
+    "tickPositions",
+    "slice",
+    "xy",
+    "getTitlePosition",
+    "axis.getTitlePosition",
+    "titleOptions",
+    "title",
+    "high",
+    "middle",
+    "low",
+    "align",
+    "labels",
+    "allowOverlap",
+    "map",
+    "pos",
+    "ticks",
+    "label",
+    "compose",
+    "RadialAxis.compose",
+    "AxisClass",
+    "TickClass",
+    "isX",
+    "chartOptions",
+    "paneIndex",
+    "defaultRadialGaugeOptions",
+    "defaultCircularOptions",
+    "defaultYAxisOptions",
+    "defaultRadialOptions",
+    "stackLabels",
+    "zoomType",
+    "labelCollector",
+    "labelCollectors",
+    "paneOptions",
+    "endAngle",
+    "preventDefault",
+    "index",
+    "indexOf",
+    "tick",
+    "labelBBox",
+    "getBBox",
+    "labelOptions",
+    "optionsY",
+    "centerSlot",
+    "correctAngle",
+    "round",
+    "labelDir",
+    "reducedAngle1",
+    "reducedAngle2",
+    "translateY",
+    "translateX",
+    "labelYPosCorrection",
+    "ret",
+    "rotation",
+    "fontMetrics",
+    "styles",
+    "fontSize",
+    "tickInterval",
+    "proceed",
+    "tickLength",
+    "tickWidth",
+    "endPoint",
+    "gridLineWidth",
+    "style",
+    "textOverflow",
+    "maxPadding",
+    "minPadding",
+    "showLastLabel",
+    "minorGridLineWidth",
+    "minorTickInterval",
+    "minorTickLength",
+    "minorTickPosition",
+    "minorTickWidth",
+    "tickPosition",
+    "text",
+    "BaseSeries",
+    "Point",
+    "isArray",
+    "isNumber",
+    "areaProto",
+    "seriesTypes",
+    "area",
+    "columnProto",
+    "column",
+    "pointProto",
+    "seriesProto",
+    "Series",
+    "seriesType",
+    "lineWidth",
+    "threshold",
+    "tooltip",
+    "pointFormat",
+    "trackByArea",
+    "dataLabels",
+    "verticalAlign",
+    "xLow",
+    "xHigh",
+    "yLow",
+    "yHigh",
+    "pointArrayMap",
+    "pointValKey",
+    "deferTranslatePolar",
+    "toYData",
+    "highToXY",
+    "rectPlotX",
+    "yAxis",
+    "plotHigh",
+    "plotHighX",
+    "plotLowX",
+    "series",
+    "hasModifyValue",
+    "modifyValue",
+    "points",
+    "isNull",
+    "plotLow",
+    "yBottom",
+    "tooltipPos",
+    "getGraphPath",
+    "highPoints",
+    "highAreaPoints",
+    "connectEnds",
+    "connectNulls",
+    "step",
+    "highAreaPoint",
+    "doCurve",
+    "pointShim",
+    "polarPlotY",
+    "lowerPath",
+    "right",
+    "higherPath",
+    "higherAreaPath",
+    "linePath",
+    "graphPath",
+    "areaPath",
+    "isArea",
+    "xMap",
+    "drawDataLabels",
+    "data",
+    "originalDataLabels",
+    "dataLabelOptions",
+    "upperDataLabelOptions",
+    "enabled",
+    "lowerDataLabelOptions",
+    "_hasPointLabels",
+    "up",
+    "inside",
+    "_plotY",
+    "dataLabel",
+    "dataLabelUpper",
+    "below",
+    "arguments",
+    "alignDataLabel",
+    "drawPoints",
+    "pointLength",
+    "origProps",
+    "isInside",
+    "negative",
+    "zone",
+    "lowerGraphic",
+    "graphic",
+    "upperGraphic",
+    "zones",
+    "getZone",
+    "isTopInside",
+    "setStackedPoints",
+    "noop",
+    "setState",
+    "prevState",
+    "state",
+    "isPolar",
+    "toPixels",
+    "stateMarkerGraphic",
+    "lowerStateMarkerGraphic",
+    "upperStateMarkerGraphic",
+    "haloPath",
+    "destroyElements",
+    "graphics",
+    "graphicName",
+    "isValid",
+    "getPointSpline",
+    "spline",
+    "O",
+    "clamp",
+    "plotOptions",
+    "arearange",
+    "columnRangeOptions",
+    "marker",
+    "states",
+    "hover",
+    "halo",
+    "safeDistance",
+    "chartWidth",
+    "chartHeight",
+    "minPointLength",
+    "pixelPos",
+    "abs",
+    "heightDifference",
+    "barX",
+    "shapeType",
+    "polarArc",
+    "pointWidth",
+    "trackerGroups",
+    "drawGraph",
+    "getSymbol",
+    "crispCol",
+    "drawTracker",
+    "getColumnMetrics",
+    "pointAttribs",
+    "animate",
+    "translate3dPoints",
+    "translate3dShapes",
+    "pointClass",
+    "ColumnSeries",
+    "colProto",
+    "dense",
+    "translatedThreshold",
+    "getThreshold",
+    "metrics",
+    "seriesBarW",
+    "barW",
+    "pointXOffset",
+    "pointPadding",
+    "ceil",
+    "barY",
+    "barH",
+    "stackHeight",
+    "stackTotal",
+    "total",
+    "stacking",
+    "topPointY",
+    "topXwidth",
+    "plotHeight",
+    "bottomXwidth",
+    "x3",
+    "x4",
+    "invBarPos",
+    "d",
+    "pInt",
+    "TrackerMixin",
+    "borderRadius",
+    "crop",
+    "defer",
+    "dial",
+    "pivot",
+    "headerFormat",
+    "showInLegend",
+    "fixedBox",
+    "forceDL",
+    "noSharedTooltip",
+    "generatePoints",
+    "dialOptions",
+    "baseLength",
+    "rearLength",
+    "baseWidth",
+    "topWidth",
+    "overshoot",
+    "pivotOptions",
+    "addClass",
+    "stroke",
+    "fill",
+    "circle",
+    "animation",
+    "plotGroup",
+    "seriesGroup",
+    "clip",
+    "clipRect",
+    "setData",
+    "processData",
+    "hasData",
+    "drawTrackerPoint",
+    "whiskerLength",
+    "fillColor",
+    "medianWidth",
+    "whiskerWidth",
+    "q1",
+    "median",
+    "q3",
+    "key",
+    "highPlot",
+    "q1Plot",
+    "q3Plot",
+    "lowPlot",
+    "medianPlot",
+    "crispCorr",
+    "crispX",
+    "halfWidth",
+    "doQuartiles",
+    "pointWiskerLength",
+    "verb",
+    "boxAttr",
+    "stemAttr",
+    "whiskersAttr",
+    "medianAttr",
+    "color",
+    "floor",
+    "stem",
+    "whiskers",
+    "box",
+    "boxPath",
+    "medianShape",
+    "medianPath",
+    "stemColor",
+    "stemWidth",
+    "dashstyle",
+    "stemDashStyle",
+    "dashStyle",
+    "whiskerColor",
+    "whiskerDashStyle",
+    "lineColor",
+    "boxDashStyle",
+    "medianColor",
+    "medianDashStyle",
+    "strokeWidth",
+    "parseFloat",
+    "grouping",
+    "linkedTo",
+    "type",
+    "valKey",
+    "linkedParent",
+    "columnMetrics",
+    "StackItem",
+    "arrayMax",
+    "arrayMin",
+    "objectEach",
+    "WaterfallAxis",
+    "onAfterBuildStacks",
+    "stacks",
+    "waterfall",
+    "changed",
+    "alreadyChanged",
+    "onAfterRender",
+    "stackLabelOptions",
+    "renderStackTotals",
+    "onBeforeRedraw",
+    "onInit",
+    "Composition",
+    "Composition.prototype.renderStackTotals",
+    "waterfallStacks",
+    "stackTotalGroup",
+    "dummyStackItem",
+    "stackItem",
+    "ChartClass",
+    "lineWidthPlus",
+    "showLine",
+    "processedYData",
+    "isIntermediateSum",
+    "isSum",
+    "previousIntermediate",
+    "halfMinPointLength",
+    "actualStack",
+    "stackKey",
+    "previousY",
+    "yValue",
+    "range",
+    "pointY",
+    "actualStackX",
+    "stackState",
+    "stateIndex",
+    "Object",
+    "absolutePos",
+    "absoluteNeg",
+    "posTotal",
+    "negTotal",
+    "connectorThreshold",
+    "reversed",
+    "yPos",
+    "hPos",
+    "setOffset",
+    "stackedYNeg",
+    "stackedYPos",
+    "minPointLengthOffset",
+    "tooltipY",
+    "force",
+    "yData",
+    "dataLength",
+    "subSum",
+    "sum",
+    "dataMin",
+    "dataMax",
+    "pt",
+    "updateParallelArrays",
+    "upColor",
+    "getCrispPath",
+    "graphNormalizer",
+    "graph",
+    "borderNormalizer",
+    "reversedXAxis",
+    "reversedYAxis",
+    "pointArgs",
+    "prevPoint",
+    "prevArgs",
+    "prevStack",
+    "isPos",
+    "prevStackX",
+    "calculateStackState",
+    "firstS",
+    "nextS",
+    "sInx",
+    "sOff",
+    "statesLen",
+    "seriesThreshold",
+    "stackThreshold",
+    "interSum",
+    "xData",
+    "xLength",
+    "actualSum",
+    "prevSum",
+    "usePercentage",
+    "totalYVal",
+    "ignoreHiddenSeries",
+    "yVal",
+    "xPoint",
+    "getExtremes",
+    "stackX",
+    "getClassName",
+    "LegendSymbolMixin",
+    "stickyTracking",
+    "followPointer",
+    "drawLegendSymbol",
+    "drawRectangle",
+    "Color",
+    "Legend",
+    "parse",
+    "stableSort",
+    "legend",
+    "bubbleLegend",
+    "connectorClassName",
+    "connectorColor",
+    "connectorDistance",
+    "connectorWidth",
+    "format",
+    "formatter",
+    "maxSize",
+    "minSize",
+    "legendIndex",
+    "ranges",
+    "sizeBy",
+    "sizeByAbsoluteValue",
+    "zThreshold",
+    "BubbleLegend",
+    "movementX",
+    "maxLabel",
+    "legendSymbol",
+    "legendItemWidth",
+    "legendItemHeight",
+    "legendItem",
+    "legendGroup",
+    "BubbleLegend.prototype.init",
+    "addToLegend",
+    "BubbleLegend.prototype.addToLegend",
+    "items",
+    "BubbleLegend.prototype.drawLegendSymbol",
+    "itemDistance",
+    "toString",
+    "getMaxLabelSize",
+    "connectorSpace",
+    "h",
+    "autoRanges",
+    "BubbleLegend.prototype.setOptions",
+    "seriesIndex",
+    "baseline",
+    "bubbleStyle",
+    "connectorStyle",
+    "labelStyle",
+    "getLabelStyles",
+    "fillOpacity",
+    "setOpacity",
+    "get",
+    "getRangeRadius",
+    "BubbleLegend.prototype.getLabelStyles",
+    "additionalLabelsStyle",
+    "labelsOnLeft",
+    "rtl",
+    "BubbleLegend.prototype.getRangeRadius",
+    "bubbleSeries",
+    "getRadius",
+    "BubbleLegend.prototype.render",
+    "connectors",
+    "bubbleItems",
+    "renderRange",
+    "hideOverlappingLabels",
+    "BubbleLegend.prototype.renderRange",
+    "labelsOptions",
+    "elementCenter",
+    "absoluteRadius",
+    "labelsAlign",
+    "connectorLength",
+    "posX",
+    "mainRange",
+    "posY",
+    "labelMovement",
+    "labelY",
+    "labelX",
+    "crispLine",
+    "formatLabel",
+    "placed",
+    "alignAttr",
+    "BubbleLegend.prototype.getMaxLabelSize",
+    "labelSize",
+    "BubbleLegend.prototype.formatLabel",
+    "numberFormatter",
+    "BubbleLegend.prototype.hideOverlappingLabels",
+    "newOpacity",
+    "oldOpacity",
+    "show",
+    "hide",
+    "getRanges",
+    "BubbleLegend.prototype.getRanges",
+    "rangesOptions",
+    "zData",
+    "minZ",
+    "maxZ",
+    "isBubble",
+    "ignoreSeries",
+    "zMin",
+    "displayNegative",
+    "zMax",
+    "predictBubbleSizes",
+    "BubbleLegend.prototype.predictBubbleSizes",
+    "legendOptions",
+    "horizontal",
+    "layout",
+    "lastLineHeight",
+    "plotSizeX",
+    "plotSizeY",
+    "minPxSize",
+    "maxPxSize",
+    "plotSize",
+    "floating",
+    "calculatedSize",
+    "updateRanges",
+    "BubbleLegend.prototype.updateRanges",
+    "bubbleLegendOptions",
+    "correctSizes",
+    "BubbleLegend.prototype.correctSizes",
+    "bubbleSeriesIndex",
+    "getVisibleBubbleSeriesIndex",
+    "destroyItem",
+    "allItems",
+    "Chart.prototype.getVisibleBubbleSeriesIndex",
+    "getLinesHeights",
+    "Legend.prototype.getLinesHeights",
+    "lines",
+    "j",
+    "itemHeight",
+    "_legendItemPos",
+    "lastLine",
+    "retranslateItems",
+    "Legend.prototype.retranslateItems",
+    "orgTranslateX",
+    "orgTranslateY",
+    "actualLine",
+    "item",
+    "status",
+    "callback",
+    "bubbleSizes",
+    "getMargins",
+    "updateNames",
+    "isNew",
+    "isNewLabel",
+    "z",
+    "animationLimit",
+    "radiusPlus",
+    "symbol",
+    "softThreshold",
+    "turboThreshold",
+    "zoneAxis",
+    "parallelArrays",
+    "specialGroup",
+    "bubblePadding",
+    "getRadii",
+    "radii",
+    "sizeByArea",
+    "zRange",
+    "hasRendered",
+    "markerAttribs",
+    "processedXData",
+    "scatter",
+    "dlBox",
+    "buildKDTree",
+    "applyZones",
+    "ttBelow",
+    "beforePadding",
+    "Axis.prototype.beforePadding",
+    "axisLength",
+    "pxMin",
+    "pxMax",
+    "dataKey",
+    "extremes",
+    "smallestSize",
+    "activeSeries",
+    "seriesOptions",
+    "allowZoomOutside",
+    "prop",
+    "isPercent",
+    "logarithmic",
+    "keys",
+    "dragNodesMixin",
+    "onMouseDown",
+    "event",
+    "normalizedEvent",
+    "pointer",
+    "normalize",
+    "fixedPosition",
+    "inDragMode",
+    "onMouseMove",
+    "diffX",
+    "diffY",
+    "graphLayoutsLookup",
+    "newPlotX",
+    "newPlotY",
+    "hasDragged",
+    "redrawHalo",
+    "restartSimulation",
+    "onMouseUp",
+    "enableSimulation",
+    "fixedDraggable",
+    "mousedownUnbinder",
+    "mousemoveUnbinder",
+    "mouseupUnbinder",
+    "container",
+    "hasDraggableNodes",
+    "draggable",
+    "ownerDocument",
+    "networkgraphIntegrations",
+    "verlet",
+    "attractiveForceFunction",
+    "k",
+    "repulsiveForceFunction",
+    "barycenter",
+    "gravitationalConstant",
+    "xFactor",
+    "yFactor",
+    "nodes",
+    "node",
+    "mass",
+    "degree",
+    "repulsive",
+    "distanceXY",
+    "factor",
+    "diffTemperature",
+    "attractive",
+    "link",
+    "massFactor",
+    "getMass",
+    "translatedX",
+    "translatedY",
+    "fromNode",
+    "toNode",
+    "integrate",
+    "friction",
+    "maxSpeed",
+    "dispX",
+    "prevX",
+    "dispY",
+    "prevY",
+    "signX",
+    "signY",
+    "temperature",
+    "vectorLength",
+    "getK",
+    "euler",
+    "getDegree",
+    "phi",
+    "distanceR",
+    "QuadTreeNode",
+    "H.QuadTreeNode",
+    "boxSize",
+    "body",
+    "isInternal",
+    "isEmpty",
+    "insert",
+    "depth",
+    "getBoxPosition",
+    "divideBox",
+    "newQuadTreeNode",
+    "updateMassAndCenter",
+    "pointMass",
+    "halfHeight",
+    "QuadTree",
+    "H.QuadTree",
+    "maxDepth",
+    "root",
+    "isRoot",
+    "insertNodes",
+    "visitNodeRecursive",
+    "beforeCallback",
+    "afterCallback",
+    "goFurther",
+    "qtNode",
+    "calculateMassAndCenter",
+    "A",
+    "setAnimation",
+    "isFunction",
+    "layouts",
+    "reingold-fruchterman",
+    "links",
+    "setInitialRendering",
+    "integration",
+    "attractiveForce",
+    "repulsiveForce",
+    "approximation",
+    "updateSimulation",
+    "enable",
+    "currentStep",
+    "forces",
+    "initialRendering",
+    "initPositions",
+    "finishedAnimating",
+    "setK",
+    "resetSimulation",
+    "createQuadTree",
+    "quadTree",
+    "forceName",
+    "applyLimits",
+    "coolDown",
+    "startTemperature",
+    "prevSystemTemperature",
+    "systemTemperature",
+    "getSystemTemperature",
+    "maxIterations",
+    "isFinite",
+    "isStable",
+    "simulation",
+    "win",
+    "cancelAnimationFrame",
+    "requestAnimationFrame",
+    "stop",
+    "setArea",
+    "w",
+    "linkLength",
+    "addElementsToCollection",
+    "elements",
+    "collection",
+    "elem",
+    "removeElementFromCollection",
+    "element",
+    "clear",
+    "forcedStop",
+    "setMaxIterations",
+    "setTemperature",
+    "setDiffTemperature",
+    "initialPositions",
+    "setCircularPositions",
+    "setRandomPositions",
+    "addToNodes",
+    "linksFrom",
+    "visitedNodes",
+    "id",
+    "sortedNodes",
+    "rootNodes",
+    "linksTo",
+    "initialPositionRadius",
+    "rootNode",
+    "unrandom",
+    "n",
+    "rand",
+    "nodesLength",
+    "name",
+    "Array",
+    "barycenterForces",
+    "getBarycenter",
+    "systemMass",
+    "cx",
+    "cy",
+    "barnesHutApproximation",
+    "quadNode",
+    "getDistXY",
+    "theta",
+    "goDeeper",
+    "repulsiveForces",
+    "repNode",
+    "attractiveForces",
+    "applyLimitBox",
+    "temperatureStep",
+    "reduce",
+    "vector",
+    "getDistR",
+    "nodeA",
+    "nodeB",
+    "xDist",
+    "yDist",
+    "absX",
+    "absY",
+    "layoutStep",
+    "beforeStep",
+    "systemsStable",
+    "afterRender",
+    "extendClass",
+    "Reingold",
+    "getSelectedParentNodes",
+    "Chart.prototype.getSelectedParentNodes",
+    "selectedParentsNodes",
+    "parentNode",
+    "selected",
+    "packedbubble",
+    "centerX",
+    "centerY",
+    "splitSeries",
+    "isParentNode",
+    "calculateParentRadius",
+    "neighbours",
+    "seriesInteraction",
+    "parentNodeLimit",
+    "parentNodeRadius",
+    "crisp",
+    "useSimulation",
+    "allowPointSelect",
+    "parentNodeFormatter",
+    "parentNodeTextPath",
+    "padding",
+    "transition",
+    "layoutAlgorithm",
+    "dragBetweenSeries",
+    "parentNodeOptions",
+    "isCartesian",
+    "requireSorting",
+    "axisTypes",
+    "searchPoint",
+    "accumulateAllPoints",
+    "allDataPoints",
+    "is",
+    "setVisible",
+    "parentNodeLayout",
+    "textPath",
+    "formatPrefix",
+    "seriesBox",
+    "bBox",
+    "p",
+    "parentNodeMass",
+    "parentPadding",
+    "minParentRadius",
+    "nodeMarker",
+    "parentOptions",
+    "brighten",
+    "opacity",
+    "visibility",
+    "parentNodesGroup",
+    "parentAttribs",
+    "createParentNodes",
+    "nodeAdded",
+    "PackedBubblePoint",
+    "dataLabelOnNull",
+    "div",
+    "addSeriesLayout",
+    "layoutOptions",
+    "graphLayoutsStorage",
+    "addLayout",
+    "forExport",
+    "collisionNmb",
+    "deferLayout",
+    "getPointRadius",
+    "positions",
+    "placeBubbles",
+    "checkOverlap",
+    "bubble1",
+    "bubble2",
+    "positionBubble",
+    "lastBubble",
+    "newOrigin",
+    "nextBubble",
+    "asin",
+    "acos",
+    "alfa",
+    "beta",
+    "finalAngle",
+    "gamma",
+    "delta",
+    "sinA",
+    "cosA",
+    "bubblePos",
+    "stage",
+    "arr",
+    "sortedArr",
+    "sort",
+    "calculatedBubble",
+    "stages",
+    "rawPositions",
+    "resizeRadius",
+    "minY",
+    "maxY",
+    "minX",
+    "POSITIVE_INFINITY",
+    "maxX",
+    "NEGATIVE_INFINITY",
+    "smallerDimension",
+    "spaceRatio",
+    "calculateZExtremes",
+    "valMin",
+    "Infinity",
+    "valMax",
+    "minRadius",
+    "maxRadius",
+    "zExtremes",
+    "removed",
+    "addPoint",
+    "remove",
+    "firePointEvent",
+    "eventType",
+    "defaultFunction",
+    "temp",
+    "select",
+    "accumulate",
+    "getSelectedPoints",
+    "SVGRenderer",
+    "animObject",
+    "find",
+    "uniqueKey",
+    "pointerProto",
+    "searchPointByAngle",
+    "seriesProto.searchPointByAngle",
+    "searchKDTree",
+    "clientX",
+    "getConnectors",
+    "seriesProto.getConnectors",
+    "segment",
+    "calculateNeighbours",
+    "addedNumber",
+    "prevPointInd",
+    "nextPointInd",
+    "previousPoint",
+    "nextPoint",
+    "previousX",
+    "nextX",
+    "nextY",
+    "leftContX",
+    "smoothing",
+    "denom",
+    "leftContY",
+    "rightContX",
+    "rightContY",
+    "dLControlPoint",
+    "dRControlPoint",
+    "leftContAngle",
+    "jointAngle",
+    "rightContAngle",
+    "prevPointCont",
+    "toXY",
+    "seriesProto.toXY",
+    "isRadialBar",
+    "polarPlotX",
+    "kdByAngle",
+    "areasplinerange",
+    "findNearestPointBy",
+    "preventPostTranslate",
+    "hasParallelCoordinates",
+    "hasClipCircleSetter",
+    "eventsToUnbind",
+    "circ",
+    "clipCircle",
+    "setClip",
+    "order",
+    "firstValid",
+    "popLastPoint",
+    "pop",
+    "polarAnimate",
+    "markerGroup",
+    "pie",
+    "isSVG",
+    "scaleX",
+    "scaleY",
+    "arearangeProto",
+    "colProto.polarArc",
+    "visibleRange",
+    "yMin",
+    "yMax",
+    "thresholdAngleRad",
+    "pointX",
+    "stack",
+    "stackValues",
+    "getStackIndicator",
+    "findAlignments",
+    "colProto.findAlignments",
+    "alignTo",
+    "labelPos",
+    "SVGRenderer.prototype.clipCircle",
+    "clipPath",
+    "createElement",
+    "defs",
+    "wrapper",
+    "isRadialSeries"
+  ]
+}
diff --git a/notemyprogress/js/highcharts/highcharts.js b/notemyprogress/js/highcharts/highcharts.js
index d87e1f0cf036d78d4aae0b47bab542b15fbf306d..362c23861f5b7cb4feba86941727a900137e92bc 100644
--- a/notemyprogress/js/highcharts/highcharts.js
+++ b/notemyprogress/js/highcharts/highcharts.js
@@ -5,541 +5,15192 @@
 
  License: www.highcharts.com/license
 */
-(function(X,N){"object"===typeof module&&module.exports?(N["default"]=N,module.exports=X.document?N(X):N):"function"===typeof define&&define.amd?define("highcharts/highcharts",function(){return N(X)}):(X.Highcharts&&X.Highcharts.error(16,!0),X.Highcharts=N(X))})("undefined"!==typeof window?window:this,function(X){function N(f,h,m,z){f.hasOwnProperty(h)||(f[h]=z.apply(null,m))}var m={};N(m,"Core/Globals.js",[],function(){var f="undefined"!==typeof X?X:"undefined"!==typeof window?window:{},h=f.document,
-m=f.navigator&&f.navigator.userAgent||"",z=h&&h.createElementNS&&!!h.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,F=/(edge|msie|trident)/i.test(m)&&!f.opera,L=-1!==m.indexOf("Firefox"),K=-1!==m.indexOf("Chrome"),C=L&&4>parseInt(m.split("Firefox/")[1],10);return{product:"Highcharts",version:"8.2.2",deg2rad:2*Math.PI/360,doc:h,hasBidiBug:C,hasTouch:!!f.TouchEvent,isMS:F,isWebKit:-1!==m.indexOf("AppleWebKit"),isFirefox:L,isChrome:K,isSafari:!K&&-1!==m.indexOf("Safari"),isTouchDevice:/(Mobile|Android|Windows Phone)/.test(m),
-SVG_NS:"http://www.w3.org/2000/svg",chartCount:0,seriesTypes:{},symbolSizes:{},svg:z,win:f,marginNames:["plotTop","marginRight","marginBottom","plotLeft"],noop:function(){},charts:[],dateFormats:{}}});N(m,"Core/Utilities.js",[m["Core/Globals.js"]],function(f){function h(b,k,t,a){var u=k?"Highcharts error":"Highcharts warning";32===b&&(b=u+": Deprecated member");var c=l(b),H=c?u+" #"+b+": www.highcharts.com/errors/"+b+"/":b.toString();u=function(){if(k)throw Error(H);e.console&&-1===h.messages.indexOf(H)&&
-console.log(H)};if("undefined"!==typeof a){var d="";c&&(H+="?");S(a,function(b,k){d+="\n - "+k+": "+b;c&&(H+=encodeURI(k)+"="+encodeURI(b))});H+=d}t?ca(t,"displayError",{code:b,message:H,params:a},u):u();h.messages.push(H)}function m(){var b,k=arguments,t={},a=function(b,k){"object"!==typeof b&&(b={});S(k,function(t,u){!z(t,!0)||n(t)||D(t)?b[u]=k[u]:b[u]=a(b[u]||{},t)});return b};!0===k[0]&&(t=k[1],k=Array.prototype.slice.call(k,2));var u=k.length;for(b=0;b<u;b++)t=a(t,k[b]);return t}function z(b,
-k){return!!b&&"object"===typeof b&&(!k||!x(b))}function F(b,k,t){var a;v(k)?w(t)?b.setAttribute(k,t):b&&b.getAttribute&&((a=b.getAttribute(k))||"class"!==k||(a=b.getAttribute(k+"Name"))):S(k,function(k,t){b.setAttribute(t,k)});return a}function L(){for(var b=arguments,k=b.length,t=0;t<k;t++){var a=b[t];if("undefined"!==typeof a&&null!==a)return a}}function K(b,k){if(!b)return k;var t=b.split(".").reverse();if(1===t.length)return k[b];for(b=t.pop();"undefined"!==typeof b&&"undefined"!==typeof k&&null!==
-k;)k=k[b],b=t.pop();return k}f.timers=[];var C=f.charts,y=f.doc,e=f.win;(h||(h={})).messages=[];f.error=h;f.merge=m;var I=f.pInt=function(b,k){return parseInt(b,k||10)},v=f.isString=function(b){return"string"===typeof b},x=f.isArray=function(b){b=Object.prototype.toString.call(b);return"[object Array]"===b||"[object Array Iterator]"===b};f.isObject=z;var D=f.isDOMElement=function(b){return z(b)&&"number"===typeof b.nodeType},n=f.isClass=function(b){var k=b&&b.constructor;return!(!z(b,!0)||D(b)||!k||
-!k.name||"Object"===k.name)},l=f.isNumber=function(b){return"number"===typeof b&&!isNaN(b)&&Infinity>b&&-Infinity<b},J=f.erase=function(b,k){for(var t=b.length;t--;)if(b[t]===k){b.splice(t,1);break}},w=f.defined=function(b){return"undefined"!==typeof b&&null!==b};f.attr=F;var r=f.splat=function(b){return x(b)?b:[b]},d=f.syncTimeout=function(b,k,t){if(0<k)return setTimeout(b,k,t);b.call(0,t);return-1},g=f.clearTimeout=function(b){w(b)&&clearTimeout(b)},c=f.extend=function(b,k){var t;b||(b={});for(t in k)b[t]=
-k[t];return b};f.pick=L;var a=f.css=function(b,k){f.isMS&&!f.svg&&k&&"undefined"!==typeof k.opacity&&(k.filter="alpha(opacity="+100*k.opacity+")");c(b.style,k)},q=f.createElement=function(b,k,t,u,H){b=y.createElement(b);k&&c(b,k);H&&a(b,{padding:"0",border:"none",margin:"0"});t&&a(b,t);u&&u.appendChild(b);return b},p=f.extendClass=function(b,k){var t=function(){};t.prototype=new b;c(t.prototype,k);return t},B=f.pad=function(b,k,t){return Array((k||2)+1-String(b).replace("-","").length).join(t||"0")+
-b},A=f.relativeLength=function(b,k,t){return/%$/.test(b)?k*parseFloat(b)/100+(t||0):parseFloat(b)},G=f.wrap=function(b,k,t){var a=b[k];b[k]=function(){var b=Array.prototype.slice.call(arguments),k=arguments,u=this;u.proceed=function(){a.apply(u,arguments.length?arguments:k)};b.unshift(a);b=t.apply(this,b);u.proceed=null;return b}},M=f.format=function(b,k,t){var a="{",u=!1,H=[],c=/f$/,d=/\.([0-9])/,g=f.defaultOptions.lang,p=t&&t.time||f.time;for(t=t&&t.numberFormatter||R;b;){var q=b.indexOf(a);if(-1===
-q)break;var U=b.slice(0,q);if(u){U=U.split(":");a=K(U.shift()||"",k);if(U.length&&"number"===typeof a)if(U=U.join(":"),c.test(U)){var r=parseInt((U.match(d)||["","-1"])[1],10);null!==a&&(a=t(a,r,g.decimalPoint,-1<U.indexOf(",")?g.thousandsSep:""))}else a=p.dateFormat(U,a);H.push(a)}else H.push(U);b=b.slice(q+1);a=(u=!u)?"}":"{"}H.push(b);return H.join("")},T=f.getMagnitude=function(b){return Math.pow(10,Math.floor(Math.log(b)/Math.LN10))},Q=f.normalizeTickInterval=function(b,k,a,u,H){var c=b;a=L(a,
-1);var d=b/a;k||(k=H?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===u&&(1===a?k=k.filter(function(b){return 0===b%1}):.1>=a&&(k=[1/a])));for(u=0;u<k.length&&!(c=k[u],H&&c*a>=b||!H&&d<=(k[u]+(k[u+1]||k[u]))/2);u++);return c=t(c*a,-Math.round(Math.log(.001)/Math.LN10))},O=f.stableSort=function(b,k){var t=b.length,a,u;for(u=0;u<t;u++)b[u].safeI=u;b.sort(function(b,t){a=k(b,t);return 0===a?b.safeI-t.safeI:a});for(u=0;u<t;u++)delete b[u].safeI},E=f.arrayMin=function(b){for(var k=b.length,t=b[0];k--;)b[k]<
-t&&(t=b[k]);return t},u=f.arrayMax=function(b){for(var k=b.length,t=b[0];k--;)b[k]>t&&(t=b[k]);return t},b=f.destroyObjectProperties=function(b,k){S(b,function(t,a){t&&t!==k&&t.destroy&&t.destroy();delete b[a]})},k=f.discardElement=function(b){var k=f.garbageBin;k||(k=q("div"));b&&k.appendChild(b);k.innerHTML=""},t=f.correctFloat=function(b,k){return parseFloat(b.toPrecision(k||14))},H=f.timeUnits={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5},R=
-f.numberFormat=function(b,k,t,a){b=+b||0;k=+k;var u=f.defaultOptions.lang,H=(b.toString().split(".")[1]||"").split("e")[0].length,c=b.toString().split("e");if(-1===k)k=Math.min(H,20);else if(!l(k))k=2;else if(k&&c[1]&&0>c[1]){var d=k+ +c[1];0<=d?(c[0]=(+c[0]).toExponential(d).split("e")[0],k=d):(c[0]=c[0].split(".")[0]||0,b=20>k?(c[0]*Math.pow(10,c[1])).toFixed(k):0,c[1]=0)}var g=(Math.abs(c[1]?c[0]:b)+Math.pow(10,-Math.max(k,H)-1)).toFixed(k);H=String(I(g));d=3<H.length?H.length%3:0;t=L(t,u.decimalPoint);
-a=L(a,u.thousandsSep);b=(0>b?"-":"")+(d?H.substr(0,d)+a:"");b+=H.substr(d).replace(/(\d{3})(?=\d)/g,"$1"+a);k&&(b+=t+g.slice(-k));c[1]&&0!==+b&&(b+="e"+c[1]);return b};Math.easeInOutSine=function(b){return-.5*(Math.cos(Math.PI*b)-1)};var U=f.getStyle=function(b,k,t){if("width"===k)return k=Math.min(b.offsetWidth,b.scrollWidth),t=b.getBoundingClientRect&&b.getBoundingClientRect().width,t<k&&t>=k-1&&(k=Math.floor(t)),Math.max(0,k-f.getStyle(b,"padding-left")-f.getStyle(b,"padding-right"));if("height"===
-k)return Math.max(0,Math.min(b.offsetHeight,b.scrollHeight)-f.getStyle(b,"padding-top")-f.getStyle(b,"padding-bottom"));e.getComputedStyle||h(27,!0);if(b=e.getComputedStyle(b,void 0))b=b.getPropertyValue(k),L(t,"opacity"!==k)&&(b=I(b));return b},Z=f.inArray=function(b,k,t){h(32,!1,void 0,{"Highcharts.inArray":"use Array.indexOf"});return k.indexOf(b,t)},aa=f.find=Array.prototype.find?function(b,k){return b.find(k)}:function(b,k){var t,a=b.length;for(t=0;t<a;t++)if(k(b[t],t))return b[t]};f.keys=function(b){h(32,
-!1,void 0,{"Highcharts.keys":"use Object.keys"});return Object.keys(b)};var ba=f.offset=function(b){var k=y.documentElement;b=b.parentElement||b.parentNode?b.getBoundingClientRect():{top:0,left:0};return{top:b.top+(e.pageYOffset||k.scrollTop)-(k.clientTop||0),left:b.left+(e.pageXOffset||k.scrollLeft)-(k.clientLeft||0)}},S=f.objectEach=function(b,k,t){for(var a in b)Object.hasOwnProperty.call(b,a)&&k.call(t||b[a],b[a],a,b)};S({map:"map",each:"forEach",grep:"filter",reduce:"reduce",some:"some"},function(b,
-k){f[k]=function(t){var a;h(32,!1,void 0,(a={},a["Highcharts."+k]="use Array."+b,a));return Array.prototype[b].apply(t,[].slice.call(arguments,1))}});var Y=f.addEvent=function(b,k,t,a){void 0===a&&(a={});var u=b.addEventListener||f.addEventListenerPolyfill;var c="function"===typeof b&&b.prototype?b.prototype.protoEvents=b.prototype.protoEvents||{}:b.hcEvents=b.hcEvents||{};f.Point&&b instanceof f.Point&&b.series&&b.series.chart&&(b.series.chart.runTrackerClick=!0);u&&u.call(b,k,t,!1);c[k]||(c[k]=
-[]);c[k].push({fn:t,order:"number"===typeof a.order?a.order:Infinity});c[k].sort(function(b,k){return b.order-k.order});return function(){W(b,k,t)}},W=f.removeEvent=function(b,k,t){function a(k,t){var a=b.removeEventListener||f.removeEventListenerPolyfill;a&&a.call(b,k,t,!1)}function u(t){var u;if(b.nodeName){if(k){var c={};c[k]=!0}else c=t;S(c,function(b,k){if(t[k])for(u=t[k].length;u--;)a(k,t[k][u].fn)})}}var c;["protoEvents","hcEvents"].forEach(function(H,d){var g=(d=d?b:b.prototype)&&d[H];g&&
-(k?(c=g[k]||[],t?(g[k]=c.filter(function(b){return t!==b.fn}),a(k,t)):(u(g),g[k]=[])):(u(g),d[H]={}))})},ca=f.fireEvent=function(b,k,t,a){var u;t=t||{};if(y.createEvent&&(b.dispatchEvent||b.fireEvent)){var H=y.createEvent("Events");H.initEvent(k,!0,!0);c(H,t);b.dispatchEvent?b.dispatchEvent(H):b.fireEvent(k,H)}else t.target||c(t,{preventDefault:function(){t.defaultPrevented=!0},target:b,type:k}),function(k,a){void 0===k&&(k=[]);void 0===a&&(a=[]);var c=0,H=0,d=k.length+a.length;for(u=0;u<d;u++)!1===
-(k[c]?a[H]?k[c].order<=a[H].order?k[c++]:a[H++]:k[c++]:a[H++]).fn.call(b,t)&&t.preventDefault()}(b.protoEvents&&b.protoEvents[k],b.hcEvents&&b.hcEvents[k]);a&&!t.defaultPrevented&&a.call(b,t)},V,da=f.uniqueKey=function(){var b=Math.random().toString(36).substring(2,9)+"-",k=0;return function(){return"highcharts-"+(V?"":b)+k++}}(),ea=f.useSerialIds=function(b){return V=L(b,V)},fa=f.isFunction=function(b){return"function"===typeof b},ha=f.getOptions=function(){return f.defaultOptions},ia=f.setOptions=
-function(b){f.defaultOptions=m(!0,f.defaultOptions,b);(b.time||b.global)&&f.time.update(m(f.defaultOptions.global,f.defaultOptions.time,b.global,b.time));return f.defaultOptions};e.jQuery&&(e.jQuery.fn.highcharts=function(){var b=[].slice.call(arguments);if(this[0])return b[0]?(new (f[v(b[0])?b.shift():"Chart"])(this[0],b[0],b[1]),this):C[F(this[0],"data-highcharts-chart")]});return{addEvent:Y,arrayMax:u,arrayMin:E,attr:F,clamp:function(b,k,t){return b>k?b<t?b:t:k},clearTimeout:g,correctFloat:t,createElement:q,
-css:a,defined:w,destroyObjectProperties:b,discardElement:k,erase:J,error:h,extend:c,extendClass:p,find:aa,fireEvent:ca,format:M,getMagnitude:T,getNestedProperty:K,getOptions:ha,getStyle:U,inArray:Z,isArray:x,isClass:n,isDOMElement:D,isFunction:fa,isNumber:l,isObject:z,isString:v,merge:m,normalizeTickInterval:Q,numberFormat:R,objectEach:S,offset:ba,pad:B,pick:L,pInt:I,relativeLength:A,removeEvent:W,setOptions:ia,splat:r,stableSort:O,syncTimeout:d,timeUnits:H,uniqueKey:da,useSerialIds:ea,wrap:G}});
-N(m,"Core/Color/Color.js",[m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h){var m=h.isNumber,z=h.merge,F=h.pInt;"";h=function(){function h(K){this.parsers=[{regex:/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,parse:function(h){return[F(h[1]),F(h[2]),F(h[3]),parseFloat(h[4],10)]}},{regex:/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,parse:function(h){return[F(h[1]),F(h[2]),F(h[3]),1]}}];this.rgba=[];if(f.Color!==h)return new f.Color(K);
-if(!(this instanceof h))return new h(K);this.init(K)}h.parse=function(f){return new h(f)};h.prototype.init=function(f){var C,y;if((this.input=f=h.names[f&&f.toLowerCase?f.toLowerCase():""]||f)&&f.stops)this.stops=f.stops.map(function(v){return new h(v[1])});else{if(f&&f.charAt&&"#"===f.charAt()){var e=f.length;f=parseInt(f.substr(1),16);7===e?C=[(f&16711680)>>16,(f&65280)>>8,f&255,1]:4===e&&(C=[(f&3840)>>4|(f&3840)>>8,(f&240)>>4|f&240,(f&15)<<4|f&15,1])}if(!C)for(y=this.parsers.length;y--&&!C;){var I=
-this.parsers[y];(e=I.regex.exec(f))&&(C=I.parse(e))}}this.rgba=C||[]};h.prototype.get=function(f){var h=this.input,y=this.rgba;if("undefined"!==typeof this.stops){var e=z(h);e.stops=[].concat(e.stops);this.stops.forEach(function(I,v){e.stops[v]=[e.stops[v][0],I.get(f)]})}else e=y&&m(y[0])?"rgb"===f||!f&&1===y[3]?"rgb("+y[0]+","+y[1]+","+y[2]+")":"a"===f?y[3]:"rgba("+y.join(",")+")":h;return e};h.prototype.brighten=function(f){var h,y=this.rgba;if(this.stops)this.stops.forEach(function(e){e.brighten(f)});
-else if(m(f)&&0!==f)for(h=0;3>h;h++)y[h]+=F(255*f),0>y[h]&&(y[h]=0),255<y[h]&&(y[h]=255);return this};h.prototype.setOpacity=function(f){this.rgba[3]=f;return this};h.prototype.tweenTo=function(f,h){var y=this.rgba,e=f.rgba;e.length&&y&&y.length?(f=1!==e[3]||1!==y[3],h=(f?"rgba(":"rgb(")+Math.round(e[0]+(y[0]-e[0])*(1-h))+","+Math.round(e[1]+(y[1]-e[1])*(1-h))+","+Math.round(e[2]+(y[2]-e[2])*(1-h))+(f?","+(e[3]+(y[3]-e[3])*(1-h)):"")+")"):h=f.input||"none";return h};h.names={white:"#ffffff",black:"#000000"};
-return h}();f.Color=h;f.color=h.parse;return h});N(m,"Core/Animation/Fx.js",[m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h){var m=f.win,z=h.isNumber,F=h.objectEach;h=function(){function h(f,h,y){this.pos=NaN;this.options=h;this.elem=f;this.prop=y}h.prototype.dSetter=function(){var f=this.paths,h=f&&f[0];f=f&&f[1];var y=[],e=this.now||0;if(1!==e&&h&&f)if(h.length===f.length&&1>e)for(var I=0;I<f.length;I++){for(var v=h[I],x=f[I],D=[],n=0;n<x.length;n++){var l=v[n],J=x[n];D[n]="number"===
-typeof l&&"number"===typeof J&&("A"!==x[0]||4!==n&&5!==n)?l+e*(J-l):J}y.push(D)}else y=f;else y=this.toD||[];this.elem.attr("d",y,void 0,!0)};h.prototype.update=function(){var f=this.elem,h=this.prop,y=this.now,e=this.options.step;if(this[h+"Setter"])this[h+"Setter"]();else f.attr?f.element&&f.attr(h,y,null,!0):f.style[h]=y+this.unit;e&&e.call(f,y,this)};h.prototype.run=function(h,C,y){var e=this,I=e.options,v=function(n){return v.stopped?!1:e.step(n)},x=m.requestAnimationFrame||function(n){setTimeout(n,
-13)},D=function(){for(var n=0;n<f.timers.length;n++)f.timers[n]()||f.timers.splice(n--,1);f.timers.length&&x(D)};h!==C||this.elem["forceAnimate:"+this.prop]?(this.startTime=+new Date,this.start=h,this.end=C,this.unit=y,this.now=this.start,this.pos=0,v.elem=this.elem,v.prop=this.prop,v()&&1===f.timers.push(v)&&x(D)):(delete I.curAnim[this.prop],I.complete&&0===Object.keys(I.curAnim).length&&I.complete.call(this.elem))};h.prototype.step=function(f){var h=+new Date,y=this.options,e=this.elem,I=y.complete,
-v=y.duration,x=y.curAnim;if(e.attr&&!e.element)f=!1;else if(f||h>=v+this.startTime){this.now=this.end;this.pos=1;this.update();var D=x[this.prop]=!0;F(x,function(n){!0!==n&&(D=!1)});D&&I&&I.call(e);f=!1}else this.pos=y.easing((h-this.startTime)/v),this.now=this.start+(this.end-this.start)*this.pos,this.update(),f=!0;return f};h.prototype.initPath=function(f,h,y){function e(r,d){for(;r.length<w;){var g=r[0],c=d[w-r.length];c&&"M"===g[0]&&(r[0]="C"===c[0]?["C",g[1],g[2],g[1],g[2],g[1],g[2]]:["L",g[1],
-g[2]]);r.unshift(g);D&&r.push(r[r.length-1])}}function I(r,d){for(;r.length<w;)if(d=r[r.length/n-1].slice(),"C"===d[0]&&(d[1]=d[5],d[2]=d[6]),D){var g=r[r.length/n].slice();r.splice(r.length/2,0,d,g)}else r.push(d)}var v=f.startX,x=f.endX;h=h&&h.slice();y=y.slice();var D=f.isArea,n=D?2:1;if(!h)return[y,y];if(v&&x){for(f=0;f<v.length;f++)if(v[f]===x[0]){var l=f;break}else if(v[0]===x[x.length-v.length+f]){l=f;var J=!0;break}else if(v[v.length-1]===x[x.length-v.length+f]){l=v.length-f;break}"undefined"===
-typeof l&&(h=[])}if(h.length&&z(l)){var w=y.length+l*n;J?(e(h,y),I(y,h)):(e(y,h),I(h,y))}return[h,y]};h.prototype.fillSetter=function(){h.prototype.strokeSetter.apply(this,arguments)};h.prototype.strokeSetter=function(){this.elem.attr(this.prop,f.color(this.start).tweenTo(f.color(this.end),this.pos),null,!0)};return h}();return f.Fx=h});N(m,"Core/Animation/AnimationUtilities.js",[m["Core/Animation/Fx.js"],m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h,m){var z=m.defined,P=m.getStyle,L=
-m.isArray,K=m.isNumber,C=m.isObject,y=m.merge,e=m.objectEach,I=m.pick;m=h.setAnimation=function(l,n){n.renderer.globalAnimation=I(l,n.options.chart.animation,!0)};var v=h.animObject=function(l){return C(l)?h.merge({duration:500,defer:0},l):{duration:l?500:0,defer:0}},x=h.getDeferredAnimation=function(l,n,w){var r=v(n),d=0,g=0;(w?[w]:l.series).forEach(function(c){c=v(c.options.animation);d=n&&z(n.defer)?r.defer:Math.max(d,c.duration+c.defer);g=Math.min(r.duration,c.duration)});l.renderer.forExport&&
-(d=0);return{defer:Math.max(0,d-g),duration:Math.min(d,g)}},D=h.animate=function(l,v,w){var r,d="",g,c;if(!C(w)){var a=arguments;w={duration:a[2],easing:a[3],complete:a[4]}}K(w.duration)||(w.duration=400);w.easing="function"===typeof w.easing?w.easing:Math[w.easing]||Math.easeInOutSine;w.curAnim=y(v);e(v,function(a,p){n(l,p);c=new f(l,w,p);g=null;"d"===p&&L(v.d)?(c.paths=c.initPath(l,l.pathArray,v.d),c.toD=v.d,r=0,g=1):l.attr?r=l.attr(p):(r=parseFloat(P(l,p))||0,"opacity"!==p&&(d="px"));g||(g=a);
-g&&g.match&&g.match("px")&&(g=g.replace(/px/g,""));c.run(r,g,d)})},n=h.stop=function(l,n){for(var w=h.timers.length;w--;)h.timers[w].elem!==l||n&&n!==h.timers[w].prop||(h.timers[w].stopped=!0)};return{animate:D,animObject:v,getDeferredAnimation:x,setAnimation:m,stop:n}});N(m,"Core/Renderer/SVG/SVGElement.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Color/Color.js"],m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h,m,z){var F=f.animate,P=f.animObject,K=f.stop,C=m.deg2rad,y=m.doc,
-e=m.hasTouch,I=m.isFirefox,v=m.noop,x=m.svg,D=m.SVG_NS,n=m.win,l=z.attr,J=z.createElement,w=z.css,r=z.defined,d=z.erase,g=z.extend,c=z.fireEvent,a=z.isArray,q=z.isFunction,p=z.isNumber,B=z.isString,A=z.merge,G=z.objectEach,M=z.pick,T=z.pInt,Q=z.syncTimeout,O=z.uniqueKey;"";f=function(){function E(){this.height=this.element=void 0;this.opacity=1;this.renderer=void 0;this.SVG_NS=D;this.symbolCustomAttribs="x y width height r start end innerR anchorX anchorY rounded".split(" ");this.width=void 0}E.prototype._defaultGetter=
-function(a){a=M(this[a+"Value"],this[a],this.element?this.element.getAttribute(a):null,0);/^[\-0-9\.]+$/.test(a)&&(a=parseFloat(a));return a};E.prototype._defaultSetter=function(a,b,k){k.setAttribute(b,a)};E.prototype.add=function(a){var b=this.renderer,k=this.element;a&&(this.parentGroup=a);this.parentInverted=a&&a.inverted;"undefined"!==typeof this.textStr&&"text"===this.element.nodeName&&b.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)var t=this.zIndexSetter();t||(a?a.element:b.box).appendChild(k);
-if(this.onAdd)this.onAdd();return this};E.prototype.addClass=function(a,b){var k=b?"":this.attr("class")||"";a=(a||"").split(/ /g).reduce(function(b,a){-1===k.indexOf(a)&&b.push(a);return b},k?[k]:[]).join(" ");a!==k&&this.attr("class",a);return this};E.prototype.afterSetters=function(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)};E.prototype.align=function(a,b,k){var t,c={};var u=this.renderer;var g=u.alignedObjects;var p,q;if(a){if(this.alignOptions=a,this.alignByTranslate=b,
-!k||B(k))this.alignTo=t=k||"renderer",d(g,this),g.push(this),k=void 0}else a=this.alignOptions,b=this.alignByTranslate,t=this.alignTo;k=M(k,u[t],u);t=a.align;u=a.verticalAlign;g=(k.x||0)+(a.x||0);var r=(k.y||0)+(a.y||0);"right"===t?p=1:"center"===t&&(p=2);p&&(g+=(k.width-(a.width||0))/p);c[b?"translateX":"x"]=Math.round(g);"bottom"===u?q=1:"middle"===u&&(q=2);q&&(r+=(k.height-(a.height||0))/q);c[b?"translateY":"y"]=Math.round(r);this[this.placed?"animate":"attr"](c);this.placed=!0;this.alignAttr=
-c;return this};E.prototype.alignSetter=function(a){var b={left:"start",center:"middle",right:"end"};b[a]&&(this.alignValue=a,this.element.setAttribute("text-anchor",b[a]))};E.prototype.animate=function(a,b,k){var t=this,c=P(M(b,this.renderer.globalAnimation,!0));b=c.defer;M(y.hidden,y.msHidden,y.webkitHidden,!1)&&(c.duration=0);0!==c.duration?(k&&(c.complete=k),Q(function(){t.element&&F(t,a,c)},b)):(this.attr(a,void 0,k),G(a,function(b,k){c.step&&c.step.call(this,b,{prop:k,pos:1})},this));return this};
-E.prototype.applyTextOutline=function(a){var b=this.element,k;-1!==a.indexOf("contrast")&&(a=a.replace(/contrast/g,this.renderer.getContrast(b.style.fill)));a=a.split(" ");var t=a[a.length-1];if((k=a[0])&&"none"!==k&&m.svg){this.fakeTS=!0;a=[].slice.call(b.getElementsByTagName("tspan"));this.ySetter=this.xSetter;k=k.replace(/(^[\d\.]+)(.*?)$/g,function(b,k,t){return 2*k+t});this.removeTextOutline(a);var c=b.textContent?/^[\u0591-\u065F\u066A-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/.test(b.textContent):
-!1;var u=b.firstChild;a.forEach(function(a,H){0===H&&(a.setAttribute("x",b.getAttribute("x")),H=b.getAttribute("y"),a.setAttribute("y",H||0),null===H&&b.setAttribute("y",0));H=a.cloneNode(!0);l(c&&!I?a:H,{"class":"highcharts-text-outline",fill:t,stroke:t,"stroke-width":k,"stroke-linejoin":"round"});b.insertBefore(H,u)});c&&I&&a[0]&&(a=a[0].cloneNode(!0),a.textContent=" ",b.insertBefore(a,u))}};E.prototype.attr=function(a,b,k,t){var c=this.element,u,d=this,g,p,q=this.symbolCustomAttribs;if("string"===
-typeof a&&"undefined"!==typeof b){var r=a;a={};a[r]=b}"string"===typeof a?d=(this[a+"Getter"]||this._defaultGetter).call(this,a,c):(G(a,function(b,k){g=!1;t||K(this,k);this.symbolName&&-1!==q.indexOf(k)&&(u||(this.symbolAttr(a),u=!0),g=!0);!this.rotation||"x"!==k&&"y"!==k||(this.doTransform=!0);g||(p=this[k+"Setter"]||this._defaultSetter,p.call(this,b,k,c),!this.styledMode&&this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(k)&&this.updateShadows(k,b,p))},this),this.afterSetters());
-k&&k.call(this);return d};E.prototype.clip=function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":"none")};E.prototype.crisp=function(a,b){b=b||a.strokeWidth||0;var k=Math.round(b)%2/2;a.x=Math.floor(a.x||this.x||0)+k;a.y=Math.floor(a.y||this.y||0)+k;a.width=Math.floor((a.width||this.width||0)-2*k);a.height=Math.floor((a.height||this.height||0)-2*k);r(a.strokeWidth)&&(a.strokeWidth=b);return a};E.prototype.complexColor=function(u,b,k){var t=this.renderer,H,d,g,p,q,B,l,n,
-w,E,V=[],v;c(this.renderer,"complexColor",{args:arguments},function(){u.radialGradient?d="radialGradient":u.linearGradient&&(d="linearGradient");if(d){g=u[d];q=t.gradients;B=u.stops;w=k.radialReference;a(g)&&(u[d]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});"radialGradient"===d&&w&&!r(g.gradientUnits)&&(p=g,g=A(g,t.getRadialAttr(w,p),{gradientUnits:"userSpaceOnUse"}));G(g,function(b,k){"id"!==k&&V.push(k,b)});G(B,function(b){V.push(b)});V=V.join(",");if(q[V])E=q[V].attr("id");
-else{g.id=E=O();var c=q[V]=t.createElement(d).attr(g).add(t.defs);c.radAttr=p;c.stops=[];B.forEach(function(b){0===b[1].indexOf("rgba")?(H=h.parse(b[1]),l=H.get("rgb"),n=H.get("a")):(l=b[1],n=1);b=t.createElement("stop").attr({offset:b[0],"stop-color":l,"stop-opacity":n}).add(c);c.stops.push(b)})}v="url("+t.url+"#"+E+")";k.setAttribute(b,v);k.gradient=V;u.toString=function(){return v}}})};E.prototype.css=function(a){var b=this.styles,k={},t=this.element,c="",d=!b,u=["textOutline","textOverflow","width"];
-a&&a.color&&(a.fill=a.color);b&&G(a,function(a,t){b&&b[t]!==a&&(k[t]=a,d=!0)});if(d){b&&(a=g(b,k));if(a)if(null===a.width||"auto"===a.width)delete this.textWidth;else if("text"===t.nodeName.toLowerCase()&&a.width)var p=this.textWidth=T(a.width);this.styles=a;p&&!x&&this.renderer.forExport&&delete a.width;if(t.namespaceURI===this.SVG_NS){var q=function(b,k){return"-"+k.toLowerCase()};G(a,function(b,k){-1===u.indexOf(k)&&(c+=k.replace(/([A-Z])/g,q)+":"+b+";")});c&&l(t,"style",c)}else w(t,a);this.added&&
-("text"===this.element.nodeName&&this.renderer.buildText(this),a&&a.textOutline&&this.applyTextOutline(a.textOutline))}return this};E.prototype.dashstyleSetter=function(a){var b=this["stroke-width"];"inherit"===b&&(b=1);if(a=a&&a.toLowerCase()){var k=a.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(a=k.length;a--;)k[a]=
-""+T(k[a])*M(b,NaN);a=k.join(",").replace(/NaN/g,"none");this.element.setAttribute("stroke-dasharray",a)}};E.prototype.destroy=function(){var a=this,b=a.element||{},k=a.renderer,t=k.isSVG&&"SPAN"===b.nodeName&&a.parentGroup||void 0,c=b.ownerSVGElement;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=null;K(a);if(a.clipPath&&c){var g=a.clipPath;[].forEach.call(c.querySelectorAll("[clip-path],[CLIP-PATH]"),function(b){-1<b.getAttribute("clip-path").indexOf(g.element.id)&&b.removeAttribute("clip-path")});
-a.clipPath=g.destroy()}if(a.stops){for(c=0;c<a.stops.length;c++)a.stops[c].destroy();a.stops.length=0;a.stops=void 0}a.safeRemoveChild(b);for(k.styledMode||a.destroyShadows();t&&t.div&&0===t.div.childNodes.length;)b=t.parentGroup,a.safeRemoveChild(t.div),delete t.div,t=b;a.alignTo&&d(k.alignedObjects,a);G(a,function(b,k){a[k]&&a[k].parentGroup===a&&a[k].destroy&&a[k].destroy();delete a[k]})};E.prototype.destroyShadows=function(){(this.shadows||[]).forEach(function(a){this.safeRemoveChild(a)},this);
-this.shadows=void 0};E.prototype.destroyTextPath=function(a,b){var k=a.getElementsByTagName("text")[0];if(k){if(k.removeAttribute("dx"),k.removeAttribute("dy"),b.element.setAttribute("id",""),this.textPathWrapper&&k.getElementsByTagName("textPath").length){for(a=this.textPathWrapper.element.childNodes;a.length;)k.appendChild(a[0]);k.removeChild(this.textPathWrapper.element)}}else if(a.getAttribute("dx")||a.getAttribute("dy"))a.removeAttribute("dx"),a.removeAttribute("dy");this.textPathWrapper&&(this.textPathWrapper=
-this.textPathWrapper.destroy())};E.prototype.dSetter=function(c,b,k){a(c)&&("string"===typeof c[0]&&(c=this.renderer.pathToSegments(c)),this.pathArray=c,c=c.reduce(function(b,k,a){return k&&k.join?(a?b+" ":"")+k.join(" "):(k||"").toString()},""));/(NaN| {2}|^$)/.test(c)&&(c="M 0 0");this[b]!==c&&(k.setAttribute(b,c),this[b]=c)};E.prototype.fadeOut=function(a){var b=this;b.animate({opacity:0},{duration:M(a,150),complete:function(){b.attr({y:-9999}).hide()}})};E.prototype.fillSetter=function(a,b,k){"string"===
-typeof a?k.setAttribute(b,a):a&&this.complexColor(a,b,k)};E.prototype.getBBox=function(a,b){var k,t=this.renderer,c=this.element,d=this.styles,p=this.textStr,u=t.cache,B=t.cacheKeys,A=c.namespaceURI===this.SVG_NS;b=M(b,this.rotation,0);var l=t.styledMode?c&&E.prototype.getStyle.call(c,"font-size"):d&&d.fontSize;if(r(p)){var n=p.toString();-1===n.indexOf("<")&&(n=n.replace(/[0-9]/g,"0"));n+=["",b,l,this.textWidth,d&&d.textOverflow,d&&d.fontWeight].join()}n&&!a&&(k=u[n]);if(!k){if(A||t.forExport){try{var w=
-this.fakeTS&&function(b){[].forEach.call(c.querySelectorAll(".highcharts-text-outline"),function(k){k.style.display=b})};q(w)&&w("none");k=c.getBBox?g({},c.getBBox()):{width:c.offsetWidth,height:c.offsetHeight};q(w)&&w("")}catch(ca){""}if(!k||0>k.width)k={width:0,height:0}}else k=this.htmlGetBBox();t.isSVG&&(a=k.width,t=k.height,A&&(k.height=t={"11px,17":14,"13px,20":16}[d&&d.fontSize+","+Math.round(t)]||t),b&&(d=b*C,k.width=Math.abs(t*Math.sin(d))+Math.abs(a*Math.cos(d)),k.height=Math.abs(t*Math.cos(d))+
-Math.abs(a*Math.sin(d))));if(n&&0<k.height){for(;250<B.length;)delete u[B.shift()];u[n]||B.push(n);u[n]=k}}return k};E.prototype.getStyle=function(a){return n.getComputedStyle(this.element||this,"").getPropertyValue(a)};E.prototype.hasClass=function(a){return-1!==(""+this.attr("class")).split(" ").indexOf(a)};E.prototype.hide=function(a){a?this.attr({y:-9999}):this.attr({visibility:"hidden"});return this};E.prototype.htmlGetBBox=function(){return{height:0,width:0,x:0,y:0}};E.prototype.init=function(a,
-b){this.element="span"===b?J(b):y.createElementNS(this.SVG_NS,b);this.renderer=a;c(this,"afterInit")};E.prototype.invert=function(a){this.inverted=a;this.updateTransform();return this};E.prototype.on=function(a,b){var k,t,c=this.element,d;e&&"click"===a?(c.ontouchstart=function(b){k=b.touches[0].clientX;t=b.touches[0].clientY},c.ontouchend=function(a){k&&4<=Math.sqrt(Math.pow(k-a.changedTouches[0].clientX,2)+Math.pow(t-a.changedTouches[0].clientY,2))||b.call(c,a);d=!0;!1!==a.cancelable&&a.preventDefault()},
-c.onclick=function(k){d||b.call(c,k)}):c["on"+a]=b;return this};E.prototype.opacitySetter=function(a,b,k){this.opacity=a=Number(Number(a).toFixed(3));k.setAttribute(b,a)};E.prototype.removeClass=function(a){return this.attr("class",(""+this.attr("class")).replace(B(a)?new RegExp("(^| )"+a+"( |$)"):a," ").replace(/ +/g," ").trim())};E.prototype.removeTextOutline=function(a){for(var b=a.length,k;b--;)k=a[b],"highcharts-text-outline"===k.getAttribute("class")&&d(a,this.element.removeChild(k))};E.prototype.safeRemoveChild=
-function(a){var b=a.parentNode;b&&b.removeChild(a)};E.prototype.setRadialReference=function(a){var b=this.element.gradient&&this.renderer.gradients[this.element.gradient];this.element.radialReference=a;b&&b.radAttr&&b.animate(this.renderer.getRadialAttr(a,b.radAttr));return this};E.prototype.setTextPath=function(a,b){var k=this.element,t={textAnchor:"text-anchor"},c=!1,d=this.textPathWrapper,g=!d;b=A(!0,{enabled:!0,attributes:{dy:-5,startOffset:"50%",textAnchor:"middle"}},b);var q=b.attributes;if(a&&
-b&&b.enabled){d&&null===d.element.parentNode?(g=!0,d=d.destroy()):d&&this.removeTextOutline.call(d.parentGroup,[].slice.call(k.getElementsByTagName("tspan")));this.options&&this.options.padding&&(q.dx=-this.options.padding);d||(this.textPathWrapper=d=this.renderer.createElement("textPath"),c=!0);var u=d.element;(b=a.element.getAttribute("id"))||a.element.setAttribute("id",b=O());if(g)for(a=k.getElementsByTagName("tspan");a.length;)a[0].setAttribute("y",0),p(q.dx)&&a[0].setAttribute("x",-q.dx),u.appendChild(a[0]);
-c&&d&&d.add({element:this.text?this.text.element:k});u.setAttributeNS("http://www.w3.org/1999/xlink","href",this.renderer.url+"#"+b);r(q.dy)&&(u.parentNode.setAttribute("dy",q.dy),delete q.dy);r(q.dx)&&(u.parentNode.setAttribute("dx",q.dx),delete q.dx);G(q,function(b,k){u.setAttribute(t[k]||k,b)});k.removeAttribute("transform");this.removeTextOutline.call(d,[].slice.call(k.getElementsByTagName("tspan")));this.text&&!this.renderer.styledMode&&this.attr({fill:"none","stroke-width":0});this.applyTextOutline=
-this.updateTransform=v}else d&&(delete this.updateTransform,delete this.applyTextOutline,this.destroyTextPath(k,a),this.updateTransform(),this.options&&this.options.rotation&&this.applyTextOutline(this.options.style.textOutline));return this};E.prototype.shadow=function(a,b,k){var t=[],c=this.element,d=!1,p=this.oldShadowOptions;var q={color:"#000000",offsetX:1,offsetY:1,opacity:.15,width:3};var u;!0===a?u=q:"object"===typeof a&&(u=g(q,a));u&&(u&&p&&G(u,function(b,k){b!==p[k]&&(d=!0)}),d&&this.destroyShadows(),
-this.oldShadowOptions=u);if(!u)this.destroyShadows();else if(!this.shadows){var r=u.opacity/u.width;var B=this.parentInverted?"translate(-1,-1)":"translate("+u.offsetX+", "+u.offsetY+")";for(q=1;q<=u.width;q++){var A=c.cloneNode(!1);var n=2*u.width+1-2*q;l(A,{stroke:a.color||"#000000","stroke-opacity":r*q,"stroke-width":n,transform:B,fill:"none"});A.setAttribute("class",(A.getAttribute("class")||"")+" highcharts-shadow");k&&(l(A,"height",Math.max(l(A,"height")-n,0)),A.cutHeight=n);b?b.element.appendChild(A):
-c.parentNode&&c.parentNode.insertBefore(A,c);t.push(A)}this.shadows=t}return this};E.prototype.show=function(a){return this.attr({visibility:a?"inherit":"visible"})};E.prototype.strokeSetter=function(a,b,k){this[b]=a;this.stroke&&this["stroke-width"]?(E.prototype.fillSetter.call(this,this.stroke,"stroke",k),k.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0):"stroke-width"===b&&0===a&&this.hasStroke?(k.removeAttribute("stroke"),this.hasStroke=!1):this.renderer.styledMode&&this["stroke-width"]&&
-(k.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0)};E.prototype.strokeWidth=function(){if(!this.renderer.styledMode)return this["stroke-width"]||0;var a=this.getStyle("stroke-width"),b=0;if(a.indexOf("px")===a.length-2)b=T(a);else if(""!==a){var k=y.createElementNS(D,"rect");l(k,{width:a,"stroke-width":0});this.element.parentNode.appendChild(k);b=k.getBBox().width;k.parentNode.removeChild(k)}return b};E.prototype.symbolAttr=function(a){var b=this;"x y r start end width height innerR anchorX anchorY clockwise".split(" ").forEach(function(k){b[k]=
-M(a[k],b[k])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})};E.prototype.textSetter=function(a){a!==this.textStr&&(delete this.textPxLength,this.textStr=a,this.added&&this.renderer.buildText(this))};E.prototype.titleSetter=function(a){var b=this.element.getElementsByTagName("title")[0];b||(b=y.createElementNS(this.SVG_NS,"title"),this.element.appendChild(b));b.firstChild&&b.removeChild(b.firstChild);b.appendChild(y.createTextNode(String(M(a,"")).replace(/<[^>]*>/g,"").replace(/&lt;/g,
-"<").replace(/&gt;/g,">")))};E.prototype.toFront=function(){var a=this.element;a.parentNode.appendChild(a);return this};E.prototype.translate=function(a,b){return this.attr({translateX:a,translateY:b})};E.prototype.updateShadows=function(a,b,k){var t=this.shadows;if(t)for(var c=t.length;c--;)k.call(t[c],"height"===a?Math.max(b-(t[c].cutHeight||0),0):"d"===a?this.d:b,a,t[c])};E.prototype.updateTransform=function(){var a=this.translateX||0,b=this.translateY||0,k=this.scaleX,t=this.scaleY,c=this.inverted,
-d=this.rotation,g=this.matrix,p=this.element;c&&(a+=this.width,b+=this.height);a=["translate("+a+","+b+")"];r(g)&&a.push("matrix("+g.join(",")+")");c?a.push("rotate(90) scale(-1,1)"):d&&a.push("rotate("+d+" "+M(this.rotationOriginX,p.getAttribute("x"),0)+" "+M(this.rotationOriginY,p.getAttribute("y")||0)+")");(r(k)||r(t))&&a.push("scale("+M(k,1)+" "+M(t,1)+")");a.length&&p.setAttribute("transform",a.join(" "))};E.prototype.visibilitySetter=function(a,b,k){"inherit"===a?k.removeAttribute(b):this[b]!==
-a&&k.setAttribute(b,a);this[b]=a};E.prototype.xGetter=function(a){"circle"===this.element.nodeName&&("x"===a?a="cx":"y"===a&&(a="cy"));return this._defaultGetter(a)};E.prototype.zIndexSetter=function(a,b){var k=this.renderer,t=this.parentGroup,c=(t||k).element||k.box,d=this.element,g=!1;k=c===k.box;var p=this.added;var q;r(a)?(d.setAttribute("data-z-index",a),a=+a,this[b]===a&&(p=!1)):r(this[b])&&d.removeAttribute("data-z-index");this[b]=a;if(p){(a=this.zIndex)&&t&&(t.handleZ=!0);b=c.childNodes;for(q=
-b.length-1;0<=q&&!g;q--){t=b[q];p=t.getAttribute("data-z-index");var u=!r(p);if(t!==d)if(0>a&&u&&!k&&!q)c.insertBefore(d,b[q]),g=!0;else if(T(p)<=a||u&&(!r(a)||0<=a))c.insertBefore(d,b[q+1]||null),g=!0}g||(c.insertBefore(d,b[k?3:0]||null),g=!0)}return g};return E}();f.prototype["stroke-widthSetter"]=f.prototype.strokeSetter;f.prototype.yGetter=f.prototype.xGetter;f.prototype.matrixSetter=f.prototype.rotationOriginXSetter=f.prototype.rotationOriginYSetter=f.prototype.rotationSetter=f.prototype.scaleXSetter=
-f.prototype.scaleYSetter=f.prototype.translateXSetter=f.prototype.translateYSetter=f.prototype.verticalAlignSetter=function(a,c){this[c]=a;this.doTransform=!0};m.SVGElement=f;return m.SVGElement});N(m,"Core/Renderer/SVG/SVGLabel.js",[m["Core/Renderer/SVG/SVGElement.js"],m["Core/Utilities.js"]],function(f,h){var m=this&&this.__extends||function(){var f=function(e,I){f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(v,e){v.__proto__=e}||function(v,e){for(var f in e)e.hasOwnProperty(f)&&
-(v[f]=e[f])};return f(e,I)};return function(e,I){function v(){this.constructor=e}f(e,I);e.prototype=null===I?Object.create(I):(v.prototype=I.prototype,new v)}}(),z=h.defined,F=h.extend,L=h.isNumber,K=h.merge,C=h.removeEvent;return function(h){function e(f,v,x,D,n,l,J,w,r,d){var g=h.call(this)||this;g.init(f,"g");g.textStr=v;g.x=x;g.y=D;g.anchorX=l;g.anchorY=J;g.baseline=r;g.className=d;"button"!==d&&g.addClass("highcharts-label");d&&g.addClass("highcharts-"+d);g.text=f.text("",0,0,w).attr({zIndex:1});
-if("string"===typeof n){var c=/^url\((.*?)\)$/.test(n);if(g.renderer.symbols[n]||c)g.symbolKey=n}g.bBox=e.emptyBBox;g.padding=3;g.paddingLeft=0;g.baselineOffset=0;g.needsBox=f.styledMode||c;g.deferredAttr={};g.alignFactor=0;return g}m(e,h);e.prototype.alignSetter=function(e){e={left:0,center:.5,right:1}[e];e!==this.alignFactor&&(this.alignFactor=e,this.bBox&&L(this.xSetting)&&this.attr({x:this.xSetting}))};e.prototype.anchorXSetter=function(e,v){this.anchorX=e;this.boxAttr(v,Math.round(e)-this.getCrispAdjust()-
-this.xSetting)};e.prototype.anchorYSetter=function(e,v){this.anchorY=e;this.boxAttr(v,e-this.ySetting)};e.prototype.boxAttr=function(e,v){this.box?this.box.attr(e,v):this.deferredAttr[e]=v};e.prototype.css=function(h){if(h){var v={};h=K(h);e.textProps.forEach(function(e){"undefined"!==typeof h[e]&&(v[e]=h[e],delete h[e])});this.text.css(v);var I="fontSize"in v||"fontWeight"in v;if("width"in v||I)this.updateBoxSize(),I&&this.updateTextPadding()}return f.prototype.css.call(this,h)};e.prototype.destroy=
-function(){C(this.element,"mouseenter");C(this.element,"mouseleave");this.text&&this.text.destroy();this.box&&(this.box=this.box.destroy());f.prototype.destroy.call(this)};e.prototype.fillSetter=function(e,v){e&&(this.needsBox=!0);this.fill=e;this.boxAttr(v,e)};e.prototype.getBBox=function(){var e=this.bBox,v=this.padding;return{width:e.width+2*v,height:e.height+2*v,x:e.x-v,y:e.y-v}};e.prototype.getCrispAdjust=function(){return this.renderer.styledMode&&this.box?this.box.strokeWidth()%2/2:(this["stroke-width"]?
-parseInt(this["stroke-width"],10):0)%2/2};e.prototype.heightSetter=function(e){this.heightSetting=e};e.prototype.on=function(e,v){var h=this,D=h.text,n=D&&"SPAN"===D.element.tagName?D:void 0;if(n){var l=function(l){("mouseenter"===e||"mouseleave"===e)&&l.relatedTarget instanceof Element&&(h.element.contains(l.relatedTarget)||n.element.contains(l.relatedTarget))||v.call(h.element,l)};n.on(e,l)}f.prototype.on.call(h,e,l||v);return h};e.prototype.onAdd=function(){var e=this.textStr;this.text.add(this);
-this.attr({text:z(e)?e:"",x:this.x,y:this.y});this.box&&z(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})};e.prototype.paddingSetter=function(e){z(e)&&e!==this.padding&&(this.padding=e,this.updateTextPadding())};e.prototype.paddingLeftSetter=function(e){z(e)&&e!==this.paddingLeft&&(this.paddingLeft=e,this.updateTextPadding())};e.prototype.rSetter=function(e,v){this.boxAttr(v,e)};e.prototype.shadow=function(e){e&&!this.renderer.styledMode&&(this.updateBoxSize(),this.box&&this.box.shadow(e));
-return this};e.prototype.strokeSetter=function(e,v){this.stroke=e;this.boxAttr(v,e)};e.prototype["stroke-widthSetter"]=function(e,v){e&&(this.needsBox=!0);this["stroke-width"]=e;this.boxAttr(v,e)};e.prototype["text-alignSetter"]=function(e){this.textAlign=e};e.prototype.textSetter=function(e){"undefined"!==typeof e&&this.text.attr({text:e});this.updateBoxSize();this.updateTextPadding()};e.prototype.updateBoxSize=function(){var f=this.text.element.style,v={},h=this.padding,D=this.paddingLeft,n=L(this.widthSetting)&&
-L(this.heightSetting)&&!this.textAlign||!z(this.text.textStr)?e.emptyBBox:this.text.getBBox();this.width=(this.widthSetting||n.width||0)+2*h+D;this.height=(this.heightSetting||n.height||0)+2*h;this.baselineOffset=h+Math.min(this.renderer.fontMetrics(f&&f.fontSize,this.text).b,n.height||Infinity);this.needsBox&&(this.box||(f=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect(),f.addClass(("button"===this.className?"":"highcharts-label-box")+(this.className?" highcharts-"+
-this.className+"-box":"")),f.add(this),f=this.getCrispAdjust(),v.x=f,v.y=(this.baseline?-this.baselineOffset:0)+f),v.width=Math.round(this.width),v.height=Math.round(this.height),this.box.attr(F(v,this.deferredAttr)),this.deferredAttr={});this.bBox=n};e.prototype.updateTextPadding=function(){var e=this.text,f=this.baseline?0:this.baselineOffset,h=this.paddingLeft+this.padding;z(this.widthSetting)&&this.bBox&&("center"===this.textAlign||"right"===this.textAlign)&&(h+={center:.5,right:1}[this.textAlign]*
-(this.widthSetting-this.bBox.width));if(h!==e.x||f!==e.y)e.attr("x",h),e.hasBoxWidthChanged&&(this.bBox=e.getBBox(!0),this.updateBoxSize()),"undefined"!==typeof f&&e.attr("y",f);e.x=h;e.y=f};e.prototype.widthSetter=function(e){this.widthSetting=L(e)?e:void 0};e.prototype.xSetter=function(e){this.x=e;this.alignFactor&&(e-=this.alignFactor*((this.widthSetting||this.bBox.width)+2*this.padding),this["forceAnimate:x"]=!0);this.xSetting=Math.round(e);this.attr("translateX",this.xSetting)};e.prototype.ySetter=
-function(e){this.ySetting=this.y=Math.round(e);this.attr("translateY",this.ySetting)};e.emptyBBox={width:0,height:0,x:0,y:0};e.textProps="color cursor direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width".split(" ");return e}(f)});N(m,"Core/Renderer/SVG/SVGRenderer.js",[m["Core/Color/Color.js"],m["Core/Globals.js"],m["Core/Renderer/SVG/SVGElement.js"],m["Core/Renderer/SVG/SVGLabel.js"],m["Core/Utilities.js"]],function(f,h,m,z,F){var P=
-F.addEvent,K=F.attr,C=F.createElement,y=F.css,e=F.defined,I=F.destroyObjectProperties,v=F.extend,x=F.isArray,D=F.isNumber,n=F.isObject,l=F.isString,J=F.merge,w=F.objectEach,r=F.pick,d=F.pInt,g=F.splat,c=F.uniqueKey,a=h.charts,q=h.deg2rad,p=h.doc,B=h.isFirefox,A=h.isMS,G=h.isWebKit;F=h.noop;var M=h.svg,T=h.SVG_NS,Q=h.symbolSizes,O=h.win,E=function(){function u(b,k,a,c,d,g,p){this.width=this.url=this.style=this.isSVG=this.imgCount=this.height=this.gradients=this.globalAnimation=this.defs=this.chartIndex=
-this.cacheKeys=this.cache=this.boxWrapper=this.box=this.alignedObjects=void 0;this.init(b,k,a,c,d,g,p)}u.prototype.init=function(b,k,a,c,d,g,q){var t=this.createElement("svg").attr({version:"1.1","class":"highcharts-root"});q||t.css(this.getStyle(c));c=t.element;b.appendChild(c);K(b,"dir","ltr");-1===b.innerHTML.indexOf("xmlns")&&K(c,"xmlns",this.SVG_NS);this.isSVG=!0;this.box=c;this.boxWrapper=t;this.alignedObjects=[];this.url=(B||G)&&p.getElementsByTagName("base").length?O.location.href.split("#")[0].replace(/<[^>]*>/g,
-"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(p.createTextNode("Created with Highcharts 8.2.2"));this.defs=this.createElement("defs").add();this.allowHTML=g;this.forExport=d;this.styledMode=q;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(k,a,!1);var H;B&&b.getBoundingClientRect&&(k=function(){y(b,{left:0,top:0});H=b.getBoundingClientRect();y(b,{left:Math.ceil(H.left)-H.left+"px",top:Math.ceil(H.top)-H.top+
-"px"})},k(),this.unSubPixelFix=P(O,"resize",k))};u.prototype.definition=function(b){function k(b,t){var c;g(b).forEach(function(b){var d=a.createElement(b.tagName),g={};w(b,function(b,k){"tagName"!==k&&"children"!==k&&"textContent"!==k&&(g[k]=b)});d.attr(g);d.add(t||a.defs);b.textContent&&d.element.appendChild(p.createTextNode(b.textContent));k(b.children||[],d);c=d});return c}var a=this;return k(b)};u.prototype.getStyle=function(b){return this.style=v({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',
-fontSize:"12px"},b)};u.prototype.setStyle=function(b){this.boxWrapper.css(this.getStyle(b))};u.prototype.isHidden=function(){return!this.boxWrapper.getBBox().width};u.prototype.destroy=function(){var b=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();I(this.gradients||{});this.gradients=null;b&&(this.defs=b.destroy());this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null};u.prototype.createElement=function(b){var k=new this.Element;k.init(this,b);return k};u.prototype.getRadialAttr=
-function(b,k){return{cx:b[0]-b[2]/2+k.cx*b[2],cy:b[1]-b[2]/2+k.cy*b[2],r:k.r*b[2]}};u.prototype.truncate=function(b,k,a,c,d,g,q){var t=this,H=b.rotation,R,u=c?1:0,A=(a||c).length,r=A,B=[],n=function(b){k.firstChild&&k.removeChild(k.firstChild);b&&k.appendChild(p.createTextNode(b))},l=function(g,p){p=p||g;if("undefined"===typeof B[p])if(k.getSubStringLength)try{B[p]=d+k.getSubStringLength(0,c?p+1:p)}catch(ja){""}else t.getSpanWidth&&(n(q(a||c,g)),B[p]=d+t.getSpanWidth(b,k));return B[p]},e;b.rotation=
-0;var w=l(k.textContent.length);if(e=d+w>g){for(;u<=A;)r=Math.ceil((u+A)/2),c&&(R=q(c,r)),w=l(r,R&&R.length-1),u===A?u=A+1:w>g?A=r-1:u=r;0===A?n(""):a&&A===a.length-1||n(R||q(a||c,r))}c&&c.splice(0,r);b.actualWidth=w;b.rotation=H;return e};u.prototype.buildText=function(b){var k=b.element,a=this,c=a.forExport,g=r(b.textStr,"").toString(),q=-1!==g.indexOf("<"),u=k.childNodes,A,B=K(k,"x"),n=b.styles,e=b.textWidth,G=n&&n.lineHeight,f=n&&n.textOutline,V=n&&"ellipsis"===n.textOverflow,E=n&&"nowrap"===
-n.whiteSpace,h=n&&n.fontSize,v,D=u.length;n=e&&!b.added&&this.box;var O=function(b){var t;a.styledMode||(t=/(px|em)$/.test(b&&b.style.fontSize)?b.style.fontSize:h||a.style.fontSize||12);return G?d(G):a.fontMetrics(t,b.getAttribute("style")?b:k).h},J=function(b,k){w(a.escapes,function(a,t){k&&-1!==k.indexOf(a)||(b=b.toString().replace(new RegExp(a,"g"),t))});return b},x=function(b,k){var a=b.indexOf("<");b=b.substring(a,b.indexOf(">")-a);a=b.indexOf(k+"=");if(-1!==a&&(a=a+k.length+1,k=b.charAt(a),
-'"'===k||"'"===k))return b=b.substring(a+1),b.substring(0,b.indexOf(k))},I=/<br.*?>/g;var m=[g,V,E,G,f,h,e].join();if(m!==b.textCache){for(b.textCache=m;D--;)k.removeChild(u[D]);q||f||V||e||-1!==g.indexOf(" ")&&(!E||I.test(g))?(n&&n.appendChild(k),q?(g=a.styledMode?g.replace(/<(b|strong)>/g,'<span class="highcharts-strong">').replace(/<(i|em)>/g,'<span class="highcharts-emphasized">'):g.replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">'),
-g=g.replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,"</span>").split(I)):g=[g],g=g.filter(function(b){return""!==b}),g.forEach(function(t,d){var g=0,H=0;t=t.replace(/^\s+|\s+$/g,"").replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");var q=t.split("|||");q.forEach(function(t){if(""!==t||1===q.length){var R={},u=p.createElementNS(a.SVG_NS,"tspan"),n,r;(n=x(t,"class"))&&K(u,"class",n);if(n=x(t,"style"))n=n.replace(/(;| |^)color([ :])/,"$1fill$2"),K(u,"style",n);if((r=x(t,"href"))&&
-!c&&-1===r.split(":")[0].toLowerCase().indexOf("javascript")){var l=p.createElementNS(a.SVG_NS,"a");K(l,"href",r);K(u,"class","highcharts-anchor");l.appendChild(u);a.styledMode||y(u,{cursor:"pointer"})}t=J(t.replace(/<[a-zA-Z\/](.|\n)*?>/g,"")||" ");if(" "!==t){u.appendChild(p.createTextNode(t));g?R.dx=0:d&&null!==B&&(R.x=B);K(u,R);k.appendChild(l||u);!g&&v&&(!M&&c&&y(u,{display:"block"}),K(u,"dy",O(u)));if(e){var w=t.replace(/([^\^])-/g,"$1- ").split(" ");R=!E&&(1<q.length||d||1<w.length);l=0;r=
-O(u);if(V)A=a.truncate(b,u,t,void 0,0,Math.max(0,e-parseInt(h||12,10)),function(b,k){return b.substring(0,k)+"\u2026"});else if(R)for(;w.length;)w.length&&!E&&0<l&&(u=p.createElementNS(T,"tspan"),K(u,{dy:r,x:B}),n&&K(u,"style",n),u.appendChild(p.createTextNode(w.join(" ").replace(/- /g,"-"))),k.appendChild(u)),a.truncate(b,u,null,w,0===l?H:0,e,function(b,k){return w.slice(0,k).join(" ").replace(/- /g,"-")}),H=b.actualWidth,l++}g++}}});v=v||k.childNodes.length}),V&&A&&b.attr("title",J(b.textStr||"",
-["&lt;","&gt;"])),n&&n.removeChild(k),l(f)&&b.applyTextOutline&&b.applyTextOutline(f)):k.appendChild(p.createTextNode(J(g)))}};u.prototype.getContrast=function(b){b=f.parse(b).rgba;b[0]*=1;b[1]*=1.2;b[2]*=.5;return 459<b[0]+b[1]+b[2]?"#000000":"#FFFFFF"};u.prototype.button=function(b,k,a,c,d,g,p,q,u,n){var t=this.label(b,k,a,u,void 0,void 0,n,void 0,"button"),H=0,R=this.styledMode;b=(d=d?J(d):d)&&d.style||{};d&&d.style&&delete d.style;t.attr(J({padding:8,r:2},d));if(!R){d=J({fill:"#f7f7f7",stroke:"#cccccc",
-"stroke-width":1,style:{color:"#333333",cursor:"pointer",fontWeight:"normal"}},{style:b},d);var r=d.style;delete d.style;g=J(d,{fill:"#e6e6e6"},g);var B=g.style;delete g.style;p=J(d,{fill:"#e6ebf5",style:{color:"#000000",fontWeight:"bold"}},p);var l=p.style;delete p.style;q=J(d,{style:{color:"#cccccc"}},q);var e=q.style;delete q.style}P(t.element,A?"mouseover":"mouseenter",function(){3!==H&&t.setState(1)});P(t.element,A?"mouseout":"mouseleave",function(){3!==H&&t.setState(H)});t.setState=function(b){1!==
-b&&(t.state=H=b);t.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass("highcharts-button-"+["normal","hover","pressed","disabled"][b||0]);R||t.attr([d,g,p,q][b||0]).css([r,B,l,e][b||0])};R||t.attr(d).css(v({cursor:"default"},r));return t.on("click",function(b){3!==H&&c.call(t,b)})};u.prototype.crispLine=function(b,k,a){void 0===a&&(a="round");var t=b[0],c=b[1];t[1]===c[1]&&(t[1]=c[1]=Math[a](t[1])-k%2/2);t[2]===c[2]&&(t[2]=c[2]=Math[a](t[2])+k%2/2);return b};u.prototype.path=
-function(b){var k=this.styledMode?{}:{fill:"none"};x(b)?k.d=b:n(b)&&v(k,b);return this.createElement("path").attr(k)};u.prototype.circle=function(b,k,a){b=n(b)?b:"undefined"===typeof b?{}:{x:b,y:k,r:a};k=this.createElement("circle");k.xSetter=k.ySetter=function(b,k,a){a.setAttribute("c"+k,b)};return k.attr(b)};u.prototype.arc=function(b,k,a,c,d,g){n(b)?(c=b,k=c.y,a=c.r,b=c.x):c={innerR:c,start:d,end:g};b=this.symbol("arc",b,k,a,a,c);b.r=a;return b};u.prototype.rect=function(b,k,a,c,d,g){d=n(b)?b.r:
-d;var t=this.createElement("rect");b=n(b)?b:"undefined"===typeof b?{}:{x:b,y:k,width:Math.max(a,0),height:Math.max(c,0)};this.styledMode||("undefined"!==typeof g&&(b.strokeWidth=g,b=t.crisp(b)),b.fill="none");d&&(b.r=d);t.rSetter=function(b,k,a){t.r=b;K(a,{rx:b,ry:b})};t.rGetter=function(){return t.r};return t.attr(b)};u.prototype.setSize=function(b,k,a){var t=this.alignedObjects,c=t.length;this.width=b;this.height=k;for(this.boxWrapper.animate({width:b,height:k},{step:function(){this.attr({viewBox:"0 0 "+
-this.attr("width")+" "+this.attr("height")})},duration:r(a,!0)?void 0:0});c--;)t[c].align()};u.prototype.g=function(b){var k=this.createElement("g");return b?k.attr({"class":"highcharts-"+b}):k};u.prototype.image=function(b,k,a,c,d,g){var t={preserveAspectRatio:"none"},p=function(b,k){b.setAttributeNS?b.setAttributeNS("http://www.w3.org/1999/xlink","href",k):b.setAttribute("hc-svg-href",k)},q=function(k){p(H.element,b);g.call(H,k)};1<arguments.length&&v(t,{x:k,y:a,width:c,height:d});var H=this.createElement("image").attr(t);
-g?(p(H.element,"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="),t=new O.Image,P(t,"load",q),t.src=b,t.complete&&q({})):p(H.element,b);return H};u.prototype.symbol=function(b,k,t,c,d,g){var q=this,H=/^url\((.*?)\)$/,u=H.test(b),R=!u&&(this.symbols[b]?b:"circle"),n=R&&this.symbols[R],A;if(n){"number"===typeof k&&(A=n.call(this.symbols,Math.round(k||0),Math.round(t||0),c||0,d||0,g));var B=this.path(A);q.styledMode||B.attr("fill","none");v(B,{symbolName:R,x:k,y:t,width:c,
-height:d});g&&v(B,g)}else if(u){var l=b.match(H)[1];B=this.image(l);B.imgwidth=r(Q[l]&&Q[l].width,g&&g.width);B.imgheight=r(Q[l]&&Q[l].height,g&&g.height);var w=function(){B.attr({width:B.width,height:B.height})};["width","height"].forEach(function(b){B[b+"Setter"]=function(b,k){var a={},t=this["img"+k],c="width"===k?"translateX":"translateY";this[k]=b;e(t)&&(g&&"within"===g.backgroundSize&&this.width&&this.height&&(t=Math.round(t*Math.min(this.width/this.imgwidth,this.height/this.imgheight))),this.element&&
-this.element.setAttribute(k,t),this.alignByTranslate||(a[c]=((this[k]||0)-t)/2,this.attr(a)))}});e(k)&&B.attr({x:k,y:t});B.isImg=!0;e(B.imgwidth)&&e(B.imgheight)?w():(B.attr({width:0,height:0}),C("img",{onload:function(){var b=a[q.chartIndex];0===this.width&&(y(this,{position:"absolute",top:"-999em"}),p.body.appendChild(this));Q[l]={width:this.width,height:this.height};B.imgwidth=this.width;B.imgheight=this.height;B.element&&w();this.parentNode&&this.parentNode.removeChild(this);q.imgCount--;if(!q.imgCount&&
-b&&!b.hasLoaded)b.onload()},src:l}),this.imgCount++)}return B};u.prototype.clipRect=function(b,k,a,d){var t=c()+"-",g=this.createElement("clipPath").attr({id:t}).add(this.defs);b=this.rect(b,k,a,d,0).add(g);b.id=t;b.clipPath=g;b.count=0;return b};u.prototype.text=function(b,k,a,c){var t={};if(c&&(this.allowHTML||!this.forExport))return this.html(b,k,a);t.x=Math.round(k||0);a&&(t.y=Math.round(a));e(b)&&(t.text=b);b=this.createElement("text").attr(t);c||(b.xSetter=function(b,k,a){var t=a.getElementsByTagName("tspan"),
-c=a.getAttribute(k),d;for(d=0;d<t.length;d++){var g=t[d];g.getAttribute(k)===c&&g.setAttribute(k,b)}a.setAttribute(k,b)});return b};u.prototype.fontMetrics=function(b,k){b=!this.styledMode&&/px/.test(b)||!O.getComputedStyle?b||k&&k.style&&k.style.fontSize||this.style&&this.style.fontSize:k&&m.prototype.getStyle.call(k,"font-size");b=/px/.test(b)?d(b):12;k=24>b?b+3:Math.round(1.2*b);return{h:k,b:Math.round(.8*k),f:b}};u.prototype.rotCorr=function(b,k,a){var t=b;k&&a&&(t=Math.max(t*Math.cos(k*q),4));
-return{x:-b/3*Math.sin(k*q),y:t}};u.prototype.pathToSegments=function(b){for(var k=[],a=[],c={A:8,C:7,H:2,L:3,M:3,Q:5,S:5,T:3,V:2},d=0;d<b.length;d++)l(a[0])&&D(b[d])&&a.length===c[a[0].toUpperCase()]&&b.splice(d,0,a[0].replace("M","L").replace("m","l")),"string"===typeof b[d]&&(a.length&&k.push(a.slice(0)),a.length=0),a.push(b[d]);k.push(a.slice(0));return k};u.prototype.label=function(b,k,a,c,d,g,p,q,u){return new z(this,b,k,a,c,d,g,p,q,u)};return u}();E.prototype.Element=m;E.prototype.SVG_NS=T;
-E.prototype.draw=F;E.prototype.escapes={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"};E.prototype.symbols={circle:function(a,b,k,t){return this.arc(a+k/2,b+t/2,k/2,t/2,{start:.5*Math.PI,end:2.5*Math.PI,open:!1})},square:function(a,b,k,t){return[["M",a,b],["L",a+k,b],["L",a+k,b+t],["L",a,b+t],["Z"]]},triangle:function(a,b,k,t){return[["M",a+k/2,b],["L",a+k,b+t],["L",a,b+t],["Z"]]},"triangle-down":function(a,b,k,t){return[["M",a,b],["L",a+k,b],["L",a+k/2,b+t],["Z"]]},diamond:function(a,
-b,k,t){return[["M",a+k/2,b],["L",a+k,b+t/2],["L",a+k/2,b+t],["L",a,b+t/2],["Z"]]},arc:function(a,b,k,t,c){var d=[];if(c){var g=c.start||0,p=c.end||0,q=c.r||k;k=c.r||t||k;var H=.001>Math.abs(p-g-2*Math.PI);p-=.001;t=c.innerR;H=r(c.open,H);var u=Math.cos(g),B=Math.sin(g),n=Math.cos(p),A=Math.sin(p);g=r(c.longArc,.001>p-g-Math.PI?0:1);d.push(["M",a+q*u,b+k*B],["A",q,k,0,g,r(c.clockwise,1),a+q*n,b+k*A]);e(t)&&d.push(H?["M",a+t*n,b+t*A]:["L",a+t*n,b+t*A],["A",t,t,0,g,e(c.clockwise)?1-c.clockwise:0,a+t*
-u,b+t*B]);H||d.push(["Z"])}return d},callout:function(a,b,k,t,c){var d=Math.min(c&&c.r||0,k,t),g=d+6,p=c&&c.anchorX||0;c=c&&c.anchorY||0;var q=[["M",a+d,b],["L",a+k-d,b],["C",a+k,b,a+k,b,a+k,b+d],["L",a+k,b+t-d],["C",a+k,b+t,a+k,b+t,a+k-d,b+t],["L",a+d,b+t],["C",a,b+t,a,b+t,a,b+t-d],["L",a,b+d],["C",a,b,a,b,a+d,b]];p&&p>k?c>b+g&&c<b+t-g?q.splice(3,1,["L",a+k,c-6],["L",a+k+6,c],["L",a+k,c+6],["L",a+k,b+t-d]):q.splice(3,1,["L",a+k,t/2],["L",p,c],["L",a+k,t/2],["L",a+k,b+t-d]):p&&0>p?c>b+g&&c<b+t-g?
-q.splice(7,1,["L",a,c+6],["L",a-6,c],["L",a,c-6],["L",a,b+d]):q.splice(7,1,["L",a,t/2],["L",p,c],["L",a,t/2],["L",a,b+d]):c&&c>t&&p>a+g&&p<a+k-g?q.splice(5,1,["L",p+6,b+t],["L",p,b+t+6],["L",p-6,b+t],["L",a+d,b+t]):c&&0>c&&p>a+g&&p<a+k-g&&q.splice(1,1,["L",p-6,b],["L",p,b-6],["L",p+6,b],["L",k-d,b]);return q}};h.SVGRenderer=E;h.Renderer=h.SVGRenderer;return h.Renderer});N(m,"Core/Renderer/HTML/HTMLElement.js",[m["Core/Globals.js"],m["Core/Renderer/SVG/SVGElement.js"],m["Core/Utilities.js"]],function(f,
-h,m){var z=m.css,F=m.defined,P=m.extend,K=m.pick,C=m.pInt,y=f.isFirefox;P(h.prototype,{htmlCss:function(e){var f="SPAN"===this.element.tagName&&e&&"width"in e,h=K(f&&e.width,void 0);if(f){delete e.width;this.textWidth=h;var x=!0}e&&"ellipsis"===e.textOverflow&&(e.whiteSpace="nowrap",e.overflow="hidden");this.styles=P(this.styles,e);z(this.element,e);x&&this.htmlUpdateTransform();return this},htmlGetBBox:function(){var e=this.element;return{x:e.offsetLeft,y:e.offsetTop,width:e.offsetWidth,height:e.offsetHeight}},
-htmlUpdateTransform:function(){if(this.added){var e=this.renderer,f=this.element,h=this.translateX||0,x=this.translateY||0,D=this.x||0,n=this.y||0,l=this.textAlign||"left",J={left:0,center:.5,right:1}[l],w=this.styles,r=w&&w.whiteSpace;z(f,{marginLeft:h,marginTop:x});!e.styledMode&&this.shadows&&this.shadows.forEach(function(a){z(a,{marginLeft:h+1,marginTop:x+1})});this.inverted&&[].forEach.call(f.childNodes,function(a){e.invertChild(a,f)});if("SPAN"===f.tagName){w=this.rotation;var d=this.textWidth&&
-C(this.textWidth),g=[w,l,f.innerHTML,this.textWidth,this.textAlign].join(),c;(c=d!==this.oldTextWidth)&&!(c=d>this.oldTextWidth)&&((c=this.textPxLength)||(z(f,{width:"",whiteSpace:r||"nowrap"}),c=f.offsetWidth),c=c>d);c&&(/[ \-]/.test(f.textContent||f.innerText)||"ellipsis"===f.style.textOverflow)?(z(f,{width:d+"px",display:"block",whiteSpace:r||"normal"}),this.oldTextWidth=d,this.hasBoxWidthChanged=!0):this.hasBoxWidthChanged=!1;g!==this.cTT&&(r=e.fontMetrics(f.style.fontSize,f).b,!F(w)||w===(this.oldRotation||
-0)&&l===this.oldAlign||this.setSpanRotation(w,J,r),this.getSpanCorrection(!F(w)&&this.textPxLength||f.offsetWidth,r,J,w,l));z(f,{left:D+(this.xCorr||0)+"px",top:n+(this.yCorr||0)+"px"});this.cTT=g;this.oldRotation=w;this.oldAlign=l}}else this.alignOnAdd=!0},setSpanRotation:function(e,f,h){var v={},D=this.renderer.getTransformKey();v[D]=v.transform="rotate("+e+"deg)";v[D+(y?"Origin":"-origin")]=v.transformOrigin=100*f+"% "+h+"px";z(this.element,v)},getSpanCorrection:function(e,f,h){this.xCorr=-e*h;
-this.yCorr=-f}});return h});N(m,"Core/Renderer/HTML/HTMLRenderer.js",[m["Core/Globals.js"],m["Core/Renderer/SVG/SVGElement.js"],m["Core/Renderer/SVG/SVGRenderer.js"],m["Core/Utilities.js"]],function(f,h,m,z){var F=f.isFirefox,P=f.isMS,K=f.isWebKit,C=f.win,y=z.attr,e=z.createElement,I=z.extend,v=z.pick;I(m.prototype,{getTransformKey:function(){return P&&!/Edge/.test(C.navigator.userAgent)?"-ms-transform":K?"-webkit-transform":F?"MozTransform":C.opera?"-o-transform":""},html:function(f,D,n){var l=this.createElement("span"),
-J=l.element,w=l.renderer,r=w.isSVG,d=function(d,c){["opacity","visibility"].forEach(function(a){d[a+"Setter"]=function(g,p,B){var q=d.div?d.div.style:c;h.prototype[a+"Setter"].call(this,g,p,B);q&&(q[p]=g)}});d.addedSetters=!0};l.textSetter=function(d){d!==J.innerHTML&&(delete this.bBox,delete this.oldTextWidth);this.textStr=d;J.innerHTML=v(d,"");l.doTransform=!0};r&&d(l,l.element.style);l.xSetter=l.ySetter=l.alignSetter=l.rotationSetter=function(d,c){"align"===c?l.alignValue=l.textAlign=d:l[c]=d;
-l.doTransform=!0};l.afterSetters=function(){this.doTransform&&(this.htmlUpdateTransform(),this.doTransform=!1)};l.attr({text:f,x:Math.round(D),y:Math.round(n)}).css({position:"absolute"});w.styledMode||l.css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});J.style.whiteSpace="nowrap";l.css=l.htmlCss;r&&(l.add=function(g){var c=w.box.parentNode,a=[];if(this.parentGroup=g){var q=g.div;if(!q){for(;g;)a.push(g),g=g.parentGroup;a.reverse().forEach(function(g){function p(a,c){g[c]=a;"translateX"===
-c?r.left=a+"px":r.top=a+"px";g.doTransform=!0}var n=y(g.element,"class");q=g.div=g.div||e("div",n?{className:n}:void 0,{position:"absolute",left:(g.translateX||0)+"px",top:(g.translateY||0)+"px",display:g.display,opacity:g.opacity,pointerEvents:g.styles&&g.styles.pointerEvents},q||c);var r=q.style;I(g,{classSetter:function(a){return function(c){this.element.setAttribute("class",c);a.className=c}}(q),on:function(){a[0].div&&l.on.apply({element:a[0].div},arguments);return g},translateXSetter:p,translateYSetter:p});
-g.addedSetters||d(g)})}}else q=c;q.appendChild(J);l.added=!0;l.alignOnAdd&&l.htmlUpdateTransform();return l});return l}});return m});N(m,"Core/Axis/Tick.js",[m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h){var m=h.clamp,z=h.correctFloat,F=h.defined,L=h.destroyObjectProperties,K=h.extend,C=h.fireEvent,y=h.isNumber,e=h.merge,I=h.objectEach,v=h.pick,x=f.deg2rad;h=function(){function f(n,l,e,w,r){this.isNewLabel=this.isNew=!0;this.axis=n;this.pos=l;this.type=e||"";this.parameters=r||{};this.tickmarkOffset=
-this.parameters.tickmarkOffset;this.options=this.parameters.options;C(this,"init");e||w||this.addLabel()}f.prototype.addLabel=function(){var n=this,l=n.axis,e=l.options,w=l.chart,r=l.categories,d=l.logarithmic,g=l.names,c=n.pos,a=v(n.options&&n.options.labels,e.labels),q=l.tickPositions,p=c===q[0],B=c===q[q.length-1];g=this.parameters.category||(r?v(r[c],g[c],c):c);var A=n.label;r=(!a.step||1===a.step)&&1===l.tickInterval;q=q.info;var f,h;if(l.dateTime&&q){var D=w.time.resolveDTLFormat(e.dateTimeLabelFormats[!e.grid&&
-q.higherRanks[c]||q.unitName]);var x=D.main}n.isFirst=p;n.isLast=B;n.formatCtx={axis:l,chart:w,isFirst:p,isLast:B,dateTimeLabelFormat:x,tickPositionInfo:q,value:d?z(d.lin2log(g)):g,pos:c};e=l.labelFormatter.call(n.formatCtx,this.formatCtx);if(h=D&&D.list)n.shortenLabel=function(){for(f=0;f<h.length;f++)if(A.attr({text:l.labelFormatter.call(K(n.formatCtx,{dateTimeLabelFormat:h[f]}))}),A.getBBox().width<l.getSlotWidth(n)-2*v(a.padding,5))return;A.attr({text:""})};r&&l._addedPlotLB&&n.moveLabel(e,a);
-F(A)||n.movedLabel?A&&A.textStr!==e&&!r&&(!A.textWidth||a.style&&a.style.width||A.styles.width||A.css({width:null}),A.attr({text:e}),A.textPxLength=A.getBBox().width):(n.label=A=n.createLabel({x:0,y:0},e,a),n.rotation=0)};f.prototype.createLabel=function(n,l,f){var w=this.axis,r=w.chart;if(n=F(l)&&f.enabled?r.renderer.text(l,n.x,n.y,f.useHTML).add(w.labelGroup):null)r.styledMode||n.css(e(f.style)),n.textPxLength=n.getBBox().width;return n};f.prototype.destroy=function(){L(this,this.axis)};f.prototype.getPosition=
-function(n,l,e,w){var r=this.axis,d=r.chart,g=w&&d.oldChartHeight||d.chartHeight;n={x:n?z(r.translate(l+e,null,null,w)+r.transB):r.left+r.offset+(r.opposite?(w&&d.oldChartWidth||d.chartWidth)-r.right-r.left:0),y:n?g-r.bottom+r.offset-(r.opposite?r.height:0):z(g-r.translate(l+e,null,null,w)-r.transB)};n.y=m(n.y,-1E5,1E5);C(this,"afterGetPosition",{pos:n});return n};f.prototype.getLabelPosition=function(n,l,e,w,r,d,g,c){var a=this.axis,q=a.transA,p=a.isLinked&&a.linkedParent?a.linkedParent.reversed:
-a.reversed,B=a.staggerLines,A=a.tickRotCorr||{x:0,y:0},f=r.y,h=w||a.reserveSpaceDefault?0:-a.labelOffset*("center"===a.labelAlign?.5:1),v={};F(f)||(f=0===a.side?e.rotation?-8:-e.getBBox().height:2===a.side?A.y+8:Math.cos(e.rotation*x)*(A.y-e.getBBox(!1,0).height/2));n=n+r.x+h+A.x-(d&&w?d*q*(p?-1:1):0);l=l+f-(d&&!w?d*q*(p?1:-1):0);B&&(e=g/(c||1)%B,a.opposite&&(e=B-e-1),l+=a.labelOffset/B*e);v.x=n;v.y=Math.round(l);C(this,"afterGetLabelPosition",{pos:v,tickmarkOffset:d,index:g});return v};f.prototype.getLabelSize=
-function(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0};f.prototype.getMarkPath=function(n,e,f,w,r,d){return d.crispLine([["M",n,e],["L",n+(r?0:-f),e+(r?f:0)]],w)};f.prototype.handleOverflow=function(n){var e=this.axis,f=e.options.labels,w=n.x,r=e.chart.chartWidth,d=e.chart.spacing,g=v(e.labelLeft,Math.min(e.pos,d[3]));d=v(e.labelRight,Math.max(e.isRadial?0:e.pos+e.len,r-d[1]));var c=this.label,a=this.rotation,q={left:0,center:.5,right:1}[e.labelAlign||c.attr("align")],
-p=c.getBBox().width,B=e.getSlotWidth(this),A=B,G=1,h,D={};if(a||"justify"!==v(f.overflow,"justify"))0>a&&w-q*p<g?h=Math.round(w/Math.cos(a*x)-g):0<a&&w+q*p>d&&(h=Math.round((r-w)/Math.cos(a*x)));else if(r=w+(1-q)*p,w-q*p<g?A=n.x+A*(1-q)-g:r>d&&(A=d-n.x+A*q,G=-1),A=Math.min(B,A),A<B&&"center"===e.labelAlign&&(n.x+=G*(B-A-q*(B-Math.min(p,A)))),p>A||e.autoRotation&&(c.styles||{}).width)h=A;h&&(this.shortenLabel?this.shortenLabel():(D.width=Math.floor(h)+"px",(f.style||{}).textOverflow||(D.textOverflow=
-"ellipsis"),c.css(D)))};f.prototype.moveLabel=function(n,e){var l=this,w=l.label,r=!1,d=l.axis,g=d.reversed;w&&w.textStr===n?(l.movedLabel=w,r=!0,delete l.label):I(d.ticks,function(a){r||a.isNew||a===l||!a.label||a.label.textStr!==n||(l.movedLabel=a.label,r=!0,a.labelPos=l.movedLabel.xy,delete a.label)});if(!r&&(l.labelPos||w)){var c=l.labelPos||w.xy;w=d.horiz?g?0:d.width+d.left:c.x;d=d.horiz?c.y:g?d.width+d.left:0;l.movedLabel=l.createLabel({x:w,y:d},n,e);l.movedLabel&&l.movedLabel.attr({opacity:0})}};
-f.prototype.render=function(e,l,f){var n=this.axis,r=n.horiz,d=this.pos,g=v(this.tickmarkOffset,n.tickmarkOffset);d=this.getPosition(r,d,g,l);g=d.x;var c=d.y;n=r&&g===n.pos+n.len||!r&&c===n.pos?-1:1;f=v(f,1);this.isActive=!0;this.renderGridLine(l,f,n);this.renderMark(d,f,n);this.renderLabel(d,l,f,e);this.isNew=!1;C(this,"afterRender")};f.prototype.renderGridLine=function(n,e,f){var l=this.axis,r=l.options,d=this.gridLine,g={},c=this.pos,a=this.type,q=v(this.tickmarkOffset,l.tickmarkOffset),p=l.chart.renderer,
-B=a?a+"Grid":"grid",A=r[B+"LineWidth"],G=r[B+"LineColor"];r=r[B+"LineDashStyle"];d||(l.chart.styledMode||(g.stroke=G,g["stroke-width"]=A,r&&(g.dashstyle=r)),a||(g.zIndex=1),n&&(e=0),this.gridLine=d=p.path().attr(g).addClass("highcharts-"+(a?a+"-":"")+"grid-line").add(l.gridGroup));if(d&&(f=l.getPlotLinePath({value:c+q,lineWidth:d.strokeWidth()*f,force:"pass",old:n})))d[n||this.isNew?"attr":"animate"]({d:f,opacity:e})};f.prototype.renderMark=function(n,e,f){var l=this.axis,r=l.options,d=l.chart.renderer,
-g=this.type,c=g?g+"Tick":"tick",a=l.tickSize(c),q=this.mark,p=!q,B=n.x;n=n.y;var A=v(r[c+"Width"],!g&&l.isXAxis?1:0);r=r[c+"Color"];a&&(l.opposite&&(a[0]=-a[0]),p&&(this.mark=q=d.path().addClass("highcharts-"+(g?g+"-":"")+"tick").add(l.axisGroup),l.chart.styledMode||q.attr({stroke:r,"stroke-width":A})),q[p?"attr":"animate"]({d:this.getMarkPath(B,n,a[0],q.strokeWidth()*f,l.horiz,d),opacity:e}))};f.prototype.renderLabel=function(e,l,f,w){var n=this.axis,d=n.horiz,g=n.options,c=this.label,a=g.labels,
-q=a.step;n=v(this.tickmarkOffset,n.tickmarkOffset);var p=!0,B=e.x;e=e.y;c&&y(B)&&(c.xy=e=this.getLabelPosition(B,e,c,d,a,n,w,q),this.isFirst&&!this.isLast&&!v(g.showFirstLabel,1)||this.isLast&&!this.isFirst&&!v(g.showLastLabel,1)?p=!1:!d||a.step||a.rotation||l||0===f||this.handleOverflow(e),q&&w%q&&(p=!1),p&&y(e.y)?(e.opacity=f,c[this.isNewLabel?"attr":"animate"](e),this.isNewLabel=!1):(c.attr("y",-9999),this.isNewLabel=!0))};f.prototype.replaceMovedLabel=function(){var e=this.label,l=this.axis,f=
-l.reversed;if(e&&!this.isNew){var w=l.horiz?f?l.left:l.width+l.left:e.xy.x;f=l.horiz?e.xy.y:f?l.width+l.top:l.top;e.animate({x:w,y:f,opacity:0},void 0,e.destroy);delete this.label}l.isDirty=!0;this.label=this.movedLabel;delete this.movedLabel};return f}();f.Tick=h;return f.Tick});N(m,"Core/Time.js",[m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h){var m=h.defined,z=h.error,F=h.extend,L=h.isObject,K=h.merge,C=h.objectEach,y=h.pad,e=h.pick,I=h.splat,v=h.timeUnits,x=f.win;h=function(){function h(e){this.options=
-{};this.variableTimezone=this.useUTC=!1;this.Date=x.Date;this.getTimezoneOffset=this.timezoneOffsetFunction();this.update(e)}h.prototype.get=function(e,l){if(this.variableTimezone||this.timezoneOffset){var n=l.getTime(),f=n-this.getTimezoneOffset(l);l.setTime(f);e=l["getUTC"+e]();l.setTime(n);return e}return this.useUTC?l["getUTC"+e]():l["get"+e]()};h.prototype.set=function(e,l,f){if(this.variableTimezone||this.timezoneOffset){if("Milliseconds"===e||"Seconds"===e||"Minutes"===e)return l["setUTC"+
-e](f);var n=this.getTimezoneOffset(l);n=l.getTime()-n;l.setTime(n);l["setUTC"+e](f);e=this.getTimezoneOffset(l);n=l.getTime()+e;return l.setTime(n)}return this.useUTC?l["setUTC"+e](f):l["set"+e](f)};h.prototype.update=function(n){var l=e(n&&n.useUTC,!0);this.options=n=K(!0,this.options||{},n);this.Date=n.Date||x.Date||Date;this.timezoneOffset=(this.useUTC=l)&&n.timezoneOffset;this.getTimezoneOffset=this.timezoneOffsetFunction();this.variableTimezone=!(l&&!n.getTimezoneOffset&&!n.timezone)};h.prototype.makeTime=
-function(n,l,h,w,r,d){if(this.useUTC){var g=this.Date.UTC.apply(0,arguments);var c=this.getTimezoneOffset(g);g+=c;var a=this.getTimezoneOffset(g);c!==a?g+=a-c:c-36E5!==this.getTimezoneOffset(g-36E5)||f.isSafari||(g-=36E5)}else g=(new this.Date(n,l,e(h,1),e(w,0),e(r,0),e(d,0))).getTime();return g};h.prototype.timezoneOffsetFunction=function(){var e=this,l=this.options,f=l.moment||x.moment;if(!this.useUTC)return function(e){return 6E4*(new Date(e.toString())).getTimezoneOffset()};if(l.timezone){if(f)return function(e){return 6E4*
--f.tz(e,l.timezone).utcOffset()};z(25)}return this.useUTC&&l.getTimezoneOffset?function(e){return 6E4*l.getTimezoneOffset(e.valueOf())}:function(){return 6E4*(e.timezoneOffset||0)}};h.prototype.dateFormat=function(n,l,h){var w;if(!m(l)||isNaN(l))return(null===(w=f.defaultOptions.lang)||void 0===w?void 0:w.invalidDate)||"";n=e(n,"%Y-%m-%d %H:%M:%S");var r=this;w=new this.Date(l);var d=this.get("Hours",w),g=this.get("Day",w),c=this.get("Date",w),a=this.get("Month",w),q=this.get("FullYear",w),p=f.defaultOptions.lang,
-B=null===p||void 0===p?void 0:p.weekdays,A=null===p||void 0===p?void 0:p.shortWeekdays;w=F({a:A?A[g]:B[g].substr(0,3),A:B[g],d:y(c),e:y(c,2," "),w:g,b:p.shortMonths[a],B:p.months[a],m:y(a+1),o:a+1,y:q.toString().substr(2,2),Y:q,H:y(d),k:d,I:y(d%12||12),l:d%12||12,M:y(this.get("Minutes",w)),p:12>d?"AM":"PM",P:12>d?"am":"pm",S:y(w.getSeconds()),L:y(Math.floor(l%1E3),3)},f.dateFormats);C(w,function(a,c){for(;-1!==n.indexOf("%"+c);)n=n.replace("%"+c,"function"===typeof a?a.call(r,l):a)});return h?n.substr(0,
-1).toUpperCase()+n.substr(1):n};h.prototype.resolveDTLFormat=function(e){return L(e,!0)?e:(e=I(e),{main:e[0],from:e[1],to:e[2]})};h.prototype.getTimeTicks=function(n,l,f,h){var r=this,d=[],g={};var c=new r.Date(l);var a=n.unitRange,q=n.count||1,p;h=e(h,1);if(m(l)){r.set("Milliseconds",c,a>=v.second?0:q*Math.floor(r.get("Milliseconds",c)/q));a>=v.second&&r.set("Seconds",c,a>=v.minute?0:q*Math.floor(r.get("Seconds",c)/q));a>=v.minute&&r.set("Minutes",c,a>=v.hour?0:q*Math.floor(r.get("Minutes",c)/q));
-a>=v.hour&&r.set("Hours",c,a>=v.day?0:q*Math.floor(r.get("Hours",c)/q));a>=v.day&&r.set("Date",c,a>=v.month?1:Math.max(1,q*Math.floor(r.get("Date",c)/q)));if(a>=v.month){r.set("Month",c,a>=v.year?0:q*Math.floor(r.get("Month",c)/q));var B=r.get("FullYear",c)}a>=v.year&&r.set("FullYear",c,B-B%q);a===v.week&&(B=r.get("Day",c),r.set("Date",c,r.get("Date",c)-B+h+(B<h?-7:0)));B=r.get("FullYear",c);h=r.get("Month",c);var A=r.get("Date",c),w=r.get("Hours",c);l=c.getTime();r.variableTimezone&&(p=f-l>4*v.month||
-r.getTimezoneOffset(l)!==r.getTimezoneOffset(f));l=c.getTime();for(c=1;l<f;)d.push(l),l=a===v.year?r.makeTime(B+c*q,0):a===v.month?r.makeTime(B,h+c*q):!p||a!==v.day&&a!==v.week?p&&a===v.hour&&1<q?r.makeTime(B,h,A,w+c*q):l+a*q:r.makeTime(B,h,A+c*q*(a===v.day?1:7)),c++;d.push(l);a<=v.hour&&1E4>d.length&&d.forEach(function(a){0===a%18E5&&"000000000"===r.dateFormat("%H%M%S%L",a)&&(g[a]="day")})}d.info=F(n,{higherRanks:g,totalRange:a*q});return d};return h}();f.Time=h;return f.Time});N(m,"Core/Options.js",
-[m["Core/Globals.js"],m["Core/Color/Color.js"],m["Core/Time.js"],m["Core/Utilities.js"]],function(f,h,m,z){var F=f.isTouchDevice,P=f.svg;h=h.parse;z=z.merge;"";f.defaultOptions={colors:"#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1".split(" "),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January February March April May June July August September October November December".split(" "),shortMonths:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
-weekdays:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),decimalPoint:".",numericSymbols:"kMGTPE".split(""),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:{styledMode:!1,borderRadius:0,colorCount:10,defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{zIndex:6},position:{align:"right",x:-10,y:10}},width:null,
-height:null,borderColor:"#335cad",backgroundColor:"#ffffff",plotBorderColor:"#cccccc"},title:{text:"Chart title",align:"center",margin:15,widthAdjust:-44},subtitle:{text:"",align:"center",widthAdjust:-44},caption:{margin:15,text:"",align:"left",verticalAlign:"bottom"},plotOptions:{},labels:{style:{position:"absolute",color:"#333333"}},legend:{enabled:!0,align:"center",alignColumns:!0,layout:"horizontal",labelFormatter:function(){return this.name},borderColor:"#999999",borderRadius:0,navigation:{activeColor:"#003399",
-inactiveColor:"#cccccc"},itemStyle:{color:"#333333",cursor:"pointer",fontSize:"12px",fontWeight:"bold",textOverflow:"ellipsis"},itemHoverStyle:{color:"#000000"},itemHiddenStyle:{color:"#cccccc"},shadow:!1,itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},squareSymbol:!0,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"#ffffff",opacity:.5,
-textAlign:"center"}},tooltip:{enabled:!0,animation:P,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},footerFormat:"",padding:8,snap:F?25:10,headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.y}</b><br/>',backgroundColor:h("#f7f7f7").setOpacity(.85).get(),
-borderWidth:1,shadow:!0,style:{color:"#333333",cursor:"default",fontSize:"12px",whiteSpace:"nowrap"}},credits:{enabled:!0,href:"https://www.highcharts.com?credits",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#999999",fontSize:"9px"},text:"Highcharts.com"}};"";f.time=new m(z(f.defaultOptions.global,f.defaultOptions.time));f.dateFormat=function(h,m,y){return f.time.dateFormat(h,m,y)};return{dateFormat:f.dateFormat,defaultOptions:f.defaultOptions,time:f.time}});
-N(m,"Core/Axis/Axis.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Color/Color.js"],m["Core/Globals.js"],m["Core/Axis/Tick.js"],m["Core/Utilities.js"],m["Core/Options.js"]],function(f,h,m,z,F,L){var K=f.animObject,C=F.addEvent,y=F.arrayMax,e=F.arrayMin,I=F.clamp,v=F.correctFloat,x=F.defined,D=F.destroyObjectProperties,n=F.error,l=F.extend,J=F.fireEvent,w=F.format,r=F.getMagnitude,d=F.isArray,g=F.isFunction,c=F.isNumber,a=F.isString,q=F.merge,p=F.normalizeTickInterval,B=F.objectEach,A=F.pick,
-G=F.relativeLength,M=F.removeEvent,T=F.splat,Q=F.syncTimeout,O=L.defaultOptions,E=m.deg2rad;f=function(){function u(b,k){this.zoomEnabled=this.width=this.visible=this.userOptions=this.translationSlope=this.transB=this.transA=this.top=this.ticks=this.tickRotCorr=this.tickPositions=this.tickmarkOffset=this.tickInterval=this.tickAmount=this.side=this.series=this.right=this.positiveValuesOnly=this.pos=this.pointRangePadding=this.pointRange=this.plotLinesAndBandsGroups=this.plotLinesAndBands=this.paddedTicks=
-this.overlap=this.options=this.oldMin=this.oldMax=this.offset=this.names=this.minPixelPadding=this.minorTicks=this.minorTickInterval=this.min=this.maxLabelLength=this.max=this.len=this.left=this.labelFormatter=this.labelEdge=this.isLinked=this.height=this.hasVisibleSeries=this.hasNames=this.coll=this.closestPointRange=this.chart=this.categories=this.bottom=this.alternateBands=void 0;this.init(b,k)}u.prototype.init=function(b,k){var a=k.isX,c=this;c.chart=b;c.horiz=b.inverted&&!c.isZAxis?!a:a;c.isXAxis=
-a;c.coll=c.coll||(a?"xAxis":"yAxis");J(this,"init",{userOptions:k});c.opposite=k.opposite;c.side=k.side||(c.horiz?c.opposite?0:2:c.opposite?1:3);c.setOptions(k);var d=this.options,p=d.type;c.labelFormatter=d.labels.formatter||c.defaultLabelFormatter;c.userOptions=k;c.minPixelPadding=0;c.reversed=d.reversed;c.visible=!1!==d.visible;c.zoomEnabled=!1!==d.zoomEnabled;c.hasNames="category"===p||!0===d.categories;c.categories=d.categories||c.hasNames;c.names||(c.names=[],c.names.keys={});c.plotLinesAndBandsGroups=
-{};c.positiveValuesOnly=!!c.logarithmic;c.isLinked=x(d.linkedTo);c.ticks={};c.labelEdge=[];c.minorTicks={};c.plotLinesAndBands=[];c.alternateBands={};c.len=0;c.minRange=c.userMinRange=d.minRange||d.maxZoom;c.range=d.range;c.offset=d.offset||0;c.max=null;c.min=null;c.crosshair=A(d.crosshair,T(b.options.tooltip.crosshairs)[a?0:1],!1);k=c.options.events;-1===b.axes.indexOf(c)&&(a?b.axes.splice(b.xAxis.length,0,c):b.axes.push(c),b[c.coll].push(c));c.series=c.series||[];b.inverted&&!c.isZAxis&&a&&"undefined"===
-typeof c.reversed&&(c.reversed=!0);c.labelRotation=c.options.labels.rotation;B(k,function(b,k){g(b)&&C(c,k,b)});J(this,"afterInit")};u.prototype.setOptions=function(b){this.options=q(u.defaultOptions,"yAxis"===this.coll&&u.defaultYAxisOptions,[u.defaultTopAxisOptions,u.defaultRightAxisOptions,u.defaultBottomAxisOptions,u.defaultLeftAxisOptions][this.side],q(O[this.coll],b));J(this,"afterSetOptions",{userOptions:b})};u.prototype.defaultLabelFormatter=function(){var b=this.axis,k=c(this.value)?this.value:
-NaN,a=b.chart.time,d=b.categories,g=this.dateTimeLabelFormat,p=O.lang,q=p.numericSymbols;p=p.numericSymbolMagnitude||1E3;var e=q&&q.length,u=b.options.labels.format;b=b.logarithmic?Math.abs(k):b.tickInterval;var B=this.chart,l=B.numberFormatter;if(u)var A=w(u,this,B);else if(d)A=""+this.value;else if(g)A=a.dateFormat(g,k);else if(e&&1E3<=b)for(;e--&&"undefined"===typeof A;)a=Math.pow(p,e+1),b>=a&&0===10*k%a&&null!==q[e]&&0!==k&&(A=l(k/a,-1)+q[e]);"undefined"===typeof A&&(A=1E4<=Math.abs(k)?l(k,-1):
-l(k,-1,void 0,""));return A};u.prototype.getSeriesExtremes=function(){var b=this,k=b.chart,a;J(this,"getSeriesExtremes",null,function(){b.hasVisibleSeries=!1;b.dataMin=b.dataMax=b.threshold=null;b.softThreshold=!b.isXAxis;b.stacking&&b.stacking.buildStacks();b.series.forEach(function(t){if(t.visible||!k.options.chart.ignoreHiddenSeries){var d=t.options,g=d.threshold;b.hasVisibleSeries=!0;b.positiveValuesOnly&&0>=g&&(g=null);if(b.isXAxis){if(d=t.xData,d.length){d=b.logarithmic?d.filter(b.validatePositiveValue):
-d;a=t.getXExtremes(d);var p=a.min;var q=a.max;c(p)||p instanceof Date||(d=d.filter(c),a=t.getXExtremes(d),p=a.min,q=a.max);d.length&&(b.dataMin=Math.min(A(b.dataMin,p),p),b.dataMax=Math.max(A(b.dataMax,q),q))}}else if(t=t.applyExtremes(),c(t.dataMin)&&(p=t.dataMin,b.dataMin=Math.min(A(b.dataMin,p),p)),c(t.dataMax)&&(q=t.dataMax,b.dataMax=Math.max(A(b.dataMax,q),q)),x(g)&&(b.threshold=g),!d.softThreshold||b.positiveValuesOnly)b.softThreshold=!1}})});J(this,"afterGetSeriesExtremes")};u.prototype.translate=
-function(b,a,t,d,g,p){var k=this.linkedParent||this,q=1,e=0,H=d?k.oldTransA:k.transA;d=d?k.oldMin:k.min;var u=k.minPixelPadding;g=(k.isOrdinal||k.brokenAxis&&k.brokenAxis.hasBreaks||k.logarithmic&&g)&&k.lin2val;H||(H=k.transA);t&&(q*=-1,e=k.len);k.reversed&&(q*=-1,e-=q*(k.sector||k.len));a?(b=(b*q+e-u)/H+d,g&&(b=k.lin2val(b))):(g&&(b=k.val2lin(b)),b=c(d)?q*(b-d)*H+e+q*u+(c(p)?H*p:0):void 0);return b};u.prototype.toPixels=function(b,k){return this.translate(b,!1,!this.horiz,null,!0)+(k?0:this.pos)};
-u.prototype.toValue=function(b,k){return this.translate(b-(k?0:this.pos),!0,!this.horiz,null,!0)};u.prototype.getPlotLinePath=function(b){function k(b,a,k){if("pass"!==l&&b<a||b>k)l?b=I(b,a,k):E=!0;return b}var a=this,d=a.chart,g=a.left,p=a.top,q=b.old,e=b.value,u=b.translatedValue,B=b.lineWidth,l=b.force,r,n,f,h,w=q&&d.oldChartHeight||d.chartHeight,G=q&&d.oldChartWidth||d.chartWidth,E,v=a.transB;b={value:e,lineWidth:B,old:q,force:l,acrossPanes:b.acrossPanes,translatedValue:u};J(this,"getPlotLinePath",
-b,function(b){u=A(u,a.translate(e,null,null,q));u=I(u,-1E5,1E5);r=f=Math.round(u+v);n=h=Math.round(w-u-v);c(u)?a.horiz?(n=p,h=w-a.bottom,r=f=k(r,g,g+a.width)):(r=g,f=G-a.right,n=h=k(n,p,p+a.height)):(E=!0,l=!1);b.path=E&&!l?null:d.renderer.crispLine([["M",r,n],["L",f,h]],B||1)});return b.path};u.prototype.getLinearTickPositions=function(b,a,c){var k=v(Math.floor(a/b)*b);c=v(Math.ceil(c/b)*b);var t=[],d;v(k+b)===k&&(d=20);if(this.single)return[a];for(a=k;a<=c;){t.push(a);a=v(a+b,d);if(a===g)break;
-var g=a}return t};u.prototype.getMinorTickInterval=function(){var b=this.options;return!0===b.minorTicks?A(b.minorTickInterval,"auto"):!1===b.minorTicks?null:b.minorTickInterval};u.prototype.getMinorTickPositions=function(){var b=this.options,a=this.tickPositions,c=this.minorTickInterval,d=[],g=this.pointRangePadding||0,p=this.min-g;g=this.max+g;var q=g-p;if(q&&q/c<this.len/3){var e=this.logarithmic;if(e)this.paddedTicks.forEach(function(b,a,k){a&&d.push.apply(d,e.getLogTickPositions(c,k[a-1],k[a],
-!0))});else if(this.dateTime&&"auto"===this.getMinorTickInterval())d=d.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(c),p,g,b.startOfWeek));else for(b=p+(a[0]-p)%c;b<=g&&b!==d[0];b+=c)d.push(b)}0!==d.length&&this.trimTicks(d);return d};u.prototype.adjustForMinRange=function(){var b=this.options,a=this.min,c=this.max,d=this.logarithmic,g,p,q,u,B;this.isXAxis&&"undefined"===typeof this.minRange&&!d&&(x(b.min)||x(b.max)?this.minRange=null:(this.series.forEach(function(b){u=b.xData;
-for(p=B=b.xIncrement?1:u.length-1;0<p;p--)if(q=u[p]-u[p-1],"undefined"===typeof g||q<g)g=q}),this.minRange=Math.min(5*g,this.dataMax-this.dataMin)));if(c-a<this.minRange){var l=this.dataMax-this.dataMin>=this.minRange;var r=this.minRange;var n=(r-c+a)/2;n=[a-n,A(b.min,a-n)];l&&(n[2]=this.logarithmic?this.logarithmic.log2lin(this.dataMin):this.dataMin);a=y(n);c=[a+r,A(b.max,a+r)];l&&(c[2]=d?d.log2lin(this.dataMax):this.dataMax);c=e(c);c-a<r&&(n[0]=c-r,n[1]=A(b.min,c-r),a=y(n))}this.min=a;this.max=
-c};u.prototype.getClosest=function(){var b;this.categories?b=1:this.series.forEach(function(a){var k=a.closestPointRange,c=a.visible||!a.chart.options.chart.ignoreHiddenSeries;!a.noSharedTooltip&&x(k)&&c&&(b=x(b)?Math.min(b,k):k)});return b};u.prototype.nameToX=function(b){var a=d(this.categories),c=a?this.categories:this.names,g=b.options.x;b.series.requireSorting=!1;x(g)||(g=!1===this.options.uniqueNames?b.series.autoIncrement():a?c.indexOf(b.name):A(c.keys[b.name],-1));if(-1===g){if(!a)var p=c.length}else p=
-g;"undefined"!==typeof p&&(this.names[p]=b.name,this.names.keys[b.name]=p);return p};u.prototype.updateNames=function(){var b=this,a=this.names;0<a.length&&(Object.keys(a.keys).forEach(function(b){delete a.keys[b]}),a.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(function(a){a.xIncrement=null;if(!a.points||a.isDirtyData)b.max=Math.max(b.max,a.xData.length-1),a.processData(),a.generatePoints();a.data.forEach(function(k,c){if(k&&k.options&&"undefined"!==typeof k.name){var d=b.nameToX(k);
-"undefined"!==typeof d&&d!==k.x&&(k.x=d,a.xData[c]=d)}})}))};u.prototype.setAxisTranslation=function(b){var k=this,c=k.max-k.min,d=k.axisPointRange||0,g=0,p=0,q=k.linkedParent,e=!!k.categories,u=k.transA,B=k.isXAxis;if(B||e||d){var l=k.getClosest();q?(g=q.minPointOffset,p=q.pointRangePadding):k.series.forEach(function(b){var c=e?1:B?A(b.options.pointRange,l,0):k.axisPointRange||0,t=b.options.pointPlacement;d=Math.max(d,c);if(!k.single||e)b=b.is("xrange")?!B:B,g=Math.max(g,b&&a(t)?0:c/2),p=Math.max(p,
-b&&"on"===t?0:c)});q=k.ordinal&&k.ordinal.slope&&l?k.ordinal.slope/l:1;k.minPointOffset=g*=q;k.pointRangePadding=p*=q;k.pointRange=Math.min(d,k.single&&e?1:c);B&&(k.closestPointRange=l)}b&&(k.oldTransA=u);k.translationSlope=k.transA=u=k.staticScale||k.len/(c+p||1);k.transB=k.horiz?k.left:k.bottom;k.minPixelPadding=u*g;J(this,"afterSetAxisTranslation")};u.prototype.minFromRange=function(){return this.max-this.range};u.prototype.setTickInterval=function(b){var a=this,d=a.chart,g=a.logarithmic,q=a.options,
-e=a.isXAxis,u=a.isLinked,B=q.maxPadding,l=q.minPadding,f=q.tickInterval,h=q.tickPixelInterval,w=a.categories,G=c(a.threshold)?a.threshold:null,E=a.softThreshold;a.dateTime||w||u||this.getTickAmount();var O=A(a.userMin,q.min);var D=A(a.userMax,q.max);if(u){a.linkedParent=d[a.coll][q.linkedTo];var M=a.linkedParent.getExtremes();a.min=A(M.min,M.dataMin);a.max=A(M.max,M.dataMax);q.type!==a.linkedParent.options.type&&n(11,1,d)}else{if(E&&x(G))if(a.dataMin>=G)M=G,l=0;else if(a.dataMax<=G){var m=G;B=0}a.min=
-A(O,M,a.dataMin);a.max=A(D,m,a.dataMax)}g&&(a.positiveValuesOnly&&!b&&0>=Math.min(a.min,A(a.dataMin,a.min))&&n(10,1,d),a.min=v(g.log2lin(a.min),16),a.max=v(g.log2lin(a.max),16));a.range&&x(a.max)&&(a.userMin=a.min=O=Math.max(a.dataMin,a.minFromRange()),a.userMax=D=a.max,a.range=null);J(a,"foundExtremes");a.beforePadding&&a.beforePadding();a.adjustForMinRange();!(w||a.axisPointRange||a.stacking&&a.stacking.usePercentage||u)&&x(a.min)&&x(a.max)&&(d=a.max-a.min)&&(!x(O)&&l&&(a.min-=d*l),!x(D)&&B&&(a.max+=
-d*B));c(a.userMin)||(c(q.softMin)&&q.softMin<a.min&&(a.min=O=q.softMin),c(q.floor)&&(a.min=Math.max(a.min,q.floor)));c(a.userMax)||(c(q.softMax)&&q.softMax>a.max&&(a.max=D=q.softMax),c(q.ceiling)&&(a.max=Math.min(a.max,q.ceiling)));E&&x(a.dataMin)&&(G=G||0,!x(O)&&a.min<G&&a.dataMin>=G?a.min=a.options.minRange?Math.min(G,a.max-a.minRange):G:!x(D)&&a.max>G&&a.dataMax<=G&&(a.max=a.options.minRange?Math.max(G,a.min+a.minRange):G));a.tickInterval=a.min===a.max||"undefined"===typeof a.min||"undefined"===
-typeof a.max?1:u&&!f&&h===a.linkedParent.options.tickPixelInterval?f=a.linkedParent.tickInterval:A(f,this.tickAmount?(a.max-a.min)/Math.max(this.tickAmount-1,1):void 0,w?1:(a.max-a.min)*h/Math.max(a.len,h));e&&!b&&a.series.forEach(function(b){b.processData(a.min!==a.oldMin||a.max!==a.oldMax)});a.setAxisTranslation(!0);J(this,"initialAxisTranslation");a.pointRange&&!f&&(a.tickInterval=Math.max(a.pointRange,a.tickInterval));b=A(q.minTickInterval,a.dateTime&&!a.series.some(function(b){return b.noSharedTooltip})?
-a.closestPointRange:0);!f&&a.tickInterval<b&&(a.tickInterval=b);a.dateTime||a.logarithmic||f||(a.tickInterval=p(a.tickInterval,void 0,r(a.tickInterval),A(q.allowDecimals,.5>a.tickInterval||void 0!==this.tickAmount),!!this.tickAmount));this.tickAmount||(a.tickInterval=a.unsquish());this.setTickPositions()};u.prototype.setTickPositions=function(){var b=this.options,a=b.tickPositions;var c=this.getMinorTickInterval();var d=b.tickPositioner,g=this.hasVerticalPanning(),p="colorAxis"===this.coll,q=(p||
-!g)&&b.startOnTick;g=(p||!g)&&b.endOnTick;this.tickmarkOffset=this.categories&&"between"===b.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval="auto"===c&&this.tickInterval?this.tickInterval/5:c;this.single=this.min===this.max&&x(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==b.allowDecimals);this.tickPositions=c=a&&a.slice();!c&&(this.ordinal&&this.ordinal.positions||!((this.max-this.min)/this.tickInterval>Math.max(2*this.len,200))?c=this.dateTime?this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,
-b.units),this.min,this.max,b.startOfWeek,this.ordinal&&this.ordinal.positions,this.closestPointRange,!0):this.logarithmic?this.logarithmic.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max):(c=[this.min,this.max],n(19,!1,this.chart)),c.length>this.len&&(c=[c[0],c.pop()],c[0]===c[1]&&(c.length=1)),this.tickPositions=c,d&&(d=d.apply(this,[this.min,this.max])))&&(this.tickPositions=c=d);this.paddedTicks=c.slice(0);this.trimTicks(c,
-q,g);this.isLinked||(this.single&&2>c.length&&!this.categories&&!this.series.some(function(b){return b.is("heatmap")&&"between"===b.options.pointPlacement})&&(this.min-=.5,this.max+=.5),a||d||this.adjustTickAmount());J(this,"afterSetTickPositions")};u.prototype.trimTicks=function(b,a,c){var k=b[0],d=b[b.length-1],t=!this.isOrdinal&&this.minPointOffset||0;J(this,"trimTicks");if(!this.isLinked){if(a&&-Infinity!==k)this.min=k;else for(;this.min-t>b[0];)b.shift();if(c)this.max=d;else for(;this.max+t<
-b[b.length-1];)b.pop();0===b.length&&x(k)&&!this.options.tickPositions&&b.push((d+k)/2)}};u.prototype.alignToOthers=function(){var b={},a,c=this.options;!1===this.chart.options.chart.alignTicks||!1===c.alignTicks||!1===c.startOnTick||!1===c.endOnTick||this.logarithmic||this.chart[this.coll].forEach(function(k){var c=k.options;c=[k.horiz?c.left:c.top,c.width,c.height,c.pane].join();k.series.length&&(b[c]?a=!0:b[c]=1)});return a};u.prototype.getTickAmount=function(){var b=this.options,a=b.tickAmount,
-c=b.tickPixelInterval;!x(b.tickInterval)&&!a&&this.len<c&&!this.isRadial&&!this.logarithmic&&b.startOnTick&&b.endOnTick&&(a=2);!a&&this.alignToOthers()&&(a=Math.ceil(this.len/c)+1);4>a&&(this.finalTickAmt=a,a=5);this.tickAmount=a};u.prototype.adjustTickAmount=function(){var b=this.options,a=this.tickInterval,c=this.tickPositions,d=this.tickAmount,g=this.finalTickAmt,p=c&&c.length,q=A(this.threshold,this.softThreshold?0:null),e;if(this.hasData()){if(p<d){for(e=this.min;c.length<d;)c.length%2||e===
-q?c.push(v(c[c.length-1]+a)):c.unshift(v(c[0]-a));this.transA*=(p-1)/(d-1);this.min=b.startOnTick?c[0]:Math.min(this.min,c[0]);this.max=b.endOnTick?c[c.length-1]:Math.max(this.max,c[c.length-1])}else p>d&&(this.tickInterval*=2,this.setTickPositions());if(x(g)){for(a=b=c.length;a--;)(3===g&&1===a%2||2>=g&&0<a&&a<b-1)&&c.splice(a,1);this.finalTickAmt=void 0}}};u.prototype.setScale=function(){var b,a=!1,c=!1;this.series.forEach(function(b){var k;a=a||b.isDirtyData||b.isDirty;c=c||(null===(k=b.xAxis)||
-void 0===k?void 0:k.isDirty)||!1});this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();(b=this.len!==this.oldAxisLength)||a||c||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax||this.alignToOthers()?(this.stacking&&this.stacking.resetStacks(),this.forceRedraw=!1,this.getSeriesExtremes(),this.setTickInterval(),this.oldUserMin=this.userMin,this.oldUserMax=this.userMax,this.isDirty||(this.isDirty=b||this.min!==this.oldMin||
-this.max!==this.oldMax)):this.stacking&&this.stacking.cleanStacks();a&&this.panningState&&(this.panningState.isDirty=!0);J(this,"afterSetScale")};u.prototype.setExtremes=function(b,a,c,d,g){var k=this,t=k.chart;c=A(c,!0);k.series.forEach(function(b){delete b.kdTree});g=l(g,{min:b,max:a});J(k,"setExtremes",g,function(){k.userMin=b;k.userMax=a;k.eventArgs=g;c&&t.redraw(d)})};u.prototype.zoom=function(b,a){var k=this,c=this.dataMin,d=this.dataMax,g=this.options,p=Math.min(c,A(g.min,c)),q=Math.max(d,
-A(g.max,d));b={newMin:b,newMax:a};J(this,"zoom",b,function(b){var a=b.newMin,g=b.newMax;if(a!==k.min||g!==k.max)k.allowZoomOutside||(x(c)&&(a<p&&(a=p),a>q&&(a=q)),x(d)&&(g<p&&(g=p),g>q&&(g=q))),k.displayBtn="undefined"!==typeof a||"undefined"!==typeof g,k.setExtremes(a,g,!1,void 0,{trigger:"zoom"});b.zoomed=!0});return b.zoomed};u.prototype.setAxisSize=function(){var b=this.chart,a=this.options,c=a.offsets||[0,0,0,0],d=this.horiz,g=this.width=Math.round(G(A(a.width,b.plotWidth-c[3]+c[1]),b.plotWidth)),
-p=this.height=Math.round(G(A(a.height,b.plotHeight-c[0]+c[2]),b.plotHeight)),q=this.top=Math.round(G(A(a.top,b.plotTop+c[0]),b.plotHeight,b.plotTop));a=this.left=Math.round(G(A(a.left,b.plotLeft+c[3]),b.plotWidth,b.plotLeft));this.bottom=b.chartHeight-p-q;this.right=b.chartWidth-g-a;this.len=Math.max(d?g:p,0);this.pos=d?a:q};u.prototype.getExtremes=function(){var b=this.logarithmic;return{min:b?v(b.lin2log(this.min)):this.min,max:b?v(b.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,
-userMin:this.userMin,userMax:this.userMax}};u.prototype.getThreshold=function(b){var a=this.logarithmic,c=a?a.lin2log(this.min):this.min;a=a?a.lin2log(this.max):this.max;null===b||-Infinity===b?b=c:Infinity===b?b=a:c>b?b=c:a<b&&(b=a);return this.translate(b,0,1,0,1)};u.prototype.autoLabelAlign=function(b){var a=(A(b,0)-90*this.side+720)%360;b={align:"center"};J(this,"autoLabelAlign",b,function(b){15<a&&165>a?b.align="right":195<a&&345>a&&(b.align="left")});return b.align};u.prototype.tickSize=function(b){var a=
-this.options,c=a["tick"===b?"tickLength":"minorTickLength"],d=A(a["tick"===b?"tickWidth":"minorTickWidth"],"tick"===b&&this.isXAxis&&!this.categories?1:0);if(d&&c){"inside"===a[b+"Position"]&&(c=-c);var g=[c,d]}b={tickSize:g};J(this,"afterTickSize",b);return b.tickSize};u.prototype.labelMetrics=function(){var b=this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style&&this.options.labels.style.fontSize,this.ticks[b]&&this.ticks[b].label)};u.prototype.unsquish=
-function(){var b=this.options.labels,a=this.horiz,c=this.tickInterval,d=c,g=this.len/(((this.categories?1:0)+this.max-this.min)/c),p,q=b.rotation,e=this.labelMetrics(),u,B=Number.MAX_VALUE,l,r=this.max-this.min,n=function(b){var a=b/(g||1);a=1<a?Math.ceil(a):1;a*c>r&&Infinity!==b&&Infinity!==g&&r&&(a=Math.ceil(r/c));return v(a*c)};a?(l=!b.staggerLines&&!b.step&&(x(q)?[q]:g<A(b.autoRotationLimit,80)&&b.autoRotation))&&l.forEach(function(b){if(b===q||b&&-90<=b&&90>=b){u=n(Math.abs(e.h/Math.sin(E*b)));
-var a=u+Math.abs(b/360);a<B&&(B=a,p=b,d=u)}}):b.step||(d=n(e.h));this.autoRotation=l;this.labelRotation=A(p,q);return d};u.prototype.getSlotWidth=function(b){var a,d=this.chart,g=this.horiz,p=this.options.labels,q=Math.max(this.tickPositions.length-(this.categories?0:1),1),e=d.margin[3];if(b&&c(b.slotWidth))return b.slotWidth;if(g&&p&&2>(p.step||0))return p.rotation?0:(this.staggerLines||1)*this.len/q;if(!g){b=null===(a=null===p||void 0===p?void 0:p.style)||void 0===a?void 0:a.width;if(void 0!==b)return parseInt(b,
-10);if(e)return e-d.spacing[3]}return.33*d.chartWidth};u.prototype.renderUnsquish=function(){var b=this.chart,k=b.renderer,c=this.tickPositions,d=this.ticks,g=this.options.labels,p=g&&g.style||{},q=this.horiz,e=this.getSlotWidth(),u=Math.max(1,Math.round(e-2*(g.padding||5))),B={},l=this.labelMetrics(),r=g.style&&g.style.textOverflow,n=0;a(g.rotation)||(B.rotation=g.rotation||0);c.forEach(function(b){b=d[b];b.movedLabel&&b.replaceMovedLabel();b&&b.label&&b.label.textPxLength>n&&(n=b.label.textPxLength)});
-this.maxLabelLength=n;if(this.autoRotation)n>u&&n>l.h?B.rotation=this.labelRotation:this.labelRotation=0;else if(e){var A=u;if(!r){var f="clip";for(u=c.length;!q&&u--;){var h=c[u];if(h=d[h].label)h.styles&&"ellipsis"===h.styles.textOverflow?h.css({textOverflow:"clip"}):h.textPxLength>e&&h.css({width:e+"px"}),h.getBBox().height>this.len/c.length-(l.h-l.f)&&(h.specificTextOverflow="ellipsis")}}}B.rotation&&(A=n>.5*b.chartHeight?.33*b.chartHeight:n,r||(f="ellipsis"));if(this.labelAlign=g.align||this.autoLabelAlign(this.labelRotation))B.align=
-this.labelAlign;c.forEach(function(b){var a=(b=d[b])&&b.label,k=p.width,c={};a&&(a.attr(B),b.shortenLabel?b.shortenLabel():A&&!k&&"nowrap"!==p.whiteSpace&&(A<a.textPxLength||"SPAN"===a.element.tagName)?(c.width=A+"px",r||(c.textOverflow=a.specificTextOverflow||f),a.css(c)):a.styles&&a.styles.width&&!c.width&&!k&&a.css({width:null}),delete a.specificTextOverflow,b.rotation=B.rotation)},this);this.tickRotCorr=k.rotCorr(l.b,this.labelRotation||0,0!==this.side)};u.prototype.hasData=function(){return this.series.some(function(b){return b.hasData()})||
-this.options.showEmpty&&x(this.min)&&x(this.max)};u.prototype.addTitle=function(b){var a=this.chart.renderer,c=this.horiz,d=this.opposite,g=this.options.title,p,e=this.chart.styledMode;this.axisTitle||((p=g.textAlign)||(p=(c?{low:"left",middle:"center",high:"right"}:{low:d?"right":"left",middle:"center",high:d?"left":"right"})[g.align]),this.axisTitle=a.text(g.text,0,0,g.useHTML).attr({zIndex:7,rotation:g.rotation||0,align:p}).addClass("highcharts-axis-title"),e||this.axisTitle.css(q(g.style)),this.axisTitle.add(this.axisGroup),
-this.axisTitle.isNew=!0);e||g.style.width||this.isRadial||this.axisTitle.css({width:this.len+"px"});this.axisTitle[b?"show":"hide"](b)};u.prototype.generateTick=function(b){var a=this.ticks;a[b]?a[b].addLabel():a[b]=new z(this,b)};u.prototype.getOffset=function(){var b=this,a=b.chart,c=a.renderer,d=b.options,g=b.tickPositions,p=b.ticks,q=b.horiz,e=b.side,u=a.inverted&&!b.isZAxis?[1,0,3,2][e]:e,l,n=0,r=0,f=d.title,h=d.labels,G=0,w=a.axisOffset;a=a.clipOffset;var E=[-1,1,1,-1][e],v=d.className,O=b.axisParent;
-var D=b.hasData();b.showAxis=l=D||A(d.showEmpty,!0);b.staggerLines=b.horiz&&h.staggerLines;b.axisGroup||(b.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).addClass("highcharts-"+this.coll.toLowerCase()+"-grid "+(v||"")).add(O),b.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).addClass("highcharts-"+this.coll.toLowerCase()+" "+(v||"")).add(O),b.labelGroup=c.g("axis-labels").attr({zIndex:h.zIndex||7}).addClass("highcharts-"+b.coll.toLowerCase()+"-labels "+(v||"")).add(O));D||b.isLinked?(g.forEach(function(a,
-c){b.generateTick(a,c)}),b.renderUnsquish(),b.reserveSpaceDefault=0===e||2===e||{1:"left",3:"right"}[e]===b.labelAlign,A(h.reserveSpace,"center"===b.labelAlign?!0:null,b.reserveSpaceDefault)&&g.forEach(function(b){G=Math.max(p[b].getLabelSize(),G)}),b.staggerLines&&(G*=b.staggerLines),b.labelOffset=G*(b.opposite?-1:1)):B(p,function(b,a){b.destroy();delete p[a]});if(f&&f.text&&!1!==f.enabled&&(b.addTitle(l),l&&!1!==f.reserveSpace)){b.titleOffset=n=b.axisTitle.getBBox()[q?"height":"width"];var M=f.offset;
-r=x(M)?0:A(f.margin,q?5:10)}b.renderLine();b.offset=E*A(d.offset,w[e]?w[e]+(d.margin||0):0);b.tickRotCorr=b.tickRotCorr||{x:0,y:0};c=0===e?-b.labelMetrics().h:2===e?b.tickRotCorr.y:0;r=Math.abs(G)+r;G&&(r=r-c+E*(q?A(h.y,b.tickRotCorr.y+8*E):h.x));b.axisTitleMargin=A(M,r);b.getMaxLabelDimensions&&(b.maxLabelDimensions=b.getMaxLabelDimensions(p,g));q=this.tickSize("tick");w[e]=Math.max(w[e],b.axisTitleMargin+n+E*b.offset,r,g&&g.length&&q?q[0]+E*b.offset:0);d=d.offset?0:2*Math.floor(b.axisLine.strokeWidth()/
-2);a[u]=Math.max(a[u],d);J(this,"afterGetOffset")};u.prototype.getLinePath=function(b){var a=this.chart,c=this.opposite,d=this.offset,g=this.horiz,p=this.left+(c?this.width:0)+d;d=a.chartHeight-this.bottom-(c?this.height:0)+d;c&&(b*=-1);return a.renderer.crispLine([["M",g?this.left:p,g?d:this.top],["L",g?a.chartWidth-this.right:p,g?d:a.chartHeight-this.bottom]],b)};u.prototype.renderLine=function(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup),
-this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,"stroke-width":this.options.lineWidth,zIndex:7}))};u.prototype.getTitlePosition=function(){var b=this.horiz,a=this.left,c=this.top,d=this.len,g=this.options.title,p=b?a:c,q=this.opposite,e=this.offset,u=g.x||0,B=g.y||0,l=this.axisTitle,r=this.chart.renderer.fontMetrics(g.style&&g.style.fontSize,l);l=Math.max(l.getBBox(null,0).height-r.h-1,0);d={low:p+(b?0:d),middle:p+d/2,high:p+(b?d:0)}[g.align];a=(b?c+this.height:a)+(b?1:-1)*
-(q?-1:1)*this.axisTitleMargin+[-l,l,r.f,-l][this.side];b={x:b?d+u:a+(q?this.width:0)+e+u,y:b?a+B-(q?this.height:0)+e:d+B};J(this,"afterGetTitlePosition",{titlePosition:b});return b};u.prototype.renderMinorTick=function(b){var a=this.chart.hasRendered&&c(this.oldMin),d=this.minorTicks;d[b]||(d[b]=new z(this,b,"minor"));a&&d[b].isNew&&d[b].render(null,!0);d[b].render(null,!1,1)};u.prototype.renderTick=function(b,a){var k,d=this.isLinked,g=this.ticks,p=this.chart.hasRendered&&c(this.oldMin);if(!d||b>=
-this.min&&b<=this.max||(null===(k=this.grid)||void 0===k?0:k.isColumn))g[b]||(g[b]=new z(this,b)),p&&g[b].isNew&&g[b].render(a,!0,-1),g[b].render(a)};u.prototype.render=function(){var b=this,a=b.chart,d=b.logarithmic,g=b.options,p=b.isLinked,q=b.tickPositions,e=b.axisTitle,u=b.ticks,l=b.minorTicks,r=b.alternateBands,n=g.stackLabels,f=g.alternateGridColor,A=b.tickmarkOffset,h=b.axisLine,G=b.showAxis,w=K(a.renderer.globalAnimation),E,v;b.labelEdge.length=0;b.overlap=!1;[u,l,r].forEach(function(b){B(b,
-function(b){b.isActive=!1})});if(b.hasData()||p)b.minorTickInterval&&!b.categories&&b.getMinorTickPositions().forEach(function(a){b.renderMinorTick(a)}),q.length&&(q.forEach(function(a,c){b.renderTick(a,c)}),A&&(0===b.min||b.single)&&(u[-1]||(u[-1]=new z(b,-1,null,!0)),u[-1].render(-1))),f&&q.forEach(function(c,k){v="undefined"!==typeof q[k+1]?q[k+1]+A:b.max-A;0===k%2&&c<b.max&&v<=b.max+(a.polar?-A:A)&&(r[c]||(r[c]=new m.PlotLineOrBand(b)),E=c+A,r[c].options={from:d?d.lin2log(E):E,to:d?d.lin2log(v):
-v,color:f,className:"highcharts-alternate-grid"},r[c].render(),r[c].isActive=!0)}),b._addedPlotLB||((g.plotLines||[]).concat(g.plotBands||[]).forEach(function(a){b.addPlotBandOrLine(a)}),b._addedPlotLB=!0);[u,l,r].forEach(function(b){var c,k=[],d=w.duration;B(b,function(b,a){b.isActive||(b.render(a,!1,0),b.isActive=!1,k.push(a))});Q(function(){for(c=k.length;c--;)b[k[c]]&&!b[k[c]].isActive&&(b[k[c]].destroy(),delete b[k[c]])},b!==r&&a.hasRendered&&d?d:0)});h&&(h[h.isPlaced?"animate":"attr"]({d:this.getLinePath(h.strokeWidth())}),
-h.isPlaced=!0,h[G?"show":"hide"](G));e&&G&&(g=b.getTitlePosition(),c(g.y)?(e[e.isNew?"attr":"animate"](g),e.isNew=!1):(e.attr("y",-9999),e.isNew=!0));n&&n.enabled&&b.stacking&&b.stacking.renderStackTotals();b.isDirty=!1;J(this,"afterRender")};u.prototype.redraw=function(){this.visible&&(this.render(),this.plotLinesAndBands.forEach(function(b){b.render()}));this.series.forEach(function(b){b.isDirty=!0})};u.prototype.getKeepProps=function(){return this.keepProps||u.keepProps};u.prototype.destroy=function(b){var a=
-this,c=a.plotLinesAndBands,d;J(this,"destroy",{keepEvents:b});b||M(a);[a.ticks,a.minorTicks,a.alternateBands].forEach(function(b){D(b)});if(c)for(b=c.length;b--;)c[b].destroy();"axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar".split(" ").forEach(function(b){a[b]&&(a[b]=a[b].destroy())});for(d in a.plotLinesAndBandsGroups)a.plotLinesAndBandsGroups[d]=a.plotLinesAndBandsGroups[d].destroy();B(a,function(b,c){-1===a.getKeepProps().indexOf(c)&&delete a[c]})};u.prototype.drawCrosshair=
-function(b,a){var c=this.crosshair,k=A(c.snap,!0),d,g=this.cross,p=this.chart;J(this,"drawCrosshair",{e:b,point:a});b||(b=this.cross&&this.cross.e);if(this.crosshair&&!1!==(x(a)||!k)){k?x(a)&&(d=A("colorAxis"!==this.coll?a.crosshairPos:null,this.isXAxis?a.plotX:this.len-a.plotY)):d=b&&(this.horiz?b.chartX-this.pos:this.len-b.chartY+this.pos);if(x(d)){var q={value:a&&(this.isXAxis?a.x:A(a.stackY,a.y)),translatedValue:d};p.polar&&l(q,{isCrosshair:!0,chartX:b&&b.chartX,chartY:b&&b.chartY,point:a});q=
-this.getPlotLinePath(q)||null}if(!x(q)){this.hideCrosshair();return}k=this.categories&&!this.isRadial;g||(this.cross=g=p.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-"+(k?"category ":"thin ")+c.className).attr({zIndex:A(c.zIndex,2)}).add(),p.styledMode||(g.attr({stroke:c.color||(k?h.parse("#ccd6eb").setOpacity(.25).get():"#cccccc"),"stroke-width":A(c.width,1)}).css({"pointer-events":"none"}),c.dashStyle&&g.attr({dashstyle:c.dashStyle})));g.show().attr({d:q});k&&!c.width&&g.attr({"stroke-width":this.transA});
-this.cross.e=b}else this.hideCrosshair();J(this,"afterDrawCrosshair",{e:b,point:a})};u.prototype.hideCrosshair=function(){this.cross&&this.cross.hide();J(this,"afterHideCrosshair")};u.prototype.hasVerticalPanning=function(){var b,a;return/y/.test((null===(a=null===(b=this.chart.options.chart)||void 0===b?void 0:b.panning)||void 0===a?void 0:a.type)||"")};u.prototype.validatePositiveValue=function(b){return c(b)&&0<b};u.defaultOptions={dateTimeLabelFormats:{millisecond:{main:"%H:%M:%S.%L",range:!1},
-second:{main:"%H:%M:%S",range:!1},minute:{main:"%H:%M",range:!1},hour:{main:"%H:%M",range:!1},day:{main:"%e. %b"},week:{main:"%e. %b"},month:{main:"%b '%y"},year:{main:"%Y"}},endOnTick:!1,labels:{enabled:!0,indentation:10,x:0,style:{color:"#666666",cursor:"default",fontSize:"11px"}},maxPadding:.01,minorTickLength:2,minorTickPosition:"outside",minPadding:.01,showEmpty:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:"between",tickPosition:"outside",title:{align:"middle",
-style:{color:"#666666"}},type:"linear",minorGridLineColor:"#f2f2f2",minorGridLineWidth:1,minorTickColor:"#999999",lineColor:"#ccd6eb",lineWidth:1,gridLineColor:"#e6e6e6",tickColor:"#ccd6eb"};u.defaultYAxisOptions={endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},startOnTick:!0,title:{rotation:270,text:"Values"},stackLabels:{animation:{},allowOverlap:!1,enabled:!1,crop:!0,overflow:"justify",formatter:function(){var b=this.axis.chart.numberFormatter;return b(this.total,
--1)},style:{color:"#000000",fontSize:"11px",fontWeight:"bold",textOutline:"1px contrast"}},gridLineWidth:1,lineWidth:0};u.defaultLeftAxisOptions={labels:{x:-15},title:{rotation:270}};u.defaultRightAxisOptions={labels:{x:15},title:{rotation:90}};u.defaultBottomAxisOptions={labels:{autoRotation:[-45],x:0},margin:15,title:{rotation:0}};u.defaultTopAxisOptions={labels:{autoRotation:[-45],x:0},margin:15,title:{rotation:0}};u.keepProps="extKey hcEvents names series userMax userMin".split(" ");return u}();
-m.Axis=f;return m.Axis});N(m,"Core/Axis/DateTimeAxis.js",[m["Core/Axis/Axis.js"],m["Core/Utilities.js"]],function(f,h){var m=h.addEvent,z=h.getMagnitude,F=h.normalizeTickInterval,L=h.timeUnits,K=function(){function f(f){this.axis=f}f.prototype.normalizeTimeTickInterval=function(f,e){var h=e||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]];e=h[h.length-
-1];var v=L[e[0]],x=e[1],D;for(D=0;D<h.length&&!(e=h[D],v=L[e[0]],x=e[1],h[D+1]&&f<=(v*x[x.length-1]+L[h[D+1][0]])/2);D++);v===L.year&&f<5*v&&(x=[1,2,5]);f=F(f/v,x,"year"===e[0]?Math.max(z(f/v),1):1);return{unitRange:v,count:f,unitName:e[0]}};return f}();h=function(){function f(){}f.compose=function(f){f.keepProps.push("dateTime");f.prototype.getTimeTicks=function(){return this.chart.time.getTimeTicks.apply(this.chart.time,arguments)};m(f,"init",function(e){"datetime"!==e.userOptions.type?this.dateTime=
-void 0:this.dateTime||(this.dateTime=new K(this))})};f.AdditionsClass=K;return f}();h.compose(f);return h});N(m,"Core/Axis/LogarithmicAxis.js",[m["Core/Axis/Axis.js"],m["Core/Utilities.js"]],function(f,h){var m=h.addEvent,z=h.getMagnitude,F=h.normalizeTickInterval,L=h.pick,K=function(){function f(f){this.axis=f}f.prototype.getLogTickPositions=function(f,e,h,v){var x=this.axis,D=x.len,n=x.options,l=[];v||(this.minorAutoInterval=void 0);if(.5<=f)f=Math.round(f),l=x.getLinearTickPositions(f,e,h);else if(.08<=
-f){n=Math.floor(e);var m,w;for(D=.3<f?[1,2,4]:.15<f?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];n<h+1&&!w;n++){var r=D.length;for(m=0;m<r&&!w;m++){var d=this.log2lin(this.lin2log(n)*D[m]);d>e&&(!v||g<=h)&&"undefined"!==typeof g&&l.push(g);g>h&&(w=!0);var g=d}}}else e=this.lin2log(e),h=this.lin2log(h),f=v?x.getMinorTickInterval():n.tickInterval,f=L("auto"===f?null:f,this.minorAutoInterval,n.tickPixelInterval/(v?5:1)*(h-e)/((v?D/x.tickPositions.length:D)||1)),f=F(f,void 0,z(f)),l=x.getLinearTickPositions(f,e,h).map(this.log2lin),
-v||(this.minorAutoInterval=f/5);v||(x.tickInterval=f);return l};f.prototype.lin2log=function(f){return Math.pow(10,f)};f.prototype.log2lin=function(f){return Math.log(f)/Math.LN10};return f}();h=function(){function f(){}f.compose=function(f){f.keepProps.push("logarithmic");var e=f.prototype,h=K.prototype;e.log2lin=h.log2lin;e.lin2log=h.lin2log;m(f,"init",function(e){var f=this.logarithmic;"logarithmic"!==e.userOptions.type?this.logarithmic=void 0:(f||(f=this.logarithmic=new K(this)),this.log2lin!==
-f.log2lin&&(f.log2lin=this.log2lin.bind(this)),this.lin2log!==f.lin2log&&(f.lin2log=this.lin2log.bind(this)))});m(f,"afterInit",function(){var e=this.logarithmic;e&&(this.lin2val=function(f){return e.lin2log(f)},this.val2lin=function(f){return e.log2lin(f)})})};return f}();h.compose(f);return h});N(m,"Core/Axis/PlotLineOrBand.js",[m["Core/Axis/Axis.js"],m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h,m){var z=m.arrayMax,F=m.arrayMin,P=m.defined,K=m.destroyObjectProperties,C=m.erase,y=m.extend,
-e=m.merge,I=m.objectEach,v=m.pick;m=function(){function f(e,f){this.axis=e;f&&(this.options=f,this.id=f.id)}f.prototype.render=function(){h.fireEvent(this,"render");var f=this,n=f.axis,l=n.horiz,m=n.logarithmic,w=f.options,r=w.label,d=f.label,g=w.to,c=w.from,a=w.value,q=P(c)&&P(g),p=P(a),B=f.svgElem,A=!B,G=[],M=w.color,x=v(w.zIndex,0),Q=w.events;G={"class":"highcharts-plot-"+(q?"band ":"line ")+(w.className||"")};var O={},E=n.chart.renderer,u=q?"bands":"lines";m&&(c=m.log2lin(c),g=m.log2lin(g),a=
-m.log2lin(a));n.chart.styledMode||(p?(G.stroke=M||"#999999",G["stroke-width"]=v(w.width,1),w.dashStyle&&(G.dashstyle=w.dashStyle)):q&&(G.fill=M||"#e6ebf5",w.borderWidth&&(G.stroke=w.borderColor,G["stroke-width"]=w.borderWidth)));O.zIndex=x;u+="-"+x;(m=n.plotLinesAndBandsGroups[u])||(n.plotLinesAndBandsGroups[u]=m=E.g("plot-"+u).attr(O).add());A&&(f.svgElem=B=E.path().attr(G).add(m));if(p)G=n.getPlotLinePath({value:a,lineWidth:B.strokeWidth(),acrossPanes:w.acrossPanes});else if(q)G=n.getPlotBandPath(c,
-g,w);else return;!f.eventsAdded&&Q&&(I(Q,function(b,a){B.on(a,function(b){Q[a].apply(f,[b])})}),f.eventsAdded=!0);(A||!B.d)&&G&&G.length?B.attr({d:G}):B&&(G?(B.show(!0),B.animate({d:G})):B.d&&(B.hide(),d&&(f.label=d=d.destroy())));r&&(P(r.text)||P(r.formatter))&&G&&G.length&&0<n.width&&0<n.height&&!G.isFlat?(r=e({align:l&&q&&"center",x:l?!q&&4:10,verticalAlign:!l&&q&&"middle",y:l?q?16:10:q?6:-4,rotation:l&&!q&&90},r),this.renderLabel(r,G,q,x)):d&&d.hide();return f};f.prototype.renderLabel=function(e,
-f,l,h){var n=this.label,r=this.axis.chart.renderer;n||(n={align:e.textAlign||e.align,rotation:e.rotation,"class":"highcharts-plot-"+(l?"band":"line")+"-label "+(e.className||"")},n.zIndex=h,h=this.getLabelText(e),this.label=n=r.text(h,0,0,e.useHTML).attr(n).add(),this.axis.chart.styledMode||n.css(e.style));r=f.xBounds||[f[0][1],f[1][1],l?f[2][1]:f[0][1]];f=f.yBounds||[f[0][2],f[1][2],l?f[2][2]:f[0][2]];l=F(r);h=F(f);n.align(e,!1,{x:l,y:h,width:z(r)-l,height:z(f)-h});n.show(!0)};f.prototype.getLabelText=
-function(e){return P(e.formatter)?e.formatter.call(this):e.text};f.prototype.destroy=function(){C(this.axis.plotLinesAndBands,this);delete this.axis;K(this)};return f}();y(f.prototype,{getPlotBandPath:function(e,f,n){void 0===n&&(n=this.options);var l=this.getPlotLinePath({value:f,force:!0,acrossPanes:n.acrossPanes});n=this.getPlotLinePath({value:e,force:!0,acrossPanes:n.acrossPanes});var h=[],w=this.horiz,r=1;e=e<this.min&&f<this.min||e>this.max&&f>this.max;if(n&&l){if(e){var d=n.toString()===l.toString();
-r=0}for(e=0;e<n.length;e+=2){f=n[e];var g=n[e+1],c=l[e],a=l[e+1];"M"!==f[0]&&"L"!==f[0]||"M"!==g[0]&&"L"!==g[0]||"M"!==c[0]&&"L"!==c[0]||"M"!==a[0]&&"L"!==a[0]||(w&&c[1]===f[1]?(c[1]+=r,a[1]+=r):w||c[2]!==f[2]||(c[2]+=r,a[2]+=r),h.push(["M",f[1],f[2]],["L",g[1],g[2]],["L",a[1],a[2]],["L",c[1],c[2]],["Z"]));h.isFlat=d}}return h},addPlotBand:function(e){return this.addPlotBandOrLine(e,"plotBands")},addPlotLine:function(e){return this.addPlotBandOrLine(e,"plotLines")},addPlotBandOrLine:function(e,f){var n=
-new h.PlotLineOrBand(this,e),l=this.userOptions;this.visible&&(n=n.render());if(n){if(f){var v=l[f]||[];v.push(e);l[f]=v}this.plotLinesAndBands.push(n);this._addedPlotLB=!0}return n},removePlotBandOrLine:function(e){for(var f=this.plotLinesAndBands,n=this.options,l=this.userOptions,h=f.length;h--;)f[h].id===e&&f[h].destroy();[n.plotLines||[],l.plotLines||[],n.plotBands||[],l.plotBands||[]].forEach(function(f){for(h=f.length;h--;)(f[h]||{}).id===e&&C(f,f[h])})},removePlotBand:function(e){this.removePlotBandOrLine(e)},
-removePlotLine:function(e){this.removePlotBandOrLine(e)}});h.PlotLineOrBand=m;return h.PlotLineOrBand});N(m,"Core/Tooltip.js",[m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h){var m=f.doc,z=h.clamp,F=h.css,L=h.defined,K=h.discardElement,C=h.extend,y=h.fireEvent,e=h.format,I=h.isNumber,v=h.isString,x=h.merge,D=h.pick,n=h.splat,l=h.syncTimeout,J=h.timeUnits;"";var w=function(){function r(d,g){this.container=void 0;this.crosshairs=[];this.distance=0;this.isHidden=!0;this.isSticky=!1;this.now=
-{};this.options={};this.outside=!1;this.chart=d;this.init(d,g)}r.prototype.applyFilter=function(){var d=this.chart;d.renderer.definition({tagName:"filter",id:"drop-shadow-"+d.index,opacity:.5,children:[{tagName:"feGaussianBlur","in":"SourceAlpha",stdDeviation:1},{tagName:"feOffset",dx:1,dy:1},{tagName:"feComponentTransfer",children:[{tagName:"feFuncA",type:"linear",slope:.3}]},{tagName:"feMerge",children:[{tagName:"feMergeNode"},{tagName:"feMergeNode","in":"SourceGraphic"}]}]});d.renderer.definition({tagName:"style",
-textContent:".highcharts-tooltip-"+d.index+"{filter:url(#drop-shadow-"+d.index+")}"})};r.prototype.bodyFormatter=function(d){return d.map(function(d){var c=d.series.tooltipOptions;return(c[(d.point.formatPrefix||"point")+"Formatter"]||d.point.tooltipFormatter).call(d.point,c[(d.point.formatPrefix||"point")+"Format"]||"")})};r.prototype.cleanSplit=function(d){this.chart.series.forEach(function(g){var c=g&&g.tt;c&&(!c.isActive||d?g.tt=c.destroy():c.isActive=!1)})};r.prototype.defaultFormatter=function(d){var g=
-this.points||n(this);var c=[d.tooltipFooterHeaderFormatter(g[0])];c=c.concat(d.bodyFormatter(g));c.push(d.tooltipFooterHeaderFormatter(g[0],!0));return c};r.prototype.destroy=function(){this.label&&(this.label=this.label.destroy());this.split&&this.tt&&(this.cleanSplit(this.chart,!0),this.tt=this.tt.destroy());this.renderer&&(this.renderer=this.renderer.destroy(),K(this.container));h.clearTimeout(this.hideTimer);h.clearTimeout(this.tooltipTimeout)};r.prototype.getAnchor=function(d,g){var c=this.chart,
-a=c.pointer,q=c.inverted,p=c.plotTop,e=c.plotLeft,f=0,l=0,r,h;d=n(d);this.followPointer&&g?("undefined"===typeof g.chartX&&(g=a.normalize(g)),d=[g.chartX-e,g.chartY-p]):d[0].tooltipPos?d=d[0].tooltipPos:(d.forEach(function(a){r=a.series.yAxis;h=a.series.xAxis;f+=a.plotX+(!q&&h?h.left-e:0);l+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!q&&r?r.top-p:0)}),f/=d.length,l/=d.length,d=[q?c.plotWidth-l:f,this.shared&&!q&&1<d.length&&g?g.chartY-p:q?c.plotHeight-f:l]);return d.map(Math.round)};r.prototype.getDateFormat=
-function(d,g,c,a){var q=this.chart.time,p=q.dateFormat("%m-%d %H:%M:%S.%L",g),e={millisecond:15,second:12,minute:9,hour:6,day:3},f="millisecond";for(l in J){if(d===J.week&&+q.dateFormat("%w",g)===c&&"00:00:00.000"===p.substr(6)){var l="week";break}if(J[l]>d){l=f;break}if(e[l]&&p.substr(e[l])!=="01-01 00:00:00.000".substr(e[l]))break;"week"!==l&&(f=l)}if(l)var r=q.resolveDTLFormat(a[l]).main;return r};r.prototype.getLabel=function(){var d,g,c=this,a=this.chart.renderer,q=this.chart.styledMode,p=this.options,
-e="tooltip"+(L(p.className)?" "+p.className:""),l=(null===(d=p.style)||void 0===d?void 0:d.pointerEvents)||(!this.followPointer&&p.stickOnContact?"auto":"none"),r;d=function(){c.inContact=!0};var n=function(){var a=c.chart.hoverSeries;c.inContact=!1;if(a&&a.onMouseOut)a.onMouseOut()};if(!this.label){this.outside&&(this.container=r=f.doc.createElement("div"),r.className="highcharts-tooltip-container",F(r,{position:"absolute",top:"1px",pointerEvents:l,zIndex:3}),f.doc.body.appendChild(r),this.renderer=
-a=new f.Renderer(r,0,0,null===(g=this.chart.options.chart)||void 0===g?void 0:g.style,void 0,void 0,a.styledMode));this.split?this.label=a.g(e):(this.label=a.label("",0,0,p.shape||"callout",null,null,p.useHTML,null,e).attr({padding:p.padding,r:p.borderRadius}),q||this.label.attr({fill:p.backgroundColor,"stroke-width":p.borderWidth}).css(p.style).css({pointerEvents:l}).shadow(p.shadow));q&&(this.applyFilter(),this.label.addClass("highcharts-tooltip-"+this.chart.index));if(c.outside&&!c.split){var h=
-this.label,w=h.xSetter,v=h.ySetter;h.xSetter=function(a){w.call(h,c.distance);r.style.left=a+"px"};h.ySetter=function(a){v.call(h,c.distance);r.style.top=a+"px"}}this.label.on("mouseenter",d).on("mouseleave",n).attr({zIndex:8}).add()}return this.label};r.prototype.getPosition=function(d,g,c){var a=this.chart,q=this.distance,p={},e=a.inverted&&c.h||0,f,l=this.outside,r=l?m.documentElement.clientWidth-2*q:a.chartWidth,n=l?Math.max(m.body.scrollHeight,m.documentElement.scrollHeight,m.body.offsetHeight,
-m.documentElement.offsetHeight,m.documentElement.clientHeight):a.chartHeight,h=a.pointer.getChartPosition(),w=a.containerScaling,E=function(b){return w?b*w.scaleX:b},u=function(b){return w?b*w.scaleY:b},b=function(b){var k="x"===b;return[b,k?r:n,k?d:g].concat(l?[k?E(d):u(g),k?h.left-q+E(c.plotX+a.plotLeft):h.top-q+u(c.plotY+a.plotTop),0,k?r:n]:[k?d:g,k?c.plotX+a.plotLeft:c.plotY+a.plotTop,k?a.plotLeft:a.plotTop,k?a.plotLeft+a.plotWidth:a.plotTop+a.plotHeight])},k=b("y"),t=b("x"),H=!this.followPointer&&
-D(c.ttBelow,!a.inverted===!!c.negative),v=function(b,a,c,k,d,g,t){var f="y"===b?u(q):E(q),l=(c-k)/2,r=k<d-q,B=d+q+k<a,n=d-f-c+l;d=d+f-l;if(H&&B)p[b]=d;else if(!H&&r)p[b]=n;else if(r)p[b]=Math.min(t-k,0>n-e?n:n-e);else if(B)p[b]=Math.max(g,d+e+c>a?d:d+e);else return!1},U=function(b,a,c,k,d){var g;d<q||d>a-q?g=!1:p[b]=d<c/2?1:d>a-k/2?a-k-2:d-c/2;return g},x=function(b){var a=k;k=t;t=a;f=b},I=function(){!1!==v.apply(0,k)?!1!==U.apply(0,t)||f||(x(!0),I()):f?p.x=p.y=0:(x(!0),I())};(a.inverted||1<this.len)&&
-x();I();return p};r.prototype.getXDateFormat=function(d,g,c){g=g.dateTimeLabelFormats;var a=c&&c.closestPointRange;return(a?this.getDateFormat(a,d.x,c.options.startOfWeek,g):g.day)||g.year};r.prototype.hide=function(d){var g=this;h.clearTimeout(this.hideTimer);d=D(d,this.options.hideDelay,500);this.isHidden||(this.hideTimer=l(function(){g.getLabel().fadeOut(d?void 0:d);g.isHidden=!0},d))};r.prototype.init=function(d,g){this.chart=d;this.options=g;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=
-!0;this.split=g.split&&!d.inverted&&!d.polar;this.shared=g.shared||this.split;this.outside=D(g.outside,!(!d.scrollablePixelsX&&!d.scrollablePixelsY))};r.prototype.isStickyOnContact=function(){return!(this.followPointer||!this.options.stickOnContact||!this.inContact)};r.prototype.move=function(d,g,c,a){var q=this,p=q.now,e=!1!==q.options.animation&&!q.isHidden&&(1<Math.abs(d-p.x)||1<Math.abs(g-p.y)),f=q.followPointer||1<q.len;C(p,{x:e?(2*p.x+d)/3:d,y:e?(p.y+g)/2:g,anchorX:f?void 0:e?(2*p.anchorX+c)/
-3:c,anchorY:f?void 0:e?(p.anchorY+a)/2:a});q.getLabel().attr(p);q.drawTracker();e&&(h.clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){q&&q.move(d,g,c,a)},32))};r.prototype.refresh=function(d,g){var c=this.chart,a=this.options,q=d,p={},e=[],f=a.formatter||this.defaultFormatter;p=this.shared;var l=c.styledMode;if(a.enabled){h.clearTimeout(this.hideTimer);this.followPointer=n(q)[0].series.tooltipOptions.followPointer;var r=this.getAnchor(q,g);g=r[0];var w=r[1];!p||q.series&&
-q.series.noSharedTooltip?p=q.getLabelConfig():(c.pointer.applyInactiveState(q),q.forEach(function(a){a.setState("hover");e.push(a.getLabelConfig())}),p={x:q[0].category,y:q[0].y},p.points=e,q=q[0]);this.len=e.length;c=f.call(p,this);f=q.series;this.distance=D(f.tooltipOptions.distance,16);!1===c?this.hide():(this.split?this.renderSplit(c,n(d)):(d=this.getLabel(),a.style.width&&!l||d.css({width:this.chart.spacingBox.width+"px"}),d.attr({text:c&&c.join?c.join(""):c}),d.removeClass(/highcharts-color-[\d]+/g).addClass("highcharts-color-"+
-D(q.colorIndex,f.colorIndex)),l||d.attr({stroke:a.borderColor||q.color||f.color||"#666666"}),this.updatePosition({plotX:g,plotY:w,negative:q.negative,ttBelow:q.ttBelow,h:r[2]||0})),this.isHidden&&this.label&&this.label.attr({opacity:1}).show(),this.isHidden=!1);y(this,"refresh")}};r.prototype.renderSplit=function(d,g){function c(b,a,c,d,g){void 0===g&&(g=!0);c?(a=I?0:F,b=z(b-d/2,m.left,m.right-d)):(a-=y,b=g?b-d-k:b+k,b=z(b,g?b:m.left,m.right));return{x:b,y:a}}var a=this,q=a.chart,p=a.chart,e=p.plotHeight,
-l=p.plotLeft,r=p.plotTop,n=p.pointer,h=p.renderer,w=p.scrollablePixelsY,O=void 0===w?0:w;w=p.scrollingContainer;w=void 0===w?{scrollLeft:0,scrollTop:0}:w;var E=w.scrollLeft,u=w.scrollTop,b=p.styledMode,k=a.distance,t=a.options,H=a.options.positioner,m={left:E,right:E+p.chartWidth,top:u,bottom:u+p.chartHeight},x=a.getLabel(),I=!(!q.xAxis[0]||!q.xAxis[0].opposite),y=r+u,J=0,F=e-O;v(d)&&(d=[!1,d]);d=d.slice(0,g.length+1).reduce(function(d,p,q){if(!1!==p&&""!==p){q=g[q-1]||{isHeader:!0,plotX:g[0].plotX,
-plotY:e,series:{}};var f=q.isHeader,n=f?a:q.series,B=n.tt,A=q.isHeader;var w=q.series;var E="highcharts-color-"+D(q.colorIndex,w.colorIndex,"none");B||(B={padding:t.padding,r:t.borderRadius},b||(B.fill=t.backgroundColor,B["stroke-width"]=t.borderWidth),B=h.label("",0,0,t[A?"headerShape":"shape"]||"callout",void 0,void 0,t.useHTML).addClass((A?"highcharts-tooltip-header ":"")+"highcharts-tooltip-box "+E).attr(B).add(x));B.isActive=!0;B.attr({text:p});b||B.css(t.style).shadow(t.shadow).attr({stroke:t.borderColor||
-q.color||w.color||"#333333"});p=n.tt=B;A=p.getBBox();n=A.width+p.strokeWidth();f&&(J=A.height,F+=J,I&&(y-=J));w=q.plotX;w=void 0===w?0:w;E=q.plotY;E=void 0===E?0:E;var v=q.series;if(q.isHeader){w=l+w;var G=r+e/2}else B=v.xAxis,v=v.yAxis,w=B.pos+z(w,-k,B.len+k),v.pos+E>=u+r&&v.pos+E<=u+r+e-O&&(G=v.pos+E);w=z(w,m.left-k,m.right+k);"number"===typeof G?(A=A.height+1,E=H?H.call(a,n,A,q):c(w,G,f,n),d.push({align:H?0:void 0,anchorX:w,anchorY:G,boxWidth:n,point:q,rank:D(E.rank,f?1:0),size:A,target:E.y,tt:p,
-x:E.x})):p.isActive=!1}return d},[]);!H&&d.some(function(b){return b.x<m.left})&&(d=d.map(function(b){var a=c(b.anchorX,b.anchorY,b.point.isHeader,b.boxWidth,!1);return C(b,{target:a.y,x:a.x})}));a.cleanSplit();f.distribute(d,F);d.forEach(function(b){var a=b.pos;b.tt.attr({visibility:"undefined"===typeof a?"hidden":"inherit",x:b.x,y:a+y,anchorX:b.anchorX,anchorY:b.anchorY})});d=a.container;q=a.renderer;a.outside&&d&&q&&(p=x.getBBox(),q.setSize(p.width+p.x,p.height+p.y,!1),n=n.getChartPosition(),d.style.left=
-n.left+"px",d.style.top=n.top+"px")};r.prototype.drawTracker=function(){if(this.followPointer||!this.options.stickOnContact)this.tracker&&this.tracker.destroy();else{var d=this.chart,g=this.label,c=d.hoverPoint;if(g&&c){var a={x:0,y:0,width:0,height:0};c=this.getAnchor(c);var q=g.getBBox();c[0]+=d.plotLeft-g.translateX;c[1]+=d.plotTop-g.translateY;a.x=Math.min(0,c[0]);a.y=Math.min(0,c[1]);a.width=0>c[0]?Math.max(Math.abs(c[0]),q.width-c[0]):Math.max(Math.abs(c[0]),q.width);a.height=0>c[1]?Math.max(Math.abs(c[1]),
-q.height-Math.abs(c[1])):Math.max(Math.abs(c[1]),q.height);this.tracker?this.tracker.attr(a):(this.tracker=g.renderer.rect(a).addClass("highcharts-tracker").add(g),d.styledMode||this.tracker.attr({fill:"rgba(0,0,0,0)"}))}}};r.prototype.styledModeFormat=function(d){return d.replace('style="font-size: 10px"','class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g,'class="highcharts-color-{$1.colorIndex}"')};r.prototype.tooltipFooterHeaderFormatter=function(d,g){var c=g?"footer":
-"header",a=d.series,q=a.tooltipOptions,p=q.xDateFormat,f=a.xAxis,l=f&&"datetime"===f.options.type&&I(d.key),r=q[c+"Format"];g={isFooter:g,labelConfig:d};y(this,"headerFormatter",g,function(c){l&&!p&&(p=this.getXDateFormat(d,q,f));l&&p&&(d.point&&d.point.tooltipDateKeys||["key"]).forEach(function(a){r=r.replace("{point."+a+"}","{point."+a+":"+p+"}")});a.chart.styledMode&&(r=this.styledModeFormat(r));c.text=e(r,{point:d,series:a},this.chart)});return g.text};r.prototype.update=function(d){this.destroy();
-x(!0,this.chart.options.tooltip.userOptions,d);this.init(this.chart,x(!0,this.options,d))};r.prototype.updatePosition=function(d){var g=this.chart,c=g.pointer,a=this.getLabel(),q=d.plotX+g.plotLeft,p=d.plotY+g.plotTop;c=c.getChartPosition();d=(this.options.positioner||this.getPosition).call(this,a.width,a.height,d);if(this.outside){var e=(this.options.borderWidth||0)+2*this.distance;this.renderer.setSize(a.width+e,a.height+e,!1);if(g=g.containerScaling)F(this.container,{transform:"scale("+g.scaleX+
-", "+g.scaleY+")"}),q*=g.scaleX,p*=g.scaleY;q+=c.left-d.x;p+=c.top-d.y}this.move(Math.round(d.x),Math.round(d.y||0),q,p)};return r}();f.Tooltip=w;return f.Tooltip});N(m,"Core/Pointer.js",[m["Core/Color/Color.js"],m["Core/Globals.js"],m["Core/Tooltip.js"],m["Core/Utilities.js"]],function(f,h,m,z){var F=f.parse,P=h.charts,K=h.noop,C=z.addEvent,y=z.attr,e=z.css,I=z.defined,v=z.extend,x=z.find,D=z.fireEvent,n=z.isNumber,l=z.isObject,J=z.objectEach,w=z.offset,r=z.pick,d=z.splat;"";f=function(){function g(c,
-a){this.lastValidTouch={};this.pinchDown=[];this.runChartClick=!1;this.chart=c;this.hasDragged=!1;this.options=a;this.unbindContainerMouseLeave=function(){};this.unbindContainerMouseEnter=function(){};this.init(c,a)}g.prototype.applyInactiveState=function(c){var a=[],d;(c||[]).forEach(function(c){d=c.series;a.push(d);d.linkedParent&&a.push(d.linkedParent);d.linkedSeries&&(a=a.concat(d.linkedSeries));d.navigatorSeries&&a.push(d.navigatorSeries)});this.chart.series.forEach(function(c){-1===a.indexOf(c)?
-c.setState("inactive",!0):c.options.inactiveOtherPoints&&c.setAllPointsToState("inactive")})};g.prototype.destroy=function(){var c=this;"undefined"!==typeof c.unDocMouseMove&&c.unDocMouseMove();this.unbindContainerMouseLeave();h.chartCount||(h.unbindDocumentMouseUp&&(h.unbindDocumentMouseUp=h.unbindDocumentMouseUp()),h.unbindDocumentTouchEnd&&(h.unbindDocumentTouchEnd=h.unbindDocumentTouchEnd()));clearInterval(c.tooltipTimeout);J(c,function(a,d){c[d]=void 0})};g.prototype.drag=function(c){var a=this.chart,
-d=a.options.chart,g=c.chartX,e=c.chartY,f=this.zoomHor,r=this.zoomVert,n=a.plotLeft,h=a.plotTop,w=a.plotWidth,v=a.plotHeight,E=this.selectionMarker,u=this.mouseDownX||0,b=this.mouseDownY||0,k=l(d.panning)?d.panning&&d.panning.enabled:d.panning,t=d.panKey&&c[d.panKey+"Key"];if(!E||!E.touch)if(g<n?g=n:g>n+w&&(g=n+w),e<h?e=h:e>h+v&&(e=h+v),this.hasDragged=Math.sqrt(Math.pow(u-g,2)+Math.pow(b-e,2)),10<this.hasDragged){var H=a.isInsidePlot(u-n,b-h);a.hasCartesianSeries&&(this.zoomX||this.zoomY)&&H&&!t&&
-!E&&(this.selectionMarker=E=a.renderer.rect(n,h,f?1:w,r?1:v,0).attr({"class":"highcharts-selection-marker",zIndex:7}).add(),a.styledMode||E.attr({fill:d.selectionMarkerFill||F("#335cad").setOpacity(.25).get()}));E&&f&&(g-=u,E.attr({width:Math.abs(g),x:(0<g?0:g)+u}));E&&r&&(g=e-b,E.attr({height:Math.abs(g),y:(0<g?0:g)+b}));H&&!E&&k&&a.pan(c,d.panning)}};g.prototype.dragStart=function(c){var a=this.chart;a.mouseIsDown=c.type;a.cancelClick=!1;a.mouseDownX=this.mouseDownX=c.chartX;a.mouseDownY=this.mouseDownY=
-c.chartY};g.prototype.drop=function(c){var a=this,d=this.chart,g=this.hasPinched;if(this.selectionMarker){var f={originalEvent:c,xAxis:[],yAxis:[]},l=this.selectionMarker,r=l.attr?l.attr("x"):l.x,h=l.attr?l.attr("y"):l.y,w=l.attr?l.attr("width"):l.width,m=l.attr?l.attr("height"):l.height,O;if(this.hasDragged||g)d.axes.forEach(function(d){if(d.zoomEnabled&&I(d.min)&&(g||a[{xAxis:"zoomX",yAxis:"zoomY"}[d.coll]])&&n(r)&&n(h)){var p=d.horiz,b="touchend"===c.type?d.minPixelPadding:0,k=d.toValue((p?r:h)+
-b);p=d.toValue((p?r+w:h+m)-b);f[d.coll].push({axis:d,min:Math.min(k,p),max:Math.max(k,p)});O=!0}}),O&&D(d,"selection",f,function(a){d.zoom(v(a,g?{animation:!1}:null))});n(d.index)&&(this.selectionMarker=this.selectionMarker.destroy());g&&this.scaleGroups()}d&&n(d.index)&&(e(d.container,{cursor:d._cursor}),d.cancelClick=10<this.hasDragged,d.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[])};g.prototype.findNearestKDPoint=function(c,a,d){var g=this.chart,q=g.hoverPoint;g=g.tooltip;if(q&&
-g&&g.isStickyOnContact())return q;var e;c.forEach(function(c){var g=!(c.noSharedTooltip&&a)&&0>c.options.findNearestPointBy.indexOf("y");c=c.searchPoint(d,g);if((g=l(c,!0))&&!(g=!l(e,!0))){g=e.distX-c.distX;var p=e.dist-c.dist,q=(c.series.group&&c.series.group.zIndex)-(e.series.group&&e.series.group.zIndex);g=0<(0!==g&&a?g:0!==p?p:0!==q?q:e.series.index>c.series.index?-1:1)}g&&(e=c)});return e};g.prototype.getChartCoordinatesFromPoint=function(c,a){var d=c.series,g=d.xAxis;d=d.yAxis;var e=r(c.clientX,
-c.plotX),f=c.shapeArgs;if(g&&d)return a?{chartX:g.len+g.pos-e,chartY:d.len+d.pos-c.plotY}:{chartX:e+g.pos,chartY:c.plotY+d.pos};if(f&&f.x&&f.y)return{chartX:f.x,chartY:f.y}};g.prototype.getChartPosition=function(){return this.chartPosition||(this.chartPosition=w(this.chart.container))};g.prototype.getCoordinates=function(c){var a={xAxis:[],yAxis:[]};this.chart.axes.forEach(function(d){a[d.isXAxis?"xAxis":"yAxis"].push({axis:d,value:d.toValue(c[d.horiz?"chartX":"chartY"])})});return a};g.prototype.getHoverData=
-function(c,a,d,g,e,f){var p,q=[];g=!(!g||!c);var n=a&&!a.stickyTracking,h={chartX:f?f.chartX:void 0,chartY:f?f.chartY:void 0,shared:e};D(this,"beforeGetHoverData",h);n=n?[a]:d.filter(function(a){return h.filter?h.filter(a):a.visible&&!(!e&&a.directTouch)&&r(a.options.enableMouseTracking,!0)&&a.stickyTracking});a=(p=g||!f?c:this.findNearestKDPoint(n,e,f))&&p.series;p&&(e&&!a.noSharedTooltip?(n=d.filter(function(a){return h.filter?h.filter(a):a.visible&&!(!e&&a.directTouch)&&r(a.options.enableMouseTracking,
-!0)&&!a.noSharedTooltip}),n.forEach(function(a){var c=x(a.points,function(a){return a.x===p.x&&!a.isNull});l(c)&&(a.chart.isBoosting&&(c=a.getPoint(c)),q.push(c))})):q.push(p));h={hoverPoint:p};D(this,"afterGetHoverData",h);return{hoverPoint:h.hoverPoint,hoverSeries:a,hoverPoints:q}};g.prototype.getPointFromEvent=function(c){c=c.target;for(var a;c&&!a;)a=c.point,c=c.parentNode;return a};g.prototype.onTrackerMouseOut=function(c){c=c.relatedTarget||c.toElement;var a=this.chart.hoverSeries;this.isDirectTouch=
-!1;if(!(!a||!c||a.stickyTracking||this.inClass(c,"highcharts-tooltip")||this.inClass(c,"highcharts-series-"+a.index)&&this.inClass(c,"highcharts-tracker")))a.onMouseOut()};g.prototype.inClass=function(c,a){for(var d;c;){if(d=y(c,"class")){if(-1!==d.indexOf(a))return!0;if(-1!==d.indexOf("highcharts-container"))return!1}c=c.parentNode}};g.prototype.init=function(c,a){this.options=a;this.chart=c;this.runChartClick=a.chart.events&&!!a.chart.events.click;this.pinchDown=[];this.lastValidTouch={};m&&(c.tooltip=
-new m(c,a.tooltip),this.followTouchMove=r(a.tooltip.followTouchMove,!0));this.setDOMEvents()};g.prototype.normalize=function(c,a){var d=c.touches,g=d?d.length?d.item(0):r(d.changedTouches,c.changedTouches)[0]:c;a||(a=this.getChartPosition());d=g.pageX-a.left;a=g.pageY-a.top;if(g=this.chart.containerScaling)d/=g.scaleX,a/=g.scaleY;return v(c,{chartX:Math.round(d),chartY:Math.round(a)})};g.prototype.onContainerClick=function(c){var a=this.chart,d=a.hoverPoint;c=this.normalize(c);var g=a.plotLeft,e=
-a.plotTop;a.cancelClick||(d&&this.inClass(c.target,"highcharts-tracker")?(D(d.series,"click",v(c,{point:d})),a.hoverPoint&&d.firePointEvent("click",c)):(v(c,this.getCoordinates(c)),a.isInsidePlot(c.chartX-g,c.chartY-e)&&D(a,"click",c)))};g.prototype.onContainerMouseDown=function(c){var a=1===((c.buttons||c.button)&1);c=this.normalize(c);if(h.isFirefox&&0!==c.button)this.onContainerMouseMove(c);if("undefined"===typeof c.button||a)this.zoomOption(c),a&&c.preventDefault&&c.preventDefault(),this.dragStart(c)};
-g.prototype.onContainerMouseLeave=function(c){var a=P[r(h.hoverChartIndex,-1)],d=this.chart.tooltip;c=this.normalize(c);a&&(c.relatedTarget||c.toElement)&&(a.pointer.reset(),a.pointer.chartPosition=void 0);d&&!d.isHidden&&this.reset()};g.prototype.onContainerMouseEnter=function(c){delete this.chartPosition};g.prototype.onContainerMouseMove=function(c){var a=this.chart;c=this.normalize(c);this.setHoverChartIndex();c.preventDefault||(c.returnValue=!1);"mousedown"===a.mouseIsDown&&this.drag(c);a.openMenu||
-!this.inClass(c.target,"highcharts-tracker")&&!a.isInsidePlot(c.chartX-a.plotLeft,c.chartY-a.plotTop)||this.runPointActions(c)};g.prototype.onDocumentTouchEnd=function(c){P[h.hoverChartIndex]&&P[h.hoverChartIndex].pointer.drop(c)};g.prototype.onContainerTouchMove=function(c){this.touch(c)};g.prototype.onContainerTouchStart=function(c){this.zoomOption(c);this.touch(c,!0)};g.prototype.onDocumentMouseMove=function(c){var a=this.chart,d=this.chartPosition;c=this.normalize(c,d);var g=a.tooltip;!d||g&&
-g.isStickyOnContact()||a.isInsidePlot(c.chartX-a.plotLeft,c.chartY-a.plotTop)||this.inClass(c.target,"highcharts-tracker")||this.reset()};g.prototype.onDocumentMouseUp=function(c){var a=P[r(h.hoverChartIndex,-1)];a&&a.pointer.drop(c)};g.prototype.pinch=function(c){var a=this,d=a.chart,g=a.pinchDown,e=c.touches||[],f=e.length,l=a.lastValidTouch,n=a.hasZoom,h=a.selectionMarker,w={},m=1===f&&(a.inClass(c.target,"highcharts-tracker")&&d.runTrackerClick||a.runChartClick),E={};1<f&&(a.initiated=!0);n&&
-a.initiated&&!m&&!1!==c.cancelable&&c.preventDefault();[].map.call(e,function(c){return a.normalize(c)});"touchstart"===c.type?([].forEach.call(e,function(a,b){g[b]={chartX:a.chartX,chartY:a.chartY}}),l.x=[g[0].chartX,g[1]&&g[1].chartX],l.y=[g[0].chartY,g[1]&&g[1].chartY],d.axes.forEach(function(a){if(a.zoomEnabled){var b=d.bounds[a.horiz?"h":"v"],c=a.minPixelPadding,g=a.toPixels(Math.min(r(a.options.min,a.dataMin),a.dataMin)),p=a.toPixels(Math.max(r(a.options.max,a.dataMax),a.dataMax)),q=Math.max(g,
-p);b.min=Math.min(a.pos,Math.min(g,p)-c);b.max=Math.max(a.pos+a.len,q+c)}}),a.res=!0):a.followTouchMove&&1===f?this.runPointActions(a.normalize(c)):g.length&&(h||(a.selectionMarker=h=v({destroy:K,touch:!0},d.plotBox)),a.pinchTranslate(g,e,w,h,E,l),a.hasPinched=n,a.scaleGroups(w,E),a.res&&(a.res=!1,this.reset(!1,0)))};g.prototype.pinchTranslate=function(c,a,d,g,e,f){this.zoomHor&&this.pinchTranslateDirection(!0,c,a,d,g,e,f);this.zoomVert&&this.pinchTranslateDirection(!1,c,a,d,g,e,f)};g.prototype.pinchTranslateDirection=
-function(c,a,d,g,e,f,l,r){var p=this.chart,q=c?"x":"y",n=c?"X":"Y",h="chart"+n,u=c?"width":"height",b=p["plot"+(c?"Left":"Top")],k,t,B=r||1,w=p.inverted,A=p.bounds[c?"h":"v"],v=1===a.length,G=a[0][h],m=d[0][h],D=!v&&a[1][h],M=!v&&d[1][h];d=function(){"number"===typeof M&&20<Math.abs(G-D)&&(B=r||Math.abs(m-M)/Math.abs(G-D));t=(b-m)/B+G;k=p["plot"+(c?"Width":"Height")]/B};d();a=t;if(a<A.min){a=A.min;var x=!0}else a+k>A.max&&(a=A.max-k,x=!0);x?(m-=.8*(m-l[q][0]),"number"===typeof M&&(M-=.8*(M-l[q][1])),
-d()):l[q]=[m,M];w||(f[q]=t-b,f[u]=k);f=w?1/B:B;e[u]=k;e[q]=a;g[w?c?"scaleY":"scaleX":"scale"+n]=B;g["translate"+n]=f*b+(m-f*G)};g.prototype.reset=function(c,a){var g=this.chart,p=g.hoverSeries,e=g.hoverPoint,f=g.hoverPoints,l=g.tooltip,r=l&&l.shared?f:e;c&&r&&d(r).forEach(function(a){a.series.isCartesian&&"undefined"===typeof a.plotX&&(c=!1)});if(c)l&&r&&d(r).length&&(l.refresh(r),l.shared&&f?f.forEach(function(a){a.setState(a.state,!0);a.series.isCartesian&&(a.series.xAxis.crosshair&&a.series.xAxis.drawCrosshair(null,
-a),a.series.yAxis.crosshair&&a.series.yAxis.drawCrosshair(null,a))}):e&&(e.setState(e.state,!0),g.axes.forEach(function(a){a.crosshair&&e.series[a.coll]===a&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();f&&f.forEach(function(a){a.setState()});if(p)p.onMouseOut();l&&l.hide(a);this.unDocMouseMove&&(this.unDocMouseMove=this.unDocMouseMove());g.axes.forEach(function(a){a.hideCrosshair()});this.hoverX=g.hoverPoints=g.hoverPoint=null}};g.prototype.runPointActions=function(c,a){var d=this.chart,
-g=d.tooltip&&d.tooltip.options.enabled?d.tooltip:void 0,e=g?g.shared:!1,f=a||d.hoverPoint,l=f&&f.series||d.hoverSeries;l=this.getHoverData(f,l,d.series,(!c||"touchmove"!==c.type)&&(!!a||l&&l.directTouch&&this.isDirectTouch),e,c);f=l.hoverPoint;var n=l.hoverPoints;a=(l=l.hoverSeries)&&l.tooltipOptions.followPointer;e=e&&l&&!l.noSharedTooltip;if(f&&(f!==d.hoverPoint||g&&g.isHidden)){(d.hoverPoints||[]).forEach(function(a){-1===n.indexOf(a)&&a.setState()});if(d.hoverSeries!==l)l.onMouseOver();this.applyInactiveState(n);
-(n||[]).forEach(function(a){a.setState("hover")});d.hoverPoint&&d.hoverPoint.firePointEvent("mouseOut");if(!f.series)return;d.hoverPoints=n;d.hoverPoint=f;f.firePointEvent("mouseOver");g&&g.refresh(e?n:f,c)}else a&&g&&!g.isHidden&&(f=g.getAnchor([{}],c),g.updatePosition({plotX:f[0],plotY:f[1]}));this.unDocMouseMove||(this.unDocMouseMove=C(d.container.ownerDocument,"mousemove",function(a){var c=P[h.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(a)}));d.axes.forEach(function(a){var g=r((a.crosshair||
-{}).snap,!0),p;g&&((p=d.hoverPoint)&&p.series[a.coll]===a||(p=x(n,function(c){return c.series[a.coll]===a})));p||!g?a.drawCrosshair(c,p):a.hideCrosshair()})};g.prototype.scaleGroups=function(c,a){var d=this.chart,g;d.series.forEach(function(p){g=c||p.getPlotBox();p.xAxis&&p.xAxis.zoomEnabled&&p.group&&(p.group.attr(g),p.markerGroup&&(p.markerGroup.attr(g),p.markerGroup.clip(a?d.clipRect:null)),p.dataLabelsGroup&&p.dataLabelsGroup.attr(g))});d.clipRect.attr(a||d.clipBox)};g.prototype.setDOMEvents=
-function(){var c=this.chart.container,a=c.ownerDocument;c.onmousedown=this.onContainerMouseDown.bind(this);c.onmousemove=this.onContainerMouseMove.bind(this);c.onclick=this.onContainerClick.bind(this);this.unbindContainerMouseEnter=C(c,"mouseenter",this.onContainerMouseEnter.bind(this));this.unbindContainerMouseLeave=C(c,"mouseleave",this.onContainerMouseLeave.bind(this));h.unbindDocumentMouseUp||(h.unbindDocumentMouseUp=C(a,"mouseup",this.onDocumentMouseUp.bind(this)));h.hasTouch&&(C(c,"touchstart",
-this.onContainerTouchStart.bind(this)),C(c,"touchmove",this.onContainerTouchMove.bind(this)),h.unbindDocumentTouchEnd||(h.unbindDocumentTouchEnd=C(a,"touchend",this.onDocumentTouchEnd.bind(this))))};g.prototype.setHoverChartIndex=function(){var c=this.chart,a=h.charts[r(h.hoverChartIndex,-1)];if(a&&a!==c)a.pointer.onContainerMouseLeave({relatedTarget:!0});a&&a.mouseIsDown||(h.hoverChartIndex=c.index)};g.prototype.touch=function(c,a){var d=this.chart,g;this.setHoverChartIndex();if(1===c.touches.length)if(c=
-this.normalize(c),(g=d.isInsidePlot(c.chartX-d.plotLeft,c.chartY-d.plotTop))&&!d.openMenu){a&&this.runPointActions(c);if("touchmove"===c.type){a=this.pinchDown;var e=a[0]?4<=Math.sqrt(Math.pow(a[0].chartX-c.chartX,2)+Math.pow(a[0].chartY-c.chartY,2)):!1}r(e,!0)&&this.pinch(c)}else a&&this.reset();else 2===c.touches.length&&this.pinch(c)};g.prototype.zoomOption=function(c){var a=this.chart,d=a.options.chart,g=d.zoomType||"";a=a.inverted;/touch/.test(c.type)&&(g=r(d.pinchType,g));this.zoomX=c=/x/.test(g);
-this.zoomY=g=/y/.test(g);this.zoomHor=c&&!a||g&&a;this.zoomVert=g&&!a||c&&a;this.hasZoom=c||g};return g}();return h.Pointer=f});N(m,"Core/MSPointer.js",[m["Core/Globals.js"],m["Core/Pointer.js"],m["Core/Utilities.js"]],function(f,h,m){function z(){var e=[];e.item=function(e){return this[e]};v(D,function(f){e.push({pageX:f.pageX,pageY:f.pageY,target:f.target})});return e}function F(e,n,h,r){"touch"!==e.pointerType&&e.pointerType!==e.MSPOINTER_TYPE_TOUCH||!K[f.hoverChartIndex]||(r(e),r=K[f.hoverChartIndex].pointer,
-r[n]({type:h,target:e.currentTarget,preventDefault:y,touches:z()}))}var P=this&&this.__extends||function(){var e=function(f,l){e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,d){e.__proto__=d}||function(e,d){for(var g in d)d.hasOwnProperty(g)&&(e[g]=d[g])};return e(f,l)};return function(f,l){function r(){this.constructor=f}e(f,l);f.prototype=null===l?Object.create(l):(r.prototype=l.prototype,new r)}}(),K=f.charts,C=f.doc,y=f.noop,e=m.addEvent,I=m.css,v=m.objectEach,x=m.removeEvent,
-D={},n=!!f.win.PointerEvent;return function(f){function l(){return null!==f&&f.apply(this,arguments)||this}P(l,f);l.prototype.batchMSEvents=function(e){e(this.chart.container,n?"pointerdown":"MSPointerDown",this.onContainerPointerDown);e(this.chart.container,n?"pointermove":"MSPointerMove",this.onContainerPointerMove);e(C,n?"pointerup":"MSPointerUp",this.onDocumentPointerUp)};l.prototype.destroy=function(){this.batchMSEvents(x);f.prototype.destroy.call(this)};l.prototype.init=function(e,l){f.prototype.init.call(this,
-e,l);this.hasZoom&&I(e.container,{"-ms-touch-action":"none","touch-action":"none"})};l.prototype.onContainerPointerDown=function(e){F(e,"onContainerTouchStart","touchstart",function(e){D[e.pointerId]={pageX:e.pageX,pageY:e.pageY,target:e.currentTarget}})};l.prototype.onContainerPointerMove=function(e){F(e,"onContainerTouchMove","touchmove",function(e){D[e.pointerId]={pageX:e.pageX,pageY:e.pageY};D[e.pointerId].target||(D[e.pointerId].target=e.currentTarget)})};l.prototype.onDocumentPointerUp=function(e){F(e,
-"onDocumentTouchEnd","touchend",function(e){delete D[e.pointerId]})};l.prototype.setDOMEvents=function(){f.prototype.setDOMEvents.call(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(e)};return l}(h)});N(m,"Core/Legend.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h,m){var z=f.animObject,F=f.setAnimation,L=m.addEvent,K=m.css,C=m.defined,y=m.discardElement,e=m.find,I=m.fireEvent,v=m.format,x=m.isNumber,D=m.merge,n=m.pick,l=m.relativeLength,
-J=m.stableSort,w=m.syncTimeout;f=m.wrap;m=h.isFirefox;var r=h.marginNames,d=h.win,g=function(){function c(a,c){this.allItems=[];this.contentGroup=this.box=void 0;this.display=!1;this.group=void 0;this.offsetWidth=this.maxLegendWidth=this.maxItemWidth=this.legendWidth=this.legendHeight=this.lastLineHeight=this.lastItemY=this.itemY=this.itemX=this.itemMarginTop=this.itemMarginBottom=this.itemHeight=this.initialItemY=0;this.options={};this.padding=0;this.pages=[];this.proximate=!1;this.scrollGroup=void 0;
-this.widthOption=this.totalItemWidth=this.titleHeight=this.symbolWidth=this.symbolHeight=0;this.chart=a;this.init(a,c)}c.prototype.init=function(a,c){this.chart=a;this.setOptions(c);c.enabled&&(this.render(),L(this.chart,"endResize",function(){this.legend.positionCheckboxes()}),this.proximate?this.unchartrender=L(this.chart,"render",function(){this.legend.proximatePositions();this.legend.positionItems()}):this.unchartrender&&this.unchartrender())};c.prototype.setOptions=function(a){var c=n(a.padding,
-8);this.options=a;this.chart.styledMode||(this.itemStyle=a.itemStyle,this.itemHiddenStyle=D(this.itemStyle,a.itemHiddenStyle));this.itemMarginTop=a.itemMarginTop||0;this.itemMarginBottom=a.itemMarginBottom||0;this.padding=c;this.initialItemY=c-5;this.symbolWidth=n(a.symbolWidth,16);this.pages=[];this.proximate="proximate"===a.layout&&!this.chart.inverted;this.baseline=void 0};c.prototype.update=function(a,c){var d=this.chart;this.setOptions(D(!0,this.options,a));this.destroy();d.isDirtyLegend=d.isDirtyBox=
-!0;n(c,!0)&&d.redraw();I(this,"afterUpdate")};c.prototype.colorizeItem=function(a,c){a.legendGroup[c?"removeClass":"addClass"]("highcharts-legend-item-hidden");if(!this.chart.styledMode){var d=this.options,g=a.legendItem,e=a.legendLine,f=a.legendSymbol,q=this.itemHiddenStyle.color;d=c?d.itemStyle.color:q;var l=c?a.color||q:q,r=a.options&&a.options.marker,n={fill:l};g&&g.css({fill:d,color:d});e&&e.attr({stroke:l});f&&(r&&f.isMarker&&(n=a.pointAttribs(),c||(n.stroke=n.fill=q)),f.attr(n))}I(this,"afterColorizeItem",
-{item:a,visible:c})};c.prototype.positionItems=function(){this.allItems.forEach(this.positionItem,this);this.chart.isResizing||this.positionCheckboxes()};c.prototype.positionItem=function(a){var c=this,d=this.options,g=d.symbolPadding,e=!d.rtl,f=a._legendItemPos;d=f[0];f=f[1];var l=a.checkbox,n=a.legendGroup;n&&n.element&&(g={translateX:e?d:this.legendWidth-d-2*g-4,translateY:f},e=function(){I(c,"afterPositionItem",{item:a})},C(n.translateY)?n.animate(g,void 0,e):(n.attr(g),e()));l&&(l.x=d,l.y=f)};
-c.prototype.destroyItem=function(a){var c=a.checkbox;["legendItem","legendLine","legendSymbol","legendGroup"].forEach(function(c){a[c]&&(a[c]=a[c].destroy())});c&&y(a.checkbox)};c.prototype.destroy=function(){function a(a){this[a]&&(this[a]=this[a].destroy())}this.getAllItems().forEach(function(c){["legendItem","legendGroup"].forEach(a,c)});"clipRect up down pager nav box title group".split(" ").forEach(a,this);this.display=null};c.prototype.positionCheckboxes=function(){var a=this.group&&this.group.alignAttr,
-c=this.clipHeight||this.legendHeight,d=this.titleHeight;if(a){var g=a.translateY;this.allItems.forEach(function(e){var p=e.checkbox;if(p){var f=g+d+p.y+(this.scrollOffset||0)+3;K(p,{left:a.translateX+e.checkboxOffset+p.x-20+"px",top:f+"px",display:this.proximate||f>g-6&&f<g+c-6?"":"none"})}},this)}};c.prototype.renderTitle=function(){var a=this.options,c=this.padding,d=a.title,g=0;d.text&&(this.title||(this.title=this.chart.renderer.label(d.text,c-3,c-4,null,null,null,a.useHTML,null,"legend-title").attr({zIndex:1}),
-this.chart.styledMode||this.title.css(d.style),this.title.add(this.group)),d.width||this.title.css({width:this.maxLegendWidth+"px"}),a=this.title.getBBox(),g=a.height,this.offsetWidth=a.width,this.contentGroup.attr({translateY:g}));this.titleHeight=g};c.prototype.setText=function(a){var c=this.options;a.legendItem.attr({text:c.labelFormat?v(c.labelFormat,a,this.chart):c.labelFormatter.call(a)})};c.prototype.renderItem=function(a){var c=this.chart,d=c.renderer,g=this.options,e=this.symbolWidth,f=g.symbolPadding,
-l=this.itemStyle,r=this.itemHiddenStyle,h="horizontal"===g.layout?n(g.itemDistance,20):0,w=!g.rtl,v=a.legendItem,u=!a.series,b=!u&&a.series.drawLegendSymbol?a.series:a,k=b.options;k=this.createCheckboxForItem&&k&&k.showCheckbox;h=e+f+h+(k?20:0);var t=g.useHTML,H=a.options.className;v||(a.legendGroup=d.g("legend-item").addClass("highcharts-"+b.type+"-series highcharts-color-"+a.colorIndex+(H?" "+H:"")+(u?" highcharts-series-"+a.index:"")).attr({zIndex:1}).add(this.scrollGroup),a.legendItem=v=d.text("",
-w?e+f:-f,this.baseline||0,t),c.styledMode||v.css(D(a.visible?l:r)),v.attr({align:w?"left":"right",zIndex:2}).add(a.legendGroup),this.baseline||(this.fontMetrics=d.fontMetrics(c.styledMode?12:l.fontSize,v),this.baseline=this.fontMetrics.f+3+this.itemMarginTop,v.attr("y",this.baseline)),this.symbolHeight=g.symbolHeight||this.fontMetrics.f,b.drawLegendSymbol(this,a),this.setItemEvents&&this.setItemEvents(a,v,t));k&&!a.checkbox&&this.createCheckboxForItem&&this.createCheckboxForItem(a);this.colorizeItem(a,
-a.visible);!c.styledMode&&l.width||v.css({width:(g.itemWidth||this.widthOption||c.spacingBox.width)-h+"px"});this.setText(a);c=v.getBBox();a.itemWidth=a.checkboxOffset=g.itemWidth||a.legendItemWidth||c.width+h;this.maxItemWidth=Math.max(this.maxItemWidth,a.itemWidth);this.totalItemWidth+=a.itemWidth;this.itemHeight=a.itemHeight=Math.round(a.legendItemHeight||c.height||this.symbolHeight)};c.prototype.layoutItem=function(a){var c=this.options,d=this.padding,g="horizontal"===c.layout,e=a.itemHeight,
-f=this.itemMarginBottom,l=this.itemMarginTop,r=g?n(c.itemDistance,20):0,h=this.maxLegendWidth;c=c.alignColumns&&this.totalItemWidth>h?this.maxItemWidth:a.itemWidth;g&&this.itemX-d+c>h&&(this.itemX=d,this.lastLineHeight&&(this.itemY+=l+this.lastLineHeight+f),this.lastLineHeight=0);this.lastItemY=l+this.itemY+f;this.lastLineHeight=Math.max(e,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];g?this.itemX+=c:(this.itemY+=l+e+f,this.lastLineHeight=e);this.offsetWidth=this.widthOption||Math.max((g?
-this.itemX-d-(a.checkbox?0:r):c)+d,this.offsetWidth)};c.prototype.getAllItems=function(){var a=[];this.chart.series.forEach(function(c){var d=c&&c.options;c&&n(d.showInLegend,C(d.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||("point"===d.legendType?c.data:c)))});I(this,"afterGetAllItems",{allItems:a});return a};c.prototype.getAlignment=function(){var a=this.options;return this.proximate?a.align.charAt(0)+"tv":a.floating?"":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)};c.prototype.adjustMargins=
-function(a,c){var d=this.chart,g=this.options,e=this.getAlignment();e&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEach(function(f,p){f.test(e)&&!C(a[p])&&(d[r[p]]=Math.max(d[r[p]],d.legend[(p+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][p]*g[p%2?"x":"y"]+n(g.margin,12)+c[p]+(d.titleOffset[p]||0)))})};c.prototype.proximatePositions=function(){var a=this.chart,c=[],d="left"===this.options.align;this.allItems.forEach(function(g){var f;var p=d;if(g.yAxis){g.xAxis.options.reversed&&
-(p=!p);g.points&&(f=e(p?g.points:g.points.slice(0).reverse(),function(a){return x(a.plotY)}));p=this.itemMarginTop+g.legendItem.getBBox().height+this.itemMarginBottom;var q=g.yAxis.top-a.plotTop;g.visible?(f=f?f.plotY:g.yAxis.height,f+=q-.3*p):f=q+g.yAxis.height;c.push({target:f,size:p,item:g})}},this);h.distribute(c,a.plotHeight);c.forEach(function(c){c.item._legendItemPos[1]=a.plotTop-a.spacing[0]+c.pos})};c.prototype.render=function(){var a=this.chart,c=a.renderer,d=this.group,g=this.box,e=this.options,
-f=this.padding;this.itemX=f;this.itemY=this.initialItemY;this.lastItemY=this.offsetWidth=0;this.widthOption=l(e.width,a.spacingBox.width-f);var n=a.spacingBox.width-2*f-e.x;-1<["rm","lm"].indexOf(this.getAlignment().substring(0,2))&&(n/=2);this.maxLegendWidth=this.widthOption||n;d||(this.group=d=c.g("legend").attr({zIndex:7}).add(),this.contentGroup=c.g().attr({zIndex:1}).add(d),this.scrollGroup=c.g().add(this.contentGroup));this.renderTitle();var r=this.getAllItems();J(r,function(a,c){return(a.options&&
-a.options.legendIndex||0)-(c.options&&c.options.legendIndex||0)});e.reversed&&r.reverse();this.allItems=r;this.display=n=!!r.length;this.itemHeight=this.totalItemWidth=this.maxItemWidth=this.lastLineHeight=0;r.forEach(this.renderItem,this);r.forEach(this.layoutItem,this);r=(this.widthOption||this.offsetWidth)+f;var h=this.lastItemY+this.lastLineHeight+this.titleHeight;h=this.handleOverflow(h);h+=f;g||(this.box=g=c.rect().addClass("highcharts-legend-box").attr({r:e.borderRadius}).add(d),g.isNew=!0);
-a.styledMode||g.attr({stroke:e.borderColor,"stroke-width":e.borderWidth||0,fill:e.backgroundColor||"none"}).shadow(e.shadow);0<r&&0<h&&(g[g.isNew?"attr":"animate"](g.crisp.call({},{x:0,y:0,width:r,height:h},g.strokeWidth())),g.isNew=!1);g[n?"show":"hide"]();a.styledMode&&"none"===d.getStyle("display")&&(r=h=0);this.legendWidth=r;this.legendHeight=h;n&&this.align();this.proximate||this.positionItems();I(this,"afterRender")};c.prototype.align=function(a){void 0===a&&(a=this.chart.spacingBox);var c=
-this.chart,d=this.options,g=a.y;/(lth|ct|rth)/.test(this.getAlignment())&&0<c.titleOffset[0]?g+=c.titleOffset[0]:/(lbh|cb|rbh)/.test(this.getAlignment())&&0<c.titleOffset[2]&&(g-=c.titleOffset[2]);g!==a.y&&(a=D(a,{y:g}));this.group.align(D(d,{width:this.legendWidth,height:this.legendHeight,verticalAlign:this.proximate?"top":d.verticalAlign}),!0,a)};c.prototype.handleOverflow=function(a){var c=this,d=this.chart,g=d.renderer,e=this.options,f=e.y,l=this.padding;f=d.spacingBox.height+("top"===e.verticalAlign?
--f:f)-l;var r=e.maxHeight,h,w=this.clipRect,v=e.navigation,u=n(v.animation,!0),b=v.arrowSize||12,k=this.nav,t=this.pages,H,m=this.allItems,D=function(a){"number"===typeof a?w.attr({height:a}):w&&(c.clipRect=w.destroy(),c.contentGroup.clip());c.contentGroup.div&&(c.contentGroup.div.style.clip=a?"rect("+l+"px,9999px,"+(l+a)+"px,0)":"auto")},x=function(a){c[a]=g.circle(0,0,1.3*b).translate(b/2,b/2).add(k);d.styledMode||c[a].attr("fill","rgba(0,0,0,0.0001)");return c[a]};"horizontal"!==e.layout||"middle"===
-e.verticalAlign||e.floating||(f/=2);r&&(f=Math.min(f,r));t.length=0;a>f&&!1!==v.enabled?(this.clipHeight=h=Math.max(f-20-this.titleHeight-l,0),this.currentPage=n(this.currentPage,1),this.fullHeight=a,m.forEach(function(a,b){var c=a._legendItemPos[1],d=Math.round(a.legendItem.getBBox().height),g=t.length;if(!g||c-t[g-1]>h&&(H||c)!==t[g-1])t.push(H||c),g++;a.pageIx=g-1;H&&(m[b-1].pageIx=g-1);b===m.length-1&&c+d-t[g-1]>h&&c!==H&&(t.push(c),a.pageIx=g);c!==H&&(H=c)}),w||(w=c.clipRect=g.clipRect(0,l,9999,
-0),c.contentGroup.clip(w)),D(h),k||(this.nav=k=g.g().attr({zIndex:1}).add(this.group),this.up=g.symbol("triangle",0,0,b,b).add(k),x("upTracker").on("click",function(){c.scroll(-1,u)}),this.pager=g.text("",15,10).addClass("highcharts-legend-navigation"),d.styledMode||this.pager.css(v.style),this.pager.add(k),this.down=g.symbol("triangle-down",0,0,b,b).add(k),x("downTracker").on("click",function(){c.scroll(1,u)})),c.scroll(0),a=f):k&&(D(),this.nav=k.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=
-0);return a};c.prototype.scroll=function(a,c){var d=this,g=this.chart,e=this.pages,f=e.length,l=this.currentPage+a;a=this.clipHeight;var q=this.options.navigation,r=this.pager,h=this.padding;l>f&&(l=f);0<l&&("undefined"!==typeof c&&F(c,g),this.nav.attr({translateX:h,translateY:a+this.padding+7+this.titleHeight,visibility:"visible"}),[this.up,this.upTracker].forEach(function(a){a.attr({"class":1===l?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})}),r.attr({text:l+"/"+f}),[this.down,
-this.downTracker].forEach(function(a){a.attr({x:18+this.pager.getBBox().width,"class":l===f?"highcharts-legend-nav-inactive":"highcharts-legend-nav-active"})},this),g.styledMode||(this.up.attr({fill:1===l?q.inactiveColor:q.activeColor}),this.upTracker.css({cursor:1===l?"default":"pointer"}),this.down.attr({fill:l===f?q.inactiveColor:q.activeColor}),this.downTracker.css({cursor:l===f?"default":"pointer"})),this.scrollOffset=-e[l-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),
-this.currentPage=l,this.positionCheckboxes(),c=z(n(c,g.renderer.globalAnimation,!0)),w(function(){I(d,"afterScroll",{currentPage:l})},c.duration))};return c}();(/Trident\/7\.0/.test(d.navigator&&d.navigator.userAgent)||m)&&f(g.prototype,"positionItem",function(c,a){var d=this,g=function(){a._legendItemPos&&c.call(d,a)};g();d.bubbleLegend||setTimeout(g)});h.Legend=g;return h.Legend});N(m,"Core/Series/Point.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Globals.js"],m["Core/Utilities.js"]],
-function(f,h,m){var z=f.animObject,F=m.defined,L=m.erase,K=m.extend,C=m.fireEvent,y=m.format,e=m.getNestedProperty,I=m.isArray,v=m.isNumber,x=m.isObject,D=m.syncTimeout,n=m.pick,l=m.removeEvent,J=m.uniqueKey;"";f=function(){function f(){this.colorIndex=this.category=void 0;this.formatPrefix="point";this.id=void 0;this.isNull=!1;this.percentage=this.options=this.name=void 0;this.selected=!1;this.total=this.series=void 0;this.visible=!0;this.x=void 0}f.prototype.animateBeforeDestroy=function(){var e=
-this,d={x:e.startXPos,opacity:0},g,c=e.getGraphicalProps();c.singular.forEach(function(a){g="dataLabel"===a;e[a]=e[a].animate(g?{x:e[a].startXPos,y:e[a].startYPos,opacity:0}:d)});c.plural.forEach(function(a){e[a].forEach(function(a){a.element&&a.animate(K({x:e.startXPos},a.startYPos?{x:a.startXPos,y:a.startYPos}:{}))})})};f.prototype.applyOptions=function(e,d){var g=this.series,c=g.options.pointValKey||g.pointValKey;e=f.prototype.optionsToObject.call(this,e);K(this,e);this.options=this.options?K(this.options,
-e):e;e.group&&delete this.group;e.dataLabels&&delete this.dataLabels;c&&(this.y=f.prototype.getNestedProperty.call(this,c));this.formatPrefix=(this.isNull=n(this.isValid&&!this.isValid(),null===this.x||!v(this.y)))?"null":"point";this.selected&&(this.state="select");"name"in this&&"undefined"===typeof d&&g.xAxis&&g.xAxis.hasNames&&(this.x=g.xAxis.nameToX(this));"undefined"===typeof this.x&&g&&(this.x="undefined"===typeof d?g.autoIncrement(this):d);return this};f.prototype.destroy=function(){function e(){if(d.graphic||
-d.dataLabel||d.dataLabels)l(d),d.destroyElements();for(p in d)d[p]=null}var d=this,g=d.series,c=g.chart;g=g.options.dataSorting;var a=c.hoverPoints,f=z(d.series.chart.renderer.globalAnimation),p;d.legendItem&&c.legend.destroyItem(d);a&&(d.setState(),L(a,d),a.length||(c.hoverPoints=null));if(d===c.hoverPoint)d.onMouseOut();g&&g.enabled?(this.animateBeforeDestroy(),D(e,f.duration)):e();c.pointCount--};f.prototype.destroyElements=function(e){var d=this;e=d.getGraphicalProps(e);e.singular.forEach(function(g){d[g]=
-d[g].destroy()});e.plural.forEach(function(g){d[g].forEach(function(c){c.element&&c.destroy()});delete d[g]})};f.prototype.firePointEvent=function(e,d,g){var c=this,a=this.series.options;(a.point.events[e]||c.options&&c.options.events&&c.options.events[e])&&c.importEvents();"click"===e&&a.allowPointSelect&&(g=function(a){c.select&&c.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});C(c,e,d,g)};f.prototype.getClassName=function(){return"highcharts-point"+(this.selected?" highcharts-point-select":"")+
-(this.negative?" highcharts-negative":"")+(this.isNull?" highcharts-null-point":"")+("undefined"!==typeof this.colorIndex?" highcharts-color-"+this.colorIndex:"")+(this.options.className?" "+this.options.className:"")+(this.zone&&this.zone.className?" "+this.zone.className.replace("highcharts-negative",""):"")};f.prototype.getGraphicalProps=function(e){var d=this,g=[],c,a={singular:[],plural:[]};e=e||{graphic:1,dataLabel:1};e.graphic&&g.push("graphic","shadowGroup");e.dataLabel&&g.push("dataLabel",
-"dataLabelUpper","connector");for(c=g.length;c--;){var f=g[c];d[f]&&a.singular.push(f)}["dataLabel","connector"].forEach(function(c){var g=c+"s";e[c]&&d[g]&&a.plural.push(g)});return a};f.prototype.getLabelConfig=function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}};f.prototype.getNestedProperty=function(f){if(f)return 0===f.indexOf("custom.")?
-e(f,this.options):this[f]};f.prototype.getZone=function(){var e=this.series,d=e.zones;e=e.zoneAxis||"y";var g=0,c;for(c=d[g];this[e]>=c.value;)c=d[++g];this.nonZonedColor||(this.nonZonedColor=this.color);this.color=c&&c.color&&!this.options.color?c.color:this.nonZonedColor;return c};f.prototype.hasNewShapeType=function(){return(this.graphic&&(this.graphic.symbolName||this.graphic.element.nodeName))!==this.shapeType};f.prototype.init=function(e,d,g){this.series=e;this.applyOptions(d,g);this.id=F(this.id)?
-this.id:J();this.resolveColor();e.chart.pointCount++;C(this,"afterInit");return this};f.prototype.optionsToObject=function(e){var d={},g=this.series,c=g.options.keys,a=c||g.pointArrayMap||["y"],l=a.length,p=0,n=0;if(v(e)||null===e)d[a[0]]=e;else if(I(e))for(!c&&e.length>l&&(g=typeof e[0],"string"===g?d.name=e[0]:"number"===g&&(d.x=e[0]),p++);n<l;)c&&"undefined"===typeof e[p]||(0<a[n].indexOf(".")?f.prototype.setNestedProperty(d,e[p],a[n]):d[a[n]]=e[p]),p++,n++;else"object"===typeof e&&(d=e,e.dataLabels&&
-(g._hasPointLabels=!0),e.marker&&(g._hasPointMarkers=!0));return d};f.prototype.resolveColor=function(){var e=this.series;var d=e.chart.options.chart.colorCount;var g=e.chart.styledMode;delete this.nonZonedColor;g||this.options.color||(this.color=e.color);e.options.colorByPoint?(g||(d=e.options.colors||e.chart.options.colors,this.color=this.color||d[e.colorCounter],d=d.length),g=e.colorCounter,e.colorCounter++,e.colorCounter===d&&(e.colorCounter=0)):g=e.colorIndex;this.colorIndex=n(this.colorIndex,
-g)};f.prototype.setNestedProperty=function(e,d,g){g.split(".").reduce(function(c,a,g,e){c[a]=e.length-1===g?d:x(c[a],!0)?c[a]:{};return c[a]},e);return e};f.prototype.tooltipFormatter=function(e){var d=this.series,g=d.tooltipOptions,c=n(g.valueDecimals,""),a=g.valuePrefix||"",f=g.valueSuffix||"";d.chart.styledMode&&(e=d.chart.tooltip.styledModeFormat(e));(d.pointArrayMap||["y"]).forEach(function(d){d="{point."+d;if(a||f)e=e.replace(RegExp(d+"}","g"),a+d+"}"+f);e=e.replace(RegExp(d+"}","g"),d+":,."+
-c+"f}")});return y(e,{point:this,series:this.series},d.chart)};return f}();return h.Point=f});N(m,"Core/Series/Series.js",[m["Core/Globals.js"],m["Core/Series/Point.js"],m["Core/Utilities.js"]],function(f,h,m){var z=m.error,F=m.extendClass,L=m.fireEvent,K=m.getOptions,C=m.isObject,y=m.merge,e=m.objectEach;m=function(){function f(e,h){var v=y(f.defaultOptions,h);this.chart=e;this._i=e.series.length;e.series.push(this);this.options=v;this.userOptions=y(h)}f.addSeries=function(e,h){f.seriesTypes[e]=
-h};f.cleanRecursively=function(h,m){var v={};e(h,function(e,l){if(C(h[l],!0)&&!h.nodeType&&m[l])e=f.cleanRecursively(h[l],m[l]),Object.keys(e).length&&(v[l]=e);else if(C(h[l])||h[l]!==m[l])v[l]=h[l]});return v};f.getSeries=function(e,h){void 0===h&&(h={});var v=e.options.chart;v=h.type||v.type||v.defaultSeriesType||"";var n=f.seriesTypes[v];n||z(17,!0,e,{missingModuleFor:v});return new n(e,h)};f.seriesType=function(e,m,D,n,l){var v=K().plotOptions||{},w=f.seriesTypes;m=m||"";v[e]=y(v[m],D);f.addSeries(e,
-F(w[m]||function(){},n));w[e].prototype.type=e;l&&(w[e].prototype.pointClass=F(h,l));return w[e]};f.prototype.update=function(e,h){void 0===h&&(h=!0);var m=this;e=f.cleanRecursively(e,this.userOptions);var n=e.type;"undefined"!==typeof n&&n!==m.type&&(m=f.getSeries(m.chart,e));L(m,"update",{newOptions:e});m.userOptions=y(e);L(m,"afterUpdate",{newOptions:e});h&&m.chart.redraw();return m};f.defaultOptions={type:"base"};f.seriesTypes={};return f}();m.prototype.pointClass=h;f.seriesType=m.seriesType;
-f.seriesTypes=m.seriesTypes;return m});N(m,"Core/Chart/Chart.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Axis/Axis.js"],m["Core/Series/Series.js"],m["Core/Globals.js"],m["Core/Legend.js"],m["Core/MSPointer.js"],m["Core/Options.js"],m["Core/Pointer.js"],m["Core/Time.js"],m["Core/Utilities.js"]],function(f,h,m,z,F,L,K,C,y,e){var I=f.animate,v=f.animObject,x=f.setAnimation,D=z.charts,n=z.doc,l=z.win,J=K.defaultOptions,w=e.addEvent,r=e.attr,d=e.createElement,g=e.css,c=e.defined,a=e.discardElement,
-q=e.erase,p=e.error,B=e.extend,A=e.find,G=e.fireEvent,M=e.getStyle,T=e.isArray,Q=e.isFunction,O=e.isNumber,E=e.isObject,u=e.isString,b=e.merge,k=e.numberFormat,t=e.objectEach,H=e.pick,R=e.pInt,U=e.relativeLength,Z=e.removeEvent,aa=e.splat,ba=e.syncTimeout,S=e.uniqueKey,Y=z.marginNames,W=function(){function f(a,b,c){this.yAxis=this.xAxis=this.userOptions=this.titleOffset=this.time=this.symbolCounter=this.spacingBox=this.spacing=this.series=this.renderTo=this.renderer=this.pointer=this.pointCount=this.plotWidth=
-this.plotTop=this.plotLeft=this.plotHeight=this.plotBox=this.options=this.numberFormatter=this.margin=this.legend=this.labelCollectors=this.isResizing=this.index=this.container=this.colorCounter=this.clipBox=this.chartWidth=this.chartHeight=this.bounds=this.axisOffset=this.axes=void 0;this.getArgs(a,b,c)}f.prototype.getArgs=function(a,b,c){u(a)||a.nodeName?(this.renderTo=a,this.init(b,c)):this.init(a,b)};f.prototype.init=function(a,c){var d,g=a.series,e=a.plotOptions||{};G(this,"init",{args:arguments},
-function(){a.series=null;d=b(J,a);var f=d.chart||{};t(d.plotOptions,function(a,c){E(a)&&(a.tooltip=e[c]&&b(e[c].tooltip)||void 0)});d.tooltip.userOptions=a.chart&&a.chart.forExport&&a.tooltip.userOptions||a.tooltip;d.series=a.series=g;this.userOptions=a;var p=f.events;this.margin=[];this.spacing=[];this.bounds={h:{},v:{}};this.labelCollectors=[];this.callback=c;this.isResizing=0;this.options=d;this.axes=[];this.series=[];this.time=a.time&&Object.keys(a.time).length?new y(a.time):z.time;this.numberFormatter=
-f.numberFormatter||k;this.styledMode=f.styledMode;this.hasCartesianSeries=f.showAxes;var l=this;l.index=D.length;D.push(l);z.chartCount++;p&&t(p,function(a,b){Q(a)&&w(l,b,a)});l.xAxis=[];l.yAxis=[];l.pointCount=l.colorCounter=l.symbolCounter=0;G(l,"afterInit");l.firstRender()})};f.prototype.initSeries=function(a){var b=this.options.chart;b=a.type||b.type||b.defaultSeriesType;var c=m.seriesTypes[b];c||p(17,!0,this,{missingModuleFor:b});b=new c(this,a);"function"===typeof b.init&&b.init(this,a);return b};
-f.prototype.setSeriesData=function(){this.getSeriesOrderByLinks().forEach(function(a){a.points||a.data||!a.enabledDataSorting||a.setData(a.options.data,!1)})};f.prototype.getSeriesOrderByLinks=function(){return this.series.concat().sort(function(a,b){return a.linkedSeries.length||b.linkedSeries.length?b.linkedSeries.length-a.linkedSeries.length:0})};f.prototype.orderSeries=function(a){var b=this.series;for(a=a||0;a<b.length;a++)b[a]&&(b[a].index=a,b[a].name=b[a].getName())};f.prototype.isInsidePlot=
-function(a,b,c){var d=c?b:a;a=c?a:b;d={x:d,y:a,isInsidePlot:0<=d&&d<=this.plotWidth&&0<=a&&a<=this.plotHeight};G(this,"afterIsInsidePlot",d);return d.isInsidePlot};f.prototype.redraw=function(a){G(this,"beforeRedraw");var b=this,c=b.axes,d=b.series,g=b.pointer,k=b.legend,e=b.userOptions.legend,f=b.isDirtyLegend,t=b.hasCartesianSeries,p=b.isDirtyBox,l=b.renderer,q=l.isHidden(),h=[];b.setResponsive&&b.setResponsive(!1);x(b.hasRendered?a:!1,b);q&&b.temporaryDisplay();b.layOutTitles();for(a=d.length;a--;){var n=
-d[a];if(n.options.stacking){var u=!0;if(n.isDirty){var r=!0;break}}}if(r)for(a=d.length;a--;)n=d[a],n.options.stacking&&(n.isDirty=!0);d.forEach(function(a){a.isDirty&&("point"===a.options.legendType?("function"===typeof a.updateTotals&&a.updateTotals(),f=!0):e&&(e.labelFormatter||e.labelFormat)&&(f=!0));a.isDirtyData&&G(a,"updatedData")});f&&k&&k.options.enabled&&(k.render(),b.isDirtyLegend=!1);u&&b.getStacks();t&&c.forEach(function(a){b.isResizing&&O(a.min)||(a.updateNames(),a.setScale())});b.getMargins();
-t&&(c.forEach(function(a){a.isDirty&&(p=!0)}),c.forEach(function(a){var b=a.min+","+a.max;a.extKey!==b&&(a.extKey=b,h.push(function(){G(a,"afterSetExtremes",B(a.eventArgs,a.getExtremes()));delete a.eventArgs}));(p||u)&&a.redraw()}));p&&b.drawChartBox();G(b,"predraw");d.forEach(function(a){(p||a.isDirty)&&a.visible&&a.redraw();a.isDirtyData=!1});g&&g.reset(!0);l.draw();G(b,"redraw");G(b,"render");q&&b.temporaryDisplay(!0);h.forEach(function(a){a.call()})};f.prototype.get=function(a){function b(b){return b.id===
-a||b.options&&b.options.id===a}var c=this.series,d;var g=A(this.axes,b)||A(this.series,b);for(d=0;!g&&d<c.length;d++)g=A(c[d].points||[],b);return g};f.prototype.getAxes=function(){var a=this,b=this.options,c=b.xAxis=aa(b.xAxis||{});b=b.yAxis=aa(b.yAxis||{});G(this,"getAxes");c.forEach(function(a,b){a.index=b;a.isX=!0});b.forEach(function(a,b){a.index=b});c.concat(b).forEach(function(b){new h(a,b)});G(this,"afterGetAxes")};f.prototype.getSelectedPoints=function(){var a=[];this.series.forEach(function(b){a=
-a.concat(b.getPointsCollection().filter(function(a){return H(a.selectedStaging,a.selected)}))});return a};f.prototype.getSelectedSeries=function(){return this.series.filter(function(a){return a.selected})};f.prototype.setTitle=function(a,b,c){this.applyDescription("title",a);this.applyDescription("subtitle",b);this.applyDescription("caption",void 0);this.layOutTitles(c)};f.prototype.applyDescription=function(a,c){var d=this,g="title"===a?{color:"#333333",fontSize:this.options.isStock?"16px":"18px"}:
-{color:"#666666"};g=this.options[a]=b(!this.styledMode&&{style:g},this.options[a],c);var k=this[a];k&&c&&(this[a]=k=k.destroy());g&&!k&&(k=this.renderer.text(g.text,0,0,g.useHTML).attr({align:g.align,"class":"highcharts-"+a,zIndex:g.zIndex||4}).add(),k.update=function(b){d[{title:"setTitle",subtitle:"setSubtitle",caption:"setCaption"}[a]](b)},this.styledMode||k.css(g.style),this[a]=k)};f.prototype.layOutTitles=function(a){var b=[0,0,0],c=this.renderer,d=this.spacingBox;["title","subtitle","caption"].forEach(function(a){var g=
-this[a],k=this.options[a],e=k.verticalAlign||"top";a="title"===a?-3:"top"===e?b[0]+2:0;if(g){if(!this.styledMode)var f=k.style.fontSize;f=c.fontMetrics(f,g).b;g.css({width:(k.width||d.width+(k.widthAdjust||0))+"px"});var t=Math.round(g.getBBox(k.useHTML).height);g.align(B({y:"bottom"===e?f:a+f,height:t},k),!1,"spacingBox");k.floating||("top"===e?b[0]=Math.ceil(b[0]+t):"bottom"===e&&(b[2]=Math.ceil(b[2]+t)))}},this);b[0]&&"top"===(this.options.title.verticalAlign||"top")&&(b[0]+=this.options.title.margin);
-b[2]&&"bottom"===this.options.caption.verticalAlign&&(b[2]+=this.options.caption.margin);var g=!this.titleOffset||this.titleOffset.join(",")!==b.join(",");this.titleOffset=b;G(this,"afterLayOutTitles");!this.isDirtyBox&&g&&(this.isDirtyBox=this.isDirtyLegend=g,this.hasRendered&&H(a,!0)&&this.isDirtyBox&&this.redraw())};f.prototype.getChartSize=function(){var a=this.options.chart,b=a.width;a=a.height;var d=this.renderTo;c(b)||(this.containerWidth=M(d,"width"));c(a)||(this.containerHeight=M(d,"height"));
-this.chartWidth=Math.max(0,b||this.containerWidth||600);this.chartHeight=Math.max(0,U(a,this.chartWidth)||(1<this.containerHeight?this.containerHeight:400))};f.prototype.temporaryDisplay=function(a){var b=this.renderTo;if(a)for(;b&&b.style;)b.hcOrigStyle&&(g(b,b.hcOrigStyle),delete b.hcOrigStyle),b.hcOrigDetached&&(n.body.removeChild(b),b.hcOrigDetached=!1),b=b.parentNode;else for(;b&&b.style;){n.body.contains(b)||b.parentNode||(b.hcOrigDetached=!0,n.body.appendChild(b));if("none"===M(b,"display",
-!1)||b.hcOricDetached)b.hcOrigStyle={display:b.style.display,height:b.style.height,overflow:b.style.overflow},a={display:"block",overflow:"hidden"},b!==this.renderTo&&(a.height=0),g(b,a),b.offsetWidth||b.style.setProperty("display","block","important");b=b.parentNode;if(b===n.body)break}};f.prototype.setClassName=function(a){this.container.className="highcharts-container "+(a||"")};f.prototype.getContainer=function(){var a=this.options,b=a.chart;var c=this.renderTo;var k=S(),e,f;c||(this.renderTo=
-c=b.renderTo);u(c)&&(this.renderTo=c=n.getElementById(c));c||p(13,!0,this);var t=R(r(c,"data-highcharts-chart"));O(t)&&D[t]&&D[t].hasRendered&&D[t].destroy();r(c,"data-highcharts-chart",this.index);c.innerHTML="";b.skipClone||c.offsetWidth||this.temporaryDisplay();this.getChartSize();t=this.chartWidth;var l=this.chartHeight;g(c,{overflow:"hidden"});this.styledMode||(e=B({position:"relative",overflow:"hidden",width:t+"px",height:l+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)",
-userSelect:"none"},b.style));this.container=c=d("div",{id:k},e,c);this._cursor=c.style.cursor;this.renderer=new (z[b.renderer]||z.Renderer)(c,t,l,null,b.forExport,a.exporting&&a.exporting.allowHTML,this.styledMode);x(void 0,this);this.setClassName(b.className);if(this.styledMode)for(f in a.defs)this.renderer.definition(a.defs[f]);else this.renderer.setStyle(b.style);this.renderer.chartIndex=this.index;G(this,"afterGetContainer")};f.prototype.getMargins=function(a){var b=this.spacing,d=this.margin,
-g=this.titleOffset;this.resetMargins();g[0]&&!c(d[0])&&(this.plotTop=Math.max(this.plotTop,g[0]+b[0]));g[2]&&!c(d[2])&&(this.marginBottom=Math.max(this.marginBottom,g[2]+b[2]));this.legend&&this.legend.display&&this.legend.adjustMargins(d,b);G(this,"getMargins");a||this.getAxisMargins()};f.prototype.getAxisMargins=function(){var a=this,b=a.axisOffset=[0,0,0,0],d=a.colorAxis,g=a.margin,k=function(a){a.forEach(function(a){a.visible&&a.getOffset()})};a.hasCartesianSeries?k(a.axes):d&&d.length&&k(d);
-Y.forEach(function(d,k){c(g[k])||(a[d]+=b[k])});a.setChartSize()};f.prototype.reflow=function(a){var b=this,d=b.options.chart,g=b.renderTo,k=c(d.width)&&c(d.height),f=d.width||M(g,"width");d=d.height||M(g,"height");g=a?a.target:l;if(!k&&!b.isPrinting&&f&&d&&(g===l||g===n)){if(f!==b.containerWidth||d!==b.containerHeight)e.clearTimeout(b.reflowTimeout),b.reflowTimeout=ba(function(){b.container&&b.setSize(void 0,void 0,!1)},a?100:0);b.containerWidth=f;b.containerHeight=d}};f.prototype.setReflow=function(a){var b=
-this;!1===a||this.unbindReflow?!1===a&&this.unbindReflow&&(this.unbindReflow=this.unbindReflow()):(this.unbindReflow=w(l,"resize",function(a){b.options&&b.reflow(a)}),w(this,"destroy",this.unbindReflow))};f.prototype.setSize=function(a,b,c){var d=this,k=d.renderer;d.isResizing+=1;x(c,d);c=k.globalAnimation;d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;"undefined"!==typeof a&&(d.options.chart.width=a);"undefined"!==typeof b&&(d.options.chart.height=b);d.getChartSize();d.styledMode||(c?
-I:g)(d.container,{width:d.chartWidth+"px",height:d.chartHeight+"px"},c);d.setChartSize(!0);k.setSize(d.chartWidth,d.chartHeight,c);d.axes.forEach(function(a){a.isDirty=!0;a.setScale()});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;G(d,"resize");ba(function(){d&&G(d,"endResize",null,function(){--d.isResizing})},v(c).duration)};f.prototype.setChartSize=function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,g=this.chartHeight,k=this.options.chart,
-e=this.spacing,f=this.clipOffset,t,p,l,q;this.plotLeft=t=Math.round(this.plotLeft);this.plotTop=p=Math.round(this.plotTop);this.plotWidth=l=Math.max(0,Math.round(d-t-this.marginRight));this.plotHeight=q=Math.max(0,Math.round(g-p-this.marginBottom));this.plotSizeX=b?q:l;this.plotSizeY=b?l:q;this.plotBorderWidth=k.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:e[3],y:e[0],width:d-e[3]-e[1],height:g-e[0]-e[2]};this.plotBox=c.plotBox={x:t,y:p,width:l,height:q};d=2*Math.floor(this.plotBorderWidth/
-2);b=Math.ceil(Math.max(d,f[3])/2);c=Math.ceil(Math.max(d,f[0])/2);this.clipBox={x:b,y:c,width:Math.floor(this.plotSizeX-Math.max(d,f[1])/2-b),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(d,f[2])/2-c))};a||this.axes.forEach(function(a){a.setAxisSize();a.setAxisTranslation()});G(this,"afterSetChartSize",{skipAxes:a})};f.prototype.resetMargins=function(){G(this,"resetMargins");var a=this,b=a.options.chart;["margin","spacing"].forEach(function(c){var d=b[c],g=E(d)?d:[d,d,d,d];["Top","Right",
-"Bottom","Left"].forEach(function(d,k){a[c][k]=H(b[c+d],g[k])})});Y.forEach(function(b,c){a[b]=H(a.margin[c],a.spacing[c])});a.axisOffset=[0,0,0,0];a.clipOffset=[0,0,0,0]};f.prototype.drawChartBox=function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,g=this.chartBackground,k=this.plotBackground,e=this.plotBorder,f=this.styledMode,t=this.plotBGImage,p=a.backgroundColor,l=a.plotBackgroundColor,q=a.plotBackgroundImage,h,n=this.plotLeft,u=this.plotTop,r=this.plotWidth,
-m=this.plotHeight,w=this.plotBox,v=this.clipRect,H=this.clipBox,B="animate";g||(this.chartBackground=g=b.rect().addClass("highcharts-background").add(),B="attr");if(f)var A=h=g.strokeWidth();else{A=a.borderWidth||0;h=A+(a.shadow?8:0);p={fill:p||"none"};if(A||g["stroke-width"])p.stroke=a.borderColor,p["stroke-width"]=A;g.attr(p).shadow(a.shadow)}g[B]({x:h/2,y:h/2,width:c-h-A%2,height:d-h-A%2,r:a.borderRadius});B="animate";k||(B="attr",this.plotBackground=k=b.rect().addClass("highcharts-plot-background").add());
-k[B](w);f||(k.attr({fill:l||"none"}).shadow(a.plotShadow),q&&(t?(q!==t.attr("href")&&t.attr("href",q),t.animate(w)):this.plotBGImage=b.image(q,n,u,r,m).add()));v?v.animate({width:H.width,height:H.height}):this.clipRect=b.clipRect(H);B="animate";e||(B="attr",this.plotBorder=e=b.rect().addClass("highcharts-plot-border").attr({zIndex:1}).add());f||e.attr({stroke:a.plotBorderColor,"stroke-width":a.plotBorderWidth||0,fill:"none"});e[B](e.crisp({x:n,y:u,width:r,height:m},-e.strokeWidth()));this.isDirtyBox=
-!1;G(this,"afterDrawChartBox")};f.prototype.propFromSeries=function(){var a=this,b=a.options.chart,c,d=a.options.series,g,k;["inverted","angular","polar"].forEach(function(e){c=m.seriesTypes[b.type||b.defaultSeriesType];k=b[e]||c&&c.prototype[e];for(g=d&&d.length;!k&&g--;)(c=m.seriesTypes[d[g].type])&&c.prototype[e]&&(k=!0);a[e]=k})};f.prototype.linkSeries=function(){var a=this,b=a.series;b.forEach(function(a){a.linkedSeries.length=0});b.forEach(function(b){var c=b.options.linkedTo;u(c)&&(c=":previous"===
-c?a.series[b.index-1]:a.get(c))&&c.linkedParent!==b&&(c.linkedSeries.push(b),b.linkedParent=c,c.enabledDataSorting&&b.setDataSortingOptions(),b.visible=H(b.options.visible,c.options.visible,b.visible))});G(this,"afterLinkSeries")};f.prototype.renderSeries=function(){this.series.forEach(function(a){a.translate();a.render()})};f.prototype.renderLabels=function(){var a=this,b=a.options.labels;b.items&&b.items.forEach(function(c){var d=B(b.style,c.style),g=R(d.left)+a.plotLeft,k=R(d.top)+a.plotTop+12;
-delete d.left;delete d.top;a.renderer.text(c.html,g,k).attr({zIndex:2}).css(d).add()})};f.prototype.render=function(){var a=this.axes,b=this.colorAxis,c=this.renderer,d=this.options,g=0,k=function(a){a.forEach(function(a){a.visible&&a.render()})};this.setTitle();this.legend=new F(this,d.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();d=this.plotWidth;a.some(function(a){if(a.horiz&&a.visible&&a.options.labels.enabled&&a.series.length)return g=21,!0});var e=this.plotHeight=
-Math.max(this.plotHeight-g,0);a.forEach(function(a){a.setScale()});this.getAxisMargins();var f=1.1<d/this.plotWidth;var t=1.05<e/this.plotHeight;if(f||t)a.forEach(function(a){(a.horiz&&f||!a.horiz&&t)&&a.setTickInterval(!0)}),this.getMargins();this.drawChartBox();this.hasCartesianSeries?k(a):b&&b.length&&k(b);this.seriesGroup||(this.seriesGroup=c.g("series-group").attr({zIndex:3}).add());this.renderSeries();this.renderLabels();this.addCredits();this.setResponsive&&this.setResponsive();this.updateContainerScaling();
-this.hasRendered=!0};f.prototype.addCredits=function(a){var c=this,d=b(!0,this.options.credits,a);d.enabled&&!this.credits&&(this.credits=this.renderer.text(d.text+(this.mapCredits||""),0,0).addClass("highcharts-credits").on("click",function(){d.href&&(l.location.href=d.href)}).attr({align:d.position.align,zIndex:8}),c.styledMode||this.credits.css(d.style),this.credits.add().align(d.position),this.credits.update=function(a){c.credits=c.credits.destroy();c.addCredits(a)})};f.prototype.updateContainerScaling=
-function(){var a=this.container;if(2<a.offsetWidth&&2<a.offsetHeight&&a.getBoundingClientRect){var b=a.getBoundingClientRect(),c=b.width/a.offsetWidth;a=b.height/a.offsetHeight;1!==c||1!==a?this.containerScaling={scaleX:c,scaleY:a}:delete this.containerScaling}};f.prototype.destroy=function(){var b=this,c=b.axes,d=b.series,g=b.container,k,e=g&&g.parentNode;G(b,"destroy");b.renderer.forExport?q(D,b):D[b.index]=void 0;z.chartCount--;b.renderTo.removeAttribute("data-highcharts-chart");Z(b);for(k=c.length;k--;)c[k]=
-c[k].destroy();this.scroller&&this.scroller.destroy&&this.scroller.destroy();for(k=d.length;k--;)d[k]=d[k].destroy();"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" ").forEach(function(a){var c=b[a];c&&c.destroy&&(b[a]=c.destroy())});g&&(g.innerHTML="",Z(g),e&&a(g));t(b,function(a,c){delete b[c]})};f.prototype.firstRender=function(){var a=this,b=a.options;if(!a.isReadyToRender||
-a.isReadyToRender()){a.getContainer();a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();(T(b.series)?b.series:[]).forEach(function(b){a.initSeries(b)});a.linkSeries();a.setSeriesData();G(a,"beforeRender");C&&(a.pointer=z.hasTouch||!l.PointerEvent&&!l.MSPointerEvent?new C(a,b):new L(a,b));a.render();if(!a.renderer.imgCount&&!a.hasLoaded)a.onload();a.temporaryDisplay(!0)}};f.prototype.onload=function(){this.callbacks.concat([this.callback]).forEach(function(a){a&&"undefined"!==typeof this.index&&
-a.apply(this,[this])},this);G(this,"load");G(this,"render");c(this.index)&&this.setReflow(this.options.chart.reflow);this.hasLoaded=!0};return f}();W.prototype.callbacks=[];z.chart=function(a,b,c){return new W(a,b,c)};return z.Chart=W});N(m,"Extensions/ScrollablePlotArea.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Chart/Chart.js"],m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h,m,z){var F=f.stop,L=z.addEvent,K=z.createElement,C=z.pick;"";L(h,"afterSetChartSize",function(f){var e=
-this.options.chart.scrollablePlotArea,h=e&&e.minWidth;e=e&&e.minHeight;if(!this.renderer.forExport){if(h){if(this.scrollablePixelsX=h=Math.max(0,h-this.chartWidth)){this.plotWidth+=h;this.inverted?(this.clipBox.height+=h,this.plotBox.height+=h):(this.clipBox.width+=h,this.plotBox.width+=h);var v={1:{name:"right",value:h}}}}else e&&(this.scrollablePixelsY=h=Math.max(0,e-this.chartHeight))&&(this.plotHeight+=h,this.inverted?(this.clipBox.width+=h,this.plotBox.width+=h):(this.clipBox.height+=h,this.plotBox.height+=
-h),v={2:{name:"bottom",value:h}});v&&!f.skipAxes&&this.axes.forEach(function(e){v[e.side]?e.getPlotLinePath=function(){var f=v[e.side].name,h=this[f];this[f]=h-v[e.side].value;var l=m.Axis.prototype.getPlotLinePath.apply(this,arguments);this[f]=h;return l}:(e.setAxisSize(),e.setAxisTranslation())})}});L(h,"render",function(){this.scrollablePixelsX||this.scrollablePixelsY?(this.setUpScrolling&&this.setUpScrolling(),this.applyFixed()):this.fixedDiv&&this.applyFixed()});h.prototype.setUpScrolling=function(){var f=
-this,e={WebkitOverflowScrolling:"touch",overflowX:"hidden",overflowY:"hidden"};this.scrollablePixelsX&&(e.overflowX="auto");this.scrollablePixelsY&&(e.overflowY="auto");this.scrollingParent=K("div",{className:"highcharts-scrolling-parent"},{position:"relative"},this.renderTo);this.scrollingContainer=K("div",{className:"highcharts-scrolling"},e,this.scrollingParent);L(this.scrollingContainer,"scroll",function(){f.pointer&&delete f.pointer.chartPosition});this.innerContainer=K("div",{className:"highcharts-inner-container"},
-null,this.scrollingContainer);this.innerContainer.appendChild(this.container);this.setUpScrolling=null};h.prototype.moveFixedElements=function(){var f=this.container,e=this.fixedRenderer,h=".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-scrollbar .highcharts-subtitle .highcharts-title".split(" "),m;this.scrollablePixelsX&&
-!this.inverted?m=".highcharts-yaxis":this.scrollablePixelsX&&this.inverted?m=".highcharts-xaxis":this.scrollablePixelsY&&!this.inverted?m=".highcharts-xaxis":this.scrollablePixelsY&&this.inverted&&(m=".highcharts-yaxis");h.push(m,m+"-labels");h.forEach(function(h){[].forEach.call(f.querySelectorAll(h),function(f){(f.namespaceURI===e.SVG_NS?e.box:e.box.parentNode).appendChild(f);f.style.pointerEvents="auto"})})};h.prototype.applyFixed=function(){var f,e,h=!this.fixedDiv,v=this.options.chart.scrollablePlotArea;
-h?(this.fixedDiv=K("div",{className:"highcharts-fixed"},{position:"absolute",overflow:"hidden",pointerEvents:"none",zIndex:2,top:0},null,!0),null===(f=this.scrollingContainer)||void 0===f?void 0:f.parentNode.insertBefore(this.fixedDiv,this.scrollingContainer),this.renderTo.style.overflow="visible",this.fixedRenderer=f=new m.Renderer(this.fixedDiv,this.chartWidth,this.chartHeight,null===(e=this.options.chart)||void 0===e?void 0:e.style),this.scrollableMask=f.path().attr({fill:this.options.chart.backgroundColor||
-"#fff","fill-opacity":C(v.opacity,.85),zIndex:-1}).addClass("highcharts-scrollable-mask").add(),this.moveFixedElements(),L(this,"afterShowResetZoom",this.moveFixedElements),L(this,"afterLayOutTitles",this.moveFixedElements)):this.fixedRenderer.setSize(this.chartWidth,this.chartHeight);e=this.chartWidth+(this.scrollablePixelsX||0);f=this.chartHeight+(this.scrollablePixelsY||0);F(this.container);this.container.style.width=e+"px";this.container.style.height=f+"px";this.renderer.boxWrapper.attr({width:e,
-height:f,viewBox:[0,0,e,f].join(" ")});this.chartBackground.attr({width:e,height:f});this.scrollingContainer.style.height=this.chartHeight+"px";h&&(v.scrollPositionX&&(this.scrollingContainer.scrollLeft=this.scrollablePixelsX*v.scrollPositionX),v.scrollPositionY&&(this.scrollingContainer.scrollTop=this.scrollablePixelsY*v.scrollPositionY));f=this.axisOffset;h=this.plotTop-f[0]-1;v=this.plotLeft-f[3]-1;e=this.plotTop+this.plotHeight+f[2]+1;f=this.plotLeft+this.plotWidth+f[1]+1;var x=this.plotLeft+
-this.plotWidth-(this.scrollablePixelsX||0),D=this.plotTop+this.plotHeight-(this.scrollablePixelsY||0);h=this.scrollablePixelsX?[["M",0,h],["L",this.plotLeft-1,h],["L",this.plotLeft-1,e],["L",0,e],["Z"],["M",x,h],["L",this.chartWidth,h],["L",this.chartWidth,e],["L",x,e],["Z"]]:this.scrollablePixelsY?[["M",v,0],["L",v,this.plotTop-1],["L",f,this.plotTop-1],["L",f,0],["Z"],["M",v,D],["L",v,this.chartHeight],["L",f,this.chartHeight],["L",f,D],["Z"]]:[["M",0,0]];"adjustHeight"!==this.redrawTrigger&&this.scrollableMask.attr({d:h})}});
-N(m,"Core/Axis/StackingAxis.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Utilities.js"]],function(f,h){var m=f.getDeferredAnimation,z=h.addEvent,F=h.destroyObjectProperties,L=h.fireEvent,K=h.objectEach,C=h.pick,y=function(){function e(e){this.oldStacks={};this.stacks={};this.stacksTouched=0;this.axis=e}e.prototype.buildStacks=function(){var e=this.axis,f=e.series,h=C(e.options.reversedStacks,!0),m=f.length,n;if(!e.isXAxis){this.usePercentage=!1;for(n=m;n--;){var l=f[h?n:m-n-1];l.setStackedPoints();
-l.setGroupedPoints()}for(n=0;n<m;n++)f[n].modifyStacks();L(e,"afterBuildStacks")}};e.prototype.cleanStacks=function(){if(!this.axis.isXAxis){if(this.oldStacks)var e=this.stacks=this.oldStacks;K(e,function(e){K(e,function(e){e.cumulative=e.total})})}};e.prototype.resetStacks=function(){var e=this,f=e.stacks;e.axis.isXAxis||K(f,function(f){K(f,function(h,n){h.touched<e.stacksTouched?(h.destroy(),delete f[n]):(h.total=null,h.cumulative=null)})})};e.prototype.renderStackTotals=function(){var e=this.axis,
-f=e.chart,h=f.renderer,D=this.stacks;e=m(f,e.options.stackLabels.animation);var n=this.stackTotalGroup=this.stackTotalGroup||h.g("stack-labels").attr({visibility:"visible",zIndex:6,opacity:0}).add();n.translate(f.plotLeft,f.plotTop);K(D,function(e){K(e,function(e){e.render(n)})});n.animate({opacity:1},e)};return e}();return function(){function e(){}e.compose=function(f){z(f,"init",e.onInit);z(f,"destroy",e.onDestroy)};e.onDestroy=function(){var e=this.stacking;if(e){var f=e.stacks;K(f,function(e,
-h){F(e);f[h]=null});e&&e.stackTotalGroup&&e.stackTotalGroup.destroy()}};e.onInit=function(){this.stacking||(this.stacking=new y(this))};return e}()});N(m,"Mixins/LegendSymbol.js",[m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h){var m=h.merge,z=h.pick;return f.LegendSymbolMixin={drawRectangle:function(f,h){var m=f.symbolHeight,C=f.options.squareSymbol;h.legendSymbol=this.chart.renderer.rect(C?(f.symbolWidth-m)/2:0,f.baseline-m+1,C?m:f.symbolWidth,m,z(f.options.symbolRadius,m/2)).addClass("highcharts-point").attr({zIndex:3}).add(h.legendGroup)},
-drawLineMarker:function(f){var h=this.options,F=h.marker,C=f.symbolWidth,y=f.symbolHeight,e=y/2,I=this.chart.renderer,v=this.legendGroup;f=f.baseline-Math.round(.3*f.fontMetrics.b);var x={};this.chart.styledMode||(x={"stroke-width":h.lineWidth||0},h.dashStyle&&(x.dashstyle=h.dashStyle));this.legendLine=I.path([["M",0,f],["L",C,f]]).addClass("highcharts-graph").attr(x).add(v);F&&!1!==F.enabled&&C&&(h=Math.min(z(F.radius,e),e),0===this.symbol.indexOf("url")&&(F=m(F,{width:y,height:y}),h=0),this.legendSymbol=
-F=I.symbol(this.symbol,C/2-h,f-h,2*h,2*h,F).addClass("highcharts-point").add(v),F.isMarker=!0)}}});N(m,"Core/Series/CartesianSeries.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Series/Series.js"],m["Core/Globals.js"],m["Mixins/LegendSymbol.js"],m["Core/Options.js"],m["Core/Series/Point.js"],m["Core/Renderer/SVG/SVGElement.js"],m["Core/Utilities.js"]],function(f,h,m,z,F,L,K,C){var y=f.animObject,e=F.defaultOptions,I=C.addEvent,v=C.arrayMax,x=C.arrayMin,D=C.clamp,n=C.correctFloat,l=C.defined,
-J=C.erase,w=C.error,r=C.extend,d=C.find,g=C.fireEvent,c=C.getNestedProperty,a=C.isArray,q=C.isFunction,p=C.isNumber,B=C.isString,A=C.merge,G=C.objectEach,M=C.pick,T=C.removeEvent,Q=C.splat,O=C.syncTimeout;"";var E=h.seriesTypes,u=m.win;f=h.seriesType("line",void 0,{lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{enabledThreshold:2,lineColor:"#ffffff",lineWidth:0,radius:4,states:{normal:{animation:!0},hover:{animation:{duration:50},enabled:!0,radiusPlus:2,
-lineWidthPlus:1},select:{fillColor:"#cccccc",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:"center",defer:!0,formatter:function(){var a=this.series.chart.numberFormatter;return"number"!==typeof this.y?"":a(this.y,-1)},padding:5,style:{fontSize:"11px",fontWeight:"bold",color:"contrast",textOutline:"1px contrast"},verticalAlign:"bottom",x:0,y:0},cropThreshold:300,opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:50},
-lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:50},opacity:.2}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:"x"},{axisTypes:["xAxis","yAxis"],coll:"series",colorCounter:0,cropShoulder:1,directTouch:!1,isCartesian:!0,parallelArrays:["x","y"],pointClass:L,requireSorting:!0,sorted:!0,init:function(a,c){g(this,"init",{options:c});var b=this,d=a.series,k;this.eventOptions=this.eventOptions||{};this.eventsToUnbind=[];b.chart=
-a;b.options=c=b.setOptions(c);b.linkedSeries=[];b.bindAxes();r(b,{name:c.name,state:"",visible:!1!==c.visible,selected:!0===c.selected});var e=c.events;G(e,function(a,c){q(a)&&b.eventOptions[c]!==a&&(q(b.eventOptions[c])&&T(b,c,b.eventOptions[c]),b.eventOptions[c]=a,I(b,c,a))});if(e&&e.click||c.point&&c.point.events&&c.point.events.click||c.allowPointSelect)a.runTrackerClick=!0;b.getColor();b.getSymbol();b.parallelArrays.forEach(function(a){b[a+"Data"]||(b[a+"Data"]=[])});b.isCartesian&&(a.hasCartesianSeries=
-!0);d.length&&(k=d[d.length-1]);b._i=M(k&&k._i,-1)+1;b.opacity=b.options.opacity;a.orderSeries(this.insert(d));c.dataSorting&&c.dataSorting.enabled?b.setDataSortingOptions():b.points||b.data||b.setData(c.data,!1);g(this,"afterInit")},is:function(a){return E[a]&&this instanceof E[a]},insert:function(a){var b=this.options.index,c;if(p(b)){for(c=a.length;c--;)if(b>=M(a[c].options.index,a[c]._i)){a.splice(c+1,0,this);break}-1===c&&a.unshift(this);c+=1}else a.push(this);return M(c,a.length-1)},bindAxes:function(){var a=
-this,c=a.options,d=a.chart,e;g(this,"bindAxes",null,function(){(a.axisTypes||[]).forEach(function(b){d[b].forEach(function(d){e=d.options;if(c[b]===e.index||"undefined"!==typeof c[b]&&c[b]===e.id||"undefined"===typeof c[b]&&0===e.index)a.insert(d.series),a[b]=d,d.isDirty=!0});a[b]||a.optionalAxis===b||w(18,!0,d)})});g(this,"afterBindAxes")},updateParallelArrays:function(a,c){var b=a.series,d=arguments,g=p(c)?function(d){var g="y"===d&&b.toYData?b.toYData(a):a[d];b[d+"Data"][c]=g}:function(a){Array.prototype[c].apply(b[a+
-"Data"],Array.prototype.slice.call(d,2))};b.parallelArrays.forEach(g)},hasData:function(){return this.visible&&"undefined"!==typeof this.dataMax&&"undefined"!==typeof this.dataMin||this.visible&&this.yData&&0<this.yData.length},autoIncrement:function(){var a=this.options,c=this.xIncrement,d,g=a.pointIntervalUnit,e=this.chart.time;c=M(c,a.pointStart,0);this.pointInterval=d=M(this.pointInterval,a.pointInterval,1);g&&(a=new e.Date(c),"day"===g?e.set("Date",a,e.get("Date",a)+d):"month"===g?e.set("Month",
-a,e.get("Month",a)+d):"year"===g&&e.set("FullYear",a,e.get("FullYear",a)+d),d=a.getTime()-c);this.xIncrement=c+d;return c},setDataSortingOptions:function(){var a=this.options;r(this,{requireSorting:!1,sorted:!1,enabledDataSorting:!0,allowDG:!1});l(a.pointRange)||(a.pointRange=1)},setOptions:function(a){var b=this.chart,c=b.options,d=c.plotOptions,f=b.userOptions||{};a=A(a);b=b.styledMode;var p={plotOptions:d,userOptions:a};g(this,"setOptions",p);var h=p.plotOptions[this.type],q=f.plotOptions||{};
-this.userOptions=p.userOptions;f=A(h,d.series,f.plotOptions&&f.plotOptions[this.type],a);this.tooltipOptions=A(e.tooltip,e.plotOptions.series&&e.plotOptions.series.tooltip,e.plotOptions[this.type].tooltip,c.tooltip.userOptions,d.series&&d.series.tooltip,d[this.type].tooltip,a.tooltip);this.stickyTracking=M(a.stickyTracking,q[this.type]&&q[this.type].stickyTracking,q.series&&q.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:f.stickyTracking);null===h.marker&&delete f.marker;
-this.zoneAxis=f.zoneAxis;c=this.zones=(f.zones||[]).slice();!f.negativeColor&&!f.negativeFillColor||f.zones||(d={value:f[this.zoneAxis+"Threshold"]||f.threshold||0,className:"highcharts-negative"},b||(d.color=f.negativeColor,d.fillColor=f.negativeFillColor),c.push(d));c.length&&l(c[c.length-1].value)&&c.push(b?{}:{color:this.color,fillColor:this.fillColor});g(this,"afterSetOptions",{options:f});return f},getName:function(){return M(this.options.name,"Series "+(this.index+1))},getCyclic:function(a,
-c,d){var b=this.chart,g=this.userOptions,k=a+"Index",e=a+"Counter",f=d?d.length:M(b.options.chart[a+"Count"],b[a+"Count"]);if(!c){var p=M(g[k],g["_"+k]);l(p)||(b.series.length||(b[e]=0),g["_"+k]=p=b[e]%f,b[e]+=1);d&&(c=d[p])}"undefined"!==typeof p&&(this[k]=p);this[a]=c},getColor:function(){this.chart.styledMode?this.getCyclic("color"):this.options.colorByPoint?this.options.color=null:this.getCyclic("color",this.options.color||e.plotOptions[this.type].color,this.chart.options.colors)},getPointsCollection:function(){return(this.hasGroupedData?
-this.points:this.data)||[]},getSymbol:function(){this.getCyclic("symbol",this.options.marker.symbol,this.chart.options.symbols)},findPointIndex:function(a,c){var b=a.id,g=a.x,k=this.points,e,f=this.options.dataSorting;if(b)var l=this.chart.get(b);else if(this.linkedParent||this.enabledDataSorting){var h=f&&f.matchByName?"name":"index";l=d(k,function(b){return!b.touched&&b[h]===a[h]});if(!l)return}if(l){var q=l&&l.index;"undefined"!==typeof q&&(e=!0)}"undefined"===typeof q&&p(g)&&(q=this.xData.indexOf(g,
-c));-1!==q&&"undefined"!==typeof q&&this.cropped&&(q=q>=this.cropStart?q-this.cropStart:q);!e&&k[q]&&k[q].touched&&(q=void 0);return q},drawLegendSymbol:z.drawLineMarker,updateData:function(a,c){var b=this.options,d=b.dataSorting,g=this.points,k=[],e,f,h,q=this.requireSorting,n=a.length===g.length,u=!0;this.xIncrement=null;a.forEach(function(a,c){var f=l(a)&&this.pointClass.prototype.optionsToObject.call({series:this},a)||{};var t=f.x;if(f.id||p(t)){if(t=this.findPointIndex(f,h),-1===t||"undefined"===
-typeof t?k.push(a):g[t]&&a!==b.data[t]?(g[t].update(a,!1,null,!1),g[t].touched=!0,q&&(h=t+1)):g[t]&&(g[t].touched=!0),!n||c!==t||d&&d.enabled||this.hasDerivedData)e=!0}else k.push(a)},this);if(e)for(a=g.length;a--;)(f=g[a])&&!f.touched&&f.remove&&f.remove(!1,c);else!n||d&&d.enabled?u=!1:(a.forEach(function(a,b){g[b].update&&a!==g[b].y&&g[b].update(a,!1,null,!1)}),k.length=0);g.forEach(function(a){a&&(a.touched=!1)});if(!u)return!1;k.forEach(function(a){this.addPoint(a,!1,null,null,!1)},this);null===
-this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=v(this.xData),this.autoIncrement());return!0},setData:function(b,c,d,g){var k=this,e=k.points,f=e&&e.length||0,t,l=k.options,h=k.chart,q=l.dataSorting,n=null,u=k.xAxis;n=l.turboThreshold;var r=this.xData,m=this.yData,A=(t=k.pointArrayMap)&&t.length,v=l.keys,E=0,H=1,O;b=b||[];t=b.length;c=M(c,!0);q&&q.enabled&&(b=this.sortData(b));!1!==g&&t&&f&&!k.cropped&&!k.hasGroupedData&&k.visible&&!k.isSeriesBoosting&&(O=this.updateData(b,d));if(!O){k.xIncrement=
-null;k.colorCounter=0;this.parallelArrays.forEach(function(a){k[a+"Data"].length=0});if(n&&t>n)if(n=k.getFirstValidPoint(b),p(n))for(d=0;d<t;d++)r[d]=this.autoIncrement(),m[d]=b[d];else if(a(n))if(A)for(d=0;d<t;d++)g=b[d],r[d]=g[0],m[d]=g.slice(1,A+1);else for(v&&(E=v.indexOf("x"),H=v.indexOf("y"),E=0<=E?E:0,H=0<=H?H:1),d=0;d<t;d++)g=b[d],r[d]=g[E],m[d]=g[H];else w(12,!1,h);else for(d=0;d<t;d++)"undefined"!==typeof b[d]&&(g={series:k},k.pointClass.prototype.applyOptions.apply(g,[b[d]]),k.updateParallelArrays(g,
-d));m&&B(m[0])&&w(14,!0,h);k.data=[];k.options.data=k.userOptions.data=b;for(d=f;d--;)e[d]&&e[d].destroy&&e[d].destroy();u&&(u.minRange=u.userMinRange);k.isDirty=h.isDirtyBox=!0;k.isDirtyData=!!e;d=!1}"point"===l.legendType&&(this.processData(),this.generatePoints());c&&h.redraw(d)},sortData:function(a){var b=this,d=b.options.dataSorting.sortKey||"y",g=function(a,b){return l(b)&&a.pointClass.prototype.optionsToObject.call({series:a},b)||{}};a.forEach(function(c,d){a[d]=g(b,c);a[d].index=d},this);
-a.concat().sort(function(a,b){a=c(d,a);b=c(d,b);return b<a?-1:b>a?1:0}).forEach(function(a,b){a.x=b},this);b.linkedSeries&&b.linkedSeries.forEach(function(b){var c=b.options,d=c.data;c.dataSorting&&c.dataSorting.enabled||!d||(d.forEach(function(c,k){d[k]=g(b,c);a[k]&&(d[k].x=a[k].x,d[k].index=k)}),b.setData(d,!1))});return a},getProcessedData:function(a){var b=this.xData,c=this.yData,d=b.length;var g=0;var e=this.xAxis,f=this.options;var p=f.cropThreshold;var l=a||this.getExtremesFromAll||f.getExtremesFromAll,
-h=this.isCartesian;a=e&&e.val2lin;f=!(!e||!e.logarithmic);var q=this.requireSorting;if(e){e=e.getExtremes();var n=e.min;var u=e.max}if(h&&this.sorted&&!l&&(!p||d>p||this.forceCrop))if(b[d-1]<n||b[0]>u)b=[],c=[];else if(this.yData&&(b[0]<n||b[d-1]>u)){g=this.cropData(this.xData,this.yData,n,u);b=g.xData;c=g.yData;g=g.start;var r=!0}for(p=b.length||1;--p;)if(d=f?a(b[p])-a(b[p-1]):b[p]-b[p-1],0<d&&("undefined"===typeof m||d<m))var m=d;else 0>d&&q&&(w(15,!1,this.chart),q=!1);return{xData:b,yData:c,cropped:r,
-cropStart:g,closestPointRange:m}},processData:function(a){var b=this.xAxis;if(this.isCartesian&&!this.isDirty&&!b.isDirty&&!this.yAxis.isDirty&&!a)return!1;a=this.getProcessedData();this.cropped=a.cropped;this.cropStart=a.cropStart;this.processedXData=a.xData;this.processedYData=a.yData;this.closestPointRange=this.basePointRange=a.closestPointRange},cropData:function(a,c,d,g,e){var b=a.length,k=0,f=b,p;e=M(e,this.cropShoulder);for(p=0;p<b;p++)if(a[p]>=d){k=Math.max(0,p-e);break}for(d=p;d<b;d++)if(a[d]>
-g){f=d+e;break}return{xData:a.slice(k,f),yData:c.slice(k,f),start:k,end:f}},generatePoints:function(){var a=this.options,c=a.data,d=this.data,e,f=this.processedXData,p=this.processedYData,l=this.pointClass,h=f.length,q=this.cropStart||0,n=this.hasGroupedData;a=a.keys;var u=[],m;d||n||(d=[],d.length=c.length,d=this.data=d);a&&n&&(this.options.keys=!1);for(m=0;m<h;m++){var w=q+m;if(n){var v=(new l).init(this,[f[m]].concat(Q(p[m])));v.dataGroup=this.groupMap[m];v.dataGroup.options&&(v.options=v.dataGroup.options,
-r(v,v.dataGroup.options),delete v.dataLabels)}else(v=d[w])||"undefined"===typeof c[w]||(d[w]=v=(new l).init(this,c[w],f[m]));v&&(v.index=w,u[m]=v)}this.options.keys=a;if(d&&(h!==(e=d.length)||n))for(m=0;m<e;m++)m!==q||n||(m+=h),d[m]&&(d[m].destroyElements(),d[m].plotX=void 0);this.data=d;this.points=u;g(this,"afterGeneratePoints")},getXExtremes:function(a){return{min:x(a),max:v(a)}},getExtremes:function(b,c){var d=this.xAxis,k=this.yAxis,e=this.processedXData||this.xData,f=[],l=0,h=0;var q=0;var n=
-this.requireSorting?this.cropShoulder:0,u=k?k.positiveValuesOnly:!1,r;b=b||this.stackedYData||this.processedYData||[];k=b.length;d&&(q=d.getExtremes(),h=q.min,q=q.max);for(r=0;r<k;r++){var m=e[r];var w=b[r];var A=(p(w)||a(w))&&(w.length||0<w||!u);m=c||this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||!d||(e[r+n]||m)>=h&&(e[r-n]||m)<=q;if(A&&m)if(A=w.length)for(;A--;)p(w[A])&&(f[l++]=w[A]);else f[l++]=w}b={dataMin:x(f),dataMax:v(f)};g(this,"afterGetExtremes",{dataExtremes:b});
-return b},applyExtremes:function(){var a=this.getExtremes();this.dataMin=a.dataMin;this.dataMax=a.dataMax;return a},getFirstValidPoint:function(a){for(var b=null,c=a.length,d=0;null===b&&d<c;)b=a[d],d++;return b},translate:function(){this.processedXData||this.processData();this.generatePoints();var b=this.options,c=b.stacking,d=this.xAxis,e=d.categories,f=this.enabledDataSorting,h=this.yAxis,q=this.points,u=q.length,r=!!this.modifyValue,m,w=this.pointPlacementToXValue(),v=!!w,A=b.threshold,B=b.startFromThreshold?
-A:0,E,O=this.zoneAxis||"y",G=Number.MAX_VALUE;for(m=0;m<u;m++){var x=q[m],y=x.x,z=x.y,C=x.low,J=c&&h.stacking&&h.stacking.stacks[(this.negStacks&&z<(B?0:A)?"-":"")+this.stackKey];if(h.positiveValuesOnly&&!h.validatePositiveValue(z)||d.positiveValuesOnly&&!d.validatePositiveValue(y))x.isNull=!0;x.plotX=E=n(D(d.translate(y,0,0,0,1,w,"flags"===this.type),-1E5,1E5));if(c&&this.visible&&J&&J[y]){var F=this.getStackIndicator(F,y,this.index);if(!x.isNull){var Q=J[y];var I=Q.points[F.key]}}a(I)&&(C=I[0],
-z=I[1],C===B&&F.key===J[y].base&&(C=M(p(A)&&A,h.min)),h.positiveValuesOnly&&0>=C&&(C=null),x.total=x.stackTotal=Q.total,x.percentage=Q.total&&x.y/Q.total*100,x.stackY=z,this.irregularWidths||Q.setOffset(this.pointXOffset||0,this.barW||0));x.yBottom=l(C)?D(h.translate(C,0,1,0,1),-1E5,1E5):null;r&&(z=this.modifyValue(z,x));x.plotY="number"===typeof z&&Infinity!==z?D(h.translate(z,0,1,0,1),-1E5,1E5):void 0;x.isInside=this.isPointInside(x);x.clientX=v?n(d.translate(y,0,0,0,1,w)):E;x.negative=x[O]<(b[O+
-"Threshold"]||A||0);x.category=e&&"undefined"!==typeof e[x.x]?e[x.x]:x.x;if(!x.isNull&&!1!==x.visible){"undefined"!==typeof K&&(G=Math.min(G,Math.abs(E-K)));var K=E}x.zone=this.zones.length&&x.getZone();!x.graphic&&this.group&&f&&(x.isNew=!0)}this.closestPointRangePx=G;g(this,"afterTranslate")},getValidPoints:function(a,c,d){var b=this.chart;return(a||this.points||[]).filter(function(a){return c&&!b.isInsidePlot(a.plotX,a.plotY,b.inverted)?!1:!1!==a.visible&&(d||!a.isNull)})},getClipBox:function(a,
-c){var b=this.options,d=this.chart,g=d.inverted,k=this.xAxis,e=k&&this.yAxis,f=d.options.chart.scrollablePlotArea||{};a&&!1===b.clip&&e?a=g?{y:-d.chartWidth+e.len+e.pos,height:d.chartWidth,width:d.chartHeight,x:-d.chartHeight+k.len+k.pos}:{y:-e.pos,height:d.chartHeight,width:d.chartWidth,x:-k.pos}:(a=this.clipBox||d.clipBox,c&&(a.width=d.plotSizeX,a.x=(d.scrollablePixelsX||0)*(f.scrollPositionX||0)));return c?{width:a.width,x:a.x}:a},setClip:function(a){var b=this.chart,c=this.options,d=b.renderer,
-g=b.inverted,e=this.clipBox,f=this.getClipBox(a),p=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,f.height,c.xAxis,c.yAxis].join(),l=b[p],h=b[p+"m"];a&&(f.width=0,g&&(f.x=b.plotHeight+(!1!==c.clip?0:b.plotTop)));l?b.hasLoaded||l.attr(f):(a&&(b[p+"m"]=h=d.clipRect(g?b.plotSizeX+99:-99,g?-b.plotLeft:-b.plotTop,99,g?b.chartWidth:b.chartHeight)),b[p]=l=d.clipRect(f),l.count={length:0});a&&!l.count[this.index]&&(l.count[this.index]=!0,l.count.length+=1);if(!1!==c.clip||a)this.group.clip(a||
-e?l:b.clipRect),this.markerGroup.clip(h),this.sharedClipKey=p;a||(l.count[this.index]&&(delete l.count[this.index],--l.count.length),0===l.count.length&&p&&b[p]&&(e||(b[p]=b[p].destroy()),b[p+"m"]&&(b[p+"m"]=b[p+"m"].destroy())))},animate:function(a){var b=this.chart,c=y(this.options.animation);if(!b.hasRendered)if(a)this.setClip(c);else{var d=this.sharedClipKey;a=b[d];var g=this.getClipBox(c,!0);a&&a.animate(g,c);b[d+"m"]&&b[d+"m"].animate({width:g.width+99,x:g.x-(b.inverted?0:99)},c)}},afterAnimate:function(){this.setClip();
-g(this,"afterAnimate");this.finishedAnimating=!0},drawPoints:function(){var a=this.points,c=this.chart,d,g,e=this.options.marker,f=this[this.specialGroup]||this.markerGroup,p=this.xAxis,l=M(e.enabled,!p||p.isRadial?!0:null,this.closestPointRangePx>=e.enabledThreshold*e.radius);if(!1!==e.enabled||this._hasPointMarkers)for(d=0;d<a.length;d++){var h=a[d];var q=(g=h.graphic)?"animate":"attr";var n=h.marker||{};var u=!!h.marker;if((l&&"undefined"===typeof n.enabled||n.enabled)&&!h.isNull&&!1!==h.visible){var r=
-M(n.symbol,this.symbol);var m=this.markerAttribs(h,h.selected&&"select");this.enabledDataSorting&&(h.startXPos=p.reversed?-m.width:p.width);var w=!1!==h.isInside;g?g[w?"show":"hide"](w).animate(m):w&&(0<m.width||h.hasImage)&&(h.graphic=g=c.renderer.symbol(r,m.x,m.y,m.width,m.height,u?n:e).add(f),this.enabledDataSorting&&c.hasRendered&&(g.attr({x:h.startXPos}),q="animate"));g&&"animate"===q&&g[w?"show":"hide"](w).animate(m);if(g&&!c.styledMode)g[q](this.pointAttribs(h,h.selected&&"select"));g&&g.addClass(h.getClassName(),
-!0)}else g&&(h.graphic=g.destroy())}},markerAttribs:function(a,c){var b=this.options,d=b.marker,g=a.marker||{},e=g.symbol||d.symbol,k=M(g.radius,d.radius);c&&(d=d.states[c],c=g.states&&g.states[c],k=M(c&&c.radius,d&&d.radius,k+(d&&d.radiusPlus||0)));a.hasImage=e&&0===e.indexOf("url");a.hasImage&&(k=0);a={x:b.crisp?Math.floor(a.plotX)-k:a.plotX-k,y:a.plotY-k};k&&(a.width=a.height=2*k);return a},pointAttribs:function(a,c){var b=this.options.marker,d=a&&a.options,g=d&&d.marker||{},e=this.color,k=d&&
-d.color,f=a&&a.color;d=M(g.lineWidth,b.lineWidth);var p=a&&a.zone&&a.zone.color;a=1;e=k||p||f||e;k=g.fillColor||b.fillColor||e;e=g.lineColor||b.lineColor||e;c=c||"normal";b=b.states[c];c=g.states&&g.states[c]||{};d=M(c.lineWidth,b.lineWidth,d+M(c.lineWidthPlus,b.lineWidthPlus,0));k=c.fillColor||b.fillColor||k;e=c.lineColor||b.lineColor||e;a=M(c.opacity,b.opacity,a);return{stroke:e,"stroke-width":d,fill:k,opacity:a}},destroy:function(a){var b=this,c=b.chart,d=/AppleWebKit\/533/.test(u.navigator.userAgent),
-e,f,p=b.data||[],h,l;g(b,"destroy");this.removeEvents(a);(b.axisTypes||[]).forEach(function(a){(l=b[a])&&l.series&&(J(l.series,b),l.isDirty=l.forceRedraw=!0)});b.legendItem&&b.chart.legend.destroyItem(b);for(f=p.length;f--;)(h=p[f])&&h.destroy&&h.destroy();b.points=null;C.clearTimeout(b.animationTimeout);G(b,function(a,b){a instanceof K&&!a.survive&&(e=d&&"group"===b?"hide":"destroy",a[e]())});c.hoverSeries===b&&(c.hoverSeries=null);J(c.series,b);c.orderSeries();G(b,function(c,d){a&&"hcEvents"===
-d||delete b[d]})},getGraphPath:function(a,c,d){var b=this,g=b.options,e=g.step,k,f=[],p=[],h;a=a||b.points;(k=a.reversed)&&a.reverse();(e={right:1,center:2}[e]||e&&3)&&k&&(e=4-e);a=this.getValidPoints(a,!1,!(g.connectNulls&&!c&&!d));a.forEach(function(k,q){var t=k.plotX,n=k.plotY,u=a[q-1];(k.leftCliff||u&&u.rightCliff)&&!d&&(h=!0);k.isNull&&!l(c)&&0<q?h=!g.connectNulls:k.isNull&&!c?h=!0:(0===q||h?q=[["M",k.plotX,k.plotY]]:b.getPointSpline?q=[b.getPointSpline(a,k,q)]:e?(q=1===e?[["L",u.plotX,n]]:2===
-e?[["L",(u.plotX+t)/2,u.plotY],["L",(u.plotX+t)/2,n]]:[["L",t,u.plotY]],q.push(["L",t,n])):q=[["L",t,n]],p.push(k.x),e&&(p.push(k.x),2===e&&p.push(k.x)),f.push.apply(f,q),h=!1)});f.xMap=p;return b.graphPath=f},drawGraph:function(){var a=this,c=this.options,d=(this.gappedPath||this.getGraphPath).call(this),g=this.chart.styledMode,e=[["graph","highcharts-graph"]];g||e[0].push(c.lineColor||this.color||"#cccccc",c.dashStyle);e=a.getZonesGraphs(e);e.forEach(function(b,e){var k=b[0],f=a[k],p=f?"animate":
-"attr";f?(f.endX=a.preventGraphAnimation?null:d.xMap,f.animate({d:d})):d.length&&(a[k]=f=a.chart.renderer.path(d).addClass(b[1]).attr({zIndex:1}).add(a.group));f&&!g&&(k={stroke:b[2],"stroke-width":c.lineWidth,fill:a.fillGraph&&a.color||"none"},b[3]?k.dashstyle=b[3]:"square"!==c.linecap&&(k["stroke-linecap"]=k["stroke-linejoin"]="round"),f[p](k).shadow(2>e&&c.shadow));f&&(f.startX=d.xMap,f.isArea=d.isArea)})},getZonesGraphs:function(a){this.zones.forEach(function(b,c){c=["zone-graph-"+c,"highcharts-graph highcharts-zone-graph-"+
-c+" "+(b.className||"")];this.chart.styledMode||c.push(b.color||this.color,b.dashStyle||this.options.dashStyle);a.push(c)},this);return a},applyZones:function(){var a=this,c=this.chart,d=c.renderer,g=this.zones,e,f,p=this.clips||[],h,l=this.graph,q=this.area,n=Math.max(c.chartWidth,c.chartHeight),u=this[(this.zoneAxis||"y")+"Axis"],r=c.inverted,m,w,v,A=!1,B,E;if(g.length&&(l||q)&&u&&"undefined"!==typeof u.min){var O=u.reversed;var G=u.horiz;l&&!this.showLine&&l.hide();q&&q.hide();var x=u.getExtremes();
-g.forEach(function(b,g){e=O?G?c.plotWidth:0:G?0:u.toPixels(x.min)||0;e=D(M(f,e),0,n);f=D(Math.round(u.toPixels(M(b.value,x.max),!0)||0),0,n);A&&(e=f=u.toPixels(x.max));m=Math.abs(e-f);w=Math.min(e,f);v=Math.max(e,f);u.isXAxis?(h={x:r?v:w,y:0,width:m,height:n},G||(h.x=c.plotHeight-h.x)):(h={x:0,y:r?v:w,width:n,height:m},G&&(h.y=c.plotWidth-h.y));r&&d.isVML&&(h=u.isXAxis?{x:0,y:O?w:v,height:h.width,width:c.chartWidth}:{x:h.y-c.plotLeft-c.spacingBox.x,y:0,width:h.height,height:c.chartHeight});p[g]?p[g].animate(h):
-p[g]=d.clipRect(h);B=a["zone-area-"+g];E=a["zone-graph-"+g];l&&E&&E.clip(p[g]);q&&B&&B.clip(p[g]);A=b.value>x.max;a.resetZones&&0===f&&(f=void 0)});this.clips=p}else a.visible&&(l&&l.show(!0),q&&q.show(!0))},invertGroups:function(a){function b(){["group","markerGroup"].forEach(function(b){c[b]&&(d.renderer.isVML&&c[b].attr({width:c.yAxis.len,height:c.xAxis.len}),c[b].width=c.yAxis.len,c[b].height=c.xAxis.len,c[b].invert(c.isRadialSeries?!1:a))})}var c=this,d=c.chart;c.xAxis&&(c.eventsToUnbind.push(I(d,
-"resize",b)),b(),c.invertGroups=b)},plotGroup:function(a,c,d,g,e){var b=this[a],k=!b;d={visibility:d,zIndex:g||.1};"undefined"===typeof this.opacity||this.chart.styledMode||"inactive"===this.state||(d.opacity=this.opacity);k&&(this[a]=b=this.chart.renderer.g().add(e));b.addClass("highcharts-"+c+" highcharts-series-"+this.index+" highcharts-"+this.type+"-series "+(l(this.colorIndex)?"highcharts-color-"+this.colorIndex+" ":"")+(this.options.className||"")+(b.hasClass("highcharts-tracker")?" highcharts-tracker":
-""),!0);b.attr(d)[k?"attr":"animate"](this.getPlotBox());return b},getPlotBox:function(){var a=this.chart,c=this.xAxis,d=this.yAxis;a.inverted&&(c=d,d=this.xAxis);return{translateX:c?c.left:a.plotLeft,translateY:d?d.top:a.plotTop,scaleX:1,scaleY:1}},removeEvents:function(a){a?this.eventsToUnbind.length&&(this.eventsToUnbind.forEach(function(a){a()}),this.eventsToUnbind.length=0):T(this)},render:function(){var a=this,c=a.chart,d=a.options,e=y(d.animation),f=!a.finishedAnimating&&c.renderer.isSVG&&
-e.duration,p=a.visible?"inherit":"hidden",h=d.zIndex,l=a.hasRendered,q=c.seriesGroup,n=c.inverted;g(this,"render");var u=a.plotGroup("group","series",p,h,q);a.markerGroup=a.plotGroup("markerGroup","markers",p,h,q);f&&a.animate&&a.animate(!0);u.inverted=a.isCartesian||a.invertable?n:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.visible&&a.drawPoints();a.drawDataLabels&&a.drawDataLabels();a.redrawPoints&&a.redrawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(n);
-!1===d.clip||a.sharedClipKey||l||u.clip(c.clipRect);f&&a.animate&&a.animate();l||(f&&e.defer&&(f+=e.defer),a.animationTimeout=O(function(){a.afterAnimate()},f||0));a.isDirty=!1;a.hasRendered=!0;g(a,"afterRender")},redraw:function(){var a=this.chart,c=this.isDirty||this.isDirtyData,d=this.group,g=this.xAxis,e=this.yAxis;d&&(a.inverted&&d.attr({width:a.plotWidth,height:a.plotHeight}),d.animate({translateX:M(g&&g.left,a.plotLeft),translateY:M(e&&e.top,a.plotTop)}));this.translate();this.render();c&&
-delete this.kdTree},kdAxisArray:["clientX","plotY"],searchPoint:function(a,c){var b=this.xAxis,d=this.yAxis,g=this.chart.inverted;return this.searchKDTree({clientX:g?b.len-a.chartY+b.pos:a.chartX-b.pos,plotY:g?d.len-a.chartX+d.pos:a.chartY-d.pos},c,a)},buildKDTree:function(a){function b(a,d,g){var e;if(e=a&&a.length){var f=c.kdAxisArray[d%g];a.sort(function(a,b){return a[f]-b[f]});e=Math.floor(e/2);return{point:a[e],left:b(a.slice(0,e),d+1,g),right:b(a.slice(e+1),d+1,g)}}}this.buildingKdTree=!0;var c=
-this,d=-1<c.options.findNearestPointBy.indexOf("y")?2:1;delete c.kdTree;O(function(){c.kdTree=b(c.getValidPoints(null,!c.directTouch),d,d);c.buildingKdTree=!1},c.options.kdNow||a&&"touchstart"===a.type?0:1)},searchKDTree:function(a,c,d){function b(a,c,d,p){var h=c.point,q=g.kdAxisArray[d%p],n=h;var u=l(a[e])&&l(h[e])?Math.pow(a[e]-h[e],2):null;var t=l(a[f])&&l(h[f])?Math.pow(a[f]-h[f],2):null;t=(u||0)+(t||0);h.dist=l(t)?Math.sqrt(t):Number.MAX_VALUE;h.distX=l(u)?Math.sqrt(u):Number.MAX_VALUE;q=a[q]-
-h[q];t=0>q?"left":"right";u=0>q?"right":"left";c[t]&&(t=b(a,c[t],d+1,p),n=t[k]<n[k]?t:h);c[u]&&Math.sqrt(q*q)<n[k]&&(a=b(a,c[u],d+1,p),n=a[k]<n[k]?a:n);return n}var g=this,e=this.kdAxisArray[0],f=this.kdAxisArray[1],k=c?"distX":"dist";c=-1<g.options.findNearestPointBy.indexOf("y")?2:1;this.kdTree||this.buildingKdTree||this.buildKDTree(d);if(this.kdTree)return b(a,this.kdTree,c,c)},pointPlacementToXValue:function(){var a=this.options,c=a.pointRange,d=this.xAxis;a=a.pointPlacement;"between"===a&&(a=
-d.reversed?-.5:.5);return p(a)?a*M(c,d.pointRange):0},isPointInside:function(a){return"undefined"!==typeof a.plotY&&"undefined"!==typeof a.plotX&&0<=a.plotY&&a.plotY<=this.yAxis.len&&0<=a.plotX&&a.plotX<=this.xAxis.len}});"";return f});N(m,"Series/LineSeries.js",[m["Core/Series/CartesianSeries.js"],m["Core/Globals.js"]],function(f,h){h.Series=f;return h.Series});N(m,"Extensions/Stacking.js",[m["Core/Axis/Axis.js"],m["Core/Chart/Chart.js"],m["Core/Globals.js"],m["Core/Axis/StackingAxis.js"],m["Core/Utilities.js"]],
-function(f,h,m,z,F){var L=F.correctFloat,K=F.defined,C=F.destroyObjectProperties,y=F.format,e=F.isNumber,I=F.pick;"";var v=m.Series,x=function(){function f(e,f,h,m,r){var d=e.chart.inverted;this.axis=e;this.isNegative=h;this.options=f=f||{};this.x=m;this.total=null;this.points={};this.hasValidPoints=!1;this.stack=r;this.rightCliff=this.leftCliff=0;this.alignOptions={align:f.align||(d?h?"left":"right":"center"),verticalAlign:f.verticalAlign||(d?"middle":h?"bottom":"top"),y:f.y,x:f.x};this.textAlign=
-f.textAlign||(d?h?"right":"left":"center")}f.prototype.destroy=function(){C(this,this.axis)};f.prototype.render=function(e){var f=this.axis.chart,h=this.options,n=h.format;n=n?y(n,this,f):h.formatter.call(this);this.label?this.label.attr({text:n,visibility:"hidden"}):(this.label=f.renderer.label(n,null,null,h.shape,null,null,h.useHTML,!1,"stack-labels"),n={r:h.borderRadius||0,text:n,rotation:h.rotation,padding:I(h.padding,5),visibility:"hidden"},f.styledMode||(n.fill=h.backgroundColor,n.stroke=h.borderColor,
-n["stroke-width"]=h.borderWidth,this.label.css(h.style)),this.label.attr(n),this.label.added||this.label.add(e));this.label.labelrank=f.plotHeight};f.prototype.setOffset=function(f,h,m,w,r){var d=this.axis,g=d.chart;w=d.translate(d.stacking.usePercentage?100:w?w:this.total,0,0,0,1);m=d.translate(m?m:0);m=K(w)&&Math.abs(w-m);f=I(r,g.xAxis[0].translate(this.x))+f;d=K(w)&&this.getStackBox(g,this,f,w,h,m,d);h=this.label;m=this.isNegative;f="justify"===I(this.options.overflow,"justify");var c=this.textAlign;
-h&&d&&(r=h.getBBox(),w=h.padding,c="left"===c?g.inverted?-w:w:"right"===c?r.width:g.inverted&&"center"===c?r.width/2:g.inverted?m?r.width+w:-w:r.width/2,m=g.inverted?r.height/2:m?-w:r.height,this.alignOptions.x=I(this.options.x,0),this.alignOptions.y=I(this.options.y,0),d.x-=c,d.y-=m,h.align(this.alignOptions,null,d),g.isInsidePlot(h.alignAttr.x+c-this.alignOptions.x,h.alignAttr.y+m-this.alignOptions.y)?h.show():(h.alignAttr.y=-9999,f=!1),f&&v.prototype.justifyDataLabel.call(this.axis,h,this.alignOptions,
-h.alignAttr,r,d),h.attr({x:h.alignAttr.x,y:h.alignAttr.y}),I(!f&&this.options.crop,!0)&&((g=e(h.x)&&e(h.y)&&g.isInsidePlot(h.x-w+h.width,h.y)&&g.isInsidePlot(h.x+w,h.y))||h.hide()))};f.prototype.getStackBox=function(e,f,h,m,r,d,g){var c=f.axis.reversed,a=e.inverted,q=g.height+g.pos-(a?e.plotLeft:e.plotTop);f=f.isNegative&&!c||!f.isNegative&&c;return{x:a?f?m-g.right:m-d+g.pos-e.plotLeft:h+e.xAxis[0].transB-e.plotLeft,y:a?g.height-h-r:f?q-m-d:q-m,width:a?d:r,height:a?r:d}};return f}();h.prototype.getStacks=
-function(){var e=this,f=e.inverted;e.yAxis.forEach(function(e){e.stacking&&e.stacking.stacks&&e.hasVisibleSeries&&(e.stacking.oldStacks=e.stacking.stacks)});e.series.forEach(function(h){var l=h.xAxis&&h.xAxis.options||{};!h.options.stacking||!0!==h.visible&&!1!==e.options.chart.ignoreHiddenSeries||(h.stackKey=[h.type,I(h.options.stack,""),f?l.top:l.left,f?l.height:l.width].join())})};z.compose(f);v.prototype.setGroupedPoints=function(){this.options.centerInCategory&&(this.is("column")||this.is("columnrange"))&&
-!this.options.stacking&&1<this.chart.series.length&&v.prototype.setStackedPoints.call(this,"group")};v.prototype.setStackedPoints=function(e){var f=e||this.options.stacking;if(f&&(!0===this.visible||!1===this.chart.options.chart.ignoreHiddenSeries)){var h=this.processedXData,m=this.processedYData,w=[],r=m.length,d=this.options,g=d.threshold,c=I(d.startFromThreshold&&g,0);d=d.stack;e=e?this.type+","+f:this.stackKey;var a="-"+e,q=this.negStacks,p=this.yAxis,v=p.stacking.stacks,A=p.stacking.oldStacks,
-G,D;p.stacking.stacksTouched+=1;for(D=0;D<r;D++){var y=h[D];var z=m[D];var O=this.getStackIndicator(O,y,this.index);var E=O.key;var u=(G=q&&z<(c?0:g))?a:e;v[u]||(v[u]={});v[u][y]||(A[u]&&A[u][y]?(v[u][y]=A[u][y],v[u][y].total=null):v[u][y]=new x(p,p.options.stackLabels,G,y,d));u=v[u][y];null!==z?(u.points[E]=u.points[this.index]=[I(u.cumulative,c)],K(u.cumulative)||(u.base=E),u.touched=p.stacking.stacksTouched,0<O.index&&!1===this.singleStacks&&(u.points[E][0]=u.points[this.index+","+y+",0"][0])):
-u.points[E]=u.points[this.index]=null;"percent"===f?(G=G?e:a,q&&v[G]&&v[G][y]?(G=v[G][y],u.total=G.total=Math.max(G.total,u.total)+Math.abs(z)||0):u.total=L(u.total+(Math.abs(z)||0))):"group"===f?null!==z&&(u.total=(u.total||0)+1):u.total=L(u.total+(z||0));u.cumulative="group"===f?(u.total||1)-1:I(u.cumulative,c)+(z||0);null!==z&&(u.points[E].push(u.cumulative),w[D]=u.cumulative,u.hasValidPoints=!0)}"percent"===f&&(p.stacking.usePercentage=!0);"group"!==f&&(this.stackedYData=w);p.stacking.oldStacks=
-{}}};v.prototype.modifyStacks=function(){var e=this,f=e.stackKey,h=e.yAxis.stacking.stacks,m=e.processedXData,w,r=e.options.stacking;e[r+"Stacker"]&&[f,"-"+f].forEach(function(d){for(var g=m.length,c,a;g--;)if(c=m[g],w=e.getStackIndicator(w,c,e.index,d),a=(c=h[d]&&h[d][c])&&c.points[w.key])e[r+"Stacker"](a,c,g)})};v.prototype.percentStacker=function(e,f,h){f=f.total?100/f.total:0;e[0]=L(e[0]*f);e[1]=L(e[1]*f);this.stackedYData[h]=e[1]};v.prototype.getStackIndicator=function(e,f,h,m){!K(e)||e.x!==
-f||m&&e.key!==m?e={x:f,index:0,key:m}:e.index++;e.key=[h,f,e.index].join();return e};m.StackItem=x;return m.StackItem});N(m,"Core/Dynamics.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Axis/Axis.js"],m["Core/Series/Series.js"],m["Core/Chart/Chart.js"],m["Core/Globals.js"],m["Series/LineSeries.js"],m["Core/Options.js"],m["Core/Series/Point.js"],m["Core/Time.js"],m["Core/Utilities.js"]],function(f,h,m,z,F,L,K,C,y,e){var I=f.animate,v=f.setAnimation,x=m.seriesTypes,D=K.time,n=e.addEvent,l=e.createElement,
-J=e.css,w=e.defined,r=e.erase,d=e.error,g=e.extend,c=e.fireEvent,a=e.isArray,q=e.isNumber,p=e.isObject,B=e.isString,A=e.merge,G=e.objectEach,M=e.pick,T=e.relativeLength,Q=e.splat;F.cleanRecursively=function(a,c){var d={};G(a,function(b,g){if(p(a[g],!0)&&!a.nodeType&&c[g])b=F.cleanRecursively(a[g],c[g]),Object.keys(b).length&&(d[g]=b);else if(p(a[g])||a[g]!==c[g])d[g]=a[g]});return d};g(z.prototype,{addSeries:function(a,d,g){var b,e=this;a&&(d=M(d,!0),c(e,"addSeries",{options:a},function(){b=e.initSeries(a);
-e.isDirtyLegend=!0;e.linkSeries();b.enabledDataSorting&&b.setData(a.data,!1);c(e,"afterAddSeries",{series:b});d&&e.redraw(g)}));return b},addAxis:function(a,c,d,b){return this.createAxis(c?"xAxis":"yAxis",{axis:a,redraw:d,animation:b})},addColorAxis:function(a,c,d){return this.createAxis("colorAxis",{axis:a,redraw:c,animation:d})},createAxis:function(a,c){var d=this.options,b="colorAxis"===a,g=c.redraw,e=c.animation;c=A(c.axis,{index:this[a].length,isX:"xAxis"===a});var f=b?new F.ColorAxis(this,c):
-new h(this,c);d[a]=Q(d[a]||{});d[a].push(c);b&&(this.isDirtyLegend=!0,this.axes.forEach(function(a){a.series=[]}),this.series.forEach(function(a){a.bindAxes();a.isDirtyData=!0}));M(g,!0)&&this.redraw(e);return f},showLoading:function(a){var c=this,d=c.options,b=c.loadingDiv,e=d.loading,f=function(){b&&J(b,{left:c.plotLeft+"px",top:c.plotTop+"px",width:c.plotWidth+"px",height:c.plotHeight+"px"})};b||(c.loadingDiv=b=l("div",{className:"highcharts-loading highcharts-loading-hidden"},null,c.container),
-c.loadingSpan=l("span",{className:"highcharts-loading-inner"},null,b),n(c,"redraw",f));b.className="highcharts-loading";c.loadingSpan.innerHTML=M(a,d.lang.loading,"");c.styledMode||(J(b,g(e.style,{zIndex:10})),J(c.loadingSpan,e.labelStyle),c.loadingShown||(J(b,{opacity:0,display:""}),I(b,{opacity:e.style.opacity||.5},{duration:e.showDuration||0})));c.loadingShown=!0;f()},hideLoading:function(){var a=this.options,c=this.loadingDiv;c&&(c.className="highcharts-loading highcharts-loading-hidden",this.styledMode||
-I(c,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){J(c,{display:"none"})}}));this.loadingShown=!1},propsRequireDirtyBox:"backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(" "),propsRequireReflow:"margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft".split(" "),propsRequireUpdateSeries:"chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip".split(" "),
-collectionsWithUpdate:["xAxis","yAxis","zAxis","series"],update:function(a,d,g,b){var e=this,f={credits:"addCredits",title:"setTitle",subtitle:"setSubtitle",caption:"setCaption"},p,h,l,n=a.isResponsiveOptions,u=[];c(e,"update",{options:a});n||e.setResponsive(!1,!0);a=F.cleanRecursively(a,e.options);A(!0,e.userOptions,a);if(p=a.chart){A(!0,e.options.chart,p);"className"in p&&e.setClassName(p.className);"reflow"in p&&e.setReflow(p.reflow);if("inverted"in p||"polar"in p||"type"in p){e.propFromSeries();
-var m=!0}"alignTicks"in p&&(m=!0);G(p,function(a,b){-1!==e.propsRequireUpdateSeries.indexOf("chart."+b)&&(h=!0);-1!==e.propsRequireDirtyBox.indexOf(b)&&(e.isDirtyBox=!0);-1!==e.propsRequireReflow.indexOf(b)&&(n?e.isDirtyBox=!0:l=!0)});!e.styledMode&&"style"in p&&e.renderer.setStyle(p.style)}!e.styledMode&&a.colors&&(this.options.colors=a.colors);a.time&&(this.time===D&&(this.time=new y(a.time)),A(!0,e.options.time,a.time));G(a,function(b,c){if(e[c]&&"function"===typeof e[c].update)e[c].update(b,!1);
-else if("function"===typeof e[f[c]])e[f[c]](b);else"color"!==c&&-1===e.collectionsWithUpdate.indexOf(c)&&A(!0,e.options[c],a[c]);"chart"!==c&&-1!==e.propsRequireUpdateSeries.indexOf(c)&&(h=!0)});this.collectionsWithUpdate.forEach(function(b){if(a[b]){if("series"===b){var c=[];e[b].forEach(function(a,b){a.options.isInternal||c.push(M(a.options.index,b))})}Q(a[b]).forEach(function(a,d){var f=w(a.id),k;f&&(k=e.get(a.id));k||(k=e[b][c?c[d]:d])&&f&&w(k.options.id)&&(k=void 0);k&&k.coll===b&&(k.update(a,
-!1),g&&(k.touched=!0));!k&&g&&e.collectionsWithInit[b]&&(e.collectionsWithInit[b][0].apply(e,[a].concat(e.collectionsWithInit[b][1]||[]).concat([!1])).touched=!0)});g&&e[b].forEach(function(a){a.touched||a.options.isInternal?delete a.touched:u.push(a)})}});u.forEach(function(a){a.remove&&a.remove(!1)});m&&e.axes.forEach(function(a){a.update({},!1)});h&&e.getSeriesOrderByLinks().forEach(function(a){a.chart&&a.update({},!1)},this);m=p&&p.width;p=p&&p.height;B(p)&&(p=T(p,m||e.chartWidth));l||q(m)&&m!==
-e.chartWidth||q(p)&&p!==e.chartHeight?e.setSize(m,p,b):M(d,!0)&&e.redraw(b);c(e,"afterUpdate",{options:a,redraw:d,animation:b})},setSubtitle:function(a,c){this.applyDescription("subtitle",a);this.layOutTitles(c)},setCaption:function(a,c){this.applyDescription("caption",a);this.layOutTitles(c)}});z.prototype.collectionsWithInit={xAxis:[z.prototype.addAxis,[!0]],yAxis:[z.prototype.addAxis,[!1]],series:[z.prototype.addSeries]};g(C.prototype,{update:function(a,c,d,b){function g(){e.applyOptions(a);var b=
-h&&e.hasDummyGraphic;b=null===e.y?!b:b;h&&b&&(e.graphic=h.destroy(),delete e.hasDummyGraphic);p(a,!0)&&(h&&h.element&&a&&a.marker&&"undefined"!==typeof a.marker.symbol&&(e.graphic=h.destroy()),a&&a.dataLabels&&e.dataLabel&&(e.dataLabel=e.dataLabel.destroy()),e.connector&&(e.connector=e.connector.destroy()));q=e.index;f.updateParallelArrays(e,q);n.data[q]=p(n.data[q],!0)||p(a,!0)?e.options:M(a,n.data[q]);f.isDirty=f.isDirtyData=!0;!f.fixedBox&&f.hasCartesianSeries&&(l.isDirtyBox=!0);"point"===n.legendType&&
-(l.isDirtyLegend=!0);c&&l.redraw(d)}var e=this,f=e.series,h=e.graphic,q,l=f.chart,n=f.options;c=M(c,!0);!1===b?g():e.firePointEvent("update",{options:a},g)},remove:function(a,c){this.series.removePoint(this.series.data.indexOf(this),a,c)}});g(L.prototype,{addPoint:function(a,d,g,b,e){var f=this.options,k=this.data,p=this.chart,h=this.xAxis;h=h&&h.hasNames&&h.names;var q=f.data,l=this.xData,n;d=M(d,!0);var u={series:this};this.pointClass.prototype.applyOptions.apply(u,[a]);var m=u.x;var r=l.length;
-if(this.requireSorting&&m<l[r-1])for(n=!0;r&&l[r-1]>m;)r--;this.updateParallelArrays(u,"splice",r,0,0);this.updateParallelArrays(u,r);h&&u.name&&(h[m]=u.name);q.splice(r,0,a);n&&(this.data.splice(r,0,null),this.processData());"point"===f.legendType&&this.generatePoints();g&&(k[0]&&k[0].remove?k[0].remove(!1):(k.shift(),this.updateParallelArrays(u,"shift"),q.shift()));!1!==e&&c(this,"addPoint",{point:u});this.isDirtyData=this.isDirty=!0;d&&p.redraw(b)},removePoint:function(a,c,d){var b=this,g=b.data,
-e=g[a],f=b.points,p=b.chart,h=function(){f&&f.length===g.length&&f.splice(a,1);g.splice(a,1);b.options.data.splice(a,1);b.updateParallelArrays(e||{series:b},"splice",a,1);e&&e.destroy();b.isDirty=!0;b.isDirtyData=!0;c&&p.redraw()};v(d,p);c=M(c,!0);e?e.firePointEvent("remove",null,h):h()},remove:function(a,d,g,b){function e(){f.destroy(b);f.remove=null;p.isDirtyLegend=p.isDirtyBox=!0;p.linkSeries();M(a,!0)&&p.redraw(d)}var f=this,p=f.chart;!1!==g?c(f,"remove",null,e):e()},update:function(a,e){a=F.cleanRecursively(a,
-this.userOptions);c(this,"update",{options:a});var f=this,b=f.chart,k=f.userOptions,p=f.initialType||f.type,h=b.options.plotOptions,q=a.type||k.type||b.options.chart.type,l=!(this.hasDerivedData||q&&q!==this.type||"undefined"!==typeof a.pointStart||"undefined"!==typeof a.pointInterval||f.hasOptionChanged("dataGrouping")||f.hasOptionChanged("pointStart")||f.hasOptionChanged("pointInterval")||f.hasOptionChanged("pointIntervalUnit")||f.hasOptionChanged("keys")),n=x[p].prototype,m,r=["eventOptions","navigatorSeries",
-"baseSeries"],w=f.finishedAnimating&&{animation:!1},v={};l&&(r.push("data","isDirtyData","points","processedXData","processedYData","xIncrement","cropped","_hasPointMarkers","_hasPointLabels","mapMap","mapData","minY","maxY","minX","maxX"),!1!==a.visible&&r.push("area","graph"),f.parallelArrays.forEach(function(a){r.push(a+"Data")}),a.data&&(a.dataSorting&&g(f.options.dataSorting,a.dataSorting),this.setData(a.data,!1)));a=A(k,w,{index:"undefined"===typeof k.index?f.index:k.index,pointStart:M(h&&h.series&&
-h.series.pointStart,k.pointStart,f.xData[0])},!l&&{data:f.options.data},a);l&&a.data&&(a.data=f.options.data);r=["group","markerGroup","dataLabelsGroup","transformGroup"].concat(r);r.forEach(function(a){r[a]=f[a];delete f[a]});f.remove(!1,null,!1,!0);for(m in n)f[m]=void 0;x[q||p]?g(f,x[q||p].prototype):d(17,!0,b,{missingModuleFor:q||p});r.forEach(function(a){f[a]=r[a]});f.init(b,a);if(l&&this.points){var B=f.options;!1===B.visible?(v.graphic=1,v.dataLabel=1):f._hasPointLabels||(a=B.marker,k=B.dataLabels,
-a&&(!1===a.enabled||"symbol"in a)&&(v.graphic=1),k&&!1===k.enabled&&(v.dataLabel=1));this.points.forEach(function(a){a&&a.series&&(a.resolveColor(),Object.keys(v).length&&a.destroyElements(v),!1===B.showInLegend&&a.legendItem&&b.legend.destroyItem(a))},this)}f.initialType=p;b.linkSeries();c(this,"afterUpdate");M(e,!0)&&b.redraw(l?void 0:!1)},setName:function(a){this.name=this.options.name=this.userOptions.name=a;this.chart.isDirtyLegend=!0},hasOptionChanged:function(a){var c=this.options[a],d=this.chart.options.plotOptions,
-b=this.userOptions[a];return b?c!==b:c!==M(d&&d[this.type]&&d[this.type][a],d&&d.series&&d.series[a],c)}});g(h.prototype,{update:function(a,c){var d=this.chart,b=a&&a.events||{};a=A(this.userOptions,a);d.options[this.coll].indexOf&&(d.options[this.coll][d.options[this.coll].indexOf(this.userOptions)]=a);G(d.options[this.coll].events,function(a,c){"undefined"===typeof b[c]&&(b[c]=void 0)});this.destroy(!0);this.init(d,g(a,{events:b}));d.isDirtyBox=!0;M(c,!0)&&d.redraw()},remove:function(c){for(var d=
-this.chart,g=this.coll,b=this.series,e=b.length;e--;)b[e]&&b[e].remove(!1);r(d.axes,this);r(d[g],this);a(d.options[g])?d.options[g].splice(this.options.index,1):delete d.options[g];d[g].forEach(function(a,b){a.options.index=a.userOptions.index=b});this.destroy();d.isDirtyBox=!0;M(c,!0)&&d.redraw()},setTitle:function(a,c){this.update({title:a},c)},setCategories:function(a,c){this.update({categories:a},c)}})});N(m,"Series/AreaSeries.js",[m["Core/Series/Series.js"],m["Core/Color/Color.js"],m["Core/Globals.js"],
-m["Mixins/LegendSymbol.js"],m["Core/Utilities.js"]],function(f,h,m,z,F){var L=h.parse,K=F.objectEach,C=F.pick,y=m.Series;f.seriesType("area","line",{threshold:0},{singleStacks:!1,getStackPoints:function(e){var f=[],h=[],m=this.xAxis,D=this.yAxis,n=D.stacking.stacks[this.stackKey],l={},y=this.index,w=D.series,r=w.length,d=C(D.options.reversedStacks,!0)?1:-1,g;e=e||this.points;if(this.options.stacking){for(g=0;g<e.length;g++)e[g].leftNull=e[g].rightNull=void 0,l[e[g].x]=e[g];K(n,function(a,c){null!==
-a.total&&h.push(c)});h.sort(function(a,c){return a-c});var c=w.map(function(a){return a.visible});h.forEach(function(a,e){var p=0,q,w;if(l[a]&&!l[a].isNull)f.push(l[a]),[-1,1].forEach(function(f){var p=1===f?"rightNull":"leftNull",m=0,v=n[h[e+f]];if(v)for(g=y;0<=g&&g<r;)q=v.points[g],q||(g===y?l[a][p]=!0:c[g]&&(w=n[a].points[g])&&(m-=w[1]-w[0])),g+=d;l[a][1===f?"rightCliff":"leftCliff"]=m});else{for(g=y;0<=g&&g<r;){if(q=n[a].points[g]){p=q[1];break}g+=d}p=D.translate(p,0,1,0,1);f.push({isNull:!0,
-plotX:m.translate(a,0,0,0,1),x:a,plotY:p,yBottom:p})}})}return f},getGraphPath:function(e){var f=y.prototype.getGraphPath,h=this.options,m=h.stacking,D=this.yAxis,n,l=[],z=[],w=this.index,r=D.stacking.stacks[this.stackKey],d=h.threshold,g=Math.round(D.getThreshold(h.threshold));h=C(h.connectNulls,"percent"===m);var c=function(a,c,f){var p=e[a];a=m&&r[p.x].points[w];var h=p[f+"Null"]||0;f=p[f+"Cliff"]||0;p=!0;if(f||h){var n=(h?a[0]:a[1])+f;var v=a[0]+f;p=!!h}else!m&&e[c]&&e[c].isNull&&(n=v=d);"undefined"!==
-typeof n&&(z.push({plotX:q,plotY:null===n?g:D.getThreshold(n),isNull:p,isCliff:!0}),l.push({plotX:q,plotY:null===v?g:D.getThreshold(v),doCurve:!1}))};e=e||this.points;m&&(e=this.getStackPoints(e));for(n=0;n<e.length;n++){m||(e[n].leftCliff=e[n].rightCliff=e[n].leftNull=e[n].rightNull=void 0);var a=e[n].isNull;var q=C(e[n].rectPlotX,e[n].plotX);var p=m?e[n].yBottom:g;if(!a||h)h||c(n,n-1,"left"),a&&!m&&h||(z.push(e[n]),l.push({x:n,plotX:q,plotY:p})),h||c(n,n+1,"right")}n=f.call(this,z,!0,!0);l.reversed=
-!0;a=f.call(this,l,!0,!0);(p=a[0])&&"M"===p[0]&&(a[0]=["L",p[1],p[2]]);a=n.concat(a);f=f.call(this,z,!1,h);a.xMap=n.xMap;this.areaPath=a;return f},drawGraph:function(){this.areaPath=[];y.prototype.drawGraph.apply(this);var e=this,f=this.areaPath,h=this.options,m=[["area","highcharts-area",this.color,h.fillColor]];this.zones.forEach(function(f,n){m.push(["zone-area-"+n,"highcharts-area highcharts-zone-area-"+n+" "+f.className,f.color||e.color,f.fillColor||h.fillColor])});m.forEach(function(m){var n=
-m[0],l=e[n],v=l?"animate":"attr",w={};l?(l.endX=e.preventGraphAnimation?null:f.xMap,l.animate({d:f})):(w.zIndex=0,l=e[n]=e.chart.renderer.path(f).addClass(m[1]).add(e.group),l.isArea=!0);e.chart.styledMode||(w.fill=C(m[3],L(m[2]).setOpacity(C(h.fillOpacity,.75)).get()));l[v](w);l.startX=f.xMap;l.shiftUnit=h.step?2:1})},drawLegendSymbol:z.drawRectangle});""});N(m,"Series/SplineSeries.js",[m["Core/Series/Series.js"],m["Core/Utilities.js"]],function(f,h){var m=h.pick;f.seriesType("spline","line",{},
-{getPointSpline:function(f,h,L){var z=h.plotX||0,C=h.plotY||0,y=f[L-1];L=f[L+1];if(y&&!y.isNull&&!1!==y.doCurve&&!h.isCliff&&L&&!L.isNull&&!1!==L.doCurve&&!h.isCliff){f=y.plotY||0;var e=L.plotX||0;L=L.plotY||0;var F=0;var v=(1.5*z+(y.plotX||0))/2.5;var x=(1.5*C+f)/2.5;e=(1.5*z+e)/2.5;var D=(1.5*C+L)/2.5;e!==v&&(F=(D-x)*(e-z)/(e-v)+C-D);x+=F;D+=F;x>f&&x>C?(x=Math.max(f,C),D=2*C-x):x<f&&x<C&&(x=Math.min(f,C),D=2*C-x);D>L&&D>C?(D=Math.max(L,C),x=2*C-D):D<L&&D<C&&(D=Math.min(L,C),x=2*C-D);h.rightContX=
-e;h.rightContY=D}h=["C",m(y.rightContX,y.plotX,0),m(y.rightContY,y.plotY,0),m(v,z,0),m(x,C,0),z,C];y.rightContX=y.rightContY=void 0;return h}});""});N(m,"Series/AreaSplineSeries.js",[m["Core/Series/Series.js"],m["Mixins/LegendSymbol.js"],m["Core/Options.js"]],function(f,h,m){var z=f.seriesTypes.area.prototype;f.seriesType("areaspline","spline",m.defaultOptions.plotOptions.area,{getStackPoints:z.getStackPoints,getGraphPath:z.getGraphPath,drawGraph:z.drawGraph,drawLegendSymbol:h.drawRectangle});""});
-N(m,"Series/ColumnSeries.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Series/Series.js"],m["Core/Color/Color.js"],m["Core/Globals.js"],m["Mixins/LegendSymbol.js"],m["Series/LineSeries.js"],m["Core/Utilities.js"]],function(f,h,m,z,F,L,K){var C=f.animObject,y=m.parse;f=z.noop;var e=K.clamp,I=K.defined,v=K.extend,x=K.isArray,D=K.isNumber,n=K.merge,l=K.pick,J=K.objectEach;"";h=h.seriesType("column","line",{borderRadius:0,centerInCategory:!1,groupPadding:.2,marker:null,pointPadding:.1,minPointLength:0,
-cropThreshold:50,pointRange:null,states:{hover:{halo:!1,brightness:.1},select:{color:"#cccccc",borderColor:"#000000"}},dataLabels:{align:void 0,verticalAlign:void 0,y:void 0},startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0,borderColor:"#ffffff"},{cropShoulder:0,directTouch:!0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){L.prototype.init.apply(this,arguments);var e=this,f=e.chart;f.hasRendered&&f.series.forEach(function(d){d.type===e.type&&(d.isDirty=
-!0)})},getColumnMetrics:function(){var e=this,f=e.options,d=e.xAxis,g=e.yAxis,c=d.options.reversedStacks;c=d.reversed&&!c||!d.reversed&&c;var a,h={},p=0;!1===f.grouping?p=1:e.chart.series.forEach(function(c){var d=c.yAxis,f=c.options;if(c.type===e.type&&(c.visible||!e.chart.options.chart.ignoreHiddenSeries)&&g.len===d.len&&g.pos===d.pos){if(f.stacking&&"group"!==f.stacking){a=c.stackKey;"undefined"===typeof h[a]&&(h[a]=p++);var q=h[a]}else!1!==f.grouping&&(q=p++);c.columnIndex=q}});var n=Math.min(Math.abs(d.transA)*
-(d.ordinal&&d.ordinal.slope||f.pointRange||d.closestPointRange||d.tickInterval||1),d.len),m=n*f.groupPadding,v=(n-2*m)/(p||1);f=Math.min(f.maxPointWidth||d.len,l(f.pointWidth,v*(1-2*f.pointPadding)));e.columnMetrics={width:f,offset:(v-f)/2+(m+((e.columnIndex||0)+(c?1:0))*v-n/2)*(c?-1:1),paddedWidth:v,columnCount:p};return e.columnMetrics},crispCol:function(e,f,d,g){var c=this.chart,a=this.borderWidth,h=-(a%2?.5:0);a=a%2?.5:1;c.inverted&&c.renderer.isVML&&(a+=1);this.options.crisp&&(d=Math.round(e+
-d)+h,e=Math.round(e)+h,d-=e);g=Math.round(f+g)+a;h=.5>=Math.abs(f)&&.5<g;f=Math.round(f)+a;g-=f;h&&g&&(--f,g+=1);return{x:e,y:f,width:d,height:g}},adjustForMissingColumns:function(e,f,d,g){var c=this,a=this.options.stacking;if(!d.isNull&&1<g.columnCount){var h=0,p=0;J(this.yAxis.stacking&&this.yAxis.stacking.stacks,function(g){if("number"===typeof d.x&&(g=g[d.x.toString()])){var e=g.points[c.index],f=g.total;a?(e&&(h=p),g.hasValidPoints&&p++):x(e)&&(h=e[1],p=f||0)}});e=(d.plotX||0)+((p-1)*g.paddedWidth+
-f)/2-f-h*g.paddedWidth}return e},translate:function(){var f=this,h=f.chart,d=f.options,g=f.dense=2>f.closestPointRange*f.xAxis.transA;g=f.borderWidth=l(d.borderWidth,g?0:1);var c=f.xAxis,a=f.yAxis,q=d.threshold,p=f.translatedThreshold=a.getThreshold(q),n=l(d.minPointLength,5),m=f.getColumnMetrics(),v=m.width,x=f.barW=Math.max(v,1+2*g),y=f.pointXOffset=m.offset,z=f.dataMin,C=f.dataMax;h.inverted&&(p-=.5);d.pointPadding&&(x=Math.ceil(x));L.prototype.translate.apply(f);f.points.forEach(function(g){var u=
-l(g.yBottom,p),b=999+Math.abs(u),k=v,t=g.plotX||0;b=e(g.plotY,-b,a.len+b);var r=t+y,w=x,A=Math.min(b,u),B=Math.max(b,u)-A;if(n&&Math.abs(B)<n){B=n;var E=!a.reversed&&!g.negative||a.reversed&&g.negative;D(q)&&D(C)&&g.y===q&&C<=q&&(a.min||0)<q&&z!==C&&(E=!E);A=Math.abs(A-p)>n?u-n:p-(E?n:0)}I(g.options.pointWidth)&&(k=w=Math.ceil(g.options.pointWidth),r-=Math.round((k-v)/2));d.centerInCategory&&(r=f.adjustForMissingColumns(r,k,g,m));g.barX=r;g.pointWidth=k;g.tooltipPos=h.inverted?[a.len+a.pos-h.plotLeft-
-b,c.len+c.pos-h.plotTop-(t||0)-y-w/2,B]:[r+w/2,b+a.pos-h.plotTop,B];g.shapeType=f.pointClass.prototype.shapeType||"rect";g.shapeArgs=f.crispCol.apply(f,g.isNull?[r,p,w,0]:[r,A,w,B])})},getSymbol:f,drawLegendSymbol:F.drawRectangle,drawGraph:function(){this.group[this.dense?"addClass":"removeClass"]("highcharts-dense-data")},pointAttribs:function(e,f){var d=this.options,g=this.pointAttrToOptions||{};var c=g.stroke||"borderColor";var a=g["stroke-width"]||"borderWidth",h=e&&e.color||this.color,p=e&&e[c]||
-d[c]||this.color||h,m=e&&e[a]||d[a]||this[a]||0;g=e&&e.options.dashStyle||d.dashStyle;var r=l(e&&e.opacity,d.opacity,1);if(e&&this.zones.length){var v=e.getZone();h=e.options.color||v&&(v.color||e.nonZonedColor)||this.color;v&&(p=v.borderColor||p,g=v.dashStyle||g,m=v.borderWidth||m)}f&&e&&(e=n(d.states[f],e.options.states&&e.options.states[f]||{}),f=e.brightness,h=e.color||"undefined"!==typeof f&&y(h).brighten(e.brightness).get()||h,p=e[c]||p,m=e[a]||m,g=e.dashStyle||g,r=l(e.opacity,r));c={fill:h,
-stroke:p,"stroke-width":m,opacity:r};g&&(c.dashstyle=g);return c},drawPoints:function(){var e=this,f=this.chart,d=e.options,g=f.renderer,c=d.animationLimit||250,a;e.points.forEach(function(h){var p=h.graphic,l=!!p,q=p&&f.pointCount<c?"animate":"attr";if(D(h.plotY)&&null!==h.y){a=h.shapeArgs;p&&h.hasNewShapeType()&&(p=p.destroy());e.enabledDataSorting&&(h.startXPos=e.xAxis.reversed?-(a?a.width:0):e.xAxis.width);p||(h.graphic=p=g[h.shapeType](a).add(h.group||e.group))&&e.enabledDataSorting&&f.hasRendered&&
-f.pointCount<c&&(p.attr({x:h.startXPos}),l=!0,q="animate");if(p&&l)p[q](n(a));if(d.borderRadius)p[q]({r:d.borderRadius});f.styledMode||p[q](e.pointAttribs(h,h.selected&&"select")).shadow(!1!==h.allowShadow&&d.shadow,null,d.stacking&&!d.borderRadius);p.addClass(h.getClassName(),!0)}else p&&(h.graphic=p.destroy())})},animate:function(f){var h=this,d=this.yAxis,g=h.options,c=this.chart.inverted,a={},l=c?"translateX":"translateY";if(f)a.scaleY=.001,f=e(d.toPixels(g.threshold),d.pos,d.pos+d.len),c?a.translateX=
-f-d.len:a.translateY=f,h.clipBox&&h.setClip(),h.group.attr(a);else{var p=h.group.attr(l);h.group.animate({scaleY:1},v(C(h.options.animation),{step:function(c,g){h.group&&(a[l]=p+g.pos*(d.pos-p),h.group.attr(a))}}))}},remove:function(){var e=this,f=e.chart;f.hasRendered&&f.series.forEach(function(d){d.type===e.type&&(d.isDirty=!0)});L.prototype.remove.apply(e,arguments)}});"";return h});N(m,"Series/BarSeries.js",[m["Core/Series/Series.js"]],function(f){f.seriesType("bar","column",null,{inverted:!0});
-""});N(m,"Series/ScatterSeries.js",[m["Core/Series/Series.js"],m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h,m){m=m.addEvent;var z=h.Series;f.seriesType("scatter","line",{lineWidth:0,findNearestPointBy:"xy",jitter:{x:0,y:0},marker:{enabled:!0},tooltip:{headerFormat:'<span style="color:{point.color}">\u25cf</span> <span style="font-size: 10px"> {series.name}</span><br/>',pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}},{sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group",
-"markerGroup","dataLabelsGroup"],takeOrdinalPosition:!1,drawGraph:function(){(this.options.lineWidth||0===this.options.lineWidth&&this.graph&&this.graph.strokeWidth())&&z.prototype.drawGraph.call(this)},applyJitter:function(){var f=this,h=this.options.jitter,m=this.points.length;h&&this.points.forEach(function(z,y){["x","y"].forEach(function(e,C){var v="plot"+e.toUpperCase();if(h[e]&&!z.isNull){var x=f[e+"Axis"];var D=h[e]*x.transA;if(x&&!x.isLog){var n=Math.max(0,z[v]-D);x=Math.min(x.len,z[v]+D);
-C=1E4*Math.sin(y+C*m);z[v]=n+(x-n)*(C-Math.floor(C));"x"===e&&(z.clientX=z.plotX)}}})})}});m(z,"afterTranslate",function(){this.applyJitter&&this.applyJitter()});""});N(m,"Mixins/CenteredSeries.js",[m["Core/Globals.js"],m["Core/Utilities.js"]],function(f,h){var m=h.isNumber,z=h.pick,F=h.relativeLength,L=f.deg2rad;return f.CenteredSeriesMixin={getCenter:function(){var h=this.options,m=this.chart,y=2*(h.slicedOffset||0),e=m.plotWidth-2*y,I=m.plotHeight-2*y,v=h.center,x=Math.min(e,I),D=h.size,n=h.innerSize||
-0;"string"===typeof D&&(D=parseFloat(D));"string"===typeof n&&(n=parseFloat(n));h=[z(v[0],"50%"),z(v[1],"50%"),z(D&&0>D?void 0:h.size,"100%"),z(n&&0>n?void 0:h.innerSize||0,"0%")];!m.angular||this instanceof f.Series||(h[3]=0);for(v=0;4>v;++v)D=h[v],m=2>v||2===v&&/%$/.test(D),h[v]=F(D,[e,I,x,h[2]][v])+(m?y:0);h[3]>h[2]&&(h[3]=h[2]);return h},getStartAndEndRadians:function(f,h){f=m(f)?f:0;h=m(h)&&h>f&&360>h-f?h:f+360;return{start:L*(f+-90),end:L*(h+-90)}}}});N(m,"Series/PieSeries.js",[m["Core/Animation/AnimationUtilities.js"],
-m["Core/Series/Series.js"],m["Mixins/CenteredSeries.js"],m["Core/Globals.js"],m["Mixins/LegendSymbol.js"],m["Series/LineSeries.js"],m["Core/Series/Point.js"],m["Core/Renderer/SVG/SVGRenderer.js"],m["Core/Utilities.js"]],function(f,h,m,z,F,L,K,C,y){var e=f.setAnimation,I=m.getStartAndEndRadians;f=z.noop;var v=y.addEvent,x=y.clamp,D=y.defined,n=y.fireEvent,l=y.isNumber,J=y.merge,w=y.pick,r=y.relativeLength;h.seriesType("pie","line",{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{allowOverlap:!0,
-connectorPadding:5,connectorShape:"fixedOffset",crookDistance:"70%",distance:30,enabled:!0,formatter:function(){return this.point.isNull?void 0:this.point.name},softConnector:!0,x:0},fillColor:void 0,ignoreHiddenPoint:!0,inactiveOtherPoints:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:"#ffffff",borderWidth:1,lineWidth:void 0,states:{hover:{brightness:.1}}},{isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,
-trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttribs:h.seriesTypes.column.prototype.pointAttribs,animate:function(d){var g=this,c=g.points,a=g.startAngleRad;d||c.forEach(function(c){var d=c.graphic,e=c.shapeArgs;d&&e&&(d.attr({r:w(c.startR,g.center&&g.center[3]/2),start:a,end:a}),d.animate({r:e.r,start:e.start,end:e.end},g.options.animation))})},hasData:function(){return!!this.processedXData.length},updateTotals:function(){var d,g=0,c=this.points,a=c.length,e=this.options.ignoreHiddenPoint;
-for(d=0;d<a;d++){var f=c[d];g+=e&&!f.visible?0:f.isNull?0:f.y}this.total=g;for(d=0;d<a;d++)f=c[d],f.percentage=0<g&&(f.visible||!e)?f.y/g*100:0,f.total=g},generatePoints:function(){L.prototype.generatePoints.call(this);this.updateTotals()},getX:function(d,g,c){var a=this.center,e=this.radii?this.radii[c.index]:a[2]/2;d=Math.asin(x((d-a[1])/(e+c.labelDistance),-1,1));return a[0]+(g?-1:1)*Math.cos(d)*(e+c.labelDistance)+(0<c.labelDistance?(g?-1:1)*this.options.dataLabels.padding:0)},translate:function(d){this.generatePoints();
-var g=0,c=this.options,a=c.slicedOffset,e=a+(c.borderWidth||0),f=I(c.startAngle,c.endAngle),h=this.startAngleRad=f.start;f=(this.endAngleRad=f.end)-h;var l=this.points,m=c.dataLabels.distance;c=c.ignoreHiddenPoint;var v,x=l.length;d||(this.center=d=this.getCenter());for(v=0;v<x;v++){var y=l[v];var z=h+g*f;if(!c||y.visible)g+=y.percentage/100;var E=h+g*f;y.shapeType="arc";y.shapeArgs={x:d[0],y:d[1],r:d[2]/2,innerR:d[3]/2,start:Math.round(1E3*z)/1E3,end:Math.round(1E3*E)/1E3};y.labelDistance=w(y.options.dataLabels&&
-y.options.dataLabels.distance,m);y.labelDistance=r(y.labelDistance,y.shapeArgs.r);this.maxLabelDistance=Math.max(this.maxLabelDistance||0,y.labelDistance);E=(E+z)/2;E>1.5*Math.PI?E-=2*Math.PI:E<-Math.PI/2&&(E+=2*Math.PI);y.slicedTranslation={translateX:Math.round(Math.cos(E)*a),translateY:Math.round(Math.sin(E)*a)};var u=Math.cos(E)*d[2]/2;var b=Math.sin(E)*d[2]/2;y.tooltipPos=[d[0]+.7*u,d[1]+.7*b];y.half=E<-Math.PI/2||E>Math.PI/2?1:0;y.angle=E;z=Math.min(e,y.labelDistance/5);y.labelPosition={natural:{x:d[0]+
-u+Math.cos(E)*y.labelDistance,y:d[1]+b+Math.sin(E)*y.labelDistance},"final":{},alignment:0>y.labelDistance?"center":y.half?"right":"left",connectorPosition:{breakAt:{x:d[0]+u+Math.cos(E)*z,y:d[1]+b+Math.sin(E)*z},touchingSliceAt:{x:d[0]+u,y:d[1]+b}}}}n(this,"afterTranslate")},drawEmpty:function(){var d=this.startAngleRad,g=this.endAngleRad,c=this.options;if(0===this.total&&this.center){var a=this.center[0];var e=this.center[1];this.graph||(this.graph=this.chart.renderer.arc(a,e,this.center[1]/2,0,
-d,g).addClass("highcharts-empty-series").add(this.group));this.graph.attr({d:C.prototype.symbols.arc(a,e,this.center[2]/2,0,{start:d,end:g,innerR:this.center[3]/2})});this.chart.styledMode||this.graph.attr({"stroke-width":c.borderWidth,fill:c.fillColor||"none",stroke:c.color||"#cccccc"})}else this.graph&&(this.graph=this.graph.destroy())},redrawPoints:function(){var d=this,e=d.chart,c=e.renderer,a,f,h,l,n=d.options.shadow;this.drawEmpty();!n||d.shadowGroup||e.styledMode||(d.shadowGroup=c.g("shadow").attr({zIndex:-1}).add(d.group));
-d.points.forEach(function(g){var p={};f=g.graphic;if(!g.isNull&&f){l=g.shapeArgs;a=g.getTranslate();if(!e.styledMode){var q=g.shadowGroup;n&&!q&&(q=g.shadowGroup=c.g("shadow").add(d.shadowGroup));q&&q.attr(a);h=d.pointAttribs(g,g.selected&&"select")}g.delayedRendering?(f.setRadialReference(d.center).attr(l).attr(a),e.styledMode||f.attr(h).attr({"stroke-linejoin":"round"}).shadow(n,q),g.delayedRendering=!1):(f.setRadialReference(d.center),e.styledMode||J(!0,p,h),J(!0,p,l,a),f.animate(p));f.attr({visibility:g.visible?
-"inherit":"hidden"});f.addClass(g.getClassName())}else f&&(g.graphic=f.destroy())})},drawPoints:function(){var d=this.chart.renderer;this.points.forEach(function(e){e.graphic&&e.hasNewShapeType()&&(e.graphic=e.graphic.destroy());e.graphic||(e.graphic=d[e.shapeType](e.shapeArgs).add(e.series.group),e.delayedRendering=!0)})},searchPoint:f,sortByAngle:function(d,e){d.sort(function(c,a){return"undefined"!==typeof c.angle&&(a.angle-c.angle)*e})},drawLegendSymbol:F.drawRectangle,getCenter:m.getCenter,getSymbol:f,
-drawGraph:null},{init:function(){K.prototype.init.apply(this,arguments);var d=this;d.name=w(d.name,"Slice");var e=function(c){d.slice("select"===c.type)};v(d,"select",e);v(d,"unselect",e);return d},isValid:function(){return l(this.y)&&0<=this.y},setVisible:function(d,e){var c=this,a=c.series,g=a.chart,f=a.options.ignoreHiddenPoint;e=w(e,f);d!==c.visible&&(c.visible=c.options.visible=d="undefined"===typeof d?!c.visible:d,a.options.data[a.data.indexOf(c)]=c.options,["graphic","dataLabel","connector",
-"shadowGroup"].forEach(function(a){if(c[a])c[a][d?"show":"hide"](!0)}),c.legendItem&&g.legend.colorizeItem(c,d),d||"hover"!==c.state||c.setState(""),f&&(a.isDirty=!0),e&&g.redraw())},slice:function(d,g,c){var a=this.series;e(c,a.chart);w(g,!0);this.sliced=this.options.sliced=D(d)?d:!this.sliced;a.options.data[a.data.indexOf(this)]=this.options;this.graphic&&this.graphic.animate(this.getTranslate());this.shadowGroup&&this.shadowGroup.animate(this.getTranslate())},getTranslate:function(){return this.sliced?
-this.slicedTranslation:{translateX:0,translateY:0}},haloPath:function(d){var e=this.shapeArgs;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(e.x,e.y,e.r+d,e.r+d,{innerR:e.r-1,start:e.start,end:e.end})},connectorShapes:{fixedOffset:function(d,e,c){var a=e.breakAt;e=e.touchingSliceAt;return[["M",d.x,d.y],c.softConnector?["C",d.x+("left"===d.alignment?-5:5),d.y,2*a.x-e.x,2*a.y-e.y,a.x,a.y]:["L",a.x,a.y],["L",e.x,e.y]]},straight:function(d,e){e=e.touchingSliceAt;return[["M",
-d.x,d.y],["L",e.x,e.y]]},crookedLine:function(d,e,c){e=e.touchingSliceAt;var a=this.series,g=a.center[0],f=a.chart.plotWidth,h=a.chart.plotLeft;a=d.alignment;var l=this.shapeArgs.r;c=r(c.crookDistance,1);f="left"===a?g+l+(f+h-g-l)*(1-c):h+(g-l)*c;c=["L",f,d.y];g=!0;if("left"===a?f>d.x||f<e.x:f<d.x||f>e.x)g=!1;d=[["M",d.x,d.y]];g&&d.push(c);d.push(["L",e.x,e.y]);return d}},getConnectorPath:function(){var d=this.labelPosition,e=this.series.options.dataLabels,c=e.connectorShape,a=this.connectorShapes;
-a[c]&&(c=a[c]);return c.call(this,{x:d.final.x,y:d.final.y,alignment:d.alignment},d.connectorPosition,e)}});""});N(m,"Core/Series/DataLabels.js",[m["Core/Animation/AnimationUtilities.js"],m["Core/Globals.js"],m["Core/Series/CartesianSeries.js"],m["Core/Utilities.js"]],function(f,h,m,z){var F=f.getDeferredAnimation;f=h.noop;var L=h.seriesTypes,K=z.arrayMax,C=z.clamp,y=z.defined,e=z.extend,I=z.fireEvent,v=z.format,x=z.isArray,D=z.merge,n=z.objectEach,l=z.pick,J=z.relativeLength,w=z.splat,r=z.stableSort;
-"";h.distribute=function(d,e,c){function a(a,c){return a.target-c.target}var f,g=!0,n=d,m=[];var v=0;var w=n.reducedLen||e;for(f=d.length;f--;)v+=d[f].size;if(v>w){r(d,function(a,c){return(c.rank||0)-(a.rank||0)});for(v=f=0;v<=w;)v+=d[f].size,f++;m=d.splice(f-1,d.length)}r(d,a);for(d=d.map(function(a){return{size:a.size,targets:[a.target],align:l(a.align,.5)}});g;){for(f=d.length;f--;)g=d[f],v=(Math.min.apply(0,g.targets)+Math.max.apply(0,g.targets))/2,g.pos=C(v-g.size*g.align,0,e-g.size);f=d.length;
-for(g=!1;f--;)0<f&&d[f-1].pos+d[f-1].size>d[f].pos&&(d[f-1].size+=d[f].size,d[f-1].targets=d[f-1].targets.concat(d[f].targets),d[f-1].align=.5,d[f-1].pos+d[f-1].size>e&&(d[f-1].pos=e-d[f-1].size),d.splice(f,1),g=!0)}n.push.apply(n,m);f=0;d.some(function(a){var d=0;if(a.targets.some(function(){n[f].pos=a.pos+d;if("undefined"!==typeof c&&Math.abs(n[f].pos-n[f].target)>c)return n.slice(0,f+1).forEach(function(a){delete a.pos}),n.reducedLen=(n.reducedLen||e)-.1*e,n.reducedLen>.1*e&&h.distribute(n,e,c),
-!0;d+=n[f].size;f++}))return!0});r(n,a)};m.prototype.drawDataLabels=function(){function d(a,c){var d=c.filter;return d?(c=d.operator,a=a[d.property],d=d.value,">"===c&&a>d||"<"===c&&a<d||">="===c&&a>=d||"<="===c&&a<=d||"=="===c&&a==d||"==="===c&&a===d?!0:!1):!0}function e(a,c){var d=[],b;if(x(a)&&!x(c))d=a.map(function(a){return D(a,c)});else if(x(c)&&!x(a))d=c.map(function(b){return D(a,b)});else if(x(a)||x(c))for(b=Math.max(a.length,c.length);b--;)d[b]=D(a[b],c[b]);else d=D(a,c);return d}var c=
-this,a=c.chart,f=c.options,h=f.dataLabels,m=c.points,r,G=c.hasRendered||0,z=h.animation;z=h.defer?F(a,z,c):{defer:0,duration:0};var C=a.renderer;h=e(e(a.options.plotOptions&&a.options.plotOptions.series&&a.options.plotOptions.series.dataLabels,a.options.plotOptions&&a.options.plotOptions[c.type]&&a.options.plotOptions[c.type].dataLabels),h);I(this,"drawDataLabels");if(x(h)||h.enabled||c._hasPointLabels){var J=c.plotGroup("dataLabelsGroup","data-labels",G?"inherit":"hidden",h.zIndex||6);J.attr({opacity:+G});
-!G&&(G=c.dataLabelsGroup)&&(c.visible&&J.show(!0),G[f.animation?"animate":"attr"]({opacity:1},z));m.forEach(function(g){r=w(e(h,g.dlOptions||g.options&&g.options.dataLabels));r.forEach(function(e,h){var b=e.enabled&&(!g.isNull||g.dataLabelOnNull)&&d(g,e),k=g.dataLabels?g.dataLabels[h]:g.dataLabel,p=g.connectors?g.connectors[h]:g.connector,m=l(e.distance,g.labelDistance),q=!k;if(b){var u=g.getLabelConfig();var r=l(e[g.formatPrefix+"Format"],e.format);u=y(r)?v(r,u,a):(e[g.formatPrefix+"Formatter"]||
-e.formatter).call(u,e);r=e.style;var A=e.rotation;a.styledMode||(r.color=l(e.color,r.color,c.color,"#000000"),"contrast"===r.color?(g.contrastColor=C.getContrast(g.color||c.color),r.color=!y(m)&&e.inside||0>m||f.stacking?g.contrastColor:"#000000"):delete g.contrastColor,f.cursor&&(r.cursor=f.cursor));var w={r:e.borderRadius||0,rotation:A,padding:e.padding,zIndex:1};a.styledMode||(w.fill=e.backgroundColor,w.stroke=e.borderColor,w["stroke-width"]=e.borderWidth);n(w,function(a,b){"undefined"===typeof a&&
-delete w[b]})}!k||b&&y(u)?b&&y(u)&&(k?w.text=u:(g.dataLabels=g.dataLabels||[],k=g.dataLabels[h]=A?C.text(u,0,-9999,e.useHTML).addClass("highcharts-data-label"):C.label(u,0,-9999,e.shape,null,null,e.useHTML,null,"data-label"),h||(g.dataLabel=k),k.addClass(" highcharts-data-label-color-"+g.colorIndex+" "+(e.className||"")+(e.useHTML?" highcharts-tracker":""))),k.options=e,k.attr(w),a.styledMode||k.css(r).shadow(e.shadow),k.added||k.add(J),e.textPath&&!e.useHTML&&(k.setTextPath(g.getDataLabelPath&&g.getDataLabelPath(k)||
-g.graphic,e.textPath),g.dataLabelPath&&!e.textPath.enabled&&(g.dataLabelPath=g.dataLabelPath.destroy())),c.alignDataLabel(g,k,e,null,q)):(g.dataLabel=g.dataLabel&&g.dataLabel.destroy(),g.dataLabels&&(1===g.dataLabels.length?delete g.dataLabels:delete g.dataLabels[h]),h||delete g.dataLabel,p&&(g.connector=g.connector.destroy(),g.connectors&&(1===g.connectors.length?delete g.connectors:delete g.connectors[h])))})})}I(this,"afterDrawDataLabels")};m.prototype.alignDataLabel=function(d,g,c,a,f){var h=
-this,n=this.chart,m=this.isCartesian&&n.inverted,q=this.enabledDataSorting,r=l(d.dlBox&&d.dlBox.centerX,d.plotX,-9999),v=l(d.plotY,-9999),w=g.getBBox(),x=c.rotation,y=c.align,u=n.isInsidePlot(r,Math.round(v),m),b="justify"===l(c.overflow,q?"none":"justify"),k=this.visible&&!1!==d.visible&&(d.series.forceDL||q&&!b||u||c.inside&&a&&n.isInsidePlot(r,m?a.x+1:a.y+a.height-1,m));var t=function(a){q&&h.xAxis&&!b&&h.setDataLabelStartPos(d,g,f,u,a)};if(k){var z=n.renderer.fontMetrics(n.styledMode?void 0:c.style.fontSize,
-g).b;a=e({x:m?this.yAxis.len-v:r,y:Math.round(m?this.xAxis.len-r:v),width:0,height:0},a);e(c,{width:w.width,height:w.height});x?(b=!1,r=n.renderer.rotCorr(z,x),r={x:a.x+(c.x||0)+a.width/2+r.x,y:a.y+(c.y||0)+{top:0,middle:.5,bottom:1}[c.verticalAlign]*a.height},t(r),g[f?"attr":"animate"](r).attr({align:y}),t=(x+720)%360,t=180<t&&360>t,"left"===y?r.y-=t?w.height:0:"center"===y?(r.x-=w.width/2,r.y-=w.height/2):"right"===y&&(r.x-=w.width,r.y-=t?0:w.height),g.placed=!0,g.alignAttr=r):(t(a),g.align(c,null,
-a),r=g.alignAttr);b&&0<=a.height?this.justifyDataLabel(g,c,r,w,a,f):l(c.crop,!0)&&(k=n.isInsidePlot(r.x,r.y)&&n.isInsidePlot(r.x+w.width,r.y+w.height));if(c.shape&&!x)g[f?"attr":"animate"]({anchorX:m?n.plotWidth-d.plotY:d.plotX,anchorY:m?n.plotHeight-d.plotX:d.plotY})}f&&q&&(g.placed=!1);k||q&&!b||(g.hide(!0),g.placed=!1)};m.prototype.setDataLabelStartPos=function(d,e,c,a,f){var g=this.chart,h=g.inverted,l=this.xAxis,n=l.reversed,m=h?e.height/2:e.width/2;d=(d=d.pointWidth)?d/2:0;l=h?f.x:n?-m-d:l.width-
-m+d;f=h?n?this.yAxis.height-m+d:-m-d:f.y;e.startXPos=l;e.startYPos=f;a?"hidden"===e.visibility&&(e.show(),e.attr({opacity:0}).animate({opacity:1})):e.attr({opacity:1}).animate({opacity:0},void 0,e.hide);g.hasRendered&&(c&&e.attr({x:e.startXPos,y:e.startYPos}),e.placed=!0)};m.prototype.justifyDataLabel=function(d,e,c,a,f,h){var g=this.chart,p=e.align,l=e.verticalAlign,n=d.box?0:d.padding||0,m=e.x;m=void 0===m?0:m;var q=e.y;var r=void 0===q?0:q;q=c.x+n;if(0>q){"right"===p&&0<=m?(e.align="left",e.inside=
-!0):m-=q;var v=!0}q=c.x+a.width-n;q>g.plotWidth&&("left"===p&&0>=m?(e.align="right",e.inside=!0):m+=g.plotWidth-q,v=!0);q=c.y+n;0>q&&("bottom"===l&&0<=r?(e.verticalAlign="top",e.inside=!0):r-=q,v=!0);q=c.y+a.height-n;q>g.plotHeight&&("top"===l&&0>=r?(e.verticalAlign="bottom",e.inside=!0):r+=g.plotHeight-q,v=!0);v&&(e.x=m,e.y=r,d.placed=!h,d.align(e,void 0,f));return v};L.pie&&(L.pie.prototype.dataLabelPositioners={radialDistributionY:function(d){return d.top+d.distributeBox.pos},radialDistributionX:function(d,
-e,c,a){return d.getX(c<e.top+2||c>e.bottom-2?a:c,e.half,e)},justify:function(d,e,c){return c[0]+(d.half?-1:1)*(e+d.labelDistance)},alignToPlotEdges:function(d,e,c,a){d=d.getBBox().width;return e?d+a:c-d-a},alignToConnectors:function(d,e,c,a){var f=0,g;d.forEach(function(a){g=a.dataLabel.getBBox().width;g>f&&(f=g)});return e?f+a:c-f-a}},L.pie.prototype.drawDataLabels=function(){var d=this,e=d.data,c,a=d.chart,f=d.options.dataLabels||{},p=f.connectorPadding,n,r=a.plotWidth,v=a.plotHeight,w=a.plotLeft,
-x=Math.round(a.chartWidth/3),z,C=d.center,E=C[2]/2,u=C[1],b,k,t,F,I=[[],[]],J,L,N,P,S=[0,0,0,0],Y=d.dataLabelPositioners,W;d.visible&&(f.enabled||d._hasPointLabels)&&(e.forEach(function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:"auto"}).css({width:"auto",textOverflow:"clip"}),a.dataLabel.shortened=!1)}),m.prototype.drawDataLabels.apply(d),e.forEach(function(a){a.dataLabel&&(a.visible?(I[a.half].push(a),a.dataLabel._pos=null,!y(f.style.width)&&!y(a.options.dataLabels&&
-a.options.dataLabels.style&&a.options.dataLabels.style.width)&&a.dataLabel.getBBox().width>x&&(a.dataLabel.css({width:Math.round(.7*x)+"px"}),a.dataLabel.shortened=!0)):(a.dataLabel=a.dataLabel.destroy(),a.dataLabels&&1===a.dataLabels.length&&delete a.dataLabels))}),I.forEach(function(e,g){var n=e.length,m=[],q;if(n){d.sortByAngle(e,g-.5);if(0<d.maxLabelDistance){var A=Math.max(0,u-E-d.maxLabelDistance);var B=Math.min(u+E+d.maxLabelDistance,a.plotHeight);e.forEach(function(b){0<b.labelDistance&&b.dataLabel&&
-(b.top=Math.max(0,u-E-b.labelDistance),b.bottom=Math.min(u+E+b.labelDistance,a.plotHeight),q=b.dataLabel.getBBox().height||21,b.distributeBox={target:b.labelPosition.natural.y-b.top+q/2,size:q,rank:b.y},m.push(b.distributeBox))});A=B+q-A;h.distribute(m,A,A/5)}for(P=0;P<n;P++){c=e[P];t=c.labelPosition;b=c.dataLabel;N=!1===c.visible?"hidden":"inherit";L=A=t.natural.y;m&&y(c.distributeBox)&&("undefined"===typeof c.distributeBox.pos?N="hidden":(F=c.distributeBox.size,L=Y.radialDistributionY(c)));delete c.positionIndex;
-if(f.justify)J=Y.justify(c,E,C);else switch(f.alignTo){case "connectors":J=Y.alignToConnectors(e,g,r,w);break;case "plotEdges":J=Y.alignToPlotEdges(b,g,r,w);break;default:J=Y.radialDistributionX(d,c,L,A)}b._attr={visibility:N,align:t.alignment};W=c.options.dataLabels||{};b._pos={x:J+l(W.x,f.x)+({left:p,right:-p}[t.alignment]||0),y:L+l(W.y,f.y)-10};t.final.x=J;t.final.y=L;l(f.crop,!0)&&(k=b.getBBox().width,A=null,J-k<p&&1===g?(A=Math.round(k-J+p),S[3]=Math.max(A,S[3])):J+k>r-p&&0===g&&(A=Math.round(J+
-k-r+p),S[1]=Math.max(A,S[1])),0>L-F/2?S[0]=Math.max(Math.round(-L+F/2),S[0]):L+F/2>v&&(S[2]=Math.max(Math.round(L+F/2-v),S[2])),b.sideOverflow=A)}}}),0===K(S)||this.verifyDataLabelOverflow(S))&&(this.placeDataLabels(),this.points.forEach(function(c){W=D(f,c.options.dataLabels);if(n=l(W.connectorWidth,1)){var e;z=c.connector;if((b=c.dataLabel)&&b._pos&&c.visible&&0<c.labelDistance){N=b._attr.visibility;if(e=!z)c.connector=z=a.renderer.path().addClass("highcharts-data-label-connector  highcharts-color-"+
-c.colorIndex+(c.className?" "+c.className:"")).add(d.dataLabelsGroup),a.styledMode||z.attr({"stroke-width":n,stroke:W.connectorColor||c.color||"#666666"});z[e?"attr":"animate"]({d:c.getConnectorPath()});z.attr("visibility",N)}else z&&(c.connector=z.destroy())}}))},L.pie.prototype.placeDataLabels=function(){this.points.forEach(function(d){var e=d.dataLabel,c;e&&d.visible&&((c=e._pos)?(e.sideOverflow&&(e._attr.width=Math.max(e.getBBox().width-e.sideOverflow,0),e.css({width:e._attr.width+"px",textOverflow:(this.options.dataLabels.style||
-{}).textOverflow||"ellipsis"}),e.shortened=!0),e.attr(e._attr),e[e.moved?"animate":"attr"](c),e.moved=!0):e&&e.attr({y:-9999}));delete d.distributeBox},this)},L.pie.prototype.alignDataLabel=f,L.pie.prototype.verifyDataLabelOverflow=function(d){var e=this.center,c=this.options,a=c.center,f=c.minSize||80,h=null!==c.size;if(!h){if(null!==a[0])var l=Math.max(e[2]-Math.max(d[1],d[3]),f);else l=Math.max(e[2]-d[1]-d[3],f),e[0]+=(d[3]-d[1])/2;null!==a[1]?l=C(l,f,e[2]-Math.max(d[0],d[2])):(l=C(l,f,e[2]-d[0]-
-d[2]),e[1]+=(d[0]-d[2])/2);l<e[2]?(e[2]=l,e[3]=Math.min(J(c.innerSize||0,l),l),this.translate(e),this.drawDataLabels&&this.drawDataLabels()):h=!0}return h});L.column&&(L.column.prototype.alignDataLabel=function(d,e,c,a,f){var g=this.chart.inverted,h=d.series,n=d.dlBox||d.shapeArgs,q=l(d.below,d.plotY>l(this.translatedThreshold,h.yAxis.len)),r=l(c.inside,!!this.options.stacking);n&&(a=D(n),0>a.y&&(a.height+=a.y,a.y=0),n=a.y+a.height-h.yAxis.len,0<n&&n<a.height&&(a.height-=n),g&&(a={x:h.yAxis.len-a.y-
-a.height,y:h.xAxis.len-a.x-a.width,width:a.height,height:a.width}),r||(g?(a.x+=q?0:a.width,a.width=0):(a.y+=q?a.height:0,a.height=0)));c.align=l(c.align,!g||r?"center":q?"right":"left");c.verticalAlign=l(c.verticalAlign,g||r?"middle":q?"top":"bottom");m.prototype.alignDataLabel.call(this,d,e,c,a,f);c.inside&&d.contrastColor&&e.css({color:d.contrastColor})})});N(m,"Extensions/OverlappingDataLabels.js",[m["Core/Chart/Chart.js"],m["Core/Utilities.js"]],function(f,h){var m=h.addEvent,z=h.fireEvent,F=
-h.isArray,L=h.isNumber,K=h.objectEach,C=h.pick;m(f,"render",function(){var f=[];(this.labelCollectors||[]).forEach(function(e){f=f.concat(e())});(this.yAxis||[]).forEach(function(e){e.stacking&&e.options.stackLabels&&!e.options.stackLabels.allowOverlap&&K(e.stacking.stacks,function(e){K(e,function(e){f.push(e.label)})})});(this.series||[]).forEach(function(e){var h=e.options.dataLabels;e.visible&&(!1!==h.enabled||e._hasPointLabels)&&(e.nodes||e.points).forEach(function(e){e.visible&&(F(e.dataLabels)?
-e.dataLabels:e.dataLabel?[e.dataLabel]:[]).forEach(function(h){var m=h.options;h.labelrank=C(m.labelrank,e.labelrank,e.shapeArgs&&e.shapeArgs.height);m.allowOverlap||f.push(h)})})});this.hideOverlappingLabels(f)});f.prototype.hideOverlappingLabels=function(f){var e=this,h=f.length,m=e.renderer,x,y,n,l=!1;var C=function(d){var e,c=d.box?0:d.padding||0,a=e=0,f;if(d&&(!d.alignAttr||d.placed)){var h=d.alignAttr||{x:d.attr("x"),y:d.attr("y")};var l=d.parentGroup;d.width||(e=d.getBBox(),d.width=e.width,
-d.height=e.height,e=m.fontMetrics(null,d.element).h);var n=d.width-2*c;(f={left:"0",center:"0.5",right:"1"}[d.alignValue])?a=+f*n:L(d.x)&&Math.round(d.x)!==d.translateX&&(a=d.x-d.translateX);return{x:h.x+(l.translateX||0)+c-(a||0),y:h.y+(l.translateY||0)+c-e,width:d.width-2*c,height:d.height-2*c}}};for(y=0;y<h;y++)if(x=f[y])x.oldOpacity=x.opacity,x.newOpacity=1,x.absoluteBox=C(x);f.sort(function(d,e){return(e.labelrank||0)-(d.labelrank||0)});for(y=0;y<h;y++){var w=(C=f[y])&&C.absoluteBox;for(x=y+
-1;x<h;++x){var r=(n=f[x])&&n.absoluteBox;!w||!r||C===n||0===C.newOpacity||0===n.newOpacity||r.x>=w.x+w.width||r.x+r.width<=w.x||r.y>=w.y+w.height||r.y+r.height<=w.y||((C.labelrank<n.labelrank?C:n).newOpacity=0)}}f.forEach(function(d){if(d){var f=d.newOpacity;d.oldOpacity!==f&&(d.alignAttr&&d.placed?(d[f?"removeClass":"addClass"]("highcharts-data-label-hidden"),l=!0,d.alignAttr.opacity=f,d[d.isOld?"animate":"attr"](d.alignAttr,null,function(){e.styledMode||d.css({pointerEvents:f?"auto":"none"});d.visibility=
-f?"inherit":"hidden"}),z(e,"afterHideOverlappingLabel")):d.attr({opacity:f}));d.isOld=!0}});l&&z(e,"afterHideAllOverlappingLabels")}});N(m,"Core/Interaction.js",[m["Core/Series/Series.js"],m["Core/Chart/Chart.js"],m["Core/Globals.js"],m["Core/Legend.js"],m["Series/LineSeries.js"],m["Core/Options.js"],m["Core/Series/Point.js"],m["Core/Utilities.js"]],function(f,h,m,z,F,L,K,C){f=f.seriesTypes;var y=m.hasTouch,e=m.svg,I=L.defaultOptions,v=C.addEvent,x=C.createElement,D=C.css,n=C.defined,l=C.extend,J=
-C.fireEvent,w=C.isArray,r=C.isFunction,d=C.isNumber,g=C.isObject,c=C.merge,a=C.objectEach,q=C.pick;"";m=m.TrackerMixin={drawTrackerPoint:function(){var a=this,c=a.chart,d=c.pointer,e=function(a){var c=d.getPointFromEvent(a);"undefined"!==typeof c&&(d.isDirectTouch=!0,c.onMouseOver(a))},f;a.points.forEach(function(a){f=w(a.dataLabels)?a.dataLabels:a.dataLabel?[a.dataLabel]:[];a.graphic&&(a.graphic.element.point=a);f.forEach(function(c){c.div?c.div.point=a:c.element.point=a})});a._hasTracking||(a.trackerGroups.forEach(function(f){if(a[f]){a[f].addClass("highcharts-tracker").on("mouseover",
-e).on("mouseout",function(a){d.onTrackerMouseOut(a)});if(y)a[f].on("touchstart",e);!c.styledMode&&a.options.cursor&&a[f].css(D).css({cursor:a.options.cursor})}}),a._hasTracking=!0);J(this,"afterDrawTracker")},drawTrackerGraph:function(){var a=this,c=a.options,d=c.trackByArea,f=[].concat(d?a.areaPath:a.graphPath),g=a.chart,h=g.pointer,l=g.renderer,n=g.options.tooltip.snap,m=a.tracker,q=function(b){if(g.hoverSeries!==a)a.onMouseOver()},b="rgba(192,192,192,"+(e?.0001:.002)+")";m?m.attr({d:f}):a.graph&&
-(a.tracker=l.path(f).attr({visibility:a.visible?"visible":"hidden",zIndex:2}).addClass(d?"highcharts-tracker-area":"highcharts-tracker-line").add(a.group),g.styledMode||a.tracker.attr({"stroke-linecap":"round","stroke-linejoin":"round",stroke:b,fill:d?b:"none","stroke-width":a.graph.strokeWidth()+(d?0:2*n)}),[a.tracker,a.markerGroup].forEach(function(a){a.addClass("highcharts-tracker").on("mouseover",q).on("mouseout",function(a){h.onTrackerMouseOut(a)});c.cursor&&!g.styledMode&&a.css({cursor:c.cursor});
-if(y)a.on("touchstart",q)}));J(this,"afterDrawTracker")}};f.column&&(f.column.prototype.drawTracker=m.drawTrackerPoint);f.pie&&(f.pie.prototype.drawTracker=m.drawTrackerPoint);f.scatter&&(f.scatter.prototype.drawTracker=m.drawTrackerPoint);l(z.prototype,{setItemEvents:function(a,d,e){var f=this,g=f.chart.renderer.boxWrapper,h=a instanceof K,p="highcharts-legend-"+(h?"point":"series")+"-active",l=f.chart.styledMode;(e?[d,a.legendSymbol]:[a.legendGroup]).forEach(function(e){if(e)e.on("mouseover",function(){a.visible&&
-f.allItems.forEach(function(c){a!==c&&c.setState("inactive",!h)});a.setState("hover");a.visible&&g.addClass(p);l||d.css(f.options.itemHoverStyle)}).on("mouseout",function(){f.chart.styledMode||d.css(c(a.visible?f.itemStyle:f.itemHiddenStyle));f.allItems.forEach(function(c){a!==c&&c.setState("",!h)});g.removeClass(p);a.setState()}).on("click",function(c){var b=function(){a.setVisible&&a.setVisible();f.allItems.forEach(function(b){a!==b&&b.setState(a.visible?"inactive":"",!h)})};g.removeClass(p);c=
-{browserEvent:c};a.firePointEvent?a.firePointEvent("legendItemClick",c,b):J(a,"legendItemClick",c,b)})})},createCheckboxForItem:function(a){a.checkbox=x("input",{type:"checkbox",className:"highcharts-legend-checkbox",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);v(a.checkbox,"click",function(c){J(a.series||a,"checkboxClick",{checked:c.target.checked,item:a},function(){a.select()})})}});l(h.prototype,{showResetZoom:function(){function a(){c.zoomOut()}
-var c=this,d=I.lang,e=c.options.chart.resetZoomButton,f=e.theme,g=f.states,h="chart"===e.relativeTo||"spaceBox"===e.relativeTo?null:"plotBox";J(this,"beforeShowResetZoom",null,function(){c.resetZoomButton=c.renderer.button(d.resetZoom,null,null,a,f,g&&g.hover).attr({align:e.position.align,title:d.resetZoomTitle}).addClass("highcharts-reset-zoom").add().align(e.position,!1,h)});J(this,"afterShowResetZoom")},zoomOut:function(){J(this,"selection",{resetSelection:!0},this.zoom)},zoom:function(a){var c=
-this,d,e=c.pointer,f=!1,h=c.inverted?e.mouseDownX:e.mouseDownY;!a||a.resetSelection?(c.axes.forEach(function(a){d=a.zoom()}),e.initiated=!1):a.xAxis.concat(a.yAxis).forEach(function(a){var g=a.axis,p=c.inverted?g.left:g.top,b=c.inverted?p+g.width:p+g.height,k=g.isXAxis,l=!1;if(!k&&h>=p&&h<=b||k||!n(h))l=!0;e[k?"zoomX":"zoomY"]&&l&&(d=g.zoom(a.min,a.max),g.displayBtn&&(f=!0))});var p=c.resetZoomButton;f&&!p?c.showResetZoom():!f&&g(p)&&(c.resetZoomButton=p.destroy());d&&c.redraw(q(c.options.chart.animation,
-a&&a.animation,100>c.pointCount))},pan:function(a,c){var e=this,f=e.hoverPoints,g=e.options.chart,h=e.options.mapNavigation&&e.options.mapNavigation.enabled,p;c="object"===typeof c?c:{enabled:c,type:"x"};g&&g.panning&&(g.panning=c);var l=c.type;J(this,"pan",{originalEvent:a},function(){f&&f.forEach(function(a){a.setState()});var c=[1];"xy"===l?c=[1,0]:"y"===l&&(c=[0]);c.forEach(function(c){var b=e[c?"xAxis":"yAxis"][0],f=b.horiz,g=a[f?"chartX":"chartY"];f=f?"mouseDownX":"mouseDownY";var n=e[f],m=
-(b.pointRange||0)/2,r=b.reversed&&!e.inverted||!b.reversed&&e.inverted?-1:1,u=b.getExtremes(),v=b.toValue(n-g,!0)+m*r;r=b.toValue(n+b.len-g,!0)-m*r;var w=r<v;n=w?r:v;v=w?v:r;var A=b.hasVerticalPanning(),x=b.panningState;b.series.forEach(function(a){if(A&&!c&&(!x||x.isDirty)){var b=a.getProcessedData(!0);a=a.getExtremes(b.yData,!0);x||(x={startMin:Number.MAX_VALUE,startMax:-Number.MAX_VALUE});d(a.dataMin)&&d(a.dataMax)&&(x.startMin=Math.min(a.dataMin,x.startMin),x.startMax=Math.max(a.dataMax,x.startMax))}});
-r=Math.min(q(null===x||void 0===x?void 0:x.startMin,u.dataMin),m?u.min:b.toValue(b.toPixels(u.min)-b.minPixelPadding));m=Math.max(q(null===x||void 0===x?void 0:x.startMax,u.dataMax),m?u.max:b.toValue(b.toPixels(u.max)+b.minPixelPadding));b.panningState=x;b.isOrdinal||(w=r-n,0<w&&(v+=w,n=r),w=v-m,0<w&&(v=m,n-=w),b.series.length&&n!==u.min&&v!==u.max&&n>=r&&v<=m&&(b.setExtremes(n,v,!1,!1,{trigger:"pan"}),e.resetZoomButton||h||n===r||v===m||!l.match("y")||(e.showResetZoom(),b.displayBtn=!1),p=!0),e[f]=
-g)});p&&e.redraw(!1);D(e.container,{cursor:"move"})})}});l(K.prototype,{select:function(a,c){var d=this,e=d.series,f=e.chart;this.selectedStaging=a=q(a,!d.selected);d.firePointEvent(a?"select":"unselect",{accumulate:c},function(){d.selected=d.options.selected=a;e.options.data[e.data.indexOf(d)]=d.options;d.setState(a&&"select");c||f.getSelectedPoints().forEach(function(a){var c=a.series;a.selected&&a!==d&&(a.selected=a.options.selected=!1,c.options.data[c.data.indexOf(a)]=a.options,a.setState(f.hoverPoints&&
-c.options.inactiveOtherPoints?"inactive":""),a.firePointEvent("unselect"))})});delete this.selectedStaging},onMouseOver:function(a){var c=this.series.chart,d=c.pointer;a=a?d.normalize(a):d.getChartCoordinatesFromPoint(this,c.inverted);d.runPointActions(a,this)},onMouseOut:function(){var a=this.series.chart;this.firePointEvent("mouseOut");this.series.options.inactiveOtherPoints||(a.hoverPoints||[]).forEach(function(a){a.setState()});a.hoverPoints=a.hoverPoint=null},importEvents:function(){if(!this.hasImportedEvents){var d=
-this,e=c(d.series.options.point,d.options).events;d.events=e;a(e,function(a,c){r(a)&&v(d,c,a)});this.hasImportedEvents=!0}},setState:function(a,c){var d=this.series,e=this.state,f=d.options.states[a||"normal"]||{},g=I.plotOptions[d.type].marker&&d.options.marker,h=g&&!1===g.enabled,p=g&&g.states&&g.states[a||"normal"]||{},n=!1===p.enabled,m=d.stateMarkerGraphic,b=this.marker||{},k=d.chart,r=d.halo,v,w=g&&d.markerAttribs;a=a||"";if(!(a===this.state&&!c||this.selected&&"select"!==a||!1===f.enabled||
-a&&(n||h&&!1===p.enabled)||a&&b.states&&b.states[a]&&!1===b.states[a].enabled)){this.state=a;w&&(v=d.markerAttribs(this,a));if(this.graphic){e&&this.graphic.removeClass("highcharts-point-"+e);a&&this.graphic.addClass("highcharts-point-"+a);if(!k.styledMode){var x=d.pointAttribs(this,a);var y=q(k.options.chart.animation,f.animation);d.options.inactiveOtherPoints&&x.opacity&&((this.dataLabels||[]).forEach(function(a){a&&a.animate({opacity:x.opacity},y)}),this.connector&&this.connector.animate({opacity:x.opacity},
-y));this.graphic.animate(x,y)}v&&this.graphic.animate(v,q(k.options.chart.animation,p.animation,g.animation));m&&m.hide()}else{if(a&&p){e=b.symbol||d.symbol;m&&m.currentSymbol!==e&&(m=m.destroy());if(v)if(m)m[c?"animate":"attr"]({x:v.x,y:v.y});else e&&(d.stateMarkerGraphic=m=k.renderer.symbol(e,v.x,v.y,v.width,v.height).add(d.markerGroup),m.currentSymbol=e);!k.styledMode&&m&&m.attr(d.pointAttribs(this,a))}m&&(m[a&&this.isInside?"show":"hide"](),m.element.point=this)}a=f.halo;f=(m=this.graphic||m)&&
-m.visibility||"inherit";a&&a.size&&m&&"hidden"!==f&&!this.isCluster?(r||(d.halo=r=k.renderer.path().add(m.parentGroup)),r.show()[c?"animate":"attr"]({d:this.haloPath(a.size)}),r.attr({"class":"highcharts-halo highcharts-color-"+q(this.colorIndex,d.colorIndex)+(this.className?" "+this.className:""),visibility:f,zIndex:-1}),r.point=this,k.styledMode||r.attr(l({fill:this.color||d.color,"fill-opacity":a.opacity},a.attributes))):r&&r.point&&r.point.haloPath&&r.animate({d:r.point.haloPath(0)},null,r.hide);
-J(this,"afterSetState")}},haloPath:function(a){return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX)-a,this.plotY-a,2*a,2*a)}});l(F.prototype,{onMouseOver:function(){var a=this.chart,c=a.hoverSeries;a.pointer.setHoverChartIndex();if(c&&c!==this)c.onMouseOut();this.options.events.mouseOver&&J(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,c=this.chart,d=c.tooltip,e=c.hoverPoint;c.hoverSeries=null;if(e)e.onMouseOut();this&&a.events.mouseOut&&
-J(this,"mouseOut");!d||this.stickyTracking||d.shared&&!this.noSharedTooltip||d.hide();c.series.forEach(function(a){a.setState("",!0)})},setState:function(a,c){var d=this,e=d.options,f=d.graph,g=e.inactiveOtherPoints,h=e.states,l=e.lineWidth,m=e.opacity,n=q(h[a||"normal"]&&h[a||"normal"].animation,d.chart.options.chart.animation);e=0;a=a||"";if(d.state!==a&&([d.group,d.markerGroup,d.dataLabelsGroup].forEach(function(b){b&&(d.state&&b.removeClass("highcharts-series-"+d.state),a&&b.addClass("highcharts-series-"+
-a))}),d.state=a,!d.chart.styledMode)){if(h[a]&&!1===h[a].enabled)return;a&&(l=h[a].lineWidth||l+(h[a].lineWidthPlus||0),m=q(h[a].opacity,m));if(f&&!f.dashstyle)for(h={"stroke-width":l},f.animate(h,n);d["zone-graph-"+e];)d["zone-graph-"+e].attr(h),e+=1;g||[d.group,d.markerGroup,d.dataLabelsGroup,d.labelBySeries].forEach(function(a){a&&a.animate({opacity:m},n)})}c&&g&&d.points&&d.setAllPointsToState(a)},setAllPointsToState:function(a){this.points.forEach(function(c){c.setState&&c.setState(a)})},setVisible:function(a,
-c){var d=this,e=d.chart,f=d.legendItem,g=e.options.chart.ignoreHiddenSeries,h=d.visible;var l=(d.visible=a=d.options.visible=d.userOptions.visible="undefined"===typeof a?!h:a)?"show":"hide";["group","dataLabelsGroup","markerGroup","tracker","tt"].forEach(function(a){if(d[a])d[a][l]()});if(e.hoverSeries===d||(e.hoverPoint&&e.hoverPoint.series)===d)d.onMouseOut();f&&e.legend.colorizeItem(d,a);d.isDirty=!0;d.options.stacking&&e.series.forEach(function(a){a.options.stacking&&a.visible&&(a.isDirty=!0)});
-d.linkedSeries.forEach(function(c){c.setVisible(a,!1)});g&&(e.isDirtyBox=!0);J(d,l);!1!==c&&e.redraw()},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=this.options.selected="undefined"===typeof a?!this.selected:a;this.checkbox&&(this.checkbox.checked=a);J(this,a?"select":"unselect")},drawTracker:m.drawTrackerGraph})});N(m,"Core/Responsive.js",[m["Core/Chart/Chart.js"],m["Core/Utilities.js"]],function(f,h){var m=h.find,z=h.isArray,F=h.isObject,
-L=h.merge,K=h.objectEach,C=h.pick,y=h.splat,e=h.uniqueKey;f.prototype.setResponsive=function(f,h){var v=this.options.responsive,y=[],n=this.currentResponsive;!h&&v&&v.rules&&v.rules.forEach(function(f){"undefined"===typeof f._id&&(f._id=e());this.matchResponsiveRule(f,y)},this);h=L.apply(0,y.map(function(e){return m(v.rules,function(f){return f._id===e}).chartOptions}));h.isResponsiveOptions=!0;y=y.toString()||void 0;y!==(n&&n.ruleIds)&&(n&&this.update(n.undoOptions,f,!0),y?(n=this.currentOptions(h),
-n.isResponsiveOptions=!0,this.currentResponsive={ruleIds:y,mergedOptions:h,undoOptions:n},this.update(h,f,!0)):this.currentResponsive=void 0)};f.prototype.matchResponsiveRule=function(e,f){var h=e.condition;(h.callback||function(){return this.chartWidth<=C(h.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=C(h.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=C(h.minWidth,0)&&this.chartHeight>=C(h.minHeight,0)}).call(this)&&f.push(e._id)};f.prototype.currentOptions=function(e){function f(e,l,m,v){var n;
-K(e,function(d,e){if(!v&&-1<h.collectionsWithUpdate.indexOf(e))for(d=y(d),m[e]=[],n=0;n<Math.max(d.length,l[e].length);n++)l[e][n]&&(void 0===d[n]?m[e][n]=l[e][n]:(m[e][n]={},f(d[n],l[e][n],m[e][n],v+1)));else F(d)?(m[e]=z(d)?[]:{},f(d,l[e]||{},m[e],v+1)):m[e]="undefined"===typeof l[e]?null:l[e]})}var h=this,m={};f(e,this.options,m,0);return m}});N(m,"masters/highcharts.src.js",[m["Core/Globals.js"]],function(f){return f});m["masters/highcharts.src.js"]._modules=m;return m["masters/highcharts.src.js"]});
-//# sourceMappingURL=highcharts.js.map
\ No newline at end of file
+(function (X, N) {
+  "object" === typeof module && module.exports
+    ? ((N["default"] = N), (module.exports = X.document ? N(X) : N))
+    : "function" === typeof define && define.amd
+    ? define("highcharts/highcharts", function () {
+        return N(X);
+      })
+    : (X.Highcharts && X.Highcharts.error(16, !0), (X.Highcharts = N(X)));
+})("undefined" !== typeof window ? window : this, function (X) {
+  function N(f, h, m, z) {
+    f.hasOwnProperty(h) || (f[h] = z.apply(null, m));
+  }
+  var m = {};
+  N(m, "Core/Globals.js", [], function () {
+    var f =
+        "undefined" !== typeof X
+          ? X
+          : "undefined" !== typeof window
+          ? window
+          : {},
+      h = f.document,
+      m = (f.navigator && f.navigator.userAgent) || "",
+      z =
+        h &&
+        h.createElementNS &&
+        !!h.createElementNS("http://www.w3.org/2000/svg", "svg").createSVGRect,
+      F = /(edge|msie|trident)/i.test(m) && !f.opera,
+      L = -1 !== m.indexOf("Firefox"),
+      K = -1 !== m.indexOf("Chrome"),
+      C = L && 4 > parseInt(m.split("Firefox/")[1], 10);
+    return {
+      product: "Highcharts",
+      version: "8.2.2",
+      deg2rad: (2 * Math.PI) / 360,
+      doc: h,
+      hasBidiBug: C,
+      hasTouch: !!f.TouchEvent,
+      isMS: F,
+      isWebKit: -1 !== m.indexOf("AppleWebKit"),
+      isFirefox: L,
+      isChrome: K,
+      isSafari: !K && -1 !== m.indexOf("Safari"),
+      isTouchDevice: /(Mobile|Android|Windows Phone)/.test(m),
+      SVG_NS: "http://www.w3.org/2000/svg",
+      chartCount: 0,
+      seriesTypes: {},
+      symbolSizes: {},
+      svg: z,
+      win: f,
+      marginNames: ["plotTop", "marginRight", "marginBottom", "plotLeft"],
+      noop: function () {},
+      charts: [],
+      dateFormats: {},
+    };
+  });
+  N(m, "Core/Utilities.js", [m["Core/Globals.js"]], function (f) {
+    function h(b, k, t, a) {
+      var u = k ? "Highcharts error" : "Highcharts warning";
+      32 === b && (b = u + ": Deprecated member");
+      var c = l(b),
+        H = c
+          ? u + " #" + b + ": www.highcharts.com/errors/" + b + "/"
+          : b.toString();
+      u = function () {
+        if (k) throw Error(H);
+        e.console && -1 === h.messages.indexOf(H) && console.log(H);
+      };
+      if ("undefined" !== typeof a) {
+        var d = "";
+        c && (H += "?");
+        S(a, function (b, k) {
+          d += "\n - " + k + ": " + b;
+          c && (H += encodeURI(k) + "=" + encodeURI(b));
+        });
+        H += d;
+      }
+      t ? ca(t, "displayError", { code: b, message: H, params: a }, u) : u();
+      h.messages.push(H);
+    }
+    function m() {
+      var b,
+        k = arguments,
+        t = {},
+        a = function (b, k) {
+          "object" !== typeof b && (b = {});
+          S(k, function (t, u) {
+            !z(t, !0) || n(t) || D(t)
+              ? (b[u] = k[u])
+              : (b[u] = a(b[u] || {}, t));
+          });
+          return b;
+        };
+      !0 === k[0] && ((t = k[1]), (k = Array.prototype.slice.call(k, 2)));
+      var u = k.length;
+      for (b = 0; b < u; b++) t = a(t, k[b]);
+      return t;
+    }
+    function z(b, k) {
+      return !!b && "object" === typeof b && (!k || !x(b));
+    }
+    function F(b, k, t) {
+      var a;
+      v(k)
+        ? w(t)
+          ? b.setAttribute(k, t)
+          : b &&
+            b.getAttribute &&
+            ((a = b.getAttribute(k)) ||
+              "class" !== k ||
+              (a = b.getAttribute(k + "Name")))
+        : S(k, function (k, t) {
+            b.setAttribute(t, k);
+          });
+      return a;
+    }
+    function L() {
+      for (var b = arguments, k = b.length, t = 0; t < k; t++) {
+        var a = b[t];
+        if ("undefined" !== typeof a && null !== a) return a;
+      }
+    }
+    function K(b, k) {
+      if (!b) return k;
+      var t = b.split(".").reverse();
+      if (1 === t.length) return k[b];
+      for (
+        b = t.pop();
+        "undefined" !== typeof b && "undefined" !== typeof k && null !== k;
+
+      )
+        (k = k[b]), (b = t.pop());
+      return k;
+    }
+    f.timers = [];
+    var C = f.charts,
+      y = f.doc,
+      e = f.win;
+    (h || (h = {})).messages = [];
+    f.error = h;
+    f.merge = m;
+    var I = (f.pInt = function (b, k) {
+        return parseInt(b, k || 10);
+      }),
+      v = (f.isString = function (b) {
+        return "string" === typeof b;
+      }),
+      x = (f.isArray = function (b) {
+        b = Object.prototype.toString.call(b);
+        return "[object Array]" === b || "[object Array Iterator]" === b;
+      });
+    f.isObject = z;
+    var D = (f.isDOMElement = function (b) {
+        return z(b) && "number" === typeof b.nodeType;
+      }),
+      n = (f.isClass = function (b) {
+        var k = b && b.constructor;
+        return !(!z(b, !0) || D(b) || !k || !k.name || "Object" === k.name);
+      }),
+      l = (f.isNumber = function (b) {
+        return (
+          "number" === typeof b && !isNaN(b) && Infinity > b && -Infinity < b
+        );
+      }),
+      J = (f.erase = function (b, k) {
+        for (var t = b.length; t--; )
+          if (b[t] === k) {
+            b.splice(t, 1);
+            break;
+          }
+      }),
+      w = (f.defined = function (b) {
+        return "undefined" !== typeof b && null !== b;
+      });
+    f.attr = F;
+    var r = (f.splat = function (b) {
+        return x(b) ? b : [b];
+      }),
+      d = (f.syncTimeout = function (b, k, t) {
+        if (0 < k) return setTimeout(b, k, t);
+        b.call(0, t);
+        return -1;
+      }),
+      g = (f.clearTimeout = function (b) {
+        w(b) && clearTimeout(b);
+      }),
+      c = (f.extend = function (b, k) {
+        var t;
+        b || (b = {});
+        for (t in k) b[t] = k[t];
+        return b;
+      });
+    f.pick = L;
+    var a = (f.css = function (b, k) {
+        f.isMS &&
+          !f.svg &&
+          k &&
+          "undefined" !== typeof k.opacity &&
+          (k.filter = "alpha(opacity=" + 100 * k.opacity + ")");
+        c(b.style, k);
+      }),
+      q = (f.createElement = function (b, k, t, u, H) {
+        b = y.createElement(b);
+        k && c(b, k);
+        H && a(b, { padding: "0", border: "none", margin: "0" });
+        t && a(b, t);
+        u && u.appendChild(b);
+        return b;
+      }),
+      p = (f.extendClass = function (b, k) {
+        var t = function () {};
+        t.prototype = new b();
+        c(t.prototype, k);
+        return t;
+      }),
+      B = (f.pad = function (b, k, t) {
+        return (
+          Array((k || 2) + 1 - String(b).replace("-", "").length).join(
+            t || "0"
+          ) + b
+        );
+      }),
+      A = (f.relativeLength = function (b, k, t) {
+        return /%$/.test(b)
+          ? (k * parseFloat(b)) / 100 + (t || 0)
+          : parseFloat(b);
+      }),
+      G = (f.wrap = function (b, k, t) {
+        var a = b[k];
+        b[k] = function () {
+          var b = Array.prototype.slice.call(arguments),
+            k = arguments,
+            u = this;
+          u.proceed = function () {
+            a.apply(u, arguments.length ? arguments : k);
+          };
+          b.unshift(a);
+          b = t.apply(this, b);
+          u.proceed = null;
+          return b;
+        };
+      }),
+      M = (f.format = function (b, k, t) {
+        var a = "{",
+          u = !1,
+          H = [],
+          c = /f$/,
+          d = /\.([0-9])/,
+          g = f.defaultOptions.lang,
+          p = (t && t.time) || f.time;
+        for (t = (t && t.numberFormatter) || R; b; ) {
+          var q = b.indexOf(a);
+          if (-1 === q) break;
+          var U = b.slice(0, q);
+          if (u) {
+            U = U.split(":");
+            a = K(U.shift() || "", k);
+            if (U.length && "number" === typeof a)
+              if (((U = U.join(":")), c.test(U))) {
+                var r = parseInt((U.match(d) || ["", "-1"])[1], 10);
+                null !== a &&
+                  (a = t(
+                    a,
+                    r,
+                    g.decimalPoint,
+                    -1 < U.indexOf(",") ? g.thousandsSep : ""
+                  ));
+              } else a = p.dateFormat(U, a);
+            H.push(a);
+          } else H.push(U);
+          b = b.slice(q + 1);
+          a = (u = !u) ? "}" : "{";
+        }
+        H.push(b);
+        return H.join("");
+      }),
+      T = (f.getMagnitude = function (b) {
+        return Math.pow(10, Math.floor(Math.log(b) / Math.LN10));
+      }),
+      Q = (f.normalizeTickInterval = function (b, k, a, u, H) {
+        var c = b;
+        a = L(a, 1);
+        var d = b / a;
+        k ||
+          ((k = H
+            ? [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10]
+            : [1, 2, 2.5, 5, 10]),
+          !1 === u &&
+            (1 === a
+              ? (k = k.filter(function (b) {
+                  return 0 === b % 1;
+                }))
+              : 0.1 >= a && (k = [1 / a])));
+        for (
+          u = 0;
+          u < k.length &&
+          !((c = k[u]),
+          (H && c * a >= b) || (!H && d <= (k[u] + (k[u + 1] || k[u])) / 2));
+          u++
+        );
+        return (c = t(c * a, -Math.round(Math.log(0.001) / Math.LN10)));
+      }),
+      O = (f.stableSort = function (b, k) {
+        var t = b.length,
+          a,
+          u;
+        for (u = 0; u < t; u++) b[u].safeI = u;
+        b.sort(function (b, t) {
+          a = k(b, t);
+          return 0 === a ? b.safeI - t.safeI : a;
+        });
+        for (u = 0; u < t; u++) delete b[u].safeI;
+      }),
+      E = (f.arrayMin = function (b) {
+        for (var k = b.length, t = b[0]; k--; ) b[k] < t && (t = b[k]);
+        return t;
+      }),
+      u = (f.arrayMax = function (b) {
+        for (var k = b.length, t = b[0]; k--; ) b[k] > t && (t = b[k]);
+        return t;
+      }),
+      b = (f.destroyObjectProperties = function (b, k) {
+        S(b, function (t, a) {
+          t && t !== k && t.destroy && t.destroy();
+          delete b[a];
+        });
+      }),
+      k = (f.discardElement = function (b) {
+        var k = f.garbageBin;
+        k || (k = q("div"));
+        b && k.appendChild(b);
+        k.innerHTML = "";
+      }),
+      t = (f.correctFloat = function (b, k) {
+        return parseFloat(b.toPrecision(k || 14));
+      }),
+      H = (f.timeUnits = {
+        millisecond: 1,
+        second: 1e3,
+        minute: 6e4,
+        hour: 36e5,
+        day: 864e5,
+        week: 6048e5,
+        month: 24192e5,
+        year: 314496e5,
+      }),
+      R = (f.numberFormat = function (b, k, t, a) {
+        b = +b || 0;
+        k = +k;
+        var u = f.defaultOptions.lang,
+          H = (b.toString().split(".")[1] || "").split("e")[0].length,
+          c = b.toString().split("e");
+        if (-1 === k) k = Math.min(H, 20);
+        else if (!l(k)) k = 2;
+        else if (k && c[1] && 0 > c[1]) {
+          var d = k + +c[1];
+          0 <= d
+            ? ((c[0] = (+c[0]).toExponential(d).split("e")[0]), (k = d))
+            : ((c[0] = c[0].split(".")[0] || 0),
+              (b = 20 > k ? (c[0] * Math.pow(10, c[1])).toFixed(k) : 0),
+              (c[1] = 0));
+        }
+        var g = (
+          Math.abs(c[1] ? c[0] : b) + Math.pow(10, -Math.max(k, H) - 1)
+        ).toFixed(k);
+        H = String(I(g));
+        d = 3 < H.length ? H.length % 3 : 0;
+        t = L(t, u.decimalPoint);
+        a = L(a, u.thousandsSep);
+        b = (0 > b ? "-" : "") + (d ? H.substr(0, d) + a : "");
+        b += H.substr(d).replace(/(\d{3})(?=\d)/g, "$1" + a);
+        k && (b += t + g.slice(-k));
+        c[1] && 0 !== +b && (b += "e" + c[1]);
+        return b;
+      });
+    Math.easeInOutSine = function (b) {
+      return -0.5 * (Math.cos(Math.PI * b) - 1);
+    };
+    var U = (f.getStyle = function (b, k, t) {
+        if ("width" === k)
+          return (
+            (k = Math.min(b.offsetWidth, b.scrollWidth)),
+            (t = b.getBoundingClientRect && b.getBoundingClientRect().width),
+            t < k && t >= k - 1 && (k = Math.floor(t)),
+            Math.max(
+              0,
+              k - f.getStyle(b, "padding-left") - f.getStyle(b, "padding-right")
+            )
+          );
+        if ("height" === k)
+          return Math.max(
+            0,
+            Math.min(b.offsetHeight, b.scrollHeight) -
+              f.getStyle(b, "padding-top") -
+              f.getStyle(b, "padding-bottom")
+          );
+        e.getComputedStyle || h(27, !0);
+        if ((b = e.getComputedStyle(b, void 0)))
+          (b = b.getPropertyValue(k)), L(t, "opacity" !== k) && (b = I(b));
+        return b;
+      }),
+      Z = (f.inArray = function (b, k, t) {
+        h(32, !1, void 0, { "Highcharts.inArray": "use Array.indexOf" });
+        return k.indexOf(b, t);
+      }),
+      aa = (f.find = Array.prototype.find
+        ? function (b, k) {
+            return b.find(k);
+          }
+        : function (b, k) {
+            var t,
+              a = b.length;
+            for (t = 0; t < a; t++) if (k(b[t], t)) return b[t];
+          });
+    f.keys = function (b) {
+      h(32, !1, void 0, { "Highcharts.keys": "use Object.keys" });
+      return Object.keys(b);
+    };
+    var ba = (f.offset = function (b) {
+        var k = y.documentElement;
+        b =
+          b.parentElement || b.parentNode
+            ? b.getBoundingClientRect()
+            : { top: 0, left: 0 };
+        return {
+          top: b.top + (e.pageYOffset || k.scrollTop) - (k.clientTop || 0),
+          left: b.left + (e.pageXOffset || k.scrollLeft) - (k.clientLeft || 0),
+        };
+      }),
+      S = (f.objectEach = function (b, k, t) {
+        for (var a in b)
+          Object.hasOwnProperty.call(b, a) && k.call(t || b[a], b[a], a, b);
+      });
+    S(
+      {
+        map: "map",
+        each: "forEach",
+        grep: "filter",
+        reduce: "reduce",
+        some: "some",
+      },
+      function (b, k) {
+        f[k] = function (t) {
+          var a;
+          h(
+            32,
+            !1,
+            void 0,
+            ((a = {}), (a["Highcharts." + k] = "use Array." + b), a)
+          );
+          return Array.prototype[b].apply(t, [].slice.call(arguments, 1));
+        };
+      }
+    );
+    var Y = (f.addEvent = function (b, k, t, a) {
+        void 0 === a && (a = {});
+        var u = b.addEventListener || f.addEventListenerPolyfill;
+        var c =
+          "function" === typeof b && b.prototype
+            ? (b.prototype.protoEvents = b.prototype.protoEvents || {})
+            : (b.hcEvents = b.hcEvents || {});
+        f.Point &&
+          b instanceof f.Point &&
+          b.series &&
+          b.series.chart &&
+          (b.series.chart.runTrackerClick = !0);
+        u && u.call(b, k, t, !1);
+        c[k] || (c[k] = []);
+        c[k].push({
+          fn: t,
+          order: "number" === typeof a.order ? a.order : Infinity,
+        });
+        c[k].sort(function (b, k) {
+          return b.order - k.order;
+        });
+        return function () {
+          W(b, k, t);
+        };
+      }),
+      W = (f.removeEvent = function (b, k, t) {
+        function a(k, t) {
+          var a = b.removeEventListener || f.removeEventListenerPolyfill;
+          a && a.call(b, k, t, !1);
+        }
+        function u(t) {
+          var u;
+          if (b.nodeName) {
+            if (k) {
+              var c = {};
+              c[k] = !0;
+            } else c = t;
+            S(c, function (b, k) {
+              if (t[k]) for (u = t[k].length; u--; ) a(k, t[k][u].fn);
+            });
+          }
+        }
+        var c;
+        ["protoEvents", "hcEvents"].forEach(function (H, d) {
+          var g = (d = d ? b : b.prototype) && d[H];
+          g &&
+            (k
+              ? ((c = g[k] || []),
+                t
+                  ? ((g[k] = c.filter(function (b) {
+                      return t !== b.fn;
+                    })),
+                    a(k, t))
+                  : (u(g), (g[k] = [])))
+              : (u(g), (d[H] = {})));
+        });
+      }),
+      ca = (f.fireEvent = function (b, k, t, a) {
+        var u;
+        t = t || {};
+        if (y.createEvent && (b.dispatchEvent || b.fireEvent)) {
+          var H = y.createEvent("Events");
+          H.initEvent(k, !0, !0);
+          c(H, t);
+          b.dispatchEvent ? b.dispatchEvent(H) : b.fireEvent(k, H);
+        } else
+          t.target ||
+            c(t, {
+              preventDefault: function () {
+                t.defaultPrevented = !0;
+              },
+              target: b,
+              type: k,
+            }),
+            (function (k, a) {
+              void 0 === k && (k = []);
+              void 0 === a && (a = []);
+              var c = 0,
+                H = 0,
+                d = k.length + a.length;
+              for (u = 0; u < d; u++)
+                !1 ===
+                  (k[c]
+                    ? a[H]
+                      ? k[c].order <= a[H].order
+                        ? k[c++]
+                        : a[H++]
+                      : k[c++]
+                    : a[H++]
+                  ).fn.call(b, t) && t.preventDefault();
+            })(b.protoEvents && b.protoEvents[k], b.hcEvents && b.hcEvents[k]);
+        a && !t.defaultPrevented && a.call(b, t);
+      }),
+      V,
+      da = (f.uniqueKey = (function () {
+        var b = Math.random().toString(36).substring(2, 9) + "-",
+          k = 0;
+        return function () {
+          return "highcharts-" + (V ? "" : b) + k++;
+        };
+      })()),
+      ea = (f.useSerialIds = function (b) {
+        return (V = L(b, V));
+      }),
+      fa = (f.isFunction = function (b) {
+        return "function" === typeof b;
+      }),
+      ha = (f.getOptions = function () {
+        return f.defaultOptions;
+      }),
+      ia = (f.setOptions = function (b) {
+        f.defaultOptions = m(!0, f.defaultOptions, b);
+        (b.time || b.global) &&
+          f.time.update(
+            m(f.defaultOptions.global, f.defaultOptions.time, b.global, b.time)
+          );
+        return f.defaultOptions;
+      });
+    e.jQuery &&
+      (e.jQuery.fn.highcharts = function () {
+        var b = [].slice.call(arguments);
+        if (this[0])
+          return b[0]
+            ? (new f[v(b[0]) ? b.shift() : "Chart"](this[0], b[0], b[1]), this)
+            : C[F(this[0], "data-highcharts-chart")];
+      });
+    return {
+      addEvent: Y,
+      arrayMax: u,
+      arrayMin: E,
+      attr: F,
+      clamp: function (b, k, t) {
+        return b > k ? (b < t ? b : t) : k;
+      },
+      clearTimeout: g,
+      correctFloat: t,
+      createElement: q,
+      css: a,
+      defined: w,
+      destroyObjectProperties: b,
+      discardElement: k,
+      erase: J,
+      error: h,
+      extend: c,
+      extendClass: p,
+      find: aa,
+      fireEvent: ca,
+      format: M,
+      getMagnitude: T,
+      getNestedProperty: K,
+      getOptions: ha,
+      getStyle: U,
+      inArray: Z,
+      isArray: x,
+      isClass: n,
+      isDOMElement: D,
+      isFunction: fa,
+      isNumber: l,
+      isObject: z,
+      isString: v,
+      merge: m,
+      normalizeTickInterval: Q,
+      numberFormat: R,
+      objectEach: S,
+      offset: ba,
+      pad: B,
+      pick: L,
+      pInt: I,
+      relativeLength: A,
+      removeEvent: W,
+      setOptions: ia,
+      splat: r,
+      stableSort: O,
+      syncTimeout: d,
+      timeUnits: H,
+      uniqueKey: da,
+      useSerialIds: ea,
+      wrap: G,
+    };
+  });
+  N(
+    m,
+    "Core/Color/Color.js",
+    [m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.isNumber,
+        z = h.merge,
+        F = h.pInt;
+      ("");
+      h = (function () {
+        function h(K) {
+          this.parsers = [
+            {
+              regex:
+                /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,
+              parse: function (h) {
+                return [F(h[1]), F(h[2]), F(h[3]), parseFloat(h[4], 10)];
+              },
+            },
+            {
+              regex:
+                /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,
+              parse: function (h) {
+                return [F(h[1]), F(h[2]), F(h[3]), 1];
+              },
+            },
+          ];
+          this.rgba = [];
+          if (f.Color !== h) return new f.Color(K);
+          if (!(this instanceof h)) return new h(K);
+          this.init(K);
+        }
+        h.parse = function (f) {
+          return new h(f);
+        };
+        h.prototype.init = function (f) {
+          var C, y;
+          if (
+            (this.input = f =
+              h.names[f && f.toLowerCase ? f.toLowerCase() : ""] || f) &&
+            f.stops
+          )
+            this.stops = f.stops.map(function (v) {
+              return new h(v[1]);
+            });
+          else {
+            if (f && f.charAt && "#" === f.charAt()) {
+              var e = f.length;
+              f = parseInt(f.substr(1), 16);
+              7 === e
+                ? (C = [(f & 16711680) >> 16, (f & 65280) >> 8, f & 255, 1])
+                : 4 === e &&
+                  (C = [
+                    ((f & 3840) >> 4) | ((f & 3840) >> 8),
+                    ((f & 240) >> 4) | (f & 240),
+                    ((f & 15) << 4) | (f & 15),
+                    1,
+                  ]);
+            }
+            if (!C)
+              for (y = this.parsers.length; y-- && !C; ) {
+                var I = this.parsers[y];
+                (e = I.regex.exec(f)) && (C = I.parse(e));
+              }
+          }
+          this.rgba = C || [];
+        };
+        h.prototype.get = function (f) {
+          var h = this.input,
+            y = this.rgba;
+          if ("undefined" !== typeof this.stops) {
+            var e = z(h);
+            e.stops = [].concat(e.stops);
+            this.stops.forEach(function (I, v) {
+              e.stops[v] = [e.stops[v][0], I.get(f)];
+            });
+          } else
+            e =
+              y && m(y[0])
+                ? "rgb" === f || (!f && 1 === y[3])
+                  ? "rgb(" + y[0] + "," + y[1] + "," + y[2] + ")"
+                  : "a" === f
+                  ? y[3]
+                  : "rgba(" + y.join(",") + ")"
+                : h;
+          return e;
+        };
+        h.prototype.brighten = function (f) {
+          var h,
+            y = this.rgba;
+          if (this.stops)
+            this.stops.forEach(function (e) {
+              e.brighten(f);
+            });
+          else if (m(f) && 0 !== f)
+            for (h = 0; 3 > h; h++)
+              (y[h] += F(255 * f)),
+                0 > y[h] && (y[h] = 0),
+                255 < y[h] && (y[h] = 255);
+          return this;
+        };
+        h.prototype.setOpacity = function (f) {
+          this.rgba[3] = f;
+          return this;
+        };
+        h.prototype.tweenTo = function (f, h) {
+          var y = this.rgba,
+            e = f.rgba;
+          e.length && y && y.length
+            ? ((f = 1 !== e[3] || 1 !== y[3]),
+              (h =
+                (f ? "rgba(" : "rgb(") +
+                Math.round(e[0] + (y[0] - e[0]) * (1 - h)) +
+                "," +
+                Math.round(e[1] + (y[1] - e[1]) * (1 - h)) +
+                "," +
+                Math.round(e[2] + (y[2] - e[2]) * (1 - h)) +
+                (f ? "," + (e[3] + (y[3] - e[3]) * (1 - h)) : "") +
+                ")"))
+            : (h = f.input || "none");
+          return h;
+        };
+        h.names = { white: "#ffffff", black: "#000000" };
+        return h;
+      })();
+      f.Color = h;
+      f.color = h.parse;
+      return h;
+    }
+  );
+  N(
+    m,
+    "Core/Animation/Fx.js",
+    [m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = f.win,
+        z = h.isNumber,
+        F = h.objectEach;
+      h = (function () {
+        function h(f, h, y) {
+          this.pos = NaN;
+          this.options = h;
+          this.elem = f;
+          this.prop = y;
+        }
+        h.prototype.dSetter = function () {
+          var f = this.paths,
+            h = f && f[0];
+          f = f && f[1];
+          var y = [],
+            e = this.now || 0;
+          if (1 !== e && h && f)
+            if (h.length === f.length && 1 > e)
+              for (var I = 0; I < f.length; I++) {
+                for (var v = h[I], x = f[I], D = [], n = 0; n < x.length; n++) {
+                  var l = v[n],
+                    J = x[n];
+                  D[n] =
+                    "number" === typeof l &&
+                    "number" === typeof J &&
+                    ("A" !== x[0] || (4 !== n && 5 !== n))
+                      ? l + e * (J - l)
+                      : J;
+                }
+                y.push(D);
+              }
+            else y = f;
+          else y = this.toD || [];
+          this.elem.attr("d", y, void 0, !0);
+        };
+        h.prototype.update = function () {
+          var f = this.elem,
+            h = this.prop,
+            y = this.now,
+            e = this.options.step;
+          if (this[h + "Setter"]) this[h + "Setter"]();
+          else
+            f.attr
+              ? f.element && f.attr(h, y, null, !0)
+              : (f.style[h] = y + this.unit);
+          e && e.call(f, y, this);
+        };
+        h.prototype.run = function (h, C, y) {
+          var e = this,
+            I = e.options,
+            v = function (n) {
+              return v.stopped ? !1 : e.step(n);
+            },
+            x =
+              m.requestAnimationFrame ||
+              function (n) {
+                setTimeout(n, 13);
+              },
+            D = function () {
+              for (var n = 0; n < f.timers.length; n++)
+                f.timers[n]() || f.timers.splice(n--, 1);
+              f.timers.length && x(D);
+            };
+          h !== C || this.elem["forceAnimate:" + this.prop]
+            ? ((this.startTime = +new Date()),
+              (this.start = h),
+              (this.end = C),
+              (this.unit = y),
+              (this.now = this.start),
+              (this.pos = 0),
+              (v.elem = this.elem),
+              (v.prop = this.prop),
+              v() && 1 === f.timers.push(v) && x(D))
+            : (delete I.curAnim[this.prop],
+              I.complete &&
+                0 === Object.keys(I.curAnim).length &&
+                I.complete.call(this.elem));
+        };
+        h.prototype.step = function (f) {
+          var h = +new Date(),
+            y = this.options,
+            e = this.elem,
+            I = y.complete,
+            v = y.duration,
+            x = y.curAnim;
+          if (e.attr && !e.element) f = !1;
+          else if (f || h >= v + this.startTime) {
+            this.now = this.end;
+            this.pos = 1;
+            this.update();
+            var D = (x[this.prop] = !0);
+            F(x, function (n) {
+              !0 !== n && (D = !1);
+            });
+            D && I && I.call(e);
+            f = !1;
+          } else
+            (this.pos = y.easing((h - this.startTime) / v)),
+              (this.now = this.start + (this.end - this.start) * this.pos),
+              this.update(),
+              (f = !0);
+          return f;
+        };
+        h.prototype.initPath = function (f, h, y) {
+          function e(r, d) {
+            for (; r.length < w; ) {
+              var g = r[0],
+                c = d[w - r.length];
+              c &&
+                "M" === g[0] &&
+                (r[0] =
+                  "C" === c[0]
+                    ? ["C", g[1], g[2], g[1], g[2], g[1], g[2]]
+                    : ["L", g[1], g[2]]);
+              r.unshift(g);
+              D && r.push(r[r.length - 1]);
+            }
+          }
+          function I(r, d) {
+            for (; r.length < w; )
+              if (
+                ((d = r[r.length / n - 1].slice()),
+                "C" === d[0] && ((d[1] = d[5]), (d[2] = d[6])),
+                D)
+              ) {
+                var g = r[r.length / n].slice();
+                r.splice(r.length / 2, 0, d, g);
+              } else r.push(d);
+          }
+          var v = f.startX,
+            x = f.endX;
+          h = h && h.slice();
+          y = y.slice();
+          var D = f.isArea,
+            n = D ? 2 : 1;
+          if (!h) return [y, y];
+          if (v && x) {
+            for (f = 0; f < v.length; f++)
+              if (v[f] === x[0]) {
+                var l = f;
+                break;
+              } else if (v[0] === x[x.length - v.length + f]) {
+                l = f;
+                var J = !0;
+                break;
+              } else if (v[v.length - 1] === x[x.length - v.length + f]) {
+                l = v.length - f;
+                break;
+              }
+            "undefined" === typeof l && (h = []);
+          }
+          if (h.length && z(l)) {
+            var w = y.length + l * n;
+            J ? (e(h, y), I(y, h)) : (e(y, h), I(h, y));
+          }
+          return [h, y];
+        };
+        h.prototype.fillSetter = function () {
+          h.prototype.strokeSetter.apply(this, arguments);
+        };
+        h.prototype.strokeSetter = function () {
+          this.elem.attr(
+            this.prop,
+            f.color(this.start).tweenTo(f.color(this.end), this.pos),
+            null,
+            !0
+          );
+        };
+        return h;
+      })();
+      return (f.Fx = h);
+    }
+  );
+  N(
+    m,
+    "Core/Animation/AnimationUtilities.js",
+    [m["Core/Animation/Fx.js"], m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h, m) {
+      var z = m.defined,
+        P = m.getStyle,
+        L = m.isArray,
+        K = m.isNumber,
+        C = m.isObject,
+        y = m.merge,
+        e = m.objectEach,
+        I = m.pick;
+      m = h.setAnimation = function (l, n) {
+        n.renderer.globalAnimation = I(l, n.options.chart.animation, !0);
+      };
+      var v = (h.animObject = function (l) {
+          return C(l)
+            ? h.merge({ duration: 500, defer: 0 }, l)
+            : { duration: l ? 500 : 0, defer: 0 };
+        }),
+        x = (h.getDeferredAnimation = function (l, n, w) {
+          var r = v(n),
+            d = 0,
+            g = 0;
+          (w ? [w] : l.series).forEach(function (c) {
+            c = v(c.options.animation);
+            d = n && z(n.defer) ? r.defer : Math.max(d, c.duration + c.defer);
+            g = Math.min(r.duration, c.duration);
+          });
+          l.renderer.forExport && (d = 0);
+          return { defer: Math.max(0, d - g), duration: Math.min(d, g) };
+        }),
+        D = (h.animate = function (l, v, w) {
+          var r,
+            d = "",
+            g,
+            c;
+          if (!C(w)) {
+            var a = arguments;
+            w = { duration: a[2], easing: a[3], complete: a[4] };
+          }
+          K(w.duration) || (w.duration = 400);
+          w.easing =
+            "function" === typeof w.easing
+              ? w.easing
+              : Math[w.easing] || Math.easeInOutSine;
+          w.curAnim = y(v);
+          e(v, function (a, p) {
+            n(l, p);
+            c = new f(l, w, p);
+            g = null;
+            "d" === p && L(v.d)
+              ? ((c.paths = c.initPath(l, l.pathArray, v.d)),
+                (c.toD = v.d),
+                (r = 0),
+                (g = 1))
+              : l.attr
+              ? (r = l.attr(p))
+              : ((r = parseFloat(P(l, p)) || 0), "opacity" !== p && (d = "px"));
+            g || (g = a);
+            g && g.match && g.match("px") && (g = g.replace(/px/g, ""));
+            c.run(r, g, d);
+          });
+        }),
+        n = (h.stop = function (l, n) {
+          for (var w = h.timers.length; w--; )
+            h.timers[w].elem !== l ||
+              (n && n !== h.timers[w].prop) ||
+              (h.timers[w].stopped = !0);
+        });
+      return {
+        animate: D,
+        animObject: v,
+        getDeferredAnimation: x,
+        setAnimation: m,
+        stop: n,
+      };
+    }
+  );
+  N(
+    m,
+    "Core/Renderer/SVG/SVGElement.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Color/Color.js"],
+      m["Core/Globals.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z) {
+      var F = f.animate,
+        P = f.animObject,
+        K = f.stop,
+        C = m.deg2rad,
+        y = m.doc,
+        e = m.hasTouch,
+        I = m.isFirefox,
+        v = m.noop,
+        x = m.svg,
+        D = m.SVG_NS,
+        n = m.win,
+        l = z.attr,
+        J = z.createElement,
+        w = z.css,
+        r = z.defined,
+        d = z.erase,
+        g = z.extend,
+        c = z.fireEvent,
+        a = z.isArray,
+        q = z.isFunction,
+        p = z.isNumber,
+        B = z.isString,
+        A = z.merge,
+        G = z.objectEach,
+        M = z.pick,
+        T = z.pInt,
+        Q = z.syncTimeout,
+        O = z.uniqueKey;
+      ("");
+      f = (function () {
+        function E() {
+          this.height = this.element = void 0;
+          this.opacity = 1;
+          this.renderer = void 0;
+          this.SVG_NS = D;
+          this.symbolCustomAttribs =
+            "x y width height r start end innerR anchorX anchorY rounded".split(
+              " "
+            );
+          this.width = void 0;
+        }
+        E.prototype._defaultGetter = function (a) {
+          a = M(
+            this[a + "Value"],
+            this[a],
+            this.element ? this.element.getAttribute(a) : null,
+            0
+          );
+          /^[\-0-9\.]+$/.test(a) && (a = parseFloat(a));
+          return a;
+        };
+        E.prototype._defaultSetter = function (a, b, k) {
+          k.setAttribute(b, a);
+        };
+        E.prototype.add = function (a) {
+          var b = this.renderer,
+            k = this.element;
+          a && (this.parentGroup = a);
+          this.parentInverted = a && a.inverted;
+          "undefined" !== typeof this.textStr &&
+            "text" === this.element.nodeName &&
+            b.buildText(this);
+          this.added = !0;
+          if (!a || a.handleZ || this.zIndex) var t = this.zIndexSetter();
+          t || (a ? a.element : b.box).appendChild(k);
+          if (this.onAdd) this.onAdd();
+          return this;
+        };
+        E.prototype.addClass = function (a, b) {
+          var k = b ? "" : this.attr("class") || "";
+          a = (a || "")
+            .split(/ /g)
+            .reduce(
+              function (b, a) {
+                -1 === k.indexOf(a) && b.push(a);
+                return b;
+              },
+              k ? [k] : []
+            )
+            .join(" ");
+          a !== k && this.attr("class", a);
+          return this;
+        };
+        E.prototype.afterSetters = function () {
+          this.doTransform && (this.updateTransform(), (this.doTransform = !1));
+        };
+        E.prototype.align = function (a, b, k) {
+          var t,
+            c = {};
+          var u = this.renderer;
+          var g = u.alignedObjects;
+          var p, q;
+          if (a) {
+            if (
+              ((this.alignOptions = a), (this.alignByTranslate = b), !k || B(k))
+            )
+              (this.alignTo = t = k || "renderer"),
+                d(g, this),
+                g.push(this),
+                (k = void 0);
+          } else
+            (a = this.alignOptions),
+              (b = this.alignByTranslate),
+              (t = this.alignTo);
+          k = M(k, u[t], u);
+          t = a.align;
+          u = a.verticalAlign;
+          g = (k.x || 0) + (a.x || 0);
+          var r = (k.y || 0) + (a.y || 0);
+          "right" === t ? (p = 1) : "center" === t && (p = 2);
+          p && (g += (k.width - (a.width || 0)) / p);
+          c[b ? "translateX" : "x"] = Math.round(g);
+          "bottom" === u ? (q = 1) : "middle" === u && (q = 2);
+          q && (r += (k.height - (a.height || 0)) / q);
+          c[b ? "translateY" : "y"] = Math.round(r);
+          this[this.placed ? "animate" : "attr"](c);
+          this.placed = !0;
+          this.alignAttr = c;
+          return this;
+        };
+        E.prototype.alignSetter = function (a) {
+          var b = { left: "start", center: "middle", right: "end" };
+          b[a] &&
+            ((this.alignValue = a),
+            this.element.setAttribute("text-anchor", b[a]));
+        };
+        E.prototype.animate = function (a, b, k) {
+          var t = this,
+            c = P(M(b, this.renderer.globalAnimation, !0));
+          b = c.defer;
+          M(y.hidden, y.msHidden, y.webkitHidden, !1) && (c.duration = 0);
+          0 !== c.duration
+            ? (k && (c.complete = k),
+              Q(function () {
+                t.element && F(t, a, c);
+              }, b))
+            : (this.attr(a, void 0, k),
+              G(
+                a,
+                function (b, k) {
+                  c.step && c.step.call(this, b, { prop: k, pos: 1 });
+                },
+                this
+              ));
+          return this;
+        };
+        E.prototype.applyTextOutline = function (a) {
+          var b = this.element,
+            k;
+          -1 !== a.indexOf("contrast") &&
+            (a = a.replace(
+              /contrast/g,
+              this.renderer.getContrast(b.style.fill)
+            ));
+          a = a.split(" ");
+          var t = a[a.length - 1];
+          if ((k = a[0]) && "none" !== k && m.svg) {
+            this.fakeTS = !0;
+            a = [].slice.call(b.getElementsByTagName("tspan"));
+            this.ySetter = this.xSetter;
+            k = k.replace(/(^[\d\.]+)(.*?)$/g, function (b, k, t) {
+              return 2 * k + t;
+            });
+            this.removeTextOutline(a);
+            var c = b.textContent
+              ? /^[\u0591-\u065F\u066A-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/.test(
+                  b.textContent
+                )
+              : !1;
+            var u = b.firstChild;
+            a.forEach(function (a, H) {
+              0 === H &&
+                (a.setAttribute("x", b.getAttribute("x")),
+                (H = b.getAttribute("y")),
+                a.setAttribute("y", H || 0),
+                null === H && b.setAttribute("y", 0));
+              H = a.cloneNode(!0);
+              l(c && !I ? a : H, {
+                class: "highcharts-text-outline",
+                fill: t,
+                stroke: t,
+                "stroke-width": k,
+                "stroke-linejoin": "round",
+              });
+              b.insertBefore(H, u);
+            });
+            c &&
+              I &&
+              a[0] &&
+              ((a = a[0].cloneNode(!0)),
+              (a.textContent = " "),
+              b.insertBefore(a, u));
+          }
+        };
+        E.prototype.attr = function (a, b, k, t) {
+          var c = this.element,
+            u,
+            d = this,
+            g,
+            p,
+            q = this.symbolCustomAttribs;
+          if ("string" === typeof a && "undefined" !== typeof b) {
+            var r = a;
+            a = {};
+            a[r] = b;
+          }
+          "string" === typeof a
+            ? (d = (this[a + "Getter"] || this._defaultGetter).call(this, a, c))
+            : (G(
+                a,
+                function (b, k) {
+                  g = !1;
+                  t || K(this, k);
+                  this.symbolName &&
+                    -1 !== q.indexOf(k) &&
+                    (u || (this.symbolAttr(a), (u = !0)), (g = !0));
+                  !this.rotation ||
+                    ("x" !== k && "y" !== k) ||
+                    (this.doTransform = !0);
+                  g ||
+                    ((p = this[k + "Setter"] || this._defaultSetter),
+                    p.call(this, b, k, c),
+                    !this.styledMode &&
+                      this.shadows &&
+                      /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(
+                        k
+                      ) &&
+                      this.updateShadows(k, b, p));
+                },
+                this
+              ),
+              this.afterSetters());
+          k && k.call(this);
+          return d;
+        };
+        E.prototype.clip = function (a) {
+          return this.attr(
+            "clip-path",
+            a ? "url(" + this.renderer.url + "#" + a.id + ")" : "none"
+          );
+        };
+        E.prototype.crisp = function (a, b) {
+          b = b || a.strokeWidth || 0;
+          var k = (Math.round(b) % 2) / 2;
+          a.x = Math.floor(a.x || this.x || 0) + k;
+          a.y = Math.floor(a.y || this.y || 0) + k;
+          a.width = Math.floor((a.width || this.width || 0) - 2 * k);
+          a.height = Math.floor((a.height || this.height || 0) - 2 * k);
+          r(a.strokeWidth) && (a.strokeWidth = b);
+          return a;
+        };
+        E.prototype.complexColor = function (u, b, k) {
+          var t = this.renderer,
+            H,
+            d,
+            g,
+            p,
+            q,
+            B,
+            l,
+            n,
+            w,
+            E,
+            V = [],
+            v;
+          c(this.renderer, "complexColor", { args: arguments }, function () {
+            u.radialGradient
+              ? (d = "radialGradient")
+              : u.linearGradient && (d = "linearGradient");
+            if (d) {
+              g = u[d];
+              q = t.gradients;
+              B = u.stops;
+              w = k.radialReference;
+              a(g) &&
+                (u[d] = g =
+                  {
+                    x1: g[0],
+                    y1: g[1],
+                    x2: g[2],
+                    y2: g[3],
+                    gradientUnits: "userSpaceOnUse",
+                  });
+              "radialGradient" === d &&
+                w &&
+                !r(g.gradientUnits) &&
+                ((p = g),
+                (g = A(g, t.getRadialAttr(w, p), {
+                  gradientUnits: "userSpaceOnUse",
+                })));
+              G(g, function (b, k) {
+                "id" !== k && V.push(k, b);
+              });
+              G(B, function (b) {
+                V.push(b);
+              });
+              V = V.join(",");
+              if (q[V]) E = q[V].attr("id");
+              else {
+                g.id = E = O();
+                var c = (q[V] = t.createElement(d).attr(g).add(t.defs));
+                c.radAttr = p;
+                c.stops = [];
+                B.forEach(function (b) {
+                  0 === b[1].indexOf("rgba")
+                    ? ((H = h.parse(b[1])),
+                      (l = H.get("rgb")),
+                      (n = H.get("a")))
+                    : ((l = b[1]), (n = 1));
+                  b = t
+                    .createElement("stop")
+                    .attr({ offset: b[0], "stop-color": l, "stop-opacity": n })
+                    .add(c);
+                  c.stops.push(b);
+                });
+              }
+              v = "url(" + t.url + "#" + E + ")";
+              k.setAttribute(b, v);
+              k.gradient = V;
+              u.toString = function () {
+                return v;
+              };
+            }
+          });
+        };
+        E.prototype.css = function (a) {
+          var b = this.styles,
+            k = {},
+            t = this.element,
+            c = "",
+            d = !b,
+            u = ["textOutline", "textOverflow", "width"];
+          a && a.color && (a.fill = a.color);
+          b &&
+            G(a, function (a, t) {
+              b && b[t] !== a && ((k[t] = a), (d = !0));
+            });
+          if (d) {
+            b && (a = g(b, k));
+            if (a)
+              if (null === a.width || "auto" === a.width) delete this.textWidth;
+              else if ("text" === t.nodeName.toLowerCase() && a.width)
+                var p = (this.textWidth = T(a.width));
+            this.styles = a;
+            p && !x && this.renderer.forExport && delete a.width;
+            if (t.namespaceURI === this.SVG_NS) {
+              var q = function (b, k) {
+                return "-" + k.toLowerCase();
+              };
+              G(a, function (b, k) {
+                -1 === u.indexOf(k) &&
+                  (c += k.replace(/([A-Z])/g, q) + ":" + b + ";");
+              });
+              c && l(t, "style", c);
+            } else w(t, a);
+            this.added &&
+              ("text" === this.element.nodeName &&
+                this.renderer.buildText(this),
+              a && a.textOutline && this.applyTextOutline(a.textOutline));
+          }
+          return this;
+        };
+        E.prototype.dashstyleSetter = function (a) {
+          var b = this["stroke-width"];
+          "inherit" === b && (b = 1);
+          if ((a = a && a.toLowerCase())) {
+            var k = a
+              .replace("shortdashdotdot", "3,1,1,1,1,1,")
+              .replace("shortdashdot", "3,1,1,1")
+              .replace("shortdot", "1,1,")
+              .replace("shortdash", "3,1,")
+              .replace("longdash", "8,3,")
+              .replace(/dot/g, "1,3,")
+              .replace("dash", "4,3,")
+              .replace(/,$/, "")
+              .split(",");
+            for (a = k.length; a--; ) k[a] = "" + T(k[a]) * M(b, NaN);
+            a = k.join(",").replace(/NaN/g, "none");
+            this.element.setAttribute("stroke-dasharray", a);
+          }
+        };
+        E.prototype.destroy = function () {
+          var a = this,
+            b = a.element || {},
+            k = a.renderer,
+            t = (k.isSVG && "SPAN" === b.nodeName && a.parentGroup) || void 0,
+            c = b.ownerSVGElement;
+          b.onclick =
+            b.onmouseout =
+            b.onmouseover =
+            b.onmousemove =
+            b.point =
+              null;
+          K(a);
+          if (a.clipPath && c) {
+            var g = a.clipPath;
+            [].forEach.call(
+              c.querySelectorAll("[clip-path],[CLIP-PATH]"),
+              function (b) {
+                -1 < b.getAttribute("clip-path").indexOf(g.element.id) &&
+                  b.removeAttribute("clip-path");
+              }
+            );
+            a.clipPath = g.destroy();
+          }
+          if (a.stops) {
+            for (c = 0; c < a.stops.length; c++) a.stops[c].destroy();
+            a.stops.length = 0;
+            a.stops = void 0;
+          }
+          a.safeRemoveChild(b);
+          for (
+            k.styledMode || a.destroyShadows();
+            t && t.div && 0 === t.div.childNodes.length;
+
+          )
+            (b = t.parentGroup),
+              a.safeRemoveChild(t.div),
+              delete t.div,
+              (t = b);
+          a.alignTo && d(k.alignedObjects, a);
+          G(a, function (b, k) {
+            a[k] && a[k].parentGroup === a && a[k].destroy && a[k].destroy();
+            delete a[k];
+          });
+        };
+        E.prototype.destroyShadows = function () {
+          (this.shadows || []).forEach(function (a) {
+            this.safeRemoveChild(a);
+          }, this);
+          this.shadows = void 0;
+        };
+        E.prototype.destroyTextPath = function (a, b) {
+          var k = a.getElementsByTagName("text")[0];
+          if (k) {
+            if (
+              (k.removeAttribute("dx"),
+              k.removeAttribute("dy"),
+              b.element.setAttribute("id", ""),
+              this.textPathWrapper && k.getElementsByTagName("textPath").length)
+            ) {
+              for (a = this.textPathWrapper.element.childNodes; a.length; )
+                k.appendChild(a[0]);
+              k.removeChild(this.textPathWrapper.element);
+            }
+          } else if (a.getAttribute("dx") || a.getAttribute("dy"))
+            a.removeAttribute("dx"), a.removeAttribute("dy");
+          this.textPathWrapper &&
+            (this.textPathWrapper = this.textPathWrapper.destroy());
+        };
+        E.prototype.dSetter = function (c, b, k) {
+          a(c) &&
+            ("string" === typeof c[0] && (c = this.renderer.pathToSegments(c)),
+            (this.pathArray = c),
+            (c = c.reduce(function (b, k, a) {
+              return k && k.join
+                ? (a ? b + " " : "") + k.join(" ")
+                : (k || "").toString();
+            }, "")));
+          /(NaN| {2}|^$)/.test(c) && (c = "M 0 0");
+          this[b] !== c && (k.setAttribute(b, c), (this[b] = c));
+        };
+        E.prototype.fadeOut = function (a) {
+          var b = this;
+          b.animate(
+            { opacity: 0 },
+            {
+              duration: M(a, 150),
+              complete: function () {
+                b.attr({ y: -9999 }).hide();
+              },
+            }
+          );
+        };
+        E.prototype.fillSetter = function (a, b, k) {
+          "string" === typeof a
+            ? k.setAttribute(b, a)
+            : a && this.complexColor(a, b, k);
+        };
+        E.prototype.getBBox = function (a, b) {
+          var k,
+            t = this.renderer,
+            c = this.element,
+            d = this.styles,
+            p = this.textStr,
+            u = t.cache,
+            B = t.cacheKeys,
+            A = c.namespaceURI === this.SVG_NS;
+          b = M(b, this.rotation, 0);
+          var l = t.styledMode
+            ? c && E.prototype.getStyle.call(c, "font-size")
+            : d && d.fontSize;
+          if (r(p)) {
+            var n = p.toString();
+            -1 === n.indexOf("<") && (n = n.replace(/[0-9]/g, "0"));
+            n += [
+              "",
+              b,
+              l,
+              this.textWidth,
+              d && d.textOverflow,
+              d && d.fontWeight,
+            ].join();
+          }
+          n && !a && (k = u[n]);
+          if (!k) {
+            if (A || t.forExport) {
+              try {
+                var w =
+                  this.fakeTS &&
+                  function (b) {
+                    [].forEach.call(
+                      c.querySelectorAll(".highcharts-text-outline"),
+                      function (k) {
+                        k.style.display = b;
+                      }
+                    );
+                  };
+                q(w) && w("none");
+                k = c.getBBox
+                  ? g({}, c.getBBox())
+                  : { width: c.offsetWidth, height: c.offsetHeight };
+                q(w) && w("");
+              } catch (ca) {
+                ("");
+              }
+              if (!k || 0 > k.width) k = { width: 0, height: 0 };
+            } else k = this.htmlGetBBox();
+            t.isSVG &&
+              ((a = k.width),
+              (t = k.height),
+              A &&
+                (k.height = t =
+                  { "11px,17": 14, "13px,20": 16 }[
+                    d && d.fontSize + "," + Math.round(t)
+                  ] || t),
+              b &&
+                ((d = b * C),
+                (k.width =
+                  Math.abs(t * Math.sin(d)) + Math.abs(a * Math.cos(d))),
+                (k.height =
+                  Math.abs(t * Math.cos(d)) + Math.abs(a * Math.sin(d)))));
+            if (n && 0 < k.height) {
+              for (; 250 < B.length; ) delete u[B.shift()];
+              u[n] || B.push(n);
+              u[n] = k;
+            }
+          }
+          return k;
+        };
+        E.prototype.getStyle = function (a) {
+          return n
+            .getComputedStyle(this.element || this, "")
+            .getPropertyValue(a);
+        };
+        E.prototype.hasClass = function (a) {
+          return -1 !== ("" + this.attr("class")).split(" ").indexOf(a);
+        };
+        E.prototype.hide = function (a) {
+          a ? this.attr({ y: -9999 }) : this.attr({ visibility: "hidden" });
+          return this;
+        };
+        E.prototype.htmlGetBBox = function () {
+          return { height: 0, width: 0, x: 0, y: 0 };
+        };
+        E.prototype.init = function (a, b) {
+          this.element =
+            "span" === b ? J(b) : y.createElementNS(this.SVG_NS, b);
+          this.renderer = a;
+          c(this, "afterInit");
+        };
+        E.prototype.invert = function (a) {
+          this.inverted = a;
+          this.updateTransform();
+          return this;
+        };
+        E.prototype.on = function (a, b) {
+          var k,
+            t,
+            c = this.element,
+            d;
+          e && "click" === a
+            ? ((c.ontouchstart = function (b) {
+                k = b.touches[0].clientX;
+                t = b.touches[0].clientY;
+              }),
+              (c.ontouchend = function (a) {
+                (k &&
+                  4 <=
+                    Math.sqrt(
+                      Math.pow(k - a.changedTouches[0].clientX, 2) +
+                        Math.pow(t - a.changedTouches[0].clientY, 2)
+                    )) ||
+                  b.call(c, a);
+                d = !0;
+                !1 !== a.cancelable && a.preventDefault();
+              }),
+              (c.onclick = function (k) {
+                d || b.call(c, k);
+              }))
+            : (c["on" + a] = b);
+          return this;
+        };
+        E.prototype.opacitySetter = function (a, b, k) {
+          this.opacity = a = Number(Number(a).toFixed(3));
+          k.setAttribute(b, a);
+        };
+        E.prototype.removeClass = function (a) {
+          return this.attr(
+            "class",
+            ("" + this.attr("class"))
+              .replace(B(a) ? new RegExp("(^| )" + a + "( |$)") : a, " ")
+              .replace(/ +/g, " ")
+              .trim()
+          );
+        };
+        E.prototype.removeTextOutline = function (a) {
+          for (var b = a.length, k; b--; )
+            (k = a[b]),
+              "highcharts-text-outline" === k.getAttribute("class") &&
+                d(a, this.element.removeChild(k));
+        };
+        E.prototype.safeRemoveChild = function (a) {
+          var b = a.parentNode;
+          b && b.removeChild(a);
+        };
+        E.prototype.setRadialReference = function (a) {
+          var b =
+            this.element.gradient &&
+            this.renderer.gradients[this.element.gradient];
+          this.element.radialReference = a;
+          b &&
+            b.radAttr &&
+            b.animate(this.renderer.getRadialAttr(a, b.radAttr));
+          return this;
+        };
+        E.prototype.setTextPath = function (a, b) {
+          var k = this.element,
+            t = { textAnchor: "text-anchor" },
+            c = !1,
+            d = this.textPathWrapper,
+            g = !d;
+          b = A(
+            !0,
+            {
+              enabled: !0,
+              attributes: { dy: -5, startOffset: "50%", textAnchor: "middle" },
+            },
+            b
+          );
+          var q = b.attributes;
+          if (a && b && b.enabled) {
+            d && null === d.element.parentNode
+              ? ((g = !0), (d = d.destroy()))
+              : d &&
+                this.removeTextOutline.call(
+                  d.parentGroup,
+                  [].slice.call(k.getElementsByTagName("tspan"))
+                );
+            this.options &&
+              this.options.padding &&
+              (q.dx = -this.options.padding);
+            d ||
+              ((this.textPathWrapper = d =
+                this.renderer.createElement("textPath")),
+              (c = !0));
+            var u = d.element;
+            (b = a.element.getAttribute("id")) ||
+              a.element.setAttribute("id", (b = O()));
+            if (g)
+              for (a = k.getElementsByTagName("tspan"); a.length; )
+                a[0].setAttribute("y", 0),
+                  p(q.dx) && a[0].setAttribute("x", -q.dx),
+                  u.appendChild(a[0]);
+            c && d && d.add({ element: this.text ? this.text.element : k });
+            u.setAttributeNS(
+              "http://www.w3.org/1999/xlink",
+              "href",
+              this.renderer.url + "#" + b
+            );
+            r(q.dy) && (u.parentNode.setAttribute("dy", q.dy), delete q.dy);
+            r(q.dx) && (u.parentNode.setAttribute("dx", q.dx), delete q.dx);
+            G(q, function (b, k) {
+              u.setAttribute(t[k] || k, b);
+            });
+            k.removeAttribute("transform");
+            this.removeTextOutline.call(
+              d,
+              [].slice.call(k.getElementsByTagName("tspan"))
+            );
+            this.text &&
+              !this.renderer.styledMode &&
+              this.attr({ fill: "none", "stroke-width": 0 });
+            this.applyTextOutline = this.updateTransform = v;
+          } else
+            d &&
+              (delete this.updateTransform,
+              delete this.applyTextOutline,
+              this.destroyTextPath(k, a),
+              this.updateTransform(),
+              this.options &&
+                this.options.rotation &&
+                this.applyTextOutline(this.options.style.textOutline));
+          return this;
+        };
+        E.prototype.shadow = function (a, b, k) {
+          var t = [],
+            c = this.element,
+            d = !1,
+            p = this.oldShadowOptions;
+          var q = {
+            color: "#000000",
+            offsetX: 1,
+            offsetY: 1,
+            opacity: 0.15,
+            width: 3,
+          };
+          var u;
+          !0 === a ? (u = q) : "object" === typeof a && (u = g(q, a));
+          u &&
+            (u &&
+              p &&
+              G(u, function (b, k) {
+                b !== p[k] && (d = !0);
+              }),
+            d && this.destroyShadows(),
+            (this.oldShadowOptions = u));
+          if (!u) this.destroyShadows();
+          else if (!this.shadows) {
+            var r = u.opacity / u.width;
+            var B = this.parentInverted
+              ? "translate(-1,-1)"
+              : "translate(" + u.offsetX + ", " + u.offsetY + ")";
+            for (q = 1; q <= u.width; q++) {
+              var A = c.cloneNode(!1);
+              var n = 2 * u.width + 1 - 2 * q;
+              l(A, {
+                stroke: a.color || "#000000",
+                "stroke-opacity": r * q,
+                "stroke-width": n,
+                transform: B,
+                fill: "none",
+              });
+              A.setAttribute(
+                "class",
+                (A.getAttribute("class") || "") + " highcharts-shadow"
+              );
+              k &&
+                (l(A, "height", Math.max(l(A, "height") - n, 0)),
+                (A.cutHeight = n));
+              b
+                ? b.element.appendChild(A)
+                : c.parentNode && c.parentNode.insertBefore(A, c);
+              t.push(A);
+            }
+            this.shadows = t;
+          }
+          return this;
+        };
+        E.prototype.show = function (a) {
+          return this.attr({ visibility: a ? "inherit" : "visible" });
+        };
+        E.prototype.strokeSetter = function (a, b, k) {
+          this[b] = a;
+          this.stroke && this["stroke-width"]
+            ? (E.prototype.fillSetter.call(this, this.stroke, "stroke", k),
+              k.setAttribute("stroke-width", this["stroke-width"]),
+              (this.hasStroke = !0))
+            : "stroke-width" === b && 0 === a && this.hasStroke
+            ? (k.removeAttribute("stroke"), (this.hasStroke = !1))
+            : this.renderer.styledMode &&
+              this["stroke-width"] &&
+              (k.setAttribute("stroke-width", this["stroke-width"]),
+              (this.hasStroke = !0));
+        };
+        E.prototype.strokeWidth = function () {
+          if (!this.renderer.styledMode) return this["stroke-width"] || 0;
+          var a = this.getStyle("stroke-width"),
+            b = 0;
+          if (a.indexOf("px") === a.length - 2) b = T(a);
+          else if ("" !== a) {
+            var k = y.createElementNS(D, "rect");
+            l(k, { width: a, "stroke-width": 0 });
+            this.element.parentNode.appendChild(k);
+            b = k.getBBox().width;
+            k.parentNode.removeChild(k);
+          }
+          return b;
+        };
+        E.prototype.symbolAttr = function (a) {
+          var b = this;
+          "x y r start end width height innerR anchorX anchorY clockwise"
+            .split(" ")
+            .forEach(function (k) {
+              b[k] = M(a[k], b[k]);
+            });
+          b.attr({
+            d: b.renderer.symbols[b.symbolName](b.x, b.y, b.width, b.height, b),
+          });
+        };
+        E.prototype.textSetter = function (a) {
+          a !== this.textStr &&
+            (delete this.textPxLength,
+            (this.textStr = a),
+            this.added && this.renderer.buildText(this));
+        };
+        E.prototype.titleSetter = function (a) {
+          var b = this.element.getElementsByTagName("title")[0];
+          b ||
+            ((b = y.createElementNS(this.SVG_NS, "title")),
+            this.element.appendChild(b));
+          b.firstChild && b.removeChild(b.firstChild);
+          b.appendChild(
+            y.createTextNode(
+              String(M(a, ""))
+                .replace(/<[^>]*>/g, "")
+                .replace(/&lt;/g, "<")
+                .replace(/&gt;/g, ">")
+            )
+          );
+        };
+        E.prototype.toFront = function () {
+          var a = this.element;
+          a.parentNode.appendChild(a);
+          return this;
+        };
+        E.prototype.translate = function (a, b) {
+          return this.attr({ translateX: a, translateY: b });
+        };
+        E.prototype.updateShadows = function (a, b, k) {
+          var t = this.shadows;
+          if (t)
+            for (var c = t.length; c--; )
+              k.call(
+                t[c],
+                "height" === a
+                  ? Math.max(b - (t[c].cutHeight || 0), 0)
+                  : "d" === a
+                  ? this.d
+                  : b,
+                a,
+                t[c]
+              );
+        };
+        E.prototype.updateTransform = function () {
+          var a = this.translateX || 0,
+            b = this.translateY || 0,
+            k = this.scaleX,
+            t = this.scaleY,
+            c = this.inverted,
+            d = this.rotation,
+            g = this.matrix,
+            p = this.element;
+          c && ((a += this.width), (b += this.height));
+          a = ["translate(" + a + "," + b + ")"];
+          r(g) && a.push("matrix(" + g.join(",") + ")");
+          c
+            ? a.push("rotate(90) scale(-1,1)")
+            : d &&
+              a.push(
+                "rotate(" +
+                  d +
+                  " " +
+                  M(this.rotationOriginX, p.getAttribute("x"), 0) +
+                  " " +
+                  M(this.rotationOriginY, p.getAttribute("y") || 0) +
+                  ")"
+              );
+          (r(k) || r(t)) && a.push("scale(" + M(k, 1) + " " + M(t, 1) + ")");
+          a.length && p.setAttribute("transform", a.join(" "));
+        };
+        E.prototype.visibilitySetter = function (a, b, k) {
+          "inherit" === a
+            ? k.removeAttribute(b)
+            : this[b] !== a && k.setAttribute(b, a);
+          this[b] = a;
+        };
+        E.prototype.xGetter = function (a) {
+          "circle" === this.element.nodeName &&
+            ("x" === a ? (a = "cx") : "y" === a && (a = "cy"));
+          return this._defaultGetter(a);
+        };
+        E.prototype.zIndexSetter = function (a, b) {
+          var k = this.renderer,
+            t = this.parentGroup,
+            c = (t || k).element || k.box,
+            d = this.element,
+            g = !1;
+          k = c === k.box;
+          var p = this.added;
+          var q;
+          r(a)
+            ? (d.setAttribute("data-z-index", a),
+              (a = +a),
+              this[b] === a && (p = !1))
+            : r(this[b]) && d.removeAttribute("data-z-index");
+          this[b] = a;
+          if (p) {
+            (a = this.zIndex) && t && (t.handleZ = !0);
+            b = c.childNodes;
+            for (q = b.length - 1; 0 <= q && !g; q--) {
+              t = b[q];
+              p = t.getAttribute("data-z-index");
+              var u = !r(p);
+              if (t !== d)
+                if (0 > a && u && !k && !q) c.insertBefore(d, b[q]), (g = !0);
+                else if (T(p) <= a || (u && (!r(a) || 0 <= a)))
+                  c.insertBefore(d, b[q + 1] || null), (g = !0);
+            }
+            g || (c.insertBefore(d, b[k ? 3 : 0] || null), (g = !0));
+          }
+          return g;
+        };
+        return E;
+      })();
+      f.prototype["stroke-widthSetter"] = f.prototype.strokeSetter;
+      f.prototype.yGetter = f.prototype.xGetter;
+      f.prototype.matrixSetter =
+        f.prototype.rotationOriginXSetter =
+        f.prototype.rotationOriginYSetter =
+        f.prototype.rotationSetter =
+        f.prototype.scaleXSetter =
+        f.prototype.scaleYSetter =
+        f.prototype.translateXSetter =
+        f.prototype.translateYSetter =
+        f.prototype.verticalAlignSetter =
+          function (a, c) {
+            this[c] = a;
+            this.doTransform = !0;
+          };
+      m.SVGElement = f;
+      return m.SVGElement;
+    }
+  );
+  N(
+    m,
+    "Core/Renderer/SVG/SVGLabel.js",
+    [m["Core/Renderer/SVG/SVGElement.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m =
+          (this && this.__extends) ||
+          (function () {
+            var f = function (e, I) {
+              f =
+                Object.setPrototypeOf ||
+                ({ __proto__: [] } instanceof Array &&
+                  function (v, e) {
+                    v.__proto__ = e;
+                  }) ||
+                function (v, e) {
+                  for (var f in e) e.hasOwnProperty(f) && (v[f] = e[f]);
+                };
+              return f(e, I);
+            };
+            return function (e, I) {
+              function v() {
+                this.constructor = e;
+              }
+              f(e, I);
+              e.prototype =
+                null === I
+                  ? Object.create(I)
+                  : ((v.prototype = I.prototype), new v());
+            };
+          })(),
+        z = h.defined,
+        F = h.extend,
+        L = h.isNumber,
+        K = h.merge,
+        C = h.removeEvent;
+      return (function (h) {
+        function e(f, v, x, D, n, l, J, w, r, d) {
+          var g = h.call(this) || this;
+          g.init(f, "g");
+          g.textStr = v;
+          g.x = x;
+          g.y = D;
+          g.anchorX = l;
+          g.anchorY = J;
+          g.baseline = r;
+          g.className = d;
+          "button" !== d && g.addClass("highcharts-label");
+          d && g.addClass("highcharts-" + d);
+          g.text = f.text("", 0, 0, w).attr({ zIndex: 1 });
+          if ("string" === typeof n) {
+            var c = /^url\((.*?)\)$/.test(n);
+            if (g.renderer.symbols[n] || c) g.symbolKey = n;
+          }
+          g.bBox = e.emptyBBox;
+          g.padding = 3;
+          g.paddingLeft = 0;
+          g.baselineOffset = 0;
+          g.needsBox = f.styledMode || c;
+          g.deferredAttr = {};
+          g.alignFactor = 0;
+          return g;
+        }
+        m(e, h);
+        e.prototype.alignSetter = function (e) {
+          e = { left: 0, center: 0.5, right: 1 }[e];
+          e !== this.alignFactor &&
+            ((this.alignFactor = e),
+            this.bBox && L(this.xSetting) && this.attr({ x: this.xSetting }));
+        };
+        e.prototype.anchorXSetter = function (e, v) {
+          this.anchorX = e;
+          this.boxAttr(
+            v,
+            Math.round(e) - this.getCrispAdjust() - this.xSetting
+          );
+        };
+        e.prototype.anchorYSetter = function (e, v) {
+          this.anchorY = e;
+          this.boxAttr(v, e - this.ySetting);
+        };
+        e.prototype.boxAttr = function (e, v) {
+          this.box ? this.box.attr(e, v) : (this.deferredAttr[e] = v);
+        };
+        e.prototype.css = function (h) {
+          if (h) {
+            var v = {};
+            h = K(h);
+            e.textProps.forEach(function (e) {
+              "undefined" !== typeof h[e] && ((v[e] = h[e]), delete h[e]);
+            });
+            this.text.css(v);
+            var I = "fontSize" in v || "fontWeight" in v;
+            if ("width" in v || I)
+              this.updateBoxSize(), I && this.updateTextPadding();
+          }
+          return f.prototype.css.call(this, h);
+        };
+        e.prototype.destroy = function () {
+          C(this.element, "mouseenter");
+          C(this.element, "mouseleave");
+          this.text && this.text.destroy();
+          this.box && (this.box = this.box.destroy());
+          f.prototype.destroy.call(this);
+        };
+        e.prototype.fillSetter = function (e, v) {
+          e && (this.needsBox = !0);
+          this.fill = e;
+          this.boxAttr(v, e);
+        };
+        e.prototype.getBBox = function () {
+          var e = this.bBox,
+            v = this.padding;
+          return {
+            width: e.width + 2 * v,
+            height: e.height + 2 * v,
+            x: e.x - v,
+            y: e.y - v,
+          };
+        };
+        e.prototype.getCrispAdjust = function () {
+          return this.renderer.styledMode && this.box
+            ? (this.box.strokeWidth() % 2) / 2
+            : ((this["stroke-width"] ? parseInt(this["stroke-width"], 10) : 0) %
+                2) /
+                2;
+        };
+        e.prototype.heightSetter = function (e) {
+          this.heightSetting = e;
+        };
+        e.prototype.on = function (e, v) {
+          var h = this,
+            D = h.text,
+            n = D && "SPAN" === D.element.tagName ? D : void 0;
+          if (n) {
+            var l = function (l) {
+              (("mouseenter" === e || "mouseleave" === e) &&
+                l.relatedTarget instanceof Element &&
+                (h.element.contains(l.relatedTarget) ||
+                  n.element.contains(l.relatedTarget))) ||
+                v.call(h.element, l);
+            };
+            n.on(e, l);
+          }
+          f.prototype.on.call(h, e, l || v);
+          return h;
+        };
+        e.prototype.onAdd = function () {
+          var e = this.textStr;
+          this.text.add(this);
+          this.attr({ text: z(e) ? e : "", x: this.x, y: this.y });
+          this.box &&
+            z(this.anchorX) &&
+            this.attr({ anchorX: this.anchorX, anchorY: this.anchorY });
+        };
+        e.prototype.paddingSetter = function (e) {
+          z(e) &&
+            e !== this.padding &&
+            ((this.padding = e), this.updateTextPadding());
+        };
+        e.prototype.paddingLeftSetter = function (e) {
+          z(e) &&
+            e !== this.paddingLeft &&
+            ((this.paddingLeft = e), this.updateTextPadding());
+        };
+        e.prototype.rSetter = function (e, v) {
+          this.boxAttr(v, e);
+        };
+        e.prototype.shadow = function (e) {
+          e &&
+            !this.renderer.styledMode &&
+            (this.updateBoxSize(), this.box && this.box.shadow(e));
+          return this;
+        };
+        e.prototype.strokeSetter = function (e, v) {
+          this.stroke = e;
+          this.boxAttr(v, e);
+        };
+        e.prototype["stroke-widthSetter"] = function (e, v) {
+          e && (this.needsBox = !0);
+          this["stroke-width"] = e;
+          this.boxAttr(v, e);
+        };
+        e.prototype["text-alignSetter"] = function (e) {
+          this.textAlign = e;
+        };
+        e.prototype.textSetter = function (e) {
+          "undefined" !== typeof e && this.text.attr({ text: e });
+          this.updateBoxSize();
+          this.updateTextPadding();
+        };
+        e.prototype.updateBoxSize = function () {
+          var f = this.text.element.style,
+            v = {},
+            h = this.padding,
+            D = this.paddingLeft,
+            n =
+              (L(this.widthSetting) &&
+                L(this.heightSetting) &&
+                !this.textAlign) ||
+              !z(this.text.textStr)
+                ? e.emptyBBox
+                : this.text.getBBox();
+          this.width = (this.widthSetting || n.width || 0) + 2 * h + D;
+          this.height = (this.heightSetting || n.height || 0) + 2 * h;
+          this.baselineOffset =
+            h +
+            Math.min(
+              this.renderer.fontMetrics(f && f.fontSize, this.text).b,
+              n.height || Infinity
+            );
+          this.needsBox &&
+            (this.box ||
+              ((f = this.box =
+                this.symbolKey
+                  ? this.renderer.symbol(this.symbolKey)
+                  : this.renderer.rect()),
+              f.addClass(
+                ("button" === this.className ? "" : "highcharts-label-box") +
+                  (this.className
+                    ? " highcharts-" + this.className + "-box"
+                    : "")
+              ),
+              f.add(this),
+              (f = this.getCrispAdjust()),
+              (v.x = f),
+              (v.y = (this.baseline ? -this.baselineOffset : 0) + f)),
+            (v.width = Math.round(this.width)),
+            (v.height = Math.round(this.height)),
+            this.box.attr(F(v, this.deferredAttr)),
+            (this.deferredAttr = {}));
+          this.bBox = n;
+        };
+        e.prototype.updateTextPadding = function () {
+          var e = this.text,
+            f = this.baseline ? 0 : this.baselineOffset,
+            h = this.paddingLeft + this.padding;
+          z(this.widthSetting) &&
+            this.bBox &&
+            ("center" === this.textAlign || "right" === this.textAlign) &&
+            (h +=
+              { center: 0.5, right: 1 }[this.textAlign] *
+              (this.widthSetting - this.bBox.width));
+          if (h !== e.x || f !== e.y)
+            e.attr("x", h),
+              e.hasBoxWidthChanged &&
+                ((this.bBox = e.getBBox(!0)), this.updateBoxSize()),
+              "undefined" !== typeof f && e.attr("y", f);
+          e.x = h;
+          e.y = f;
+        };
+        e.prototype.widthSetter = function (e) {
+          this.widthSetting = L(e) ? e : void 0;
+        };
+        e.prototype.xSetter = function (e) {
+          this.x = e;
+          this.alignFactor &&
+            ((e -=
+              this.alignFactor *
+              ((this.widthSetting || this.bBox.width) + 2 * this.padding)),
+            (this["forceAnimate:x"] = !0));
+          this.xSetting = Math.round(e);
+          this.attr("translateX", this.xSetting);
+        };
+        e.prototype.ySetter = function (e) {
+          this.ySetting = this.y = Math.round(e);
+          this.attr("translateY", this.ySetting);
+        };
+        e.emptyBBox = { width: 0, height: 0, x: 0, y: 0 };
+        e.textProps =
+          "color cursor direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width".split(
+            " "
+          );
+        return e;
+      })(f);
+    }
+  );
+  N(
+    m,
+    "Core/Renderer/SVG/SVGRenderer.js",
+    [
+      m["Core/Color/Color.js"],
+      m["Core/Globals.js"],
+      m["Core/Renderer/SVG/SVGElement.js"],
+      m["Core/Renderer/SVG/SVGLabel.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F) {
+      var P = F.addEvent,
+        K = F.attr,
+        C = F.createElement,
+        y = F.css,
+        e = F.defined,
+        I = F.destroyObjectProperties,
+        v = F.extend,
+        x = F.isArray,
+        D = F.isNumber,
+        n = F.isObject,
+        l = F.isString,
+        J = F.merge,
+        w = F.objectEach,
+        r = F.pick,
+        d = F.pInt,
+        g = F.splat,
+        c = F.uniqueKey,
+        a = h.charts,
+        q = h.deg2rad,
+        p = h.doc,
+        B = h.isFirefox,
+        A = h.isMS,
+        G = h.isWebKit;
+      F = h.noop;
+      var M = h.svg,
+        T = h.SVG_NS,
+        Q = h.symbolSizes,
+        O = h.win,
+        E = (function () {
+          function u(b, k, a, c, d, g, p) {
+            this.width =
+              this.url =
+              this.style =
+              this.isSVG =
+              this.imgCount =
+              this.height =
+              this.gradients =
+              this.globalAnimation =
+              this.defs =
+              this.chartIndex =
+              this.cacheKeys =
+              this.cache =
+              this.boxWrapper =
+              this.box =
+              this.alignedObjects =
+                void 0;
+            this.init(b, k, a, c, d, g, p);
+          }
+          u.prototype.init = function (b, k, a, c, d, g, q) {
+            var t = this.createElement("svg").attr({
+              version: "1.1",
+              class: "highcharts-root",
+            });
+            q || t.css(this.getStyle(c));
+            c = t.element;
+            b.appendChild(c);
+            K(b, "dir", "ltr");
+            -1 === b.innerHTML.indexOf("xmlns") && K(c, "xmlns", this.SVG_NS);
+            this.isSVG = !0;
+            this.box = c;
+            this.boxWrapper = t;
+            this.alignedObjects = [];
+            this.url =
+              (B || G) && p.getElementsByTagName("base").length
+                ? O.location.href
+                    .split("#")[0]
+                    .replace(/<[^>]*>/g, "")
+                    .replace(/([\('\)])/g, "\\$1")
+                    .replace(/ /g, "%20")
+                : "";
+            this.createElement("desc")
+              .add()
+              .element.appendChild(
+                p.createTextNode("Created with Highcharts 8.2.2")
+              );
+            this.defs = this.createElement("defs").add();
+            this.allowHTML = g;
+            this.forExport = d;
+            this.styledMode = q;
+            this.gradients = {};
+            this.cache = {};
+            this.cacheKeys = [];
+            this.imgCount = 0;
+            this.setSize(k, a, !1);
+            var H;
+            B &&
+              b.getBoundingClientRect &&
+              ((k = function () {
+                y(b, { left: 0, top: 0 });
+                H = b.getBoundingClientRect();
+                y(b, {
+                  left: Math.ceil(H.left) - H.left + "px",
+                  top: Math.ceil(H.top) - H.top + "px",
+                });
+              }),
+              k(),
+              (this.unSubPixelFix = P(O, "resize", k)));
+          };
+          u.prototype.definition = function (b) {
+            function k(b, t) {
+              var c;
+              g(b).forEach(function (b) {
+                var d = a.createElement(b.tagName),
+                  g = {};
+                w(b, function (b, k) {
+                  "tagName" !== k &&
+                    "children" !== k &&
+                    "textContent" !== k &&
+                    (g[k] = b);
+                });
+                d.attr(g);
+                d.add(t || a.defs);
+                b.textContent &&
+                  d.element.appendChild(p.createTextNode(b.textContent));
+                k(b.children || [], d);
+                c = d;
+              });
+              return c;
+            }
+            var a = this;
+            return k(b);
+          };
+          u.prototype.getStyle = function (b) {
+            return (this.style = v(
+              {
+                fontFamily:
+                  '"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',
+                fontSize: "12px",
+              },
+              b
+            ));
+          };
+          u.prototype.setStyle = function (b) {
+            this.boxWrapper.css(this.getStyle(b));
+          };
+          u.prototype.isHidden = function () {
+            return !this.boxWrapper.getBBox().width;
+          };
+          u.prototype.destroy = function () {
+            var b = this.defs;
+            this.box = null;
+            this.boxWrapper = this.boxWrapper.destroy();
+            I(this.gradients || {});
+            this.gradients = null;
+            b && (this.defs = b.destroy());
+            this.unSubPixelFix && this.unSubPixelFix();
+            return (this.alignedObjects = null);
+          };
+          u.prototype.createElement = function (b) {
+            var k = new this.Element();
+            k.init(this, b);
+            return k;
+          };
+          u.prototype.getRadialAttr = function (b, k) {
+            return {
+              cx: b[0] - b[2] / 2 + k.cx * b[2],
+              cy: b[1] - b[2] / 2 + k.cy * b[2],
+              r: k.r * b[2],
+            };
+          };
+          u.prototype.truncate = function (b, k, a, c, d, g, q) {
+            var t = this,
+              H = b.rotation,
+              R,
+              u = c ? 1 : 0,
+              A = (a || c).length,
+              r = A,
+              B = [],
+              n = function (b) {
+                k.firstChild && k.removeChild(k.firstChild);
+                b && k.appendChild(p.createTextNode(b));
+              },
+              l = function (g, p) {
+                p = p || g;
+                if ("undefined" === typeof B[p])
+                  if (k.getSubStringLength)
+                    try {
+                      B[p] = d + k.getSubStringLength(0, c ? p + 1 : p);
+                    } catch (ja) {
+                      ("");
+                    }
+                  else
+                    t.getSpanWidth &&
+                      (n(q(a || c, g)), (B[p] = d + t.getSpanWidth(b, k)));
+                return B[p];
+              },
+              e;
+            b.rotation = 0;
+            var w = l(k.textContent.length);
+            if ((e = d + w > g)) {
+              for (; u <= A; )
+                (r = Math.ceil((u + A) / 2)),
+                  c && (R = q(c, r)),
+                  (w = l(r, R && R.length - 1)),
+                  u === A ? (u = A + 1) : w > g ? (A = r - 1) : (u = r);
+              0 === A
+                ? n("")
+                : (a && A === a.length - 1) || n(R || q(a || c, r));
+            }
+            c && c.splice(0, r);
+            b.actualWidth = w;
+            b.rotation = H;
+            return e;
+          };
+          u.prototype.buildText = function (b) {
+            var k = b.element,
+              a = this,
+              c = a.forExport,
+              g = r(b.textStr, "").toString(),
+              q = -1 !== g.indexOf("<"),
+              u = k.childNodes,
+              A,
+              B = K(k, "x"),
+              n = b.styles,
+              e = b.textWidth,
+              G = n && n.lineHeight,
+              f = n && n.textOutline,
+              V = n && "ellipsis" === n.textOverflow,
+              E = n && "nowrap" === n.whiteSpace,
+              h = n && n.fontSize,
+              v,
+              D = u.length;
+            n = e && !b.added && this.box;
+            var O = function (b) {
+                var t;
+                a.styledMode ||
+                  (t = /(px|em)$/.test(b && b.style.fontSize)
+                    ? b.style.fontSize
+                    : h || a.style.fontSize || 12);
+                return G
+                  ? d(G)
+                  : a.fontMetrics(t, b.getAttribute("style") ? b : k).h;
+              },
+              J = function (b, k) {
+                w(a.escapes, function (a, t) {
+                  (k && -1 !== k.indexOf(a)) ||
+                    (b = b.toString().replace(new RegExp(a, "g"), t));
+                });
+                return b;
+              },
+              x = function (b, k) {
+                var a = b.indexOf("<");
+                b = b.substring(a, b.indexOf(">") - a);
+                a = b.indexOf(k + "=");
+                if (
+                  -1 !== a &&
+                  ((a = a + k.length + 1),
+                  (k = b.charAt(a)),
+                  '"' === k || "'" === k)
+                )
+                  return (b = b.substring(a + 1)), b.substring(0, b.indexOf(k));
+              },
+              I = /<br.*?>/g;
+            var m = [g, V, E, G, f, h, e].join();
+            if (m !== b.textCache) {
+              for (b.textCache = m; D--; ) k.removeChild(u[D]);
+              q || f || V || e || (-1 !== g.indexOf(" ") && (!E || I.test(g)))
+                ? (n && n.appendChild(k),
+                  q
+                    ? ((g = a.styledMode
+                        ? g
+                            .replace(
+                              /<(b|strong)>/g,
+                              '<span class="highcharts-strong">'
+                            )
+                            .replace(
+                              /<(i|em)>/g,
+                              '<span class="highcharts-emphasized">'
+                            )
+                        : g
+                            .replace(
+                              /<(b|strong)>/g,
+                              '<span style="font-weight:bold">'
+                            )
+                            .replace(
+                              /<(i|em)>/g,
+                              '<span style="font-style:italic">'
+                            )),
+                      (g = g
+                        .replace(/<a/g, "<span")
+                        .replace(/<\/(b|strong|i|em|a)>/g, "</span>")
+                        .split(I)))
+                    : (g = [g]),
+                  (g = g.filter(function (b) {
+                    return "" !== b;
+                  })),
+                  g.forEach(function (t, d) {
+                    var g = 0,
+                      H = 0;
+                    t = t
+                      .replace(/^\s+|\s+$/g, "")
+                      .replace(/<span/g, "|||<span")
+                      .replace(/<\/span>/g, "</span>|||");
+                    var q = t.split("|||");
+                    q.forEach(function (t) {
+                      if ("" !== t || 1 === q.length) {
+                        var R = {},
+                          u = p.createElementNS(a.SVG_NS, "tspan"),
+                          n,
+                          r;
+                        (n = x(t, "class")) && K(u, "class", n);
+                        if ((n = x(t, "style")))
+                          (n = n.replace(/(;| |^)color([ :])/, "$1fill$2")),
+                            K(u, "style", n);
+                        if (
+                          (r = x(t, "href")) &&
+                          !c &&
+                          -1 ===
+                            r.split(":")[0].toLowerCase().indexOf("javascript")
+                        ) {
+                          var l = p.createElementNS(a.SVG_NS, "a");
+                          K(l, "href", r);
+                          K(u, "class", "highcharts-anchor");
+                          l.appendChild(u);
+                          a.styledMode || y(u, { cursor: "pointer" });
+                        }
+                        t = J(t.replace(/<[a-zA-Z\/](.|\n)*?>/g, "") || " ");
+                        if (" " !== t) {
+                          u.appendChild(p.createTextNode(t));
+                          g ? (R.dx = 0) : d && null !== B && (R.x = B);
+                          K(u, R);
+                          k.appendChild(l || u);
+                          !g &&
+                            v &&
+                            (!M && c && y(u, { display: "block" }),
+                            K(u, "dy", O(u)));
+                          if (e) {
+                            var w = t.replace(/([^\^])-/g, "$1- ").split(" ");
+                            R = !E && (1 < q.length || d || 1 < w.length);
+                            l = 0;
+                            r = O(u);
+                            if (V)
+                              A = a.truncate(
+                                b,
+                                u,
+                                t,
+                                void 0,
+                                0,
+                                Math.max(0, e - parseInt(h || 12, 10)),
+                                function (b, k) {
+                                  return b.substring(0, k) + "\u2026";
+                                }
+                              );
+                            else if (R)
+                              for (; w.length; )
+                                w.length &&
+                                  !E &&
+                                  0 < l &&
+                                  ((u = p.createElementNS(T, "tspan")),
+                                  K(u, { dy: r, x: B }),
+                                  n && K(u, "style", n),
+                                  u.appendChild(
+                                    p.createTextNode(
+                                      w.join(" ").replace(/- /g, "-")
+                                    )
+                                  ),
+                                  k.appendChild(u)),
+                                  a.truncate(
+                                    b,
+                                    u,
+                                    null,
+                                    w,
+                                    0 === l ? H : 0,
+                                    e,
+                                    function (b, k) {
+                                      return w
+                                        .slice(0, k)
+                                        .join(" ")
+                                        .replace(/- /g, "-");
+                                    }
+                                  ),
+                                  (H = b.actualWidth),
+                                  l++;
+                          }
+                          g++;
+                        }
+                      }
+                    });
+                    v = v || k.childNodes.length;
+                  }),
+                  V &&
+                    A &&
+                    b.attr("title", J(b.textStr || "", ["&lt;", "&gt;"])),
+                  n && n.removeChild(k),
+                  l(f) && b.applyTextOutline && b.applyTextOutline(f))
+                : k.appendChild(p.createTextNode(J(g)));
+            }
+          };
+          u.prototype.getContrast = function (b) {
+            b = f.parse(b).rgba;
+            b[0] *= 1;
+            b[1] *= 1.2;
+            b[2] *= 0.5;
+            return 459 < b[0] + b[1] + b[2] ? "#000000" : "#FFFFFF";
+          };
+          u.prototype.button = function (b, k, a, c, d, g, p, q, u, n) {
+            var t = this.label(b, k, a, u, void 0, void 0, n, void 0, "button"),
+              H = 0,
+              R = this.styledMode;
+            b = ((d = d ? J(d) : d) && d.style) || {};
+            d && d.style && delete d.style;
+            t.attr(J({ padding: 8, r: 2 }, d));
+            if (!R) {
+              d = J(
+                {
+                  fill: "#f7f7f7",
+                  stroke: "#cccccc",
+                  "stroke-width": 1,
+                  style: {
+                    color: "#333333",
+                    cursor: "pointer",
+                    fontWeight: "normal",
+                  },
+                },
+                { style: b },
+                d
+              );
+              var r = d.style;
+              delete d.style;
+              g = J(d, { fill: "#e6e6e6" }, g);
+              var B = g.style;
+              delete g.style;
+              p = J(
+                d,
+                {
+                  fill: "#e6ebf5",
+                  style: { color: "#000000", fontWeight: "bold" },
+                },
+                p
+              );
+              var l = p.style;
+              delete p.style;
+              q = J(d, { style: { color: "#cccccc" } }, q);
+              var e = q.style;
+              delete q.style;
+            }
+            P(t.element, A ? "mouseover" : "mouseenter", function () {
+              3 !== H && t.setState(1);
+            });
+            P(t.element, A ? "mouseout" : "mouseleave", function () {
+              3 !== H && t.setState(H);
+            });
+            t.setState = function (b) {
+              1 !== b && (t.state = H = b);
+              t.removeClass(
+                /highcharts-button-(normal|hover|pressed|disabled)/
+              ).addClass(
+                "highcharts-button-" +
+                  ["normal", "hover", "pressed", "disabled"][b || 0]
+              );
+              R || t.attr([d, g, p, q][b || 0]).css([r, B, l, e][b || 0]);
+            };
+            R || t.attr(d).css(v({ cursor: "default" }, r));
+            return t.on("click", function (b) {
+              3 !== H && c.call(t, b);
+            });
+          };
+          u.prototype.crispLine = function (b, k, a) {
+            void 0 === a && (a = "round");
+            var t = b[0],
+              c = b[1];
+            t[1] === c[1] && (t[1] = c[1] = Math[a](t[1]) - (k % 2) / 2);
+            t[2] === c[2] && (t[2] = c[2] = Math[a](t[2]) + (k % 2) / 2);
+            return b;
+          };
+          u.prototype.path = function (b) {
+            var k = this.styledMode ? {} : { fill: "none" };
+            x(b) ? (k.d = b) : n(b) && v(k, b);
+            return this.createElement("path").attr(k);
+          };
+          u.prototype.circle = function (b, k, a) {
+            b = n(b) ? b : "undefined" === typeof b ? {} : { x: b, y: k, r: a };
+            k = this.createElement("circle");
+            k.xSetter = k.ySetter = function (b, k, a) {
+              a.setAttribute("c" + k, b);
+            };
+            return k.attr(b);
+          };
+          u.prototype.arc = function (b, k, a, c, d, g) {
+            n(b)
+              ? ((c = b), (k = c.y), (a = c.r), (b = c.x))
+              : (c = { innerR: c, start: d, end: g });
+            b = this.symbol("arc", b, k, a, a, c);
+            b.r = a;
+            return b;
+          };
+          u.prototype.rect = function (b, k, a, c, d, g) {
+            d = n(b) ? b.r : d;
+            var t = this.createElement("rect");
+            b = n(b)
+              ? b
+              : "undefined" === typeof b
+              ? {}
+              : { x: b, y: k, width: Math.max(a, 0), height: Math.max(c, 0) };
+            this.styledMode ||
+              ("undefined" !== typeof g &&
+                ((b.strokeWidth = g), (b = t.crisp(b))),
+              (b.fill = "none"));
+            d && (b.r = d);
+            t.rSetter = function (b, k, a) {
+              t.r = b;
+              K(a, { rx: b, ry: b });
+            };
+            t.rGetter = function () {
+              return t.r;
+            };
+            return t.attr(b);
+          };
+          u.prototype.setSize = function (b, k, a) {
+            var t = this.alignedObjects,
+              c = t.length;
+            this.width = b;
+            this.height = k;
+            for (
+              this.boxWrapper.animate(
+                { width: b, height: k },
+                {
+                  step: function () {
+                    this.attr({
+                      viewBox:
+                        "0 0 " + this.attr("width") + " " + this.attr("height"),
+                    });
+                  },
+                  duration: r(a, !0) ? void 0 : 0,
+                }
+              );
+              c--;
+
+            )
+              t[c].align();
+          };
+          u.prototype.g = function (b) {
+            var k = this.createElement("g");
+            return b ? k.attr({ class: "highcharts-" + b }) : k;
+          };
+          u.prototype.image = function (b, k, a, c, d, g) {
+            var t = { preserveAspectRatio: "none" },
+              p = function (b, k) {
+                b.setAttributeNS
+                  ? b.setAttributeNS("http://www.w3.org/1999/xlink", "href", k)
+                  : b.setAttribute("hc-svg-href", k);
+              },
+              q = function (k) {
+                p(H.element, b);
+                g.call(H, k);
+              };
+            1 < arguments.length && v(t, { x: k, y: a, width: c, height: d });
+            var H = this.createElement("image").attr(t);
+            g
+              ? (p(
+                  H.element,
+                  "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
+                ),
+                (t = new O.Image()),
+                P(t, "load", q),
+                (t.src = b),
+                t.complete && q({}))
+              : p(H.element, b);
+            return H;
+          };
+          u.prototype.symbol = function (b, k, t, c, d, g) {
+            var q = this,
+              H = /^url\((.*?)\)$/,
+              u = H.test(b),
+              R = !u && (this.symbols[b] ? b : "circle"),
+              n = R && this.symbols[R],
+              A;
+            if (n) {
+              "number" === typeof k &&
+                (A = n.call(
+                  this.symbols,
+                  Math.round(k || 0),
+                  Math.round(t || 0),
+                  c || 0,
+                  d || 0,
+                  g
+                ));
+              var B = this.path(A);
+              q.styledMode || B.attr("fill", "none");
+              v(B, { symbolName: R, x: k, y: t, width: c, height: d });
+              g && v(B, g);
+            } else if (u) {
+              var l = b.match(H)[1];
+              B = this.image(l);
+              B.imgwidth = r(Q[l] && Q[l].width, g && g.width);
+              B.imgheight = r(Q[l] && Q[l].height, g && g.height);
+              var w = function () {
+                B.attr({ width: B.width, height: B.height });
+              };
+              ["width", "height"].forEach(function (b) {
+                B[b + "Setter"] = function (b, k) {
+                  var a = {},
+                    t = this["img" + k],
+                    c = "width" === k ? "translateX" : "translateY";
+                  this[k] = b;
+                  e(t) &&
+                    (g &&
+                      "within" === g.backgroundSize &&
+                      this.width &&
+                      this.height &&
+                      (t = Math.round(
+                        t *
+                          Math.min(
+                            this.width / this.imgwidth,
+                            this.height / this.imgheight
+                          )
+                      )),
+                    this.element && this.element.setAttribute(k, t),
+                    this.alignByTranslate ||
+                      ((a[c] = ((this[k] || 0) - t) / 2), this.attr(a)));
+                };
+              });
+              e(k) && B.attr({ x: k, y: t });
+              B.isImg = !0;
+              e(B.imgwidth) && e(B.imgheight)
+                ? w()
+                : (B.attr({ width: 0, height: 0 }),
+                  C("img", {
+                    onload: function () {
+                      var b = a[q.chartIndex];
+                      0 === this.width &&
+                        (y(this, { position: "absolute", top: "-999em" }),
+                        p.body.appendChild(this));
+                      Q[l] = { width: this.width, height: this.height };
+                      B.imgwidth = this.width;
+                      B.imgheight = this.height;
+                      B.element && w();
+                      this.parentNode && this.parentNode.removeChild(this);
+                      q.imgCount--;
+                      if (!q.imgCount && b && !b.hasLoaded) b.onload();
+                    },
+                    src: l,
+                  }),
+                  this.imgCount++);
+            }
+            return B;
+          };
+          u.prototype.clipRect = function (b, k, a, d) {
+            var t = c() + "-",
+              g = this.createElement("clipPath").attr({ id: t }).add(this.defs);
+            b = this.rect(b, k, a, d, 0).add(g);
+            b.id = t;
+            b.clipPath = g;
+            b.count = 0;
+            return b;
+          };
+          u.prototype.text = function (b, k, a, c) {
+            var t = {};
+            if (c && (this.allowHTML || !this.forExport))
+              return this.html(b, k, a);
+            t.x = Math.round(k || 0);
+            a && (t.y = Math.round(a));
+            e(b) && (t.text = b);
+            b = this.createElement("text").attr(t);
+            c ||
+              (b.xSetter = function (b, k, a) {
+                var t = a.getElementsByTagName("tspan"),
+                  c = a.getAttribute(k),
+                  d;
+                for (d = 0; d < t.length; d++) {
+                  var g = t[d];
+                  g.getAttribute(k) === c && g.setAttribute(k, b);
+                }
+                a.setAttribute(k, b);
+              });
+            return b;
+          };
+          u.prototype.fontMetrics = function (b, k) {
+            b =
+              (!this.styledMode && /px/.test(b)) || !O.getComputedStyle
+                ? b ||
+                  (k && k.style && k.style.fontSize) ||
+                  (this.style && this.style.fontSize)
+                : k && m.prototype.getStyle.call(k, "font-size");
+            b = /px/.test(b) ? d(b) : 12;
+            k = 24 > b ? b + 3 : Math.round(1.2 * b);
+            return { h: k, b: Math.round(0.8 * k), f: b };
+          };
+          u.prototype.rotCorr = function (b, k, a) {
+            var t = b;
+            k && a && (t = Math.max(t * Math.cos(k * q), 4));
+            return { x: (-b / 3) * Math.sin(k * q), y: t };
+          };
+          u.prototype.pathToSegments = function (b) {
+            for (
+              var k = [],
+                a = [],
+                c = { A: 8, C: 7, H: 2, L: 3, M: 3, Q: 5, S: 5, T: 3, V: 2 },
+                d = 0;
+              d < b.length;
+              d++
+            )
+              l(a[0]) &&
+                D(b[d]) &&
+                a.length === c[a[0].toUpperCase()] &&
+                b.splice(d, 0, a[0].replace("M", "L").replace("m", "l")),
+                "string" === typeof b[d] &&
+                  (a.length && k.push(a.slice(0)), (a.length = 0)),
+                a.push(b[d]);
+            k.push(a.slice(0));
+            return k;
+          };
+          u.prototype.label = function (b, k, a, c, d, g, p, q, u) {
+            return new z(this, b, k, a, c, d, g, p, q, u);
+          };
+          return u;
+        })();
+      E.prototype.Element = m;
+      E.prototype.SVG_NS = T;
+      E.prototype.draw = F;
+      E.prototype.escapes = {
+        "&": "&amp;",
+        "<": "&lt;",
+        ">": "&gt;",
+        "'": "&#39;",
+        '"': "&quot;",
+      };
+      E.prototype.symbols = {
+        circle: function (a, b, k, t) {
+          return this.arc(a + k / 2, b + t / 2, k / 2, t / 2, {
+            start: 0.5 * Math.PI,
+            end: 2.5 * Math.PI,
+            open: !1,
+          });
+        },
+        square: function (a, b, k, t) {
+          return [
+            ["M", a, b],
+            ["L", a + k, b],
+            ["L", a + k, b + t],
+            ["L", a, b + t],
+            ["Z"],
+          ];
+        },
+        triangle: function (a, b, k, t) {
+          return [
+            ["M", a + k / 2, b],
+            ["L", a + k, b + t],
+            ["L", a, b + t],
+            ["Z"],
+          ];
+        },
+        "triangle-down": function (a, b, k, t) {
+          return [["M", a, b], ["L", a + k, b], ["L", a + k / 2, b + t], ["Z"]];
+        },
+        diamond: function (a, b, k, t) {
+          return [
+            ["M", a + k / 2, b],
+            ["L", a + k, b + t / 2],
+            ["L", a + k / 2, b + t],
+            ["L", a, b + t / 2],
+            ["Z"],
+          ];
+        },
+        arc: function (a, b, k, t, c) {
+          var d = [];
+          if (c) {
+            var g = c.start || 0,
+              p = c.end || 0,
+              q = c.r || k;
+            k = c.r || t || k;
+            var H = 0.001 > Math.abs(p - g - 2 * Math.PI);
+            p -= 0.001;
+            t = c.innerR;
+            H = r(c.open, H);
+            var u = Math.cos(g),
+              B = Math.sin(g),
+              n = Math.cos(p),
+              A = Math.sin(p);
+            g = r(c.longArc, 0.001 > p - g - Math.PI ? 0 : 1);
+            d.push(
+              ["M", a + q * u, b + k * B],
+              ["A", q, k, 0, g, r(c.clockwise, 1), a + q * n, b + k * A]
+            );
+            e(t) &&
+              d.push(
+                H ? ["M", a + t * n, b + t * A] : ["L", a + t * n, b + t * A],
+                [
+                  "A",
+                  t,
+                  t,
+                  0,
+                  g,
+                  e(c.clockwise) ? 1 - c.clockwise : 0,
+                  a + t * u,
+                  b + t * B,
+                ]
+              );
+            H || d.push(["Z"]);
+          }
+          return d;
+        },
+        callout: function (a, b, k, t, c) {
+          var d = Math.min((c && c.r) || 0, k, t),
+            g = d + 6,
+            p = (c && c.anchorX) || 0;
+          c = (c && c.anchorY) || 0;
+          var q = [
+            ["M", a + d, b],
+            ["L", a + k - d, b],
+            ["C", a + k, b, a + k, b, a + k, b + d],
+            ["L", a + k, b + t - d],
+            ["C", a + k, b + t, a + k, b + t, a + k - d, b + t],
+            ["L", a + d, b + t],
+            ["C", a, b + t, a, b + t, a, b + t - d],
+            ["L", a, b + d],
+            ["C", a, b, a, b, a + d, b],
+          ];
+          p && p > k
+            ? c > b + g && c < b + t - g
+              ? q.splice(
+                  3,
+                  1,
+                  ["L", a + k, c - 6],
+                  ["L", a + k + 6, c],
+                  ["L", a + k, c + 6],
+                  ["L", a + k, b + t - d]
+                )
+              : q.splice(
+                  3,
+                  1,
+                  ["L", a + k, t / 2],
+                  ["L", p, c],
+                  ["L", a + k, t / 2],
+                  ["L", a + k, b + t - d]
+                )
+            : p && 0 > p
+            ? c > b + g && c < b + t - g
+              ? q.splice(
+                  7,
+                  1,
+                  ["L", a, c + 6],
+                  ["L", a - 6, c],
+                  ["L", a, c - 6],
+                  ["L", a, b + d]
+                )
+              : q.splice(
+                  7,
+                  1,
+                  ["L", a, t / 2],
+                  ["L", p, c],
+                  ["L", a, t / 2],
+                  ["L", a, b + d]
+                )
+            : c && c > t && p > a + g && p < a + k - g
+            ? q.splice(
+                5,
+                1,
+                ["L", p + 6, b + t],
+                ["L", p, b + t + 6],
+                ["L", p - 6, b + t],
+                ["L", a + d, b + t]
+              )
+            : c &&
+              0 > c &&
+              p > a + g &&
+              p < a + k - g &&
+              q.splice(
+                1,
+                1,
+                ["L", p - 6, b],
+                ["L", p, b - 6],
+                ["L", p + 6, b],
+                ["L", k - d, b]
+              );
+          return q;
+        },
+      };
+      h.SVGRenderer = E;
+      h.Renderer = h.SVGRenderer;
+      return h.Renderer;
+    }
+  );
+  N(
+    m,
+    "Core/Renderer/HTML/HTMLElement.js",
+    [
+      m["Core/Globals.js"],
+      m["Core/Renderer/SVG/SVGElement.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m) {
+      var z = m.css,
+        F = m.defined,
+        P = m.extend,
+        K = m.pick,
+        C = m.pInt,
+        y = f.isFirefox;
+      P(h.prototype, {
+        htmlCss: function (e) {
+          var f = "SPAN" === this.element.tagName && e && "width" in e,
+            h = K(f && e.width, void 0);
+          if (f) {
+            delete e.width;
+            this.textWidth = h;
+            var x = !0;
+          }
+          e &&
+            "ellipsis" === e.textOverflow &&
+            ((e.whiteSpace = "nowrap"), (e.overflow = "hidden"));
+          this.styles = P(this.styles, e);
+          z(this.element, e);
+          x && this.htmlUpdateTransform();
+          return this;
+        },
+        htmlGetBBox: function () {
+          var e = this.element;
+          return {
+            x: e.offsetLeft,
+            y: e.offsetTop,
+            width: e.offsetWidth,
+            height: e.offsetHeight,
+          };
+        },
+        htmlUpdateTransform: function () {
+          if (this.added) {
+            var e = this.renderer,
+              f = this.element,
+              h = this.translateX || 0,
+              x = this.translateY || 0,
+              D = this.x || 0,
+              n = this.y || 0,
+              l = this.textAlign || "left",
+              J = { left: 0, center: 0.5, right: 1 }[l],
+              w = this.styles,
+              r = w && w.whiteSpace;
+            z(f, { marginLeft: h, marginTop: x });
+            !e.styledMode &&
+              this.shadows &&
+              this.shadows.forEach(function (a) {
+                z(a, { marginLeft: h + 1, marginTop: x + 1 });
+              });
+            this.inverted &&
+              [].forEach.call(f.childNodes, function (a) {
+                e.invertChild(a, f);
+              });
+            if ("SPAN" === f.tagName) {
+              w = this.rotation;
+              var d = this.textWidth && C(this.textWidth),
+                g = [w, l, f.innerHTML, this.textWidth, this.textAlign].join(),
+                c;
+              (c = d !== this.oldTextWidth) &&
+                !(c = d > this.oldTextWidth) &&
+                ((c = this.textPxLength) ||
+                  (z(f, { width: "", whiteSpace: r || "nowrap" }),
+                  (c = f.offsetWidth)),
+                (c = c > d));
+              c &&
+              (/[ \-]/.test(f.textContent || f.innerText) ||
+                "ellipsis" === f.style.textOverflow)
+                ? (z(f, {
+                    width: d + "px",
+                    display: "block",
+                    whiteSpace: r || "normal",
+                  }),
+                  (this.oldTextWidth = d),
+                  (this.hasBoxWidthChanged = !0))
+                : (this.hasBoxWidthChanged = !1);
+              g !== this.cTT &&
+                ((r = e.fontMetrics(f.style.fontSize, f).b),
+                !F(w) ||
+                  (w === (this.oldRotation || 0) && l === this.oldAlign) ||
+                  this.setSpanRotation(w, J, r),
+                this.getSpanCorrection(
+                  (!F(w) && this.textPxLength) || f.offsetWidth,
+                  r,
+                  J,
+                  w,
+                  l
+                ));
+              z(f, {
+                left: D + (this.xCorr || 0) + "px",
+                top: n + (this.yCorr || 0) + "px",
+              });
+              this.cTT = g;
+              this.oldRotation = w;
+              this.oldAlign = l;
+            }
+          } else this.alignOnAdd = !0;
+        },
+        setSpanRotation: function (e, f, h) {
+          var v = {},
+            D = this.renderer.getTransformKey();
+          v[D] = v.transform = "rotate(" + e + "deg)";
+          v[D + (y ? "Origin" : "-origin")] = v.transformOrigin =
+            100 * f + "% " + h + "px";
+          z(this.element, v);
+        },
+        getSpanCorrection: function (e, f, h) {
+          this.xCorr = -e * h;
+          this.yCorr = -f;
+        },
+      });
+      return h;
+    }
+  );
+  N(
+    m,
+    "Core/Renderer/HTML/HTMLRenderer.js",
+    [
+      m["Core/Globals.js"],
+      m["Core/Renderer/SVG/SVGElement.js"],
+      m["Core/Renderer/SVG/SVGRenderer.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z) {
+      var F = f.isFirefox,
+        P = f.isMS,
+        K = f.isWebKit,
+        C = f.win,
+        y = z.attr,
+        e = z.createElement,
+        I = z.extend,
+        v = z.pick;
+      I(m.prototype, {
+        getTransformKey: function () {
+          return P && !/Edge/.test(C.navigator.userAgent)
+            ? "-ms-transform"
+            : K
+            ? "-webkit-transform"
+            : F
+            ? "MozTransform"
+            : C.opera
+            ? "-o-transform"
+            : "";
+        },
+        html: function (f, D, n) {
+          var l = this.createElement("span"),
+            J = l.element,
+            w = l.renderer,
+            r = w.isSVG,
+            d = function (d, c) {
+              ["opacity", "visibility"].forEach(function (a) {
+                d[a + "Setter"] = function (g, p, B) {
+                  var q = d.div ? d.div.style : c;
+                  h.prototype[a + "Setter"].call(this, g, p, B);
+                  q && (q[p] = g);
+                };
+              });
+              d.addedSetters = !0;
+            };
+          l.textSetter = function (d) {
+            d !== J.innerHTML && (delete this.bBox, delete this.oldTextWidth);
+            this.textStr = d;
+            J.innerHTML = v(d, "");
+            l.doTransform = !0;
+          };
+          r && d(l, l.element.style);
+          l.xSetter =
+            l.ySetter =
+            l.alignSetter =
+            l.rotationSetter =
+              function (d, c) {
+                "align" === c ? (l.alignValue = l.textAlign = d) : (l[c] = d);
+                l.doTransform = !0;
+              };
+          l.afterSetters = function () {
+            this.doTransform &&
+              (this.htmlUpdateTransform(), (this.doTransform = !1));
+          };
+          l.attr({ text: f, x: Math.round(D), y: Math.round(n) }).css({
+            position: "absolute",
+          });
+          w.styledMode ||
+            l.css({
+              fontFamily: this.style.fontFamily,
+              fontSize: this.style.fontSize,
+            });
+          J.style.whiteSpace = "nowrap";
+          l.css = l.htmlCss;
+          r &&
+            (l.add = function (g) {
+              var c = w.box.parentNode,
+                a = [];
+              if ((this.parentGroup = g)) {
+                var q = g.div;
+                if (!q) {
+                  for (; g; ) a.push(g), (g = g.parentGroup);
+                  a.reverse().forEach(function (g) {
+                    function p(a, c) {
+                      g[c] = a;
+                      "translateX" === c
+                        ? (r.left = a + "px")
+                        : (r.top = a + "px");
+                      g.doTransform = !0;
+                    }
+                    var n = y(g.element, "class");
+                    q = g.div =
+                      g.div ||
+                      e(
+                        "div",
+                        n ? { className: n } : void 0,
+                        {
+                          position: "absolute",
+                          left: (g.translateX || 0) + "px",
+                          top: (g.translateY || 0) + "px",
+                          display: g.display,
+                          opacity: g.opacity,
+                          pointerEvents: g.styles && g.styles.pointerEvents,
+                        },
+                        q || c
+                      );
+                    var r = q.style;
+                    I(g, {
+                      classSetter: (function (a) {
+                        return function (c) {
+                          this.element.setAttribute("class", c);
+                          a.className = c;
+                        };
+                      })(q),
+                      on: function () {
+                        a[0].div &&
+                          l.on.apply({ element: a[0].div }, arguments);
+                        return g;
+                      },
+                      translateXSetter: p,
+                      translateYSetter: p,
+                    });
+                    g.addedSetters || d(g);
+                  });
+                }
+              } else q = c;
+              q.appendChild(J);
+              l.added = !0;
+              l.alignOnAdd && l.htmlUpdateTransform();
+              return l;
+            });
+          return l;
+        },
+      });
+      return m;
+    }
+  );
+  N(
+    m,
+    "Core/Axis/Tick.js",
+    [m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.clamp,
+        z = h.correctFloat,
+        F = h.defined,
+        L = h.destroyObjectProperties,
+        K = h.extend,
+        C = h.fireEvent,
+        y = h.isNumber,
+        e = h.merge,
+        I = h.objectEach,
+        v = h.pick,
+        x = f.deg2rad;
+      h = (function () {
+        function f(n, l, e, w, r) {
+          this.isNewLabel = this.isNew = !0;
+          this.axis = n;
+          this.pos = l;
+          this.type = e || "";
+          this.parameters = r || {};
+          this.tickmarkOffset = this.parameters.tickmarkOffset;
+          this.options = this.parameters.options;
+          C(this, "init");
+          e || w || this.addLabel();
+        }
+        f.prototype.addLabel = function () {
+          var n = this,
+            l = n.axis,
+            e = l.options,
+            w = l.chart,
+            r = l.categories,
+            d = l.logarithmic,
+            g = l.names,
+            c = n.pos,
+            a = v(n.options && n.options.labels, e.labels),
+            q = l.tickPositions,
+            p = c === q[0],
+            B = c === q[q.length - 1];
+          g = this.parameters.category || (r ? v(r[c], g[c], c) : c);
+          var A = n.label;
+          r = (!a.step || 1 === a.step) && 1 === l.tickInterval;
+          q = q.info;
+          var f, h;
+          if (l.dateTime && q) {
+            var D = w.time.resolveDTLFormat(
+              e.dateTimeLabelFormats[
+                (!e.grid && q.higherRanks[c]) || q.unitName
+              ]
+            );
+            var x = D.main;
+          }
+          n.isFirst = p;
+          n.isLast = B;
+          n.formatCtx = {
+            axis: l,
+            chart: w,
+            isFirst: p,
+            isLast: B,
+            dateTimeLabelFormat: x,
+            tickPositionInfo: q,
+            value: d ? z(d.lin2log(g)) : g,
+            pos: c,
+          };
+          e = l.labelFormatter.call(n.formatCtx, this.formatCtx);
+          if ((h = D && D.list))
+            n.shortenLabel = function () {
+              for (f = 0; f < h.length; f++)
+                if (
+                  (A.attr({
+                    text: l.labelFormatter.call(
+                      K(n.formatCtx, { dateTimeLabelFormat: h[f] })
+                    ),
+                  }),
+                  A.getBBox().width < l.getSlotWidth(n) - 2 * v(a.padding, 5))
+                )
+                  return;
+              A.attr({ text: "" });
+            };
+          r && l._addedPlotLB && n.moveLabel(e, a);
+          F(A) || n.movedLabel
+            ? A &&
+              A.textStr !== e &&
+              !r &&
+              (!A.textWidth ||
+                (a.style && a.style.width) ||
+                A.styles.width ||
+                A.css({ width: null }),
+              A.attr({ text: e }),
+              (A.textPxLength = A.getBBox().width))
+            : ((n.label = A = n.createLabel({ x: 0, y: 0 }, e, a)),
+              (n.rotation = 0));
+        };
+        f.prototype.createLabel = function (n, l, f) {
+          var w = this.axis,
+            r = w.chart;
+          if (
+            (n =
+              F(l) && f.enabled
+                ? r.renderer.text(l, n.x, n.y, f.useHTML).add(w.labelGroup)
+                : null)
+          )
+            r.styledMode || n.css(e(f.style)),
+              (n.textPxLength = n.getBBox().width);
+          return n;
+        };
+        f.prototype.destroy = function () {
+          L(this, this.axis);
+        };
+        f.prototype.getPosition = function (n, l, e, w) {
+          var r = this.axis,
+            d = r.chart,
+            g = (w && d.oldChartHeight) || d.chartHeight;
+          n = {
+            x: n
+              ? z(r.translate(l + e, null, null, w) + r.transB)
+              : r.left +
+                r.offset +
+                (r.opposite
+                  ? ((w && d.oldChartWidth) || d.chartWidth) - r.right - r.left
+                  : 0),
+            y: n
+              ? g - r.bottom + r.offset - (r.opposite ? r.height : 0)
+              : z(g - r.translate(l + e, null, null, w) - r.transB),
+          };
+          n.y = m(n.y, -1e5, 1e5);
+          C(this, "afterGetPosition", { pos: n });
+          return n;
+        };
+        f.prototype.getLabelPosition = function (n, l, e, w, r, d, g, c) {
+          var a = this.axis,
+            q = a.transA,
+            p =
+              a.isLinked && a.linkedParent
+                ? a.linkedParent.reversed
+                : a.reversed,
+            B = a.staggerLines,
+            A = a.tickRotCorr || { x: 0, y: 0 },
+            f = r.y,
+            h =
+              w || a.reserveSpaceDefault
+                ? 0
+                : -a.labelOffset * ("center" === a.labelAlign ? 0.5 : 1),
+            v = {};
+          F(f) ||
+            (f =
+              0 === a.side
+                ? e.rotation
+                  ? -8
+                  : -e.getBBox().height
+                : 2 === a.side
+                ? A.y + 8
+                : Math.cos(e.rotation * x) *
+                  (A.y - e.getBBox(!1, 0).height / 2));
+          n = n + r.x + h + A.x - (d && w ? d * q * (p ? -1 : 1) : 0);
+          l = l + f - (d && !w ? d * q * (p ? 1 : -1) : 0);
+          B &&
+            ((e = (g / (c || 1)) % B),
+            a.opposite && (e = B - e - 1),
+            (l += (a.labelOffset / B) * e));
+          v.x = n;
+          v.y = Math.round(l);
+          C(this, "afterGetLabelPosition", {
+            pos: v,
+            tickmarkOffset: d,
+            index: g,
+          });
+          return v;
+        };
+        f.prototype.getLabelSize = function () {
+          return this.label
+            ? this.label.getBBox()[this.axis.horiz ? "height" : "width"]
+            : 0;
+        };
+        f.prototype.getMarkPath = function (n, e, f, w, r, d) {
+          return d.crispLine(
+            [
+              ["M", n, e],
+              ["L", n + (r ? 0 : -f), e + (r ? f : 0)],
+            ],
+            w
+          );
+        };
+        f.prototype.handleOverflow = function (n) {
+          var e = this.axis,
+            f = e.options.labels,
+            w = n.x,
+            r = e.chart.chartWidth,
+            d = e.chart.spacing,
+            g = v(e.labelLeft, Math.min(e.pos, d[3]));
+          d = v(
+            e.labelRight,
+            Math.max(e.isRadial ? 0 : e.pos + e.len, r - d[1])
+          );
+          var c = this.label,
+            a = this.rotation,
+            q = { left: 0, center: 0.5, right: 1 }[
+              e.labelAlign || c.attr("align")
+            ],
+            p = c.getBBox().width,
+            B = e.getSlotWidth(this),
+            A = B,
+            G = 1,
+            h,
+            D = {};
+          if (a || "justify" !== v(f.overflow, "justify"))
+            0 > a && w - q * p < g
+              ? (h = Math.round(w / Math.cos(a * x) - g))
+              : 0 < a &&
+                w + q * p > d &&
+                (h = Math.round((r - w) / Math.cos(a * x)));
+          else if (
+            ((r = w + (1 - q) * p),
+            w - q * p < g
+              ? (A = n.x + A * (1 - q) - g)
+              : r > d && ((A = d - n.x + A * q), (G = -1)),
+            (A = Math.min(B, A)),
+            A < B &&
+              "center" === e.labelAlign &&
+              (n.x += G * (B - A - q * (B - Math.min(p, A)))),
+            p > A || (e.autoRotation && (c.styles || {}).width))
+          )
+            h = A;
+          h &&
+            (this.shortenLabel
+              ? this.shortenLabel()
+              : ((D.width = Math.floor(h) + "px"),
+                (f.style || {}).textOverflow || (D.textOverflow = "ellipsis"),
+                c.css(D)));
+        };
+        f.prototype.moveLabel = function (n, e) {
+          var l = this,
+            w = l.label,
+            r = !1,
+            d = l.axis,
+            g = d.reversed;
+          w && w.textStr === n
+            ? ((l.movedLabel = w), (r = !0), delete l.label)
+            : I(d.ticks, function (a) {
+                r ||
+                  a.isNew ||
+                  a === l ||
+                  !a.label ||
+                  a.label.textStr !== n ||
+                  ((l.movedLabel = a.label),
+                  (r = !0),
+                  (a.labelPos = l.movedLabel.xy),
+                  delete a.label);
+              });
+          if (!r && (l.labelPos || w)) {
+            var c = l.labelPos || w.xy;
+            w = d.horiz ? (g ? 0 : d.width + d.left) : c.x;
+            d = d.horiz ? c.y : g ? d.width + d.left : 0;
+            l.movedLabel = l.createLabel({ x: w, y: d }, n, e);
+            l.movedLabel && l.movedLabel.attr({ opacity: 0 });
+          }
+        };
+        f.prototype.render = function (e, l, f) {
+          var n = this.axis,
+            r = n.horiz,
+            d = this.pos,
+            g = v(this.tickmarkOffset, n.tickmarkOffset);
+          d = this.getPosition(r, d, g, l);
+          g = d.x;
+          var c = d.y;
+          n = (r && g === n.pos + n.len) || (!r && c === n.pos) ? -1 : 1;
+          f = v(f, 1);
+          this.isActive = !0;
+          this.renderGridLine(l, f, n);
+          this.renderMark(d, f, n);
+          this.renderLabel(d, l, f, e);
+          this.isNew = !1;
+          C(this, "afterRender");
+        };
+        f.prototype.renderGridLine = function (n, e, f) {
+          var l = this.axis,
+            r = l.options,
+            d = this.gridLine,
+            g = {},
+            c = this.pos,
+            a = this.type,
+            q = v(this.tickmarkOffset, l.tickmarkOffset),
+            p = l.chart.renderer,
+            B = a ? a + "Grid" : "grid",
+            A = r[B + "LineWidth"],
+            G = r[B + "LineColor"];
+          r = r[B + "LineDashStyle"];
+          d ||
+            (l.chart.styledMode ||
+              ((g.stroke = G), (g["stroke-width"] = A), r && (g.dashstyle = r)),
+            a || (g.zIndex = 1),
+            n && (e = 0),
+            (this.gridLine = d =
+              p
+                .path()
+                .attr(g)
+                .addClass("highcharts-" + (a ? a + "-" : "") + "grid-line")
+                .add(l.gridGroup)));
+          if (
+            d &&
+            (f = l.getPlotLinePath({
+              value: c + q,
+              lineWidth: d.strokeWidth() * f,
+              force: "pass",
+              old: n,
+            }))
+          )
+            d[n || this.isNew ? "attr" : "animate"]({ d: f, opacity: e });
+        };
+        f.prototype.renderMark = function (n, e, f) {
+          var l = this.axis,
+            r = l.options,
+            d = l.chart.renderer,
+            g = this.type,
+            c = g ? g + "Tick" : "tick",
+            a = l.tickSize(c),
+            q = this.mark,
+            p = !q,
+            B = n.x;
+          n = n.y;
+          var A = v(r[c + "Width"], !g && l.isXAxis ? 1 : 0);
+          r = r[c + "Color"];
+          a &&
+            (l.opposite && (a[0] = -a[0]),
+            p &&
+              ((this.mark = q =
+                d
+                  .path()
+                  .addClass("highcharts-" + (g ? g + "-" : "") + "tick")
+                  .add(l.axisGroup)),
+              l.chart.styledMode || q.attr({ stroke: r, "stroke-width": A })),
+            q[p ? "attr" : "animate"]({
+              d: this.getMarkPath(B, n, a[0], q.strokeWidth() * f, l.horiz, d),
+              opacity: e,
+            }));
+        };
+        f.prototype.renderLabel = function (e, l, f, w) {
+          var n = this.axis,
+            d = n.horiz,
+            g = n.options,
+            c = this.label,
+            a = g.labels,
+            q = a.step;
+          n = v(this.tickmarkOffset, n.tickmarkOffset);
+          var p = !0,
+            B = e.x;
+          e = e.y;
+          c &&
+            y(B) &&
+            ((c.xy = e = this.getLabelPosition(B, e, c, d, a, n, w, q)),
+            (this.isFirst && !this.isLast && !v(g.showFirstLabel, 1)) ||
+            (this.isLast && !this.isFirst && !v(g.showLastLabel, 1))
+              ? (p = !1)
+              : !d ||
+                a.step ||
+                a.rotation ||
+                l ||
+                0 === f ||
+                this.handleOverflow(e),
+            q && w % q && (p = !1),
+            p && y(e.y)
+              ? ((e.opacity = f),
+                c[this.isNewLabel ? "attr" : "animate"](e),
+                (this.isNewLabel = !1))
+              : (c.attr("y", -9999), (this.isNewLabel = !0)));
+        };
+        f.prototype.replaceMovedLabel = function () {
+          var e = this.label,
+            l = this.axis,
+            f = l.reversed;
+          if (e && !this.isNew) {
+            var w = l.horiz ? (f ? l.left : l.width + l.left) : e.xy.x;
+            f = l.horiz ? e.xy.y : f ? l.width + l.top : l.top;
+            e.animate({ x: w, y: f, opacity: 0 }, void 0, e.destroy);
+            delete this.label;
+          }
+          l.isDirty = !0;
+          this.label = this.movedLabel;
+          delete this.movedLabel;
+        };
+        return f;
+      })();
+      f.Tick = h;
+      return f.Tick;
+    }
+  );
+  N(
+    m,
+    "Core/Time.js",
+    [m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.defined,
+        z = h.error,
+        F = h.extend,
+        L = h.isObject,
+        K = h.merge,
+        C = h.objectEach,
+        y = h.pad,
+        e = h.pick,
+        I = h.splat,
+        v = h.timeUnits,
+        x = f.win;
+      h = (function () {
+        function h(e) {
+          this.options = {};
+          this.variableTimezone = this.useUTC = !1;
+          this.Date = x.Date;
+          this.getTimezoneOffset = this.timezoneOffsetFunction();
+          this.update(e);
+        }
+        h.prototype.get = function (e, l) {
+          if (this.variableTimezone || this.timezoneOffset) {
+            var n = l.getTime(),
+              f = n - this.getTimezoneOffset(l);
+            l.setTime(f);
+            e = l["getUTC" + e]();
+            l.setTime(n);
+            return e;
+          }
+          return this.useUTC ? l["getUTC" + e]() : l["get" + e]();
+        };
+        h.prototype.set = function (e, l, f) {
+          if (this.variableTimezone || this.timezoneOffset) {
+            if ("Milliseconds" === e || "Seconds" === e || "Minutes" === e)
+              return l["setUTC" + e](f);
+            var n = this.getTimezoneOffset(l);
+            n = l.getTime() - n;
+            l.setTime(n);
+            l["setUTC" + e](f);
+            e = this.getTimezoneOffset(l);
+            n = l.getTime() + e;
+            return l.setTime(n);
+          }
+          return this.useUTC ? l["setUTC" + e](f) : l["set" + e](f);
+        };
+        h.prototype.update = function (n) {
+          var l = e(n && n.useUTC, !0);
+          this.options = n = K(!0, this.options || {}, n);
+          this.Date = n.Date || x.Date || Date;
+          this.timezoneOffset = (this.useUTC = l) && n.timezoneOffset;
+          this.getTimezoneOffset = this.timezoneOffsetFunction();
+          this.variableTimezone = !(l && !n.getTimezoneOffset && !n.timezone);
+        };
+        h.prototype.makeTime = function (n, l, h, w, r, d) {
+          if (this.useUTC) {
+            var g = this.Date.UTC.apply(0, arguments);
+            var c = this.getTimezoneOffset(g);
+            g += c;
+            var a = this.getTimezoneOffset(g);
+            c !== a
+              ? (g += a - c)
+              : c - 36e5 !== this.getTimezoneOffset(g - 36e5) ||
+                f.isSafari ||
+                (g -= 36e5);
+          } else
+            g = new this.Date(
+              n,
+              l,
+              e(h, 1),
+              e(w, 0),
+              e(r, 0),
+              e(d, 0)
+            ).getTime();
+          return g;
+        };
+        h.prototype.timezoneOffsetFunction = function () {
+          var e = this,
+            l = this.options,
+            f = l.moment || x.moment;
+          if (!this.useUTC)
+            return function (e) {
+              return 6e4 * new Date(e.toString()).getTimezoneOffset();
+            };
+          if (l.timezone) {
+            if (f)
+              return function (e) {
+                return 6e4 * -f.tz(e, l.timezone).utcOffset();
+              };
+            z(25);
+          }
+          return this.useUTC && l.getTimezoneOffset
+            ? function (e) {
+                return 6e4 * l.getTimezoneOffset(e.valueOf());
+              }
+            : function () {
+                return 6e4 * (e.timezoneOffset || 0);
+              };
+        };
+        h.prototype.dateFormat = function (n, l, h) {
+          var w;
+          if (!m(l) || isNaN(l))
+            return (
+              (null === (w = f.defaultOptions.lang) || void 0 === w
+                ? void 0
+                : w.invalidDate) || ""
+            );
+          n = e(n, "%Y-%m-%d %H:%M:%S");
+          var r = this;
+          w = new this.Date(l);
+          var d = this.get("Hours", w),
+            g = this.get("Day", w),
+            c = this.get("Date", w),
+            a = this.get("Month", w),
+            q = this.get("FullYear", w),
+            p = f.defaultOptions.lang,
+            B = null === p || void 0 === p ? void 0 : p.weekdays,
+            A = null === p || void 0 === p ? void 0 : p.shortWeekdays;
+          w = F(
+            {
+              a: A ? A[g] : B[g].substr(0, 3),
+              A: B[g],
+              d: y(c),
+              e: y(c, 2, " "),
+              w: g,
+              b: p.shortMonths[a],
+              B: p.months[a],
+              m: y(a + 1),
+              o: a + 1,
+              y: q.toString().substr(2, 2),
+              Y: q,
+              H: y(d),
+              k: d,
+              I: y(d % 12 || 12),
+              l: d % 12 || 12,
+              M: y(this.get("Minutes", w)),
+              p: 12 > d ? "AM" : "PM",
+              P: 12 > d ? "am" : "pm",
+              S: y(w.getSeconds()),
+              L: y(Math.floor(l % 1e3), 3),
+            },
+            f.dateFormats
+          );
+          C(w, function (a, c) {
+            for (; -1 !== n.indexOf("%" + c); )
+              n = n.replace(
+                "%" + c,
+                "function" === typeof a ? a.call(r, l) : a
+              );
+          });
+          return h ? n.substr(0, 1).toUpperCase() + n.substr(1) : n;
+        };
+        h.prototype.resolveDTLFormat = function (e) {
+          return L(e, !0)
+            ? e
+            : ((e = I(e)), { main: e[0], from: e[1], to: e[2] });
+        };
+        h.prototype.getTimeTicks = function (n, l, f, h) {
+          var r = this,
+            d = [],
+            g = {};
+          var c = new r.Date(l);
+          var a = n.unitRange,
+            q = n.count || 1,
+            p;
+          h = e(h, 1);
+          if (m(l)) {
+            r.set(
+              "Milliseconds",
+              c,
+              a >= v.second ? 0 : q * Math.floor(r.get("Milliseconds", c) / q)
+            );
+            a >= v.second &&
+              r.set(
+                "Seconds",
+                c,
+                a >= v.minute ? 0 : q * Math.floor(r.get("Seconds", c) / q)
+              );
+            a >= v.minute &&
+              r.set(
+                "Minutes",
+                c,
+                a >= v.hour ? 0 : q * Math.floor(r.get("Minutes", c) / q)
+              );
+            a >= v.hour &&
+              r.set(
+                "Hours",
+                c,
+                a >= v.day ? 0 : q * Math.floor(r.get("Hours", c) / q)
+              );
+            a >= v.day &&
+              r.set(
+                "Date",
+                c,
+                a >= v.month
+                  ? 1
+                  : Math.max(1, q * Math.floor(r.get("Date", c) / q))
+              );
+            if (a >= v.month) {
+              r.set(
+                "Month",
+                c,
+                a >= v.year ? 0 : q * Math.floor(r.get("Month", c) / q)
+              );
+              var B = r.get("FullYear", c);
+            }
+            a >= v.year && r.set("FullYear", c, B - (B % q));
+            a === v.week &&
+              ((B = r.get("Day", c)),
+              r.set("Date", c, r.get("Date", c) - B + h + (B < h ? -7 : 0)));
+            B = r.get("FullYear", c);
+            h = r.get("Month", c);
+            var A = r.get("Date", c),
+              w = r.get("Hours", c);
+            l = c.getTime();
+            r.variableTimezone &&
+              (p =
+                f - l > 4 * v.month ||
+                r.getTimezoneOffset(l) !== r.getTimezoneOffset(f));
+            l = c.getTime();
+            for (c = 1; l < f; )
+              d.push(l),
+                (l =
+                  a === v.year
+                    ? r.makeTime(B + c * q, 0)
+                    : a === v.month
+                    ? r.makeTime(B, h + c * q)
+                    : !p || (a !== v.day && a !== v.week)
+                    ? p && a === v.hour && 1 < q
+                      ? r.makeTime(B, h, A, w + c * q)
+                      : l + a * q
+                    : r.makeTime(B, h, A + c * q * (a === v.day ? 1 : 7))),
+                c++;
+            d.push(l);
+            a <= v.hour &&
+              1e4 > d.length &&
+              d.forEach(function (a) {
+                0 === a % 18e5 &&
+                  "000000000" === r.dateFormat("%H%M%S%L", a) &&
+                  (g[a] = "day");
+              });
+          }
+          d.info = F(n, { higherRanks: g, totalRange: a * q });
+          return d;
+        };
+        return h;
+      })();
+      f.Time = h;
+      return f.Time;
+    }
+  );
+  N(
+    m,
+    "Core/Options.js",
+    [
+      m["Core/Globals.js"],
+      m["Core/Color/Color.js"],
+      m["Core/Time.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z) {
+      var F = f.isTouchDevice,
+        P = f.svg;
+      h = h.parse;
+      z = z.merge;
+      ("");
+      f.defaultOptions = {
+        colors:
+          "#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1".split(
+            " "
+          ),
+        symbols: ["circle", "diamond", "square", "triangle", "triangle-down"],
+        lang: {
+          loading: "Loading...",
+          months:
+            "January February March April May June July August September October November December".split(
+              " "
+            ),
+          shortMonths: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(
+            " "
+          ),
+          weekdays:
+            "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(
+              " "
+            ),
+          decimalPoint: ".",
+          numericSymbols: "kMGTPE".split(""),
+          resetZoom: "Reset zoom",
+          resetZoomTitle: "Reset zoom level 1:1",
+          thousandsSep: " ",
+        },
+        global: {},
+        time: {
+          Date: void 0,
+          getTimezoneOffset: void 0,
+          timezone: void 0,
+          timezoneOffset: 0,
+          useUTC: !0,
+        },
+        chart: {
+          styledMode: !1,
+          borderRadius: 0,
+          colorCount: 10,
+          defaultSeriesType: "line",
+          ignoreHiddenSeries: !0,
+          spacing: [10, 10, 15, 10],
+          resetZoomButton: {
+            theme: { zIndex: 6 },
+            position: { align: "right", x: -10, y: 10 },
+          },
+          width: null,
+          height: null,
+          borderColor: "#335cad",
+          backgroundColor: "#ffffff",
+          plotBorderColor: "#cccccc",
+        },
+        title: {
+          text: "Chart title",
+          align: "center",
+          margin: 15,
+          widthAdjust: -44,
+        },
+        subtitle: { text: "", align: "center", widthAdjust: -44 },
+        caption: {
+          margin: 15,
+          text: "",
+          align: "left",
+          verticalAlign: "bottom",
+        },
+        plotOptions: {},
+        labels: { style: { position: "absolute", color: "#333333" } },
+        legend: {
+          enabled: !0,
+          align: "center",
+          alignColumns: !0,
+          layout: "horizontal",
+          labelFormatter: function () {
+            return this.name;
+          },
+          borderColor: "#999999",
+          borderRadius: 0,
+          navigation: { activeColor: "#003399", inactiveColor: "#cccccc" },
+          itemStyle: {
+            color: "#333333",
+            cursor: "pointer",
+            fontSize: "12px",
+            fontWeight: "bold",
+            textOverflow: "ellipsis",
+          },
+          itemHoverStyle: { color: "#000000" },
+          itemHiddenStyle: { color: "#cccccc" },
+          shadow: !1,
+          itemCheckboxStyle: {
+            position: "absolute",
+            width: "13px",
+            height: "13px",
+          },
+          squareSymbol: !0,
+          symbolPadding: 5,
+          verticalAlign: "bottom",
+          x: 0,
+          y: 0,
+          title: { style: { fontWeight: "bold" } },
+        },
+        loading: {
+          labelStyle: { fontWeight: "bold", position: "relative", top: "45%" },
+          style: {
+            position: "absolute",
+            backgroundColor: "#ffffff",
+            opacity: 0.5,
+            textAlign: "center",
+          },
+        },
+        tooltip: {
+          enabled: !0,
+          animation: P,
+          borderRadius: 3,
+          dateTimeLabelFormats: {
+            millisecond: "%A, %b %e, %H:%M:%S.%L",
+            second: "%A, %b %e, %H:%M:%S",
+            minute: "%A, %b %e, %H:%M",
+            hour: "%A, %b %e, %H:%M",
+            day: "%A, %b %e, %Y",
+            week: "Week from %A, %b %e, %Y",
+            month: "%B %Y",
+            year: "%Y",
+          },
+          footerFormat: "",
+          padding: 8,
+          snap: F ? 25 : 10,
+          headerFormat: '<span style="font-size: 10px">{point.key}</span><br/>',
+          pointFormat:
+            '<span style="color:{point.color}">\u25cf</span> {series.name}: <b>{point.y}</b><br/>',
+          backgroundColor: h("#f7f7f7").setOpacity(0.85).get(),
+          borderWidth: 1,
+          shadow: !0,
+          style: {
+            color: "#333333",
+            cursor: "default",
+            fontSize: "12px",
+            whiteSpace: "nowrap",
+          },
+        },
+        credits: {
+          enabled: !0,
+          href: "https://www.highcharts.com?credits",
+          position: { align: "right", x: -10, verticalAlign: "bottom", y: -5 },
+          style: { cursor: "pointer", color: "#999999", fontSize: "9px" },
+          text: "Highcharts.com",
+        },
+      };
+      ("");
+      f.time = new m(z(f.defaultOptions.global, f.defaultOptions.time));
+      f.dateFormat = function (h, m, y) {
+        return f.time.dateFormat(h, m, y);
+      };
+      return {
+        dateFormat: f.dateFormat,
+        defaultOptions: f.defaultOptions,
+        time: f.time,
+      };
+    }
+  );
+  N(
+    m,
+    "Core/Axis/Axis.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Color/Color.js"],
+      m["Core/Globals.js"],
+      m["Core/Axis/Tick.js"],
+      m["Core/Utilities.js"],
+      m["Core/Options.js"],
+    ],
+    function (f, h, m, z, F, L) {
+      var K = f.animObject,
+        C = F.addEvent,
+        y = F.arrayMax,
+        e = F.arrayMin,
+        I = F.clamp,
+        v = F.correctFloat,
+        x = F.defined,
+        D = F.destroyObjectProperties,
+        n = F.error,
+        l = F.extend,
+        J = F.fireEvent,
+        w = F.format,
+        r = F.getMagnitude,
+        d = F.isArray,
+        g = F.isFunction,
+        c = F.isNumber,
+        a = F.isString,
+        q = F.merge,
+        p = F.normalizeTickInterval,
+        B = F.objectEach,
+        A = F.pick,
+        G = F.relativeLength,
+        M = F.removeEvent,
+        T = F.splat,
+        Q = F.syncTimeout,
+        O = L.defaultOptions,
+        E = m.deg2rad;
+      f = (function () {
+        function u(b, k) {
+          this.zoomEnabled =
+            this.width =
+            this.visible =
+            this.userOptions =
+            this.translationSlope =
+            this.transB =
+            this.transA =
+            this.top =
+            this.ticks =
+            this.tickRotCorr =
+            this.tickPositions =
+            this.tickmarkOffset =
+            this.tickInterval =
+            this.tickAmount =
+            this.side =
+            this.series =
+            this.right =
+            this.positiveValuesOnly =
+            this.pos =
+            this.pointRangePadding =
+            this.pointRange =
+            this.plotLinesAndBandsGroups =
+            this.plotLinesAndBands =
+            this.paddedTicks =
+            this.overlap =
+            this.options =
+            this.oldMin =
+            this.oldMax =
+            this.offset =
+            this.names =
+            this.minPixelPadding =
+            this.minorTicks =
+            this.minorTickInterval =
+            this.min =
+            this.maxLabelLength =
+            this.max =
+            this.len =
+            this.left =
+            this.labelFormatter =
+            this.labelEdge =
+            this.isLinked =
+            this.height =
+            this.hasVisibleSeries =
+            this.hasNames =
+            this.coll =
+            this.closestPointRange =
+            this.chart =
+            this.categories =
+            this.bottom =
+            this.alternateBands =
+              void 0;
+          this.init(b, k);
+        }
+        u.prototype.init = function (b, k) {
+          var a = k.isX,
+            c = this;
+          c.chart = b;
+          c.horiz = b.inverted && !c.isZAxis ? !a : a;
+          c.isXAxis = a;
+          c.coll = c.coll || (a ? "xAxis" : "yAxis");
+          J(this, "init", { userOptions: k });
+          c.opposite = k.opposite;
+          c.side =
+            k.side || (c.horiz ? (c.opposite ? 0 : 2) : c.opposite ? 1 : 3);
+          c.setOptions(k);
+          var d = this.options,
+            p = d.type;
+          c.labelFormatter = d.labels.formatter || c.defaultLabelFormatter;
+          c.userOptions = k;
+          c.minPixelPadding = 0;
+          c.reversed = d.reversed;
+          c.visible = !1 !== d.visible;
+          c.zoomEnabled = !1 !== d.zoomEnabled;
+          c.hasNames = "category" === p || !0 === d.categories;
+          c.categories = d.categories || c.hasNames;
+          c.names || ((c.names = []), (c.names.keys = {}));
+          c.plotLinesAndBandsGroups = {};
+          c.positiveValuesOnly = !!c.logarithmic;
+          c.isLinked = x(d.linkedTo);
+          c.ticks = {};
+          c.labelEdge = [];
+          c.minorTicks = {};
+          c.plotLinesAndBands = [];
+          c.alternateBands = {};
+          c.len = 0;
+          c.minRange = c.userMinRange = d.minRange || d.maxZoom;
+          c.range = d.range;
+          c.offset = d.offset || 0;
+          c.max = null;
+          c.min = null;
+          c.crosshair = A(
+            d.crosshair,
+            T(b.options.tooltip.crosshairs)[a ? 0 : 1],
+            !1
+          );
+          k = c.options.events;
+          -1 === b.axes.indexOf(c) &&
+            (a ? b.axes.splice(b.xAxis.length, 0, c) : b.axes.push(c),
+            b[c.coll].push(c));
+          c.series = c.series || [];
+          b.inverted &&
+            !c.isZAxis &&
+            a &&
+            "undefined" === typeof c.reversed &&
+            (c.reversed = !0);
+          c.labelRotation = c.options.labels.rotation;
+          B(k, function (b, k) {
+            g(b) && C(c, k, b);
+          });
+          J(this, "afterInit");
+        };
+        u.prototype.setOptions = function (b) {
+          this.options = q(
+            u.defaultOptions,
+            "yAxis" === this.coll && u.defaultYAxisOptions,
+            [
+              u.defaultTopAxisOptions,
+              u.defaultRightAxisOptions,
+              u.defaultBottomAxisOptions,
+              u.defaultLeftAxisOptions,
+            ][this.side],
+            q(O[this.coll], b)
+          );
+          J(this, "afterSetOptions", { userOptions: b });
+        };
+        u.prototype.defaultLabelFormatter = function () {
+          var b = this.axis,
+            k = c(this.value) ? this.value : NaN,
+            a = b.chart.time,
+            d = b.categories,
+            g = this.dateTimeLabelFormat,
+            p = O.lang,
+            q = p.numericSymbols;
+          p = p.numericSymbolMagnitude || 1e3;
+          var e = q && q.length,
+            u = b.options.labels.format;
+          b = b.logarithmic ? Math.abs(k) : b.tickInterval;
+          var B = this.chart,
+            l = B.numberFormatter;
+          if (u) var A = w(u, this, B);
+          else if (d) A = "" + this.value;
+          else if (g) A = a.dateFormat(g, k);
+          else if (e && 1e3 <= b)
+            for (; e-- && "undefined" === typeof A; )
+              (a = Math.pow(p, e + 1)),
+                b >= a &&
+                  0 === (10 * k) % a &&
+                  null !== q[e] &&
+                  0 !== k &&
+                  (A = l(k / a, -1) + q[e]);
+          "undefined" === typeof A &&
+            (A = 1e4 <= Math.abs(k) ? l(k, -1) : l(k, -1, void 0, ""));
+          return A;
+        };
+        u.prototype.getSeriesExtremes = function () {
+          var b = this,
+            k = b.chart,
+            a;
+          J(this, "getSeriesExtremes", null, function () {
+            b.hasVisibleSeries = !1;
+            b.dataMin = b.dataMax = b.threshold = null;
+            b.softThreshold = !b.isXAxis;
+            b.stacking && b.stacking.buildStacks();
+            b.series.forEach(function (t) {
+              if (t.visible || !k.options.chart.ignoreHiddenSeries) {
+                var d = t.options,
+                  g = d.threshold;
+                b.hasVisibleSeries = !0;
+                b.positiveValuesOnly && 0 >= g && (g = null);
+                if (b.isXAxis) {
+                  if (((d = t.xData), d.length)) {
+                    d = b.logarithmic ? d.filter(b.validatePositiveValue) : d;
+                    a = t.getXExtremes(d);
+                    var p = a.min;
+                    var q = a.max;
+                    c(p) ||
+                      p instanceof Date ||
+                      ((d = d.filter(c)),
+                      (a = t.getXExtremes(d)),
+                      (p = a.min),
+                      (q = a.max));
+                    d.length &&
+                      ((b.dataMin = Math.min(A(b.dataMin, p), p)),
+                      (b.dataMax = Math.max(A(b.dataMax, q), q)));
+                  }
+                } else if (
+                  ((t = t.applyExtremes()),
+                  c(t.dataMin) &&
+                    ((p = t.dataMin),
+                    (b.dataMin = Math.min(A(b.dataMin, p), p))),
+                  c(t.dataMax) &&
+                    ((q = t.dataMax),
+                    (b.dataMax = Math.max(A(b.dataMax, q), q))),
+                  x(g) && (b.threshold = g),
+                  !d.softThreshold || b.positiveValuesOnly)
+                )
+                  b.softThreshold = !1;
+              }
+            });
+          });
+          J(this, "afterGetSeriesExtremes");
+        };
+        u.prototype.translate = function (b, a, t, d, g, p) {
+          var k = this.linkedParent || this,
+            q = 1,
+            e = 0,
+            H = d ? k.oldTransA : k.transA;
+          d = d ? k.oldMin : k.min;
+          var u = k.minPixelPadding;
+          g =
+            (k.isOrdinal ||
+              (k.brokenAxis && k.brokenAxis.hasBreaks) ||
+              (k.logarithmic && g)) &&
+            k.lin2val;
+          H || (H = k.transA);
+          t && ((q *= -1), (e = k.len));
+          k.reversed && ((q *= -1), (e -= q * (k.sector || k.len)));
+          a
+            ? ((b = (b * q + e - u) / H + d), g && (b = k.lin2val(b)))
+            : (g && (b = k.val2lin(b)),
+              (b = c(d)
+                ? q * (b - d) * H + e + q * u + (c(p) ? H * p : 0)
+                : void 0));
+          return b;
+        };
+        u.prototype.toPixels = function (b, k) {
+          return (
+            this.translate(b, !1, !this.horiz, null, !0) + (k ? 0 : this.pos)
+          );
+        };
+        u.prototype.toValue = function (b, k) {
+          return this.translate(
+            b - (k ? 0 : this.pos),
+            !0,
+            !this.horiz,
+            null,
+            !0
+          );
+        };
+        u.prototype.getPlotLinePath = function (b) {
+          function k(b, a, k) {
+            if (("pass" !== l && b < a) || b > k)
+              l ? (b = I(b, a, k)) : (E = !0);
+            return b;
+          }
+          var a = this,
+            d = a.chart,
+            g = a.left,
+            p = a.top,
+            q = b.old,
+            e = b.value,
+            u = b.translatedValue,
+            B = b.lineWidth,
+            l = b.force,
+            r,
+            n,
+            f,
+            h,
+            w = (q && d.oldChartHeight) || d.chartHeight,
+            G = (q && d.oldChartWidth) || d.chartWidth,
+            E,
+            v = a.transB;
+          b = {
+            value: e,
+            lineWidth: B,
+            old: q,
+            force: l,
+            acrossPanes: b.acrossPanes,
+            translatedValue: u,
+          };
+          J(this, "getPlotLinePath", b, function (b) {
+            u = A(u, a.translate(e, null, null, q));
+            u = I(u, -1e5, 1e5);
+            r = f = Math.round(u + v);
+            n = h = Math.round(w - u - v);
+            c(u)
+              ? a.horiz
+                ? ((n = p), (h = w - a.bottom), (r = f = k(r, g, g + a.width)))
+                : ((r = g), (f = G - a.right), (n = h = k(n, p, p + a.height)))
+              : ((E = !0), (l = !1));
+            b.path =
+              E && !l
+                ? null
+                : d.renderer.crispLine(
+                    [
+                      ["M", r, n],
+                      ["L", f, h],
+                    ],
+                    B || 1
+                  );
+          });
+          return b.path;
+        };
+        u.prototype.getLinearTickPositions = function (b, a, c) {
+          var k = v(Math.floor(a / b) * b);
+          c = v(Math.ceil(c / b) * b);
+          var t = [],
+            d;
+          v(k + b) === k && (d = 20);
+          if (this.single) return [a];
+          for (a = k; a <= c; ) {
+            t.push(a);
+            a = v(a + b, d);
+            if (a === g) break;
+            var g = a;
+          }
+          return t;
+        };
+        u.prototype.getMinorTickInterval = function () {
+          var b = this.options;
+          return !0 === b.minorTicks
+            ? A(b.minorTickInterval, "auto")
+            : !1 === b.minorTicks
+            ? null
+            : b.minorTickInterval;
+        };
+        u.prototype.getMinorTickPositions = function () {
+          var b = this.options,
+            a = this.tickPositions,
+            c = this.minorTickInterval,
+            d = [],
+            g = this.pointRangePadding || 0,
+            p = this.min - g;
+          g = this.max + g;
+          var q = g - p;
+          if (q && q / c < this.len / 3) {
+            var e = this.logarithmic;
+            if (e)
+              this.paddedTicks.forEach(function (b, a, k) {
+                a &&
+                  d.push.apply(d, e.getLogTickPositions(c, k[a - 1], k[a], !0));
+              });
+            else if (this.dateTime && "auto" === this.getMinorTickInterval())
+              d = d.concat(
+                this.getTimeTicks(
+                  this.dateTime.normalizeTimeTickInterval(c),
+                  p,
+                  g,
+                  b.startOfWeek
+                )
+              );
+            else
+              for (b = p + ((a[0] - p) % c); b <= g && b !== d[0]; b += c)
+                d.push(b);
+          }
+          0 !== d.length && this.trimTicks(d);
+          return d;
+        };
+        u.prototype.adjustForMinRange = function () {
+          var b = this.options,
+            a = this.min,
+            c = this.max,
+            d = this.logarithmic,
+            g,
+            p,
+            q,
+            u,
+            B;
+          this.isXAxis &&
+            "undefined" === typeof this.minRange &&
+            !d &&
+            (x(b.min) || x(b.max)
+              ? (this.minRange = null)
+              : (this.series.forEach(function (b) {
+                  u = b.xData;
+                  for (p = B = b.xIncrement ? 1 : u.length - 1; 0 < p; p--)
+                    if (
+                      ((q = u[p] - u[p - 1]), "undefined" === typeof g || q < g)
+                    )
+                      g = q;
+                }),
+                (this.minRange = Math.min(
+                  5 * g,
+                  this.dataMax - this.dataMin
+                ))));
+          if (c - a < this.minRange) {
+            var l = this.dataMax - this.dataMin >= this.minRange;
+            var r = this.minRange;
+            var n = (r - c + a) / 2;
+            n = [a - n, A(b.min, a - n)];
+            l &&
+              (n[2] = this.logarithmic
+                ? this.logarithmic.log2lin(this.dataMin)
+                : this.dataMin);
+            a = y(n);
+            c = [a + r, A(b.max, a + r)];
+            l && (c[2] = d ? d.log2lin(this.dataMax) : this.dataMax);
+            c = e(c);
+            c - a < r && ((n[0] = c - r), (n[1] = A(b.min, c - r)), (a = y(n)));
+          }
+          this.min = a;
+          this.max = c;
+        };
+        u.prototype.getClosest = function () {
+          var b;
+          this.categories
+            ? (b = 1)
+            : this.series.forEach(function (a) {
+                var k = a.closestPointRange,
+                  c = a.visible || !a.chart.options.chart.ignoreHiddenSeries;
+                !a.noSharedTooltip &&
+                  x(k) &&
+                  c &&
+                  (b = x(b) ? Math.min(b, k) : k);
+              });
+          return b;
+        };
+        u.prototype.nameToX = function (b) {
+          var a = d(this.categories),
+            c = a ? this.categories : this.names,
+            g = b.options.x;
+          b.series.requireSorting = !1;
+          x(g) ||
+            (g =
+              !1 === this.options.uniqueNames
+                ? b.series.autoIncrement()
+                : a
+                ? c.indexOf(b.name)
+                : A(c.keys[b.name], -1));
+          if (-1 === g) {
+            if (!a) var p = c.length;
+          } else p = g;
+          "undefined" !== typeof p &&
+            ((this.names[p] = b.name), (this.names.keys[b.name] = p));
+          return p;
+        };
+        u.prototype.updateNames = function () {
+          var b = this,
+            a = this.names;
+          0 < a.length &&
+            (Object.keys(a.keys).forEach(function (b) {
+              delete a.keys[b];
+            }),
+            (a.length = 0),
+            (this.minRange = this.userMinRange),
+            (this.series || []).forEach(function (a) {
+              a.xIncrement = null;
+              if (!a.points || a.isDirtyData)
+                (b.max = Math.max(b.max, a.xData.length - 1)),
+                  a.processData(),
+                  a.generatePoints();
+              a.data.forEach(function (k, c) {
+                if (k && k.options && "undefined" !== typeof k.name) {
+                  var d = b.nameToX(k);
+                  "undefined" !== typeof d &&
+                    d !== k.x &&
+                    ((k.x = d), (a.xData[c] = d));
+                }
+              });
+            }));
+        };
+        u.prototype.setAxisTranslation = function (b) {
+          var k = this,
+            c = k.max - k.min,
+            d = k.axisPointRange || 0,
+            g = 0,
+            p = 0,
+            q = k.linkedParent,
+            e = !!k.categories,
+            u = k.transA,
+            B = k.isXAxis;
+          if (B || e || d) {
+            var l = k.getClosest();
+            q
+              ? ((g = q.minPointOffset), (p = q.pointRangePadding))
+              : k.series.forEach(function (b) {
+                  var c = e
+                      ? 1
+                      : B
+                      ? A(b.options.pointRange, l, 0)
+                      : k.axisPointRange || 0,
+                    t = b.options.pointPlacement;
+                  d = Math.max(d, c);
+                  if (!k.single || e)
+                    (b = b.is("xrange") ? !B : B),
+                      (g = Math.max(g, b && a(t) ? 0 : c / 2)),
+                      (p = Math.max(p, b && "on" === t ? 0 : c));
+                });
+            q = k.ordinal && k.ordinal.slope && l ? k.ordinal.slope / l : 1;
+            k.minPointOffset = g *= q;
+            k.pointRangePadding = p *= q;
+            k.pointRange = Math.min(d, k.single && e ? 1 : c);
+            B && (k.closestPointRange = l);
+          }
+          b && (k.oldTransA = u);
+          k.translationSlope =
+            k.transA =
+            u =
+              k.staticScale || k.len / (c + p || 1);
+          k.transB = k.horiz ? k.left : k.bottom;
+          k.minPixelPadding = u * g;
+          J(this, "afterSetAxisTranslation");
+        };
+        u.prototype.minFromRange = function () {
+          return this.max - this.range;
+        };
+        u.prototype.setTickInterval = function (b) {
+          var a = this,
+            d = a.chart,
+            g = a.logarithmic,
+            q = a.options,
+            e = a.isXAxis,
+            u = a.isLinked,
+            B = q.maxPadding,
+            l = q.minPadding,
+            f = q.tickInterval,
+            h = q.tickPixelInterval,
+            w = a.categories,
+            G = c(a.threshold) ? a.threshold : null,
+            E = a.softThreshold;
+          a.dateTime || w || u || this.getTickAmount();
+          var O = A(a.userMin, q.min);
+          var D = A(a.userMax, q.max);
+          if (u) {
+            a.linkedParent = d[a.coll][q.linkedTo];
+            var M = a.linkedParent.getExtremes();
+            a.min = A(M.min, M.dataMin);
+            a.max = A(M.max, M.dataMax);
+            q.type !== a.linkedParent.options.type && n(11, 1, d);
+          } else {
+            if (E && x(G))
+              if (a.dataMin >= G) (M = G), (l = 0);
+              else if (a.dataMax <= G) {
+                var m = G;
+                B = 0;
+              }
+            a.min = A(O, M, a.dataMin);
+            a.max = A(D, m, a.dataMax);
+          }
+          g &&
+            (a.positiveValuesOnly &&
+              !b &&
+              0 >= Math.min(a.min, A(a.dataMin, a.min)) &&
+              n(10, 1, d),
+            (a.min = v(g.log2lin(a.min), 16)),
+            (a.max = v(g.log2lin(a.max), 16)));
+          a.range &&
+            x(a.max) &&
+            ((a.userMin = a.min = O = Math.max(a.dataMin, a.minFromRange())),
+            (a.userMax = D = a.max),
+            (a.range = null));
+          J(a, "foundExtremes");
+          a.beforePadding && a.beforePadding();
+          a.adjustForMinRange();
+          !(
+            w ||
+            a.axisPointRange ||
+            (a.stacking && a.stacking.usePercentage) ||
+            u
+          ) &&
+            x(a.min) &&
+            x(a.max) &&
+            (d = a.max - a.min) &&
+            (!x(O) && l && (a.min -= d * l), !x(D) && B && (a.max += d * B));
+          c(a.userMin) ||
+            (c(q.softMin) && q.softMin < a.min && (a.min = O = q.softMin),
+            c(q.floor) && (a.min = Math.max(a.min, q.floor)));
+          c(a.userMax) ||
+            (c(q.softMax) && q.softMax > a.max && (a.max = D = q.softMax),
+            c(q.ceiling) && (a.max = Math.min(a.max, q.ceiling)));
+          E &&
+            x(a.dataMin) &&
+            ((G = G || 0),
+            !x(O) && a.min < G && a.dataMin >= G
+              ? (a.min = a.options.minRange
+                  ? Math.min(G, a.max - a.minRange)
+                  : G)
+              : !x(D) &&
+                a.max > G &&
+                a.dataMax <= G &&
+                (a.max = a.options.minRange
+                  ? Math.max(G, a.min + a.minRange)
+                  : G));
+          a.tickInterval =
+            a.min === a.max ||
+            "undefined" === typeof a.min ||
+            "undefined" === typeof a.max
+              ? 1
+              : u && !f && h === a.linkedParent.options.tickPixelInterval
+              ? (f = a.linkedParent.tickInterval)
+              : A(
+                  f,
+                  this.tickAmount
+                    ? (a.max - a.min) / Math.max(this.tickAmount - 1, 1)
+                    : void 0,
+                  w ? 1 : ((a.max - a.min) * h) / Math.max(a.len, h)
+                );
+          e &&
+            !b &&
+            a.series.forEach(function (b) {
+              b.processData(a.min !== a.oldMin || a.max !== a.oldMax);
+            });
+          a.setAxisTranslation(!0);
+          J(this, "initialAxisTranslation");
+          a.pointRange &&
+            !f &&
+            (a.tickInterval = Math.max(a.pointRange, a.tickInterval));
+          b = A(
+            q.minTickInterval,
+            a.dateTime &&
+              !a.series.some(function (b) {
+                return b.noSharedTooltip;
+              })
+              ? a.closestPointRange
+              : 0
+          );
+          !f && a.tickInterval < b && (a.tickInterval = b);
+          a.dateTime ||
+            a.logarithmic ||
+            f ||
+            (a.tickInterval = p(
+              a.tickInterval,
+              void 0,
+              r(a.tickInterval),
+              A(
+                q.allowDecimals,
+                0.5 > a.tickInterval || void 0 !== this.tickAmount
+              ),
+              !!this.tickAmount
+            ));
+          this.tickAmount || (a.tickInterval = a.unsquish());
+          this.setTickPositions();
+        };
+        u.prototype.setTickPositions = function () {
+          var b = this.options,
+            a = b.tickPositions;
+          var c = this.getMinorTickInterval();
+          var d = b.tickPositioner,
+            g = this.hasVerticalPanning(),
+            p = "colorAxis" === this.coll,
+            q = (p || !g) && b.startOnTick;
+          g = (p || !g) && b.endOnTick;
+          this.tickmarkOffset =
+            this.categories &&
+            "between" === b.tickmarkPlacement &&
+            1 === this.tickInterval
+              ? 0.5
+              : 0;
+          this.minorTickInterval =
+            "auto" === c && this.tickInterval ? this.tickInterval / 5 : c;
+          this.single =
+            this.min === this.max &&
+            x(this.min) &&
+            !this.tickAmount &&
+            (parseInt(this.min, 10) === this.min || !1 !== b.allowDecimals);
+          this.tickPositions = c = a && a.slice();
+          !c &&
+            ((this.ordinal && this.ordinal.positions) ||
+            !(
+              (this.max - this.min) / this.tickInterval >
+              Math.max(2 * this.len, 200)
+            )
+              ? (c = this.dateTime
+                  ? this.getTimeTicks(
+                      this.dateTime.normalizeTimeTickInterval(
+                        this.tickInterval,
+                        b.units
+                      ),
+                      this.min,
+                      this.max,
+                      b.startOfWeek,
+                      this.ordinal && this.ordinal.positions,
+                      this.closestPointRange,
+                      !0
+                    )
+                  : this.logarithmic
+                  ? this.logarithmic.getLogTickPositions(
+                      this.tickInterval,
+                      this.min,
+                      this.max
+                    )
+                  : this.getLinearTickPositions(
+                      this.tickInterval,
+                      this.min,
+                      this.max
+                    ))
+              : ((c = [this.min, this.max]), n(19, !1, this.chart)),
+            c.length > this.len &&
+              ((c = [c[0], c.pop()]), c[0] === c[1] && (c.length = 1)),
+            (this.tickPositions = c),
+            d && (d = d.apply(this, [this.min, this.max]))) &&
+            (this.tickPositions = c = d);
+          this.paddedTicks = c.slice(0);
+          this.trimTicks(c, q, g);
+          this.isLinked ||
+            (this.single &&
+              2 > c.length &&
+              !this.categories &&
+              !this.series.some(function (b) {
+                return (
+                  b.is("heatmap") && "between" === b.options.pointPlacement
+                );
+              }) &&
+              ((this.min -= 0.5), (this.max += 0.5)),
+            a || d || this.adjustTickAmount());
+          J(this, "afterSetTickPositions");
+        };
+        u.prototype.trimTicks = function (b, a, c) {
+          var k = b[0],
+            d = b[b.length - 1],
+            t = (!this.isOrdinal && this.minPointOffset) || 0;
+          J(this, "trimTicks");
+          if (!this.isLinked) {
+            if (a && -Infinity !== k) this.min = k;
+            else for (; this.min - t > b[0]; ) b.shift();
+            if (c) this.max = d;
+            else for (; this.max + t < b[b.length - 1]; ) b.pop();
+            0 === b.length &&
+              x(k) &&
+              !this.options.tickPositions &&
+              b.push((d + k) / 2);
+          }
+        };
+        u.prototype.alignToOthers = function () {
+          var b = {},
+            a,
+            c = this.options;
+          !1 === this.chart.options.chart.alignTicks ||
+            !1 === c.alignTicks ||
+            !1 === c.startOnTick ||
+            !1 === c.endOnTick ||
+            this.logarithmic ||
+            this.chart[this.coll].forEach(function (k) {
+              var c = k.options;
+              c = [k.horiz ? c.left : c.top, c.width, c.height, c.pane].join();
+              k.series.length && (b[c] ? (a = !0) : (b[c] = 1));
+            });
+          return a;
+        };
+        u.prototype.getTickAmount = function () {
+          var b = this.options,
+            a = b.tickAmount,
+            c = b.tickPixelInterval;
+          !x(b.tickInterval) &&
+            !a &&
+            this.len < c &&
+            !this.isRadial &&
+            !this.logarithmic &&
+            b.startOnTick &&
+            b.endOnTick &&
+            (a = 2);
+          !a && this.alignToOthers() && (a = Math.ceil(this.len / c) + 1);
+          4 > a && ((this.finalTickAmt = a), (a = 5));
+          this.tickAmount = a;
+        };
+        u.prototype.adjustTickAmount = function () {
+          var b = this.options,
+            a = this.tickInterval,
+            c = this.tickPositions,
+            d = this.tickAmount,
+            g = this.finalTickAmt,
+            p = c && c.length,
+            q = A(this.threshold, this.softThreshold ? 0 : null),
+            e;
+          if (this.hasData()) {
+            if (p < d) {
+              for (e = this.min; c.length < d; )
+                c.length % 2 || e === q
+                  ? c.push(v(c[c.length - 1] + a))
+                  : c.unshift(v(c[0] - a));
+              this.transA *= (p - 1) / (d - 1);
+              this.min = b.startOnTick ? c[0] : Math.min(this.min, c[0]);
+              this.max = b.endOnTick
+                ? c[c.length - 1]
+                : Math.max(this.max, c[c.length - 1]);
+            } else p > d && ((this.tickInterval *= 2), this.setTickPositions());
+            if (x(g)) {
+              for (a = b = c.length; a--; )
+                ((3 === g && 1 === a % 2) || (2 >= g && 0 < a && a < b - 1)) &&
+                  c.splice(a, 1);
+              this.finalTickAmt = void 0;
+            }
+          }
+        };
+        u.prototype.setScale = function () {
+          var b,
+            a = !1,
+            c = !1;
+          this.series.forEach(function (b) {
+            var k;
+            a = a || b.isDirtyData || b.isDirty;
+            c =
+              c ||
+              (null === (k = b.xAxis) || void 0 === k ? void 0 : k.isDirty) ||
+              !1;
+          });
+          this.oldMin = this.min;
+          this.oldMax = this.max;
+          this.oldAxisLength = this.len;
+          this.setAxisSize();
+          (b = this.len !== this.oldAxisLength) ||
+          a ||
+          c ||
+          this.isLinked ||
+          this.forceRedraw ||
+          this.userMin !== this.oldUserMin ||
+          this.userMax !== this.oldUserMax ||
+          this.alignToOthers()
+            ? (this.stacking && this.stacking.resetStacks(),
+              (this.forceRedraw = !1),
+              this.getSeriesExtremes(),
+              this.setTickInterval(),
+              (this.oldUserMin = this.userMin),
+              (this.oldUserMax = this.userMax),
+              this.isDirty ||
+                (this.isDirty =
+                  b || this.min !== this.oldMin || this.max !== this.oldMax))
+            : this.stacking && this.stacking.cleanStacks();
+          a && this.panningState && (this.panningState.isDirty = !0);
+          J(this, "afterSetScale");
+        };
+        u.prototype.setExtremes = function (b, a, c, d, g) {
+          var k = this,
+            t = k.chart;
+          c = A(c, !0);
+          k.series.forEach(function (b) {
+            delete b.kdTree;
+          });
+          g = l(g, { min: b, max: a });
+          J(k, "setExtremes", g, function () {
+            k.userMin = b;
+            k.userMax = a;
+            k.eventArgs = g;
+            c && t.redraw(d);
+          });
+        };
+        u.prototype.zoom = function (b, a) {
+          var k = this,
+            c = this.dataMin,
+            d = this.dataMax,
+            g = this.options,
+            p = Math.min(c, A(g.min, c)),
+            q = Math.max(d, A(g.max, d));
+          b = { newMin: b, newMax: a };
+          J(this, "zoom", b, function (b) {
+            var a = b.newMin,
+              g = b.newMax;
+            if (a !== k.min || g !== k.max)
+              k.allowZoomOutside ||
+                (x(c) && (a < p && (a = p), a > q && (a = q)),
+                x(d) && (g < p && (g = p), g > q && (g = q))),
+                (k.displayBtn =
+                  "undefined" !== typeof a || "undefined" !== typeof g),
+                k.setExtremes(a, g, !1, void 0, { trigger: "zoom" });
+            b.zoomed = !0;
+          });
+          return b.zoomed;
+        };
+        u.prototype.setAxisSize = function () {
+          var b = this.chart,
+            a = this.options,
+            c = a.offsets || [0, 0, 0, 0],
+            d = this.horiz,
+            g = (this.width = Math.round(
+              G(A(a.width, b.plotWidth - c[3] + c[1]), b.plotWidth)
+            )),
+            p = (this.height = Math.round(
+              G(A(a.height, b.plotHeight - c[0] + c[2]), b.plotHeight)
+            )),
+            q = (this.top = Math.round(
+              G(A(a.top, b.plotTop + c[0]), b.plotHeight, b.plotTop)
+            ));
+          a = this.left = Math.round(
+            G(A(a.left, b.plotLeft + c[3]), b.plotWidth, b.plotLeft)
+          );
+          this.bottom = b.chartHeight - p - q;
+          this.right = b.chartWidth - g - a;
+          this.len = Math.max(d ? g : p, 0);
+          this.pos = d ? a : q;
+        };
+        u.prototype.getExtremes = function () {
+          var b = this.logarithmic;
+          return {
+            min: b ? v(b.lin2log(this.min)) : this.min,
+            max: b ? v(b.lin2log(this.max)) : this.max,
+            dataMin: this.dataMin,
+            dataMax: this.dataMax,
+            userMin: this.userMin,
+            userMax: this.userMax,
+          };
+        };
+        u.prototype.getThreshold = function (b) {
+          var a = this.logarithmic,
+            c = a ? a.lin2log(this.min) : this.min;
+          a = a ? a.lin2log(this.max) : this.max;
+          null === b || -Infinity === b
+            ? (b = c)
+            : Infinity === b
+            ? (b = a)
+            : c > b
+            ? (b = c)
+            : a < b && (b = a);
+          return this.translate(b, 0, 1, 0, 1);
+        };
+        u.prototype.autoLabelAlign = function (b) {
+          var a = (A(b, 0) - 90 * this.side + 720) % 360;
+          b = { align: "center" };
+          J(this, "autoLabelAlign", b, function (b) {
+            15 < a && 165 > a
+              ? (b.align = "right")
+              : 195 < a && 345 > a && (b.align = "left");
+          });
+          return b.align;
+        };
+        u.prototype.tickSize = function (b) {
+          var a = this.options,
+            c = a["tick" === b ? "tickLength" : "minorTickLength"],
+            d = A(
+              a["tick" === b ? "tickWidth" : "minorTickWidth"],
+              "tick" === b && this.isXAxis && !this.categories ? 1 : 0
+            );
+          if (d && c) {
+            "inside" === a[b + "Position"] && (c = -c);
+            var g = [c, d];
+          }
+          b = { tickSize: g };
+          J(this, "afterTickSize", b);
+          return b.tickSize;
+        };
+        u.prototype.labelMetrics = function () {
+          var b = (this.tickPositions && this.tickPositions[0]) || 0;
+          return this.chart.renderer.fontMetrics(
+            this.options.labels.style && this.options.labels.style.fontSize,
+            this.ticks[b] && this.ticks[b].label
+          );
+        };
+        u.prototype.unsquish = function () {
+          var b = this.options.labels,
+            a = this.horiz,
+            c = this.tickInterval,
+            d = c,
+            g =
+              this.len /
+              (((this.categories ? 1 : 0) + this.max - this.min) / c),
+            p,
+            q = b.rotation,
+            e = this.labelMetrics(),
+            u,
+            B = Number.MAX_VALUE,
+            l,
+            r = this.max - this.min,
+            n = function (b) {
+              var a = b / (g || 1);
+              a = 1 < a ? Math.ceil(a) : 1;
+              a * c > r &&
+                Infinity !== b &&
+                Infinity !== g &&
+                r &&
+                (a = Math.ceil(r / c));
+              return v(a * c);
+            };
+          a
+            ? (l =
+                !b.staggerLines &&
+                !b.step &&
+                (x(q)
+                  ? [q]
+                  : g < A(b.autoRotationLimit, 80) && b.autoRotation)) &&
+              l.forEach(function (b) {
+                if (b === q || (b && -90 <= b && 90 >= b)) {
+                  u = n(Math.abs(e.h / Math.sin(E * b)));
+                  var a = u + Math.abs(b / 360);
+                  a < B && ((B = a), (p = b), (d = u));
+                }
+              })
+            : b.step || (d = n(e.h));
+          this.autoRotation = l;
+          this.labelRotation = A(p, q);
+          return d;
+        };
+        u.prototype.getSlotWidth = function (b) {
+          var a,
+            d = this.chart,
+            g = this.horiz,
+            p = this.options.labels,
+            q = Math.max(
+              this.tickPositions.length - (this.categories ? 0 : 1),
+              1
+            ),
+            e = d.margin[3];
+          if (b && c(b.slotWidth)) return b.slotWidth;
+          if (g && p && 2 > (p.step || 0))
+            return p.rotation ? 0 : ((this.staggerLines || 1) * this.len) / q;
+          if (!g) {
+            b =
+              null === (a = null === p || void 0 === p ? void 0 : p.style) ||
+              void 0 === a
+                ? void 0
+                : a.width;
+            if (void 0 !== b) return parseInt(b, 10);
+            if (e) return e - d.spacing[3];
+          }
+          return 0.33 * d.chartWidth;
+        };
+        u.prototype.renderUnsquish = function () {
+          var b = this.chart,
+            k = b.renderer,
+            c = this.tickPositions,
+            d = this.ticks,
+            g = this.options.labels,
+            p = (g && g.style) || {},
+            q = this.horiz,
+            e = this.getSlotWidth(),
+            u = Math.max(1, Math.round(e - 2 * (g.padding || 5))),
+            B = {},
+            l = this.labelMetrics(),
+            r = g.style && g.style.textOverflow,
+            n = 0;
+          a(g.rotation) || (B.rotation = g.rotation || 0);
+          c.forEach(function (b) {
+            b = d[b];
+            b.movedLabel && b.replaceMovedLabel();
+            b &&
+              b.label &&
+              b.label.textPxLength > n &&
+              (n = b.label.textPxLength);
+          });
+          this.maxLabelLength = n;
+          if (this.autoRotation)
+            n > u && n > l.h
+              ? (B.rotation = this.labelRotation)
+              : (this.labelRotation = 0);
+          else if (e) {
+            var A = u;
+            if (!r) {
+              var f = "clip";
+              for (u = c.length; !q && u--; ) {
+                var h = c[u];
+                if ((h = d[h].label))
+                  h.styles && "ellipsis" === h.styles.textOverflow
+                    ? h.css({ textOverflow: "clip" })
+                    : h.textPxLength > e && h.css({ width: e + "px" }),
+                    h.getBBox().height > this.len / c.length - (l.h - l.f) &&
+                      (h.specificTextOverflow = "ellipsis");
+              }
+            }
+          }
+          B.rotation &&
+            ((A = n > 0.5 * b.chartHeight ? 0.33 * b.chartHeight : n),
+            r || (f = "ellipsis"));
+          if (
+            (this.labelAlign =
+              g.align || this.autoLabelAlign(this.labelRotation))
+          )
+            B.align = this.labelAlign;
+          c.forEach(function (b) {
+            var a = (b = d[b]) && b.label,
+              k = p.width,
+              c = {};
+            a &&
+              (a.attr(B),
+              b.shortenLabel
+                ? b.shortenLabel()
+                : A &&
+                  !k &&
+                  "nowrap" !== p.whiteSpace &&
+                  (A < a.textPxLength || "SPAN" === a.element.tagName)
+                ? ((c.width = A + "px"),
+                  r || (c.textOverflow = a.specificTextOverflow || f),
+                  a.css(c))
+                : a.styles &&
+                  a.styles.width &&
+                  !c.width &&
+                  !k &&
+                  a.css({ width: null }),
+              delete a.specificTextOverflow,
+              (b.rotation = B.rotation));
+          }, this);
+          this.tickRotCorr = k.rotCorr(
+            l.b,
+            this.labelRotation || 0,
+            0 !== this.side
+          );
+        };
+        u.prototype.hasData = function () {
+          return (
+            this.series.some(function (b) {
+              return b.hasData();
+            }) ||
+            (this.options.showEmpty && x(this.min) && x(this.max))
+          );
+        };
+        u.prototype.addTitle = function (b) {
+          var a = this.chart.renderer,
+            c = this.horiz,
+            d = this.opposite,
+            g = this.options.title,
+            p,
+            e = this.chart.styledMode;
+          this.axisTitle ||
+            ((p = g.textAlign) ||
+              (p = (
+                c
+                  ? { low: "left", middle: "center", high: "right" }
+                  : {
+                      low: d ? "right" : "left",
+                      middle: "center",
+                      high: d ? "left" : "right",
+                    }
+              )[g.align]),
+            (this.axisTitle = a
+              .text(g.text, 0, 0, g.useHTML)
+              .attr({ zIndex: 7, rotation: g.rotation || 0, align: p })
+              .addClass("highcharts-axis-title")),
+            e || this.axisTitle.css(q(g.style)),
+            this.axisTitle.add(this.axisGroup),
+            (this.axisTitle.isNew = !0));
+          e ||
+            g.style.width ||
+            this.isRadial ||
+            this.axisTitle.css({ width: this.len + "px" });
+          this.axisTitle[b ? "show" : "hide"](b);
+        };
+        u.prototype.generateTick = function (b) {
+          var a = this.ticks;
+          a[b] ? a[b].addLabel() : (a[b] = new z(this, b));
+        };
+        u.prototype.getOffset = function () {
+          var b = this,
+            a = b.chart,
+            c = a.renderer,
+            d = b.options,
+            g = b.tickPositions,
+            p = b.ticks,
+            q = b.horiz,
+            e = b.side,
+            u = a.inverted && !b.isZAxis ? [1, 0, 3, 2][e] : e,
+            l,
+            n = 0,
+            r = 0,
+            f = d.title,
+            h = d.labels,
+            G = 0,
+            w = a.axisOffset;
+          a = a.clipOffset;
+          var E = [-1, 1, 1, -1][e],
+            v = d.className,
+            O = b.axisParent;
+          var D = b.hasData();
+          b.showAxis = l = D || A(d.showEmpty, !0);
+          b.staggerLines = b.horiz && h.staggerLines;
+          b.axisGroup ||
+            ((b.gridGroup = c
+              .g("grid")
+              .attr({ zIndex: d.gridZIndex || 1 })
+              .addClass(
+                "highcharts-" + this.coll.toLowerCase() + "-grid " + (v || "")
+              )
+              .add(O)),
+            (b.axisGroup = c
+              .g("axis")
+              .attr({ zIndex: d.zIndex || 2 })
+              .addClass(
+                "highcharts-" + this.coll.toLowerCase() + " " + (v || "")
+              )
+              .add(O)),
+            (b.labelGroup = c
+              .g("axis-labels")
+              .attr({ zIndex: h.zIndex || 7 })
+              .addClass(
+                "highcharts-" + b.coll.toLowerCase() + "-labels " + (v || "")
+              )
+              .add(O)));
+          D || b.isLinked
+            ? (g.forEach(function (a, c) {
+                b.generateTick(a, c);
+              }),
+              b.renderUnsquish(),
+              (b.reserveSpaceDefault =
+                0 === e ||
+                2 === e ||
+                { 1: "left", 3: "right" }[e] === b.labelAlign),
+              A(
+                h.reserveSpace,
+                "center" === b.labelAlign ? !0 : null,
+                b.reserveSpaceDefault
+              ) &&
+                g.forEach(function (b) {
+                  G = Math.max(p[b].getLabelSize(), G);
+                }),
+              b.staggerLines && (G *= b.staggerLines),
+              (b.labelOffset = G * (b.opposite ? -1 : 1)))
+            : B(p, function (b, a) {
+                b.destroy();
+                delete p[a];
+              });
+          if (
+            f &&
+            f.text &&
+            !1 !== f.enabled &&
+            (b.addTitle(l), l && !1 !== f.reserveSpace)
+          ) {
+            b.titleOffset = n = b.axisTitle.getBBox()[q ? "height" : "width"];
+            var M = f.offset;
+            r = x(M) ? 0 : A(f.margin, q ? 5 : 10);
+          }
+          b.renderLine();
+          b.offset = E * A(d.offset, w[e] ? w[e] + (d.margin || 0) : 0);
+          b.tickRotCorr = b.tickRotCorr || { x: 0, y: 0 };
+          c = 0 === e ? -b.labelMetrics().h : 2 === e ? b.tickRotCorr.y : 0;
+          r = Math.abs(G) + r;
+          G && (r = r - c + E * (q ? A(h.y, b.tickRotCorr.y + 8 * E) : h.x));
+          b.axisTitleMargin = A(M, r);
+          b.getMaxLabelDimensions &&
+            (b.maxLabelDimensions = b.getMaxLabelDimensions(p, g));
+          q = this.tickSize("tick");
+          w[e] = Math.max(
+            w[e],
+            b.axisTitleMargin + n + E * b.offset,
+            r,
+            g && g.length && q ? q[0] + E * b.offset : 0
+          );
+          d = d.offset ? 0 : 2 * Math.floor(b.axisLine.strokeWidth() / 2);
+          a[u] = Math.max(a[u], d);
+          J(this, "afterGetOffset");
+        };
+        u.prototype.getLinePath = function (b) {
+          var a = this.chart,
+            c = this.opposite,
+            d = this.offset,
+            g = this.horiz,
+            p = this.left + (c ? this.width : 0) + d;
+          d = a.chartHeight - this.bottom - (c ? this.height : 0) + d;
+          c && (b *= -1);
+          return a.renderer.crispLine(
+            [
+              ["M", g ? this.left : p, g ? d : this.top],
+              [
+                "L",
+                g ? a.chartWidth - this.right : p,
+                g ? d : a.chartHeight - this.bottom,
+              ],
+            ],
+            b
+          );
+        };
+        u.prototype.renderLine = function () {
+          this.axisLine ||
+            ((this.axisLine = this.chart.renderer
+              .path()
+              .addClass("highcharts-axis-line")
+              .add(this.axisGroup)),
+            this.chart.styledMode ||
+              this.axisLine.attr({
+                stroke: this.options.lineColor,
+                "stroke-width": this.options.lineWidth,
+                zIndex: 7,
+              }));
+        };
+        u.prototype.getTitlePosition = function () {
+          var b = this.horiz,
+            a = this.left,
+            c = this.top,
+            d = this.len,
+            g = this.options.title,
+            p = b ? a : c,
+            q = this.opposite,
+            e = this.offset,
+            u = g.x || 0,
+            B = g.y || 0,
+            l = this.axisTitle,
+            r = this.chart.renderer.fontMetrics(g.style && g.style.fontSize, l);
+          l = Math.max(l.getBBox(null, 0).height - r.h - 1, 0);
+          d = {
+            low: p + (b ? 0 : d),
+            middle: p + d / 2,
+            high: p + (b ? d : 0),
+          }[g.align];
+          a =
+            (b ? c + this.height : a) +
+            (b ? 1 : -1) * (q ? -1 : 1) * this.axisTitleMargin +
+            [-l, l, r.f, -l][this.side];
+          b = {
+            x: b ? d + u : a + (q ? this.width : 0) + e + u,
+            y: b ? a + B - (q ? this.height : 0) + e : d + B,
+          };
+          J(this, "afterGetTitlePosition", { titlePosition: b });
+          return b;
+        };
+        u.prototype.renderMinorTick = function (b) {
+          var a = this.chart.hasRendered && c(this.oldMin),
+            d = this.minorTicks;
+          d[b] || (d[b] = new z(this, b, "minor"));
+          a && d[b].isNew && d[b].render(null, !0);
+          d[b].render(null, !1, 1);
+        };
+        u.prototype.renderTick = function (b, a) {
+          var k,
+            d = this.isLinked,
+            g = this.ticks,
+            p = this.chart.hasRendered && c(this.oldMin);
+          if (
+            !d ||
+            (b >= this.min && b <= this.max) ||
+            (null === (k = this.grid) || void 0 === k ? 0 : k.isColumn)
+          )
+            g[b] || (g[b] = new z(this, b)),
+              p && g[b].isNew && g[b].render(a, !0, -1),
+              g[b].render(a);
+        };
+        u.prototype.render = function () {
+          var b = this,
+            a = b.chart,
+            d = b.logarithmic,
+            g = b.options,
+            p = b.isLinked,
+            q = b.tickPositions,
+            e = b.axisTitle,
+            u = b.ticks,
+            l = b.minorTicks,
+            r = b.alternateBands,
+            n = g.stackLabels,
+            f = g.alternateGridColor,
+            A = b.tickmarkOffset,
+            h = b.axisLine,
+            G = b.showAxis,
+            w = K(a.renderer.globalAnimation),
+            E,
+            v;
+          b.labelEdge.length = 0;
+          b.overlap = !1;
+          [u, l, r].forEach(function (b) {
+            B(b, function (b) {
+              b.isActive = !1;
+            });
+          });
+          if (b.hasData() || p)
+            b.minorTickInterval &&
+              !b.categories &&
+              b.getMinorTickPositions().forEach(function (a) {
+                b.renderMinorTick(a);
+              }),
+              q.length &&
+                (q.forEach(function (a, c) {
+                  b.renderTick(a, c);
+                }),
+                A &&
+                  (0 === b.min || b.single) &&
+                  (u[-1] || (u[-1] = new z(b, -1, null, !0)),
+                  u[-1].render(-1))),
+              f &&
+                q.forEach(function (c, k) {
+                  v =
+                    "undefined" !== typeof q[k + 1] ? q[k + 1] + A : b.max - A;
+                  0 === k % 2 &&
+                    c < b.max &&
+                    v <= b.max + (a.polar ? -A : A) &&
+                    (r[c] || (r[c] = new m.PlotLineOrBand(b)),
+                    (E = c + A),
+                    (r[c].options = {
+                      from: d ? d.lin2log(E) : E,
+                      to: d ? d.lin2log(v) : v,
+                      color: f,
+                      className: "highcharts-alternate-grid",
+                    }),
+                    r[c].render(),
+                    (r[c].isActive = !0));
+                }),
+              b._addedPlotLB ||
+                ((g.plotLines || [])
+                  .concat(g.plotBands || [])
+                  .forEach(function (a) {
+                    b.addPlotBandOrLine(a);
+                  }),
+                (b._addedPlotLB = !0));
+          [u, l, r].forEach(function (b) {
+            var c,
+              k = [],
+              d = w.duration;
+            B(b, function (b, a) {
+              b.isActive || (b.render(a, !1, 0), (b.isActive = !1), k.push(a));
+            });
+            Q(
+              function () {
+                for (c = k.length; c--; )
+                  b[k[c]] &&
+                    !b[k[c]].isActive &&
+                    (b[k[c]].destroy(), delete b[k[c]]);
+              },
+              b !== r && a.hasRendered && d ? d : 0
+            );
+          });
+          h &&
+            (h[h.isPlaced ? "animate" : "attr"]({
+              d: this.getLinePath(h.strokeWidth()),
+            }),
+            (h.isPlaced = !0),
+            h[G ? "show" : "hide"](G));
+          e &&
+            G &&
+            ((g = b.getTitlePosition()),
+            c(g.y)
+              ? (e[e.isNew ? "attr" : "animate"](g), (e.isNew = !1))
+              : (e.attr("y", -9999), (e.isNew = !0)));
+          n && n.enabled && b.stacking && b.stacking.renderStackTotals();
+          b.isDirty = !1;
+          J(this, "afterRender");
+        };
+        u.prototype.redraw = function () {
+          this.visible &&
+            (this.render(),
+            this.plotLinesAndBands.forEach(function (b) {
+              b.render();
+            }));
+          this.series.forEach(function (b) {
+            b.isDirty = !0;
+          });
+        };
+        u.prototype.getKeepProps = function () {
+          return this.keepProps || u.keepProps;
+        };
+        u.prototype.destroy = function (b) {
+          var a = this,
+            c = a.plotLinesAndBands,
+            d;
+          J(this, "destroy", { keepEvents: b });
+          b || M(a);
+          [a.ticks, a.minorTicks, a.alternateBands].forEach(function (b) {
+            D(b);
+          });
+          if (c) for (b = c.length; b--; ) c[b].destroy();
+          "axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar"
+            .split(" ")
+            .forEach(function (b) {
+              a[b] && (a[b] = a[b].destroy());
+            });
+          for (d in a.plotLinesAndBandsGroups)
+            a.plotLinesAndBandsGroups[d] =
+              a.plotLinesAndBandsGroups[d].destroy();
+          B(a, function (b, c) {
+            -1 === a.getKeepProps().indexOf(c) && delete a[c];
+          });
+        };
+        u.prototype.drawCrosshair = function (b, a) {
+          var c = this.crosshair,
+            k = A(c.snap, !0),
+            d,
+            g = this.cross,
+            p = this.chart;
+          J(this, "drawCrosshair", { e: b, point: a });
+          b || (b = this.cross && this.cross.e);
+          if (this.crosshair && !1 !== (x(a) || !k)) {
+            k
+              ? x(a) &&
+                (d = A(
+                  "colorAxis" !== this.coll ? a.crosshairPos : null,
+                  this.isXAxis ? a.plotX : this.len - a.plotY
+                ))
+              : (d =
+                  b &&
+                  (this.horiz
+                    ? b.chartX - this.pos
+                    : this.len - b.chartY + this.pos));
+            if (x(d)) {
+              var q = {
+                value: a && (this.isXAxis ? a.x : A(a.stackY, a.y)),
+                translatedValue: d,
+              };
+              p.polar &&
+                l(q, {
+                  isCrosshair: !0,
+                  chartX: b && b.chartX,
+                  chartY: b && b.chartY,
+                  point: a,
+                });
+              q = this.getPlotLinePath(q) || null;
+            }
+            if (!x(q)) {
+              this.hideCrosshair();
+              return;
+            }
+            k = this.categories && !this.isRadial;
+            g ||
+              ((this.cross = g =
+                p.renderer
+                  .path()
+                  .addClass(
+                    "highcharts-crosshair highcharts-crosshair-" +
+                      (k ? "category " : "thin ") +
+                      c.className
+                  )
+                  .attr({ zIndex: A(c.zIndex, 2) })
+                  .add()),
+              p.styledMode ||
+                (g
+                  .attr({
+                    stroke:
+                      c.color ||
+                      (k
+                        ? h.parse("#ccd6eb").setOpacity(0.25).get()
+                        : "#cccccc"),
+                    "stroke-width": A(c.width, 1),
+                  })
+                  .css({ "pointer-events": "none" }),
+                c.dashStyle && g.attr({ dashstyle: c.dashStyle })));
+            g.show().attr({ d: q });
+            k && !c.width && g.attr({ "stroke-width": this.transA });
+            this.cross.e = b;
+          } else this.hideCrosshair();
+          J(this, "afterDrawCrosshair", { e: b, point: a });
+        };
+        u.prototype.hideCrosshair = function () {
+          this.cross && this.cross.hide();
+          J(this, "afterHideCrosshair");
+        };
+        u.prototype.hasVerticalPanning = function () {
+          var b, a;
+          return /y/.test(
+            (null ===
+              (a =
+                null === (b = this.chart.options.chart) || void 0 === b
+                  ? void 0
+                  : b.panning) || void 0 === a
+              ? void 0
+              : a.type) || ""
+          );
+        };
+        u.prototype.validatePositiveValue = function (b) {
+          return c(b) && 0 < b;
+        };
+        u.defaultOptions = {
+          dateTimeLabelFormats: {
+            millisecond: { main: "%H:%M:%S.%L", range: !1 },
+            second: { main: "%H:%M:%S", range: !1 },
+            minute: { main: "%H:%M", range: !1 },
+            hour: { main: "%H:%M", range: !1 },
+            day: { main: "%e. %b" },
+            week: { main: "%e. %b" },
+            month: { main: "%b '%y" },
+            year: { main: "%Y" },
+          },
+          endOnTick: !1,
+          labels: {
+            enabled: !0,
+            indentation: 10,
+            x: 0,
+            style: { color: "#666666", cursor: "default", fontSize: "11px" },
+          },
+          maxPadding: 0.01,
+          minorTickLength: 2,
+          minorTickPosition: "outside",
+          minPadding: 0.01,
+          showEmpty: !0,
+          startOfWeek: 1,
+          startOnTick: !1,
+          tickLength: 10,
+          tickPixelInterval: 100,
+          tickmarkPlacement: "between",
+          tickPosition: "outside",
+          title: { align: "middle", style: { color: "#666666" } },
+          type: "linear",
+          minorGridLineColor: "#f2f2f2",
+          minorGridLineWidth: 1,
+          minorTickColor: "#999999",
+          lineColor: "#ccd6eb",
+          lineWidth: 1,
+          gridLineColor: "#e6e6e6",
+          tickColor: "#ccd6eb",
+        };
+        u.defaultYAxisOptions = {
+          endOnTick: !0,
+          maxPadding: 0.05,
+          minPadding: 0.05,
+          tickPixelInterval: 72,
+          showLastLabel: !0,
+          labels: { x: -8 },
+          startOnTick: !0,
+          title: { rotation: 270, text: "Values" },
+          stackLabels: {
+            animation: {},
+            allowOverlap: !1,
+            enabled: !1,
+            crop: !0,
+            overflow: "justify",
+            formatter: function () {
+              var b = this.axis.chart.numberFormatter;
+              return b(this.total, -1);
+            },
+            style: {
+              color: "#000000",
+              fontSize: "11px",
+              fontWeight: "bold",
+              textOutline: "1px contrast",
+            },
+          },
+          gridLineWidth: 1,
+          lineWidth: 0,
+        };
+        u.defaultLeftAxisOptions = {
+          labels: { x: -15 },
+          title: { rotation: 270 },
+        };
+        u.defaultRightAxisOptions = {
+          labels: { x: 15 },
+          title: { rotation: 90 },
+        };
+        u.defaultBottomAxisOptions = {
+          labels: { autoRotation: [-45], x: 0 },
+          margin: 15,
+          title: { rotation: 0 },
+        };
+        u.defaultTopAxisOptions = {
+          labels: { autoRotation: [-45], x: 0 },
+          margin: 15,
+          title: { rotation: 0 },
+        };
+        u.keepProps = "extKey hcEvents names series userMax userMin".split(" ");
+        return u;
+      })();
+      m.Axis = f;
+      return m.Axis;
+    }
+  );
+  N(
+    m,
+    "Core/Axis/DateTimeAxis.js",
+    [m["Core/Axis/Axis.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.addEvent,
+        z = h.getMagnitude,
+        F = h.normalizeTickInterval,
+        L = h.timeUnits,
+        K = (function () {
+          function f(f) {
+            this.axis = f;
+          }
+          f.prototype.normalizeTimeTickInterval = function (f, e) {
+            var h = e || [
+              ["millisecond", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
+              ["second", [1, 2, 5, 10, 15, 30]],
+              ["minute", [1, 2, 5, 10, 15, 30]],
+              ["hour", [1, 2, 3, 4, 6, 8, 12]],
+              ["day", [1, 2]],
+              ["week", [1, 2]],
+              ["month", [1, 2, 3, 4, 6]],
+              ["year", null],
+            ];
+            e = h[h.length - 1];
+            var v = L[e[0]],
+              x = e[1],
+              D;
+            for (
+              D = 0;
+              D < h.length &&
+              !((e = h[D]),
+              (v = L[e[0]]),
+              (x = e[1]),
+              h[D + 1] && f <= (v * x[x.length - 1] + L[h[D + 1][0]]) / 2);
+              D++
+            );
+            v === L.year && f < 5 * v && (x = [1, 2, 5]);
+            f = F(f / v, x, "year" === e[0] ? Math.max(z(f / v), 1) : 1);
+            return { unitRange: v, count: f, unitName: e[0] };
+          };
+          return f;
+        })();
+      h = (function () {
+        function f() {}
+        f.compose = function (f) {
+          f.keepProps.push("dateTime");
+          f.prototype.getTimeTicks = function () {
+            return this.chart.time.getTimeTicks.apply(
+              this.chart.time,
+              arguments
+            );
+          };
+          m(f, "init", function (e) {
+            "datetime" !== e.userOptions.type
+              ? (this.dateTime = void 0)
+              : this.dateTime || (this.dateTime = new K(this));
+          });
+        };
+        f.AdditionsClass = K;
+        return f;
+      })();
+      h.compose(f);
+      return h;
+    }
+  );
+  N(
+    m,
+    "Core/Axis/LogarithmicAxis.js",
+    [m["Core/Axis/Axis.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.addEvent,
+        z = h.getMagnitude,
+        F = h.normalizeTickInterval,
+        L = h.pick,
+        K = (function () {
+          function f(f) {
+            this.axis = f;
+          }
+          f.prototype.getLogTickPositions = function (f, e, h, v) {
+            var x = this.axis,
+              D = x.len,
+              n = x.options,
+              l = [];
+            v || (this.minorAutoInterval = void 0);
+            if (0.5 <= f)
+              (f = Math.round(f)), (l = x.getLinearTickPositions(f, e, h));
+            else if (0.08 <= f) {
+              n = Math.floor(e);
+              var m, w;
+              for (
+                D =
+                  0.3 < f
+                    ? [1, 2, 4]
+                    : 0.15 < f
+                    ? [1, 2, 4, 6, 8]
+                    : [1, 2, 3, 4, 5, 6, 7, 8, 9];
+                n < h + 1 && !w;
+                n++
+              ) {
+                var r = D.length;
+                for (m = 0; m < r && !w; m++) {
+                  var d = this.log2lin(this.lin2log(n) * D[m]);
+                  d > e &&
+                    (!v || g <= h) &&
+                    "undefined" !== typeof g &&
+                    l.push(g);
+                  g > h && (w = !0);
+                  var g = d;
+                }
+              }
+            } else
+              (e = this.lin2log(e)),
+                (h = this.lin2log(h)),
+                (f = v ? x.getMinorTickInterval() : n.tickInterval),
+                (f = L(
+                  "auto" === f ? null : f,
+                  this.minorAutoInterval,
+                  ((n.tickPixelInterval / (v ? 5 : 1)) * (h - e)) /
+                    ((v ? D / x.tickPositions.length : D) || 1)
+                )),
+                (f = F(f, void 0, z(f))),
+                (l = x.getLinearTickPositions(f, e, h).map(this.log2lin)),
+                v || (this.minorAutoInterval = f / 5);
+            v || (x.tickInterval = f);
+            return l;
+          };
+          f.prototype.lin2log = function (f) {
+            return Math.pow(10, f);
+          };
+          f.prototype.log2lin = function (f) {
+            return Math.log(f) / Math.LN10;
+          };
+          return f;
+        })();
+      h = (function () {
+        function f() {}
+        f.compose = function (f) {
+          f.keepProps.push("logarithmic");
+          var e = f.prototype,
+            h = K.prototype;
+          e.log2lin = h.log2lin;
+          e.lin2log = h.lin2log;
+          m(f, "init", function (e) {
+            var f = this.logarithmic;
+            "logarithmic" !== e.userOptions.type
+              ? (this.logarithmic = void 0)
+              : (f || (f = this.logarithmic = new K(this)),
+                this.log2lin !== f.log2lin &&
+                  (f.log2lin = this.log2lin.bind(this)),
+                this.lin2log !== f.lin2log &&
+                  (f.lin2log = this.lin2log.bind(this)));
+          });
+          m(f, "afterInit", function () {
+            var e = this.logarithmic;
+            e &&
+              ((this.lin2val = function (f) {
+                return e.lin2log(f);
+              }),
+              (this.val2lin = function (f) {
+                return e.log2lin(f);
+              }));
+          });
+        };
+        return f;
+      })();
+      h.compose(f);
+      return h;
+    }
+  );
+  N(
+    m,
+    "Core/Axis/PlotLineOrBand.js",
+    [m["Core/Axis/Axis.js"], m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h, m) {
+      var z = m.arrayMax,
+        F = m.arrayMin,
+        P = m.defined,
+        K = m.destroyObjectProperties,
+        C = m.erase,
+        y = m.extend,
+        e = m.merge,
+        I = m.objectEach,
+        v = m.pick;
+      m = (function () {
+        function f(e, f) {
+          this.axis = e;
+          f && ((this.options = f), (this.id = f.id));
+        }
+        f.prototype.render = function () {
+          h.fireEvent(this, "render");
+          var f = this,
+            n = f.axis,
+            l = n.horiz,
+            m = n.logarithmic,
+            w = f.options,
+            r = w.label,
+            d = f.label,
+            g = w.to,
+            c = w.from,
+            a = w.value,
+            q = P(c) && P(g),
+            p = P(a),
+            B = f.svgElem,
+            A = !B,
+            G = [],
+            M = w.color,
+            x = v(w.zIndex, 0),
+            Q = w.events;
+          G = {
+            class:
+              "highcharts-plot-" +
+              (q ? "band " : "line ") +
+              (w.className || ""),
+          };
+          var O = {},
+            E = n.chart.renderer,
+            u = q ? "bands" : "lines";
+          m && ((c = m.log2lin(c)), (g = m.log2lin(g)), (a = m.log2lin(a)));
+          n.chart.styledMode ||
+            (p
+              ? ((G.stroke = M || "#999999"),
+                (G["stroke-width"] = v(w.width, 1)),
+                w.dashStyle && (G.dashstyle = w.dashStyle))
+              : q &&
+                ((G.fill = M || "#e6ebf5"),
+                w.borderWidth &&
+                  ((G.stroke = w.borderColor),
+                  (G["stroke-width"] = w.borderWidth))));
+          O.zIndex = x;
+          u += "-" + x;
+          (m = n.plotLinesAndBandsGroups[u]) ||
+            (n.plotLinesAndBandsGroups[u] = m =
+              E.g("plot-" + u)
+                .attr(O)
+                .add());
+          A && (f.svgElem = B = E.path().attr(G).add(m));
+          if (p)
+            G = n.getPlotLinePath({
+              value: a,
+              lineWidth: B.strokeWidth(),
+              acrossPanes: w.acrossPanes,
+            });
+          else if (q) G = n.getPlotBandPath(c, g, w);
+          else return;
+          !f.eventsAdded &&
+            Q &&
+            (I(Q, function (b, a) {
+              B.on(a, function (b) {
+                Q[a].apply(f, [b]);
+              });
+            }),
+            (f.eventsAdded = !0));
+          (A || !B.d) && G && G.length
+            ? B.attr({ d: G })
+            : B &&
+              (G
+                ? (B.show(!0), B.animate({ d: G }))
+                : B.d && (B.hide(), d && (f.label = d = d.destroy())));
+          r &&
+          (P(r.text) || P(r.formatter)) &&
+          G &&
+          G.length &&
+          0 < n.width &&
+          0 < n.height &&
+          !G.isFlat
+            ? ((r = e(
+                {
+                  align: l && q && "center",
+                  x: l ? !q && 4 : 10,
+                  verticalAlign: !l && q && "middle",
+                  y: l ? (q ? 16 : 10) : q ? 6 : -4,
+                  rotation: l && !q && 90,
+                },
+                r
+              )),
+              this.renderLabel(r, G, q, x))
+            : d && d.hide();
+          return f;
+        };
+        f.prototype.renderLabel = function (e, f, l, h) {
+          var n = this.label,
+            r = this.axis.chart.renderer;
+          n ||
+            ((n = {
+              align: e.textAlign || e.align,
+              rotation: e.rotation,
+              class:
+                "highcharts-plot-" +
+                (l ? "band" : "line") +
+                "-label " +
+                (e.className || ""),
+            }),
+            (n.zIndex = h),
+            (h = this.getLabelText(e)),
+            (this.label = n = r.text(h, 0, 0, e.useHTML).attr(n).add()),
+            this.axis.chart.styledMode || n.css(e.style));
+          r = f.xBounds || [f[0][1], f[1][1], l ? f[2][1] : f[0][1]];
+          f = f.yBounds || [f[0][2], f[1][2], l ? f[2][2] : f[0][2]];
+          l = F(r);
+          h = F(f);
+          n.align(e, !1, { x: l, y: h, width: z(r) - l, height: z(f) - h });
+          n.show(!0);
+        };
+        f.prototype.getLabelText = function (e) {
+          return P(e.formatter) ? e.formatter.call(this) : e.text;
+        };
+        f.prototype.destroy = function () {
+          C(this.axis.plotLinesAndBands, this);
+          delete this.axis;
+          K(this);
+        };
+        return f;
+      })();
+      y(f.prototype, {
+        getPlotBandPath: function (e, f, n) {
+          void 0 === n && (n = this.options);
+          var l = this.getPlotLinePath({
+            value: f,
+            force: !0,
+            acrossPanes: n.acrossPanes,
+          });
+          n = this.getPlotLinePath({
+            value: e,
+            force: !0,
+            acrossPanes: n.acrossPanes,
+          });
+          var h = [],
+            w = this.horiz,
+            r = 1;
+          e = (e < this.min && f < this.min) || (e > this.max && f > this.max);
+          if (n && l) {
+            if (e) {
+              var d = n.toString() === l.toString();
+              r = 0;
+            }
+            for (e = 0; e < n.length; e += 2) {
+              f = n[e];
+              var g = n[e + 1],
+                c = l[e],
+                a = l[e + 1];
+              ("M" !== f[0] && "L" !== f[0]) ||
+                ("M" !== g[0] && "L" !== g[0]) ||
+                ("M" !== c[0] && "L" !== c[0]) ||
+                ("M" !== a[0] && "L" !== a[0]) ||
+                (w && c[1] === f[1]
+                  ? ((c[1] += r), (a[1] += r))
+                  : w || c[2] !== f[2] || ((c[2] += r), (a[2] += r)),
+                h.push(
+                  ["M", f[1], f[2]],
+                  ["L", g[1], g[2]],
+                  ["L", a[1], a[2]],
+                  ["L", c[1], c[2]],
+                  ["Z"]
+                ));
+              h.isFlat = d;
+            }
+          }
+          return h;
+        },
+        addPlotBand: function (e) {
+          return this.addPlotBandOrLine(e, "plotBands");
+        },
+        addPlotLine: function (e) {
+          return this.addPlotBandOrLine(e, "plotLines");
+        },
+        addPlotBandOrLine: function (e, f) {
+          var n = new h.PlotLineOrBand(this, e),
+            l = this.userOptions;
+          this.visible && (n = n.render());
+          if (n) {
+            if (f) {
+              var v = l[f] || [];
+              v.push(e);
+              l[f] = v;
+            }
+            this.plotLinesAndBands.push(n);
+            this._addedPlotLB = !0;
+          }
+          return n;
+        },
+        removePlotBandOrLine: function (e) {
+          for (
+            var f = this.plotLinesAndBands,
+              n = this.options,
+              l = this.userOptions,
+              h = f.length;
+            h--;
+
+          )
+            f[h].id === e && f[h].destroy();
+          [
+            n.plotLines || [],
+            l.plotLines || [],
+            n.plotBands || [],
+            l.plotBands || [],
+          ].forEach(function (f) {
+            for (h = f.length; h--; ) (f[h] || {}).id === e && C(f, f[h]);
+          });
+        },
+        removePlotBand: function (e) {
+          this.removePlotBandOrLine(e);
+        },
+        removePlotLine: function (e) {
+          this.removePlotBandOrLine(e);
+        },
+      });
+      h.PlotLineOrBand = m;
+      return h.PlotLineOrBand;
+    }
+  );
+  N(
+    m,
+    "Core/Tooltip.js",
+    [m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = f.doc,
+        z = h.clamp,
+        F = h.css,
+        L = h.defined,
+        K = h.discardElement,
+        C = h.extend,
+        y = h.fireEvent,
+        e = h.format,
+        I = h.isNumber,
+        v = h.isString,
+        x = h.merge,
+        D = h.pick,
+        n = h.splat,
+        l = h.syncTimeout,
+        J = h.timeUnits;
+      ("");
+      var w = (function () {
+        function r(d, g) {
+          this.container = void 0;
+          this.crosshairs = [];
+          this.distance = 0;
+          this.isHidden = !0;
+          this.isSticky = !1;
+          this.now = {};
+          this.options = {};
+          this.outside = !1;
+          this.chart = d;
+          this.init(d, g);
+        }
+        r.prototype.applyFilter = function () {
+          var d = this.chart;
+          d.renderer.definition({
+            tagName: "filter",
+            id: "drop-shadow-" + d.index,
+            opacity: 0.5,
+            children: [
+              { tagName: "feGaussianBlur", in: "SourceAlpha", stdDeviation: 1 },
+              { tagName: "feOffset", dx: 1, dy: 1 },
+              {
+                tagName: "feComponentTransfer",
+                children: [{ tagName: "feFuncA", type: "linear", slope: 0.3 }],
+              },
+              {
+                tagName: "feMerge",
+                children: [
+                  { tagName: "feMergeNode" },
+                  { tagName: "feMergeNode", in: "SourceGraphic" },
+                ],
+              },
+            ],
+          });
+          d.renderer.definition({
+            tagName: "style",
+            textContent:
+              ".highcharts-tooltip-" +
+              d.index +
+              "{filter:url(#drop-shadow-" +
+              d.index +
+              ")}",
+          });
+        };
+        r.prototype.bodyFormatter = function (d) {
+          return d.map(function (d) {
+            var c = d.series.tooltipOptions;
+            return (
+              c[(d.point.formatPrefix || "point") + "Formatter"] ||
+              d.point.tooltipFormatter
+            ).call(
+              d.point,
+              c[(d.point.formatPrefix || "point") + "Format"] || ""
+            );
+          });
+        };
+        r.prototype.cleanSplit = function (d) {
+          this.chart.series.forEach(function (g) {
+            var c = g && g.tt;
+            c && (!c.isActive || d ? (g.tt = c.destroy()) : (c.isActive = !1));
+          });
+        };
+        r.prototype.defaultFormatter = function (d) {
+          var g = this.points || n(this);
+          var c = [d.tooltipFooterHeaderFormatter(g[0])];
+          c = c.concat(d.bodyFormatter(g));
+          c.push(d.tooltipFooterHeaderFormatter(g[0], !0));
+          return c;
+        };
+        r.prototype.destroy = function () {
+          this.label && (this.label = this.label.destroy());
+          this.split &&
+            this.tt &&
+            (this.cleanSplit(this.chart, !0), (this.tt = this.tt.destroy()));
+          this.renderer &&
+            ((this.renderer = this.renderer.destroy()), K(this.container));
+          h.clearTimeout(this.hideTimer);
+          h.clearTimeout(this.tooltipTimeout);
+        };
+        r.prototype.getAnchor = function (d, g) {
+          var c = this.chart,
+            a = c.pointer,
+            q = c.inverted,
+            p = c.plotTop,
+            e = c.plotLeft,
+            f = 0,
+            l = 0,
+            r,
+            h;
+          d = n(d);
+          this.followPointer && g
+            ? ("undefined" === typeof g.chartX && (g = a.normalize(g)),
+              (d = [g.chartX - e, g.chartY - p]))
+            : d[0].tooltipPos
+            ? (d = d[0].tooltipPos)
+            : (d.forEach(function (a) {
+                r = a.series.yAxis;
+                h = a.series.xAxis;
+                f += a.plotX + (!q && h ? h.left - e : 0);
+                l +=
+                  (a.plotLow ? (a.plotLow + a.plotHigh) / 2 : a.plotY) +
+                  (!q && r ? r.top - p : 0);
+              }),
+              (f /= d.length),
+              (l /= d.length),
+              (d = [
+                q ? c.plotWidth - l : f,
+                this.shared && !q && 1 < d.length && g
+                  ? g.chartY - p
+                  : q
+                  ? c.plotHeight - f
+                  : l,
+              ]));
+          return d.map(Math.round);
+        };
+        r.prototype.getDateFormat = function (d, g, c, a) {
+          var q = this.chart.time,
+            p = q.dateFormat("%m-%d %H:%M:%S.%L", g),
+            e = { millisecond: 15, second: 12, minute: 9, hour: 6, day: 3 },
+            f = "millisecond";
+          for (l in J) {
+            if (
+              d === J.week &&
+              +q.dateFormat("%w", g) === c &&
+              "00:00:00.000" === p.substr(6)
+            ) {
+              var l = "week";
+              break;
+            }
+            if (J[l] > d) {
+              l = f;
+              break;
+            }
+            if (e[l] && p.substr(e[l]) !== "01-01 00:00:00.000".substr(e[l]))
+              break;
+            "week" !== l && (f = l);
+          }
+          if (l) var r = q.resolveDTLFormat(a[l]).main;
+          return r;
+        };
+        r.prototype.getLabel = function () {
+          var d,
+            g,
+            c = this,
+            a = this.chart.renderer,
+            q = this.chart.styledMode,
+            p = this.options,
+            e = "tooltip" + (L(p.className) ? " " + p.className : ""),
+            l =
+              (null === (d = p.style) || void 0 === d
+                ? void 0
+                : d.pointerEvents) ||
+              (!this.followPointer && p.stickOnContact ? "auto" : "none"),
+            r;
+          d = function () {
+            c.inContact = !0;
+          };
+          var n = function () {
+            var a = c.chart.hoverSeries;
+            c.inContact = !1;
+            if (a && a.onMouseOut) a.onMouseOut();
+          };
+          if (!this.label) {
+            this.outside &&
+              ((this.container = r = f.doc.createElement("div")),
+              (r.className = "highcharts-tooltip-container"),
+              F(r, {
+                position: "absolute",
+                top: "1px",
+                pointerEvents: l,
+                zIndex: 3,
+              }),
+              f.doc.body.appendChild(r),
+              (this.renderer = a =
+                new f.Renderer(
+                  r,
+                  0,
+                  0,
+                  null === (g = this.chart.options.chart) || void 0 === g
+                    ? void 0
+                    : g.style,
+                  void 0,
+                  void 0,
+                  a.styledMode
+                )));
+            this.split
+              ? (this.label = a.g(e))
+              : ((this.label = a
+                  .label(
+                    "",
+                    0,
+                    0,
+                    p.shape || "callout",
+                    null,
+                    null,
+                    p.useHTML,
+                    null,
+                    e
+                  )
+                  .attr({ padding: p.padding, r: p.borderRadius })),
+                q ||
+                  this.label
+                    .attr({
+                      fill: p.backgroundColor,
+                      "stroke-width": p.borderWidth,
+                    })
+                    .css(p.style)
+                    .css({ pointerEvents: l })
+                    .shadow(p.shadow));
+            q &&
+              (this.applyFilter(),
+              this.label.addClass("highcharts-tooltip-" + this.chart.index));
+            if (c.outside && !c.split) {
+              var h = this.label,
+                w = h.xSetter,
+                v = h.ySetter;
+              h.xSetter = function (a) {
+                w.call(h, c.distance);
+                r.style.left = a + "px";
+              };
+              h.ySetter = function (a) {
+                v.call(h, c.distance);
+                r.style.top = a + "px";
+              };
+            }
+            this.label
+              .on("mouseenter", d)
+              .on("mouseleave", n)
+              .attr({ zIndex: 8 })
+              .add();
+          }
+          return this.label;
+        };
+        r.prototype.getPosition = function (d, g, c) {
+          var a = this.chart,
+            q = this.distance,
+            p = {},
+            e = (a.inverted && c.h) || 0,
+            f,
+            l = this.outside,
+            r = l ? m.documentElement.clientWidth - 2 * q : a.chartWidth,
+            n = l
+              ? Math.max(
+                  m.body.scrollHeight,
+                  m.documentElement.scrollHeight,
+                  m.body.offsetHeight,
+                  m.documentElement.offsetHeight,
+                  m.documentElement.clientHeight
+                )
+              : a.chartHeight,
+            h = a.pointer.getChartPosition(),
+            w = a.containerScaling,
+            E = function (b) {
+              return w ? b * w.scaleX : b;
+            },
+            u = function (b) {
+              return w ? b * w.scaleY : b;
+            },
+            b = function (b) {
+              var k = "x" === b;
+              return [b, k ? r : n, k ? d : g].concat(
+                l
+                  ? [
+                      k ? E(d) : u(g),
+                      k
+                        ? h.left - q + E(c.plotX + a.plotLeft)
+                        : h.top - q + u(c.plotY + a.plotTop),
+                      0,
+                      k ? r : n,
+                    ]
+                  : [
+                      k ? d : g,
+                      k ? c.plotX + a.plotLeft : c.plotY + a.plotTop,
+                      k ? a.plotLeft : a.plotTop,
+                      k ? a.plotLeft + a.plotWidth : a.plotTop + a.plotHeight,
+                    ]
+              );
+            },
+            k = b("y"),
+            t = b("x"),
+            H =
+              !this.followPointer && D(c.ttBelow, !a.inverted === !!c.negative),
+            v = function (b, a, c, k, d, g, t) {
+              var f = "y" === b ? u(q) : E(q),
+                l = (c - k) / 2,
+                r = k < d - q,
+                B = d + q + k < a,
+                n = d - f - c + l;
+              d = d + f - l;
+              if (H && B) p[b] = d;
+              else if (!H && r) p[b] = n;
+              else if (r) p[b] = Math.min(t - k, 0 > n - e ? n : n - e);
+              else if (B) p[b] = Math.max(g, d + e + c > a ? d : d + e);
+              else return !1;
+            },
+            U = function (b, a, c, k, d) {
+              var g;
+              d < q || d > a - q
+                ? (g = !1)
+                : (p[b] =
+                    d < c / 2 ? 1 : d > a - k / 2 ? a - k - 2 : d - c / 2);
+              return g;
+            },
+            x = function (b) {
+              var a = k;
+              k = t;
+              t = a;
+              f = b;
+            },
+            I = function () {
+              !1 !== v.apply(0, k)
+                ? !1 !== U.apply(0, t) || f || (x(!0), I())
+                : f
+                ? (p.x = p.y = 0)
+                : (x(!0), I());
+            };
+          (a.inverted || 1 < this.len) && x();
+          I();
+          return p;
+        };
+        r.prototype.getXDateFormat = function (d, g, c) {
+          g = g.dateTimeLabelFormats;
+          var a = c && c.closestPointRange;
+          return (
+            (a
+              ? this.getDateFormat(a, d.x, c.options.startOfWeek, g)
+              : g.day) || g.year
+          );
+        };
+        r.prototype.hide = function (d) {
+          var g = this;
+          h.clearTimeout(this.hideTimer);
+          d = D(d, this.options.hideDelay, 500);
+          this.isHidden ||
+            (this.hideTimer = l(function () {
+              g.getLabel().fadeOut(d ? void 0 : d);
+              g.isHidden = !0;
+            }, d));
+        };
+        r.prototype.init = function (d, g) {
+          this.chart = d;
+          this.options = g;
+          this.crosshairs = [];
+          this.now = { x: 0, y: 0 };
+          this.isHidden = !0;
+          this.split = g.split && !d.inverted && !d.polar;
+          this.shared = g.shared || this.split;
+          this.outside = D(
+            g.outside,
+            !(!d.scrollablePixelsX && !d.scrollablePixelsY)
+          );
+        };
+        r.prototype.isStickyOnContact = function () {
+          return !(
+            this.followPointer ||
+            !this.options.stickOnContact ||
+            !this.inContact
+          );
+        };
+        r.prototype.move = function (d, g, c, a) {
+          var q = this,
+            p = q.now,
+            e =
+              !1 !== q.options.animation &&
+              !q.isHidden &&
+              (1 < Math.abs(d - p.x) || 1 < Math.abs(g - p.y)),
+            f = q.followPointer || 1 < q.len;
+          C(p, {
+            x: e ? (2 * p.x + d) / 3 : d,
+            y: e ? (p.y + g) / 2 : g,
+            anchorX: f ? void 0 : e ? (2 * p.anchorX + c) / 3 : c,
+            anchorY: f ? void 0 : e ? (p.anchorY + a) / 2 : a,
+          });
+          q.getLabel().attr(p);
+          q.drawTracker();
+          e &&
+            (h.clearTimeout(this.tooltipTimeout),
+            (this.tooltipTimeout = setTimeout(function () {
+              q && q.move(d, g, c, a);
+            }, 32)));
+        };
+        r.prototype.refresh = function (d, g) {
+          var c = this.chart,
+            a = this.options,
+            q = d,
+            p = {},
+            e = [],
+            f = a.formatter || this.defaultFormatter;
+          p = this.shared;
+          var l = c.styledMode;
+          if (a.enabled) {
+            h.clearTimeout(this.hideTimer);
+            this.followPointer = n(q)[0].series.tooltipOptions.followPointer;
+            var r = this.getAnchor(q, g);
+            g = r[0];
+            var w = r[1];
+            !p || (q.series && q.series.noSharedTooltip)
+              ? (p = q.getLabelConfig())
+              : (c.pointer.applyInactiveState(q),
+                q.forEach(function (a) {
+                  a.setState("hover");
+                  e.push(a.getLabelConfig());
+                }),
+                (p = { x: q[0].category, y: q[0].y }),
+                (p.points = e),
+                (q = q[0]));
+            this.len = e.length;
+            c = f.call(p, this);
+            f = q.series;
+            this.distance = D(f.tooltipOptions.distance, 16);
+            !1 === c
+              ? this.hide()
+              : (this.split
+                  ? this.renderSplit(c, n(d))
+                  : ((d = this.getLabel()),
+                    (a.style.width && !l) ||
+                      d.css({ width: this.chart.spacingBox.width + "px" }),
+                    d.attr({ text: c && c.join ? c.join("") : c }),
+                    d
+                      .removeClass(/highcharts-color-[\d]+/g)
+                      .addClass(
+                        "highcharts-color-" + D(q.colorIndex, f.colorIndex)
+                      ),
+                    l ||
+                      d.attr({
+                        stroke:
+                          a.borderColor || q.color || f.color || "#666666",
+                      }),
+                    this.updatePosition({
+                      plotX: g,
+                      plotY: w,
+                      negative: q.negative,
+                      ttBelow: q.ttBelow,
+                      h: r[2] || 0,
+                    })),
+                this.isHidden &&
+                  this.label &&
+                  this.label.attr({ opacity: 1 }).show(),
+                (this.isHidden = !1));
+            y(this, "refresh");
+          }
+        };
+        r.prototype.renderSplit = function (d, g) {
+          function c(b, a, c, d, g) {
+            void 0 === g && (g = !0);
+            c
+              ? ((a = I ? 0 : F), (b = z(b - d / 2, m.left, m.right - d)))
+              : ((a -= y),
+                (b = g ? b - d - k : b + k),
+                (b = z(b, g ? b : m.left, m.right)));
+            return { x: b, y: a };
+          }
+          var a = this,
+            q = a.chart,
+            p = a.chart,
+            e = p.plotHeight,
+            l = p.plotLeft,
+            r = p.plotTop,
+            n = p.pointer,
+            h = p.renderer,
+            w = p.scrollablePixelsY,
+            O = void 0 === w ? 0 : w;
+          w = p.scrollingContainer;
+          w = void 0 === w ? { scrollLeft: 0, scrollTop: 0 } : w;
+          var E = w.scrollLeft,
+            u = w.scrollTop,
+            b = p.styledMode,
+            k = a.distance,
+            t = a.options,
+            H = a.options.positioner,
+            m = {
+              left: E,
+              right: E + p.chartWidth,
+              top: u,
+              bottom: u + p.chartHeight,
+            },
+            x = a.getLabel(),
+            I = !(!q.xAxis[0] || !q.xAxis[0].opposite),
+            y = r + u,
+            J = 0,
+            F = e - O;
+          v(d) && (d = [!1, d]);
+          d = d.slice(0, g.length + 1).reduce(function (d, p, q) {
+            if (!1 !== p && "" !== p) {
+              q = g[q - 1] || {
+                isHeader: !0,
+                plotX: g[0].plotX,
+                plotY: e,
+                series: {},
+              };
+              var f = q.isHeader,
+                n = f ? a : q.series,
+                B = n.tt,
+                A = q.isHeader;
+              var w = q.series;
+              var E =
+                "highcharts-color-" + D(q.colorIndex, w.colorIndex, "none");
+              B ||
+                ((B = { padding: t.padding, r: t.borderRadius }),
+                b ||
+                  ((B.fill = t.backgroundColor),
+                  (B["stroke-width"] = t.borderWidth)),
+                (B = h
+                  .label(
+                    "",
+                    0,
+                    0,
+                    t[A ? "headerShape" : "shape"] || "callout",
+                    void 0,
+                    void 0,
+                    t.useHTML
+                  )
+                  .addClass(
+                    (A ? "highcharts-tooltip-header " : "") +
+                      "highcharts-tooltip-box " +
+                      E
+                  )
+                  .attr(B)
+                  .add(x)));
+              B.isActive = !0;
+              B.attr({ text: p });
+              b ||
+                B.css(t.style)
+                  .shadow(t.shadow)
+                  .attr({
+                    stroke: t.borderColor || q.color || w.color || "#333333",
+                  });
+              p = n.tt = B;
+              A = p.getBBox();
+              n = A.width + p.strokeWidth();
+              f && ((J = A.height), (F += J), I && (y -= J));
+              w = q.plotX;
+              w = void 0 === w ? 0 : w;
+              E = q.plotY;
+              E = void 0 === E ? 0 : E;
+              var v = q.series;
+              if (q.isHeader) {
+                w = l + w;
+                var G = r + e / 2;
+              } else
+                (B = v.xAxis),
+                  (v = v.yAxis),
+                  (w = B.pos + z(w, -k, B.len + k)),
+                  v.pos + E >= u + r &&
+                    v.pos + E <= u + r + e - O &&
+                    (G = v.pos + E);
+              w = z(w, m.left - k, m.right + k);
+              "number" === typeof G
+                ? ((A = A.height + 1),
+                  (E = H ? H.call(a, n, A, q) : c(w, G, f, n)),
+                  d.push({
+                    align: H ? 0 : void 0,
+                    anchorX: w,
+                    anchorY: G,
+                    boxWidth: n,
+                    point: q,
+                    rank: D(E.rank, f ? 1 : 0),
+                    size: A,
+                    target: E.y,
+                    tt: p,
+                    x: E.x,
+                  }))
+                : (p.isActive = !1);
+            }
+            return d;
+          }, []);
+          !H &&
+            d.some(function (b) {
+              return b.x < m.left;
+            }) &&
+            (d = d.map(function (b) {
+              var a = c(b.anchorX, b.anchorY, b.point.isHeader, b.boxWidth, !1);
+              return C(b, { target: a.y, x: a.x });
+            }));
+          a.cleanSplit();
+          f.distribute(d, F);
+          d.forEach(function (b) {
+            var a = b.pos;
+            b.tt.attr({
+              visibility: "undefined" === typeof a ? "hidden" : "inherit",
+              x: b.x,
+              y: a + y,
+              anchorX: b.anchorX,
+              anchorY: b.anchorY,
+            });
+          });
+          d = a.container;
+          q = a.renderer;
+          a.outside &&
+            d &&
+            q &&
+            ((p = x.getBBox()),
+            q.setSize(p.width + p.x, p.height + p.y, !1),
+            (n = n.getChartPosition()),
+            (d.style.left = n.left + "px"),
+            (d.style.top = n.top + "px"));
+        };
+        r.prototype.drawTracker = function () {
+          if (this.followPointer || !this.options.stickOnContact)
+            this.tracker && this.tracker.destroy();
+          else {
+            var d = this.chart,
+              g = this.label,
+              c = d.hoverPoint;
+            if (g && c) {
+              var a = { x: 0, y: 0, width: 0, height: 0 };
+              c = this.getAnchor(c);
+              var q = g.getBBox();
+              c[0] += d.plotLeft - g.translateX;
+              c[1] += d.plotTop - g.translateY;
+              a.x = Math.min(0, c[0]);
+              a.y = Math.min(0, c[1]);
+              a.width =
+                0 > c[0]
+                  ? Math.max(Math.abs(c[0]), q.width - c[0])
+                  : Math.max(Math.abs(c[0]), q.width);
+              a.height =
+                0 > c[1]
+                  ? Math.max(Math.abs(c[1]), q.height - Math.abs(c[1]))
+                  : Math.max(Math.abs(c[1]), q.height);
+              this.tracker
+                ? this.tracker.attr(a)
+                : ((this.tracker = g.renderer
+                    .rect(a)
+                    .addClass("highcharts-tracker")
+                    .add(g)),
+                  d.styledMode || this.tracker.attr({ fill: "rgba(0,0,0,0)" }));
+            }
+          }
+        };
+        r.prototype.styledModeFormat = function (d) {
+          return d
+            .replace('style="font-size: 10px"', 'class="highcharts-header"')
+            .replace(
+              /style="color:{(point|series)\.color}"/g,
+              'class="highcharts-color-{$1.colorIndex}"'
+            );
+        };
+        r.prototype.tooltipFooterHeaderFormatter = function (d, g) {
+          var c = g ? "footer" : "header",
+            a = d.series,
+            q = a.tooltipOptions,
+            p = q.xDateFormat,
+            f = a.xAxis,
+            l = f && "datetime" === f.options.type && I(d.key),
+            r = q[c + "Format"];
+          g = { isFooter: g, labelConfig: d };
+          y(this, "headerFormatter", g, function (c) {
+            l && !p && (p = this.getXDateFormat(d, q, f));
+            l &&
+              p &&
+              ((d.point && d.point.tooltipDateKeys) || ["key"]).forEach(
+                function (a) {
+                  r = r.replace(
+                    "{point." + a + "}",
+                    "{point." + a + ":" + p + "}"
+                  );
+                }
+              );
+            a.chart.styledMode && (r = this.styledModeFormat(r));
+            c.text = e(r, { point: d, series: a }, this.chart);
+          });
+          return g.text;
+        };
+        r.prototype.update = function (d) {
+          this.destroy();
+          x(!0, this.chart.options.tooltip.userOptions, d);
+          this.init(this.chart, x(!0, this.options, d));
+        };
+        r.prototype.updatePosition = function (d) {
+          var g = this.chart,
+            c = g.pointer,
+            a = this.getLabel(),
+            q = d.plotX + g.plotLeft,
+            p = d.plotY + g.plotTop;
+          c = c.getChartPosition();
+          d = (this.options.positioner || this.getPosition).call(
+            this,
+            a.width,
+            a.height,
+            d
+          );
+          if (this.outside) {
+            var e = (this.options.borderWidth || 0) + 2 * this.distance;
+            this.renderer.setSize(a.width + e, a.height + e, !1);
+            if ((g = g.containerScaling))
+              F(this.container, {
+                transform: "scale(" + g.scaleX + ", " + g.scaleY + ")",
+              }),
+                (q *= g.scaleX),
+                (p *= g.scaleY);
+            q += c.left - d.x;
+            p += c.top - d.y;
+          }
+          this.move(Math.round(d.x), Math.round(d.y || 0), q, p);
+        };
+        return r;
+      })();
+      f.Tooltip = w;
+      return f.Tooltip;
+    }
+  );
+  N(
+    m,
+    "Core/Pointer.js",
+    [
+      m["Core/Color/Color.js"],
+      m["Core/Globals.js"],
+      m["Core/Tooltip.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z) {
+      var F = f.parse,
+        P = h.charts,
+        K = h.noop,
+        C = z.addEvent,
+        y = z.attr,
+        e = z.css,
+        I = z.defined,
+        v = z.extend,
+        x = z.find,
+        D = z.fireEvent,
+        n = z.isNumber,
+        l = z.isObject,
+        J = z.objectEach,
+        w = z.offset,
+        r = z.pick,
+        d = z.splat;
+      ("");
+      f = (function () {
+        function g(c, a) {
+          this.lastValidTouch = {};
+          this.pinchDown = [];
+          this.runChartClick = !1;
+          this.chart = c;
+          this.hasDragged = !1;
+          this.options = a;
+          this.unbindContainerMouseLeave = function () {};
+          this.unbindContainerMouseEnter = function () {};
+          this.init(c, a);
+        }
+        g.prototype.applyInactiveState = function (c) {
+          var a = [],
+            d;
+          (c || []).forEach(function (c) {
+            d = c.series;
+            a.push(d);
+            d.linkedParent && a.push(d.linkedParent);
+            d.linkedSeries && (a = a.concat(d.linkedSeries));
+            d.navigatorSeries && a.push(d.navigatorSeries);
+          });
+          this.chart.series.forEach(function (c) {
+            -1 === a.indexOf(c)
+              ? c.setState("inactive", !0)
+              : c.options.inactiveOtherPoints &&
+                c.setAllPointsToState("inactive");
+          });
+        };
+        g.prototype.destroy = function () {
+          var c = this;
+          "undefined" !== typeof c.unDocMouseMove && c.unDocMouseMove();
+          this.unbindContainerMouseLeave();
+          h.chartCount ||
+            (h.unbindDocumentMouseUp &&
+              (h.unbindDocumentMouseUp = h.unbindDocumentMouseUp()),
+            h.unbindDocumentTouchEnd &&
+              (h.unbindDocumentTouchEnd = h.unbindDocumentTouchEnd()));
+          clearInterval(c.tooltipTimeout);
+          J(c, function (a, d) {
+            c[d] = void 0;
+          });
+        };
+        g.prototype.drag = function (c) {
+          var a = this.chart,
+            d = a.options.chart,
+            g = c.chartX,
+            e = c.chartY,
+            f = this.zoomHor,
+            r = this.zoomVert,
+            n = a.plotLeft,
+            h = a.plotTop,
+            w = a.plotWidth,
+            v = a.plotHeight,
+            E = this.selectionMarker,
+            u = this.mouseDownX || 0,
+            b = this.mouseDownY || 0,
+            k = l(d.panning) ? d.panning && d.panning.enabled : d.panning,
+            t = d.panKey && c[d.panKey + "Key"];
+          if (!E || !E.touch)
+            if (
+              (g < n ? (g = n) : g > n + w && (g = n + w),
+              e < h ? (e = h) : e > h + v && (e = h + v),
+              (this.hasDragged = Math.sqrt(
+                Math.pow(u - g, 2) + Math.pow(b - e, 2)
+              )),
+              10 < this.hasDragged)
+            ) {
+              var H = a.isInsidePlot(u - n, b - h);
+              a.hasCartesianSeries &&
+                (this.zoomX || this.zoomY) &&
+                H &&
+                !t &&
+                !E &&
+                ((this.selectionMarker = E =
+                  a.renderer
+                    .rect(n, h, f ? 1 : w, r ? 1 : v, 0)
+                    .attr({ class: "highcharts-selection-marker", zIndex: 7 })
+                    .add()),
+                a.styledMode ||
+                  E.attr({
+                    fill:
+                      d.selectionMarkerFill ||
+                      F("#335cad").setOpacity(0.25).get(),
+                  }));
+              E &&
+                f &&
+                ((g -= u),
+                E.attr({ width: Math.abs(g), x: (0 < g ? 0 : g) + u }));
+              E &&
+                r &&
+                ((g = e - b),
+                E.attr({ height: Math.abs(g), y: (0 < g ? 0 : g) + b }));
+              H && !E && k && a.pan(c, d.panning);
+            }
+        };
+        g.prototype.dragStart = function (c) {
+          var a = this.chart;
+          a.mouseIsDown = c.type;
+          a.cancelClick = !1;
+          a.mouseDownX = this.mouseDownX = c.chartX;
+          a.mouseDownY = this.mouseDownY = c.chartY;
+        };
+        g.prototype.drop = function (c) {
+          var a = this,
+            d = this.chart,
+            g = this.hasPinched;
+          if (this.selectionMarker) {
+            var f = { originalEvent: c, xAxis: [], yAxis: [] },
+              l = this.selectionMarker,
+              r = l.attr ? l.attr("x") : l.x,
+              h = l.attr ? l.attr("y") : l.y,
+              w = l.attr ? l.attr("width") : l.width,
+              m = l.attr ? l.attr("height") : l.height,
+              O;
+            if (this.hasDragged || g)
+              d.axes.forEach(function (d) {
+                if (
+                  d.zoomEnabled &&
+                  I(d.min) &&
+                  (g || a[{ xAxis: "zoomX", yAxis: "zoomY" }[d.coll]]) &&
+                  n(r) &&
+                  n(h)
+                ) {
+                  var p = d.horiz,
+                    b = "touchend" === c.type ? d.minPixelPadding : 0,
+                    k = d.toValue((p ? r : h) + b);
+                  p = d.toValue((p ? r + w : h + m) - b);
+                  f[d.coll].push({
+                    axis: d,
+                    min: Math.min(k, p),
+                    max: Math.max(k, p),
+                  });
+                  O = !0;
+                }
+              }),
+                O &&
+                  D(d, "selection", f, function (a) {
+                    d.zoom(v(a, g ? { animation: !1 } : null));
+                  });
+            n(d.index) &&
+              (this.selectionMarker = this.selectionMarker.destroy());
+            g && this.scaleGroups();
+          }
+          d &&
+            n(d.index) &&
+            (e(d.container, { cursor: d._cursor }),
+            (d.cancelClick = 10 < this.hasDragged),
+            (d.mouseIsDown = this.hasDragged = this.hasPinched = !1),
+            (this.pinchDown = []));
+        };
+        g.prototype.findNearestKDPoint = function (c, a, d) {
+          var g = this.chart,
+            q = g.hoverPoint;
+          g = g.tooltip;
+          if (q && g && g.isStickyOnContact()) return q;
+          var e;
+          c.forEach(function (c) {
+            var g =
+              !(c.noSharedTooltip && a) &&
+              0 > c.options.findNearestPointBy.indexOf("y");
+            c = c.searchPoint(d, g);
+            if ((g = l(c, !0)) && !(g = !l(e, !0))) {
+              g = e.distX - c.distX;
+              var p = e.dist - c.dist,
+                q =
+                  (c.series.group && c.series.group.zIndex) -
+                  (e.series.group && e.series.group.zIndex);
+              g =
+                0 <
+                (0 !== g && a
+                  ? g
+                  : 0 !== p
+                  ? p
+                  : 0 !== q
+                  ? q
+                  : e.series.index > c.series.index
+                  ? -1
+                  : 1);
+            }
+            g && (e = c);
+          });
+          return e;
+        };
+        g.prototype.getChartCoordinatesFromPoint = function (c, a) {
+          var d = c.series,
+            g = d.xAxis;
+          d = d.yAxis;
+          var e = r(c.clientX, c.plotX),
+            f = c.shapeArgs;
+          if (g && d)
+            return a
+              ? { chartX: g.len + g.pos - e, chartY: d.len + d.pos - c.plotY }
+              : { chartX: e + g.pos, chartY: c.plotY + d.pos };
+          if (f && f.x && f.y) return { chartX: f.x, chartY: f.y };
+        };
+        g.prototype.getChartPosition = function () {
+          return (
+            this.chartPosition || (this.chartPosition = w(this.chart.container))
+          );
+        };
+        g.prototype.getCoordinates = function (c) {
+          var a = { xAxis: [], yAxis: [] };
+          this.chart.axes.forEach(function (d) {
+            a[d.isXAxis ? "xAxis" : "yAxis"].push({
+              axis: d,
+              value: d.toValue(c[d.horiz ? "chartX" : "chartY"]),
+            });
+          });
+          return a;
+        };
+        g.prototype.getHoverData = function (c, a, d, g, e, f) {
+          var p,
+            q = [];
+          g = !(!g || !c);
+          var n = a && !a.stickyTracking,
+            h = {
+              chartX: f ? f.chartX : void 0,
+              chartY: f ? f.chartY : void 0,
+              shared: e,
+            };
+          D(this, "beforeGetHoverData", h);
+          n = n
+            ? [a]
+            : d.filter(function (a) {
+                return h.filter
+                  ? h.filter(a)
+                  : a.visible &&
+                      !(!e && a.directTouch) &&
+                      r(a.options.enableMouseTracking, !0) &&
+                      a.stickyTracking;
+              });
+          a = (p = g || !f ? c : this.findNearestKDPoint(n, e, f)) && p.series;
+          p &&
+            (e && !a.noSharedTooltip
+              ? ((n = d.filter(function (a) {
+                  return h.filter
+                    ? h.filter(a)
+                    : a.visible &&
+                        !(!e && a.directTouch) &&
+                        r(a.options.enableMouseTracking, !0) &&
+                        !a.noSharedTooltip;
+                })),
+                n.forEach(function (a) {
+                  var c = x(a.points, function (a) {
+                    return a.x === p.x && !a.isNull;
+                  });
+                  l(c) &&
+                    (a.chart.isBoosting && (c = a.getPoint(c)), q.push(c));
+                }))
+              : q.push(p));
+          h = { hoverPoint: p };
+          D(this, "afterGetHoverData", h);
+          return { hoverPoint: h.hoverPoint, hoverSeries: a, hoverPoints: q };
+        };
+        g.prototype.getPointFromEvent = function (c) {
+          c = c.target;
+          for (var a; c && !a; ) (a = c.point), (c = c.parentNode);
+          return a;
+        };
+        g.prototype.onTrackerMouseOut = function (c) {
+          c = c.relatedTarget || c.toElement;
+          var a = this.chart.hoverSeries;
+          this.isDirectTouch = !1;
+          if (
+            !(
+              !a ||
+              !c ||
+              a.stickyTracking ||
+              this.inClass(c, "highcharts-tooltip") ||
+              (this.inClass(c, "highcharts-series-" + a.index) &&
+                this.inClass(c, "highcharts-tracker"))
+            )
+          )
+            a.onMouseOut();
+        };
+        g.prototype.inClass = function (c, a) {
+          for (var d; c; ) {
+            if ((d = y(c, "class"))) {
+              if (-1 !== d.indexOf(a)) return !0;
+              if (-1 !== d.indexOf("highcharts-container")) return !1;
+            }
+            c = c.parentNode;
+          }
+        };
+        g.prototype.init = function (c, a) {
+          this.options = a;
+          this.chart = c;
+          this.runChartClick = a.chart.events && !!a.chart.events.click;
+          this.pinchDown = [];
+          this.lastValidTouch = {};
+          m &&
+            ((c.tooltip = new m(c, a.tooltip)),
+            (this.followTouchMove = r(a.tooltip.followTouchMove, !0)));
+          this.setDOMEvents();
+        };
+        g.prototype.normalize = function (c, a) {
+          var d = c.touches,
+            g = d
+              ? d.length
+                ? d.item(0)
+                : r(d.changedTouches, c.changedTouches)[0]
+              : c;
+          a || (a = this.getChartPosition());
+          d = g.pageX - a.left;
+          a = g.pageY - a.top;
+          if ((g = this.chart.containerScaling))
+            (d /= g.scaleX), (a /= g.scaleY);
+          return v(c, { chartX: Math.round(d), chartY: Math.round(a) });
+        };
+        g.prototype.onContainerClick = function (c) {
+          var a = this.chart,
+            d = a.hoverPoint;
+          c = this.normalize(c);
+          var g = a.plotLeft,
+            e = a.plotTop;
+          a.cancelClick ||
+            (d && this.inClass(c.target, "highcharts-tracker")
+              ? (D(d.series, "click", v(c, { point: d })),
+                a.hoverPoint && d.firePointEvent("click", c))
+              : (v(c, this.getCoordinates(c)),
+                a.isInsidePlot(c.chartX - g, c.chartY - e) &&
+                  D(a, "click", c)));
+        };
+        g.prototype.onContainerMouseDown = function (c) {
+          var a = 1 === ((c.buttons || c.button) & 1);
+          c = this.normalize(c);
+          if (h.isFirefox && 0 !== c.button) this.onContainerMouseMove(c);
+          if ("undefined" === typeof c.button || a)
+            this.zoomOption(c),
+              a && c.preventDefault && c.preventDefault(),
+              this.dragStart(c);
+        };
+        g.prototype.onContainerMouseLeave = function (c) {
+          var a = P[r(h.hoverChartIndex, -1)],
+            d = this.chart.tooltip;
+          c = this.normalize(c);
+          a &&
+            (c.relatedTarget || c.toElement) &&
+            (a.pointer.reset(), (a.pointer.chartPosition = void 0));
+          d && !d.isHidden && this.reset();
+        };
+        g.prototype.onContainerMouseEnter = function (c) {
+          delete this.chartPosition;
+        };
+        g.prototype.onContainerMouseMove = function (c) {
+          var a = this.chart;
+          c = this.normalize(c);
+          this.setHoverChartIndex();
+          c.preventDefault || (c.returnValue = !1);
+          "mousedown" === a.mouseIsDown && this.drag(c);
+          a.openMenu ||
+            (!this.inClass(c.target, "highcharts-tracker") &&
+              !a.isInsidePlot(c.chartX - a.plotLeft, c.chartY - a.plotTop)) ||
+            this.runPointActions(c);
+        };
+        g.prototype.onDocumentTouchEnd = function (c) {
+          P[h.hoverChartIndex] && P[h.hoverChartIndex].pointer.drop(c);
+        };
+        g.prototype.onContainerTouchMove = function (c) {
+          this.touch(c);
+        };
+        g.prototype.onContainerTouchStart = function (c) {
+          this.zoomOption(c);
+          this.touch(c, !0);
+        };
+        g.prototype.onDocumentMouseMove = function (c) {
+          var a = this.chart,
+            d = this.chartPosition;
+          c = this.normalize(c, d);
+          var g = a.tooltip;
+          !d ||
+            (g && g.isStickyOnContact()) ||
+            a.isInsidePlot(c.chartX - a.plotLeft, c.chartY - a.plotTop) ||
+            this.inClass(c.target, "highcharts-tracker") ||
+            this.reset();
+        };
+        g.prototype.onDocumentMouseUp = function (c) {
+          var a = P[r(h.hoverChartIndex, -1)];
+          a && a.pointer.drop(c);
+        };
+        g.prototype.pinch = function (c) {
+          var a = this,
+            d = a.chart,
+            g = a.pinchDown,
+            e = c.touches || [],
+            f = e.length,
+            l = a.lastValidTouch,
+            n = a.hasZoom,
+            h = a.selectionMarker,
+            w = {},
+            m =
+              1 === f &&
+              ((a.inClass(c.target, "highcharts-tracker") &&
+                d.runTrackerClick) ||
+                a.runChartClick),
+            E = {};
+          1 < f && (a.initiated = !0);
+          n && a.initiated && !m && !1 !== c.cancelable && c.preventDefault();
+          [].map.call(e, function (c) {
+            return a.normalize(c);
+          });
+          "touchstart" === c.type
+            ? ([].forEach.call(e, function (a, b) {
+                g[b] = { chartX: a.chartX, chartY: a.chartY };
+              }),
+              (l.x = [g[0].chartX, g[1] && g[1].chartX]),
+              (l.y = [g[0].chartY, g[1] && g[1].chartY]),
+              d.axes.forEach(function (a) {
+                if (a.zoomEnabled) {
+                  var b = d.bounds[a.horiz ? "h" : "v"],
+                    c = a.minPixelPadding,
+                    g = a.toPixels(
+                      Math.min(r(a.options.min, a.dataMin), a.dataMin)
+                    ),
+                    p = a.toPixels(
+                      Math.max(r(a.options.max, a.dataMax), a.dataMax)
+                    ),
+                    q = Math.max(g, p);
+                  b.min = Math.min(a.pos, Math.min(g, p) - c);
+                  b.max = Math.max(a.pos + a.len, q + c);
+                }
+              }),
+              (a.res = !0))
+            : a.followTouchMove && 1 === f
+            ? this.runPointActions(a.normalize(c))
+            : g.length &&
+              (h ||
+                (a.selectionMarker = h =
+                  v({ destroy: K, touch: !0 }, d.plotBox)),
+              a.pinchTranslate(g, e, w, h, E, l),
+              (a.hasPinched = n),
+              a.scaleGroups(w, E),
+              a.res && ((a.res = !1), this.reset(!1, 0)));
+        };
+        g.prototype.pinchTranslate = function (c, a, d, g, e, f) {
+          this.zoomHor && this.pinchTranslateDirection(!0, c, a, d, g, e, f);
+          this.zoomVert && this.pinchTranslateDirection(!1, c, a, d, g, e, f);
+        };
+        g.prototype.pinchTranslateDirection = function (
+          c,
+          a,
+          d,
+          g,
+          e,
+          f,
+          l,
+          r
+        ) {
+          var p = this.chart,
+            q = c ? "x" : "y",
+            n = c ? "X" : "Y",
+            h = "chart" + n,
+            u = c ? "width" : "height",
+            b = p["plot" + (c ? "Left" : "Top")],
+            k,
+            t,
+            B = r || 1,
+            w = p.inverted,
+            A = p.bounds[c ? "h" : "v"],
+            v = 1 === a.length,
+            G = a[0][h],
+            m = d[0][h],
+            D = !v && a[1][h],
+            M = !v && d[1][h];
+          d = function () {
+            "number" === typeof M &&
+              20 < Math.abs(G - D) &&
+              (B = r || Math.abs(m - M) / Math.abs(G - D));
+            t = (b - m) / B + G;
+            k = p["plot" + (c ? "Width" : "Height")] / B;
+          };
+          d();
+          a = t;
+          if (a < A.min) {
+            a = A.min;
+            var x = !0;
+          } else a + k > A.max && ((a = A.max - k), (x = !0));
+          x
+            ? ((m -= 0.8 * (m - l[q][0])),
+              "number" === typeof M && (M -= 0.8 * (M - l[q][1])),
+              d())
+            : (l[q] = [m, M]);
+          w || ((f[q] = t - b), (f[u] = k));
+          f = w ? 1 / B : B;
+          e[u] = k;
+          e[q] = a;
+          g[w ? (c ? "scaleY" : "scaleX") : "scale" + n] = B;
+          g["translate" + n] = f * b + (m - f * G);
+        };
+        g.prototype.reset = function (c, a) {
+          var g = this.chart,
+            p = g.hoverSeries,
+            e = g.hoverPoint,
+            f = g.hoverPoints,
+            l = g.tooltip,
+            r = l && l.shared ? f : e;
+          c &&
+            r &&
+            d(r).forEach(function (a) {
+              a.series.isCartesian &&
+                "undefined" === typeof a.plotX &&
+                (c = !1);
+            });
+          if (c)
+            l &&
+              r &&
+              d(r).length &&
+              (l.refresh(r),
+              l.shared && f
+                ? f.forEach(function (a) {
+                    a.setState(a.state, !0);
+                    a.series.isCartesian &&
+                      (a.series.xAxis.crosshair &&
+                        a.series.xAxis.drawCrosshair(null, a),
+                      a.series.yAxis.crosshair &&
+                        a.series.yAxis.drawCrosshair(null, a));
+                  })
+                : e &&
+                  (e.setState(e.state, !0),
+                  g.axes.forEach(function (a) {
+                    a.crosshair &&
+                      e.series[a.coll] === a &&
+                      a.drawCrosshair(null, e);
+                  })));
+          else {
+            if (e) e.onMouseOut();
+            f &&
+              f.forEach(function (a) {
+                a.setState();
+              });
+            if (p) p.onMouseOut();
+            l && l.hide(a);
+            this.unDocMouseMove &&
+              (this.unDocMouseMove = this.unDocMouseMove());
+            g.axes.forEach(function (a) {
+              a.hideCrosshair();
+            });
+            this.hoverX = g.hoverPoints = g.hoverPoint = null;
+          }
+        };
+        g.prototype.runPointActions = function (c, a) {
+          var d = this.chart,
+            g = d.tooltip && d.tooltip.options.enabled ? d.tooltip : void 0,
+            e = g ? g.shared : !1,
+            f = a || d.hoverPoint,
+            l = (f && f.series) || d.hoverSeries;
+          l = this.getHoverData(
+            f,
+            l,
+            d.series,
+            (!c || "touchmove" !== c.type) &&
+              (!!a || (l && l.directTouch && this.isDirectTouch)),
+            e,
+            c
+          );
+          f = l.hoverPoint;
+          var n = l.hoverPoints;
+          a = (l = l.hoverSeries) && l.tooltipOptions.followPointer;
+          e = e && l && !l.noSharedTooltip;
+          if (f && (f !== d.hoverPoint || (g && g.isHidden))) {
+            (d.hoverPoints || []).forEach(function (a) {
+              -1 === n.indexOf(a) && a.setState();
+            });
+            if (d.hoverSeries !== l) l.onMouseOver();
+            this.applyInactiveState(n);
+            (n || []).forEach(function (a) {
+              a.setState("hover");
+            });
+            d.hoverPoint && d.hoverPoint.firePointEvent("mouseOut");
+            if (!f.series) return;
+            d.hoverPoints = n;
+            d.hoverPoint = f;
+            f.firePointEvent("mouseOver");
+            g && g.refresh(e ? n : f, c);
+          } else
+            a &&
+              g &&
+              !g.isHidden &&
+              ((f = g.getAnchor([{}], c)),
+              g.updatePosition({ plotX: f[0], plotY: f[1] }));
+          this.unDocMouseMove ||
+            (this.unDocMouseMove = C(
+              d.container.ownerDocument,
+              "mousemove",
+              function (a) {
+                var c = P[h.hoverChartIndex];
+                if (c) c.pointer.onDocumentMouseMove(a);
+              }
+            ));
+          d.axes.forEach(function (a) {
+            var g = r((a.crosshair || {}).snap, !0),
+              p;
+            g &&
+              (((p = d.hoverPoint) && p.series[a.coll] === a) ||
+                (p = x(n, function (c) {
+                  return c.series[a.coll] === a;
+                })));
+            p || !g ? a.drawCrosshair(c, p) : a.hideCrosshair();
+          });
+        };
+        g.prototype.scaleGroups = function (c, a) {
+          var d = this.chart,
+            g;
+          d.series.forEach(function (p) {
+            g = c || p.getPlotBox();
+            p.xAxis &&
+              p.xAxis.zoomEnabled &&
+              p.group &&
+              (p.group.attr(g),
+              p.markerGroup &&
+                (p.markerGroup.attr(g),
+                p.markerGroup.clip(a ? d.clipRect : null)),
+              p.dataLabelsGroup && p.dataLabelsGroup.attr(g));
+          });
+          d.clipRect.attr(a || d.clipBox);
+        };
+        g.prototype.setDOMEvents = function () {
+          var c = this.chart.container,
+            a = c.ownerDocument;
+          c.onmousedown = this.onContainerMouseDown.bind(this);
+          c.onmousemove = this.onContainerMouseMove.bind(this);
+          c.onclick = this.onContainerClick.bind(this);
+          this.unbindContainerMouseEnter = C(
+            c,
+            "mouseenter",
+            this.onContainerMouseEnter.bind(this)
+          );
+          this.unbindContainerMouseLeave = C(
+            c,
+            "mouseleave",
+            this.onContainerMouseLeave.bind(this)
+          );
+          h.unbindDocumentMouseUp ||
+            (h.unbindDocumentMouseUp = C(
+              a,
+              "mouseup",
+              this.onDocumentMouseUp.bind(this)
+            ));
+          h.hasTouch &&
+            (C(c, "touchstart", this.onContainerTouchStart.bind(this)),
+            C(c, "touchmove", this.onContainerTouchMove.bind(this)),
+            h.unbindDocumentTouchEnd ||
+              (h.unbindDocumentTouchEnd = C(
+                a,
+                "touchend",
+                this.onDocumentTouchEnd.bind(this)
+              )));
+        };
+        g.prototype.setHoverChartIndex = function () {
+          var c = this.chart,
+            a = h.charts[r(h.hoverChartIndex, -1)];
+          if (a && a !== c)
+            a.pointer.onContainerMouseLeave({ relatedTarget: !0 });
+          (a && a.mouseIsDown) || (h.hoverChartIndex = c.index);
+        };
+        g.prototype.touch = function (c, a) {
+          var d = this.chart,
+            g;
+          this.setHoverChartIndex();
+          if (1 === c.touches.length)
+            if (
+              ((c = this.normalize(c)),
+              (g = d.isInsidePlot(
+                c.chartX - d.plotLeft,
+                c.chartY - d.plotTop
+              )) && !d.openMenu)
+            ) {
+              a && this.runPointActions(c);
+              if ("touchmove" === c.type) {
+                a = this.pinchDown;
+                var e = a[0]
+                  ? 4 <=
+                    Math.sqrt(
+                      Math.pow(a[0].chartX - c.chartX, 2) +
+                        Math.pow(a[0].chartY - c.chartY, 2)
+                    )
+                  : !1;
+              }
+              r(e, !0) && this.pinch(c);
+            } else a && this.reset();
+          else 2 === c.touches.length && this.pinch(c);
+        };
+        g.prototype.zoomOption = function (c) {
+          var a = this.chart,
+            d = a.options.chart,
+            g = d.zoomType || "";
+          a = a.inverted;
+          /touch/.test(c.type) && (g = r(d.pinchType, g));
+          this.zoomX = c = /x/.test(g);
+          this.zoomY = g = /y/.test(g);
+          this.zoomHor = (c && !a) || (g && a);
+          this.zoomVert = (g && !a) || (c && a);
+          this.hasZoom = c || g;
+        };
+        return g;
+      })();
+      return (h.Pointer = f);
+    }
+  );
+  N(
+    m,
+    "Core/MSPointer.js",
+    [m["Core/Globals.js"], m["Core/Pointer.js"], m["Core/Utilities.js"]],
+    function (f, h, m) {
+      function z() {
+        var e = [];
+        e.item = function (e) {
+          return this[e];
+        };
+        v(D, function (f) {
+          e.push({ pageX: f.pageX, pageY: f.pageY, target: f.target });
+        });
+        return e;
+      }
+      function F(e, n, h, r) {
+        ("touch" !== e.pointerType &&
+          e.pointerType !== e.MSPOINTER_TYPE_TOUCH) ||
+          !K[f.hoverChartIndex] ||
+          (r(e),
+          (r = K[f.hoverChartIndex].pointer),
+          r[n]({
+            type: h,
+            target: e.currentTarget,
+            preventDefault: y,
+            touches: z(),
+          }));
+      }
+      var P =
+          (this && this.__extends) ||
+          (function () {
+            var e = function (f, l) {
+              e =
+                Object.setPrototypeOf ||
+                ({ __proto__: [] } instanceof Array &&
+                  function (e, d) {
+                    e.__proto__ = d;
+                  }) ||
+                function (e, d) {
+                  for (var g in d) d.hasOwnProperty(g) && (e[g] = d[g]);
+                };
+              return e(f, l);
+            };
+            return function (f, l) {
+              function r() {
+                this.constructor = f;
+              }
+              e(f, l);
+              f.prototype =
+                null === l
+                  ? Object.create(l)
+                  : ((r.prototype = l.prototype), new r());
+            };
+          })(),
+        K = f.charts,
+        C = f.doc,
+        y = f.noop,
+        e = m.addEvent,
+        I = m.css,
+        v = m.objectEach,
+        x = m.removeEvent,
+        D = {},
+        n = !!f.win.PointerEvent;
+      return (function (f) {
+        function l() {
+          return (null !== f && f.apply(this, arguments)) || this;
+        }
+        P(l, f);
+        l.prototype.batchMSEvents = function (e) {
+          e(
+            this.chart.container,
+            n ? "pointerdown" : "MSPointerDown",
+            this.onContainerPointerDown
+          );
+          e(
+            this.chart.container,
+            n ? "pointermove" : "MSPointerMove",
+            this.onContainerPointerMove
+          );
+          e(C, n ? "pointerup" : "MSPointerUp", this.onDocumentPointerUp);
+        };
+        l.prototype.destroy = function () {
+          this.batchMSEvents(x);
+          f.prototype.destroy.call(this);
+        };
+        l.prototype.init = function (e, l) {
+          f.prototype.init.call(this, e, l);
+          this.hasZoom &&
+            I(e.container, {
+              "-ms-touch-action": "none",
+              "touch-action": "none",
+            });
+        };
+        l.prototype.onContainerPointerDown = function (e) {
+          F(e, "onContainerTouchStart", "touchstart", function (e) {
+            D[e.pointerId] = {
+              pageX: e.pageX,
+              pageY: e.pageY,
+              target: e.currentTarget,
+            };
+          });
+        };
+        l.prototype.onContainerPointerMove = function (e) {
+          F(e, "onContainerTouchMove", "touchmove", function (e) {
+            D[e.pointerId] = { pageX: e.pageX, pageY: e.pageY };
+            D[e.pointerId].target || (D[e.pointerId].target = e.currentTarget);
+          });
+        };
+        l.prototype.onDocumentPointerUp = function (e) {
+          F(e, "onDocumentTouchEnd", "touchend", function (e) {
+            delete D[e.pointerId];
+          });
+        };
+        l.prototype.setDOMEvents = function () {
+          f.prototype.setDOMEvents.call(this);
+          (this.hasZoom || this.followTouchMove) && this.batchMSEvents(e);
+        };
+        return l;
+      })(h);
+    }
+  );
+  N(
+    m,
+    "Core/Legend.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Globals.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m) {
+      var z = f.animObject,
+        F = f.setAnimation,
+        L = m.addEvent,
+        K = m.css,
+        C = m.defined,
+        y = m.discardElement,
+        e = m.find,
+        I = m.fireEvent,
+        v = m.format,
+        x = m.isNumber,
+        D = m.merge,
+        n = m.pick,
+        l = m.relativeLength,
+        J = m.stableSort,
+        w = m.syncTimeout;
+      f = m.wrap;
+      m = h.isFirefox;
+      var r = h.marginNames,
+        d = h.win,
+        g = (function () {
+          function c(a, c) {
+            this.allItems = [];
+            this.contentGroup = this.box = void 0;
+            this.display = !1;
+            this.group = void 0;
+            this.offsetWidth =
+              this.maxLegendWidth =
+              this.maxItemWidth =
+              this.legendWidth =
+              this.legendHeight =
+              this.lastLineHeight =
+              this.lastItemY =
+              this.itemY =
+              this.itemX =
+              this.itemMarginTop =
+              this.itemMarginBottom =
+              this.itemHeight =
+              this.initialItemY =
+                0;
+            this.options = {};
+            this.padding = 0;
+            this.pages = [];
+            this.proximate = !1;
+            this.scrollGroup = void 0;
+            this.widthOption =
+              this.totalItemWidth =
+              this.titleHeight =
+              this.symbolWidth =
+              this.symbolHeight =
+                0;
+            this.chart = a;
+            this.init(a, c);
+          }
+          c.prototype.init = function (a, c) {
+            this.chart = a;
+            this.setOptions(c);
+            c.enabled &&
+              (this.render(),
+              L(this.chart, "endResize", function () {
+                this.legend.positionCheckboxes();
+              }),
+              this.proximate
+                ? (this.unchartrender = L(this.chart, "render", function () {
+                    this.legend.proximatePositions();
+                    this.legend.positionItems();
+                  }))
+                : this.unchartrender && this.unchartrender());
+          };
+          c.prototype.setOptions = function (a) {
+            var c = n(a.padding, 8);
+            this.options = a;
+            this.chart.styledMode ||
+              ((this.itemStyle = a.itemStyle),
+              (this.itemHiddenStyle = D(this.itemStyle, a.itemHiddenStyle)));
+            this.itemMarginTop = a.itemMarginTop || 0;
+            this.itemMarginBottom = a.itemMarginBottom || 0;
+            this.padding = c;
+            this.initialItemY = c - 5;
+            this.symbolWidth = n(a.symbolWidth, 16);
+            this.pages = [];
+            this.proximate = "proximate" === a.layout && !this.chart.inverted;
+            this.baseline = void 0;
+          };
+          c.prototype.update = function (a, c) {
+            var d = this.chart;
+            this.setOptions(D(!0, this.options, a));
+            this.destroy();
+            d.isDirtyLegend = d.isDirtyBox = !0;
+            n(c, !0) && d.redraw();
+            I(this, "afterUpdate");
+          };
+          c.prototype.colorizeItem = function (a, c) {
+            a.legendGroup[c ? "removeClass" : "addClass"](
+              "highcharts-legend-item-hidden"
+            );
+            if (!this.chart.styledMode) {
+              var d = this.options,
+                g = a.legendItem,
+                e = a.legendLine,
+                f = a.legendSymbol,
+                q = this.itemHiddenStyle.color;
+              d = c ? d.itemStyle.color : q;
+              var l = c ? a.color || q : q,
+                r = a.options && a.options.marker,
+                n = { fill: l };
+              g && g.css({ fill: d, color: d });
+              e && e.attr({ stroke: l });
+              f &&
+                (r &&
+                  f.isMarker &&
+                  ((n = a.pointAttribs()), c || (n.stroke = n.fill = q)),
+                f.attr(n));
+            }
+            I(this, "afterColorizeItem", { item: a, visible: c });
+          };
+          c.prototype.positionItems = function () {
+            this.allItems.forEach(this.positionItem, this);
+            this.chart.isResizing || this.positionCheckboxes();
+          };
+          c.prototype.positionItem = function (a) {
+            var c = this,
+              d = this.options,
+              g = d.symbolPadding,
+              e = !d.rtl,
+              f = a._legendItemPos;
+            d = f[0];
+            f = f[1];
+            var l = a.checkbox,
+              n = a.legendGroup;
+            n &&
+              n.element &&
+              ((g = {
+                translateX: e ? d : this.legendWidth - d - 2 * g - 4,
+                translateY: f,
+              }),
+              (e = function () {
+                I(c, "afterPositionItem", { item: a });
+              }),
+              C(n.translateY) ? n.animate(g, void 0, e) : (n.attr(g), e()));
+            l && ((l.x = d), (l.y = f));
+          };
+          c.prototype.destroyItem = function (a) {
+            var c = a.checkbox;
+            ["legendItem", "legendLine", "legendSymbol", "legendGroup"].forEach(
+              function (c) {
+                a[c] && (a[c] = a[c].destroy());
+              }
+            );
+            c && y(a.checkbox);
+          };
+          c.prototype.destroy = function () {
+            function a(a) {
+              this[a] && (this[a] = this[a].destroy());
+            }
+            this.getAllItems().forEach(function (c) {
+              ["legendItem", "legendGroup"].forEach(a, c);
+            });
+            "clipRect up down pager nav box title group"
+              .split(" ")
+              .forEach(a, this);
+            this.display = null;
+          };
+          c.prototype.positionCheckboxes = function () {
+            var a = this.group && this.group.alignAttr,
+              c = this.clipHeight || this.legendHeight,
+              d = this.titleHeight;
+            if (a) {
+              var g = a.translateY;
+              this.allItems.forEach(function (e) {
+                var p = e.checkbox;
+                if (p) {
+                  var f = g + d + p.y + (this.scrollOffset || 0) + 3;
+                  K(p, {
+                    left: a.translateX + e.checkboxOffset + p.x - 20 + "px",
+                    top: f + "px",
+                    display:
+                      this.proximate || (f > g - 6 && f < g + c - 6)
+                        ? ""
+                        : "none",
+                  });
+                }
+              }, this);
+            }
+          };
+          c.prototype.renderTitle = function () {
+            var a = this.options,
+              c = this.padding,
+              d = a.title,
+              g = 0;
+            d.text &&
+              (this.title ||
+                ((this.title = this.chart.renderer
+                  .label(
+                    d.text,
+                    c - 3,
+                    c - 4,
+                    null,
+                    null,
+                    null,
+                    a.useHTML,
+                    null,
+                    "legend-title"
+                  )
+                  .attr({ zIndex: 1 })),
+                this.chart.styledMode || this.title.css(d.style),
+                this.title.add(this.group)),
+              d.width || this.title.css({ width: this.maxLegendWidth + "px" }),
+              (a = this.title.getBBox()),
+              (g = a.height),
+              (this.offsetWidth = a.width),
+              this.contentGroup.attr({ translateY: g }));
+            this.titleHeight = g;
+          };
+          c.prototype.setText = function (a) {
+            var c = this.options;
+            a.legendItem.attr({
+              text: c.labelFormat
+                ? v(c.labelFormat, a, this.chart)
+                : c.labelFormatter.call(a),
+            });
+          };
+          c.prototype.renderItem = function (a) {
+            var c = this.chart,
+              d = c.renderer,
+              g = this.options,
+              e = this.symbolWidth,
+              f = g.symbolPadding,
+              l = this.itemStyle,
+              r = this.itemHiddenStyle,
+              h = "horizontal" === g.layout ? n(g.itemDistance, 20) : 0,
+              w = !g.rtl,
+              v = a.legendItem,
+              u = !a.series,
+              b = !u && a.series.drawLegendSymbol ? a.series : a,
+              k = b.options;
+            k = this.createCheckboxForItem && k && k.showCheckbox;
+            h = e + f + h + (k ? 20 : 0);
+            var t = g.useHTML,
+              H = a.options.className;
+            v ||
+              ((a.legendGroup = d
+                .g("legend-item")
+                .addClass(
+                  "highcharts-" +
+                    b.type +
+                    "-series highcharts-color-" +
+                    a.colorIndex +
+                    (H ? " " + H : "") +
+                    (u ? " highcharts-series-" + a.index : "")
+                )
+                .attr({ zIndex: 1 })
+                .add(this.scrollGroup)),
+              (a.legendItem = v =
+                d.text("", w ? e + f : -f, this.baseline || 0, t)),
+              c.styledMode || v.css(D(a.visible ? l : r)),
+              v
+                .attr({ align: w ? "left" : "right", zIndex: 2 })
+                .add(a.legendGroup),
+              this.baseline ||
+                ((this.fontMetrics = d.fontMetrics(
+                  c.styledMode ? 12 : l.fontSize,
+                  v
+                )),
+                (this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop),
+                v.attr("y", this.baseline)),
+              (this.symbolHeight = g.symbolHeight || this.fontMetrics.f),
+              b.drawLegendSymbol(this, a),
+              this.setItemEvents && this.setItemEvents(a, v, t));
+            k &&
+              !a.checkbox &&
+              this.createCheckboxForItem &&
+              this.createCheckboxForItem(a);
+            this.colorizeItem(a, a.visible);
+            (!c.styledMode && l.width) ||
+              v.css({
+                width:
+                  (g.itemWidth || this.widthOption || c.spacingBox.width) -
+                  h +
+                  "px",
+              });
+            this.setText(a);
+            c = v.getBBox();
+            a.itemWidth = a.checkboxOffset =
+              g.itemWidth || a.legendItemWidth || c.width + h;
+            this.maxItemWidth = Math.max(this.maxItemWidth, a.itemWidth);
+            this.totalItemWidth += a.itemWidth;
+            this.itemHeight = a.itemHeight = Math.round(
+              a.legendItemHeight || c.height || this.symbolHeight
+            );
+          };
+          c.prototype.layoutItem = function (a) {
+            var c = this.options,
+              d = this.padding,
+              g = "horizontal" === c.layout,
+              e = a.itemHeight,
+              f = this.itemMarginBottom,
+              l = this.itemMarginTop,
+              r = g ? n(c.itemDistance, 20) : 0,
+              h = this.maxLegendWidth;
+            c =
+              c.alignColumns && this.totalItemWidth > h
+                ? this.maxItemWidth
+                : a.itemWidth;
+            g &&
+              this.itemX - d + c > h &&
+              ((this.itemX = d),
+              this.lastLineHeight &&
+                (this.itemY += l + this.lastLineHeight + f),
+              (this.lastLineHeight = 0));
+            this.lastItemY = l + this.itemY + f;
+            this.lastLineHeight = Math.max(e, this.lastLineHeight);
+            a._legendItemPos = [this.itemX, this.itemY];
+            g
+              ? (this.itemX += c)
+              : ((this.itemY += l + e + f), (this.lastLineHeight = e));
+            this.offsetWidth =
+              this.widthOption ||
+              Math.max(
+                (g ? this.itemX - d - (a.checkbox ? 0 : r) : c) + d,
+                this.offsetWidth
+              );
+          };
+          c.prototype.getAllItems = function () {
+            var a = [];
+            this.chart.series.forEach(function (c) {
+              var d = c && c.options;
+              c &&
+                n(d.showInLegend, C(d.linkedTo) ? !1 : void 0, !0) &&
+                (a = a.concat(
+                  c.legendItems || ("point" === d.legendType ? c.data : c)
+                ));
+            });
+            I(this, "afterGetAllItems", { allItems: a });
+            return a;
+          };
+          c.prototype.getAlignment = function () {
+            var a = this.options;
+            return this.proximate
+              ? a.align.charAt(0) + "tv"
+              : a.floating
+              ? ""
+              : a.align.charAt(0) +
+                a.verticalAlign.charAt(0) +
+                a.layout.charAt(0);
+          };
+          c.prototype.adjustMargins = function (a, c) {
+            var d = this.chart,
+              g = this.options,
+              e = this.getAlignment();
+            e &&
+              [
+                /(lth|ct|rth)/,
+                /(rtv|rm|rbv)/,
+                /(rbh|cb|lbh)/,
+                /(lbv|lm|ltv)/,
+              ].forEach(function (f, p) {
+                f.test(e) &&
+                  !C(a[p]) &&
+                  (d[r[p]] = Math.max(
+                    d[r[p]],
+                    d.legend[(p + 1) % 2 ? "legendHeight" : "legendWidth"] +
+                      [1, -1, -1, 1][p] * g[p % 2 ? "x" : "y"] +
+                      n(g.margin, 12) +
+                      c[p] +
+                      (d.titleOffset[p] || 0)
+                  ));
+              });
+          };
+          c.prototype.proximatePositions = function () {
+            var a = this.chart,
+              c = [],
+              d = "left" === this.options.align;
+            this.allItems.forEach(function (g) {
+              var f;
+              var p = d;
+              if (g.yAxis) {
+                g.xAxis.options.reversed && (p = !p);
+                g.points &&
+                  (f = e(
+                    p ? g.points : g.points.slice(0).reverse(),
+                    function (a) {
+                      return x(a.plotY);
+                    }
+                  ));
+                p =
+                  this.itemMarginTop +
+                  g.legendItem.getBBox().height +
+                  this.itemMarginBottom;
+                var q = g.yAxis.top - a.plotTop;
+                g.visible
+                  ? ((f = f ? f.plotY : g.yAxis.height), (f += q - 0.3 * p))
+                  : (f = q + g.yAxis.height);
+                c.push({ target: f, size: p, item: g });
+              }
+            }, this);
+            h.distribute(c, a.plotHeight);
+            c.forEach(function (c) {
+              c.item._legendItemPos[1] = a.plotTop - a.spacing[0] + c.pos;
+            });
+          };
+          c.prototype.render = function () {
+            var a = this.chart,
+              c = a.renderer,
+              d = this.group,
+              g = this.box,
+              e = this.options,
+              f = this.padding;
+            this.itemX = f;
+            this.itemY = this.initialItemY;
+            this.lastItemY = this.offsetWidth = 0;
+            this.widthOption = l(e.width, a.spacingBox.width - f);
+            var n = a.spacingBox.width - 2 * f - e.x;
+            -1 < ["rm", "lm"].indexOf(this.getAlignment().substring(0, 2)) &&
+              (n /= 2);
+            this.maxLegendWidth = this.widthOption || n;
+            d ||
+              ((this.group = d = c.g("legend").attr({ zIndex: 7 }).add()),
+              (this.contentGroup = c.g().attr({ zIndex: 1 }).add(d)),
+              (this.scrollGroup = c.g().add(this.contentGroup)));
+            this.renderTitle();
+            var r = this.getAllItems();
+            J(r, function (a, c) {
+              return (
+                ((a.options && a.options.legendIndex) || 0) -
+                ((c.options && c.options.legendIndex) || 0)
+              );
+            });
+            e.reversed && r.reverse();
+            this.allItems = r;
+            this.display = n = !!r.length;
+            this.itemHeight =
+              this.totalItemWidth =
+              this.maxItemWidth =
+              this.lastLineHeight =
+                0;
+            r.forEach(this.renderItem, this);
+            r.forEach(this.layoutItem, this);
+            r = (this.widthOption || this.offsetWidth) + f;
+            var h = this.lastItemY + this.lastLineHeight + this.titleHeight;
+            h = this.handleOverflow(h);
+            h += f;
+            g ||
+              ((this.box = g =
+                c
+                  .rect()
+                  .addClass("highcharts-legend-box")
+                  .attr({ r: e.borderRadius })
+                  .add(d)),
+              (g.isNew = !0));
+            a.styledMode ||
+              g
+                .attr({
+                  stroke: e.borderColor,
+                  "stroke-width": e.borderWidth || 0,
+                  fill: e.backgroundColor || "none",
+                })
+                .shadow(e.shadow);
+            0 < r &&
+              0 < h &&
+              (g[g.isNew ? "attr" : "animate"](
+                g.crisp.call(
+                  {},
+                  { x: 0, y: 0, width: r, height: h },
+                  g.strokeWidth()
+                )
+              ),
+              (g.isNew = !1));
+            g[n ? "show" : "hide"]();
+            a.styledMode && "none" === d.getStyle("display") && (r = h = 0);
+            this.legendWidth = r;
+            this.legendHeight = h;
+            n && this.align();
+            this.proximate || this.positionItems();
+            I(this, "afterRender");
+          };
+          c.prototype.align = function (a) {
+            void 0 === a && (a = this.chart.spacingBox);
+            var c = this.chart,
+              d = this.options,
+              g = a.y;
+            /(lth|ct|rth)/.test(this.getAlignment()) && 0 < c.titleOffset[0]
+              ? (g += c.titleOffset[0])
+              : /(lbh|cb|rbh)/.test(this.getAlignment()) &&
+                0 < c.titleOffset[2] &&
+                (g -= c.titleOffset[2]);
+            g !== a.y && (a = D(a, { y: g }));
+            this.group.align(
+              D(d, {
+                width: this.legendWidth,
+                height: this.legendHeight,
+                verticalAlign: this.proximate ? "top" : d.verticalAlign,
+              }),
+              !0,
+              a
+            );
+          };
+          c.prototype.handleOverflow = function (a) {
+            var c = this,
+              d = this.chart,
+              g = d.renderer,
+              e = this.options,
+              f = e.y,
+              l = this.padding;
+            f = d.spacingBox.height + ("top" === e.verticalAlign ? -f : f) - l;
+            var r = e.maxHeight,
+              h,
+              w = this.clipRect,
+              v = e.navigation,
+              u = n(v.animation, !0),
+              b = v.arrowSize || 12,
+              k = this.nav,
+              t = this.pages,
+              H,
+              m = this.allItems,
+              D = function (a) {
+                "number" === typeof a
+                  ? w.attr({ height: a })
+                  : w && ((c.clipRect = w.destroy()), c.contentGroup.clip());
+                c.contentGroup.div &&
+                  (c.contentGroup.div.style.clip = a
+                    ? "rect(" + l + "px,9999px," + (l + a) + "px,0)"
+                    : "auto");
+              },
+              x = function (a) {
+                c[a] = g
+                  .circle(0, 0, 1.3 * b)
+                  .translate(b / 2, b / 2)
+                  .add(k);
+                d.styledMode || c[a].attr("fill", "rgba(0,0,0,0.0001)");
+                return c[a];
+              };
+            "horizontal" !== e.layout ||
+              "middle" === e.verticalAlign ||
+              e.floating ||
+              (f /= 2);
+            r && (f = Math.min(f, r));
+            t.length = 0;
+            a > f && !1 !== v.enabled
+              ? ((this.clipHeight = h =
+                  Math.max(f - 20 - this.titleHeight - l, 0)),
+                (this.currentPage = n(this.currentPage, 1)),
+                (this.fullHeight = a),
+                m.forEach(function (a, b) {
+                  var c = a._legendItemPos[1],
+                    d = Math.round(a.legendItem.getBBox().height),
+                    g = t.length;
+                  if (!g || (c - t[g - 1] > h && (H || c) !== t[g - 1]))
+                    t.push(H || c), g++;
+                  a.pageIx = g - 1;
+                  H && (m[b - 1].pageIx = g - 1);
+                  b === m.length - 1 &&
+                    c + d - t[g - 1] > h &&
+                    c !== H &&
+                    (t.push(c), (a.pageIx = g));
+                  c !== H && (H = c);
+                }),
+                w ||
+                  ((w = c.clipRect = g.clipRect(0, l, 9999, 0)),
+                  c.contentGroup.clip(w)),
+                D(h),
+                k ||
+                  ((this.nav = k = g.g().attr({ zIndex: 1 }).add(this.group)),
+                  (this.up = g.symbol("triangle", 0, 0, b, b).add(k)),
+                  x("upTracker").on("click", function () {
+                    c.scroll(-1, u);
+                  }),
+                  (this.pager = g
+                    .text("", 15, 10)
+                    .addClass("highcharts-legend-navigation")),
+                  d.styledMode || this.pager.css(v.style),
+                  this.pager.add(k),
+                  (this.down = g.symbol("triangle-down", 0, 0, b, b).add(k)),
+                  x("downTracker").on("click", function () {
+                    c.scroll(1, u);
+                  })),
+                c.scroll(0),
+                (a = f))
+              : k &&
+                (D(),
+                (this.nav = k.destroy()),
+                this.scrollGroup.attr({ translateY: 1 }),
+                (this.clipHeight = 0));
+            return a;
+          };
+          c.prototype.scroll = function (a, c) {
+            var d = this,
+              g = this.chart,
+              e = this.pages,
+              f = e.length,
+              l = this.currentPage + a;
+            a = this.clipHeight;
+            var q = this.options.navigation,
+              r = this.pager,
+              h = this.padding;
+            l > f && (l = f);
+            0 < l &&
+              ("undefined" !== typeof c && F(c, g),
+              this.nav.attr({
+                translateX: h,
+                translateY: a + this.padding + 7 + this.titleHeight,
+                visibility: "visible",
+              }),
+              [this.up, this.upTracker].forEach(function (a) {
+                a.attr({
+                  class:
+                    1 === l
+                      ? "highcharts-legend-nav-inactive"
+                      : "highcharts-legend-nav-active",
+                });
+              }),
+              r.attr({ text: l + "/" + f }),
+              [this.down, this.downTracker].forEach(function (a) {
+                a.attr({
+                  x: 18 + this.pager.getBBox().width,
+                  class:
+                    l === f
+                      ? "highcharts-legend-nav-inactive"
+                      : "highcharts-legend-nav-active",
+                });
+              }, this),
+              g.styledMode ||
+                (this.up.attr({
+                  fill: 1 === l ? q.inactiveColor : q.activeColor,
+                }),
+                this.upTracker.css({ cursor: 1 === l ? "default" : "pointer" }),
+                this.down.attr({
+                  fill: l === f ? q.inactiveColor : q.activeColor,
+                }),
+                this.downTracker.css({
+                  cursor: l === f ? "default" : "pointer",
+                })),
+              (this.scrollOffset = -e[l - 1] + this.initialItemY),
+              this.scrollGroup.animate({ translateY: this.scrollOffset }),
+              (this.currentPage = l),
+              this.positionCheckboxes(),
+              (c = z(n(c, g.renderer.globalAnimation, !0))),
+              w(function () {
+                I(d, "afterScroll", { currentPage: l });
+              }, c.duration));
+          };
+          return c;
+        })();
+      (/Trident\/7\.0/.test(d.navigator && d.navigator.userAgent) || m) &&
+        f(g.prototype, "positionItem", function (c, a) {
+          var d = this,
+            g = function () {
+              a._legendItemPos && c.call(d, a);
+            };
+          g();
+          d.bubbleLegend || setTimeout(g);
+        });
+      h.Legend = g;
+      return h.Legend;
+    }
+  );
+  N(
+    m,
+    "Core/Series/Point.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Globals.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m) {
+      var z = f.animObject,
+        F = m.defined,
+        L = m.erase,
+        K = m.extend,
+        C = m.fireEvent,
+        y = m.format,
+        e = m.getNestedProperty,
+        I = m.isArray,
+        v = m.isNumber,
+        x = m.isObject,
+        D = m.syncTimeout,
+        n = m.pick,
+        l = m.removeEvent,
+        J = m.uniqueKey;
+      ("");
+      f = (function () {
+        function f() {
+          this.colorIndex = this.category = void 0;
+          this.formatPrefix = "point";
+          this.id = void 0;
+          this.isNull = !1;
+          this.percentage = this.options = this.name = void 0;
+          this.selected = !1;
+          this.total = this.series = void 0;
+          this.visible = !0;
+          this.x = void 0;
+        }
+        f.prototype.animateBeforeDestroy = function () {
+          var e = this,
+            d = { x: e.startXPos, opacity: 0 },
+            g,
+            c = e.getGraphicalProps();
+          c.singular.forEach(function (a) {
+            g = "dataLabel" === a;
+            e[a] = e[a].animate(
+              g ? { x: e[a].startXPos, y: e[a].startYPos, opacity: 0 } : d
+            );
+          });
+          c.plural.forEach(function (a) {
+            e[a].forEach(function (a) {
+              a.element &&
+                a.animate(
+                  K(
+                    { x: e.startXPos },
+                    a.startYPos ? { x: a.startXPos, y: a.startYPos } : {}
+                  )
+                );
+            });
+          });
+        };
+        f.prototype.applyOptions = function (e, d) {
+          var g = this.series,
+            c = g.options.pointValKey || g.pointValKey;
+          e = f.prototype.optionsToObject.call(this, e);
+          K(this, e);
+          this.options = this.options ? K(this.options, e) : e;
+          e.group && delete this.group;
+          e.dataLabels && delete this.dataLabels;
+          c && (this.y = f.prototype.getNestedProperty.call(this, c));
+          this.formatPrefix = (this.isNull = n(
+            this.isValid && !this.isValid(),
+            null === this.x || !v(this.y)
+          ))
+            ? "null"
+            : "point";
+          this.selected && (this.state = "select");
+          "name" in this &&
+            "undefined" === typeof d &&
+            g.xAxis &&
+            g.xAxis.hasNames &&
+            (this.x = g.xAxis.nameToX(this));
+          "undefined" === typeof this.x &&
+            g &&
+            (this.x = "undefined" === typeof d ? g.autoIncrement(this) : d);
+          return this;
+        };
+        f.prototype.destroy = function () {
+          function e() {
+            if (d.graphic || d.dataLabel || d.dataLabels)
+              l(d), d.destroyElements();
+            for (p in d) d[p] = null;
+          }
+          var d = this,
+            g = d.series,
+            c = g.chart;
+          g = g.options.dataSorting;
+          var a = c.hoverPoints,
+            f = z(d.series.chart.renderer.globalAnimation),
+            p;
+          d.legendItem && c.legend.destroyItem(d);
+          a && (d.setState(), L(a, d), a.length || (c.hoverPoints = null));
+          if (d === c.hoverPoint) d.onMouseOut();
+          g && g.enabled
+            ? (this.animateBeforeDestroy(), D(e, f.duration))
+            : e();
+          c.pointCount--;
+        };
+        f.prototype.destroyElements = function (e) {
+          var d = this;
+          e = d.getGraphicalProps(e);
+          e.singular.forEach(function (g) {
+            d[g] = d[g].destroy();
+          });
+          e.plural.forEach(function (g) {
+            d[g].forEach(function (c) {
+              c.element && c.destroy();
+            });
+            delete d[g];
+          });
+        };
+        f.prototype.firePointEvent = function (e, d, g) {
+          var c = this,
+            a = this.series.options;
+          (a.point.events[e] ||
+            (c.options && c.options.events && c.options.events[e])) &&
+            c.importEvents();
+          "click" === e &&
+            a.allowPointSelect &&
+            (g = function (a) {
+              c.select && c.select(null, a.ctrlKey || a.metaKey || a.shiftKey);
+            });
+          C(c, e, d, g);
+        };
+        f.prototype.getClassName = function () {
+          return (
+            "highcharts-point" +
+            (this.selected ? " highcharts-point-select" : "") +
+            (this.negative ? " highcharts-negative" : "") +
+            (this.isNull ? " highcharts-null-point" : "") +
+            ("undefined" !== typeof this.colorIndex
+              ? " highcharts-color-" + this.colorIndex
+              : "") +
+            (this.options.className ? " " + this.options.className : "") +
+            (this.zone && this.zone.className
+              ? " " + this.zone.className.replace("highcharts-negative", "")
+              : "")
+          );
+        };
+        f.prototype.getGraphicalProps = function (e) {
+          var d = this,
+            g = [],
+            c,
+            a = { singular: [], plural: [] };
+          e = e || { graphic: 1, dataLabel: 1 };
+          e.graphic && g.push("graphic", "shadowGroup");
+          e.dataLabel && g.push("dataLabel", "dataLabelUpper", "connector");
+          for (c = g.length; c--; ) {
+            var f = g[c];
+            d[f] && a.singular.push(f);
+          }
+          ["dataLabel", "connector"].forEach(function (c) {
+            var g = c + "s";
+            e[c] && d[g] && a.plural.push(g);
+          });
+          return a;
+        };
+        f.prototype.getLabelConfig = function () {
+          return {
+            x: this.category,
+            y: this.y,
+            color: this.color,
+            colorIndex: this.colorIndex,
+            key: this.name || this.category,
+            series: this.series,
+            point: this,
+            percentage: this.percentage,
+            total: this.total || this.stackTotal,
+          };
+        };
+        f.prototype.getNestedProperty = function (f) {
+          if (f)
+            return 0 === f.indexOf("custom.") ? e(f, this.options) : this[f];
+        };
+        f.prototype.getZone = function () {
+          var e = this.series,
+            d = e.zones;
+          e = e.zoneAxis || "y";
+          var g = 0,
+            c;
+          for (c = d[g]; this[e] >= c.value; ) c = d[++g];
+          this.nonZonedColor || (this.nonZonedColor = this.color);
+          this.color =
+            c && c.color && !this.options.color ? c.color : this.nonZonedColor;
+          return c;
+        };
+        f.prototype.hasNewShapeType = function () {
+          return (
+            (this.graphic &&
+              (this.graphic.symbolName || this.graphic.element.nodeName)) !==
+            this.shapeType
+          );
+        };
+        f.prototype.init = function (e, d, g) {
+          this.series = e;
+          this.applyOptions(d, g);
+          this.id = F(this.id) ? this.id : J();
+          this.resolveColor();
+          e.chart.pointCount++;
+          C(this, "afterInit");
+          return this;
+        };
+        f.prototype.optionsToObject = function (e) {
+          var d = {},
+            g = this.series,
+            c = g.options.keys,
+            a = c || g.pointArrayMap || ["y"],
+            l = a.length,
+            p = 0,
+            n = 0;
+          if (v(e) || null === e) d[a[0]] = e;
+          else if (I(e))
+            for (
+              !c &&
+              e.length > l &&
+              ((g = typeof e[0]),
+              "string" === g ? (d.name = e[0]) : "number" === g && (d.x = e[0]),
+              p++);
+              n < l;
+
+            )
+              (c && "undefined" === typeof e[p]) ||
+                (0 < a[n].indexOf(".")
+                  ? f.prototype.setNestedProperty(d, e[p], a[n])
+                  : (d[a[n]] = e[p])),
+                p++,
+                n++;
+          else
+            "object" === typeof e &&
+              ((d = e),
+              e.dataLabels && (g._hasPointLabels = !0),
+              e.marker && (g._hasPointMarkers = !0));
+          return d;
+        };
+        f.prototype.resolveColor = function () {
+          var e = this.series;
+          var d = e.chart.options.chart.colorCount;
+          var g = e.chart.styledMode;
+          delete this.nonZonedColor;
+          g || this.options.color || (this.color = e.color);
+          e.options.colorByPoint
+            ? (g ||
+                ((d = e.options.colors || e.chart.options.colors),
+                (this.color = this.color || d[e.colorCounter]),
+                (d = d.length)),
+              (g = e.colorCounter),
+              e.colorCounter++,
+              e.colorCounter === d && (e.colorCounter = 0))
+            : (g = e.colorIndex);
+          this.colorIndex = n(this.colorIndex, g);
+        };
+        f.prototype.setNestedProperty = function (e, d, g) {
+          g.split(".").reduce(function (c, a, g, e) {
+            c[a] = e.length - 1 === g ? d : x(c[a], !0) ? c[a] : {};
+            return c[a];
+          }, e);
+          return e;
+        };
+        f.prototype.tooltipFormatter = function (e) {
+          var d = this.series,
+            g = d.tooltipOptions,
+            c = n(g.valueDecimals, ""),
+            a = g.valuePrefix || "",
+            f = g.valueSuffix || "";
+          d.chart.styledMode && (e = d.chart.tooltip.styledModeFormat(e));
+          (d.pointArrayMap || ["y"]).forEach(function (d) {
+            d = "{point." + d;
+            if (a || f) e = e.replace(RegExp(d + "}", "g"), a + d + "}" + f);
+            e = e.replace(RegExp(d + "}", "g"), d + ":,." + c + "f}");
+          });
+          return y(e, { point: this, series: this.series }, d.chart);
+        };
+        return f;
+      })();
+      return (h.Point = f);
+    }
+  );
+  N(
+    m,
+    "Core/Series/Series.js",
+    [m["Core/Globals.js"], m["Core/Series/Point.js"], m["Core/Utilities.js"]],
+    function (f, h, m) {
+      var z = m.error,
+        F = m.extendClass,
+        L = m.fireEvent,
+        K = m.getOptions,
+        C = m.isObject,
+        y = m.merge,
+        e = m.objectEach;
+      m = (function () {
+        function f(e, h) {
+          var v = y(f.defaultOptions, h);
+          this.chart = e;
+          this._i = e.series.length;
+          e.series.push(this);
+          this.options = v;
+          this.userOptions = y(h);
+        }
+        f.addSeries = function (e, h) {
+          f.seriesTypes[e] = h;
+        };
+        f.cleanRecursively = function (h, m) {
+          var v = {};
+          e(h, function (e, l) {
+            if (C(h[l], !0) && !h.nodeType && m[l])
+              (e = f.cleanRecursively(h[l], m[l])),
+                Object.keys(e).length && (v[l] = e);
+            else if (C(h[l]) || h[l] !== m[l]) v[l] = h[l];
+          });
+          return v;
+        };
+        f.getSeries = function (e, h) {
+          void 0 === h && (h = {});
+          var v = e.options.chart;
+          v = h.type || v.type || v.defaultSeriesType || "";
+          var n = f.seriesTypes[v];
+          n || z(17, !0, e, { missingModuleFor: v });
+          return new n(e, h);
+        };
+        f.seriesType = function (e, m, D, n, l) {
+          var v = K().plotOptions || {},
+            w = f.seriesTypes;
+          m = m || "";
+          v[e] = y(v[m], D);
+          f.addSeries(e, F(w[m] || function () {}, n));
+          w[e].prototype.type = e;
+          l && (w[e].prototype.pointClass = F(h, l));
+          return w[e];
+        };
+        f.prototype.update = function (e, h) {
+          void 0 === h && (h = !0);
+          var m = this;
+          e = f.cleanRecursively(e, this.userOptions);
+          var n = e.type;
+          "undefined" !== typeof n &&
+            n !== m.type &&
+            (m = f.getSeries(m.chart, e));
+          L(m, "update", { newOptions: e });
+          m.userOptions = y(e);
+          L(m, "afterUpdate", { newOptions: e });
+          h && m.chart.redraw();
+          return m;
+        };
+        f.defaultOptions = { type: "base" };
+        f.seriesTypes = {};
+        return f;
+      })();
+      m.prototype.pointClass = h;
+      f.seriesType = m.seriesType;
+      f.seriesTypes = m.seriesTypes;
+      return m;
+    }
+  );
+  N(
+    m,
+    "Core/Chart/Chart.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Axis/Axis.js"],
+      m["Core/Series/Series.js"],
+      m["Core/Globals.js"],
+      m["Core/Legend.js"],
+      m["Core/MSPointer.js"],
+      m["Core/Options.js"],
+      m["Core/Pointer.js"],
+      m["Core/Time.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F, L, K, C, y, e) {
+      var I = f.animate,
+        v = f.animObject,
+        x = f.setAnimation,
+        D = z.charts,
+        n = z.doc,
+        l = z.win,
+        J = K.defaultOptions,
+        w = e.addEvent,
+        r = e.attr,
+        d = e.createElement,
+        g = e.css,
+        c = e.defined,
+        a = e.discardElement,
+        q = e.erase,
+        p = e.error,
+        B = e.extend,
+        A = e.find,
+        G = e.fireEvent,
+        M = e.getStyle,
+        T = e.isArray,
+        Q = e.isFunction,
+        O = e.isNumber,
+        E = e.isObject,
+        u = e.isString,
+        b = e.merge,
+        k = e.numberFormat,
+        t = e.objectEach,
+        H = e.pick,
+        R = e.pInt,
+        U = e.relativeLength,
+        Z = e.removeEvent,
+        aa = e.splat,
+        ba = e.syncTimeout,
+        S = e.uniqueKey,
+        Y = z.marginNames,
+        W = (function () {
+          function f(a, b, c) {
+            this.yAxis =
+              this.xAxis =
+              this.userOptions =
+              this.titleOffset =
+              this.time =
+              this.symbolCounter =
+              this.spacingBox =
+              this.spacing =
+              this.series =
+              this.renderTo =
+              this.renderer =
+              this.pointer =
+              this.pointCount =
+              this.plotWidth =
+              this.plotTop =
+              this.plotLeft =
+              this.plotHeight =
+              this.plotBox =
+              this.options =
+              this.numberFormatter =
+              this.margin =
+              this.legend =
+              this.labelCollectors =
+              this.isResizing =
+              this.index =
+              this.container =
+              this.colorCounter =
+              this.clipBox =
+              this.chartWidth =
+              this.chartHeight =
+              this.bounds =
+              this.axisOffset =
+              this.axes =
+                void 0;
+            this.getArgs(a, b, c);
+          }
+          f.prototype.getArgs = function (a, b, c) {
+            u(a) || a.nodeName
+              ? ((this.renderTo = a), this.init(b, c))
+              : this.init(a, b);
+          };
+          f.prototype.init = function (a, c) {
+            var d,
+              g = a.series,
+              e = a.plotOptions || {};
+            G(this, "init", { args: arguments }, function () {
+              a.series = null;
+              d = b(J, a);
+              var f = d.chart || {};
+              t(d.plotOptions, function (a, c) {
+                E(a) && (a.tooltip = (e[c] && b(e[c].tooltip)) || void 0);
+              });
+              d.tooltip.userOptions =
+                (a.chart && a.chart.forExport && a.tooltip.userOptions) ||
+                a.tooltip;
+              d.series = a.series = g;
+              this.userOptions = a;
+              var p = f.events;
+              this.margin = [];
+              this.spacing = [];
+              this.bounds = { h: {}, v: {} };
+              this.labelCollectors = [];
+              this.callback = c;
+              this.isResizing = 0;
+              this.options = d;
+              this.axes = [];
+              this.series = [];
+              this.time =
+                a.time && Object.keys(a.time).length ? new y(a.time) : z.time;
+              this.numberFormatter = f.numberFormatter || k;
+              this.styledMode = f.styledMode;
+              this.hasCartesianSeries = f.showAxes;
+              var l = this;
+              l.index = D.length;
+              D.push(l);
+              z.chartCount++;
+              p &&
+                t(p, function (a, b) {
+                  Q(a) && w(l, b, a);
+                });
+              l.xAxis = [];
+              l.yAxis = [];
+              l.pointCount = l.colorCounter = l.symbolCounter = 0;
+              G(l, "afterInit");
+              l.firstRender();
+            });
+          };
+          f.prototype.initSeries = function (a) {
+            var b = this.options.chart;
+            b = a.type || b.type || b.defaultSeriesType;
+            var c = m.seriesTypes[b];
+            c || p(17, !0, this, { missingModuleFor: b });
+            b = new c(this, a);
+            "function" === typeof b.init && b.init(this, a);
+            return b;
+          };
+          f.prototype.setSeriesData = function () {
+            this.getSeriesOrderByLinks().forEach(function (a) {
+              a.points ||
+                a.data ||
+                !a.enabledDataSorting ||
+                a.setData(a.options.data, !1);
+            });
+          };
+          f.prototype.getSeriesOrderByLinks = function () {
+            return this.series.concat().sort(function (a, b) {
+              return a.linkedSeries.length || b.linkedSeries.length
+                ? b.linkedSeries.length - a.linkedSeries.length
+                : 0;
+            });
+          };
+          f.prototype.orderSeries = function (a) {
+            var b = this.series;
+            for (a = a || 0; a < b.length; a++)
+              b[a] && ((b[a].index = a), (b[a].name = b[a].getName()));
+          };
+          f.prototype.isInsidePlot = function (a, b, c) {
+            var d = c ? b : a;
+            a = c ? a : b;
+            d = {
+              x: d,
+              y: a,
+              isInsidePlot:
+                0 <= d && d <= this.plotWidth && 0 <= a && a <= this.plotHeight,
+            };
+            G(this, "afterIsInsidePlot", d);
+            return d.isInsidePlot;
+          };
+          f.prototype.redraw = function (a) {
+            G(this, "beforeRedraw");
+            var b = this,
+              c = b.axes,
+              d = b.series,
+              g = b.pointer,
+              k = b.legend,
+              e = b.userOptions.legend,
+              f = b.isDirtyLegend,
+              t = b.hasCartesianSeries,
+              p = b.isDirtyBox,
+              l = b.renderer,
+              q = l.isHidden(),
+              h = [];
+            b.setResponsive && b.setResponsive(!1);
+            x(b.hasRendered ? a : !1, b);
+            q && b.temporaryDisplay();
+            b.layOutTitles();
+            for (a = d.length; a--; ) {
+              var n = d[a];
+              if (n.options.stacking) {
+                var u = !0;
+                if (n.isDirty) {
+                  var r = !0;
+                  break;
+                }
+              }
+            }
+            if (r)
+              for (a = d.length; a--; )
+                (n = d[a]), n.options.stacking && (n.isDirty = !0);
+            d.forEach(function (a) {
+              a.isDirty &&
+                ("point" === a.options.legendType
+                  ? ("function" === typeof a.updateTotals && a.updateTotals(),
+                    (f = !0))
+                  : e && (e.labelFormatter || e.labelFormat) && (f = !0));
+              a.isDirtyData && G(a, "updatedData");
+            });
+            f && k && k.options.enabled && (k.render(), (b.isDirtyLegend = !1));
+            u && b.getStacks();
+            t &&
+              c.forEach(function (a) {
+                (b.isResizing && O(a.min)) || (a.updateNames(), a.setScale());
+              });
+            b.getMargins();
+            t &&
+              (c.forEach(function (a) {
+                a.isDirty && (p = !0);
+              }),
+              c.forEach(function (a) {
+                var b = a.min + "," + a.max;
+                a.extKey !== b &&
+                  ((a.extKey = b),
+                  h.push(function () {
+                    G(a, "afterSetExtremes", B(a.eventArgs, a.getExtremes()));
+                    delete a.eventArgs;
+                  }));
+                (p || u) && a.redraw();
+              }));
+            p && b.drawChartBox();
+            G(b, "predraw");
+            d.forEach(function (a) {
+              (p || a.isDirty) && a.visible && a.redraw();
+              a.isDirtyData = !1;
+            });
+            g && g.reset(!0);
+            l.draw();
+            G(b, "redraw");
+            G(b, "render");
+            q && b.temporaryDisplay(!0);
+            h.forEach(function (a) {
+              a.call();
+            });
+          };
+          f.prototype.get = function (a) {
+            function b(b) {
+              return b.id === a || (b.options && b.options.id === a);
+            }
+            var c = this.series,
+              d;
+            var g = A(this.axes, b) || A(this.series, b);
+            for (d = 0; !g && d < c.length; d++) g = A(c[d].points || [], b);
+            return g;
+          };
+          f.prototype.getAxes = function () {
+            var a = this,
+              b = this.options,
+              c = (b.xAxis = aa(b.xAxis || {}));
+            b = b.yAxis = aa(b.yAxis || {});
+            G(this, "getAxes");
+            c.forEach(function (a, b) {
+              a.index = b;
+              a.isX = !0;
+            });
+            b.forEach(function (a, b) {
+              a.index = b;
+            });
+            c.concat(b).forEach(function (b) {
+              new h(a, b);
+            });
+            G(this, "afterGetAxes");
+          };
+          f.prototype.getSelectedPoints = function () {
+            var a = [];
+            this.series.forEach(function (b) {
+              a = a.concat(
+                b.getPointsCollection().filter(function (a) {
+                  return H(a.selectedStaging, a.selected);
+                })
+              );
+            });
+            return a;
+          };
+          f.prototype.getSelectedSeries = function () {
+            return this.series.filter(function (a) {
+              return a.selected;
+            });
+          };
+          f.prototype.setTitle = function (a, b, c) {
+            this.applyDescription("title", a);
+            this.applyDescription("subtitle", b);
+            this.applyDescription("caption", void 0);
+            this.layOutTitles(c);
+          };
+          f.prototype.applyDescription = function (a, c) {
+            var d = this,
+              g =
+                "title" === a
+                  ? {
+                      color: "#333333",
+                      fontSize: this.options.isStock ? "16px" : "18px",
+                    }
+                  : { color: "#666666" };
+            g = this.options[a] = b(
+              !this.styledMode && { style: g },
+              this.options[a],
+              c
+            );
+            var k = this[a];
+            k && c && (this[a] = k = k.destroy());
+            g &&
+              !k &&
+              ((k = this.renderer
+                .text(g.text, 0, 0, g.useHTML)
+                .attr({
+                  align: g.align,
+                  class: "highcharts-" + a,
+                  zIndex: g.zIndex || 4,
+                })
+                .add()),
+              (k.update = function (b) {
+                d[
+                  {
+                    title: "setTitle",
+                    subtitle: "setSubtitle",
+                    caption: "setCaption",
+                  }[a]
+                ](b);
+              }),
+              this.styledMode || k.css(g.style),
+              (this[a] = k));
+          };
+          f.prototype.layOutTitles = function (a) {
+            var b = [0, 0, 0],
+              c = this.renderer,
+              d = this.spacingBox;
+            ["title", "subtitle", "caption"].forEach(function (a) {
+              var g = this[a],
+                k = this.options[a],
+                e = k.verticalAlign || "top";
+              a = "title" === a ? -3 : "top" === e ? b[0] + 2 : 0;
+              if (g) {
+                if (!this.styledMode) var f = k.style.fontSize;
+                f = c.fontMetrics(f, g).b;
+                g.css({
+                  width: (k.width || d.width + (k.widthAdjust || 0)) + "px",
+                });
+                var t = Math.round(g.getBBox(k.useHTML).height);
+                g.align(
+                  B({ y: "bottom" === e ? f : a + f, height: t }, k),
+                  !1,
+                  "spacingBox"
+                );
+                k.floating ||
+                  ("top" === e
+                    ? (b[0] = Math.ceil(b[0] + t))
+                    : "bottom" === e && (b[2] = Math.ceil(b[2] + t)));
+              }
+            }, this);
+            b[0] &&
+              "top" === (this.options.title.verticalAlign || "top") &&
+              (b[0] += this.options.title.margin);
+            b[2] &&
+              "bottom" === this.options.caption.verticalAlign &&
+              (b[2] += this.options.caption.margin);
+            var g =
+              !this.titleOffset || this.titleOffset.join(",") !== b.join(",");
+            this.titleOffset = b;
+            G(this, "afterLayOutTitles");
+            !this.isDirtyBox &&
+              g &&
+              ((this.isDirtyBox = this.isDirtyLegend = g),
+              this.hasRendered && H(a, !0) && this.isDirtyBox && this.redraw());
+          };
+          f.prototype.getChartSize = function () {
+            var a = this.options.chart,
+              b = a.width;
+            a = a.height;
+            var d = this.renderTo;
+            c(b) || (this.containerWidth = M(d, "width"));
+            c(a) || (this.containerHeight = M(d, "height"));
+            this.chartWidth = Math.max(0, b || this.containerWidth || 600);
+            this.chartHeight = Math.max(
+              0,
+              U(a, this.chartWidth) ||
+                (1 < this.containerHeight ? this.containerHeight : 400)
+            );
+          };
+          f.prototype.temporaryDisplay = function (a) {
+            var b = this.renderTo;
+            if (a)
+              for (; b && b.style; )
+                b.hcOrigStyle && (g(b, b.hcOrigStyle), delete b.hcOrigStyle),
+                  b.hcOrigDetached &&
+                    (n.body.removeChild(b), (b.hcOrigDetached = !1)),
+                  (b = b.parentNode);
+            else
+              for (; b && b.style; ) {
+                n.body.contains(b) ||
+                  b.parentNode ||
+                  ((b.hcOrigDetached = !0), n.body.appendChild(b));
+                if ("none" === M(b, "display", !1) || b.hcOricDetached)
+                  (b.hcOrigStyle = {
+                    display: b.style.display,
+                    height: b.style.height,
+                    overflow: b.style.overflow,
+                  }),
+                    (a = { display: "block", overflow: "hidden" }),
+                    b !== this.renderTo && (a.height = 0),
+                    g(b, a),
+                    b.offsetWidth ||
+                      b.style.setProperty("display", "block", "important");
+                b = b.parentNode;
+                if (b === n.body) break;
+              }
+          };
+          f.prototype.setClassName = function (a) {
+            this.container.className = "highcharts-container " + (a || "");
+          };
+          f.prototype.getContainer = function () {
+            var a = this.options,
+              b = a.chart;
+            var c = this.renderTo;
+            var k = S(),
+              e,
+              f;
+            c || (this.renderTo = c = b.renderTo);
+            u(c) && (this.renderTo = c = n.getElementById(c));
+            c || p(13, !0, this);
+            var t = R(r(c, "data-highcharts-chart"));
+            O(t) && D[t] && D[t].hasRendered && D[t].destroy();
+            r(c, "data-highcharts-chart", this.index);
+            c.innerHTML = "";
+            b.skipClone || c.offsetWidth || this.temporaryDisplay();
+            this.getChartSize();
+            t = this.chartWidth;
+            var l = this.chartHeight;
+            g(c, { overflow: "hidden" });
+            this.styledMode ||
+              (e = B(
+                {
+                  position: "relative",
+                  overflow: "hidden",
+                  width: t + "px",
+                  height: l + "px",
+                  textAlign: "left",
+                  lineHeight: "normal",
+                  zIndex: 0,
+                  "-webkit-tap-highlight-color": "rgba(0,0,0,0)",
+                  userSelect: "none",
+                },
+                b.style
+              ));
+            this.container = c = d("div", { id: k }, e, c);
+            this._cursor = c.style.cursor;
+            this.renderer = new (z[b.renderer] || z.Renderer)(
+              c,
+              t,
+              l,
+              null,
+              b.forExport,
+              a.exporting && a.exporting.allowHTML,
+              this.styledMode
+            );
+            x(void 0, this);
+            this.setClassName(b.className);
+            if (this.styledMode)
+              for (f in a.defs) this.renderer.definition(a.defs[f]);
+            else this.renderer.setStyle(b.style);
+            this.renderer.chartIndex = this.index;
+            G(this, "afterGetContainer");
+          };
+          f.prototype.getMargins = function (a) {
+            var b = this.spacing,
+              d = this.margin,
+              g = this.titleOffset;
+            this.resetMargins();
+            g[0] &&
+              !c(d[0]) &&
+              (this.plotTop = Math.max(this.plotTop, g[0] + b[0]));
+            g[2] &&
+              !c(d[2]) &&
+              (this.marginBottom = Math.max(this.marginBottom, g[2] + b[2]));
+            this.legend &&
+              this.legend.display &&
+              this.legend.adjustMargins(d, b);
+            G(this, "getMargins");
+            a || this.getAxisMargins();
+          };
+          f.prototype.getAxisMargins = function () {
+            var a = this,
+              b = (a.axisOffset = [0, 0, 0, 0]),
+              d = a.colorAxis,
+              g = a.margin,
+              k = function (a) {
+                a.forEach(function (a) {
+                  a.visible && a.getOffset();
+                });
+              };
+            a.hasCartesianSeries ? k(a.axes) : d && d.length && k(d);
+            Y.forEach(function (d, k) {
+              c(g[k]) || (a[d] += b[k]);
+            });
+            a.setChartSize();
+          };
+          f.prototype.reflow = function (a) {
+            var b = this,
+              d = b.options.chart,
+              g = b.renderTo,
+              k = c(d.width) && c(d.height),
+              f = d.width || M(g, "width");
+            d = d.height || M(g, "height");
+            g = a ? a.target : l;
+            if (!k && !b.isPrinting && f && d && (g === l || g === n)) {
+              if (f !== b.containerWidth || d !== b.containerHeight)
+                e.clearTimeout(b.reflowTimeout),
+                  (b.reflowTimeout = ba(
+                    function () {
+                      b.container && b.setSize(void 0, void 0, !1);
+                    },
+                    a ? 100 : 0
+                  ));
+              b.containerWidth = f;
+              b.containerHeight = d;
+            }
+          };
+          f.prototype.setReflow = function (a) {
+            var b = this;
+            !1 === a || this.unbindReflow
+              ? !1 === a &&
+                this.unbindReflow &&
+                (this.unbindReflow = this.unbindReflow())
+              : ((this.unbindReflow = w(l, "resize", function (a) {
+                  b.options && b.reflow(a);
+                })),
+                w(this, "destroy", this.unbindReflow));
+          };
+          f.prototype.setSize = function (a, b, c) {
+            var d = this,
+              k = d.renderer;
+            d.isResizing += 1;
+            x(c, d);
+            c = k.globalAnimation;
+            d.oldChartHeight = d.chartHeight;
+            d.oldChartWidth = d.chartWidth;
+            "undefined" !== typeof a && (d.options.chart.width = a);
+            "undefined" !== typeof b && (d.options.chart.height = b);
+            d.getChartSize();
+            d.styledMode ||
+              (c ? I : g)(
+                d.container,
+                { width: d.chartWidth + "px", height: d.chartHeight + "px" },
+                c
+              );
+            d.setChartSize(!0);
+            k.setSize(d.chartWidth, d.chartHeight, c);
+            d.axes.forEach(function (a) {
+              a.isDirty = !0;
+              a.setScale();
+            });
+            d.isDirtyLegend = !0;
+            d.isDirtyBox = !0;
+            d.layOutTitles();
+            d.getMargins();
+            d.redraw(c);
+            d.oldChartHeight = null;
+            G(d, "resize");
+            ba(function () {
+              d &&
+                G(d, "endResize", null, function () {
+                  --d.isResizing;
+                });
+            }, v(c).duration);
+          };
+          f.prototype.setChartSize = function (a) {
+            var b = this.inverted,
+              c = this.renderer,
+              d = this.chartWidth,
+              g = this.chartHeight,
+              k = this.options.chart,
+              e = this.spacing,
+              f = this.clipOffset,
+              t,
+              p,
+              l,
+              q;
+            this.plotLeft = t = Math.round(this.plotLeft);
+            this.plotTop = p = Math.round(this.plotTop);
+            this.plotWidth = l = Math.max(
+              0,
+              Math.round(d - t - this.marginRight)
+            );
+            this.plotHeight = q = Math.max(
+              0,
+              Math.round(g - p - this.marginBottom)
+            );
+            this.plotSizeX = b ? q : l;
+            this.plotSizeY = b ? l : q;
+            this.plotBorderWidth = k.plotBorderWidth || 0;
+            this.spacingBox = c.spacingBox = {
+              x: e[3],
+              y: e[0],
+              width: d - e[3] - e[1],
+              height: g - e[0] - e[2],
+            };
+            this.plotBox = c.plotBox = { x: t, y: p, width: l, height: q };
+            d = 2 * Math.floor(this.plotBorderWidth / 2);
+            b = Math.ceil(Math.max(d, f[3]) / 2);
+            c = Math.ceil(Math.max(d, f[0]) / 2);
+            this.clipBox = {
+              x: b,
+              y: c,
+              width: Math.floor(this.plotSizeX - Math.max(d, f[1]) / 2 - b),
+              height: Math.max(
+                0,
+                Math.floor(this.plotSizeY - Math.max(d, f[2]) / 2 - c)
+              ),
+            };
+            a ||
+              this.axes.forEach(function (a) {
+                a.setAxisSize();
+                a.setAxisTranslation();
+              });
+            G(this, "afterSetChartSize", { skipAxes: a });
+          };
+          f.prototype.resetMargins = function () {
+            G(this, "resetMargins");
+            var a = this,
+              b = a.options.chart;
+            ["margin", "spacing"].forEach(function (c) {
+              var d = b[c],
+                g = E(d) ? d : [d, d, d, d];
+              ["Top", "Right", "Bottom", "Left"].forEach(function (d, k) {
+                a[c][k] = H(b[c + d], g[k]);
+              });
+            });
+            Y.forEach(function (b, c) {
+              a[b] = H(a.margin[c], a.spacing[c]);
+            });
+            a.axisOffset = [0, 0, 0, 0];
+            a.clipOffset = [0, 0, 0, 0];
+          };
+          f.prototype.drawChartBox = function () {
+            var a = this.options.chart,
+              b = this.renderer,
+              c = this.chartWidth,
+              d = this.chartHeight,
+              g = this.chartBackground,
+              k = this.plotBackground,
+              e = this.plotBorder,
+              f = this.styledMode,
+              t = this.plotBGImage,
+              p = a.backgroundColor,
+              l = a.plotBackgroundColor,
+              q = a.plotBackgroundImage,
+              h,
+              n = this.plotLeft,
+              u = this.plotTop,
+              r = this.plotWidth,
+              m = this.plotHeight,
+              w = this.plotBox,
+              v = this.clipRect,
+              H = this.clipBox,
+              B = "animate";
+            g ||
+              ((this.chartBackground = g =
+                b.rect().addClass("highcharts-background").add()),
+              (B = "attr"));
+            if (f) var A = (h = g.strokeWidth());
+            else {
+              A = a.borderWidth || 0;
+              h = A + (a.shadow ? 8 : 0);
+              p = { fill: p || "none" };
+              if (A || g["stroke-width"])
+                (p.stroke = a.borderColor), (p["stroke-width"] = A);
+              g.attr(p).shadow(a.shadow);
+            }
+            g[B]({
+              x: h / 2,
+              y: h / 2,
+              width: c - h - (A % 2),
+              height: d - h - (A % 2),
+              r: a.borderRadius,
+            });
+            B = "animate";
+            k ||
+              ((B = "attr"),
+              (this.plotBackground = k =
+                b.rect().addClass("highcharts-plot-background").add()));
+            k[B](w);
+            f ||
+              (k.attr({ fill: l || "none" }).shadow(a.plotShadow),
+              q &&
+                (t
+                  ? (q !== t.attr("href") && t.attr("href", q), t.animate(w))
+                  : (this.plotBGImage = b.image(q, n, u, r, m).add())));
+            v
+              ? v.animate({ width: H.width, height: H.height })
+              : (this.clipRect = b.clipRect(H));
+            B = "animate";
+            e ||
+              ((B = "attr"),
+              (this.plotBorder = e =
+                b
+                  .rect()
+                  .addClass("highcharts-plot-border")
+                  .attr({ zIndex: 1 })
+                  .add()));
+            f ||
+              e.attr({
+                stroke: a.plotBorderColor,
+                "stroke-width": a.plotBorderWidth || 0,
+                fill: "none",
+              });
+            e[B](
+              e.crisp({ x: n, y: u, width: r, height: m }, -e.strokeWidth())
+            );
+            this.isDirtyBox = !1;
+            G(this, "afterDrawChartBox");
+          };
+          f.prototype.propFromSeries = function () {
+            var a = this,
+              b = a.options.chart,
+              c,
+              d = a.options.series,
+              g,
+              k;
+            ["inverted", "angular", "polar"].forEach(function (e) {
+              c = m.seriesTypes[b.type || b.defaultSeriesType];
+              k = b[e] || (c && c.prototype[e]);
+              for (g = d && d.length; !k && g--; )
+                (c = m.seriesTypes[d[g].type]) && c.prototype[e] && (k = !0);
+              a[e] = k;
+            });
+          };
+          f.prototype.linkSeries = function () {
+            var a = this,
+              b = a.series;
+            b.forEach(function (a) {
+              a.linkedSeries.length = 0;
+            });
+            b.forEach(function (b) {
+              var c = b.options.linkedTo;
+              u(c) &&
+                (c = ":previous" === c ? a.series[b.index - 1] : a.get(c)) &&
+                c.linkedParent !== b &&
+                (c.linkedSeries.push(b),
+                (b.linkedParent = c),
+                c.enabledDataSorting && b.setDataSortingOptions(),
+                (b.visible = H(
+                  b.options.visible,
+                  c.options.visible,
+                  b.visible
+                )));
+            });
+            G(this, "afterLinkSeries");
+          };
+          f.prototype.renderSeries = function () {
+            this.series.forEach(function (a) {
+              a.translate();
+              a.render();
+            });
+          };
+          f.prototype.renderLabels = function () {
+            var a = this,
+              b = a.options.labels;
+            b.items &&
+              b.items.forEach(function (c) {
+                var d = B(b.style, c.style),
+                  g = R(d.left) + a.plotLeft,
+                  k = R(d.top) + a.plotTop + 12;
+                delete d.left;
+                delete d.top;
+                a.renderer.text(c.html, g, k).attr({ zIndex: 2 }).css(d).add();
+              });
+          };
+          f.prototype.render = function () {
+            var a = this.axes,
+              b = this.colorAxis,
+              c = this.renderer,
+              d = this.options,
+              g = 0,
+              k = function (a) {
+                a.forEach(function (a) {
+                  a.visible && a.render();
+                });
+              };
+            this.setTitle();
+            this.legend = new F(this, d.legend);
+            this.getStacks && this.getStacks();
+            this.getMargins(!0);
+            this.setChartSize();
+            d = this.plotWidth;
+            a.some(function (a) {
+              if (
+                a.horiz &&
+                a.visible &&
+                a.options.labels.enabled &&
+                a.series.length
+              )
+                return (g = 21), !0;
+            });
+            var e = (this.plotHeight = Math.max(this.plotHeight - g, 0));
+            a.forEach(function (a) {
+              a.setScale();
+            });
+            this.getAxisMargins();
+            var f = 1.1 < d / this.plotWidth;
+            var t = 1.05 < e / this.plotHeight;
+            if (f || t)
+              a.forEach(function (a) {
+                ((a.horiz && f) || (!a.horiz && t)) && a.setTickInterval(!0);
+              }),
+                this.getMargins();
+            this.drawChartBox();
+            this.hasCartesianSeries ? k(a) : b && b.length && k(b);
+            this.seriesGroup ||
+              (this.seriesGroup = c
+                .g("series-group")
+                .attr({ zIndex: 3 })
+                .add());
+            this.renderSeries();
+            this.renderLabels();
+            this.addCredits();
+            this.setResponsive && this.setResponsive();
+            this.updateContainerScaling();
+            this.hasRendered = !0;
+          };
+          f.prototype.addCredits = function (a) {
+            var c = this,
+              d = b(!0, this.options.credits, a);
+            d.enabled &&
+              !this.credits &&
+              ((this.credits = this.renderer
+                .text(d.text + (this.mapCredits || ""), 0, 0)
+                .addClass("highcharts-credits")
+                .on("click", function () {
+                  d.href && (l.location.href = d.href);
+                })
+                .attr({ align: d.position.align, zIndex: 8 })),
+              c.styledMode || this.credits.css(d.style),
+              this.credits.add().align(d.position),
+              (this.credits.update = function (a) {
+                c.credits = c.credits.destroy();
+                c.addCredits(a);
+              }));
+          };
+          f.prototype.updateContainerScaling = function () {
+            var a = this.container;
+            if (
+              2 < a.offsetWidth &&
+              2 < a.offsetHeight &&
+              a.getBoundingClientRect
+            ) {
+              var b = a.getBoundingClientRect(),
+                c = b.width / a.offsetWidth;
+              a = b.height / a.offsetHeight;
+              1 !== c || 1 !== a
+                ? (this.containerScaling = { scaleX: c, scaleY: a })
+                : delete this.containerScaling;
+            }
+          };
+          f.prototype.destroy = function () {
+            var b = this,
+              c = b.axes,
+              d = b.series,
+              g = b.container,
+              k,
+              e = g && g.parentNode;
+            G(b, "destroy");
+            b.renderer.forExport ? q(D, b) : (D[b.index] = void 0);
+            z.chartCount--;
+            b.renderTo.removeAttribute("data-highcharts-chart");
+            Z(b);
+            for (k = c.length; k--; ) c[k] = c[k].destroy();
+            this.scroller && this.scroller.destroy && this.scroller.destroy();
+            for (k = d.length; k--; ) d[k] = d[k].destroy();
+            "title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer"
+              .split(" ")
+              .forEach(function (a) {
+                var c = b[a];
+                c && c.destroy && (b[a] = c.destroy());
+              });
+            g && ((g.innerHTML = ""), Z(g), e && a(g));
+            t(b, function (a, c) {
+              delete b[c];
+            });
+          };
+          f.prototype.firstRender = function () {
+            var a = this,
+              b = a.options;
+            if (!a.isReadyToRender || a.isReadyToRender()) {
+              a.getContainer();
+              a.resetMargins();
+              a.setChartSize();
+              a.propFromSeries();
+              a.getAxes();
+              (T(b.series) ? b.series : []).forEach(function (b) {
+                a.initSeries(b);
+              });
+              a.linkSeries();
+              a.setSeriesData();
+              G(a, "beforeRender");
+              C &&
+                (a.pointer =
+                  z.hasTouch || (!l.PointerEvent && !l.MSPointerEvent)
+                    ? new C(a, b)
+                    : new L(a, b));
+              a.render();
+              if (!a.renderer.imgCount && !a.hasLoaded) a.onload();
+              a.temporaryDisplay(!0);
+            }
+          };
+          f.prototype.onload = function () {
+            this.callbacks.concat([this.callback]).forEach(function (a) {
+              a && "undefined" !== typeof this.index && a.apply(this, [this]);
+            }, this);
+            G(this, "load");
+            G(this, "render");
+            c(this.index) && this.setReflow(this.options.chart.reflow);
+            this.hasLoaded = !0;
+          };
+          return f;
+        })();
+      W.prototype.callbacks = [];
+      z.chart = function (a, b, c) {
+        return new W(a, b, c);
+      };
+      return (z.Chart = W);
+    }
+  );
+  N(
+    m,
+    "Extensions/ScrollablePlotArea.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Chart/Chart.js"],
+      m["Core/Globals.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z) {
+      var F = f.stop,
+        L = z.addEvent,
+        K = z.createElement,
+        C = z.pick;
+      ("");
+      L(h, "afterSetChartSize", function (f) {
+        var e = this.options.chart.scrollablePlotArea,
+          h = e && e.minWidth;
+        e = e && e.minHeight;
+        if (!this.renderer.forExport) {
+          if (h) {
+            if (
+              (this.scrollablePixelsX = h = Math.max(0, h - this.chartWidth))
+            ) {
+              this.plotWidth += h;
+              this.inverted
+                ? ((this.clipBox.height += h), (this.plotBox.height += h))
+                : ((this.clipBox.width += h), (this.plotBox.width += h));
+              var v = { 1: { name: "right", value: h } };
+            }
+          } else
+            e &&
+              (this.scrollablePixelsY = h =
+                Math.max(0, e - this.chartHeight)) &&
+              ((this.plotHeight += h),
+              this.inverted
+                ? ((this.clipBox.width += h), (this.plotBox.width += h))
+                : ((this.clipBox.height += h), (this.plotBox.height += h)),
+              (v = { 2: { name: "bottom", value: h } }));
+          v &&
+            !f.skipAxes &&
+            this.axes.forEach(function (e) {
+              v[e.side]
+                ? (e.getPlotLinePath = function () {
+                    var f = v[e.side].name,
+                      h = this[f];
+                    this[f] = h - v[e.side].value;
+                    var l = m.Axis.prototype.getPlotLinePath.apply(
+                      this,
+                      arguments
+                    );
+                    this[f] = h;
+                    return l;
+                  })
+                : (e.setAxisSize(), e.setAxisTranslation());
+            });
+        }
+      });
+      L(h, "render", function () {
+        this.scrollablePixelsX || this.scrollablePixelsY
+          ? (this.setUpScrolling && this.setUpScrolling(), this.applyFixed())
+          : this.fixedDiv && this.applyFixed();
+      });
+      h.prototype.setUpScrolling = function () {
+        var f = this,
+          e = {
+            WebkitOverflowScrolling: "touch",
+            overflowX: "hidden",
+            overflowY: "hidden",
+          };
+        this.scrollablePixelsX && (e.overflowX = "auto");
+        this.scrollablePixelsY && (e.overflowY = "auto");
+        this.scrollingParent = K(
+          "div",
+          { className: "highcharts-scrolling-parent" },
+          { position: "relative" },
+          this.renderTo
+        );
+        this.scrollingContainer = K(
+          "div",
+          { className: "highcharts-scrolling" },
+          e,
+          this.scrollingParent
+        );
+        L(this.scrollingContainer, "scroll", function () {
+          f.pointer && delete f.pointer.chartPosition;
+        });
+        this.innerContainer = K(
+          "div",
+          { className: "highcharts-inner-container" },
+          null,
+          this.scrollingContainer
+        );
+        this.innerContainer.appendChild(this.container);
+        this.setUpScrolling = null;
+      };
+      h.prototype.moveFixedElements = function () {
+        var f = this.container,
+          e = this.fixedRenderer,
+          h =
+            ".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-scrollbar .highcharts-subtitle .highcharts-title".split(
+              " "
+            ),
+          m;
+        this.scrollablePixelsX && !this.inverted
+          ? (m = ".highcharts-yaxis")
+          : this.scrollablePixelsX && this.inverted
+          ? (m = ".highcharts-xaxis")
+          : this.scrollablePixelsY && !this.inverted
+          ? (m = ".highcharts-xaxis")
+          : this.scrollablePixelsY &&
+            this.inverted &&
+            (m = ".highcharts-yaxis");
+        h.push(m, m + "-labels");
+        h.forEach(function (h) {
+          [].forEach.call(f.querySelectorAll(h), function (f) {
+            (f.namespaceURI === e.SVG_NS
+              ? e.box
+              : e.box.parentNode
+            ).appendChild(f);
+            f.style.pointerEvents = "auto";
+          });
+        });
+      };
+      h.prototype.applyFixed = function () {
+        var f,
+          e,
+          h = !this.fixedDiv,
+          v = this.options.chart.scrollablePlotArea;
+        h
+          ? ((this.fixedDiv = K(
+              "div",
+              { className: "highcharts-fixed" },
+              {
+                position: "absolute",
+                overflow: "hidden",
+                pointerEvents: "none",
+                zIndex: 2,
+                top: 0,
+              },
+              null,
+              !0
+            )),
+            null === (f = this.scrollingContainer) || void 0 === f
+              ? void 0
+              : f.parentNode.insertBefore(
+                  this.fixedDiv,
+                  this.scrollingContainer
+                ),
+            (this.renderTo.style.overflow = "visible"),
+            (this.fixedRenderer = f =
+              new m.Renderer(
+                this.fixedDiv,
+                this.chartWidth,
+                this.chartHeight,
+                null === (e = this.options.chart) || void 0 === e
+                  ? void 0
+                  : e.style
+              )),
+            (this.scrollableMask = f
+              .path()
+              .attr({
+                fill: this.options.chart.backgroundColor || "#fff",
+                "fill-opacity": C(v.opacity, 0.85),
+                zIndex: -1,
+              })
+              .addClass("highcharts-scrollable-mask")
+              .add()),
+            this.moveFixedElements(),
+            L(this, "afterShowResetZoom", this.moveFixedElements),
+            L(this, "afterLayOutTitles", this.moveFixedElements))
+          : this.fixedRenderer.setSize(this.chartWidth, this.chartHeight);
+        e = this.chartWidth + (this.scrollablePixelsX || 0);
+        f = this.chartHeight + (this.scrollablePixelsY || 0);
+        F(this.container);
+        this.container.style.width = e + "px";
+        this.container.style.height = f + "px";
+        this.renderer.boxWrapper.attr({
+          width: e,
+          height: f,
+          viewBox: [0, 0, e, f].join(" "),
+        });
+        this.chartBackground.attr({ width: e, height: f });
+        this.scrollingContainer.style.height = this.chartHeight + "px";
+        h &&
+          (v.scrollPositionX &&
+            (this.scrollingContainer.scrollLeft =
+              this.scrollablePixelsX * v.scrollPositionX),
+          v.scrollPositionY &&
+            (this.scrollingContainer.scrollTop =
+              this.scrollablePixelsY * v.scrollPositionY));
+        f = this.axisOffset;
+        h = this.plotTop - f[0] - 1;
+        v = this.plotLeft - f[3] - 1;
+        e = this.plotTop + this.plotHeight + f[2] + 1;
+        f = this.plotLeft + this.plotWidth + f[1] + 1;
+        var x = this.plotLeft + this.plotWidth - (this.scrollablePixelsX || 0),
+          D = this.plotTop + this.plotHeight - (this.scrollablePixelsY || 0);
+        h = this.scrollablePixelsX
+          ? [
+              ["M", 0, h],
+              ["L", this.plotLeft - 1, h],
+              ["L", this.plotLeft - 1, e],
+              ["L", 0, e],
+              ["Z"],
+              ["M", x, h],
+              ["L", this.chartWidth, h],
+              ["L", this.chartWidth, e],
+              ["L", x, e],
+              ["Z"],
+            ]
+          : this.scrollablePixelsY
+          ? [
+              ["M", v, 0],
+              ["L", v, this.plotTop - 1],
+              ["L", f, this.plotTop - 1],
+              ["L", f, 0],
+              ["Z"],
+              ["M", v, D],
+              ["L", v, this.chartHeight],
+              ["L", f, this.chartHeight],
+              ["L", f, D],
+              ["Z"],
+            ]
+          : [["M", 0, 0]];
+        "adjustHeight" !== this.redrawTrigger &&
+          this.scrollableMask.attr({ d: h });
+      };
+    }
+  );
+  N(
+    m,
+    "Core/Axis/StackingAxis.js",
+    [m["Core/Animation/AnimationUtilities.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = f.getDeferredAnimation,
+        z = h.addEvent,
+        F = h.destroyObjectProperties,
+        L = h.fireEvent,
+        K = h.objectEach,
+        C = h.pick,
+        y = (function () {
+          function e(e) {
+            this.oldStacks = {};
+            this.stacks = {};
+            this.stacksTouched = 0;
+            this.axis = e;
+          }
+          e.prototype.buildStacks = function () {
+            var e = this.axis,
+              f = e.series,
+              h = C(e.options.reversedStacks, !0),
+              m = f.length,
+              n;
+            if (!e.isXAxis) {
+              this.usePercentage = !1;
+              for (n = m; n--; ) {
+                var l = f[h ? n : m - n - 1];
+                l.setStackedPoints();
+                l.setGroupedPoints();
+              }
+              for (n = 0; n < m; n++) f[n].modifyStacks();
+              L(e, "afterBuildStacks");
+            }
+          };
+          e.prototype.cleanStacks = function () {
+            if (!this.axis.isXAxis) {
+              if (this.oldStacks) var e = (this.stacks = this.oldStacks);
+              K(e, function (e) {
+                K(e, function (e) {
+                  e.cumulative = e.total;
+                });
+              });
+            }
+          };
+          e.prototype.resetStacks = function () {
+            var e = this,
+              f = e.stacks;
+            e.axis.isXAxis ||
+              K(f, function (f) {
+                K(f, function (h, n) {
+                  h.touched < e.stacksTouched
+                    ? (h.destroy(), delete f[n])
+                    : ((h.total = null), (h.cumulative = null));
+                });
+              });
+          };
+          e.prototype.renderStackTotals = function () {
+            var e = this.axis,
+              f = e.chart,
+              h = f.renderer,
+              D = this.stacks;
+            e = m(f, e.options.stackLabels.animation);
+            var n = (this.stackTotalGroup =
+              this.stackTotalGroup ||
+              h
+                .g("stack-labels")
+                .attr({ visibility: "visible", zIndex: 6, opacity: 0 })
+                .add());
+            n.translate(f.plotLeft, f.plotTop);
+            K(D, function (e) {
+              K(e, function (e) {
+                e.render(n);
+              });
+            });
+            n.animate({ opacity: 1 }, e);
+          };
+          return e;
+        })();
+      return (function () {
+        function e() {}
+        e.compose = function (f) {
+          z(f, "init", e.onInit);
+          z(f, "destroy", e.onDestroy);
+        };
+        e.onDestroy = function () {
+          var e = this.stacking;
+          if (e) {
+            var f = e.stacks;
+            K(f, function (e, h) {
+              F(e);
+              f[h] = null;
+            });
+            e && e.stackTotalGroup && e.stackTotalGroup.destroy();
+          }
+        };
+        e.onInit = function () {
+          this.stacking || (this.stacking = new y(this));
+        };
+        return e;
+      })();
+    }
+  );
+  N(
+    m,
+    "Mixins/LegendSymbol.js",
+    [m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.merge,
+        z = h.pick;
+      return (f.LegendSymbolMixin = {
+        drawRectangle: function (f, h) {
+          var m = f.symbolHeight,
+            C = f.options.squareSymbol;
+          h.legendSymbol = this.chart.renderer
+            .rect(
+              C ? (f.symbolWidth - m) / 2 : 0,
+              f.baseline - m + 1,
+              C ? m : f.symbolWidth,
+              m,
+              z(f.options.symbolRadius, m / 2)
+            )
+            .addClass("highcharts-point")
+            .attr({ zIndex: 3 })
+            .add(h.legendGroup);
+        },
+        drawLineMarker: function (f) {
+          var h = this.options,
+            F = h.marker,
+            C = f.symbolWidth,
+            y = f.symbolHeight,
+            e = y / 2,
+            I = this.chart.renderer,
+            v = this.legendGroup;
+          f = f.baseline - Math.round(0.3 * f.fontMetrics.b);
+          var x = {};
+          this.chart.styledMode ||
+            ((x = { "stroke-width": h.lineWidth || 0 }),
+            h.dashStyle && (x.dashstyle = h.dashStyle));
+          this.legendLine = I.path([
+            ["M", 0, f],
+            ["L", C, f],
+          ])
+            .addClass("highcharts-graph")
+            .attr(x)
+            .add(v);
+          F &&
+            !1 !== F.enabled &&
+            C &&
+            ((h = Math.min(z(F.radius, e), e)),
+            0 === this.symbol.indexOf("url") &&
+              ((F = m(F, { width: y, height: y })), (h = 0)),
+            (this.legendSymbol = F =
+              I.symbol(this.symbol, C / 2 - h, f - h, 2 * h, 2 * h, F)
+                .addClass("highcharts-point")
+                .add(v)),
+            (F.isMarker = !0));
+        },
+      });
+    }
+  );
+  N(
+    m,
+    "Core/Series/CartesianSeries.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Series/Series.js"],
+      m["Core/Globals.js"],
+      m["Mixins/LegendSymbol.js"],
+      m["Core/Options.js"],
+      m["Core/Series/Point.js"],
+      m["Core/Renderer/SVG/SVGElement.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F, L, K, C) {
+      var y = f.animObject,
+        e = F.defaultOptions,
+        I = C.addEvent,
+        v = C.arrayMax,
+        x = C.arrayMin,
+        D = C.clamp,
+        n = C.correctFloat,
+        l = C.defined,
+        J = C.erase,
+        w = C.error,
+        r = C.extend,
+        d = C.find,
+        g = C.fireEvent,
+        c = C.getNestedProperty,
+        a = C.isArray,
+        q = C.isFunction,
+        p = C.isNumber,
+        B = C.isString,
+        A = C.merge,
+        G = C.objectEach,
+        M = C.pick,
+        T = C.removeEvent,
+        Q = C.splat,
+        O = C.syncTimeout;
+      ("");
+      var E = h.seriesTypes,
+        u = m.win;
+      f = h.seriesType(
+        "line",
+        void 0,
+        {
+          lineWidth: 2,
+          allowPointSelect: !1,
+          crisp: !0,
+          showCheckbox: !1,
+          animation: { duration: 1e3 },
+          events: {},
+          marker: {
+            enabledThreshold: 2,
+            lineColor: "#ffffff",
+            lineWidth: 0,
+            radius: 4,
+            states: {
+              normal: { animation: !0 },
+              hover: {
+                animation: { duration: 50 },
+                enabled: !0,
+                radiusPlus: 2,
+                lineWidthPlus: 1,
+              },
+              select: {
+                fillColor: "#cccccc",
+                lineColor: "#000000",
+                lineWidth: 2,
+              },
+            },
+          },
+          point: { events: {} },
+          dataLabels: {
+            animation: {},
+            align: "center",
+            defer: !0,
+            formatter: function () {
+              var a = this.series.chart.numberFormatter;
+              return "number" !== typeof this.y ? "" : a(this.y, -1);
+            },
+            padding: 5,
+            style: {
+              fontSize: "11px",
+              fontWeight: "bold",
+              color: "contrast",
+              textOutline: "1px contrast",
+            },
+            verticalAlign: "bottom",
+            x: 0,
+            y: 0,
+          },
+          cropThreshold: 300,
+          opacity: 1,
+          pointRange: 0,
+          softThreshold: !0,
+          states: {
+            normal: { animation: !0 },
+            hover: {
+              animation: { duration: 50 },
+              lineWidthPlus: 1,
+              marker: {},
+              halo: { size: 10, opacity: 0.25 },
+            },
+            select: { animation: { duration: 0 } },
+            inactive: { animation: { duration: 50 }, opacity: 0.2 },
+          },
+          stickyTracking: !0,
+          turboThreshold: 1e3,
+          findNearestPointBy: "x",
+        },
+        {
+          axisTypes: ["xAxis", "yAxis"],
+          coll: "series",
+          colorCounter: 0,
+          cropShoulder: 1,
+          directTouch: !1,
+          isCartesian: !0,
+          parallelArrays: ["x", "y"],
+          pointClass: L,
+          requireSorting: !0,
+          sorted: !0,
+          init: function (a, c) {
+            g(this, "init", { options: c });
+            var b = this,
+              d = a.series,
+              k;
+            this.eventOptions = this.eventOptions || {};
+            this.eventsToUnbind = [];
+            b.chart = a;
+            b.options = c = b.setOptions(c);
+            b.linkedSeries = [];
+            b.bindAxes();
+            r(b, {
+              name: c.name,
+              state: "",
+              visible: !1 !== c.visible,
+              selected: !0 === c.selected,
+            });
+            var e = c.events;
+            G(e, function (a, c) {
+              q(a) &&
+                b.eventOptions[c] !== a &&
+                (q(b.eventOptions[c]) && T(b, c, b.eventOptions[c]),
+                (b.eventOptions[c] = a),
+                I(b, c, a));
+            });
+            if (
+              (e && e.click) ||
+              (c.point && c.point.events && c.point.events.click) ||
+              c.allowPointSelect
+            )
+              a.runTrackerClick = !0;
+            b.getColor();
+            b.getSymbol();
+            b.parallelArrays.forEach(function (a) {
+              b[a + "Data"] || (b[a + "Data"] = []);
+            });
+            b.isCartesian && (a.hasCartesianSeries = !0);
+            d.length && (k = d[d.length - 1]);
+            b._i = M(k && k._i, -1) + 1;
+            b.opacity = b.options.opacity;
+            a.orderSeries(this.insert(d));
+            c.dataSorting && c.dataSorting.enabled
+              ? b.setDataSortingOptions()
+              : b.points || b.data || b.setData(c.data, !1);
+            g(this, "afterInit");
+          },
+          is: function (a) {
+            return E[a] && this instanceof E[a];
+          },
+          insert: function (a) {
+            var b = this.options.index,
+              c;
+            if (p(b)) {
+              for (c = a.length; c--; )
+                if (b >= M(a[c].options.index, a[c]._i)) {
+                  a.splice(c + 1, 0, this);
+                  break;
+                }
+              -1 === c && a.unshift(this);
+              c += 1;
+            } else a.push(this);
+            return M(c, a.length - 1);
+          },
+          bindAxes: function () {
+            var a = this,
+              c = a.options,
+              d = a.chart,
+              e;
+            g(this, "bindAxes", null, function () {
+              (a.axisTypes || []).forEach(function (b) {
+                d[b].forEach(function (d) {
+                  e = d.options;
+                  if (
+                    c[b] === e.index ||
+                    ("undefined" !== typeof c[b] && c[b] === e.id) ||
+                    ("undefined" === typeof c[b] && 0 === e.index)
+                  )
+                    a.insert(d.series), (a[b] = d), (d.isDirty = !0);
+                });
+                a[b] || a.optionalAxis === b || w(18, !0, d);
+              });
+            });
+            g(this, "afterBindAxes");
+          },
+          updateParallelArrays: function (a, c) {
+            var b = a.series,
+              d = arguments,
+              g = p(c)
+                ? function (d) {
+                    var g = "y" === d && b.toYData ? b.toYData(a) : a[d];
+                    b[d + "Data"][c] = g;
+                  }
+                : function (a) {
+                    Array.prototype[c].apply(
+                      b[a + "Data"],
+                      Array.prototype.slice.call(d, 2)
+                    );
+                  };
+            b.parallelArrays.forEach(g);
+          },
+          hasData: function () {
+            return (
+              (this.visible &&
+                "undefined" !== typeof this.dataMax &&
+                "undefined" !== typeof this.dataMin) ||
+              (this.visible && this.yData && 0 < this.yData.length)
+            );
+          },
+          autoIncrement: function () {
+            var a = this.options,
+              c = this.xIncrement,
+              d,
+              g = a.pointIntervalUnit,
+              e = this.chart.time;
+            c = M(c, a.pointStart, 0);
+            this.pointInterval = d = M(this.pointInterval, a.pointInterval, 1);
+            g &&
+              ((a = new e.Date(c)),
+              "day" === g
+                ? e.set("Date", a, e.get("Date", a) + d)
+                : "month" === g
+                ? e.set("Month", a, e.get("Month", a) + d)
+                : "year" === g &&
+                  e.set("FullYear", a, e.get("FullYear", a) + d),
+              (d = a.getTime() - c));
+            this.xIncrement = c + d;
+            return c;
+          },
+          setDataSortingOptions: function () {
+            var a = this.options;
+            r(this, {
+              requireSorting: !1,
+              sorted: !1,
+              enabledDataSorting: !0,
+              allowDG: !1,
+            });
+            l(a.pointRange) || (a.pointRange = 1);
+          },
+          setOptions: function (a) {
+            var b = this.chart,
+              c = b.options,
+              d = c.plotOptions,
+              f = b.userOptions || {};
+            a = A(a);
+            b = b.styledMode;
+            var p = { plotOptions: d, userOptions: a };
+            g(this, "setOptions", p);
+            var h = p.plotOptions[this.type],
+              q = f.plotOptions || {};
+            this.userOptions = p.userOptions;
+            f = A(h, d.series, f.plotOptions && f.plotOptions[this.type], a);
+            this.tooltipOptions = A(
+              e.tooltip,
+              e.plotOptions.series && e.plotOptions.series.tooltip,
+              e.plotOptions[this.type].tooltip,
+              c.tooltip.userOptions,
+              d.series && d.series.tooltip,
+              d[this.type].tooltip,
+              a.tooltip
+            );
+            this.stickyTracking = M(
+              a.stickyTracking,
+              q[this.type] && q[this.type].stickyTracking,
+              q.series && q.series.stickyTracking,
+              this.tooltipOptions.shared && !this.noSharedTooltip
+                ? !0
+                : f.stickyTracking
+            );
+            null === h.marker && delete f.marker;
+            this.zoneAxis = f.zoneAxis;
+            c = this.zones = (f.zones || []).slice();
+            (!f.negativeColor && !f.negativeFillColor) ||
+              f.zones ||
+              ((d = {
+                value: f[this.zoneAxis + "Threshold"] || f.threshold || 0,
+                className: "highcharts-negative",
+              }),
+              b ||
+                ((d.color = f.negativeColor),
+                (d.fillColor = f.negativeFillColor)),
+              c.push(d));
+            c.length &&
+              l(c[c.length - 1].value) &&
+              c.push(b ? {} : { color: this.color, fillColor: this.fillColor });
+            g(this, "afterSetOptions", { options: f });
+            return f;
+          },
+          getName: function () {
+            return M(this.options.name, "Series " + (this.index + 1));
+          },
+          getCyclic: function (a, c, d) {
+            var b = this.chart,
+              g = this.userOptions,
+              k = a + "Index",
+              e = a + "Counter",
+              f = d
+                ? d.length
+                : M(b.options.chart[a + "Count"], b[a + "Count"]);
+            if (!c) {
+              var p = M(g[k], g["_" + k]);
+              l(p) ||
+                (b.series.length || (b[e] = 0),
+                (g["_" + k] = p = b[e] % f),
+                (b[e] += 1));
+              d && (c = d[p]);
+            }
+            "undefined" !== typeof p && (this[k] = p);
+            this[a] = c;
+          },
+          getColor: function () {
+            this.chart.styledMode
+              ? this.getCyclic("color")
+              : this.options.colorByPoint
+              ? (this.options.color = null)
+              : this.getCyclic(
+                  "color",
+                  this.options.color || e.plotOptions[this.type].color,
+                  this.chart.options.colors
+                );
+          },
+          getPointsCollection: function () {
+            return (this.hasGroupedData ? this.points : this.data) || [];
+          },
+          getSymbol: function () {
+            this.getCyclic(
+              "symbol",
+              this.options.marker.symbol,
+              this.chart.options.symbols
+            );
+          },
+          findPointIndex: function (a, c) {
+            var b = a.id,
+              g = a.x,
+              k = this.points,
+              e,
+              f = this.options.dataSorting;
+            if (b) var l = this.chart.get(b);
+            else if (this.linkedParent || this.enabledDataSorting) {
+              var h = f && f.matchByName ? "name" : "index";
+              l = d(k, function (b) {
+                return !b.touched && b[h] === a[h];
+              });
+              if (!l) return;
+            }
+            if (l) {
+              var q = l && l.index;
+              "undefined" !== typeof q && (e = !0);
+            }
+            "undefined" === typeof q && p(g) && (q = this.xData.indexOf(g, c));
+            -1 !== q &&
+              "undefined" !== typeof q &&
+              this.cropped &&
+              (q = q >= this.cropStart ? q - this.cropStart : q);
+            !e && k[q] && k[q].touched && (q = void 0);
+            return q;
+          },
+          drawLegendSymbol: z.drawLineMarker,
+          updateData: function (a, c) {
+            var b = this.options,
+              d = b.dataSorting,
+              g = this.points,
+              k = [],
+              e,
+              f,
+              h,
+              q = this.requireSorting,
+              n = a.length === g.length,
+              u = !0;
+            this.xIncrement = null;
+            a.forEach(function (a, c) {
+              var f =
+                (l(a) &&
+                  this.pointClass.prototype.optionsToObject.call(
+                    { series: this },
+                    a
+                  )) ||
+                {};
+              var t = f.x;
+              if (f.id || p(t)) {
+                if (
+                  ((t = this.findPointIndex(f, h)),
+                  -1 === t || "undefined" === typeof t
+                    ? k.push(a)
+                    : g[t] && a !== b.data[t]
+                    ? (g[t].update(a, !1, null, !1),
+                      (g[t].touched = !0),
+                      q && (h = t + 1))
+                    : g[t] && (g[t].touched = !0),
+                  !n || c !== t || (d && d.enabled) || this.hasDerivedData)
+                )
+                  e = !0;
+              } else k.push(a);
+            }, this);
+            if (e)
+              for (a = g.length; a--; )
+                (f = g[a]) && !f.touched && f.remove && f.remove(!1, c);
+            else
+              !n || (d && d.enabled)
+                ? (u = !1)
+                : (a.forEach(function (a, b) {
+                    g[b].update && a !== g[b].y && g[b].update(a, !1, null, !1);
+                  }),
+                  (k.length = 0));
+            g.forEach(function (a) {
+              a && (a.touched = !1);
+            });
+            if (!u) return !1;
+            k.forEach(function (a) {
+              this.addPoint(a, !1, null, null, !1);
+            }, this);
+            null === this.xIncrement &&
+              this.xData &&
+              this.xData.length &&
+              ((this.xIncrement = v(this.xData)), this.autoIncrement());
+            return !0;
+          },
+          setData: function (b, c, d, g) {
+            var k = this,
+              e = k.points,
+              f = (e && e.length) || 0,
+              t,
+              l = k.options,
+              h = k.chart,
+              q = l.dataSorting,
+              n = null,
+              u = k.xAxis;
+            n = l.turboThreshold;
+            var r = this.xData,
+              m = this.yData,
+              A = (t = k.pointArrayMap) && t.length,
+              v = l.keys,
+              E = 0,
+              H = 1,
+              O;
+            b = b || [];
+            t = b.length;
+            c = M(c, !0);
+            q && q.enabled && (b = this.sortData(b));
+            !1 !== g &&
+              t &&
+              f &&
+              !k.cropped &&
+              !k.hasGroupedData &&
+              k.visible &&
+              !k.isSeriesBoosting &&
+              (O = this.updateData(b, d));
+            if (!O) {
+              k.xIncrement = null;
+              k.colorCounter = 0;
+              this.parallelArrays.forEach(function (a) {
+                k[a + "Data"].length = 0;
+              });
+              if (n && t > n)
+                if (((n = k.getFirstValidPoint(b)), p(n)))
+                  for (d = 0; d < t; d++)
+                    (r[d] = this.autoIncrement()), (m[d] = b[d]);
+                else if (a(n))
+                  if (A)
+                    for (d = 0; d < t; d++)
+                      (g = b[d]), (r[d] = g[0]), (m[d] = g.slice(1, A + 1));
+                  else
+                    for (
+                      v &&
+                        ((E = v.indexOf("x")),
+                        (H = v.indexOf("y")),
+                        (E = 0 <= E ? E : 0),
+                        (H = 0 <= H ? H : 1)),
+                        d = 0;
+                      d < t;
+                      d++
+                    )
+                      (g = b[d]), (r[d] = g[E]), (m[d] = g[H]);
+                else w(12, !1, h);
+              else
+                for (d = 0; d < t; d++)
+                  "undefined" !== typeof b[d] &&
+                    ((g = { series: k }),
+                    k.pointClass.prototype.applyOptions.apply(g, [b[d]]),
+                    k.updateParallelArrays(g, d));
+              m && B(m[0]) && w(14, !0, h);
+              k.data = [];
+              k.options.data = k.userOptions.data = b;
+              for (d = f; d--; ) e[d] && e[d].destroy && e[d].destroy();
+              u && (u.minRange = u.userMinRange);
+              k.isDirty = h.isDirtyBox = !0;
+              k.isDirtyData = !!e;
+              d = !1;
+            }
+            "point" === l.legendType &&
+              (this.processData(), this.generatePoints());
+            c && h.redraw(d);
+          },
+          sortData: function (a) {
+            var b = this,
+              d = b.options.dataSorting.sortKey || "y",
+              g = function (a, b) {
+                return (
+                  (l(b) &&
+                    a.pointClass.prototype.optionsToObject.call(
+                      { series: a },
+                      b
+                    )) ||
+                  {}
+                );
+              };
+            a.forEach(function (c, d) {
+              a[d] = g(b, c);
+              a[d].index = d;
+            }, this);
+            a.concat()
+              .sort(function (a, b) {
+                a = c(d, a);
+                b = c(d, b);
+                return b < a ? -1 : b > a ? 1 : 0;
+              })
+              .forEach(function (a, b) {
+                a.x = b;
+              }, this);
+            b.linkedSeries &&
+              b.linkedSeries.forEach(function (b) {
+                var c = b.options,
+                  d = c.data;
+                (c.dataSorting && c.dataSorting.enabled) ||
+                  !d ||
+                  (d.forEach(function (c, k) {
+                    d[k] = g(b, c);
+                    a[k] && ((d[k].x = a[k].x), (d[k].index = k));
+                  }),
+                  b.setData(d, !1));
+              });
+            return a;
+          },
+          getProcessedData: function (a) {
+            var b = this.xData,
+              c = this.yData,
+              d = b.length;
+            var g = 0;
+            var e = this.xAxis,
+              f = this.options;
+            var p = f.cropThreshold;
+            var l = a || this.getExtremesFromAll || f.getExtremesFromAll,
+              h = this.isCartesian;
+            a = e && e.val2lin;
+            f = !(!e || !e.logarithmic);
+            var q = this.requireSorting;
+            if (e) {
+              e = e.getExtremes();
+              var n = e.min;
+              var u = e.max;
+            }
+            if (h && this.sorted && !l && (!p || d > p || this.forceCrop))
+              if (b[d - 1] < n || b[0] > u) (b = []), (c = []);
+              else if (this.yData && (b[0] < n || b[d - 1] > u)) {
+                g = this.cropData(this.xData, this.yData, n, u);
+                b = g.xData;
+                c = g.yData;
+                g = g.start;
+                var r = !0;
+              }
+            for (p = b.length || 1; --p; )
+              if (
+                ((d = f ? a(b[p]) - a(b[p - 1]) : b[p] - b[p - 1]),
+                0 < d && ("undefined" === typeof m || d < m))
+              )
+                var m = d;
+              else 0 > d && q && (w(15, !1, this.chart), (q = !1));
+            return {
+              xData: b,
+              yData: c,
+              cropped: r,
+              cropStart: g,
+              closestPointRange: m,
+            };
+          },
+          processData: function (a) {
+            var b = this.xAxis;
+            if (
+              this.isCartesian &&
+              !this.isDirty &&
+              !b.isDirty &&
+              !this.yAxis.isDirty &&
+              !a
+            )
+              return !1;
+            a = this.getProcessedData();
+            this.cropped = a.cropped;
+            this.cropStart = a.cropStart;
+            this.processedXData = a.xData;
+            this.processedYData = a.yData;
+            this.closestPointRange = this.basePointRange = a.closestPointRange;
+          },
+          cropData: function (a, c, d, g, e) {
+            var b = a.length,
+              k = 0,
+              f = b,
+              p;
+            e = M(e, this.cropShoulder);
+            for (p = 0; p < b; p++)
+              if (a[p] >= d) {
+                k = Math.max(0, p - e);
+                break;
+              }
+            for (d = p; d < b; d++)
+              if (a[d] > g) {
+                f = d + e;
+                break;
+              }
+            return {
+              xData: a.slice(k, f),
+              yData: c.slice(k, f),
+              start: k,
+              end: f,
+            };
+          },
+          generatePoints: function () {
+            var a = this.options,
+              c = a.data,
+              d = this.data,
+              e,
+              f = this.processedXData,
+              p = this.processedYData,
+              l = this.pointClass,
+              h = f.length,
+              q = this.cropStart || 0,
+              n = this.hasGroupedData;
+            a = a.keys;
+            var u = [],
+              m;
+            d || n || ((d = []), (d.length = c.length), (d = this.data = d));
+            a && n && (this.options.keys = !1);
+            for (m = 0; m < h; m++) {
+              var w = q + m;
+              if (n) {
+                var v = new l().init(this, [f[m]].concat(Q(p[m])));
+                v.dataGroup = this.groupMap[m];
+                v.dataGroup.options &&
+                  ((v.options = v.dataGroup.options),
+                  r(v, v.dataGroup.options),
+                  delete v.dataLabels);
+              } else
+                (v = d[w]) ||
+                  "undefined" === typeof c[w] ||
+                  (d[w] = v = new l().init(this, c[w], f[m]));
+              v && ((v.index = w), (u[m] = v));
+            }
+            this.options.keys = a;
+            if (d && (h !== (e = d.length) || n))
+              for (m = 0; m < e; m++)
+                m !== q || n || (m += h),
+                  d[m] && (d[m].destroyElements(), (d[m].plotX = void 0));
+            this.data = d;
+            this.points = u;
+            g(this, "afterGeneratePoints");
+          },
+          getXExtremes: function (a) {
+            return { min: x(a), max: v(a) };
+          },
+          getExtremes: function (b, c) {
+            var d = this.xAxis,
+              k = this.yAxis,
+              e = this.processedXData || this.xData,
+              f = [],
+              l = 0,
+              h = 0;
+            var q = 0;
+            var n = this.requireSorting ? this.cropShoulder : 0,
+              u = k ? k.positiveValuesOnly : !1,
+              r;
+            b = b || this.stackedYData || this.processedYData || [];
+            k = b.length;
+            d && ((q = d.getExtremes()), (h = q.min), (q = q.max));
+            for (r = 0; r < k; r++) {
+              var m = e[r];
+              var w = b[r];
+              var A = (p(w) || a(w)) && (w.length || 0 < w || !u);
+              m =
+                c ||
+                this.getExtremesFromAll ||
+                this.options.getExtremesFromAll ||
+                this.cropped ||
+                !d ||
+                ((e[r + n] || m) >= h && (e[r - n] || m) <= q);
+              if (A && m)
+                if ((A = w.length)) for (; A--; ) p(w[A]) && (f[l++] = w[A]);
+                else f[l++] = w;
+            }
+            b = { dataMin: x(f), dataMax: v(f) };
+            g(this, "afterGetExtremes", { dataExtremes: b });
+            return b;
+          },
+          applyExtremes: function () {
+            var a = this.getExtremes();
+            this.dataMin = a.dataMin;
+            this.dataMax = a.dataMax;
+            return a;
+          },
+          getFirstValidPoint: function (a) {
+            for (var b = null, c = a.length, d = 0; null === b && d < c; )
+              (b = a[d]), d++;
+            return b;
+          },
+          translate: function () {
+            this.processedXData || this.processData();
+            this.generatePoints();
+            var b = this.options,
+              c = b.stacking,
+              d = this.xAxis,
+              e = d.categories,
+              f = this.enabledDataSorting,
+              h = this.yAxis,
+              q = this.points,
+              u = q.length,
+              r = !!this.modifyValue,
+              m,
+              w = this.pointPlacementToXValue(),
+              v = !!w,
+              A = b.threshold,
+              B = b.startFromThreshold ? A : 0,
+              E,
+              O = this.zoneAxis || "y",
+              G = Number.MAX_VALUE;
+            for (m = 0; m < u; m++) {
+              var x = q[m],
+                y = x.x,
+                z = x.y,
+                C = x.low,
+                J =
+                  c &&
+                  h.stacking &&
+                  h.stacking.stacks[
+                    (this.negStacks && z < (B ? 0 : A) ? "-" : "") +
+                      this.stackKey
+                  ];
+              if (
+                (h.positiveValuesOnly && !h.validatePositiveValue(z)) ||
+                (d.positiveValuesOnly && !d.validatePositiveValue(y))
+              )
+                x.isNull = !0;
+              x.plotX = E = n(
+                D(
+                  d.translate(y, 0, 0, 0, 1, w, "flags" === this.type),
+                  -1e5,
+                  1e5
+                )
+              );
+              if (c && this.visible && J && J[y]) {
+                var F = this.getStackIndicator(F, y, this.index);
+                if (!x.isNull) {
+                  var Q = J[y];
+                  var I = Q.points[F.key];
+                }
+              }
+              a(I) &&
+                ((C = I[0]),
+                (z = I[1]),
+                C === B && F.key === J[y].base && (C = M(p(A) && A, h.min)),
+                h.positiveValuesOnly && 0 >= C && (C = null),
+                (x.total = x.stackTotal = Q.total),
+                (x.percentage = Q.total && (x.y / Q.total) * 100),
+                (x.stackY = z),
+                this.irregularWidths ||
+                  Q.setOffset(this.pointXOffset || 0, this.barW || 0));
+              x.yBottom = l(C)
+                ? D(h.translate(C, 0, 1, 0, 1), -1e5, 1e5)
+                : null;
+              r && (z = this.modifyValue(z, x));
+              x.plotY =
+                "number" === typeof z && Infinity !== z
+                  ? D(h.translate(z, 0, 1, 0, 1), -1e5, 1e5)
+                  : void 0;
+              x.isInside = this.isPointInside(x);
+              x.clientX = v ? n(d.translate(y, 0, 0, 0, 1, w)) : E;
+              x.negative = x[O] < (b[O + "Threshold"] || A || 0);
+              x.category = e && "undefined" !== typeof e[x.x] ? e[x.x] : x.x;
+              if (!x.isNull && !1 !== x.visible) {
+                "undefined" !== typeof K && (G = Math.min(G, Math.abs(E - K)));
+                var K = E;
+              }
+              x.zone = this.zones.length && x.getZone();
+              !x.graphic && this.group && f && (x.isNew = !0);
+            }
+            this.closestPointRangePx = G;
+            g(this, "afterTranslate");
+          },
+          getValidPoints: function (a, c, d) {
+            var b = this.chart;
+            return (a || this.points || []).filter(function (a) {
+              return c && !b.isInsidePlot(a.plotX, a.plotY, b.inverted)
+                ? !1
+                : !1 !== a.visible && (d || !a.isNull);
+            });
+          },
+          getClipBox: function (a, c) {
+            var b = this.options,
+              d = this.chart,
+              g = d.inverted,
+              k = this.xAxis,
+              e = k && this.yAxis,
+              f = d.options.chart.scrollablePlotArea || {};
+            a && !1 === b.clip && e
+              ? (a = g
+                  ? {
+                      y: -d.chartWidth + e.len + e.pos,
+                      height: d.chartWidth,
+                      width: d.chartHeight,
+                      x: -d.chartHeight + k.len + k.pos,
+                    }
+                  : {
+                      y: -e.pos,
+                      height: d.chartHeight,
+                      width: d.chartWidth,
+                      x: -k.pos,
+                    })
+              : ((a = this.clipBox || d.clipBox),
+                c &&
+                  ((a.width = d.plotSizeX),
+                  (a.x =
+                    (d.scrollablePixelsX || 0) * (f.scrollPositionX || 0))));
+            return c ? { width: a.width, x: a.x } : a;
+          },
+          setClip: function (a) {
+            var b = this.chart,
+              c = this.options,
+              d = b.renderer,
+              g = b.inverted,
+              e = this.clipBox,
+              f = this.getClipBox(a),
+              p =
+                this.sharedClipKey ||
+                [
+                  "_sharedClip",
+                  a && a.duration,
+                  a && a.easing,
+                  f.height,
+                  c.xAxis,
+                  c.yAxis,
+                ].join(),
+              l = b[p],
+              h = b[p + "m"];
+            a &&
+              ((f.width = 0),
+              g && (f.x = b.plotHeight + (!1 !== c.clip ? 0 : b.plotTop)));
+            l
+              ? b.hasLoaded || l.attr(f)
+              : (a &&
+                  (b[p + "m"] = h =
+                    d.clipRect(
+                      g ? b.plotSizeX + 99 : -99,
+                      g ? -b.plotLeft : -b.plotTop,
+                      99,
+                      g ? b.chartWidth : b.chartHeight
+                    )),
+                (b[p] = l = d.clipRect(f)),
+                (l.count = { length: 0 }));
+            a &&
+              !l.count[this.index] &&
+              ((l.count[this.index] = !0), (l.count.length += 1));
+            if (!1 !== c.clip || a)
+              this.group.clip(a || e ? l : b.clipRect),
+                this.markerGroup.clip(h),
+                (this.sharedClipKey = p);
+            a ||
+              (l.count[this.index] &&
+                (delete l.count[this.index], --l.count.length),
+              0 === l.count.length &&
+                p &&
+                b[p] &&
+                (e || (b[p] = b[p].destroy()),
+                b[p + "m"] && (b[p + "m"] = b[p + "m"].destroy())));
+          },
+          animate: function (a) {
+            var b = this.chart,
+              c = y(this.options.animation);
+            if (!b.hasRendered)
+              if (a) this.setClip(c);
+              else {
+                var d = this.sharedClipKey;
+                a = b[d];
+                var g = this.getClipBox(c, !0);
+                a && a.animate(g, c);
+                b[d + "m"] &&
+                  b[d + "m"].animate(
+                    { width: g.width + 99, x: g.x - (b.inverted ? 0 : 99) },
+                    c
+                  );
+              }
+          },
+          afterAnimate: function () {
+            this.setClip();
+            g(this, "afterAnimate");
+            this.finishedAnimating = !0;
+          },
+          drawPoints: function () {
+            var a = this.points,
+              c = this.chart,
+              d,
+              g,
+              e = this.options.marker,
+              f = this[this.specialGroup] || this.markerGroup,
+              p = this.xAxis,
+              l = M(
+                e.enabled,
+                !p || p.isRadial ? !0 : null,
+                this.closestPointRangePx >= e.enabledThreshold * e.radius
+              );
+            if (!1 !== e.enabled || this._hasPointMarkers)
+              for (d = 0; d < a.length; d++) {
+                var h = a[d];
+                var q = (g = h.graphic) ? "animate" : "attr";
+                var n = h.marker || {};
+                var u = !!h.marker;
+                if (
+                  ((l && "undefined" === typeof n.enabled) || n.enabled) &&
+                  !h.isNull &&
+                  !1 !== h.visible
+                ) {
+                  var r = M(n.symbol, this.symbol);
+                  var m = this.markerAttribs(h, h.selected && "select");
+                  this.enabledDataSorting &&
+                    (h.startXPos = p.reversed ? -m.width : p.width);
+                  var w = !1 !== h.isInside;
+                  g
+                    ? g[w ? "show" : "hide"](w).animate(m)
+                    : w &&
+                      (0 < m.width || h.hasImage) &&
+                      ((h.graphic = g =
+                        c.renderer
+                          .symbol(r, m.x, m.y, m.width, m.height, u ? n : e)
+                          .add(f)),
+                      this.enabledDataSorting &&
+                        c.hasRendered &&
+                        (g.attr({ x: h.startXPos }), (q = "animate")));
+                  g && "animate" === q && g[w ? "show" : "hide"](w).animate(m);
+                  if (g && !c.styledMode)
+                    g[q](this.pointAttribs(h, h.selected && "select"));
+                  g && g.addClass(h.getClassName(), !0);
+                } else g && (h.graphic = g.destroy());
+              }
+          },
+          markerAttribs: function (a, c) {
+            var b = this.options,
+              d = b.marker,
+              g = a.marker || {},
+              e = g.symbol || d.symbol,
+              k = M(g.radius, d.radius);
+            c &&
+              ((d = d.states[c]),
+              (c = g.states && g.states[c]),
+              (k = M(
+                c && c.radius,
+                d && d.radius,
+                k + ((d && d.radiusPlus) || 0)
+              )));
+            a.hasImage = e && 0 === e.indexOf("url");
+            a.hasImage && (k = 0);
+            a = {
+              x: b.crisp ? Math.floor(a.plotX) - k : a.plotX - k,
+              y: a.plotY - k,
+            };
+            k && (a.width = a.height = 2 * k);
+            return a;
+          },
+          pointAttribs: function (a, c) {
+            var b = this.options.marker,
+              d = a && a.options,
+              g = (d && d.marker) || {},
+              e = this.color,
+              k = d && d.color,
+              f = a && a.color;
+            d = M(g.lineWidth, b.lineWidth);
+            var p = a && a.zone && a.zone.color;
+            a = 1;
+            e = k || p || f || e;
+            k = g.fillColor || b.fillColor || e;
+            e = g.lineColor || b.lineColor || e;
+            c = c || "normal";
+            b = b.states[c];
+            c = (g.states && g.states[c]) || {};
+            d = M(
+              c.lineWidth,
+              b.lineWidth,
+              d + M(c.lineWidthPlus, b.lineWidthPlus, 0)
+            );
+            k = c.fillColor || b.fillColor || k;
+            e = c.lineColor || b.lineColor || e;
+            a = M(c.opacity, b.opacity, a);
+            return { stroke: e, "stroke-width": d, fill: k, opacity: a };
+          },
+          destroy: function (a) {
+            var b = this,
+              c = b.chart,
+              d = /AppleWebKit\/533/.test(u.navigator.userAgent),
+              e,
+              f,
+              p = b.data || [],
+              h,
+              l;
+            g(b, "destroy");
+            this.removeEvents(a);
+            (b.axisTypes || []).forEach(function (a) {
+              (l = b[a]) &&
+                l.series &&
+                (J(l.series, b), (l.isDirty = l.forceRedraw = !0));
+            });
+            b.legendItem && b.chart.legend.destroyItem(b);
+            for (f = p.length; f--; ) (h = p[f]) && h.destroy && h.destroy();
+            b.points = null;
+            C.clearTimeout(b.animationTimeout);
+            G(b, function (a, b) {
+              a instanceof K &&
+                !a.survive &&
+                ((e = d && "group" === b ? "hide" : "destroy"), a[e]());
+            });
+            c.hoverSeries === b && (c.hoverSeries = null);
+            J(c.series, b);
+            c.orderSeries();
+            G(b, function (c, d) {
+              (a && "hcEvents" === d) || delete b[d];
+            });
+          },
+          getGraphPath: function (a, c, d) {
+            var b = this,
+              g = b.options,
+              e = g.step,
+              k,
+              f = [],
+              p = [],
+              h;
+            a = a || b.points;
+            (k = a.reversed) && a.reverse();
+            (e = { right: 1, center: 2 }[e] || (e && 3)) && k && (e = 4 - e);
+            a = this.getValidPoints(a, !1, !(g.connectNulls && !c && !d));
+            a.forEach(function (k, q) {
+              var t = k.plotX,
+                n = k.plotY,
+                u = a[q - 1];
+              (k.leftCliff || (u && u.rightCliff)) && !d && (h = !0);
+              k.isNull && !l(c) && 0 < q
+                ? (h = !g.connectNulls)
+                : k.isNull && !c
+                ? (h = !0)
+                : (0 === q || h
+                    ? (q = [["M", k.plotX, k.plotY]])
+                    : b.getPointSpline
+                    ? (q = [b.getPointSpline(a, k, q)])
+                    : e
+                    ? ((q =
+                        1 === e
+                          ? [["L", u.plotX, n]]
+                          : 2 === e
+                          ? [
+                              ["L", (u.plotX + t) / 2, u.plotY],
+                              ["L", (u.plotX + t) / 2, n],
+                            ]
+                          : [["L", t, u.plotY]]),
+                      q.push(["L", t, n]))
+                    : (q = [["L", t, n]]),
+                  p.push(k.x),
+                  e && (p.push(k.x), 2 === e && p.push(k.x)),
+                  f.push.apply(f, q),
+                  (h = !1));
+            });
+            f.xMap = p;
+            return (b.graphPath = f);
+          },
+          drawGraph: function () {
+            var a = this,
+              c = this.options,
+              d = (this.gappedPath || this.getGraphPath).call(this),
+              g = this.chart.styledMode,
+              e = [["graph", "highcharts-graph"]];
+            g || e[0].push(c.lineColor || this.color || "#cccccc", c.dashStyle);
+            e = a.getZonesGraphs(e);
+            e.forEach(function (b, e) {
+              var k = b[0],
+                f = a[k],
+                p = f ? "animate" : "attr";
+              f
+                ? ((f.endX = a.preventGraphAnimation ? null : d.xMap),
+                  f.animate({ d: d }))
+                : d.length &&
+                  (a[k] = f =
+                    a.chart.renderer
+                      .path(d)
+                      .addClass(b[1])
+                      .attr({ zIndex: 1 })
+                      .add(a.group));
+              f &&
+                !g &&
+                ((k = {
+                  stroke: b[2],
+                  "stroke-width": c.lineWidth,
+                  fill: (a.fillGraph && a.color) || "none",
+                }),
+                b[3]
+                  ? (k.dashstyle = b[3])
+                  : "square" !== c.linecap &&
+                    (k["stroke-linecap"] = k["stroke-linejoin"] = "round"),
+                f[p](k).shadow(2 > e && c.shadow));
+              f && ((f.startX = d.xMap), (f.isArea = d.isArea));
+            });
+          },
+          getZonesGraphs: function (a) {
+            this.zones.forEach(function (b, c) {
+              c = [
+                "zone-graph-" + c,
+                "highcharts-graph highcharts-zone-graph-" +
+                  c +
+                  " " +
+                  (b.className || ""),
+              ];
+              this.chart.styledMode ||
+                c.push(
+                  b.color || this.color,
+                  b.dashStyle || this.options.dashStyle
+                );
+              a.push(c);
+            }, this);
+            return a;
+          },
+          applyZones: function () {
+            var a = this,
+              c = this.chart,
+              d = c.renderer,
+              g = this.zones,
+              e,
+              f,
+              p = this.clips || [],
+              h,
+              l = this.graph,
+              q = this.area,
+              n = Math.max(c.chartWidth, c.chartHeight),
+              u = this[(this.zoneAxis || "y") + "Axis"],
+              r = c.inverted,
+              m,
+              w,
+              v,
+              A = !1,
+              B,
+              E;
+            if (g.length && (l || q) && u && "undefined" !== typeof u.min) {
+              var O = u.reversed;
+              var G = u.horiz;
+              l && !this.showLine && l.hide();
+              q && q.hide();
+              var x = u.getExtremes();
+              g.forEach(function (b, g) {
+                e = O ? (G ? c.plotWidth : 0) : G ? 0 : u.toPixels(x.min) || 0;
+                e = D(M(f, e), 0, n);
+                f = D(Math.round(u.toPixels(M(b.value, x.max), !0) || 0), 0, n);
+                A && (e = f = u.toPixels(x.max));
+                m = Math.abs(e - f);
+                w = Math.min(e, f);
+                v = Math.max(e, f);
+                u.isXAxis
+                  ? ((h = { x: r ? v : w, y: 0, width: m, height: n }),
+                    G || (h.x = c.plotHeight - h.x))
+                  : ((h = { x: 0, y: r ? v : w, width: n, height: m }),
+                    G && (h.y = c.plotWidth - h.y));
+                r &&
+                  d.isVML &&
+                  (h = u.isXAxis
+                    ? {
+                        x: 0,
+                        y: O ? w : v,
+                        height: h.width,
+                        width: c.chartWidth,
+                      }
+                    : {
+                        x: h.y - c.plotLeft - c.spacingBox.x,
+                        y: 0,
+                        width: h.height,
+                        height: c.chartHeight,
+                      });
+                p[g] ? p[g].animate(h) : (p[g] = d.clipRect(h));
+                B = a["zone-area-" + g];
+                E = a["zone-graph-" + g];
+                l && E && E.clip(p[g]);
+                q && B && B.clip(p[g]);
+                A = b.value > x.max;
+                a.resetZones && 0 === f && (f = void 0);
+              });
+              this.clips = p;
+            } else a.visible && (l && l.show(!0), q && q.show(!0));
+          },
+          invertGroups: function (a) {
+            function b() {
+              ["group", "markerGroup"].forEach(function (b) {
+                c[b] &&
+                  (d.renderer.isVML &&
+                    c[b].attr({ width: c.yAxis.len, height: c.xAxis.len }),
+                  (c[b].width = c.yAxis.len),
+                  (c[b].height = c.xAxis.len),
+                  c[b].invert(c.isRadialSeries ? !1 : a));
+              });
+            }
+            var c = this,
+              d = c.chart;
+            c.xAxis &&
+              (c.eventsToUnbind.push(I(d, "resize", b)),
+              b(),
+              (c.invertGroups = b));
+          },
+          plotGroup: function (a, c, d, g, e) {
+            var b = this[a],
+              k = !b;
+            d = { visibility: d, zIndex: g || 0.1 };
+            "undefined" === typeof this.opacity ||
+              this.chart.styledMode ||
+              "inactive" === this.state ||
+              (d.opacity = this.opacity);
+            k && (this[a] = b = this.chart.renderer.g().add(e));
+            b.addClass(
+              "highcharts-" +
+                c +
+                " highcharts-series-" +
+                this.index +
+                " highcharts-" +
+                this.type +
+                "-series " +
+                (l(this.colorIndex)
+                  ? "highcharts-color-" + this.colorIndex + " "
+                  : "") +
+                (this.options.className || "") +
+                (b.hasClass("highcharts-tracker") ? " highcharts-tracker" : ""),
+              !0
+            );
+            b.attr(d)[k ? "attr" : "animate"](this.getPlotBox());
+            return b;
+          },
+          getPlotBox: function () {
+            var a = this.chart,
+              c = this.xAxis,
+              d = this.yAxis;
+            a.inverted && ((c = d), (d = this.xAxis));
+            return {
+              translateX: c ? c.left : a.plotLeft,
+              translateY: d ? d.top : a.plotTop,
+              scaleX: 1,
+              scaleY: 1,
+            };
+          },
+          removeEvents: function (a) {
+            a
+              ? this.eventsToUnbind.length &&
+                (this.eventsToUnbind.forEach(function (a) {
+                  a();
+                }),
+                (this.eventsToUnbind.length = 0))
+              : T(this);
+          },
+          render: function () {
+            var a = this,
+              c = a.chart,
+              d = a.options,
+              e = y(d.animation),
+              f = !a.finishedAnimating && c.renderer.isSVG && e.duration,
+              p = a.visible ? "inherit" : "hidden",
+              h = d.zIndex,
+              l = a.hasRendered,
+              q = c.seriesGroup,
+              n = c.inverted;
+            g(this, "render");
+            var u = a.plotGroup("group", "series", p, h, q);
+            a.markerGroup = a.plotGroup("markerGroup", "markers", p, h, q);
+            f && a.animate && a.animate(!0);
+            u.inverted = a.isCartesian || a.invertable ? n : !1;
+            a.drawGraph && (a.drawGraph(), a.applyZones());
+            a.visible && a.drawPoints();
+            a.drawDataLabels && a.drawDataLabels();
+            a.redrawPoints && a.redrawPoints();
+            a.drawTracker &&
+              !1 !== a.options.enableMouseTracking &&
+              a.drawTracker();
+            a.invertGroups(n);
+            !1 === d.clip || a.sharedClipKey || l || u.clip(c.clipRect);
+            f && a.animate && a.animate();
+            l ||
+              (f && e.defer && (f += e.defer),
+              (a.animationTimeout = O(function () {
+                a.afterAnimate();
+              }, f || 0)));
+            a.isDirty = !1;
+            a.hasRendered = !0;
+            g(a, "afterRender");
+          },
+          redraw: function () {
+            var a = this.chart,
+              c = this.isDirty || this.isDirtyData,
+              d = this.group,
+              g = this.xAxis,
+              e = this.yAxis;
+            d &&
+              (a.inverted &&
+                d.attr({ width: a.plotWidth, height: a.plotHeight }),
+              d.animate({
+                translateX: M(g && g.left, a.plotLeft),
+                translateY: M(e && e.top, a.plotTop),
+              }));
+            this.translate();
+            this.render();
+            c && delete this.kdTree;
+          },
+          kdAxisArray: ["clientX", "plotY"],
+          searchPoint: function (a, c) {
+            var b = this.xAxis,
+              d = this.yAxis,
+              g = this.chart.inverted;
+            return this.searchKDTree(
+              {
+                clientX: g ? b.len - a.chartY + b.pos : a.chartX - b.pos,
+                plotY: g ? d.len - a.chartX + d.pos : a.chartY - d.pos,
+              },
+              c,
+              a
+            );
+          },
+          buildKDTree: function (a) {
+            function b(a, d, g) {
+              var e;
+              if ((e = a && a.length)) {
+                var f = c.kdAxisArray[d % g];
+                a.sort(function (a, b) {
+                  return a[f] - b[f];
+                });
+                e = Math.floor(e / 2);
+                return {
+                  point: a[e],
+                  left: b(a.slice(0, e), d + 1, g),
+                  right: b(a.slice(e + 1), d + 1, g),
+                };
+              }
+            }
+            this.buildingKdTree = !0;
+            var c = this,
+              d = -1 < c.options.findNearestPointBy.indexOf("y") ? 2 : 1;
+            delete c.kdTree;
+            O(
+              function () {
+                c.kdTree = b(c.getValidPoints(null, !c.directTouch), d, d);
+                c.buildingKdTree = !1;
+              },
+              c.options.kdNow || (a && "touchstart" === a.type) ? 0 : 1
+            );
+          },
+          searchKDTree: function (a, c, d) {
+            function b(a, c, d, p) {
+              var h = c.point,
+                q = g.kdAxisArray[d % p],
+                n = h;
+              var u = l(a[e]) && l(h[e]) ? Math.pow(a[e] - h[e], 2) : null;
+              var t = l(a[f]) && l(h[f]) ? Math.pow(a[f] - h[f], 2) : null;
+              t = (u || 0) + (t || 0);
+              h.dist = l(t) ? Math.sqrt(t) : Number.MAX_VALUE;
+              h.distX = l(u) ? Math.sqrt(u) : Number.MAX_VALUE;
+              q = a[q] - h[q];
+              t = 0 > q ? "left" : "right";
+              u = 0 > q ? "right" : "left";
+              c[t] && ((t = b(a, c[t], d + 1, p)), (n = t[k] < n[k] ? t : h));
+              c[u] &&
+                Math.sqrt(q * q) < n[k] &&
+                ((a = b(a, c[u], d + 1, p)), (n = a[k] < n[k] ? a : n));
+              return n;
+            }
+            var g = this,
+              e = this.kdAxisArray[0],
+              f = this.kdAxisArray[1],
+              k = c ? "distX" : "dist";
+            c = -1 < g.options.findNearestPointBy.indexOf("y") ? 2 : 1;
+            this.kdTree || this.buildingKdTree || this.buildKDTree(d);
+            if (this.kdTree) return b(a, this.kdTree, c, c);
+          },
+          pointPlacementToXValue: function () {
+            var a = this.options,
+              c = a.pointRange,
+              d = this.xAxis;
+            a = a.pointPlacement;
+            "between" === a && (a = d.reversed ? -0.5 : 0.5);
+            return p(a) ? a * M(c, d.pointRange) : 0;
+          },
+          isPointInside: function (a) {
+            return (
+              "undefined" !== typeof a.plotY &&
+              "undefined" !== typeof a.plotX &&
+              0 <= a.plotY &&
+              a.plotY <= this.yAxis.len &&
+              0 <= a.plotX &&
+              a.plotX <= this.xAxis.len
+            );
+          },
+        }
+      );
+      ("");
+      return f;
+    }
+  );
+  N(
+    m,
+    "Series/LineSeries.js",
+    [m["Core/Series/CartesianSeries.js"], m["Core/Globals.js"]],
+    function (f, h) {
+      h.Series = f;
+      return h.Series;
+    }
+  );
+  N(
+    m,
+    "Extensions/Stacking.js",
+    [
+      m["Core/Axis/Axis.js"],
+      m["Core/Chart/Chart.js"],
+      m["Core/Globals.js"],
+      m["Core/Axis/StackingAxis.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F) {
+      var L = F.correctFloat,
+        K = F.defined,
+        C = F.destroyObjectProperties,
+        y = F.format,
+        e = F.isNumber,
+        I = F.pick;
+      ("");
+      var v = m.Series,
+        x = (function () {
+          function f(e, f, h, m, r) {
+            var d = e.chart.inverted;
+            this.axis = e;
+            this.isNegative = h;
+            this.options = f = f || {};
+            this.x = m;
+            this.total = null;
+            this.points = {};
+            this.hasValidPoints = !1;
+            this.stack = r;
+            this.rightCliff = this.leftCliff = 0;
+            this.alignOptions = {
+              align: f.align || (d ? (h ? "left" : "right") : "center"),
+              verticalAlign:
+                f.verticalAlign || (d ? "middle" : h ? "bottom" : "top"),
+              y: f.y,
+              x: f.x,
+            };
+            this.textAlign =
+              f.textAlign || (d ? (h ? "right" : "left") : "center");
+          }
+          f.prototype.destroy = function () {
+            C(this, this.axis);
+          };
+          f.prototype.render = function (e) {
+            var f = this.axis.chart,
+              h = this.options,
+              n = h.format;
+            n = n ? y(n, this, f) : h.formatter.call(this);
+            this.label
+              ? this.label.attr({ text: n, visibility: "hidden" })
+              : ((this.label = f.renderer.label(
+                  n,
+                  null,
+                  null,
+                  h.shape,
+                  null,
+                  null,
+                  h.useHTML,
+                  !1,
+                  "stack-labels"
+                )),
+                (n = {
+                  r: h.borderRadius || 0,
+                  text: n,
+                  rotation: h.rotation,
+                  padding: I(h.padding, 5),
+                  visibility: "hidden",
+                }),
+                f.styledMode ||
+                  ((n.fill = h.backgroundColor),
+                  (n.stroke = h.borderColor),
+                  (n["stroke-width"] = h.borderWidth),
+                  this.label.css(h.style)),
+                this.label.attr(n),
+                this.label.added || this.label.add(e));
+            this.label.labelrank = f.plotHeight;
+          };
+          f.prototype.setOffset = function (f, h, m, w, r) {
+            var d = this.axis,
+              g = d.chart;
+            w = d.translate(
+              d.stacking.usePercentage ? 100 : w ? w : this.total,
+              0,
+              0,
+              0,
+              1
+            );
+            m = d.translate(m ? m : 0);
+            m = K(w) && Math.abs(w - m);
+            f = I(r, g.xAxis[0].translate(this.x)) + f;
+            d = K(w) && this.getStackBox(g, this, f, w, h, m, d);
+            h = this.label;
+            m = this.isNegative;
+            f = "justify" === I(this.options.overflow, "justify");
+            var c = this.textAlign;
+            h &&
+              d &&
+              ((r = h.getBBox()),
+              (w = h.padding),
+              (c =
+                "left" === c
+                  ? g.inverted
+                    ? -w
+                    : w
+                  : "right" === c
+                  ? r.width
+                  : g.inverted && "center" === c
+                  ? r.width / 2
+                  : g.inverted
+                  ? m
+                    ? r.width + w
+                    : -w
+                  : r.width / 2),
+              (m = g.inverted ? r.height / 2 : m ? -w : r.height),
+              (this.alignOptions.x = I(this.options.x, 0)),
+              (this.alignOptions.y = I(this.options.y, 0)),
+              (d.x -= c),
+              (d.y -= m),
+              h.align(this.alignOptions, null, d),
+              g.isInsidePlot(
+                h.alignAttr.x + c - this.alignOptions.x,
+                h.alignAttr.y + m - this.alignOptions.y
+              )
+                ? h.show()
+                : ((h.alignAttr.y = -9999), (f = !1)),
+              f &&
+                v.prototype.justifyDataLabel.call(
+                  this.axis,
+                  h,
+                  this.alignOptions,
+                  h.alignAttr,
+                  r,
+                  d
+                ),
+              h.attr({ x: h.alignAttr.x, y: h.alignAttr.y }),
+              I(!f && this.options.crop, !0) &&
+                ((g =
+                  e(h.x) &&
+                  e(h.y) &&
+                  g.isInsidePlot(h.x - w + h.width, h.y) &&
+                  g.isInsidePlot(h.x + w, h.y)) ||
+                  h.hide()));
+          };
+          f.prototype.getStackBox = function (e, f, h, m, r, d, g) {
+            var c = f.axis.reversed,
+              a = e.inverted,
+              q = g.height + g.pos - (a ? e.plotLeft : e.plotTop);
+            f = (f.isNegative && !c) || (!f.isNegative && c);
+            return {
+              x: a
+                ? f
+                  ? m - g.right
+                  : m - d + g.pos - e.plotLeft
+                : h + e.xAxis[0].transB - e.plotLeft,
+              y: a ? g.height - h - r : f ? q - m - d : q - m,
+              width: a ? d : r,
+              height: a ? r : d,
+            };
+          };
+          return f;
+        })();
+      h.prototype.getStacks = function () {
+        var e = this,
+          f = e.inverted;
+        e.yAxis.forEach(function (e) {
+          e.stacking &&
+            e.stacking.stacks &&
+            e.hasVisibleSeries &&
+            (e.stacking.oldStacks = e.stacking.stacks);
+        });
+        e.series.forEach(function (h) {
+          var l = (h.xAxis && h.xAxis.options) || {};
+          !h.options.stacking ||
+            (!0 !== h.visible && !1 !== e.options.chart.ignoreHiddenSeries) ||
+            (h.stackKey = [
+              h.type,
+              I(h.options.stack, ""),
+              f ? l.top : l.left,
+              f ? l.height : l.width,
+            ].join());
+        });
+      };
+      z.compose(f);
+      v.prototype.setGroupedPoints = function () {
+        this.options.centerInCategory &&
+          (this.is("column") || this.is("columnrange")) &&
+          !this.options.stacking &&
+          1 < this.chart.series.length &&
+          v.prototype.setStackedPoints.call(this, "group");
+      };
+      v.prototype.setStackedPoints = function (e) {
+        var f = e || this.options.stacking;
+        if (
+          f &&
+          (!0 === this.visible ||
+            !1 === this.chart.options.chart.ignoreHiddenSeries)
+        ) {
+          var h = this.processedXData,
+            m = this.processedYData,
+            w = [],
+            r = m.length,
+            d = this.options,
+            g = d.threshold,
+            c = I(d.startFromThreshold && g, 0);
+          d = d.stack;
+          e = e ? this.type + "," + f : this.stackKey;
+          var a = "-" + e,
+            q = this.negStacks,
+            p = this.yAxis,
+            v = p.stacking.stacks,
+            A = p.stacking.oldStacks,
+            G,
+            D;
+          p.stacking.stacksTouched += 1;
+          for (D = 0; D < r; D++) {
+            var y = h[D];
+            var z = m[D];
+            var O = this.getStackIndicator(O, y, this.index);
+            var E = O.key;
+            var u = (G = q && z < (c ? 0 : g)) ? a : e;
+            v[u] || (v[u] = {});
+            v[u][y] ||
+              (A[u] && A[u][y]
+                ? ((v[u][y] = A[u][y]), (v[u][y].total = null))
+                : (v[u][y] = new x(p, p.options.stackLabels, G, y, d)));
+            u = v[u][y];
+            null !== z
+              ? ((u.points[E] = u.points[this.index] = [I(u.cumulative, c)]),
+                K(u.cumulative) || (u.base = E),
+                (u.touched = p.stacking.stacksTouched),
+                0 < O.index &&
+                  !1 === this.singleStacks &&
+                  (u.points[E][0] = u.points[this.index + "," + y + ",0"][0]))
+              : (u.points[E] = u.points[this.index] = null);
+            "percent" === f
+              ? ((G = G ? e : a),
+                q && v[G] && v[G][y]
+                  ? ((G = v[G][y]),
+                    (u.total = G.total =
+                      Math.max(G.total, u.total) + Math.abs(z) || 0))
+                  : (u.total = L(u.total + (Math.abs(z) || 0))))
+              : "group" === f
+              ? null !== z && (u.total = (u.total || 0) + 1)
+              : (u.total = L(u.total + (z || 0)));
+            u.cumulative =
+              "group" === f
+                ? (u.total || 1) - 1
+                : I(u.cumulative, c) + (z || 0);
+            null !== z &&
+              (u.points[E].push(u.cumulative),
+              (w[D] = u.cumulative),
+              (u.hasValidPoints = !0));
+          }
+          "percent" === f && (p.stacking.usePercentage = !0);
+          "group" !== f && (this.stackedYData = w);
+          p.stacking.oldStacks = {};
+        }
+      };
+      v.prototype.modifyStacks = function () {
+        var e = this,
+          f = e.stackKey,
+          h = e.yAxis.stacking.stacks,
+          m = e.processedXData,
+          w,
+          r = e.options.stacking;
+        e[r + "Stacker"] &&
+          [f, "-" + f].forEach(function (d) {
+            for (var g = m.length, c, a; g--; )
+              if (
+                ((c = m[g]),
+                (w = e.getStackIndicator(w, c, e.index, d)),
+                (a = (c = h[d] && h[d][c]) && c.points[w.key]))
+              )
+                e[r + "Stacker"](a, c, g);
+          });
+      };
+      v.prototype.percentStacker = function (e, f, h) {
+        f = f.total ? 100 / f.total : 0;
+        e[0] = L(e[0] * f);
+        e[1] = L(e[1] * f);
+        this.stackedYData[h] = e[1];
+      };
+      v.prototype.getStackIndicator = function (e, f, h, m) {
+        !K(e) || e.x !== f || (m && e.key !== m)
+          ? (e = { x: f, index: 0, key: m })
+          : e.index++;
+        e.key = [h, f, e.index].join();
+        return e;
+      };
+      m.StackItem = x;
+      return m.StackItem;
+    }
+  );
+  N(
+    m,
+    "Core/Dynamics.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Axis/Axis.js"],
+      m["Core/Series/Series.js"],
+      m["Core/Chart/Chart.js"],
+      m["Core/Globals.js"],
+      m["Series/LineSeries.js"],
+      m["Core/Options.js"],
+      m["Core/Series/Point.js"],
+      m["Core/Time.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F, L, K, C, y, e) {
+      var I = f.animate,
+        v = f.setAnimation,
+        x = m.seriesTypes,
+        D = K.time,
+        n = e.addEvent,
+        l = e.createElement,
+        J = e.css,
+        w = e.defined,
+        r = e.erase,
+        d = e.error,
+        g = e.extend,
+        c = e.fireEvent,
+        a = e.isArray,
+        q = e.isNumber,
+        p = e.isObject,
+        B = e.isString,
+        A = e.merge,
+        G = e.objectEach,
+        M = e.pick,
+        T = e.relativeLength,
+        Q = e.splat;
+      F.cleanRecursively = function (a, c) {
+        var d = {};
+        G(a, function (b, g) {
+          if (p(a[g], !0) && !a.nodeType && c[g])
+            (b = F.cleanRecursively(a[g], c[g])),
+              Object.keys(b).length && (d[g] = b);
+          else if (p(a[g]) || a[g] !== c[g]) d[g] = a[g];
+        });
+        return d;
+      };
+      g(z.prototype, {
+        addSeries: function (a, d, g) {
+          var b,
+            e = this;
+          a &&
+            ((d = M(d, !0)),
+            c(e, "addSeries", { options: a }, function () {
+              b = e.initSeries(a);
+              e.isDirtyLegend = !0;
+              e.linkSeries();
+              b.enabledDataSorting && b.setData(a.data, !1);
+              c(e, "afterAddSeries", { series: b });
+              d && e.redraw(g);
+            }));
+          return b;
+        },
+        addAxis: function (a, c, d, b) {
+          return this.createAxis(c ? "xAxis" : "yAxis", {
+            axis: a,
+            redraw: d,
+            animation: b,
+          });
+        },
+        addColorAxis: function (a, c, d) {
+          return this.createAxis("colorAxis", {
+            axis: a,
+            redraw: c,
+            animation: d,
+          });
+        },
+        createAxis: function (a, c) {
+          var d = this.options,
+            b = "colorAxis" === a,
+            g = c.redraw,
+            e = c.animation;
+          c = A(c.axis, { index: this[a].length, isX: "xAxis" === a });
+          var f = b ? new F.ColorAxis(this, c) : new h(this, c);
+          d[a] = Q(d[a] || {});
+          d[a].push(c);
+          b &&
+            ((this.isDirtyLegend = !0),
+            this.axes.forEach(function (a) {
+              a.series = [];
+            }),
+            this.series.forEach(function (a) {
+              a.bindAxes();
+              a.isDirtyData = !0;
+            }));
+          M(g, !0) && this.redraw(e);
+          return f;
+        },
+        showLoading: function (a) {
+          var c = this,
+            d = c.options,
+            b = c.loadingDiv,
+            e = d.loading,
+            f = function () {
+              b &&
+                J(b, {
+                  left: c.plotLeft + "px",
+                  top: c.plotTop + "px",
+                  width: c.plotWidth + "px",
+                  height: c.plotHeight + "px",
+                });
+            };
+          b ||
+            ((c.loadingDiv = b =
+              l(
+                "div",
+                { className: "highcharts-loading highcharts-loading-hidden" },
+                null,
+                c.container
+              )),
+            (c.loadingSpan = l(
+              "span",
+              { className: "highcharts-loading-inner" },
+              null,
+              b
+            )),
+            n(c, "redraw", f));
+          b.className = "highcharts-loading";
+          c.loadingSpan.innerHTML = M(a, d.lang.loading, "");
+          c.styledMode ||
+            (J(b, g(e.style, { zIndex: 10 })),
+            J(c.loadingSpan, e.labelStyle),
+            c.loadingShown ||
+              (J(b, { opacity: 0, display: "" }),
+              I(
+                b,
+                { opacity: e.style.opacity || 0.5 },
+                { duration: e.showDuration || 0 }
+              )));
+          c.loadingShown = !0;
+          f();
+        },
+        hideLoading: function () {
+          var a = this.options,
+            c = this.loadingDiv;
+          c &&
+            ((c.className = "highcharts-loading highcharts-loading-hidden"),
+            this.styledMode ||
+              I(
+                c,
+                { opacity: 0 },
+                {
+                  duration: a.loading.hideDuration || 100,
+                  complete: function () {
+                    J(c, { display: "none" });
+                  },
+                }
+              ));
+          this.loadingShown = !1;
+        },
+        propsRequireDirtyBox:
+          "backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(
+            " "
+          ),
+        propsRequireReflow:
+          "margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft".split(
+            " "
+          ),
+        propsRequireUpdateSeries:
+          "chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip".split(
+            " "
+          ),
+        collectionsWithUpdate: ["xAxis", "yAxis", "zAxis", "series"],
+        update: function (a, d, g, b) {
+          var e = this,
+            f = {
+              credits: "addCredits",
+              title: "setTitle",
+              subtitle: "setSubtitle",
+              caption: "setCaption",
+            },
+            p,
+            h,
+            l,
+            n = a.isResponsiveOptions,
+            u = [];
+          c(e, "update", { options: a });
+          n || e.setResponsive(!1, !0);
+          a = F.cleanRecursively(a, e.options);
+          A(!0, e.userOptions, a);
+          if ((p = a.chart)) {
+            A(!0, e.options.chart, p);
+            "className" in p && e.setClassName(p.className);
+            "reflow" in p && e.setReflow(p.reflow);
+            if ("inverted" in p || "polar" in p || "type" in p) {
+              e.propFromSeries();
+              var m = !0;
+            }
+            "alignTicks" in p && (m = !0);
+            G(p, function (a, b) {
+              -1 !== e.propsRequireUpdateSeries.indexOf("chart." + b) &&
+                (h = !0);
+              -1 !== e.propsRequireDirtyBox.indexOf(b) && (e.isDirtyBox = !0);
+              -1 !== e.propsRequireReflow.indexOf(b) &&
+                (n ? (e.isDirtyBox = !0) : (l = !0));
+            });
+            !e.styledMode && "style" in p && e.renderer.setStyle(p.style);
+          }
+          !e.styledMode && a.colors && (this.options.colors = a.colors);
+          a.time &&
+            (this.time === D && (this.time = new y(a.time)),
+            A(!0, e.options.time, a.time));
+          G(a, function (b, c) {
+            if (e[c] && "function" === typeof e[c].update) e[c].update(b, !1);
+            else if ("function" === typeof e[f[c]]) e[f[c]](b);
+            else
+              "color" !== c &&
+                -1 === e.collectionsWithUpdate.indexOf(c) &&
+                A(!0, e.options[c], a[c]);
+            "chart" !== c &&
+              -1 !== e.propsRequireUpdateSeries.indexOf(c) &&
+              (h = !0);
+          });
+          this.collectionsWithUpdate.forEach(function (b) {
+            if (a[b]) {
+              if ("series" === b) {
+                var c = [];
+                e[b].forEach(function (a, b) {
+                  a.options.isInternal || c.push(M(a.options.index, b));
+                });
+              }
+              Q(a[b]).forEach(function (a, d) {
+                var f = w(a.id),
+                  k;
+                f && (k = e.get(a.id));
+                k ||
+                  ((k = e[b][c ? c[d] : d]) &&
+                    f &&
+                    w(k.options.id) &&
+                    (k = void 0));
+                k && k.coll === b && (k.update(a, !1), g && (k.touched = !0));
+                !k &&
+                  g &&
+                  e.collectionsWithInit[b] &&
+                  (e.collectionsWithInit[b][0].apply(
+                    e,
+                    [a].concat(e.collectionsWithInit[b][1] || []).concat([!1])
+                  ).touched = !0);
+              });
+              g &&
+                e[b].forEach(function (a) {
+                  a.touched || a.options.isInternal
+                    ? delete a.touched
+                    : u.push(a);
+                });
+            }
+          });
+          u.forEach(function (a) {
+            a.remove && a.remove(!1);
+          });
+          m &&
+            e.axes.forEach(function (a) {
+              a.update({}, !1);
+            });
+          h &&
+            e.getSeriesOrderByLinks().forEach(function (a) {
+              a.chart && a.update({}, !1);
+            }, this);
+          m = p && p.width;
+          p = p && p.height;
+          B(p) && (p = T(p, m || e.chartWidth));
+          l || (q(m) && m !== e.chartWidth) || (q(p) && p !== e.chartHeight)
+            ? e.setSize(m, p, b)
+            : M(d, !0) && e.redraw(b);
+          c(e, "afterUpdate", { options: a, redraw: d, animation: b });
+        },
+        setSubtitle: function (a, c) {
+          this.applyDescription("subtitle", a);
+          this.layOutTitles(c);
+        },
+        setCaption: function (a, c) {
+          this.applyDescription("caption", a);
+          this.layOutTitles(c);
+        },
+      });
+      z.prototype.collectionsWithInit = {
+        xAxis: [z.prototype.addAxis, [!0]],
+        yAxis: [z.prototype.addAxis, [!1]],
+        series: [z.prototype.addSeries],
+      };
+      g(C.prototype, {
+        update: function (a, c, d, b) {
+          function g() {
+            e.applyOptions(a);
+            var b = h && e.hasDummyGraphic;
+            b = null === e.y ? !b : b;
+            h && b && ((e.graphic = h.destroy()), delete e.hasDummyGraphic);
+            p(a, !0) &&
+              (h &&
+                h.element &&
+                a &&
+                a.marker &&
+                "undefined" !== typeof a.marker.symbol &&
+                (e.graphic = h.destroy()),
+              a &&
+                a.dataLabels &&
+                e.dataLabel &&
+                (e.dataLabel = e.dataLabel.destroy()),
+              e.connector && (e.connector = e.connector.destroy()));
+            q = e.index;
+            f.updateParallelArrays(e, q);
+            n.data[q] =
+              p(n.data[q], !0) || p(a, !0) ? e.options : M(a, n.data[q]);
+            f.isDirty = f.isDirtyData = !0;
+            !f.fixedBox && f.hasCartesianSeries && (l.isDirtyBox = !0);
+            "point" === n.legendType && (l.isDirtyLegend = !0);
+            c && l.redraw(d);
+          }
+          var e = this,
+            f = e.series,
+            h = e.graphic,
+            q,
+            l = f.chart,
+            n = f.options;
+          c = M(c, !0);
+          !1 === b ? g() : e.firePointEvent("update", { options: a }, g);
+        },
+        remove: function (a, c) {
+          this.series.removePoint(this.series.data.indexOf(this), a, c);
+        },
+      });
+      g(L.prototype, {
+        addPoint: function (a, d, g, b, e) {
+          var f = this.options,
+            k = this.data,
+            p = this.chart,
+            h = this.xAxis;
+          h = h && h.hasNames && h.names;
+          var q = f.data,
+            l = this.xData,
+            n;
+          d = M(d, !0);
+          var u = { series: this };
+          this.pointClass.prototype.applyOptions.apply(u, [a]);
+          var m = u.x;
+          var r = l.length;
+          if (this.requireSorting && m < l[r - 1])
+            for (n = !0; r && l[r - 1] > m; ) r--;
+          this.updateParallelArrays(u, "splice", r, 0, 0);
+          this.updateParallelArrays(u, r);
+          h && u.name && (h[m] = u.name);
+          q.splice(r, 0, a);
+          n && (this.data.splice(r, 0, null), this.processData());
+          "point" === f.legendType && this.generatePoints();
+          g &&
+            (k[0] && k[0].remove
+              ? k[0].remove(!1)
+              : (k.shift(), this.updateParallelArrays(u, "shift"), q.shift()));
+          !1 !== e && c(this, "addPoint", { point: u });
+          this.isDirtyData = this.isDirty = !0;
+          d && p.redraw(b);
+        },
+        removePoint: function (a, c, d) {
+          var b = this,
+            g = b.data,
+            e = g[a],
+            f = b.points,
+            p = b.chart,
+            h = function () {
+              f && f.length === g.length && f.splice(a, 1);
+              g.splice(a, 1);
+              b.options.data.splice(a, 1);
+              b.updateParallelArrays(e || { series: b }, "splice", a, 1);
+              e && e.destroy();
+              b.isDirty = !0;
+              b.isDirtyData = !0;
+              c && p.redraw();
+            };
+          v(d, p);
+          c = M(c, !0);
+          e ? e.firePointEvent("remove", null, h) : h();
+        },
+        remove: function (a, d, g, b) {
+          function e() {
+            f.destroy(b);
+            f.remove = null;
+            p.isDirtyLegend = p.isDirtyBox = !0;
+            p.linkSeries();
+            M(a, !0) && p.redraw(d);
+          }
+          var f = this,
+            p = f.chart;
+          !1 !== g ? c(f, "remove", null, e) : e();
+        },
+        update: function (a, e) {
+          a = F.cleanRecursively(a, this.userOptions);
+          c(this, "update", { options: a });
+          var f = this,
+            b = f.chart,
+            k = f.userOptions,
+            p = f.initialType || f.type,
+            h = b.options.plotOptions,
+            q = a.type || k.type || b.options.chart.type,
+            l = !(
+              this.hasDerivedData ||
+              (q && q !== this.type) ||
+              "undefined" !== typeof a.pointStart ||
+              "undefined" !== typeof a.pointInterval ||
+              f.hasOptionChanged("dataGrouping") ||
+              f.hasOptionChanged("pointStart") ||
+              f.hasOptionChanged("pointInterval") ||
+              f.hasOptionChanged("pointIntervalUnit") ||
+              f.hasOptionChanged("keys")
+            ),
+            n = x[p].prototype,
+            m,
+            r = ["eventOptions", "navigatorSeries", "baseSeries"],
+            w = f.finishedAnimating && { animation: !1 },
+            v = {};
+          l &&
+            (r.push(
+              "data",
+              "isDirtyData",
+              "points",
+              "processedXData",
+              "processedYData",
+              "xIncrement",
+              "cropped",
+              "_hasPointMarkers",
+              "_hasPointLabels",
+              "mapMap",
+              "mapData",
+              "minY",
+              "maxY",
+              "minX",
+              "maxX"
+            ),
+            !1 !== a.visible && r.push("area", "graph"),
+            f.parallelArrays.forEach(function (a) {
+              r.push(a + "Data");
+            }),
+            a.data &&
+              (a.dataSorting && g(f.options.dataSorting, a.dataSorting),
+              this.setData(a.data, !1)));
+          a = A(
+            k,
+            w,
+            {
+              index: "undefined" === typeof k.index ? f.index : k.index,
+              pointStart: M(
+                h && h.series && h.series.pointStart,
+                k.pointStart,
+                f.xData[0]
+              ),
+            },
+            !l && { data: f.options.data },
+            a
+          );
+          l && a.data && (a.data = f.options.data);
+          r = [
+            "group",
+            "markerGroup",
+            "dataLabelsGroup",
+            "transformGroup",
+          ].concat(r);
+          r.forEach(function (a) {
+            r[a] = f[a];
+            delete f[a];
+          });
+          f.remove(!1, null, !1, !0);
+          for (m in n) f[m] = void 0;
+          x[q || p]
+            ? g(f, x[q || p].prototype)
+            : d(17, !0, b, { missingModuleFor: q || p });
+          r.forEach(function (a) {
+            f[a] = r[a];
+          });
+          f.init(b, a);
+          if (l && this.points) {
+            var B = f.options;
+            !1 === B.visible
+              ? ((v.graphic = 1), (v.dataLabel = 1))
+              : f._hasPointLabels ||
+                ((a = B.marker),
+                (k = B.dataLabels),
+                a && (!1 === a.enabled || "symbol" in a) && (v.graphic = 1),
+                k && !1 === k.enabled && (v.dataLabel = 1));
+            this.points.forEach(function (a) {
+              a &&
+                a.series &&
+                (a.resolveColor(),
+                Object.keys(v).length && a.destroyElements(v),
+                !1 === B.showInLegend &&
+                  a.legendItem &&
+                  b.legend.destroyItem(a));
+            }, this);
+          }
+          f.initialType = p;
+          b.linkSeries();
+          c(this, "afterUpdate");
+          M(e, !0) && b.redraw(l ? void 0 : !1);
+        },
+        setName: function (a) {
+          this.name = this.options.name = this.userOptions.name = a;
+          this.chart.isDirtyLegend = !0;
+        },
+        hasOptionChanged: function (a) {
+          var c = this.options[a],
+            d = this.chart.options.plotOptions,
+            b = this.userOptions[a];
+          return b
+            ? c !== b
+            : c !==
+                M(
+                  d && d[this.type] && d[this.type][a],
+                  d && d.series && d.series[a],
+                  c
+                );
+        },
+      });
+      g(h.prototype, {
+        update: function (a, c) {
+          var d = this.chart,
+            b = (a && a.events) || {};
+          a = A(this.userOptions, a);
+          d.options[this.coll].indexOf &&
+            (d.options[this.coll][
+              d.options[this.coll].indexOf(this.userOptions)
+            ] = a);
+          G(d.options[this.coll].events, function (a, c) {
+            "undefined" === typeof b[c] && (b[c] = void 0);
+          });
+          this.destroy(!0);
+          this.init(d, g(a, { events: b }));
+          d.isDirtyBox = !0;
+          M(c, !0) && d.redraw();
+        },
+        remove: function (c) {
+          for (
+            var d = this.chart, g = this.coll, b = this.series, e = b.length;
+            e--;
+
+          )
+            b[e] && b[e].remove(!1);
+          r(d.axes, this);
+          r(d[g], this);
+          a(d.options[g])
+            ? d.options[g].splice(this.options.index, 1)
+            : delete d.options[g];
+          d[g].forEach(function (a, b) {
+            a.options.index = a.userOptions.index = b;
+          });
+          this.destroy();
+          d.isDirtyBox = !0;
+          M(c, !0) && d.redraw();
+        },
+        setTitle: function (a, c) {
+          this.update({ title: a }, c);
+        },
+        setCategories: function (a, c) {
+          this.update({ categories: a }, c);
+        },
+      });
+    }
+  );
+  N(
+    m,
+    "Series/AreaSeries.js",
+    [
+      m["Core/Series/Series.js"],
+      m["Core/Color/Color.js"],
+      m["Core/Globals.js"],
+      m["Mixins/LegendSymbol.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F) {
+      var L = h.parse,
+        K = F.objectEach,
+        C = F.pick,
+        y = m.Series;
+      f.seriesType(
+        "area",
+        "line",
+        { threshold: 0 },
+        {
+          singleStacks: !1,
+          getStackPoints: function (e) {
+            var f = [],
+              h = [],
+              m = this.xAxis,
+              D = this.yAxis,
+              n = D.stacking.stacks[this.stackKey],
+              l = {},
+              y = this.index,
+              w = D.series,
+              r = w.length,
+              d = C(D.options.reversedStacks, !0) ? 1 : -1,
+              g;
+            e = e || this.points;
+            if (this.options.stacking) {
+              for (g = 0; g < e.length; g++)
+                (e[g].leftNull = e[g].rightNull = void 0), (l[e[g].x] = e[g]);
+              K(n, function (a, c) {
+                null !== a.total && h.push(c);
+              });
+              h.sort(function (a, c) {
+                return a - c;
+              });
+              var c = w.map(function (a) {
+                return a.visible;
+              });
+              h.forEach(function (a, e) {
+                var p = 0,
+                  q,
+                  w;
+                if (l[a] && !l[a].isNull)
+                  f.push(l[a]),
+                    [-1, 1].forEach(function (f) {
+                      var p = 1 === f ? "rightNull" : "leftNull",
+                        m = 0,
+                        v = n[h[e + f]];
+                      if (v)
+                        for (g = y; 0 <= g && g < r; )
+                          (q = v.points[g]),
+                            q ||
+                              (g === y
+                                ? (l[a][p] = !0)
+                                : c[g] &&
+                                  (w = n[a].points[g]) &&
+                                  (m -= w[1] - w[0])),
+                            (g += d);
+                      l[a][1 === f ? "rightCliff" : "leftCliff"] = m;
+                    });
+                else {
+                  for (g = y; 0 <= g && g < r; ) {
+                    if ((q = n[a].points[g])) {
+                      p = q[1];
+                      break;
+                    }
+                    g += d;
+                  }
+                  p = D.translate(p, 0, 1, 0, 1);
+                  f.push({
+                    isNull: !0,
+                    plotX: m.translate(a, 0, 0, 0, 1),
+                    x: a,
+                    plotY: p,
+                    yBottom: p,
+                  });
+                }
+              });
+            }
+            return f;
+          },
+          getGraphPath: function (e) {
+            var f = y.prototype.getGraphPath,
+              h = this.options,
+              m = h.stacking,
+              D = this.yAxis,
+              n,
+              l = [],
+              z = [],
+              w = this.index,
+              r = D.stacking.stacks[this.stackKey],
+              d = h.threshold,
+              g = Math.round(D.getThreshold(h.threshold));
+            h = C(h.connectNulls, "percent" === m);
+            var c = function (a, c, f) {
+              var p = e[a];
+              a = m && r[p.x].points[w];
+              var h = p[f + "Null"] || 0;
+              f = p[f + "Cliff"] || 0;
+              p = !0;
+              if (f || h) {
+                var n = (h ? a[0] : a[1]) + f;
+                var v = a[0] + f;
+                p = !!h;
+              } else !m && e[c] && e[c].isNull && (n = v = d);
+              "undefined" !== typeof n &&
+                (z.push({
+                  plotX: q,
+                  plotY: null === n ? g : D.getThreshold(n),
+                  isNull: p,
+                  isCliff: !0,
+                }),
+                l.push({
+                  plotX: q,
+                  plotY: null === v ? g : D.getThreshold(v),
+                  doCurve: !1,
+                }));
+            };
+            e = e || this.points;
+            m && (e = this.getStackPoints(e));
+            for (n = 0; n < e.length; n++) {
+              m ||
+                (e[n].leftCliff =
+                  e[n].rightCliff =
+                  e[n].leftNull =
+                  e[n].rightNull =
+                    void 0);
+              var a = e[n].isNull;
+              var q = C(e[n].rectPlotX, e[n].plotX);
+              var p = m ? e[n].yBottom : g;
+              if (!a || h)
+                h || c(n, n - 1, "left"),
+                  (a && !m && h) ||
+                    (z.push(e[n]), l.push({ x: n, plotX: q, plotY: p })),
+                  h || c(n, n + 1, "right");
+            }
+            n = f.call(this, z, !0, !0);
+            l.reversed = !0;
+            a = f.call(this, l, !0, !0);
+            (p = a[0]) && "M" === p[0] && (a[0] = ["L", p[1], p[2]]);
+            a = n.concat(a);
+            f = f.call(this, z, !1, h);
+            a.xMap = n.xMap;
+            this.areaPath = a;
+            return f;
+          },
+          drawGraph: function () {
+            this.areaPath = [];
+            y.prototype.drawGraph.apply(this);
+            var e = this,
+              f = this.areaPath,
+              h = this.options,
+              m = [["area", "highcharts-area", this.color, h.fillColor]];
+            this.zones.forEach(function (f, n) {
+              m.push([
+                "zone-area-" + n,
+                "highcharts-area highcharts-zone-area-" + n + " " + f.className,
+                f.color || e.color,
+                f.fillColor || h.fillColor,
+              ]);
+            });
+            m.forEach(function (m) {
+              var n = m[0],
+                l = e[n],
+                v = l ? "animate" : "attr",
+                w = {};
+              l
+                ? ((l.endX = e.preventGraphAnimation ? null : f.xMap),
+                  l.animate({ d: f }))
+                : ((w.zIndex = 0),
+                  (l = e[n] =
+                    e.chart.renderer.path(f).addClass(m[1]).add(e.group)),
+                  (l.isArea = !0));
+              e.chart.styledMode ||
+                (w.fill = C(
+                  m[3],
+                  L(m[2]).setOpacity(C(h.fillOpacity, 0.75)).get()
+                ));
+              l[v](w);
+              l.startX = f.xMap;
+              l.shiftUnit = h.step ? 2 : 1;
+            });
+          },
+          drawLegendSymbol: z.drawRectangle,
+        }
+      );
+      ("");
+    }
+  );
+  N(
+    m,
+    "Series/SplineSeries.js",
+    [m["Core/Series/Series.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.pick;
+      f.seriesType(
+        "spline",
+        "line",
+        {},
+        {
+          getPointSpline: function (f, h, L) {
+            var z = h.plotX || 0,
+              C = h.plotY || 0,
+              y = f[L - 1];
+            L = f[L + 1];
+            if (
+              y &&
+              !y.isNull &&
+              !1 !== y.doCurve &&
+              !h.isCliff &&
+              L &&
+              !L.isNull &&
+              !1 !== L.doCurve &&
+              !h.isCliff
+            ) {
+              f = y.plotY || 0;
+              var e = L.plotX || 0;
+              L = L.plotY || 0;
+              var F = 0;
+              var v = (1.5 * z + (y.plotX || 0)) / 2.5;
+              var x = (1.5 * C + f) / 2.5;
+              e = (1.5 * z + e) / 2.5;
+              var D = (1.5 * C + L) / 2.5;
+              e !== v && (F = ((D - x) * (e - z)) / (e - v) + C - D);
+              x += F;
+              D += F;
+              x > f && x > C
+                ? ((x = Math.max(f, C)), (D = 2 * C - x))
+                : x < f && x < C && ((x = Math.min(f, C)), (D = 2 * C - x));
+              D > L && D > C
+                ? ((D = Math.max(L, C)), (x = 2 * C - D))
+                : D < L && D < C && ((D = Math.min(L, C)), (x = 2 * C - D));
+              h.rightContX = e;
+              h.rightContY = D;
+            }
+            h = [
+              "C",
+              m(y.rightContX, y.plotX, 0),
+              m(y.rightContY, y.plotY, 0),
+              m(v, z, 0),
+              m(x, C, 0),
+              z,
+              C,
+            ];
+            y.rightContX = y.rightContY = void 0;
+            return h;
+          },
+        }
+      );
+      ("");
+    }
+  );
+  N(
+    m,
+    "Series/AreaSplineSeries.js",
+    [
+      m["Core/Series/Series.js"],
+      m["Mixins/LegendSymbol.js"],
+      m["Core/Options.js"],
+    ],
+    function (f, h, m) {
+      var z = f.seriesTypes.area.prototype;
+      f.seriesType("areaspline", "spline", m.defaultOptions.plotOptions.area, {
+        getStackPoints: z.getStackPoints,
+        getGraphPath: z.getGraphPath,
+        drawGraph: z.drawGraph,
+        drawLegendSymbol: h.drawRectangle,
+      });
+      ("");
+    }
+  );
+  N(
+    m,
+    "Series/ColumnSeries.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Series/Series.js"],
+      m["Core/Color/Color.js"],
+      m["Core/Globals.js"],
+      m["Mixins/LegendSymbol.js"],
+      m["Series/LineSeries.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F, L, K) {
+      var C = f.animObject,
+        y = m.parse;
+      f = z.noop;
+      var e = K.clamp,
+        I = K.defined,
+        v = K.extend,
+        x = K.isArray,
+        D = K.isNumber,
+        n = K.merge,
+        l = K.pick,
+        J = K.objectEach;
+      ("");
+      h = h.seriesType(
+        "column",
+        "line",
+        {
+          borderRadius: 0,
+          centerInCategory: !1,
+          groupPadding: 0.2,
+          marker: null,
+          pointPadding: 0.1,
+          minPointLength: 0,
+          cropThreshold: 50,
+          pointRange: null,
+          states: {
+            hover: { halo: !1, brightness: 0.1 },
+            select: { color: "#cccccc", borderColor: "#000000" },
+          },
+          dataLabels: { align: void 0, verticalAlign: void 0, y: void 0 },
+          startFromThreshold: !0,
+          stickyTracking: !1,
+          tooltip: { distance: 6 },
+          threshold: 0,
+          borderColor: "#ffffff",
+        },
+        {
+          cropShoulder: 0,
+          directTouch: !0,
+          trackerGroups: ["group", "dataLabelsGroup"],
+          negStacks: !0,
+          init: function () {
+            L.prototype.init.apply(this, arguments);
+            var e = this,
+              f = e.chart;
+            f.hasRendered &&
+              f.series.forEach(function (d) {
+                d.type === e.type && (d.isDirty = !0);
+              });
+          },
+          getColumnMetrics: function () {
+            var e = this,
+              f = e.options,
+              d = e.xAxis,
+              g = e.yAxis,
+              c = d.options.reversedStacks;
+            c = (d.reversed && !c) || (!d.reversed && c);
+            var a,
+              h = {},
+              p = 0;
+            !1 === f.grouping
+              ? (p = 1)
+              : e.chart.series.forEach(function (c) {
+                  var d = c.yAxis,
+                    f = c.options;
+                  if (
+                    c.type === e.type &&
+                    (c.visible || !e.chart.options.chart.ignoreHiddenSeries) &&
+                    g.len === d.len &&
+                    g.pos === d.pos
+                  ) {
+                    if (f.stacking && "group" !== f.stacking) {
+                      a = c.stackKey;
+                      "undefined" === typeof h[a] && (h[a] = p++);
+                      var q = h[a];
+                    } else !1 !== f.grouping && (q = p++);
+                    c.columnIndex = q;
+                  }
+                });
+            var n = Math.min(
+                Math.abs(d.transA) *
+                  ((d.ordinal && d.ordinal.slope) ||
+                    f.pointRange ||
+                    d.closestPointRange ||
+                    d.tickInterval ||
+                    1),
+                d.len
+              ),
+              m = n * f.groupPadding,
+              v = (n - 2 * m) / (p || 1);
+            f = Math.min(
+              f.maxPointWidth || d.len,
+              l(f.pointWidth, v * (1 - 2 * f.pointPadding))
+            );
+            e.columnMetrics = {
+              width: f,
+              offset:
+                (v - f) / 2 +
+                (m + ((e.columnIndex || 0) + (c ? 1 : 0)) * v - n / 2) *
+                  (c ? -1 : 1),
+              paddedWidth: v,
+              columnCount: p,
+            };
+            return e.columnMetrics;
+          },
+          crispCol: function (e, f, d, g) {
+            var c = this.chart,
+              a = this.borderWidth,
+              h = -(a % 2 ? 0.5 : 0);
+            a = a % 2 ? 0.5 : 1;
+            c.inverted && c.renderer.isVML && (a += 1);
+            this.options.crisp &&
+              ((d = Math.round(e + d) + h), (e = Math.round(e) + h), (d -= e));
+            g = Math.round(f + g) + a;
+            h = 0.5 >= Math.abs(f) && 0.5 < g;
+            f = Math.round(f) + a;
+            g -= f;
+            h && g && (--f, (g += 1));
+            return { x: e, y: f, width: d, height: g };
+          },
+          adjustForMissingColumns: function (e, f, d, g) {
+            var c = this,
+              a = this.options.stacking;
+            if (!d.isNull && 1 < g.columnCount) {
+              var h = 0,
+                p = 0;
+              J(
+                this.yAxis.stacking && this.yAxis.stacking.stacks,
+                function (g) {
+                  if ("number" === typeof d.x && (g = g[d.x.toString()])) {
+                    var e = g.points[c.index],
+                      f = g.total;
+                    a
+                      ? (e && (h = p), g.hasValidPoints && p++)
+                      : x(e) && ((h = e[1]), (p = f || 0));
+                  }
+                }
+              );
+              e =
+                (d.plotX || 0) +
+                ((p - 1) * g.paddedWidth + f) / 2 -
+                f -
+                h * g.paddedWidth;
+            }
+            return e;
+          },
+          translate: function () {
+            var f = this,
+              h = f.chart,
+              d = f.options,
+              g = (f.dense = 2 > f.closestPointRange * f.xAxis.transA);
+            g = f.borderWidth = l(d.borderWidth, g ? 0 : 1);
+            var c = f.xAxis,
+              a = f.yAxis,
+              q = d.threshold,
+              p = (f.translatedThreshold = a.getThreshold(q)),
+              n = l(d.minPointLength, 5),
+              m = f.getColumnMetrics(),
+              v = m.width,
+              x = (f.barW = Math.max(v, 1 + 2 * g)),
+              y = (f.pointXOffset = m.offset),
+              z = f.dataMin,
+              C = f.dataMax;
+            h.inverted && (p -= 0.5);
+            d.pointPadding && (x = Math.ceil(x));
+            L.prototype.translate.apply(f);
+            f.points.forEach(function (g) {
+              var u = l(g.yBottom, p),
+                b = 999 + Math.abs(u),
+                k = v,
+                t = g.plotX || 0;
+              b = e(g.plotY, -b, a.len + b);
+              var r = t + y,
+                w = x,
+                A = Math.min(b, u),
+                B = Math.max(b, u) - A;
+              if (n && Math.abs(B) < n) {
+                B = n;
+                var E =
+                  (!a.reversed && !g.negative) || (a.reversed && g.negative);
+                D(q) &&
+                  D(C) &&
+                  g.y === q &&
+                  C <= q &&
+                  (a.min || 0) < q &&
+                  z !== C &&
+                  (E = !E);
+                A = Math.abs(A - p) > n ? u - n : p - (E ? n : 0);
+              }
+              I(g.options.pointWidth) &&
+                ((k = w = Math.ceil(g.options.pointWidth)),
+                (r -= Math.round((k - v) / 2)));
+              d.centerInCategory && (r = f.adjustForMissingColumns(r, k, g, m));
+              g.barX = r;
+              g.pointWidth = k;
+              g.tooltipPos = h.inverted
+                ? [
+                    a.len + a.pos - h.plotLeft - b,
+                    c.len + c.pos - h.plotTop - (t || 0) - y - w / 2,
+                    B,
+                  ]
+                : [r + w / 2, b + a.pos - h.plotTop, B];
+              g.shapeType = f.pointClass.prototype.shapeType || "rect";
+              g.shapeArgs = f.crispCol.apply(
+                f,
+                g.isNull ? [r, p, w, 0] : [r, A, w, B]
+              );
+            });
+          },
+          getSymbol: f,
+          drawLegendSymbol: F.drawRectangle,
+          drawGraph: function () {
+            this.group[this.dense ? "addClass" : "removeClass"](
+              "highcharts-dense-data"
+            );
+          },
+          pointAttribs: function (e, f) {
+            var d = this.options,
+              g = this.pointAttrToOptions || {};
+            var c = g.stroke || "borderColor";
+            var a = g["stroke-width"] || "borderWidth",
+              h = (e && e.color) || this.color,
+              p = (e && e[c]) || d[c] || this.color || h,
+              m = (e && e[a]) || d[a] || this[a] || 0;
+            g = (e && e.options.dashStyle) || d.dashStyle;
+            var r = l(e && e.opacity, d.opacity, 1);
+            if (e && this.zones.length) {
+              var v = e.getZone();
+              h =
+                e.options.color ||
+                (v && (v.color || e.nonZonedColor)) ||
+                this.color;
+              v &&
+                ((p = v.borderColor || p),
+                (g = v.dashStyle || g),
+                (m = v.borderWidth || m));
+            }
+            f &&
+              e &&
+              ((e = n(
+                d.states[f],
+                (e.options.states && e.options.states[f]) || {}
+              )),
+              (f = e.brightness),
+              (h =
+                e.color ||
+                ("undefined" !== typeof f &&
+                  y(h).brighten(e.brightness).get()) ||
+                h),
+              (p = e[c] || p),
+              (m = e[a] || m),
+              (g = e.dashStyle || g),
+              (r = l(e.opacity, r)));
+            c = { fill: h, stroke: p, "stroke-width": m, opacity: r };
+            g && (c.dashstyle = g);
+            return c;
+          },
+          drawPoints: function () {
+            var e = this,
+              f = this.chart,
+              d = e.options,
+              g = f.renderer,
+              c = d.animationLimit || 250,
+              a;
+            e.points.forEach(function (h) {
+              var p = h.graphic,
+                l = !!p,
+                q = p && f.pointCount < c ? "animate" : "attr";
+              if (D(h.plotY) && null !== h.y) {
+                a = h.shapeArgs;
+                p && h.hasNewShapeType() && (p = p.destroy());
+                e.enabledDataSorting &&
+                  (h.startXPos = e.xAxis.reversed
+                    ? -(a ? a.width : 0)
+                    : e.xAxis.width);
+                p ||
+                  ((h.graphic = p =
+                    g[h.shapeType](a).add(h.group || e.group)) &&
+                    e.enabledDataSorting &&
+                    f.hasRendered &&
+                    f.pointCount < c &&
+                    (p.attr({ x: h.startXPos }), (l = !0), (q = "animate")));
+                if (p && l) p[q](n(a));
+                if (d.borderRadius) p[q]({ r: d.borderRadius });
+                f.styledMode ||
+                  p[q](e.pointAttribs(h, h.selected && "select")).shadow(
+                    !1 !== h.allowShadow && d.shadow,
+                    null,
+                    d.stacking && !d.borderRadius
+                  );
+                p.addClass(h.getClassName(), !0);
+              } else p && (h.graphic = p.destroy());
+            });
+          },
+          animate: function (f) {
+            var h = this,
+              d = this.yAxis,
+              g = h.options,
+              c = this.chart.inverted,
+              a = {},
+              l = c ? "translateX" : "translateY";
+            if (f)
+              (a.scaleY = 0.001),
+                (f = e(d.toPixels(g.threshold), d.pos, d.pos + d.len)),
+                c ? (a.translateX = f - d.len) : (a.translateY = f),
+                h.clipBox && h.setClip(),
+                h.group.attr(a);
+            else {
+              var p = h.group.attr(l);
+              h.group.animate(
+                { scaleY: 1 },
+                v(C(h.options.animation), {
+                  step: function (c, g) {
+                    h.group &&
+                      ((a[l] = p + g.pos * (d.pos - p)), h.group.attr(a));
+                  },
+                })
+              );
+            }
+          },
+          remove: function () {
+            var e = this,
+              f = e.chart;
+            f.hasRendered &&
+              f.series.forEach(function (d) {
+                d.type === e.type && (d.isDirty = !0);
+              });
+            L.prototype.remove.apply(e, arguments);
+          },
+        }
+      );
+      ("");
+      return h;
+    }
+  );
+  N(m, "Series/BarSeries.js", [m["Core/Series/Series.js"]], function (f) {
+    f.seriesType("bar", "column", null, { inverted: !0 });
+    ("");
+  });
+  N(
+    m,
+    "Series/ScatterSeries.js",
+    [m["Core/Series/Series.js"], m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h, m) {
+      m = m.addEvent;
+      var z = h.Series;
+      f.seriesType(
+        "scatter",
+        "line",
+        {
+          lineWidth: 0,
+          findNearestPointBy: "xy",
+          jitter: { x: 0, y: 0 },
+          marker: { enabled: !0 },
+          tooltip: {
+            headerFormat:
+              '<span style="color:{point.color}">\u25cf</span> <span style="font-size: 10px"> {series.name}</span><br/>',
+            pointFormat: "x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>",
+          },
+        },
+        {
+          sorted: !1,
+          requireSorting: !1,
+          noSharedTooltip: !0,
+          trackerGroups: ["group", "markerGroup", "dataLabelsGroup"],
+          takeOrdinalPosition: !1,
+          drawGraph: function () {
+            (this.options.lineWidth ||
+              (0 === this.options.lineWidth &&
+                this.graph &&
+                this.graph.strokeWidth())) &&
+              z.prototype.drawGraph.call(this);
+          },
+          applyJitter: function () {
+            var f = this,
+              h = this.options.jitter,
+              m = this.points.length;
+            h &&
+              this.points.forEach(function (z, y) {
+                ["x", "y"].forEach(function (e, C) {
+                  var v = "plot" + e.toUpperCase();
+                  if (h[e] && !z.isNull) {
+                    var x = f[e + "Axis"];
+                    var D = h[e] * x.transA;
+                    if (x && !x.isLog) {
+                      var n = Math.max(0, z[v] - D);
+                      x = Math.min(x.len, z[v] + D);
+                      C = 1e4 * Math.sin(y + C * m);
+                      z[v] = n + (x - n) * (C - Math.floor(C));
+                      "x" === e && (z.clientX = z.plotX);
+                    }
+                  }
+                });
+              });
+          },
+        }
+      );
+      m(z, "afterTranslate", function () {
+        this.applyJitter && this.applyJitter();
+      });
+      ("");
+    }
+  );
+  N(
+    m,
+    "Mixins/CenteredSeries.js",
+    [m["Core/Globals.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.isNumber,
+        z = h.pick,
+        F = h.relativeLength,
+        L = f.deg2rad;
+      return (f.CenteredSeriesMixin = {
+        getCenter: function () {
+          var h = this.options,
+            m = this.chart,
+            y = 2 * (h.slicedOffset || 0),
+            e = m.plotWidth - 2 * y,
+            I = m.plotHeight - 2 * y,
+            v = h.center,
+            x = Math.min(e, I),
+            D = h.size,
+            n = h.innerSize || 0;
+          "string" === typeof D && (D = parseFloat(D));
+          "string" === typeof n && (n = parseFloat(n));
+          h = [
+            z(v[0], "50%"),
+            z(v[1], "50%"),
+            z(D && 0 > D ? void 0 : h.size, "100%"),
+            z(n && 0 > n ? void 0 : h.innerSize || 0, "0%"),
+          ];
+          !m.angular || this instanceof f.Series || (h[3] = 0);
+          for (v = 0; 4 > v; ++v)
+            (D = h[v]),
+              (m = 2 > v || (2 === v && /%$/.test(D))),
+              (h[v] = F(D, [e, I, x, h[2]][v]) + (m ? y : 0));
+          h[3] > h[2] && (h[3] = h[2]);
+          return h;
+        },
+        getStartAndEndRadians: function (f, h) {
+          f = m(f) ? f : 0;
+          h = m(h) && h > f && 360 > h - f ? h : f + 360;
+          return { start: L * (f + -90), end: L * (h + -90) };
+        },
+      });
+    }
+  );
+  N(
+    m,
+    "Series/PieSeries.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Series/Series.js"],
+      m["Mixins/CenteredSeries.js"],
+      m["Core/Globals.js"],
+      m["Mixins/LegendSymbol.js"],
+      m["Series/LineSeries.js"],
+      m["Core/Series/Point.js"],
+      m["Core/Renderer/SVG/SVGRenderer.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F, L, K, C, y) {
+      var e = f.setAnimation,
+        I = m.getStartAndEndRadians;
+      f = z.noop;
+      var v = y.addEvent,
+        x = y.clamp,
+        D = y.defined,
+        n = y.fireEvent,
+        l = y.isNumber,
+        J = y.merge,
+        w = y.pick,
+        r = y.relativeLength;
+      h.seriesType(
+        "pie",
+        "line",
+        {
+          center: [null, null],
+          clip: !1,
+          colorByPoint: !0,
+          dataLabels: {
+            allowOverlap: !0,
+            connectorPadding: 5,
+            connectorShape: "fixedOffset",
+            crookDistance: "70%",
+            distance: 30,
+            enabled: !0,
+            formatter: function () {
+              return this.point.isNull ? void 0 : this.point.name;
+            },
+            softConnector: !0,
+            x: 0,
+          },
+          fillColor: void 0,
+          ignoreHiddenPoint: !0,
+          inactiveOtherPoints: !0,
+          legendType: "point",
+          marker: null,
+          size: null,
+          showInLegend: !1,
+          slicedOffset: 10,
+          stickyTracking: !1,
+          tooltip: { followPointer: !0 },
+          borderColor: "#ffffff",
+          borderWidth: 1,
+          lineWidth: void 0,
+          states: { hover: { brightness: 0.1 } },
+        },
+        {
+          isCartesian: !1,
+          requireSorting: !1,
+          directTouch: !0,
+          noSharedTooltip: !0,
+          trackerGroups: ["group", "dataLabelsGroup"],
+          axisTypes: [],
+          pointAttribs: h.seriesTypes.column.prototype.pointAttribs,
+          animate: function (d) {
+            var g = this,
+              c = g.points,
+              a = g.startAngleRad;
+            d ||
+              c.forEach(function (c) {
+                var d = c.graphic,
+                  e = c.shapeArgs;
+                d &&
+                  e &&
+                  (d.attr({
+                    r: w(c.startR, g.center && g.center[3] / 2),
+                    start: a,
+                    end: a,
+                  }),
+                  d.animate(
+                    { r: e.r, start: e.start, end: e.end },
+                    g.options.animation
+                  ));
+              });
+          },
+          hasData: function () {
+            return !!this.processedXData.length;
+          },
+          updateTotals: function () {
+            var d,
+              g = 0,
+              c = this.points,
+              a = c.length,
+              e = this.options.ignoreHiddenPoint;
+            for (d = 0; d < a; d++) {
+              var f = c[d];
+              g += e && !f.visible ? 0 : f.isNull ? 0 : f.y;
+            }
+            this.total = g;
+            for (d = 0; d < a; d++)
+              (f = c[d]),
+                (f.percentage =
+                  0 < g && (f.visible || !e) ? (f.y / g) * 100 : 0),
+                (f.total = g);
+          },
+          generatePoints: function () {
+            L.prototype.generatePoints.call(this);
+            this.updateTotals();
+          },
+          getX: function (d, g, c) {
+            var a = this.center,
+              e = this.radii ? this.radii[c.index] : a[2] / 2;
+            d = Math.asin(x((d - a[1]) / (e + c.labelDistance), -1, 1));
+            return (
+              a[0] +
+              (g ? -1 : 1) * Math.cos(d) * (e + c.labelDistance) +
+              (0 < c.labelDistance
+                ? (g ? -1 : 1) * this.options.dataLabels.padding
+                : 0)
+            );
+          },
+          translate: function (d) {
+            this.generatePoints();
+            var g = 0,
+              c = this.options,
+              a = c.slicedOffset,
+              e = a + (c.borderWidth || 0),
+              f = I(c.startAngle, c.endAngle),
+              h = (this.startAngleRad = f.start);
+            f = (this.endAngleRad = f.end) - h;
+            var l = this.points,
+              m = c.dataLabels.distance;
+            c = c.ignoreHiddenPoint;
+            var v,
+              x = l.length;
+            d || (this.center = d = this.getCenter());
+            for (v = 0; v < x; v++) {
+              var y = l[v];
+              var z = h + g * f;
+              if (!c || y.visible) g += y.percentage / 100;
+              var E = h + g * f;
+              y.shapeType = "arc";
+              y.shapeArgs = {
+                x: d[0],
+                y: d[1],
+                r: d[2] / 2,
+                innerR: d[3] / 2,
+                start: Math.round(1e3 * z) / 1e3,
+                end: Math.round(1e3 * E) / 1e3,
+              };
+              y.labelDistance = w(
+                y.options.dataLabels && y.options.dataLabels.distance,
+                m
+              );
+              y.labelDistance = r(y.labelDistance, y.shapeArgs.r);
+              this.maxLabelDistance = Math.max(
+                this.maxLabelDistance || 0,
+                y.labelDistance
+              );
+              E = (E + z) / 2;
+              E > 1.5 * Math.PI
+                ? (E -= 2 * Math.PI)
+                : E < -Math.PI / 2 && (E += 2 * Math.PI);
+              y.slicedTranslation = {
+                translateX: Math.round(Math.cos(E) * a),
+                translateY: Math.round(Math.sin(E) * a),
+              };
+              var u = (Math.cos(E) * d[2]) / 2;
+              var b = (Math.sin(E) * d[2]) / 2;
+              y.tooltipPos = [d[0] + 0.7 * u, d[1] + 0.7 * b];
+              y.half = E < -Math.PI / 2 || E > Math.PI / 2 ? 1 : 0;
+              y.angle = E;
+              z = Math.min(e, y.labelDistance / 5);
+              y.labelPosition = {
+                natural: {
+                  x: d[0] + u + Math.cos(E) * y.labelDistance,
+                  y: d[1] + b + Math.sin(E) * y.labelDistance,
+                },
+                final: {},
+                alignment:
+                  0 > y.labelDistance ? "center" : y.half ? "right" : "left",
+                connectorPosition: {
+                  breakAt: {
+                    x: d[0] + u + Math.cos(E) * z,
+                    y: d[1] + b + Math.sin(E) * z,
+                  },
+                  touchingSliceAt: { x: d[0] + u, y: d[1] + b },
+                },
+              };
+            }
+            n(this, "afterTranslate");
+          },
+          drawEmpty: function () {
+            var d = this.startAngleRad,
+              g = this.endAngleRad,
+              c = this.options;
+            if (0 === this.total && this.center) {
+              var a = this.center[0];
+              var e = this.center[1];
+              this.graph ||
+                (this.graph = this.chart.renderer
+                  .arc(a, e, this.center[1] / 2, 0, d, g)
+                  .addClass("highcharts-empty-series")
+                  .add(this.group));
+              this.graph.attr({
+                d: C.prototype.symbols.arc(a, e, this.center[2] / 2, 0, {
+                  start: d,
+                  end: g,
+                  innerR: this.center[3] / 2,
+                }),
+              });
+              this.chart.styledMode ||
+                this.graph.attr({
+                  "stroke-width": c.borderWidth,
+                  fill: c.fillColor || "none",
+                  stroke: c.color || "#cccccc",
+                });
+            } else this.graph && (this.graph = this.graph.destroy());
+          },
+          redrawPoints: function () {
+            var d = this,
+              e = d.chart,
+              c = e.renderer,
+              a,
+              f,
+              h,
+              l,
+              n = d.options.shadow;
+            this.drawEmpty();
+            !n ||
+              d.shadowGroup ||
+              e.styledMode ||
+              (d.shadowGroup = c.g("shadow").attr({ zIndex: -1 }).add(d.group));
+            d.points.forEach(function (g) {
+              var p = {};
+              f = g.graphic;
+              if (!g.isNull && f) {
+                l = g.shapeArgs;
+                a = g.getTranslate();
+                if (!e.styledMode) {
+                  var q = g.shadowGroup;
+                  n &&
+                    !q &&
+                    (q = g.shadowGroup = c.g("shadow").add(d.shadowGroup));
+                  q && q.attr(a);
+                  h = d.pointAttribs(g, g.selected && "select");
+                }
+                g.delayedRendering
+                  ? (f.setRadialReference(d.center).attr(l).attr(a),
+                    e.styledMode ||
+                      f
+                        .attr(h)
+                        .attr({ "stroke-linejoin": "round" })
+                        .shadow(n, q),
+                    (g.delayedRendering = !1))
+                  : (f.setRadialReference(d.center),
+                    e.styledMode || J(!0, p, h),
+                    J(!0, p, l, a),
+                    f.animate(p));
+                f.attr({ visibility: g.visible ? "inherit" : "hidden" });
+                f.addClass(g.getClassName());
+              } else f && (g.graphic = f.destroy());
+            });
+          },
+          drawPoints: function () {
+            var d = this.chart.renderer;
+            this.points.forEach(function (e) {
+              e.graphic &&
+                e.hasNewShapeType() &&
+                (e.graphic = e.graphic.destroy());
+              e.graphic ||
+                ((e.graphic = d[e.shapeType](e.shapeArgs).add(e.series.group)),
+                (e.delayedRendering = !0));
+            });
+          },
+          searchPoint: f,
+          sortByAngle: function (d, e) {
+            d.sort(function (c, a) {
+              return "undefined" !== typeof c.angle && (a.angle - c.angle) * e;
+            });
+          },
+          drawLegendSymbol: F.drawRectangle,
+          getCenter: m.getCenter,
+          getSymbol: f,
+          drawGraph: null,
+        },
+        {
+          init: function () {
+            K.prototype.init.apply(this, arguments);
+            var d = this;
+            d.name = w(d.name, "Slice");
+            var e = function (c) {
+              d.slice("select" === c.type);
+            };
+            v(d, "select", e);
+            v(d, "unselect", e);
+            return d;
+          },
+          isValid: function () {
+            return l(this.y) && 0 <= this.y;
+          },
+          setVisible: function (d, e) {
+            var c = this,
+              a = c.series,
+              g = a.chart,
+              f = a.options.ignoreHiddenPoint;
+            e = w(e, f);
+            d !== c.visible &&
+              ((c.visible =
+                c.options.visible =
+                d =
+                  "undefined" === typeof d ? !c.visible : d),
+              (a.options.data[a.data.indexOf(c)] = c.options),
+              ["graphic", "dataLabel", "connector", "shadowGroup"].forEach(
+                function (a) {
+                  if (c[a]) c[a][d ? "show" : "hide"](!0);
+                }
+              ),
+              c.legendItem && g.legend.colorizeItem(c, d),
+              d || "hover" !== c.state || c.setState(""),
+              f && (a.isDirty = !0),
+              e && g.redraw());
+          },
+          slice: function (d, g, c) {
+            var a = this.series;
+            e(c, a.chart);
+            w(g, !0);
+            this.sliced = this.options.sliced = D(d) ? d : !this.sliced;
+            a.options.data[a.data.indexOf(this)] = this.options;
+            this.graphic && this.graphic.animate(this.getTranslate());
+            this.shadowGroup && this.shadowGroup.animate(this.getTranslate());
+          },
+          getTranslate: function () {
+            return this.sliced
+              ? this.slicedTranslation
+              : { translateX: 0, translateY: 0 };
+          },
+          haloPath: function (d) {
+            var e = this.shapeArgs;
+            return this.sliced || !this.visible
+              ? []
+              : this.series.chart.renderer.symbols.arc(
+                  e.x,
+                  e.y,
+                  e.r + d,
+                  e.r + d,
+                  { innerR: e.r - 1, start: e.start, end: e.end }
+                );
+          },
+          connectorShapes: {
+            fixedOffset: function (d, e, c) {
+              var a = e.breakAt;
+              e = e.touchingSliceAt;
+              return [
+                ["M", d.x, d.y],
+                c.softConnector
+                  ? [
+                      "C",
+                      d.x + ("left" === d.alignment ? -5 : 5),
+                      d.y,
+                      2 * a.x - e.x,
+                      2 * a.y - e.y,
+                      a.x,
+                      a.y,
+                    ]
+                  : ["L", a.x, a.y],
+                ["L", e.x, e.y],
+              ];
+            },
+            straight: function (d, e) {
+              e = e.touchingSliceAt;
+              return [
+                ["M", d.x, d.y],
+                ["L", e.x, e.y],
+              ];
+            },
+            crookedLine: function (d, e, c) {
+              e = e.touchingSliceAt;
+              var a = this.series,
+                g = a.center[0],
+                f = a.chart.plotWidth,
+                h = a.chart.plotLeft;
+              a = d.alignment;
+              var l = this.shapeArgs.r;
+              c = r(c.crookDistance, 1);
+              f =
+                "left" === a
+                  ? g + l + (f + h - g - l) * (1 - c)
+                  : h + (g - l) * c;
+              c = ["L", f, d.y];
+              g = !0;
+              if ("left" === a ? f > d.x || f < e.x : f < d.x || f > e.x)
+                g = !1;
+              d = [["M", d.x, d.y]];
+              g && d.push(c);
+              d.push(["L", e.x, e.y]);
+              return d;
+            },
+          },
+          getConnectorPath: function () {
+            var d = this.labelPosition,
+              e = this.series.options.dataLabels,
+              c = e.connectorShape,
+              a = this.connectorShapes;
+            a[c] && (c = a[c]);
+            return c.call(
+              this,
+              { x: d.final.x, y: d.final.y, alignment: d.alignment },
+              d.connectorPosition,
+              e
+            );
+          },
+        }
+      );
+      ("");
+    }
+  );
+  N(
+    m,
+    "Core/Series/DataLabels.js",
+    [
+      m["Core/Animation/AnimationUtilities.js"],
+      m["Core/Globals.js"],
+      m["Core/Series/CartesianSeries.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z) {
+      var F = f.getDeferredAnimation;
+      f = h.noop;
+      var L = h.seriesTypes,
+        K = z.arrayMax,
+        C = z.clamp,
+        y = z.defined,
+        e = z.extend,
+        I = z.fireEvent,
+        v = z.format,
+        x = z.isArray,
+        D = z.merge,
+        n = z.objectEach,
+        l = z.pick,
+        J = z.relativeLength,
+        w = z.splat,
+        r = z.stableSort;
+      ("");
+      h.distribute = function (d, e, c) {
+        function a(a, c) {
+          return a.target - c.target;
+        }
+        var f,
+          g = !0,
+          n = d,
+          m = [];
+        var v = 0;
+        var w = n.reducedLen || e;
+        for (f = d.length; f--; ) v += d[f].size;
+        if (v > w) {
+          r(d, function (a, c) {
+            return (c.rank || 0) - (a.rank || 0);
+          });
+          for (v = f = 0; v <= w; ) (v += d[f].size), f++;
+          m = d.splice(f - 1, d.length);
+        }
+        r(d, a);
+        for (
+          d = d.map(function (a) {
+            return {
+              size: a.size,
+              targets: [a.target],
+              align: l(a.align, 0.5),
+            };
+          });
+          g;
+
+        ) {
+          for (f = d.length; f--; )
+            (g = d[f]),
+              (v =
+                (Math.min.apply(0, g.targets) + Math.max.apply(0, g.targets)) /
+                2),
+              (g.pos = C(v - g.size * g.align, 0, e - g.size));
+          f = d.length;
+          for (g = !1; f--; )
+            0 < f &&
+              d[f - 1].pos + d[f - 1].size > d[f].pos &&
+              ((d[f - 1].size += d[f].size),
+              (d[f - 1].targets = d[f - 1].targets.concat(d[f].targets)),
+              (d[f - 1].align = 0.5),
+              d[f - 1].pos + d[f - 1].size > e &&
+                (d[f - 1].pos = e - d[f - 1].size),
+              d.splice(f, 1),
+              (g = !0));
+        }
+        n.push.apply(n, m);
+        f = 0;
+        d.some(function (a) {
+          var d = 0;
+          if (
+            a.targets.some(function () {
+              n[f].pos = a.pos + d;
+              if (
+                "undefined" !== typeof c &&
+                Math.abs(n[f].pos - n[f].target) > c
+              )
+                return (
+                  n.slice(0, f + 1).forEach(function (a) {
+                    delete a.pos;
+                  }),
+                  (n.reducedLen = (n.reducedLen || e) - 0.1 * e),
+                  n.reducedLen > 0.1 * e && h.distribute(n, e, c),
+                  !0
+                );
+              d += n[f].size;
+              f++;
+            })
+          )
+            return !0;
+        });
+        r(n, a);
+      };
+      m.prototype.drawDataLabels = function () {
+        function d(a, c) {
+          var d = c.filter;
+          return d
+            ? ((c = d.operator),
+              (a = a[d.property]),
+              (d = d.value),
+              (">" === c && a > d) ||
+              ("<" === c && a < d) ||
+              (">=" === c && a >= d) ||
+              ("<=" === c && a <= d) ||
+              ("==" === c && a == d) ||
+              ("===" === c && a === d)
+                ? !0
+                : !1)
+            : !0;
+        }
+        function e(a, c) {
+          var d = [],
+            b;
+          if (x(a) && !x(c))
+            d = a.map(function (a) {
+              return D(a, c);
+            });
+          else if (x(c) && !x(a))
+            d = c.map(function (b) {
+              return D(a, b);
+            });
+          else if (x(a) || x(c))
+            for (b = Math.max(a.length, c.length); b--; ) d[b] = D(a[b], c[b]);
+          else d = D(a, c);
+          return d;
+        }
+        var c = this,
+          a = c.chart,
+          f = c.options,
+          h = f.dataLabels,
+          m = c.points,
+          r,
+          G = c.hasRendered || 0,
+          z = h.animation;
+        z = h.defer ? F(a, z, c) : { defer: 0, duration: 0 };
+        var C = a.renderer;
+        h = e(
+          e(
+            a.options.plotOptions &&
+              a.options.plotOptions.series &&
+              a.options.plotOptions.series.dataLabels,
+            a.options.plotOptions &&
+              a.options.plotOptions[c.type] &&
+              a.options.plotOptions[c.type].dataLabels
+          ),
+          h
+        );
+        I(this, "drawDataLabels");
+        if (x(h) || h.enabled || c._hasPointLabels) {
+          var J = c.plotGroup(
+            "dataLabelsGroup",
+            "data-labels",
+            G ? "inherit" : "hidden",
+            h.zIndex || 6
+          );
+          J.attr({ opacity: +G });
+          !G &&
+            (G = c.dataLabelsGroup) &&
+            (c.visible && J.show(!0),
+            G[f.animation ? "animate" : "attr"]({ opacity: 1 }, z));
+          m.forEach(function (g) {
+            r = w(e(h, g.dlOptions || (g.options && g.options.dataLabels)));
+            r.forEach(function (e, h) {
+              var b = e.enabled && (!g.isNull || g.dataLabelOnNull) && d(g, e),
+                k = g.dataLabels ? g.dataLabels[h] : g.dataLabel,
+                p = g.connectors ? g.connectors[h] : g.connector,
+                m = l(e.distance, g.labelDistance),
+                q = !k;
+              if (b) {
+                var u = g.getLabelConfig();
+                var r = l(e[g.formatPrefix + "Format"], e.format);
+                u = y(r)
+                  ? v(r, u, a)
+                  : (e[g.formatPrefix + "Formatter"] || e.formatter).call(u, e);
+                r = e.style;
+                var A = e.rotation;
+                a.styledMode ||
+                  ((r.color = l(e.color, r.color, c.color, "#000000")),
+                  "contrast" === r.color
+                    ? ((g.contrastColor = C.getContrast(g.color || c.color)),
+                      (r.color =
+                        (!y(m) && e.inside) || 0 > m || f.stacking
+                          ? g.contrastColor
+                          : "#000000"))
+                    : delete g.contrastColor,
+                  f.cursor && (r.cursor = f.cursor));
+                var w = {
+                  r: e.borderRadius || 0,
+                  rotation: A,
+                  padding: e.padding,
+                  zIndex: 1,
+                };
+                a.styledMode ||
+                  ((w.fill = e.backgroundColor),
+                  (w.stroke = e.borderColor),
+                  (w["stroke-width"] = e.borderWidth));
+                n(w, function (a, b) {
+                  "undefined" === typeof a && delete w[b];
+                });
+              }
+              !k || (b && y(u))
+                ? b &&
+                  y(u) &&
+                  (k
+                    ? (w.text = u)
+                    : ((g.dataLabels = g.dataLabels || []),
+                      (k = g.dataLabels[h] =
+                        A
+                          ? C.text(u, 0, -9999, e.useHTML).addClass(
+                              "highcharts-data-label"
+                            )
+                          : C.label(
+                              u,
+                              0,
+                              -9999,
+                              e.shape,
+                              null,
+                              null,
+                              e.useHTML,
+                              null,
+                              "data-label"
+                            )),
+                      h || (g.dataLabel = k),
+                      k.addClass(
+                        " highcharts-data-label-color-" +
+                          g.colorIndex +
+                          " " +
+                          (e.className || "") +
+                          (e.useHTML ? " highcharts-tracker" : "")
+                      )),
+                  (k.options = e),
+                  k.attr(w),
+                  a.styledMode || k.css(r).shadow(e.shadow),
+                  k.added || k.add(J),
+                  e.textPath &&
+                    !e.useHTML &&
+                    (k.setTextPath(
+                      (g.getDataLabelPath && g.getDataLabelPath(k)) ||
+                        g.graphic,
+                      e.textPath
+                    ),
+                    g.dataLabelPath &&
+                      !e.textPath.enabled &&
+                      (g.dataLabelPath = g.dataLabelPath.destroy())),
+                  c.alignDataLabel(g, k, e, null, q))
+                : ((g.dataLabel = g.dataLabel && g.dataLabel.destroy()),
+                  g.dataLabels &&
+                    (1 === g.dataLabels.length
+                      ? delete g.dataLabels
+                      : delete g.dataLabels[h]),
+                  h || delete g.dataLabel,
+                  p &&
+                    ((g.connector = g.connector.destroy()),
+                    g.connectors &&
+                      (1 === g.connectors.length
+                        ? delete g.connectors
+                        : delete g.connectors[h])));
+            });
+          });
+        }
+        I(this, "afterDrawDataLabels");
+      };
+      m.prototype.alignDataLabel = function (d, g, c, a, f) {
+        var h = this,
+          n = this.chart,
+          m = this.isCartesian && n.inverted,
+          q = this.enabledDataSorting,
+          r = l(d.dlBox && d.dlBox.centerX, d.plotX, -9999),
+          v = l(d.plotY, -9999),
+          w = g.getBBox(),
+          x = c.rotation,
+          y = c.align,
+          u = n.isInsidePlot(r, Math.round(v), m),
+          b = "justify" === l(c.overflow, q ? "none" : "justify"),
+          k =
+            this.visible &&
+            !1 !== d.visible &&
+            (d.series.forceDL ||
+              (q && !b) ||
+              u ||
+              (c.inside &&
+                a &&
+                n.isInsidePlot(r, m ? a.x + 1 : a.y + a.height - 1, m)));
+        var t = function (a) {
+          q && h.xAxis && !b && h.setDataLabelStartPos(d, g, f, u, a);
+        };
+        if (k) {
+          var z = n.renderer.fontMetrics(
+            n.styledMode ? void 0 : c.style.fontSize,
+            g
+          ).b;
+          a = e(
+            {
+              x: m ? this.yAxis.len - v : r,
+              y: Math.round(m ? this.xAxis.len - r : v),
+              width: 0,
+              height: 0,
+            },
+            a
+          );
+          e(c, { width: w.width, height: w.height });
+          x
+            ? ((b = !1),
+              (r = n.renderer.rotCorr(z, x)),
+              (r = {
+                x: a.x + (c.x || 0) + a.width / 2 + r.x,
+                y:
+                  a.y +
+                  (c.y || 0) +
+                  { top: 0, middle: 0.5, bottom: 1 }[c.verticalAlign] *
+                    a.height,
+              }),
+              t(r),
+              g[f ? "attr" : "animate"](r).attr({ align: y }),
+              (t = (x + 720) % 360),
+              (t = 180 < t && 360 > t),
+              "left" === y
+                ? (r.y -= t ? w.height : 0)
+                : "center" === y
+                ? ((r.x -= w.width / 2), (r.y -= w.height / 2))
+                : "right" === y &&
+                  ((r.x -= w.width), (r.y -= t ? 0 : w.height)),
+              (g.placed = !0),
+              (g.alignAttr = r))
+            : (t(a), g.align(c, null, a), (r = g.alignAttr));
+          b && 0 <= a.height
+            ? this.justifyDataLabel(g, c, r, w, a, f)
+            : l(c.crop, !0) &&
+              (k =
+                n.isInsidePlot(r.x, r.y) &&
+                n.isInsidePlot(r.x + w.width, r.y + w.height));
+          if (c.shape && !x)
+            g[f ? "attr" : "animate"]({
+              anchorX: m ? n.plotWidth - d.plotY : d.plotX,
+              anchorY: m ? n.plotHeight - d.plotX : d.plotY,
+            });
+        }
+        f && q && (g.placed = !1);
+        k || (q && !b) || (g.hide(!0), (g.placed = !1));
+      };
+      m.prototype.setDataLabelStartPos = function (d, e, c, a, f) {
+        var g = this.chart,
+          h = g.inverted,
+          l = this.xAxis,
+          n = l.reversed,
+          m = h ? e.height / 2 : e.width / 2;
+        d = (d = d.pointWidth) ? d / 2 : 0;
+        l = h ? f.x : n ? -m - d : l.width - m + d;
+        f = h ? (n ? this.yAxis.height - m + d : -m - d) : f.y;
+        e.startXPos = l;
+        e.startYPos = f;
+        a
+          ? "hidden" === e.visibility &&
+            (e.show(), e.attr({ opacity: 0 }).animate({ opacity: 1 }))
+          : e.attr({ opacity: 1 }).animate({ opacity: 0 }, void 0, e.hide);
+        g.hasRendered &&
+          (c && e.attr({ x: e.startXPos, y: e.startYPos }), (e.placed = !0));
+      };
+      m.prototype.justifyDataLabel = function (d, e, c, a, f, h) {
+        var g = this.chart,
+          p = e.align,
+          l = e.verticalAlign,
+          n = d.box ? 0 : d.padding || 0,
+          m = e.x;
+        m = void 0 === m ? 0 : m;
+        var q = e.y;
+        var r = void 0 === q ? 0 : q;
+        q = c.x + n;
+        if (0 > q) {
+          "right" === p && 0 <= m
+            ? ((e.align = "left"), (e.inside = !0))
+            : (m -= q);
+          var v = !0;
+        }
+        q = c.x + a.width - n;
+        q > g.plotWidth &&
+          ("left" === p && 0 >= m
+            ? ((e.align = "right"), (e.inside = !0))
+            : (m += g.plotWidth - q),
+          (v = !0));
+        q = c.y + n;
+        0 > q &&
+          ("bottom" === l && 0 <= r
+            ? ((e.verticalAlign = "top"), (e.inside = !0))
+            : (r -= q),
+          (v = !0));
+        q = c.y + a.height - n;
+        q > g.plotHeight &&
+          ("top" === l && 0 >= r
+            ? ((e.verticalAlign = "bottom"), (e.inside = !0))
+            : (r += g.plotHeight - q),
+          (v = !0));
+        v && ((e.x = m), (e.y = r), (d.placed = !h), d.align(e, void 0, f));
+        return v;
+      };
+      L.pie &&
+        ((L.pie.prototype.dataLabelPositioners = {
+          radialDistributionY: function (d) {
+            return d.top + d.distributeBox.pos;
+          },
+          radialDistributionX: function (d, e, c, a) {
+            return d.getX(c < e.top + 2 || c > e.bottom - 2 ? a : c, e.half, e);
+          },
+          justify: function (d, e, c) {
+            return c[0] + (d.half ? -1 : 1) * (e + d.labelDistance);
+          },
+          alignToPlotEdges: function (d, e, c, a) {
+            d = d.getBBox().width;
+            return e ? d + a : c - d - a;
+          },
+          alignToConnectors: function (d, e, c, a) {
+            var f = 0,
+              g;
+            d.forEach(function (a) {
+              g = a.dataLabel.getBBox().width;
+              g > f && (f = g);
+            });
+            return e ? f + a : c - f - a;
+          },
+        }),
+        (L.pie.prototype.drawDataLabels = function () {
+          var d = this,
+            e = d.data,
+            c,
+            a = d.chart,
+            f = d.options.dataLabels || {},
+            p = f.connectorPadding,
+            n,
+            r = a.plotWidth,
+            v = a.plotHeight,
+            w = a.plotLeft,
+            x = Math.round(a.chartWidth / 3),
+            z,
+            C = d.center,
+            E = C[2] / 2,
+            u = C[1],
+            b,
+            k,
+            t,
+            F,
+            I = [[], []],
+            J,
+            L,
+            N,
+            P,
+            S = [0, 0, 0, 0],
+            Y = d.dataLabelPositioners,
+            W;
+          d.visible &&
+            (f.enabled || d._hasPointLabels) &&
+            (e.forEach(function (a) {
+              a.dataLabel &&
+                a.visible &&
+                a.dataLabel.shortened &&
+                (a.dataLabel
+                  .attr({ width: "auto" })
+                  .css({ width: "auto", textOverflow: "clip" }),
+                (a.dataLabel.shortened = !1));
+            }),
+            m.prototype.drawDataLabels.apply(d),
+            e.forEach(function (a) {
+              a.dataLabel &&
+                (a.visible
+                  ? (I[a.half].push(a),
+                    (a.dataLabel._pos = null),
+                    !y(f.style.width) &&
+                      !y(
+                        a.options.dataLabels &&
+                          a.options.dataLabels.style &&
+                          a.options.dataLabels.style.width
+                      ) &&
+                      a.dataLabel.getBBox().width > x &&
+                      (a.dataLabel.css({ width: Math.round(0.7 * x) + "px" }),
+                      (a.dataLabel.shortened = !0)))
+                  : ((a.dataLabel = a.dataLabel.destroy()),
+                    a.dataLabels &&
+                      1 === a.dataLabels.length &&
+                      delete a.dataLabels));
+            }),
+            I.forEach(function (e, g) {
+              var n = e.length,
+                m = [],
+                q;
+              if (n) {
+                d.sortByAngle(e, g - 0.5);
+                if (0 < d.maxLabelDistance) {
+                  var A = Math.max(0, u - E - d.maxLabelDistance);
+                  var B = Math.min(u + E + d.maxLabelDistance, a.plotHeight);
+                  e.forEach(function (b) {
+                    0 < b.labelDistance &&
+                      b.dataLabel &&
+                      ((b.top = Math.max(0, u - E - b.labelDistance)),
+                      (b.bottom = Math.min(
+                        u + E + b.labelDistance,
+                        a.plotHeight
+                      )),
+                      (q = b.dataLabel.getBBox().height || 21),
+                      (b.distributeBox = {
+                        target: b.labelPosition.natural.y - b.top + q / 2,
+                        size: q,
+                        rank: b.y,
+                      }),
+                      m.push(b.distributeBox));
+                  });
+                  A = B + q - A;
+                  h.distribute(m, A, A / 5);
+                }
+                for (P = 0; P < n; P++) {
+                  c = e[P];
+                  t = c.labelPosition;
+                  b = c.dataLabel;
+                  N = !1 === c.visible ? "hidden" : "inherit";
+                  L = A = t.natural.y;
+                  m &&
+                    y(c.distributeBox) &&
+                    ("undefined" === typeof c.distributeBox.pos
+                      ? (N = "hidden")
+                      : ((F = c.distributeBox.size),
+                        (L = Y.radialDistributionY(c))));
+                  delete c.positionIndex;
+                  if (f.justify) J = Y.justify(c, E, C);
+                  else
+                    switch (f.alignTo) {
+                      case "connectors":
+                        J = Y.alignToConnectors(e, g, r, w);
+                        break;
+                      case "plotEdges":
+                        J = Y.alignToPlotEdges(b, g, r, w);
+                        break;
+                      default:
+                        J = Y.radialDistributionX(d, c, L, A);
+                    }
+                  b._attr = { visibility: N, align: t.alignment };
+                  W = c.options.dataLabels || {};
+                  b._pos = {
+                    x:
+                      J +
+                      l(W.x, f.x) +
+                      ({ left: p, right: -p }[t.alignment] || 0),
+                    y: L + l(W.y, f.y) - 10,
+                  };
+                  t.final.x = J;
+                  t.final.y = L;
+                  l(f.crop, !0) &&
+                    ((k = b.getBBox().width),
+                    (A = null),
+                    J - k < p && 1 === g
+                      ? ((A = Math.round(k - J + p)),
+                        (S[3] = Math.max(A, S[3])))
+                      : J + k > r - p &&
+                        0 === g &&
+                        ((A = Math.round(J + k - r + p)),
+                        (S[1] = Math.max(A, S[1]))),
+                    0 > L - F / 2
+                      ? (S[0] = Math.max(Math.round(-L + F / 2), S[0]))
+                      : L + F / 2 > v &&
+                        (S[2] = Math.max(Math.round(L + F / 2 - v), S[2])),
+                    (b.sideOverflow = A));
+                }
+              }
+            }),
+            0 === K(S) || this.verifyDataLabelOverflow(S)) &&
+            (this.placeDataLabels(),
+            this.points.forEach(function (c) {
+              W = D(f, c.options.dataLabels);
+              if ((n = l(W.connectorWidth, 1))) {
+                var e;
+                z = c.connector;
+                if (
+                  (b = c.dataLabel) &&
+                  b._pos &&
+                  c.visible &&
+                  0 < c.labelDistance
+                ) {
+                  N = b._attr.visibility;
+                  if ((e = !z))
+                    (c.connector = z =
+                      a.renderer
+                        .path()
+                        .addClass(
+                          "highcharts-data-label-connector  highcharts-color-" +
+                            c.colorIndex +
+                            (c.className ? " " + c.className : "")
+                        )
+                        .add(d.dataLabelsGroup)),
+                      a.styledMode ||
+                        z.attr({
+                          "stroke-width": n,
+                          stroke: W.connectorColor || c.color || "#666666",
+                        });
+                  z[e ? "attr" : "animate"]({ d: c.getConnectorPath() });
+                  z.attr("visibility", N);
+                } else z && (c.connector = z.destroy());
+              }
+            }));
+        }),
+        (L.pie.prototype.placeDataLabels = function () {
+          this.points.forEach(function (d) {
+            var e = d.dataLabel,
+              c;
+            e &&
+              d.visible &&
+              ((c = e._pos)
+                ? (e.sideOverflow &&
+                    ((e._attr.width = Math.max(
+                      e.getBBox().width - e.sideOverflow,
+                      0
+                    )),
+                    e.css({
+                      width: e._attr.width + "px",
+                      textOverflow:
+                        (this.options.dataLabels.style || {}).textOverflow ||
+                        "ellipsis",
+                    }),
+                    (e.shortened = !0)),
+                  e.attr(e._attr),
+                  e[e.moved ? "animate" : "attr"](c),
+                  (e.moved = !0))
+                : e && e.attr({ y: -9999 }));
+            delete d.distributeBox;
+          }, this);
+        }),
+        (L.pie.prototype.alignDataLabel = f),
+        (L.pie.prototype.verifyDataLabelOverflow = function (d) {
+          var e = this.center,
+            c = this.options,
+            a = c.center,
+            f = c.minSize || 80,
+            h = null !== c.size;
+          if (!h) {
+            if (null !== a[0]) var l = Math.max(e[2] - Math.max(d[1], d[3]), f);
+            else
+              (l = Math.max(e[2] - d[1] - d[3], f)),
+                (e[0] += (d[3] - d[1]) / 2);
+            null !== a[1]
+              ? (l = C(l, f, e[2] - Math.max(d[0], d[2])))
+              : ((l = C(l, f, e[2] - d[0] - d[2])),
+                (e[1] += (d[0] - d[2]) / 2));
+            l < e[2]
+              ? ((e[2] = l),
+                (e[3] = Math.min(J(c.innerSize || 0, l), l)),
+                this.translate(e),
+                this.drawDataLabels && this.drawDataLabels())
+              : (h = !0);
+          }
+          return h;
+        }));
+      L.column &&
+        (L.column.prototype.alignDataLabel = function (d, e, c, a, f) {
+          var g = this.chart.inverted,
+            h = d.series,
+            n = d.dlBox || d.shapeArgs,
+            q = l(d.below, d.plotY > l(this.translatedThreshold, h.yAxis.len)),
+            r = l(c.inside, !!this.options.stacking);
+          n &&
+            ((a = D(n)),
+            0 > a.y && ((a.height += a.y), (a.y = 0)),
+            (n = a.y + a.height - h.yAxis.len),
+            0 < n && n < a.height && (a.height -= n),
+            g &&
+              (a = {
+                x: h.yAxis.len - a.y - a.height,
+                y: h.xAxis.len - a.x - a.width,
+                width: a.height,
+                height: a.width,
+              }),
+            r ||
+              (g
+                ? ((a.x += q ? 0 : a.width), (a.width = 0))
+                : ((a.y += q ? a.height : 0), (a.height = 0))));
+          c.align = l(c.align, !g || r ? "center" : q ? "right" : "left");
+          c.verticalAlign = l(
+            c.verticalAlign,
+            g || r ? "middle" : q ? "top" : "bottom"
+          );
+          m.prototype.alignDataLabel.call(this, d, e, c, a, f);
+          c.inside && d.contrastColor && e.css({ color: d.contrastColor });
+        });
+    }
+  );
+  N(
+    m,
+    "Extensions/OverlappingDataLabels.js",
+    [m["Core/Chart/Chart.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.addEvent,
+        z = h.fireEvent,
+        F = h.isArray,
+        L = h.isNumber,
+        K = h.objectEach,
+        C = h.pick;
+      m(f, "render", function () {
+        var f = [];
+        (this.labelCollectors || []).forEach(function (e) {
+          f = f.concat(e());
+        });
+        (this.yAxis || []).forEach(function (e) {
+          e.stacking &&
+            e.options.stackLabels &&
+            !e.options.stackLabels.allowOverlap &&
+            K(e.stacking.stacks, function (e) {
+              K(e, function (e) {
+                f.push(e.label);
+              });
+            });
+        });
+        (this.series || []).forEach(function (e) {
+          var h = e.options.dataLabels;
+          e.visible &&
+            (!1 !== h.enabled || e._hasPointLabels) &&
+            (e.nodes || e.points).forEach(function (e) {
+              e.visible &&
+                (F(e.dataLabels)
+                  ? e.dataLabels
+                  : e.dataLabel
+                  ? [e.dataLabel]
+                  : []
+                ).forEach(function (h) {
+                  var m = h.options;
+                  h.labelrank = C(
+                    m.labelrank,
+                    e.labelrank,
+                    e.shapeArgs && e.shapeArgs.height
+                  );
+                  m.allowOverlap || f.push(h);
+                });
+            });
+        });
+        this.hideOverlappingLabels(f);
+      });
+      f.prototype.hideOverlappingLabels = function (f) {
+        var e = this,
+          h = f.length,
+          m = e.renderer,
+          x,
+          y,
+          n,
+          l = !1;
+        var C = function (d) {
+          var e,
+            c = d.box ? 0 : d.padding || 0,
+            a = (e = 0),
+            f;
+          if (d && (!d.alignAttr || d.placed)) {
+            var h = d.alignAttr || { x: d.attr("x"), y: d.attr("y") };
+            var l = d.parentGroup;
+            d.width ||
+              ((e = d.getBBox()),
+              (d.width = e.width),
+              (d.height = e.height),
+              (e = m.fontMetrics(null, d.element).h));
+            var n = d.width - 2 * c;
+            (f = { left: "0", center: "0.5", right: "1" }[d.alignValue])
+              ? (a = +f * n)
+              : L(d.x) &&
+                Math.round(d.x) !== d.translateX &&
+                (a = d.x - d.translateX);
+            return {
+              x: h.x + (l.translateX || 0) + c - (a || 0),
+              y: h.y + (l.translateY || 0) + c - e,
+              width: d.width - 2 * c,
+              height: d.height - 2 * c,
+            };
+          }
+        };
+        for (y = 0; y < h; y++)
+          if ((x = f[y]))
+            (x.oldOpacity = x.opacity),
+              (x.newOpacity = 1),
+              (x.absoluteBox = C(x));
+        f.sort(function (d, e) {
+          return (e.labelrank || 0) - (d.labelrank || 0);
+        });
+        for (y = 0; y < h; y++) {
+          var w = (C = f[y]) && C.absoluteBox;
+          for (x = y + 1; x < h; ++x) {
+            var r = (n = f[x]) && n.absoluteBox;
+            !w ||
+              !r ||
+              C === n ||
+              0 === C.newOpacity ||
+              0 === n.newOpacity ||
+              r.x >= w.x + w.width ||
+              r.x + r.width <= w.x ||
+              r.y >= w.y + w.height ||
+              r.y + r.height <= w.y ||
+              ((C.labelrank < n.labelrank ? C : n).newOpacity = 0);
+          }
+        }
+        f.forEach(function (d) {
+          if (d) {
+            var f = d.newOpacity;
+            d.oldOpacity !== f &&
+              (d.alignAttr && d.placed
+                ? (d[f ? "removeClass" : "addClass"](
+                    "highcharts-data-label-hidden"
+                  ),
+                  (l = !0),
+                  (d.alignAttr.opacity = f),
+                  d[d.isOld ? "animate" : "attr"](
+                    d.alignAttr,
+                    null,
+                    function () {
+                      e.styledMode ||
+                        d.css({ pointerEvents: f ? "auto" : "none" });
+                      d.visibility = f ? "inherit" : "hidden";
+                    }
+                  ),
+                  z(e, "afterHideOverlappingLabel"))
+                : d.attr({ opacity: f }));
+            d.isOld = !0;
+          }
+        });
+        l && z(e, "afterHideAllOverlappingLabels");
+      };
+    }
+  );
+  N(
+    m,
+    "Core/Interaction.js",
+    [
+      m["Core/Series/Series.js"],
+      m["Core/Chart/Chart.js"],
+      m["Core/Globals.js"],
+      m["Core/Legend.js"],
+      m["Series/LineSeries.js"],
+      m["Core/Options.js"],
+      m["Core/Series/Point.js"],
+      m["Core/Utilities.js"],
+    ],
+    function (f, h, m, z, F, L, K, C) {
+      f = f.seriesTypes;
+      var y = m.hasTouch,
+        e = m.svg,
+        I = L.defaultOptions,
+        v = C.addEvent,
+        x = C.createElement,
+        D = C.css,
+        n = C.defined,
+        l = C.extend,
+        J = C.fireEvent,
+        w = C.isArray,
+        r = C.isFunction,
+        d = C.isNumber,
+        g = C.isObject,
+        c = C.merge,
+        a = C.objectEach,
+        q = C.pick;
+      ("");
+      m = m.TrackerMixin = {
+        drawTrackerPoint: function () {
+          var a = this,
+            c = a.chart,
+            d = c.pointer,
+            e = function (a) {
+              var c = d.getPointFromEvent(a);
+              "undefined" !== typeof c &&
+                ((d.isDirectTouch = !0), c.onMouseOver(a));
+            },
+            f;
+          a.points.forEach(function (a) {
+            f = w(a.dataLabels)
+              ? a.dataLabels
+              : a.dataLabel
+              ? [a.dataLabel]
+              : [];
+            a.graphic && (a.graphic.element.point = a);
+            f.forEach(function (c) {
+              c.div ? (c.div.point = a) : (c.element.point = a);
+            });
+          });
+          a._hasTracking ||
+            (a.trackerGroups.forEach(function (f) {
+              if (a[f]) {
+                a[f]
+                  .addClass("highcharts-tracker")
+                  .on("mouseover", e)
+                  .on("mouseout", function (a) {
+                    d.onTrackerMouseOut(a);
+                  });
+                if (y) a[f].on("touchstart", e);
+                !c.styledMode &&
+                  a.options.cursor &&
+                  a[f].css(D).css({ cursor: a.options.cursor });
+              }
+            }),
+            (a._hasTracking = !0));
+          J(this, "afterDrawTracker");
+        },
+        drawTrackerGraph: function () {
+          var a = this,
+            c = a.options,
+            d = c.trackByArea,
+            f = [].concat(d ? a.areaPath : a.graphPath),
+            g = a.chart,
+            h = g.pointer,
+            l = g.renderer,
+            n = g.options.tooltip.snap,
+            m = a.tracker,
+            q = function (b) {
+              if (g.hoverSeries !== a) a.onMouseOver();
+            },
+            b = "rgba(192,192,192," + (e ? 0.0001 : 0.002) + ")";
+          m
+            ? m.attr({ d: f })
+            : a.graph &&
+              ((a.tracker = l
+                .path(f)
+                .attr({
+                  visibility: a.visible ? "visible" : "hidden",
+                  zIndex: 2,
+                })
+                .addClass(
+                  d ? "highcharts-tracker-area" : "highcharts-tracker-line"
+                )
+                .add(a.group)),
+              g.styledMode ||
+                a.tracker.attr({
+                  "stroke-linecap": "round",
+                  "stroke-linejoin": "round",
+                  stroke: b,
+                  fill: d ? b : "none",
+                  "stroke-width": a.graph.strokeWidth() + (d ? 0 : 2 * n),
+                }),
+              [a.tracker, a.markerGroup].forEach(function (a) {
+                a.addClass("highcharts-tracker")
+                  .on("mouseover", q)
+                  .on("mouseout", function (a) {
+                    h.onTrackerMouseOut(a);
+                  });
+                c.cursor && !g.styledMode && a.css({ cursor: c.cursor });
+                if (y) a.on("touchstart", q);
+              }));
+          J(this, "afterDrawTracker");
+        },
+      };
+      f.column && (f.column.prototype.drawTracker = m.drawTrackerPoint);
+      f.pie && (f.pie.prototype.drawTracker = m.drawTrackerPoint);
+      f.scatter && (f.scatter.prototype.drawTracker = m.drawTrackerPoint);
+      l(z.prototype, {
+        setItemEvents: function (a, d, e) {
+          var f = this,
+            g = f.chart.renderer.boxWrapper,
+            h = a instanceof K,
+            p = "highcharts-legend-" + (h ? "point" : "series") + "-active",
+            l = f.chart.styledMode;
+          (e ? [d, a.legendSymbol] : [a.legendGroup]).forEach(function (e) {
+            if (e)
+              e.on("mouseover", function () {
+                a.visible &&
+                  f.allItems.forEach(function (c) {
+                    a !== c && c.setState("inactive", !h);
+                  });
+                a.setState("hover");
+                a.visible && g.addClass(p);
+                l || d.css(f.options.itemHoverStyle);
+              })
+                .on("mouseout", function () {
+                  f.chart.styledMode ||
+                    d.css(c(a.visible ? f.itemStyle : f.itemHiddenStyle));
+                  f.allItems.forEach(function (c) {
+                    a !== c && c.setState("", !h);
+                  });
+                  g.removeClass(p);
+                  a.setState();
+                })
+                .on("click", function (c) {
+                  var b = function () {
+                    a.setVisible && a.setVisible();
+                    f.allItems.forEach(function (b) {
+                      a !== b && b.setState(a.visible ? "inactive" : "", !h);
+                    });
+                  };
+                  g.removeClass(p);
+                  c = { browserEvent: c };
+                  a.firePointEvent
+                    ? a.firePointEvent("legendItemClick", c, b)
+                    : J(a, "legendItemClick", c, b);
+                });
+          });
+        },
+        createCheckboxForItem: function (a) {
+          a.checkbox = x(
+            "input",
+            {
+              type: "checkbox",
+              className: "highcharts-legend-checkbox",
+              checked: a.selected,
+              defaultChecked: a.selected,
+            },
+            this.options.itemCheckboxStyle,
+            this.chart.container
+          );
+          v(a.checkbox, "click", function (c) {
+            J(
+              a.series || a,
+              "checkboxClick",
+              { checked: c.target.checked, item: a },
+              function () {
+                a.select();
+              }
+            );
+          });
+        },
+      });
+      l(h.prototype, {
+        showResetZoom: function () {
+          function a() {
+            c.zoomOut();
+          }
+          var c = this,
+            d = I.lang,
+            e = c.options.chart.resetZoomButton,
+            f = e.theme,
+            g = f.states,
+            h =
+              "chart" === e.relativeTo || "spaceBox" === e.relativeTo
+                ? null
+                : "plotBox";
+          J(this, "beforeShowResetZoom", null, function () {
+            c.resetZoomButton = c.renderer
+              .button(d.resetZoom, null, null, a, f, g && g.hover)
+              .attr({ align: e.position.align, title: d.resetZoomTitle })
+              .addClass("highcharts-reset-zoom")
+              .add()
+              .align(e.position, !1, h);
+          });
+          J(this, "afterShowResetZoom");
+        },
+        zoomOut: function () {
+          J(this, "selection", { resetSelection: !0 }, this.zoom);
+        },
+        zoom: function (a) {
+          var c = this,
+            d,
+            e = c.pointer,
+            f = !1,
+            h = c.inverted ? e.mouseDownX : e.mouseDownY;
+          !a || a.resetSelection
+            ? (c.axes.forEach(function (a) {
+                d = a.zoom();
+              }),
+              (e.initiated = !1))
+            : a.xAxis.concat(a.yAxis).forEach(function (a) {
+                var g = a.axis,
+                  p = c.inverted ? g.left : g.top,
+                  b = c.inverted ? p + g.width : p + g.height,
+                  k = g.isXAxis,
+                  l = !1;
+                if ((!k && h >= p && h <= b) || k || !n(h)) l = !0;
+                e[k ? "zoomX" : "zoomY"] &&
+                  l &&
+                  ((d = g.zoom(a.min, a.max)), g.displayBtn && (f = !0));
+              });
+          var p = c.resetZoomButton;
+          f && !p
+            ? c.showResetZoom()
+            : !f && g(p) && (c.resetZoomButton = p.destroy());
+          d &&
+            c.redraw(
+              q(c.options.chart.animation, a && a.animation, 100 > c.pointCount)
+            );
+        },
+        pan: function (a, c) {
+          var e = this,
+            f = e.hoverPoints,
+            g = e.options.chart,
+            h = e.options.mapNavigation && e.options.mapNavigation.enabled,
+            p;
+          c = "object" === typeof c ? c : { enabled: c, type: "x" };
+          g && g.panning && (g.panning = c);
+          var l = c.type;
+          J(this, "pan", { originalEvent: a }, function () {
+            f &&
+              f.forEach(function (a) {
+                a.setState();
+              });
+            var c = [1];
+            "xy" === l ? (c = [1, 0]) : "y" === l && (c = [0]);
+            c.forEach(function (c) {
+              var b = e[c ? "xAxis" : "yAxis"][0],
+                f = b.horiz,
+                g = a[f ? "chartX" : "chartY"];
+              f = f ? "mouseDownX" : "mouseDownY";
+              var n = e[f],
+                m = (b.pointRange || 0) / 2,
+                r =
+                  (b.reversed && !e.inverted) || (!b.reversed && e.inverted)
+                    ? -1
+                    : 1,
+                u = b.getExtremes(),
+                v = b.toValue(n - g, !0) + m * r;
+              r = b.toValue(n + b.len - g, !0) - m * r;
+              var w = r < v;
+              n = w ? r : v;
+              v = w ? v : r;
+              var A = b.hasVerticalPanning(),
+                x = b.panningState;
+              b.series.forEach(function (a) {
+                if (A && !c && (!x || x.isDirty)) {
+                  var b = a.getProcessedData(!0);
+                  a = a.getExtremes(b.yData, !0);
+                  x ||
+                    (x = {
+                      startMin: Number.MAX_VALUE,
+                      startMax: -Number.MAX_VALUE,
+                    });
+                  d(a.dataMin) &&
+                    d(a.dataMax) &&
+                    ((x.startMin = Math.min(a.dataMin, x.startMin)),
+                    (x.startMax = Math.max(a.dataMax, x.startMax)));
+                }
+              });
+              r = Math.min(
+                q(null === x || void 0 === x ? void 0 : x.startMin, u.dataMin),
+                m ? u.min : b.toValue(b.toPixels(u.min) - b.minPixelPadding)
+              );
+              m = Math.max(
+                q(null === x || void 0 === x ? void 0 : x.startMax, u.dataMax),
+                m ? u.max : b.toValue(b.toPixels(u.max) + b.minPixelPadding)
+              );
+              b.panningState = x;
+              b.isOrdinal ||
+                ((w = r - n),
+                0 < w && ((v += w), (n = r)),
+                (w = v - m),
+                0 < w && ((v = m), (n -= w)),
+                b.series.length &&
+                  n !== u.min &&
+                  v !== u.max &&
+                  n >= r &&
+                  v <= m &&
+                  (b.setExtremes(n, v, !1, !1, { trigger: "pan" }),
+                  e.resetZoomButton ||
+                    h ||
+                    n === r ||
+                    v === m ||
+                    !l.match("y") ||
+                    (e.showResetZoom(), (b.displayBtn = !1)),
+                  (p = !0)),
+                (e[f] = g));
+            });
+            p && e.redraw(!1);
+            D(e.container, { cursor: "move" });
+          });
+        },
+      });
+      l(K.prototype, {
+        select: function (a, c) {
+          var d = this,
+            e = d.series,
+            f = e.chart;
+          this.selectedStaging = a = q(a, !d.selected);
+          d.firePointEvent(
+            a ? "select" : "unselect",
+            { accumulate: c },
+            function () {
+              d.selected = d.options.selected = a;
+              e.options.data[e.data.indexOf(d)] = d.options;
+              d.setState(a && "select");
+              c ||
+                f.getSelectedPoints().forEach(function (a) {
+                  var c = a.series;
+                  a.selected &&
+                    a !== d &&
+                    ((a.selected = a.options.selected = !1),
+                    (c.options.data[c.data.indexOf(a)] = a.options),
+                    a.setState(
+                      f.hoverPoints && c.options.inactiveOtherPoints
+                        ? "inactive"
+                        : ""
+                    ),
+                    a.firePointEvent("unselect"));
+                });
+            }
+          );
+          delete this.selectedStaging;
+        },
+        onMouseOver: function (a) {
+          var c = this.series.chart,
+            d = c.pointer;
+          a = a
+            ? d.normalize(a)
+            : d.getChartCoordinatesFromPoint(this, c.inverted);
+          d.runPointActions(a, this);
+        },
+        onMouseOut: function () {
+          var a = this.series.chart;
+          this.firePointEvent("mouseOut");
+          this.series.options.inactiveOtherPoints ||
+            (a.hoverPoints || []).forEach(function (a) {
+              a.setState();
+            });
+          a.hoverPoints = a.hoverPoint = null;
+        },
+        importEvents: function () {
+          if (!this.hasImportedEvents) {
+            var d = this,
+              e = c(d.series.options.point, d.options).events;
+            d.events = e;
+            a(e, function (a, c) {
+              r(a) && v(d, c, a);
+            });
+            this.hasImportedEvents = !0;
+          }
+        },
+        setState: function (a, c) {
+          var d = this.series,
+            e = this.state,
+            f = d.options.states[a || "normal"] || {},
+            g = I.plotOptions[d.type].marker && d.options.marker,
+            h = g && !1 === g.enabled,
+            p = (g && g.states && g.states[a || "normal"]) || {},
+            n = !1 === p.enabled,
+            m = d.stateMarkerGraphic,
+            b = this.marker || {},
+            k = d.chart,
+            r = d.halo,
+            v,
+            w = g && d.markerAttribs;
+          a = a || "";
+          if (
+            !(
+              (a === this.state && !c) ||
+              (this.selected && "select" !== a) ||
+              !1 === f.enabled ||
+              (a && (n || (h && !1 === p.enabled))) ||
+              (a && b.states && b.states[a] && !1 === b.states[a].enabled)
+            )
+          ) {
+            this.state = a;
+            w && (v = d.markerAttribs(this, a));
+            if (this.graphic) {
+              e && this.graphic.removeClass("highcharts-point-" + e);
+              a && this.graphic.addClass("highcharts-point-" + a);
+              if (!k.styledMode) {
+                var x = d.pointAttribs(this, a);
+                var y = q(k.options.chart.animation, f.animation);
+                d.options.inactiveOtherPoints &&
+                  x.opacity &&
+                  ((this.dataLabels || []).forEach(function (a) {
+                    a && a.animate({ opacity: x.opacity }, y);
+                  }),
+                  this.connector &&
+                    this.connector.animate({ opacity: x.opacity }, y));
+                this.graphic.animate(x, y);
+              }
+              v &&
+                this.graphic.animate(
+                  v,
+                  q(k.options.chart.animation, p.animation, g.animation)
+                );
+              m && m.hide();
+            } else {
+              if (a && p) {
+                e = b.symbol || d.symbol;
+                m && m.currentSymbol !== e && (m = m.destroy());
+                if (v)
+                  if (m) m[c ? "animate" : "attr"]({ x: v.x, y: v.y });
+                  else
+                    e &&
+                      ((d.stateMarkerGraphic = m =
+                        k.renderer
+                          .symbol(e, v.x, v.y, v.width, v.height)
+                          .add(d.markerGroup)),
+                      (m.currentSymbol = e));
+                !k.styledMode && m && m.attr(d.pointAttribs(this, a));
+              }
+              m &&
+                (m[a && this.isInside ? "show" : "hide"](),
+                (m.element.point = this));
+            }
+            a = f.halo;
+            f = ((m = this.graphic || m) && m.visibility) || "inherit";
+            a && a.size && m && "hidden" !== f && !this.isCluster
+              ? (r || (d.halo = r = k.renderer.path().add(m.parentGroup)),
+                r.show()[c ? "animate" : "attr"]({ d: this.haloPath(a.size) }),
+                r.attr({
+                  class:
+                    "highcharts-halo highcharts-color-" +
+                    q(this.colorIndex, d.colorIndex) +
+                    (this.className ? " " + this.className : ""),
+                  visibility: f,
+                  zIndex: -1,
+                }),
+                (r.point = this),
+                k.styledMode ||
+                  r.attr(
+                    l(
+                      {
+                        fill: this.color || d.color,
+                        "fill-opacity": a.opacity,
+                      },
+                      a.attributes
+                    )
+                  ))
+              : r &&
+                r.point &&
+                r.point.haloPath &&
+                r.animate({ d: r.point.haloPath(0) }, null, r.hide);
+            J(this, "afterSetState");
+          }
+        },
+        haloPath: function (a) {
+          return this.series.chart.renderer.symbols.circle(
+            Math.floor(this.plotX) - a,
+            this.plotY - a,
+            2 * a,
+            2 * a
+          );
+        },
+      });
+      l(F.prototype, {
+        onMouseOver: function () {
+          var a = this.chart,
+            c = a.hoverSeries;
+          a.pointer.setHoverChartIndex();
+          if (c && c !== this) c.onMouseOut();
+          this.options.events.mouseOver && J(this, "mouseOver");
+          this.setState("hover");
+          a.hoverSeries = this;
+        },
+        onMouseOut: function () {
+          var a = this.options,
+            c = this.chart,
+            d = c.tooltip,
+            e = c.hoverPoint;
+          c.hoverSeries = null;
+          if (e) e.onMouseOut();
+          this && a.events.mouseOut && J(this, "mouseOut");
+          !d ||
+            this.stickyTracking ||
+            (d.shared && !this.noSharedTooltip) ||
+            d.hide();
+          c.series.forEach(function (a) {
+            a.setState("", !0);
+          });
+        },
+        setState: function (a, c) {
+          var d = this,
+            e = d.options,
+            f = d.graph,
+            g = e.inactiveOtherPoints,
+            h = e.states,
+            l = e.lineWidth,
+            m = e.opacity,
+            n = q(
+              h[a || "normal"] && h[a || "normal"].animation,
+              d.chart.options.chart.animation
+            );
+          e = 0;
+          a = a || "";
+          if (
+            d.state !== a &&
+            ([d.group, d.markerGroup, d.dataLabelsGroup].forEach(function (b) {
+              b &&
+                (d.state && b.removeClass("highcharts-series-" + d.state),
+                a && b.addClass("highcharts-series-" + a));
+            }),
+            (d.state = a),
+            !d.chart.styledMode)
+          ) {
+            if (h[a] && !1 === h[a].enabled) return;
+            a &&
+              ((l = h[a].lineWidth || l + (h[a].lineWidthPlus || 0)),
+              (m = q(h[a].opacity, m)));
+            if (f && !f.dashstyle)
+              for (
+                h = { "stroke-width": l }, f.animate(h, n);
+                d["zone-graph-" + e];
+
+              )
+                d["zone-graph-" + e].attr(h), (e += 1);
+            g ||
+              [
+                d.group,
+                d.markerGroup,
+                d.dataLabelsGroup,
+                d.labelBySeries,
+              ].forEach(function (a) {
+                a && a.animate({ opacity: m }, n);
+              });
+          }
+          c && g && d.points && d.setAllPointsToState(a);
+        },
+        setAllPointsToState: function (a) {
+          this.points.forEach(function (c) {
+            c.setState && c.setState(a);
+          });
+        },
+        setVisible: function (a, c) {
+          var d = this,
+            e = d.chart,
+            f = d.legendItem,
+            g = e.options.chart.ignoreHiddenSeries,
+            h = d.visible;
+          var l = (d.visible =
+            a =
+            d.options.visible =
+            d.userOptions.visible =
+              "undefined" === typeof a ? !h : a)
+            ? "show"
+            : "hide";
+          ["group", "dataLabelsGroup", "markerGroup", "tracker", "tt"].forEach(
+            function (a) {
+              if (d[a]) d[a][l]();
+            }
+          );
+          if (
+            e.hoverSeries === d ||
+            (e.hoverPoint && e.hoverPoint.series) === d
+          )
+            d.onMouseOut();
+          f && e.legend.colorizeItem(d, a);
+          d.isDirty = !0;
+          d.options.stacking &&
+            e.series.forEach(function (a) {
+              a.options.stacking && a.visible && (a.isDirty = !0);
+            });
+          d.linkedSeries.forEach(function (c) {
+            c.setVisible(a, !1);
+          });
+          g && (e.isDirtyBox = !0);
+          J(d, l);
+          !1 !== c && e.redraw();
+        },
+        show: function () {
+          this.setVisible(!0);
+        },
+        hide: function () {
+          this.setVisible(!1);
+        },
+        select: function (a) {
+          this.selected =
+            a =
+            this.options.selected =
+              "undefined" === typeof a ? !this.selected : a;
+          this.checkbox && (this.checkbox.checked = a);
+          J(this, a ? "select" : "unselect");
+        },
+        drawTracker: m.drawTrackerGraph,
+      });
+    }
+  );
+  N(
+    m,
+    "Core/Responsive.js",
+    [m["Core/Chart/Chart.js"], m["Core/Utilities.js"]],
+    function (f, h) {
+      var m = h.find,
+        z = h.isArray,
+        F = h.isObject,
+        L = h.merge,
+        K = h.objectEach,
+        C = h.pick,
+        y = h.splat,
+        e = h.uniqueKey;
+      f.prototype.setResponsive = function (f, h) {
+        var v = this.options.responsive,
+          y = [],
+          n = this.currentResponsive;
+        !h &&
+          v &&
+          v.rules &&
+          v.rules.forEach(function (f) {
+            "undefined" === typeof f._id && (f._id = e());
+            this.matchResponsiveRule(f, y);
+          }, this);
+        h = L.apply(
+          0,
+          y.map(function (e) {
+            return m(v.rules, function (f) {
+              return f._id === e;
+            }).chartOptions;
+          })
+        );
+        h.isResponsiveOptions = !0;
+        y = y.toString() || void 0;
+        y !== (n && n.ruleIds) &&
+          (n && this.update(n.undoOptions, f, !0),
+          y
+            ? ((n = this.currentOptions(h)),
+              (n.isResponsiveOptions = !0),
+              (this.currentResponsive = {
+                ruleIds: y,
+                mergedOptions: h,
+                undoOptions: n,
+              }),
+              this.update(h, f, !0))
+            : (this.currentResponsive = void 0));
+      };
+      f.prototype.matchResponsiveRule = function (e, f) {
+        var h = e.condition;
+        (
+          h.callback ||
+          function () {
+            return (
+              this.chartWidth <= C(h.maxWidth, Number.MAX_VALUE) &&
+              this.chartHeight <= C(h.maxHeight, Number.MAX_VALUE) &&
+              this.chartWidth >= C(h.minWidth, 0) &&
+              this.chartHeight >= C(h.minHeight, 0)
+            );
+          }
+        ).call(this) && f.push(e._id);
+      };
+      f.prototype.currentOptions = function (e) {
+        function f(e, l, m, v) {
+          var n;
+          K(e, function (d, e) {
+            if (!v && -1 < h.collectionsWithUpdate.indexOf(e))
+              for (
+                d = y(d), m[e] = [], n = 0;
+                n < Math.max(d.length, l[e].length);
+                n++
+              )
+                l[e][n] &&
+                  (void 0 === d[n]
+                    ? (m[e][n] = l[e][n])
+                    : ((m[e][n] = {}), f(d[n], l[e][n], m[e][n], v + 1)));
+            else
+              F(d)
+                ? ((m[e] = z(d) ? [] : {}), f(d, l[e] || {}, m[e], v + 1))
+                : (m[e] = "undefined" === typeof l[e] ? null : l[e]);
+          });
+        }
+        var h = this,
+          m = {};
+        f(e, this.options, m, 0);
+        return m;
+      };
+    }
+  );
+  N(m, "masters/highcharts.src.js", [m["Core/Globals.js"]], function (f) {
+    return f;
+  });
+  m["masters/highcharts.src.js"]._modules = m;
+  return m["masters/highcharts.src.js"];
+});
+//# sourceMappingURL=highcharts.js.map
diff --git a/notemyprogress/js/highcharts/highcharts.src.js b/notemyprogress/js/highcharts/highcharts.src.js
index eab1ec4f806f46453de3965511828507d970445f..27bc6118483898f892d9945fccb679437b3cf465 100644
--- a/notemyprogress/js/highcharts/highcharts.src.js
+++ b/notemyprogress/js/highcharts/highcharts.src.js
@@ -506,7 +506,7 @@
               win.console &&
               error.messages.indexOf(message) === -1 // prevent console flooting
             ) {
-              console.log(message); // eslint-disable-line no-console
+              //console.log(message); // eslint-disable-line no-console
             }
           };
         if (typeof params !== "undefined") {
@@ -10608,7 +10608,7 @@
        * });
        *
        * // Use the Time object
-       * console.log(
+       * //console.log(
        *        'Current time in New York',
        *        chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())
        * );
@@ -10912,7 +10912,7 @@
          * @example
          * const time = new Highcharts.Time();
          * const s = time.dateFormat('%Y-%m-%d %H:%M:%S', Date.UTC(2020, 0, 1));
-         * console.log(s); // => 2020-01-01 00:00:00
+         * //console.log(s); // => 2020-01-01 00:00:00
          *
          * @function Highcharts.Time#dateFormat
          *
@@ -11813,7 +11813,7 @@
          * });
          *
          * // Use the Time object
-         * console.log(
+         * //console.log(
          *        'Current time in New York',
          *        chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())
          * );
@@ -12051,7 +12051,7 @@
            *
            * ```js
            * click: function(e) {
-           *     console.log(
+           *     //console.log(
            *         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', e.xAxis[0].value),
            *         e.yAxis[0].value
            *     )
@@ -12141,7 +12141,7 @@
            * ```js
            * selection: function(event) {
            *     // log the min and max of the primary, datetime x-axis
-           *     console.log(
+           *     //console.log(
            *         Highcharts.dateFormat(
            *             '%Y-%m-%d %H:%M:%S',
            *             event.xAxis[0].min
@@ -12152,7 +12152,7 @@
            *         )
            *     );
            *     // log the min and max of the y axis
-           *     console.log(event.yAxis[0].min, event.yAxis[0].max);
+           *     //console.log(event.yAxis[0].min, event.yAxis[0].max);
            * }
            * ```
            *
diff --git a/notemyprogress/js/highcharts/modules/boost.js b/notemyprogress/js/highcharts/modules/boost.js
index 3ea0f378572d7d6bb7324c0159e2cabbfa0a9502..fe7d9e228eba8f09dc0ff578e7af7c6f57bd4c5c 100644
--- a/notemyprogress/js/highcharts/modules/boost.js
+++ b/notemyprogress/js/highcharts/modules/boost.js
@@ -70,80 +70,2107 @@
       usePreallocated: boolean - default: false
   }
 */
-(function(d){"object"===typeof module&&module.exports?(d["default"]=d,module.exports=d):"function"===typeof define&&define.amd?define("highcharts/modules/boost",["highcharts"],function(r){d(r);d.Highcharts=r;return d}):d("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(d){function r(d,C,q,l){d.hasOwnProperty(C)||(d[C]=l.apply(null,q))}d=d?d._modules:{};r(d,"Extensions/Boost/Boostables.js",[],function(){return"area arearange column columnrange bar line scatter heatmap bubble treemap".split(" ")});
-r(d,"Extensions/Boost/BoostableMap.js",[d["Extensions/Boost/Boostables.js"]],function(d){var x={};d.forEach(function(d){x[d]=1});return x});r(d,"Extensions/Boost/WGLShader.js",[d["Core/Utilities.js"]],function(d){var x=d.clamp,q=d.error,l=d.pick;return function(b){function d(){g.length&&q("[highcharts boost] shader error - "+g.join("\n"))}function w(a,c){var f=b.createShader("vertex"===c?b.VERTEX_SHADER:b.FRAGMENT_SHADER);b.shaderSource(f,a);b.compileShader(f);return b.getShaderParameter(f,b.COMPILE_STATUS)?
-f:(g.push("when compiling "+c+" shader:\n"+b.getShaderInfoLog(f)),!1)}function p(){function a(a){return b.getUniformLocation(h,a)}var L=w("#version 100\n#define LN10 2.302585092994046\nprecision highp float;\nattribute vec4 aVertexPosition;\nattribute vec4 aColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform mat4 uPMatrix;\nuniform float pSize;\nuniform float translatedThreshold;\nuniform bool hasThreshold;\nuniform bool skipTranslation;\nuniform float xAxisTrans;\nuniform float xAxisMin;\nuniform float xAxisMinPad;\nuniform float xAxisPointRange;\nuniform float xAxisLen;\nuniform bool  xAxisPostTranslate;\nuniform float xAxisOrdinalSlope;\nuniform float xAxisOrdinalOffset;\nuniform float xAxisPos;\nuniform bool  xAxisCVSCoord;\nuniform bool  xAxisIsLog;\nuniform bool  xAxisReversed;\nuniform float yAxisTrans;\nuniform float yAxisMin;\nuniform float yAxisMinPad;\nuniform float yAxisPointRange;\nuniform float yAxisLen;\nuniform bool  yAxisPostTranslate;\nuniform float yAxisOrdinalSlope;\nuniform float yAxisOrdinalOffset;\nuniform float yAxisPos;\nuniform bool  yAxisCVSCoord;\nuniform bool  yAxisIsLog;\nuniform bool  yAxisReversed;\nuniform bool  isBubble;\nuniform bool  bubbleSizeByArea;\nuniform float bubbleZMin;\nuniform float bubbleZMax;\nuniform float bubbleZThreshold;\nuniform float bubbleMinSize;\nuniform float bubbleMaxSize;\nuniform bool  bubbleSizeAbs;\nuniform bool  isInverted;\nfloat bubbleRadius(){\nfloat value = aVertexPosition.w;\nfloat zMax = bubbleZMax;\nfloat zMin = bubbleZMin;\nfloat radius = 0.0;\nfloat pos = 0.0;\nfloat zRange = zMax - zMin;\nif (bubbleSizeAbs){\nvalue = value - bubbleZThreshold;\nzMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);\nzMin = 0.0;\n}\nif (value < zMin){\nradius = bubbleZMin / 2.0 - 1.0;\n} else {\npos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;\nif (bubbleSizeByArea && pos > 0.0){\npos = sqrt(pos);\n}\nradius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;\n}\nreturn radius * 2.0;\n}\nfloat translate(float val,\nfloat pointPlacement,\nfloat localA,\nfloat localMin,\nfloat minPixelPadding,\nfloat pointRange,\nfloat len,\nbool  cvsCoord,\nbool  isLog,\nbool  reversed\n){\nfloat sign = 1.0;\nfloat cvsOffset = 0.0;\nif (cvsCoord) {\nsign *= -1.0;\ncvsOffset = len;\n}\nif (isLog) {\nval = log(val) / LN10;\n}\nif (reversed) {\nsign *= -1.0;\ncvsOffset -= sign * len;\n}\nreturn sign * (val - localMin) * localA + cvsOffset + \n(sign * minPixelPadding);\n}\nfloat xToPixels(float value) {\nif (skipTranslation){\nreturn value;// + xAxisPos;\n}\nreturn translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;\n}\nfloat yToPixels(float value, float checkTreshold) {\nfloat v;\nif (skipTranslation){\nv = value;// + yAxisPos;\n} else {\nv = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;\nif (v > yAxisLen) {\nv = yAxisLen;\n}\n}\nif (checkTreshold > 0.0 && hasThreshold) {\nv = min(v, translatedThreshold);\n}\nreturn v;\n}\nvoid main(void) {\nif (isBubble){\ngl_PointSize = bubbleRadius();\n} else {\ngl_PointSize = pSize;\n}\nvColor = aColor;\nif (skipTranslation && isInverted) {\ngl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);\n} else if (isInverted) {\ngl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);\n} else {\ngl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);\n}\n}",
-"vertex"),f=w("precision highp float;\nuniform vec4 fillColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform sampler2D uSampler;\nuniform bool isCircle;\nuniform bool hasColor;\nvoid main(void) {\nvec4 col = fillColor;\nvec4 tcol = texture2D(uSampler, gl_PointCoord.st);\nif (hasColor) {\ncol = vColor;\n}\nif (isCircle) {\ncol *= tcol;\nif (tcol.r < 0.0) {\ndiscard;\n} else {\ngl_FragColor = col;\n}\n} else {\ngl_FragColor = col;\n}\n}","fragment");if(!L||!f)return h=!1,d(),!1;
-h=b.createProgram();b.attachShader(h,L);b.attachShader(h,f);b.linkProgram(h);if(!b.getProgramParameter(h,b.LINK_STATUS))return g.push(b.getProgramInfoLog(h)),d(),h=!1;b.useProgram(h);b.bindAttribLocation(h,0,"aVertexPosition");e=a("uPMatrix");n=a("pSize");m=a("fillColor");P=a("isBubble");t=a("bubbleSizeAbs");k=a("bubbleSizeByArea");K=a("uSampler");G=a("skipTranslation");c=a("isCircle");u=a("isInverted");return!0}function D(a,c){b&&h&&(a=y[a]=y[a]||b.getUniformLocation(h,a),b.uniform1f(a,c))}var y=
-{},h,e,n,m,P,t,k,G,c,u,g=[],K;return b&&!p()?!1:{psUniform:function(){return n},pUniform:function(){return e},fillColorUniform:function(){return m},setBubbleUniforms:function(a,g,f){var u=a.options,e=Number.MAX_VALUE,d=-Number.MAX_VALUE;b&&h&&"bubble"===a.type&&(e=l(u.zMin,x(g,!1===u.displayNegative?u.zThreshold:-Number.MAX_VALUE,e)),d=l(u.zMax,Math.max(d,f)),b.uniform1i(P,1),b.uniform1i(c,1),b.uniform1i(k,"width"!==a.options.sizeBy),b.uniform1i(t,a.options.sizeByAbsoluteValue),D("bubbleZMin",e),
-D("bubbleZMax",d),D("bubbleZThreshold",a.options.zThreshold),D("bubbleMinSize",a.minPxSize),D("bubbleMaxSize",a.maxPxSize))},bind:function(){b&&h&&b.useProgram(h)},program:function(){return h},create:p,setUniform:D,setPMatrix:function(a){b&&h&&b.uniformMatrix4fv(e,!1,a)},setColor:function(a){b&&h&&b.uniform4f(m,a[0]/255,a[1]/255,a[2]/255,a[3])},setPointSize:function(a){b&&h&&b.uniform1f(n,a)},setSkipTranslation:function(a){b&&h&&b.uniform1i(G,!0===a?1:0)},setTexture:function(a){b&&h&&b.uniform1i(K,
-a)},setDrawAsCircle:function(a){b&&h&&b.uniform1i(c,a?1:0)},reset:function(){b&&h&&(b.uniform1i(P,0),b.uniform1i(c,0))},setInverted:function(a){b&&h&&b.uniform1i(u,a)},destroy:function(){b&&h&&(b.deleteProgram(h),h=!1)}}}});r(d,"Extensions/Boost/WGLVBuffer.js",[],function(){return function(d,C,q){function l(){b&&(d.deleteBuffer(b),x=b=!1);D=0;w=q||2;y=[]}var b=!1,x=!1,w=q||2,p=!1,D=0,y;return{destroy:l,bind:function(){if(!b)return!1;d.vertexAttribPointer(x,w,d.FLOAT,!1,0,0)},data:y,build:function(h,
-e,n){var m;y=h||[];if(!(y&&0!==y.length||p))return l(),!1;w=n||w;b&&d.deleteBuffer(b);p||(m=new Float32Array(y));b=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,b);d.bufferData(d.ARRAY_BUFFER,p||m,d.STATIC_DRAW);x=d.getAttribLocation(C.program(),e);d.enableVertexAttribArray(x);return!0},render:function(h,e,n){var m=p?p.length:y.length;if(!b||!m)return!1;if(!h||h>m||0>h)h=0;if(!e||e>m)e=m;d.drawArrays(d[(n||"points").toUpperCase()],h/w,(e-h)/w);return!0},allocate:function(d){D=-1;p=new Float32Array(4*
-d)},push:function(d,e,b,m){p&&(p[++D]=d,p[++D]=e,p[++D]=b,p[++D]=m)}}}});r(d,"Extensions/Boost/WGLRenderer.js",[d["Core/Color/Color.js"],d["Extensions/Boost/WGLShader.js"],d["Extensions/Boost/WGLVBuffer.js"],d["Core/Globals.js"],d["Core/Utilities.js"]],function(d,C,q,l,b){var x=d.parse,w=l.doc,p=b.isNumber,D=b.isObject,y=b.merge,h=b.objectEach,e=b.pick;return function(b){function m(a){if(a.isSeriesBoosting){var c=!!a.options.stacking;var g=a.xData||a.options.xData||a.processedXData;c=(c?a.data:g||
-a.options.data).length;"treemap"===a.type?c*=12:"heatmap"===a.type?c*=6:ia[a.type]&&(c*=2);return c}return 0}function n(){f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT)}function t(a,c){function g(a){a&&(c.colorData.push(a[0]),c.colorData.push(a[1]),c.colorData.push(a[2]),c.colorData.push(a[3]))}function f(a,c,f,u,d){g(d);z.usePreallocated?L.push(a,c,f?1:0,u||1):(R.push(a),R.push(c),R.push(f?1:0),R.push(u||1))}function u(){c.segments.length&&(c.segments[c.segments.length-1].to=R.length)}function e(){c.segments.length&&
-c.segments[c.segments.length-1].from===R.length||(u(),c.segments.push({from:R.length}))}function b(a,c,u,d,e){g(e);f(a+u,c);g(e);f(a,c);g(e);f(a,c+d);g(e);f(a,c+d);g(e);f(a+u,c+d);g(e);f(a+u,c)}function K(a,g){z.useGPUTranslations||(c.skipTranslation=!0,a.x=G.toPixels(a.x,!0),a.y=P.toPixels(a.y,!0));g?R=[a.x,a.y,0,2].concat(R):f(a.x,a.y,0,2)}var h=a.pointArrayMap&&"low,high"===a.pointArrayMap.join(","),n=a.chart,E=a.options,m=!!E.stacking,T=E.data,k=a.xAxis.getExtremes(),p=k.min;k=k.max;var l=a.yAxis.getExtremes(),
-X=l.min;l=l.max;var t=a.xData||E.xData||a.processedXData,y=a.yData||E.yData||a.processedYData,q=a.zData||E.zData||a.processedZData,P=a.yAxis,G=a.xAxis,B=a.chart.plotWidth,w=!t||0===t.length,C=E.connectNulls,v=a.points||!1,M=!1,r=!1,Q;t=m?a.data:t||T;var I={x:Number.MAX_VALUE,y:0},O={x:-Number.MAX_VALUE,y:0},N=0,Fa=!1,J=-1,Y=!1,fa=!1,Z="undefined"===typeof n.index,ya=!1,V=!1;var A=!1;var Ma=ia[a.type],za=!1,Ia=!0,Ba=!0,ma=E.zones||!1,ha=!1,Ga=E.threshold,Aa=!1;if(!(E.boostData&&0<E.boostData.length)){E.gapSize&&
-(Aa="value"!==E.gapUnit?E.gapSize*a.closestPointRange:E.gapSize);ma&&(ma.some(function(a){return"undefined"===typeof a.value?(ha=new d(a.color),!0):!1}),ha||(ha=a.pointAttribs&&a.pointAttribs().fill||a.color,ha=new d(ha)));n.inverted&&(B=a.chart.plotHeight);a.closestPointRangePx=Number.MAX_VALUE;e();if(v&&0<v.length)c.skipTranslation=!0,c.drawMode="triangles",v[0].node&&v[0].node.levelDynamic&&v.sort(function(a,c){if(a.node){if(a.node.levelDynamic>c.node.levelDynamic)return 1;if(a.node.levelDynamic<
-c.node.levelDynamic)return-1}return 0}),v.forEach(function(c){var g=c.plotY;if("undefined"!==typeof g&&!isNaN(g)&&null!==c.y){g=c.shapeArgs;var f=n.styledMode?c.series.colorAttribs(c):f=c.series.pointAttribs(c);c=f["stroke-width"]||0;A=x(f.fill).rgba;A[0]/=255;A[1]/=255;A[2]/=255;"treemap"===a.type&&(c=c||1,Q=x(f.stroke).rgba,Q[0]/=255,Q[1]/=255,Q[2]/=255,b(g.x,g.y,g.width,g.height,Q),c/=2);"heatmap"===a.type&&n.inverted&&(g.x=G.len-g.x,g.y=P.len-g.y,g.width=-g.width,g.height=-g.height);b(g.x+c,g.y+
-c,g.width-2*c,g.height-2*c,A)}});else{for(;J<t.length-1;){var H=t[++J];if(Z)break;v=T&&T[J];!w&&D(v,!0)&&v.color&&(A=x(v.color).rgba,A[0]/=255,A[1]/=255,A[2]/=255);if(w){v=H[0];var F=H[1];t[J+1]&&(fa=t[J+1][0]);t[J-1]&&(Y=t[J-1][0]);if(3<=H.length){var Ha=H[2];H[2]>c.zMax&&(c.zMax=H[2]);H[2]<c.zMin&&(c.zMin=H[2])}}else v=H,F=y[J],t[J+1]&&(fa=t[J+1]),t[J-1]&&(Y=t[J-1]),q&&q.length&&(Ha=q[J],q[J]>c.zMax&&(c.zMax=q[J]),q[J]<c.zMin&&(c.zMin=q[J]));if(C||null!==v&&null!==F){fa&&fa>=p&&fa<=k&&(ya=!0);Y&&
-Y>=p&&Y<=k&&(V=!0);if(h){w&&(F=H.slice(1,3));var sa=F[0];F=F[1]}else m&&(v=H.x,F=H.stackY,sa=F-H.y);null!==X&&"undefined"!==typeof X&&null!==l&&"undefined"!==typeof l&&(Ia=F>=X&&F<=l);v>k&&O.x<k&&(O.x=v,O.y=F);v<p&&I.x>p&&(I.x=v,I.y=F);if(null!==F||!C)if(null!==F&&(Ia||ya||V)){if((fa>=p||v>=p)&&(Y<=k||v<=k)&&(za=!0),za||ya||V){Aa&&v-Y>Aa&&e();ma&&(A=ha.rgba,ma.some(function(a,c){c=ma[c-1];if("undefined"!==typeof a.value&&F<=a.value){if(!c||F>=c.value)A=x(a.color).rgba;return!0}return!1}),A[0]/=255,
-A[1]/=255,A[2]/=255);if(!z.useGPUTranslations&&(c.skipTranslation=!0,v=G.toPixels(v,!0),F=P.toPixels(F,!0),v>B&&"points"===c.drawMode))continue;if(Ma){H=sa;if(!1===sa||"undefined"===typeof sa)H=0>F?F:0;h||m||(H=Math.max(null===Ga?X:Ga,X));z.useGPUTranslations||(H=P.toPixels(H,!0));f(v,H,0,0,A)}c.hasMarkers&&za&&!1!==M&&(a.closestPointRangePx=Math.min(a.closestPointRangePx,Math.abs(v-M)));!z.useGPUTranslations&&!z.usePreallocated&&M&&1>Math.abs(v-M)&&r&&1>Math.abs(F-r)?z.debug.showSkipSummary&&++N:
-(E.step&&!Ba&&f(v,r,0,2,A),f(v,F,0,"bubble"===a.type?Ha||1:2,A),M=v,r=F,Fa=!0,Ba=!1)}}else e()}else e()}z.debug.showSkipSummary&&console.log("skipped points:",N);Fa||!1===C||"line_strip"!==a.drawMode||(I.x<Number.MAX_VALUE&&K(I,!0),O.x>-Number.MAX_VALUE&&K(O))}u()}}function k(){I=[];r.data=R=[];Q=[];L&&L.destroy()}function G(c){a&&(a.setUniform("xAxisTrans",c.transA),a.setUniform("xAxisMin",c.min),a.setUniform("xAxisMinPad",c.minPixelPadding),a.setUniform("xAxisPointRange",c.pointRange),a.setUniform("xAxisLen",
-c.len),a.setUniform("xAxisPos",c.pos),a.setUniform("xAxisCVSCoord",!c.horiz),a.setUniform("xAxisIsLog",!!c.logarithmic),a.setUniform("xAxisReversed",!!c.reversed))}function c(c){a&&(a.setUniform("yAxisTrans",c.transA),a.setUniform("yAxisMin",c.min),a.setUniform("yAxisMinPad",c.minPixelPadding),a.setUniform("yAxisPointRange",c.pointRange),a.setUniform("yAxisLen",c.len),a.setUniform("yAxisPos",c.pos),a.setUniform("yAxisCVSCoord",!c.horiz),a.setUniform("yAxisIsLog",!!c.logarithmic),a.setUniform("yAxisReversed",
-!!c.reversed))}function u(c,g){a.setUniform("hasThreshold",c);a.setUniform("translatedThreshold",g)}function g(g){if(g)M=g.chartWidth||800,B=g.chartHeight||400;else return!1;if(!(f&&M&&B&&a))return!1;z.debug.timeRendering&&console.time("gl rendering");f.canvas.width=M;f.canvas.height=B;a.bind();f.viewport(0,0,M,B);a.setPMatrix([2/M,0,0,0,0,-(2/B),0,0,0,0,-2,0,-1,1,-1,1]);1<z.lineWidth&&!l.isMS&&f.lineWidth(z.lineWidth);L.build(r.data,"aVertexPosition",4);L.bind();a.setInverted(g.inverted);I.forEach(function(b,
-K){var n=b.series.options,h=n.marker;var m="undefined"!==typeof n.lineWidth?n.lineWidth:1;var k=n.threshold,E=p(k),t=b.series.yAxis.getThreshold(k);k=e(n.marker?n.marker.enabled:null,b.series.xAxis.isRadial?!0:null,b.series.closestPointRangePx>2*((n.marker?n.marker.radius:10)||10));h=V[h&&h.symbol||b.series.symbol]||V.circle;if(!(0===b.segments.length||b.segmentslength&&b.segments[0].from===b.segments[0].to)){h.isReady&&(f.bindTexture(f.TEXTURE_2D,h.handle),a.setTexture(h.handle));g.styledMode?h=
-b.series.markerGroup&&b.series.markerGroup.getStyle("fill"):(h=b.series.pointAttribs&&b.series.pointAttribs().fill||b.series.color,n.colorByPoint&&(h=b.series.chart.options.colors[K]));b.series.fillOpacity&&n.fillOpacity&&(h=(new d(h)).setOpacity(e(n.fillOpacity,1)).get());h=x(h).rgba;z.useAlpha||(h[3]=1);"lines"===b.drawMode&&z.useAlpha&&1>h[3]&&(h[3]/=10);"add"===n.boostBlending?(f.blendFunc(f.SRC_ALPHA,f.ONE),f.blendEquation(f.FUNC_ADD)):"mult"===n.boostBlending||"multiply"===n.boostBlending?f.blendFunc(f.DST_COLOR,
-f.ZERO):"darken"===n.boostBlending?(f.blendFunc(f.ONE,f.ONE),f.blendEquation(f.FUNC_MIN)):f.blendFuncSeparate(f.SRC_ALPHA,f.ONE_MINUS_SRC_ALPHA,f.ONE,f.ONE_MINUS_SRC_ALPHA);a.reset();0<b.colorData.length&&(a.setUniform("hasColor",1),K=q(f,a),K.build(b.colorData,"aColor",4),K.bind());a.setColor(h);G(b.series.xAxis);c(b.series.yAxis);u(E,t);"points"===b.drawMode&&(n.marker&&p(n.marker.radius)?a.setPointSize(2*n.marker.radius):a.setPointSize(1));a.setSkipTranslation(b.skipTranslation);"bubble"===b.series.type&&
-a.setBubbleUniforms(b.series,b.zMin,b.zMax);a.setDrawAsCircle(Z[b.series.type]||!1);if(0<m||"line_strip"!==b.drawMode)for(m=0;m<b.segments.length;m++)L.render(b.segments[m].from,b.segments[m].to,b.drawMode);if(b.hasMarkers&&k)for(n.marker&&p(n.marker.radius)?a.setPointSize(2*n.marker.radius):a.setPointSize(10),a.setDrawAsCircle(!0),m=0;m<b.segments.length;m++)L.render(b.segments[m].from,b.segments[m].to,"POINTS")}});z.debug.timeRendering&&console.timeEnd("gl rendering");b&&b();k()}function K(a){n();
-if(a.renderer.forExport)return g(a);O?g(a):setTimeout(function(){K(a)},1)}var a=!1,L=!1,f=!1,M=0,B=0,R=!1,Q=!1,r={},O=!1,I=[],V={},ia={column:!0,columnrange:!0,bar:!0,area:!0,arearange:!0},Z={scatter:!0,bubble:!0},z={pointSize:1,lineWidth:1,fillColor:"#AA00AA",useAlpha:!0,usePreallocated:!1,useGPUTranslations:!1,debug:{timeRendering:!1,timeSeriesProcessing:!1,timeSetup:!1,timeBufferCopy:!1,timeKDTree:!1,showSkipSummary:!1}};return r={allocateBufferForSingleSeries:function(a){var c=0;z.usePreallocated&&
-(a.isSeriesBoosting&&(c=m(a)),L.allocate(c))},pushSeries:function(a){0<I.length&&I[I.length-1].hasMarkers&&(I[I.length-1].markerTo=Q.length);z.debug.timeSeriesProcessing&&console.time("building "+a.type+" series");I.push({segments:[],markerFrom:Q.length,colorData:[],series:a,zMin:Number.MAX_VALUE,zMax:-Number.MAX_VALUE,hasMarkers:a.options.marker?!1!==a.options.marker.enabled:!1,showMarkers:!0,drawMode:{area:"lines",arearange:"lines",areaspline:"line_strip",column:"lines",columnrange:"lines",bar:"lines",
-line:"line_strip",scatter:"points",heatmap:"triangles",treemap:"triangles",bubble:"points"}[a.type]||"line_strip"});t(a,I[I.length-1]);z.debug.timeSeriesProcessing&&console.timeEnd("building "+a.type+" series")},setSize:function(c,g){M===c&&B===g||!a||(M=c,B=g,a.bind(),a.setPMatrix([2/M,0,0,0,0,-(2/B),0,0,0,0,-2,0,-1,1,-1,1]))},inited:function(){return O},setThreshold:u,init:function(c,g){function b(a,c){var g={isReady:!1,texture:w.createElement("canvas"),handle:f.createTexture()},b=g.texture.getContext("2d");
-V[a]=g;g.texture.width=512;g.texture.height=512;b.mozImageSmoothingEnabled=!1;b.webkitImageSmoothingEnabled=!1;b.msImageSmoothingEnabled=!1;b.imageSmoothingEnabled=!1;b.strokeStyle="rgba(255, 255, 255, 0)";b.fillStyle="#FFF";c(b);try{f.activeTexture(f.TEXTURE0),f.bindTexture(f.TEXTURE_2D,g.handle),f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g.texture),f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_S,f.CLAMP_TO_EDGE),f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_T,f.CLAMP_TO_EDGE),f.texParameteri(f.TEXTURE_2D,
-f.TEXTURE_MAG_FILTER,f.LINEAR),f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MIN_FILTER,f.LINEAR),f.bindTexture(f.TEXTURE_2D,null),g.isReady=!0}catch(U){}}var u=0,d=["webgl","experimental-webgl","moz-webgl","webkit-3d"];O=!1;if(!c)return!1;for(z.debug.timeSetup&&console.time("gl setup");u<d.length&&!(f=c.getContext(d[u],{}));u++);if(f)g||k();else return!1;f.enable(f.BLEND);f.blendFunc(f.SRC_ALPHA,f.ONE_MINUS_SRC_ALPHA);f.disable(f.DEPTH_TEST);f.depthFunc(f.LESS);a=C(f);if(!a)return!1;L=q(f,a);b("circle",
-function(a){a.beginPath();a.arc(256,256,256,0,2*Math.PI);a.stroke();a.fill()});b("square",function(a){a.fillRect(0,0,512,512)});b("diamond",function(a){a.beginPath();a.moveTo(256,0);a.lineTo(512,256);a.lineTo(256,512);a.lineTo(0,256);a.lineTo(256,0);a.fill()});b("triangle",function(a){a.beginPath();a.moveTo(0,512);a.lineTo(256,0);a.lineTo(512,512);a.lineTo(0,512);a.fill()});b("triangle-down",function(a){a.beginPath();a.moveTo(0,0);a.lineTo(256,512);a.lineTo(512,0);a.lineTo(0,0);a.fill()});O=!0;z.debug.timeSetup&&
-console.timeEnd("gl setup");return!0},render:K,settings:z,valid:function(){return!1!==f},clear:n,flush:k,setXAxis:G,setYAxis:c,data:R,gl:function(){return f},allocateBuffer:function(a){var c=0;z.usePreallocated&&(a.series.forEach(function(a){a.isSeriesBoosting&&(c+=m(a))}),L.allocate(c))},destroy:function(){k();L.destroy();a.destroy();f&&(h(V,function(a){a.handle&&f.deleteTexture(a.handle)}),f.canvas.width=1,f.canvas.height=1)},setOptions:function(a){y(!0,z,a)}}}});r(d,"Extensions/Boost/BoostAttach.js",
-[d["Core/Chart/Chart.js"],d["Extensions/Boost/WGLRenderer.js"],d["Core/Globals.js"],d["Core/Utilities.js"]],function(d,C,q,l){var b=q.doc,x=l.error,w=b.createElement("canvas");return function(p,l){var q=p.chartWidth,h=p.chartHeight,e=p,n=p.seriesGroup||l.group,m=b.implementation.hasFeature("www.http://w3.org/TR/SVG11/feature#Extensibility","1.1");e=p.isChartSeriesBoosting()?p:l;m=!1;e.renderTarget||(e.canvas=w,p.renderer.forExport||!m?(e.renderTarget=p.renderer.image("",0,0,q,h).addClass("highcharts-boost-canvas").add(n),
-e.boostClear=function(){e.renderTarget.attr({href:""})},e.boostCopy=function(){e.boostResizeTarget();e.renderTarget.attr({href:e.canvas.toDataURL("image/png")})}):(e.renderTargetFo=p.renderer.createElement("foreignObject").add(n),e.renderTarget=b.createElement("canvas"),e.renderTargetCtx=e.renderTarget.getContext("2d"),e.renderTargetFo.element.appendChild(e.renderTarget),e.boostClear=function(){e.renderTarget.width=e.canvas.width;e.renderTarget.height=e.canvas.height},e.boostCopy=function(){e.renderTarget.width=
-e.canvas.width;e.renderTarget.height=e.canvas.height;e.renderTargetCtx.drawImage(e.canvas,0,0)}),e.boostResizeTarget=function(){q=p.chartWidth;h=p.chartHeight;(e.renderTargetFo||e.renderTarget).attr({x:0,y:0,width:q,height:h}).css({pointerEvents:"none",mixedBlendMode:"normal",opacity:1});e instanceof d&&e.markerGroup.translate(p.plotLeft,p.plotTop)},e.boostClipRect=p.renderer.clipRect(),(e.renderTargetFo||e.renderTarget).clip(e.boostClipRect),e instanceof d&&(e.markerGroup=e.renderer.g().add(n),e.markerGroup.translate(l.xAxis.pos,
-l.yAxis.pos)));e.canvas.width=q;e.canvas.height=h;e.boostClipRect.attr(p.getBoostClipRect(e));e.boostResizeTarget();e.boostClear();e.ogl||(e.ogl=C(function(){e.ogl.settings.debug.timeBufferCopy&&console.time("buffer copy");e.boostCopy();e.ogl.settings.debug.timeBufferCopy&&console.timeEnd("buffer copy")}),e.ogl.init(e.canvas)||x("[highcharts boost] - unable to init WebGL renderer"),e.ogl.setOptions(p.options.boost||{}),e instanceof d&&e.ogl.allocateBuffer(p));e.ogl.setSize(q,h);return e.ogl}});r(d,
-"Extensions/Boost/BoostUtils.js",[d["Core/Globals.js"],d["Extensions/Boost/BoostableMap.js"],d["Extensions/Boost/BoostAttach.js"],d["Core/Utilities.js"]],function(d,C,q,l){function b(){for(var b=[],d=0;d<arguments.length;d++)b[d]=arguments[d];var e=-Number.MAX_VALUE;b.forEach(function(b){if("undefined"!==typeof b&&null!==b&&"undefined"!==typeof b.length&&0<b.length)return e=b.length,!0});return e}function x(b,d,e){b&&d.renderTarget&&d.canvas&&!(e||d.chart).isChartSeriesBoosting()&&b.render(e||d.chart)}
-function w(b,d){b&&d.renderTarget&&d.canvas&&!d.chart.isChartSeriesBoosting()&&b.allocateBufferForSingleSeries(d)}function p(b,d,e,h,k,l){k=k||0;h=h||3E3;for(var c=k+h,u=!0;u&&k<c&&k<b.length;)u=d(b[k],k),++k;u&&(k<b.length?l?p(b,d,e,h,k,l):y.requestAnimationFrame?y.requestAnimationFrame(function(){p(b,d,e,h,k)}):setTimeout(function(){p(b,d,e,h,k)}):e&&e())}function r(){var b=0,d,e=["webgl","experimental-webgl","moz-webgl","webkit-3d"],p=!1;if("undefined"!==typeof y.WebGLRenderingContext)for(d=h.createElement("canvas");b<
-e.length;b++)try{if(p=d.getContext(e[b]),"undefined"!==typeof p&&null!==p)return!0}catch(k){}return!1}var y=d.win,h=d.doc,e=l.pick;l={patientMax:b,boostEnabled:function(b){return e(b&&b.options&&b.options.boost&&b.options.boost.enabled,!0)},shouldForceChartSeriesBoosting:function(d){var h=0,p=0,n=e(d.options.boost&&d.options.boost.allowForce,!0);if("undefined"!==typeof d.boostForceChartBoost)return d.boostForceChartBoost;if(1<d.series.length)for(var k=0;k<d.series.length;k++){var l=d.series[k];0!==
-l.options.boostThreshold&&!1!==l.visible&&"heatmap"!==l.type&&(C[l.type]&&++p,b(l.processedXData,l.options.data,l.points)>=(l.options.boostThreshold||Number.MAX_VALUE)&&++h)}d.boostForceChartBoost=n&&(p===d.series.length&&0<h||5<h);return d.boostForceChartBoost},renderIfNotSeriesBoosting:x,allocateIfNotSeriesBoosting:w,eachAsync:p,hasWebGLSupport:r,pointDrawHandler:function(b){var d=!0;this.chart.options&&this.chart.options.boost&&(d="undefined"===typeof this.chart.options.boost.enabled?!0:this.chart.options.boost.enabled);
-if(!d||!this.isSeriesBoosting)return b.call(this);this.chart.isBoosting=!0;if(b=q(this.chart,this))w(b,this),b.pushSeries(this);x(b,this)}};d.hasWebGLSupport=r;return l});r(d,"Extensions/Boost/BoostInit.js",[d["Core/Chart/Chart.js"],d["Core/Globals.js"],d["Core/Utilities.js"],d["Extensions/Boost/BoostUtils.js"],d["Extensions/Boost/BoostAttach.js"]],function(d,r,q,l,b){var x=q.addEvent,w=q.extend,p=q.fireEvent,C=q.wrap,y=r.Series,h=r.seriesTypes,e=function(){},n=l.eachAsync,m=l.pointDrawHandler,P=
-l.allocateIfNotSeriesBoosting,t=l.renderIfNotSeriesBoosting,k=l.shouldForceChartSeriesBoosting,G;return function(){w(y.prototype,{renderCanvas:function(){function c(a,c){var b=!1,g="undefined"===typeof k.index,d=!0;if(!g){if(ka){var u=a[0];var e=a[1]}else u=a,e=q[c];aa?(ka&&(e=a.slice(1,3)),b=e[0],e=e[1]):ja&&(u=a.x,e=a.stackY,b=e-a.y);ta||(d=e>=C&&e<=y);if(null!==e&&u>=r&&u<=w&&d)if(a=f.toPixels(u,!0),z){if("undefined"===typeof U||a===D){aa||(b=e);if("undefined"===typeof da||e>ca)ca=e,da=c;if("undefined"===
-typeof U||b<S)S=b,U=c}a!==D&&("undefined"!==typeof U&&(e=l.toPixels(ca,!0),T=l.toPixels(S,!0),ea(a,e,da),T!==e&&ea(a,T,U)),U=da=void 0,D=a)}else e=Math.ceil(l.toPixels(e,!0)),ea(a,e,c)}return!g}function d(){p(g,"renderedCanvas");delete g.buildKDTree;g.buildKDTree();qa.debug.timeKDTree&&console.timeEnd("kd tree building")}var g=this,h=g.options||{},a=!1,k=g.chart,f=this.xAxis,l=this.yAxis,m=h.xData||g.processedXData,q=h.yData||g.processedYData,x=h.data;a=f.getExtremes();var r=a.min,w=a.max;a=l.getExtremes();
-var C=a.min,y=a.max,B={},D,z=!!g.sampling,E=!1!==h.enableMouseTracking,T=l.getThreshold(h.threshold),aa=g.pointArrayMap&&"low,high"===g.pointArrayMap.join(","),ja=!!h.stacking,na=g.cropStart||0,ta=g.requireSorting,ka=!m,S,ca,U,da,pa="x"===h.findNearestPointBy,la=this.xData||this.options.xData||this.processedXData||!1,ea=function(a,c,b){a=Math.ceil(a);G=pa?a:a+","+c;E&&!B[G]&&(B[G]=!0,k.inverted&&(a=f.len-a,c=l.len-c),ra.push({x:la?la[na+b]:!1,clientX:a,plotX:a,plotY:c,i:na+b}))};a=b(k,g);k.isBoosting=
-!0;var qa=a.settings;if(this.visible){(this.points||this.graph)&&this.destroyGraphics();k.isChartSeriesBoosting()?(this.markerGroup&&this.markerGroup!==k.markerGroup&&this.markerGroup.destroy(),this.markerGroup=k.markerGroup,this.renderTarget&&(this.renderTarget=this.renderTarget.destroy())):(this.markerGroup===k.markerGroup&&(this.markerGroup=void 0),this.markerGroup=g.plotGroup("markerGroup","markers",!0,1,k.seriesGroup));var ra=this.points=[];g.buildKDTree=e;a&&(P(a,this),a.pushSeries(g),t(a,this,
-k));k.renderer.forExport||(qa.debug.timeKDTree&&console.time("kd tree building"),n(ja?g.data:m||x,c,d))}}});["heatmap","treemap"].forEach(function(c){h[c]&&C(h[c].prototype,"drawPoints",m)});h.bubble&&(delete h.bubble.prototype.buildKDTree,C(h.bubble.prototype,"markerAttribs",function(c){return this.isSeriesBoosting?!1:c.apply(this,[].slice.call(arguments,1))}));h.scatter.prototype.fill=!0;w(h.area.prototype,{fill:!0,fillOpacity:!0,sampling:!0});w(h.column.prototype,{fill:!0,sampling:!0});d.prototype.callbacks.push(function(c){x(c,
-"predraw",function(){c.boostForceChartBoost=void 0;c.boostForceChartBoost=k(c);c.isBoosting=!1;!c.isChartSeriesBoosting()&&c.didBoost&&(c.didBoost=!1);c.boostClear&&c.boostClear();c.canvas&&c.ogl&&c.isChartSeriesBoosting()&&(c.didBoost=!0,c.ogl.allocateBuffer(c));c.markerGroup&&c.xAxis&&0<c.xAxis.length&&c.yAxis&&0<c.yAxis.length&&c.markerGroup.translate(c.xAxis[0].pos,c.yAxis[0].pos)});x(c,"render",function(){c.ogl&&c.isChartSeriesBoosting()&&c.ogl.render(c)})})}});r(d,"Extensions/BoostCanvas.js",
-[d["Core/Chart/Chart.js"],d["Core/Color/Color.js"],d["Core/Globals.js"],d["Series/LineSeries.js"],d["Core/Series/Series.js"],d["Core/Utilities.js"]],function(d,r,q,l,b,B){var x=r.parse,p=q.doc,C=q.noop,y=B.addEvent,h=B.extend,e=B.fireEvent,n=B.isNumber,m=B.merge,P=B.pick,t=B.wrap,k=b.seriesTypes,G;return function(){q.seriesTypes.heatmap&&t(q.seriesTypes.heatmap.prototype,"drawPoints",function(){var c=this.chart,b=this.getContext(),g=this.chart.inverted,d=this.xAxis,a=this.yAxis;b?(this.points.forEach(function(e){var f=
-e.plotY;"undefined"===typeof f||isNaN(f)||null===e.y||(f=e.shapeArgs,e=c.styledMode?e.series.colorAttribs(e):e.series.pointAttribs(e),b.fillStyle=e.fill,g?b.fillRect(a.len-f.y+d.left,d.len-f.x+a.top,-f.height,-f.width):b.fillRect(f.x+d.left,f.y+a.top,f.width,f.height))}),this.canvasToSVG()):this.chart.showLoading("Your browser doesn't support HTML5 canvas, <br>please use a modern browser")});h(l.prototype,{getContext:function(){var c=this.chart,b=c.chartWidth,g=c.chartHeight,d=c.seriesGroup||this.group,
-a=this,e=function(a,c,b,g,d,e,f){a.call(this,b,c,g,d,e,f)};c.isChartSeriesBoosting()&&(a=c,d=c.seriesGroup);var f=a.ctx;a.canvas||(a.canvas=p.createElement("canvas"),a.renderTarget=c.renderer.image("",0,0,b,g).addClass("highcharts-boost-canvas").add(d),a.ctx=f=a.canvas.getContext("2d"),c.inverted&&["moveTo","lineTo","rect","arc"].forEach(function(a){t(f,a,e)}),a.boostCopy=function(){a.renderTarget.attr({href:a.canvas.toDataURL("image/png")})},a.boostClear=function(){f.clearRect(0,0,a.canvas.width,
-a.canvas.height);a===this&&a.renderTarget.attr({href:""})},a.boostClipRect=c.renderer.clipRect(),a.renderTarget.clip(a.boostClipRect));a.canvas.width!==b&&(a.canvas.width=b);a.canvas.height!==g&&(a.canvas.height=g);a.renderTarget.attr({x:0,y:0,width:b,height:g,style:"pointer-events: none",href:""});a.boostClipRect.attr(c.getBoostClipRect(a));return f},canvasToSVG:function(){this.chart.isChartSeriesBoosting()?this.boostClear&&this.boostClear():(this.boostCopy||this.chart.boostCopy)&&(this.boostCopy||
-this.chart.boostCopy)()},cvsLineTo:function(c,b,g){c.lineTo(b,g)},renderCanvas:function(){var c=this,b=c.options,g=c.chart,d=this.xAxis,a=this.yAxis,k=(g.options.boost||{}).timeRendering||!1,f=0,l=c.processedXData,p=c.processedYData,w=b.data,t=d.getExtremes(),D=t.min,O=t.max;t=a.getExtremes();var I=t.min,V=t.max,ia={},Z,z=!!c.sampling,E=b.marker&&b.marker.radius,T=this.cvsDrawPoint,aa=b.lineWidth?this.cvsLineTo:void 0,ja=E&&1>=E?this.cvsMarkerSquare:this.cvsMarkerCircle,na=this.cvsStrokeBatch||1E3,
-ta=!1!==b.enableMouseTracking,ka;t=b.threshold;var S=a.getThreshold(t),ca=n(t),U=S,da=this.fill,pa=c.pointArrayMap&&"low,high"===c.pointArrayMap.join(","),la=!!b.stacking,ea=c.cropStart||0;t=g.options.loading;var qa=c.requireSorting,ra,X=b.connectNulls,Ca=!l,ua,va,ba,oa,wa,W=la?c.data:l||w,Ja=c.fillOpacity?(new r(c.color)).setOpacity(P(b.fillOpacity,.75)).get():c.color,v=function(){da?(N.fillStyle=Ja,N.fill()):(N.strokeStyle=c.color,N.lineWidth=b.lineWidth,N.stroke())},Da=function(a,b,d,e){0===f&&
-(N.beginPath(),aa&&(N.lineJoin="round"));g.scroller&&"highcharts-navigator-series"===c.options.className?(b+=g.scroller.top,d&&(d+=g.scroller.top)):b+=g.plotTop;a+=g.plotLeft;ra?N.moveTo(a,b):T?T(N,a,b,d,ka):aa?aa(N,a,b):ja&&ja.call(c,N,a,b,E,e);f+=1;f===na&&(v(),f=0);ka={clientX:a,plotY:b,yBottom:d}},Ka="x"===b.findNearestPointBy,Ea=this.xData||this.options.xData||this.processedXData||!1,xa=function(c,b,e){wa=Ka?c:c+","+b;ta&&!ia[wa]&&(ia[wa]=!0,g.inverted&&(c=d.len-c,b=a.len-b),La.push({x:Ea?Ea[ea+
-e]:!1,clientX:c,plotX:c,plotY:b,i:ea+e}))};this.renderTarget&&this.renderTarget.attr({href:""});(this.points||this.graph)&&this.destroyGraphics();c.plotGroup("group","series",c.visible?"visible":"hidden",b.zIndex,g.seriesGroup);c.markerGroup=c.group;y(c,"destroy",function(){c.markerGroup=null});var La=this.points=[];var N=this.getContext();c.buildKDTree=C;this.boostClear&&this.boostClear();this.visible&&(99999<w.length&&(g.options.loading=m(t,{labelStyle:{backgroundColor:x("#ffffff").setOpacity(.75).get(),
-padding:"1em",borderRadius:"0.5em"},style:{backgroundColor:"none",opacity:1}}),B.clearTimeout(G),g.showLoading("Drawing..."),g.options.loading=t),k&&console.time("canvas rendering"),q.eachAsync(W,function(b,e){var f=!1,u=!1,h=!1,k=!1,l="undefined"===typeof g.index,K=!0;if(!l){if(Ca){var n=b[0];var m=b[1];W[e+1]&&(h=W[e+1][0]);W[e-1]&&(k=W[e-1][0])}else n=b,m=p[e],W[e+1]&&(h=W[e+1]),W[e-1]&&(k=W[e-1]);h&&h>=D&&h<=O&&(f=!0);k&&k>=D&&k<=O&&(u=!0);if(pa){Ca&&(m=b.slice(1,3));var q=m[0];m=m[1]}else la&&
-(n=b.x,m=b.stackY,q=m-b.y);b=null===m;qa||(K=m>=I&&m<=V);if(!b&&(n>=D&&n<=O&&K||f||u))if(n=Math.round(d.toPixels(n,!0)),z){if("undefined"===typeof ba||n===Z){pa||(q=m);if("undefined"===typeof oa||m>va)va=m,oa=e;if("undefined"===typeof ba||q<ua)ua=q,ba=e}n!==Z&&("undefined"!==typeof ba&&(m=a.toPixels(va,!0),S=a.toPixels(ua,!0),Da(n,ca?Math.min(m,U):m,ca?Math.max(S,U):S,e),xa(n,m,oa),S!==m&&xa(n,S,ba)),ba=oa=void 0,Z=n)}else m=Math.round(a.toPixels(m,!0)),Da(n,m,S,e),xa(n,m,e);ra=b&&!X;0===e%5E4&&(c.boostCopy||
-c.chart.boostCopy)&&(c.boostCopy||c.chart.boostCopy)()}return!l},function(){var a=g.loadingDiv,b=g.loadingShown;v();c.canvasToSVG();k&&console.timeEnd("canvas rendering");e(c,"renderedCanvas");b&&(h(a.style,{transition:"opacity 250ms",opacity:0}),g.loadingShown=!1,G=setTimeout(function(){a.parentNode&&a.parentNode.removeChild(a);g.loadingDiv=g.loadingSpan=null},250));delete c.buildKDTree;c.buildKDTree()},g.renderer.forExport?Number.MAX_VALUE:void 0))}});k.scatter.prototype.cvsMarkerCircle=function(c,
-b,d,e){c.moveTo(b,d);c.arc(b,d,e,0,2*Math.PI,!1)};k.scatter.prototype.cvsMarkerSquare=function(c,b,d,e){c.rect(b-e,d-e,2*e,2*e)};k.scatter.prototype.fill=!0;k.bubble&&(k.bubble.prototype.cvsMarkerCircle=function(c,b,d,e,a){c.moveTo(b,d);c.arc(b,d,this.radii&&this.radii[a],0,2*Math.PI,!1)},k.bubble.prototype.cvsStrokeBatch=1);h(k.area.prototype,{cvsDrawPoint:function(c,b,d,e,a){a&&b!==a.clientX&&(c.moveTo(a.clientX,a.yBottom),c.lineTo(a.clientX,a.plotY),c.lineTo(b,d),c.lineTo(b,e))},fill:!0,fillOpacity:!0,
-sampling:!0});h(k.column.prototype,{cvsDrawPoint:function(c,b,d,e){c.rect(b-1,d,1,e-d)},fill:!0,sampling:!0});d.prototype.callbacks.push(function(b){y(b,"predraw",function(){b.renderTarget&&b.renderTarget.attr({href:""});b.canvas&&b.canvas.getContext("2d").clearRect(0,0,b.canvas.width,b.canvas.height)});y(b,"render",function(){b.boostCopy&&b.boostCopy()})})}});r(d,"Extensions/Boost/BoostOverrides.js",[d["Core/Chart/Chart.js"],d["Core/Globals.js"],d["Core/Series/Point.js"],d["Core/Utilities.js"],d["Extensions/Boost/BoostUtils.js"],
-d["Extensions/Boost/Boostables.js"],d["Extensions/Boost/BoostableMap.js"]],function(d,r,q,l,b,B,w){var p=l.addEvent,x=l.error,y=l.getOptions,h=l.isArray,e=l.isNumber,n=l.pick,m=l.wrap,C=b.boostEnabled,t=b.shouldForceChartSeriesBoosting,k=r.Series,G=r.seriesTypes,c=y().plotOptions;d.prototype.isChartSeriesBoosting=function(){return n(this.options.boost&&this.options.boost.seriesThreshold,50)<=this.series.length||t(this)};d.prototype.getBoostClipRect=function(b){var c={x:this.plotLeft,y:this.plotTop,
-width:this.plotWidth,height:this.plotHeight};b===this&&this.yAxis.forEach(function(b){c.y=Math.min(b.pos,c.y);c.height=Math.max(b.pos-this.plotTop+b.len,c.height)},this);return c};k.prototype.getPoint=function(b){var c=b,d=this.xData||this.options.xData||this.processedXData||!1;!b||b instanceof this.pointClass||(c=(new this.pointClass).init(this,this.options.data[b.i],d?d[b.i]:void 0),c.category=n(this.xAxis.categories?this.xAxis.categories[c.x]:c.x,c.x),c.dist=b.dist,c.distX=b.distX,c.plotX=b.plotX,
-c.plotY=b.plotY,c.index=b.i,c.isInside=this.isPointInside(b));return c};m(k.prototype,"searchPoint",function(b){return this.getPoint(b.apply(this,[].slice.call(arguments,1)))});m(q.prototype,"haloPath",function(b){var c=this.series,d=this.plotX,a=this.plotY,e=c.chart.inverted;c.isSeriesBoosting&&e&&(this.plotX=c.yAxis.len-a,this.plotY=c.xAxis.len-d);var f=b.apply(this,Array.prototype.slice.call(arguments,1));c.isSeriesBoosting&&e&&(this.plotX=d,this.plotY=a);return f});m(k.prototype,"markerAttribs",
-function(b,c){var d=c.plotX,a=c.plotY,e=this.chart.inverted;this.isSeriesBoosting&&e&&(c.plotX=this.yAxis.len-a,c.plotY=this.xAxis.len-d);var f=b.apply(this,Array.prototype.slice.call(arguments,1));this.isSeriesBoosting&&e&&(c.plotX=d,c.plotY=a);return f});p(k,"destroy",function(){var b=this,c=b.chart;c.markerGroup===b.markerGroup&&(b.markerGroup=null);c.hoverPoints&&(c.hoverPoints=c.hoverPoints.filter(function(c){return c.series===b}));c.hoverPoint&&c.hoverPoint.series===b&&(c.hoverPoint=null)});
-m(k.prototype,"getExtremes",function(b){return this.isSeriesBoosting&&this.hasExtremes&&this.hasExtremes()?{}:b.apply(this,Array.prototype.slice.call(arguments,1))});["translate","generatePoints","drawTracker","drawPoints","render"].forEach(function(b){function c(c){var a=this.options.stacking&&("translate"===b||"generatePoints"===b);if(!this.isSeriesBoosting||a||!C(this.chart)||"heatmap"===this.type||"treemap"===this.type||!w[this.type]||0===this.options.boostThreshold)c.call(this);else if(this[b+
-"Canvas"])this[b+"Canvas"]()}m(k.prototype,b,c);"translate"===b&&"column bar arearange columnrange heatmap treemap".split(" ").forEach(function(d){G[d]&&m(G[d].prototype,b,c)})});m(k.prototype,"processData",function(b){function c(a){return d.chart.isChartSeriesBoosting()||(a?a.length:0)>=(d.options.boostThreshold||Number.MAX_VALUE)}var d=this,a=this.options.data;C(this.chart)&&w[this.type]?(c(a)&&"heatmap"!==this.type&&"treemap"!==this.type&&!this.options.stacking&&this.hasExtremes&&this.hasExtremes(!0)||
-(b.apply(this,Array.prototype.slice.call(arguments,1)),a=this.processedXData),(this.isSeriesBoosting=c(a))?(a=this.getFirstValidPoint(this.options.data),e(a)||h(a)||x(12,!1,this.chart),this.enterBoost()):this.exitBoost&&this.exitBoost()):b.apply(this,Array.prototype.slice.call(arguments,1))});p(k,"hide",function(){this.canvas&&this.renderTarget&&(this.ogl&&this.ogl.clear(),this.boostClear())});k.prototype.enterBoost=function(){this.alteredByBoost=[];["allowDG","directTouch","stickyTracking"].forEach(function(b){this.alteredByBoost.push({prop:b,
-val:this[b],own:Object.hasOwnProperty.call(this,b)})},this);this.directTouch=this.allowDG=!1;this.finishedAnimating=this.stickyTracking=!0;this.labelBySeries&&(this.labelBySeries=this.labelBySeries.destroy())};k.prototype.exitBoost=function(){(this.alteredByBoost||[]).forEach(function(b){b.own?this[b.prop]=b.val:delete this[b.prop]},this);this.boostClear&&this.boostClear()};k.prototype.hasExtremes=function(b){var c=this.options,d=this.xAxis&&this.xAxis.options,a=this.yAxis&&this.yAxis.options,h=this.colorAxis&&
-this.colorAxis.options;return c.data.length>(c.boostThreshold||Number.MAX_VALUE)&&e(a.min)&&e(a.max)&&(!b||e(d.min)&&e(d.max))&&(!h||e(h.min)&&e(h.max))};k.prototype.destroyGraphics=function(){var b=this,c=this.points,d,a;if(c)for(a=0;a<c.length;a+=1)(d=c[a])&&d.destroyElements&&d.destroyElements();["graph","area","tracker"].forEach(function(a){b[a]&&(b[a]=b[a].destroy())})};B.forEach(function(b){c[b]&&(c[b].boostThreshold=5E3,c[b].boostData=[],G[b].prototype.fillOpacity=!0)})});r(d,"Extensions/Boost/NamedColors.js",
-[d["Core/Color/Color.js"]],function(d){var r={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",
-darkgray:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dodgerblue:"#1e90ff",feldspar:"#d19275",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",
-ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",
-lightslateblue:"#8470ff",lightslategray:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",
-navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",
-silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",violetred:"#d02090",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};return d.names=r});r(d,"Extensions/Boost/Boost.js",[d["Extensions/Boost/BoostUtils.js"],d["Extensions/Boost/BoostInit.js"],d["Extensions/BoostCanvas.js"],d["Core/Utilities.js"]],
-function(d,r,q,l){l=l.error;d=d.hasWebGLSupport;d()?r():"undefined"!==typeof q?q():l(26)});r(d,"masters/modules/boost.src.js",[],function(){})});
-//# sourceMappingURL=boost.js.map
\ No newline at end of file
+(function (d) {
+  "object" === typeof module && module.exports
+    ? ((d["default"] = d), (module.exports = d))
+    : "function" === typeof define && define.amd
+    ? define("highcharts/modules/boost", ["highcharts"], function (r) {
+        d(r);
+        d.Highcharts = r;
+        return d;
+      })
+    : d("undefined" !== typeof Highcharts ? Highcharts : void 0);
+})(function (d) {
+  function r(d, C, q, l) {
+    d.hasOwnProperty(C) || (d[C] = l.apply(null, q));
+  }
+  d = d ? d._modules : {};
+  r(d, "Extensions/Boost/Boostables.js", [], function () {
+    return "area arearange column columnrange bar line scatter heatmap bubble treemap".split(
+      " "
+    );
+  });
+  r(
+    d,
+    "Extensions/Boost/BoostableMap.js",
+    [d["Extensions/Boost/Boostables.js"]],
+    function (d) {
+      var x = {};
+      d.forEach(function (d) {
+        x[d] = 1;
+      });
+      return x;
+    }
+  );
+  r(d, "Extensions/Boost/WGLShader.js", [d["Core/Utilities.js"]], function (d) {
+    var x = d.clamp,
+      q = d.error,
+      l = d.pick;
+    return function (b) {
+      function d() {
+        g.length && q("[highcharts boost] shader error - " + g.join("\n"));
+      }
+      function w(a, c) {
+        var f = b.createShader(
+          "vertex" === c ? b.VERTEX_SHADER : b.FRAGMENT_SHADER
+        );
+        b.shaderSource(f, a);
+        b.compileShader(f);
+        return b.getShaderParameter(f, b.COMPILE_STATUS)
+          ? f
+          : (g.push(
+              "when compiling " + c + " shader:\n" + b.getShaderInfoLog(f)
+            ),
+            !1);
+      }
+      function p() {
+        function a(a) {
+          return b.getUniformLocation(h, a);
+        }
+        var L = w(
+            "#version 100\n#define LN10 2.302585092994046\nprecision highp float;\nattribute vec4 aVertexPosition;\nattribute vec4 aColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform mat4 uPMatrix;\nuniform float pSize;\nuniform float translatedThreshold;\nuniform bool hasThreshold;\nuniform bool skipTranslation;\nuniform float xAxisTrans;\nuniform float xAxisMin;\nuniform float xAxisMinPad;\nuniform float xAxisPointRange;\nuniform float xAxisLen;\nuniform bool  xAxisPostTranslate;\nuniform float xAxisOrdinalSlope;\nuniform float xAxisOrdinalOffset;\nuniform float xAxisPos;\nuniform bool  xAxisCVSCoord;\nuniform bool  xAxisIsLog;\nuniform bool  xAxisReversed;\nuniform float yAxisTrans;\nuniform float yAxisMin;\nuniform float yAxisMinPad;\nuniform float yAxisPointRange;\nuniform float yAxisLen;\nuniform bool  yAxisPostTranslate;\nuniform float yAxisOrdinalSlope;\nuniform float yAxisOrdinalOffset;\nuniform float yAxisPos;\nuniform bool  yAxisCVSCoord;\nuniform bool  yAxisIsLog;\nuniform bool  yAxisReversed;\nuniform bool  isBubble;\nuniform bool  bubbleSizeByArea;\nuniform float bubbleZMin;\nuniform float bubbleZMax;\nuniform float bubbleZThreshold;\nuniform float bubbleMinSize;\nuniform float bubbleMaxSize;\nuniform bool  bubbleSizeAbs;\nuniform bool  isInverted;\nfloat bubbleRadius(){\nfloat value = aVertexPosition.w;\nfloat zMax = bubbleZMax;\nfloat zMin = bubbleZMin;\nfloat radius = 0.0;\nfloat pos = 0.0;\nfloat zRange = zMax - zMin;\nif (bubbleSizeAbs){\nvalue = value - bubbleZThreshold;\nzMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);\nzMin = 0.0;\n}\nif (value < zMin){\nradius = bubbleZMin / 2.0 - 1.0;\n} else {\npos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;\nif (bubbleSizeByArea && pos > 0.0){\npos = sqrt(pos);\n}\nradius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;\n}\nreturn radius * 2.0;\n}\nfloat translate(float val,\nfloat pointPlacement,\nfloat localA,\nfloat localMin,\nfloat minPixelPadding,\nfloat pointRange,\nfloat len,\nbool  cvsCoord,\nbool  isLog,\nbool  reversed\n){\nfloat sign = 1.0;\nfloat cvsOffset = 0.0;\nif (cvsCoord) {\nsign *= -1.0;\ncvsOffset = len;\n}\nif (isLog) {\nval = log(val) / LN10;\n}\nif (reversed) {\nsign *= -1.0;\ncvsOffset -= sign * len;\n}\nreturn sign * (val - localMin) * localA + cvsOffset + \n(sign * minPixelPadding);\n}\nfloat xToPixels(float value) {\nif (skipTranslation){\nreturn value;// + xAxisPos;\n}\nreturn translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;\n}\nfloat yToPixels(float value, float checkTreshold) {\nfloat v;\nif (skipTranslation){\nv = value;// + yAxisPos;\n} else {\nv = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;\nif (v > yAxisLen) {\nv = yAxisLen;\n}\n}\nif (checkTreshold > 0.0 && hasThreshold) {\nv = min(v, translatedThreshold);\n}\nreturn v;\n}\nvoid main(void) {\nif (isBubble){\ngl_PointSize = bubbleRadius();\n} else {\ngl_PointSize = pSize;\n}\nvColor = aColor;\nif (skipTranslation && isInverted) {\ngl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);\n} else if (isInverted) {\ngl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);\n} else {\ngl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);\n}\n}",
+            "vertex"
+          ),
+          f = w(
+            "precision highp float;\nuniform vec4 fillColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform sampler2D uSampler;\nuniform bool isCircle;\nuniform bool hasColor;\nvoid main(void) {\nvec4 col = fillColor;\nvec4 tcol = texture2D(uSampler, gl_PointCoord.st);\nif (hasColor) {\ncol = vColor;\n}\nif (isCircle) {\ncol *= tcol;\nif (tcol.r < 0.0) {\ndiscard;\n} else {\ngl_FragColor = col;\n}\n} else {\ngl_FragColor = col;\n}\n}",
+            "fragment"
+          );
+        if (!L || !f) return (h = !1), d(), !1;
+        h = b.createProgram();
+        b.attachShader(h, L);
+        b.attachShader(h, f);
+        b.linkProgram(h);
+        if (!b.getProgramParameter(h, b.LINK_STATUS))
+          return g.push(b.getProgramInfoLog(h)), d(), (h = !1);
+        b.useProgram(h);
+        b.bindAttribLocation(h, 0, "aVertexPosition");
+        e = a("uPMatrix");
+        n = a("pSize");
+        m = a("fillColor");
+        P = a("isBubble");
+        t = a("bubbleSizeAbs");
+        k = a("bubbleSizeByArea");
+        K = a("uSampler");
+        G = a("skipTranslation");
+        c = a("isCircle");
+        u = a("isInverted");
+        return !0;
+      }
+      function D(a, c) {
+        b &&
+          h &&
+          ((a = y[a] = y[a] || b.getUniformLocation(h, a)), b.uniform1f(a, c));
+      }
+      var y = {},
+        h,
+        e,
+        n,
+        m,
+        P,
+        t,
+        k,
+        G,
+        c,
+        u,
+        g = [],
+        K;
+      return b && !p()
+        ? !1
+        : {
+            psUniform: function () {
+              return n;
+            },
+            pUniform: function () {
+              return e;
+            },
+            fillColorUniform: function () {
+              return m;
+            },
+            setBubbleUniforms: function (a, g, f) {
+              var u = a.options,
+                e = Number.MAX_VALUE,
+                d = -Number.MAX_VALUE;
+              b &&
+                h &&
+                "bubble" === a.type &&
+                ((e = l(
+                  u.zMin,
+                  x(
+                    g,
+                    !1 === u.displayNegative ? u.zThreshold : -Number.MAX_VALUE,
+                    e
+                  )
+                )),
+                (d = l(u.zMax, Math.max(d, f))),
+                b.uniform1i(P, 1),
+                b.uniform1i(c, 1),
+                b.uniform1i(k, "width" !== a.options.sizeBy),
+                b.uniform1i(t, a.options.sizeByAbsoluteValue),
+                D("bubbleZMin", e),
+                D("bubbleZMax", d),
+                D("bubbleZThreshold", a.options.zThreshold),
+                D("bubbleMinSize", a.minPxSize),
+                D("bubbleMaxSize", a.maxPxSize));
+            },
+            bind: function () {
+              b && h && b.useProgram(h);
+            },
+            program: function () {
+              return h;
+            },
+            create: p,
+            setUniform: D,
+            setPMatrix: function (a) {
+              b && h && b.uniformMatrix4fv(e, !1, a);
+            },
+            setColor: function (a) {
+              b &&
+                h &&
+                b.uniform4f(m, a[0] / 255, a[1] / 255, a[2] / 255, a[3]);
+            },
+            setPointSize: function (a) {
+              b && h && b.uniform1f(n, a);
+            },
+            setSkipTranslation: function (a) {
+              b && h && b.uniform1i(G, !0 === a ? 1 : 0);
+            },
+            setTexture: function (a) {
+              b && h && b.uniform1i(K, a);
+            },
+            setDrawAsCircle: function (a) {
+              b && h && b.uniform1i(c, a ? 1 : 0);
+            },
+            reset: function () {
+              b && h && (b.uniform1i(P, 0), b.uniform1i(c, 0));
+            },
+            setInverted: function (a) {
+              b && h && b.uniform1i(u, a);
+            },
+            destroy: function () {
+              b && h && (b.deleteProgram(h), (h = !1));
+            },
+          };
+    };
+  });
+  r(d, "Extensions/Boost/WGLVBuffer.js", [], function () {
+    return function (d, C, q) {
+      function l() {
+        b && (d.deleteBuffer(b), (x = b = !1));
+        D = 0;
+        w = q || 2;
+        y = [];
+      }
+      var b = !1,
+        x = !1,
+        w = q || 2,
+        p = !1,
+        D = 0,
+        y;
+      return {
+        destroy: l,
+        bind: function () {
+          if (!b) return !1;
+          d.vertexAttribPointer(x, w, d.FLOAT, !1, 0, 0);
+        },
+        data: y,
+        build: function (h, e, n) {
+          var m;
+          y = h || [];
+          if (!((y && 0 !== y.length) || p)) return l(), !1;
+          w = n || w;
+          b && d.deleteBuffer(b);
+          p || (m = new Float32Array(y));
+          b = d.createBuffer();
+          d.bindBuffer(d.ARRAY_BUFFER, b);
+          d.bufferData(d.ARRAY_BUFFER, p || m, d.STATIC_DRAW);
+          x = d.getAttribLocation(C.program(), e);
+          d.enableVertexAttribArray(x);
+          return !0;
+        },
+        render: function (h, e, n) {
+          var m = p ? p.length : y.length;
+          if (!b || !m) return !1;
+          if (!h || h > m || 0 > h) h = 0;
+          if (!e || e > m) e = m;
+          d.drawArrays(d[(n || "points").toUpperCase()], h / w, (e - h) / w);
+          return !0;
+        },
+        allocate: function (d) {
+          D = -1;
+          p = new Float32Array(4 * d);
+        },
+        push: function (d, e, b, m) {
+          p && ((p[++D] = d), (p[++D] = e), (p[++D] = b), (p[++D] = m));
+        },
+      };
+    };
+  });
+  r(
+    d,
+    "Extensions/Boost/WGLRenderer.js",
+    [
+      d["Core/Color/Color.js"],
+      d["Extensions/Boost/WGLShader.js"],
+      d["Extensions/Boost/WGLVBuffer.js"],
+      d["Core/Globals.js"],
+      d["Core/Utilities.js"],
+    ],
+    function (d, C, q, l, b) {
+      var x = d.parse,
+        w = l.doc,
+        p = b.isNumber,
+        D = b.isObject,
+        y = b.merge,
+        h = b.objectEach,
+        e = b.pick;
+      return function (b) {
+        function m(a) {
+          if (a.isSeriesBoosting) {
+            var c = !!a.options.stacking;
+            var g = a.xData || a.options.xData || a.processedXData;
+            c = (c ? a.data : g || a.options.data).length;
+            "treemap" === a.type
+              ? (c *= 12)
+              : "heatmap" === a.type
+              ? (c *= 6)
+              : ia[a.type] && (c *= 2);
+            return c;
+          }
+          return 0;
+        }
+        function n() {
+          f.clear(f.COLOR_BUFFER_BIT | f.DEPTH_BUFFER_BIT);
+        }
+        function t(a, c) {
+          function g(a) {
+            a &&
+              (c.colorData.push(a[0]),
+              c.colorData.push(a[1]),
+              c.colorData.push(a[2]),
+              c.colorData.push(a[3]));
+          }
+          function f(a, c, f, u, d) {
+            g(d);
+            z.usePreallocated
+              ? L.push(a, c, f ? 1 : 0, u || 1)
+              : (R.push(a), R.push(c), R.push(f ? 1 : 0), R.push(u || 1));
+          }
+          function u() {
+            c.segments.length &&
+              (c.segments[c.segments.length - 1].to = R.length);
+          }
+          function e() {
+            (c.segments.length &&
+              c.segments[c.segments.length - 1].from === R.length) ||
+              (u(), c.segments.push({ from: R.length }));
+          }
+          function b(a, c, u, d, e) {
+            g(e);
+            f(a + u, c);
+            g(e);
+            f(a, c);
+            g(e);
+            f(a, c + d);
+            g(e);
+            f(a, c + d);
+            g(e);
+            f(a + u, c + d);
+            g(e);
+            f(a + u, c);
+          }
+          function K(a, g) {
+            z.useGPUTranslations ||
+              ((c.skipTranslation = !0),
+              (a.x = G.toPixels(a.x, !0)),
+              (a.y = P.toPixels(a.y, !0)));
+            g ? (R = [a.x, a.y, 0, 2].concat(R)) : f(a.x, a.y, 0, 2);
+          }
+          var h = a.pointArrayMap && "low,high" === a.pointArrayMap.join(","),
+            n = a.chart,
+            E = a.options,
+            m = !!E.stacking,
+            T = E.data,
+            k = a.xAxis.getExtremes(),
+            p = k.min;
+          k = k.max;
+          var l = a.yAxis.getExtremes(),
+            X = l.min;
+          l = l.max;
+          var t = a.xData || E.xData || a.processedXData,
+            y = a.yData || E.yData || a.processedYData,
+            q = a.zData || E.zData || a.processedZData,
+            P = a.yAxis,
+            G = a.xAxis,
+            B = a.chart.plotWidth,
+            w = !t || 0 === t.length,
+            C = E.connectNulls,
+            v = a.points || !1,
+            M = !1,
+            r = !1,
+            Q;
+          t = m ? a.data : t || T;
+          var I = { x: Number.MAX_VALUE, y: 0 },
+            O = { x: -Number.MAX_VALUE, y: 0 },
+            N = 0,
+            Fa = !1,
+            J = -1,
+            Y = !1,
+            fa = !1,
+            Z = "undefined" === typeof n.index,
+            ya = !1,
+            V = !1;
+          var A = !1;
+          var Ma = ia[a.type],
+            za = !1,
+            Ia = !0,
+            Ba = !0,
+            ma = E.zones || !1,
+            ha = !1,
+            Ga = E.threshold,
+            Aa = !1;
+          if (!(E.boostData && 0 < E.boostData.length)) {
+            E.gapSize &&
+              (Aa =
+                "value" !== E.gapUnit
+                  ? E.gapSize * a.closestPointRange
+                  : E.gapSize);
+            ma &&
+              (ma.some(function (a) {
+                return "undefined" === typeof a.value
+                  ? ((ha = new d(a.color)), !0)
+                  : !1;
+              }),
+              ha ||
+                ((ha = (a.pointAttribs && a.pointAttribs().fill) || a.color),
+                (ha = new d(ha))));
+            n.inverted && (B = a.chart.plotHeight);
+            a.closestPointRangePx = Number.MAX_VALUE;
+            e();
+            if (v && 0 < v.length)
+              (c.skipTranslation = !0),
+                (c.drawMode = "triangles"),
+                v[0].node &&
+                  v[0].node.levelDynamic &&
+                  v.sort(function (a, c) {
+                    if (a.node) {
+                      if (a.node.levelDynamic > c.node.levelDynamic) return 1;
+                      if (a.node.levelDynamic < c.node.levelDynamic) return -1;
+                    }
+                    return 0;
+                  }),
+                v.forEach(function (c) {
+                  var g = c.plotY;
+                  if ("undefined" !== typeof g && !isNaN(g) && null !== c.y) {
+                    g = c.shapeArgs;
+                    var f = n.styledMode
+                      ? c.series.colorAttribs(c)
+                      : (f = c.series.pointAttribs(c));
+                    c = f["stroke-width"] || 0;
+                    A = x(f.fill).rgba;
+                    A[0] /= 255;
+                    A[1] /= 255;
+                    A[2] /= 255;
+                    "treemap" === a.type &&
+                      ((c = c || 1),
+                      (Q = x(f.stroke).rgba),
+                      (Q[0] /= 255),
+                      (Q[1] /= 255),
+                      (Q[2] /= 255),
+                      b(g.x, g.y, g.width, g.height, Q),
+                      (c /= 2));
+                    "heatmap" === a.type &&
+                      n.inverted &&
+                      ((g.x = G.len - g.x),
+                      (g.y = P.len - g.y),
+                      (g.width = -g.width),
+                      (g.height = -g.height));
+                    b(g.x + c, g.y + c, g.width - 2 * c, g.height - 2 * c, A);
+                  }
+                });
+            else {
+              for (; J < t.length - 1; ) {
+                var H = t[++J];
+                if (Z) break;
+                v = T && T[J];
+                !w &&
+                  D(v, !0) &&
+                  v.color &&
+                  ((A = x(v.color).rgba),
+                  (A[0] /= 255),
+                  (A[1] /= 255),
+                  (A[2] /= 255));
+                if (w) {
+                  v = H[0];
+                  var F = H[1];
+                  t[J + 1] && (fa = t[J + 1][0]);
+                  t[J - 1] && (Y = t[J - 1][0]);
+                  if (3 <= H.length) {
+                    var Ha = H[2];
+                    H[2] > c.zMax && (c.zMax = H[2]);
+                    H[2] < c.zMin && (c.zMin = H[2]);
+                  }
+                } else
+                  (v = H),
+                    (F = y[J]),
+                    t[J + 1] && (fa = t[J + 1]),
+                    t[J - 1] && (Y = t[J - 1]),
+                    q &&
+                      q.length &&
+                      ((Ha = q[J]),
+                      q[J] > c.zMax && (c.zMax = q[J]),
+                      q[J] < c.zMin && (c.zMin = q[J]));
+                if (C || (null !== v && null !== F)) {
+                  fa && fa >= p && fa <= k && (ya = !0);
+                  Y && Y >= p && Y <= k && (V = !0);
+                  if (h) {
+                    w && (F = H.slice(1, 3));
+                    var sa = F[0];
+                    F = F[1];
+                  } else m && ((v = H.x), (F = H.stackY), (sa = F - H.y));
+                  null !== X &&
+                    "undefined" !== typeof X &&
+                    null !== l &&
+                    "undefined" !== typeof l &&
+                    (Ia = F >= X && F <= l);
+                  v > k && O.x < k && ((O.x = v), (O.y = F));
+                  v < p && I.x > p && ((I.x = v), (I.y = F));
+                  if (null !== F || !C)
+                    if (null !== F && (Ia || ya || V)) {
+                      if (
+                        ((fa >= p || v >= p) && (Y <= k || v <= k) && (za = !0),
+                        za || ya || V)
+                      ) {
+                        Aa && v - Y > Aa && e();
+                        ma &&
+                          ((A = ha.rgba),
+                          ma.some(function (a, c) {
+                            c = ma[c - 1];
+                            if (
+                              "undefined" !== typeof a.value &&
+                              F <= a.value
+                            ) {
+                              if (!c || F >= c.value) A = x(a.color).rgba;
+                              return !0;
+                            }
+                            return !1;
+                          }),
+                          (A[0] /= 255),
+                          (A[1] /= 255),
+                          (A[2] /= 255));
+                        if (
+                          !z.useGPUTranslations &&
+                          ((c.skipTranslation = !0),
+                          (v = G.toPixels(v, !0)),
+                          (F = P.toPixels(F, !0)),
+                          v > B && "points" === c.drawMode)
+                        )
+                          continue;
+                        if (Ma) {
+                          H = sa;
+                          if (!1 === sa || "undefined" === typeof sa)
+                            H = 0 > F ? F : 0;
+                          h || m || (H = Math.max(null === Ga ? X : Ga, X));
+                          z.useGPUTranslations || (H = P.toPixels(H, !0));
+                          f(v, H, 0, 0, A);
+                        }
+                        c.hasMarkers &&
+                          za &&
+                          !1 !== M &&
+                          (a.closestPointRangePx = Math.min(
+                            a.closestPointRangePx,
+                            Math.abs(v - M)
+                          ));
+                        !z.useGPUTranslations &&
+                        !z.usePreallocated &&
+                        M &&
+                        1 > Math.abs(v - M) &&
+                        r &&
+                        1 > Math.abs(F - r)
+                          ? z.debug.showSkipSummary && ++N
+                          : (E.step && !Ba && f(v, r, 0, 2, A),
+                            f(v, F, 0, "bubble" === a.type ? Ha || 1 : 2, A),
+                            (M = v),
+                            (r = F),
+                            (Fa = !0),
+                            (Ba = !1));
+                      }
+                    } else e();
+                } else e();
+              }
+              (z.debug.showSkipSummary && //console.log("skipped points:", N);
+                Fa) ||
+                !1 === C ||
+                "line_strip" !== a.drawMode ||
+                (I.x < Number.MAX_VALUE && K(I, !0),
+                O.x > -Number.MAX_VALUE && K(O));
+            }
+            u();
+          }
+        }
+        function k() {
+          I = [];
+          r.data = R = [];
+          Q = [];
+          L && L.destroy();
+        }
+        function G(c) {
+          a &&
+            (a.setUniform("xAxisTrans", c.transA),
+            a.setUniform("xAxisMin", c.min),
+            a.setUniform("xAxisMinPad", c.minPixelPadding),
+            a.setUniform("xAxisPointRange", c.pointRange),
+            a.setUniform("xAxisLen", c.len),
+            a.setUniform("xAxisPos", c.pos),
+            a.setUniform("xAxisCVSCoord", !c.horiz),
+            a.setUniform("xAxisIsLog", !!c.logarithmic),
+            a.setUniform("xAxisReversed", !!c.reversed));
+        }
+        function c(c) {
+          a &&
+            (a.setUniform("yAxisTrans", c.transA),
+            a.setUniform("yAxisMin", c.min),
+            a.setUniform("yAxisMinPad", c.minPixelPadding),
+            a.setUniform("yAxisPointRange", c.pointRange),
+            a.setUniform("yAxisLen", c.len),
+            a.setUniform("yAxisPos", c.pos),
+            a.setUniform("yAxisCVSCoord", !c.horiz),
+            a.setUniform("yAxisIsLog", !!c.logarithmic),
+            a.setUniform("yAxisReversed", !!c.reversed));
+        }
+        function u(c, g) {
+          a.setUniform("hasThreshold", c);
+          a.setUniform("translatedThreshold", g);
+        }
+        function g(g) {
+          if (g) (M = g.chartWidth || 800), (B = g.chartHeight || 400);
+          else return !1;
+          if (!(f && M && B && a)) return !1;
+          z.debug.timeRendering && console.time("gl rendering");
+          f.canvas.width = M;
+          f.canvas.height = B;
+          a.bind();
+          f.viewport(0, 0, M, B);
+          a.setPMatrix([
+            2 / M,
+            0,
+            0,
+            0,
+            0,
+            -(2 / B),
+            0,
+            0,
+            0,
+            0,
+            -2,
+            0,
+            -1,
+            1,
+            -1,
+            1,
+          ]);
+          1 < z.lineWidth && !l.isMS && f.lineWidth(z.lineWidth);
+          L.build(r.data, "aVertexPosition", 4);
+          L.bind();
+          a.setInverted(g.inverted);
+          I.forEach(function (b, K) {
+            var n = b.series.options,
+              h = n.marker;
+            var m = "undefined" !== typeof n.lineWidth ? n.lineWidth : 1;
+            var k = n.threshold,
+              E = p(k),
+              t = b.series.yAxis.getThreshold(k);
+            k = e(
+              n.marker ? n.marker.enabled : null,
+              b.series.xAxis.isRadial ? !0 : null,
+              b.series.closestPointRangePx >
+                2 * ((n.marker ? n.marker.radius : 10) || 10)
+            );
+            h = V[(h && h.symbol) || b.series.symbol] || V.circle;
+            if (
+              !(
+                0 === b.segments.length ||
+                (b.segmentslength && b.segments[0].from === b.segments[0].to)
+              )
+            ) {
+              h.isReady &&
+                (f.bindTexture(f.TEXTURE_2D, h.handle), a.setTexture(h.handle));
+              g.styledMode
+                ? (h =
+                    b.series.markerGroup &&
+                    b.series.markerGroup.getStyle("fill"))
+                : ((h =
+                    (b.series.pointAttribs && b.series.pointAttribs().fill) ||
+                    b.series.color),
+                  n.colorByPoint && (h = b.series.chart.options.colors[K]));
+              b.series.fillOpacity &&
+                n.fillOpacity &&
+                (h = new d(h).setOpacity(e(n.fillOpacity, 1)).get());
+              h = x(h).rgba;
+              z.useAlpha || (h[3] = 1);
+              "lines" === b.drawMode && z.useAlpha && 1 > h[3] && (h[3] /= 10);
+              "add" === n.boostBlending
+                ? (f.blendFunc(f.SRC_ALPHA, f.ONE), f.blendEquation(f.FUNC_ADD))
+                : "mult" === n.boostBlending || "multiply" === n.boostBlending
+                ? f.blendFunc(f.DST_COLOR, f.ZERO)
+                : "darken" === n.boostBlending
+                ? (f.blendFunc(f.ONE, f.ONE), f.blendEquation(f.FUNC_MIN))
+                : f.blendFuncSeparate(
+                    f.SRC_ALPHA,
+                    f.ONE_MINUS_SRC_ALPHA,
+                    f.ONE,
+                    f.ONE_MINUS_SRC_ALPHA
+                  );
+              a.reset();
+              0 < b.colorData.length &&
+                (a.setUniform("hasColor", 1),
+                (K = q(f, a)),
+                K.build(b.colorData, "aColor", 4),
+                K.bind());
+              a.setColor(h);
+              G(b.series.xAxis);
+              c(b.series.yAxis);
+              u(E, t);
+              "points" === b.drawMode &&
+                (n.marker && p(n.marker.radius)
+                  ? a.setPointSize(2 * n.marker.radius)
+                  : a.setPointSize(1));
+              a.setSkipTranslation(b.skipTranslation);
+              "bubble" === b.series.type &&
+                a.setBubbleUniforms(b.series, b.zMin, b.zMax);
+              a.setDrawAsCircle(Z[b.series.type] || !1);
+              if (0 < m || "line_strip" !== b.drawMode)
+                for (m = 0; m < b.segments.length; m++)
+                  L.render(b.segments[m].from, b.segments[m].to, b.drawMode);
+              if (b.hasMarkers && k)
+                for (
+                  n.marker && p(n.marker.radius)
+                    ? a.setPointSize(2 * n.marker.radius)
+                    : a.setPointSize(10),
+                    a.setDrawAsCircle(!0),
+                    m = 0;
+                  m < b.segments.length;
+                  m++
+                )
+                  L.render(b.segments[m].from, b.segments[m].to, "POINTS");
+            }
+          });
+          z.debug.timeRendering && console.timeEnd("gl rendering");
+          b && b();
+          k();
+        }
+        function K(a) {
+          n();
+          if (a.renderer.forExport) return g(a);
+          O
+            ? g(a)
+            : setTimeout(function () {
+                K(a);
+              }, 1);
+        }
+        var a = !1,
+          L = !1,
+          f = !1,
+          M = 0,
+          B = 0,
+          R = !1,
+          Q = !1,
+          r = {},
+          O = !1,
+          I = [],
+          V = {},
+          ia = {
+            column: !0,
+            columnrange: !0,
+            bar: !0,
+            area: !0,
+            arearange: !0,
+          },
+          Z = { scatter: !0, bubble: !0 },
+          z = {
+            pointSize: 1,
+            lineWidth: 1,
+            fillColor: "#AA00AA",
+            useAlpha: !0,
+            usePreallocated: !1,
+            useGPUTranslations: !1,
+            debug: {
+              timeRendering: !1,
+              timeSeriesProcessing: !1,
+              timeSetup: !1,
+              timeBufferCopy: !1,
+              timeKDTree: !1,
+              showSkipSummary: !1,
+            },
+          };
+        return (r = {
+          allocateBufferForSingleSeries: function (a) {
+            var c = 0;
+            z.usePreallocated &&
+              (a.isSeriesBoosting && (c = m(a)), L.allocate(c));
+          },
+          pushSeries: function (a) {
+            0 < I.length &&
+              I[I.length - 1].hasMarkers &&
+              (I[I.length - 1].markerTo = Q.length);
+            z.debug.timeSeriesProcessing &&
+              console.time("building " + a.type + " series");
+            I.push({
+              segments: [],
+              markerFrom: Q.length,
+              colorData: [],
+              series: a,
+              zMin: Number.MAX_VALUE,
+              zMax: -Number.MAX_VALUE,
+              hasMarkers: a.options.marker
+                ? !1 !== a.options.marker.enabled
+                : !1,
+              showMarkers: !0,
+              drawMode:
+                {
+                  area: "lines",
+                  arearange: "lines",
+                  areaspline: "line_strip",
+                  column: "lines",
+                  columnrange: "lines",
+                  bar: "lines",
+                  line: "line_strip",
+                  scatter: "points",
+                  heatmap: "triangles",
+                  treemap: "triangles",
+                  bubble: "points",
+                }[a.type] || "line_strip",
+            });
+            t(a, I[I.length - 1]);
+            z.debug.timeSeriesProcessing &&
+              console.timeEnd("building " + a.type + " series");
+          },
+          setSize: function (c, g) {
+            (M === c && B === g) ||
+              !a ||
+              ((M = c),
+              (B = g),
+              a.bind(),
+              a.setPMatrix([
+                2 / M,
+                0,
+                0,
+                0,
+                0,
+                -(2 / B),
+                0,
+                0,
+                0,
+                0,
+                -2,
+                0,
+                -1,
+                1,
+                -1,
+                1,
+              ]));
+          },
+          inited: function () {
+            return O;
+          },
+          setThreshold: u,
+          init: function (c, g) {
+            function b(a, c) {
+              var g = {
+                  isReady: !1,
+                  texture: w.createElement("canvas"),
+                  handle: f.createTexture(),
+                },
+                b = g.texture.getContext("2d");
+              V[a] = g;
+              g.texture.width = 512;
+              g.texture.height = 512;
+              b.mozImageSmoothingEnabled = !1;
+              b.webkitImageSmoothingEnabled = !1;
+              b.msImageSmoothingEnabled = !1;
+              b.imageSmoothingEnabled = !1;
+              b.strokeStyle = "rgba(255, 255, 255, 0)";
+              b.fillStyle = "#FFF";
+              c(b);
+              try {
+                f.activeTexture(f.TEXTURE0),
+                  f.bindTexture(f.TEXTURE_2D, g.handle),
+                  f.texImage2D(
+                    f.TEXTURE_2D,
+                    0,
+                    f.RGBA,
+                    f.RGBA,
+                    f.UNSIGNED_BYTE,
+                    g.texture
+                  ),
+                  f.texParameteri(
+                    f.TEXTURE_2D,
+                    f.TEXTURE_WRAP_S,
+                    f.CLAMP_TO_EDGE
+                  ),
+                  f.texParameteri(
+                    f.TEXTURE_2D,
+                    f.TEXTURE_WRAP_T,
+                    f.CLAMP_TO_EDGE
+                  ),
+                  f.texParameteri(f.TEXTURE_2D, f.TEXTURE_MAG_FILTER, f.LINEAR),
+                  f.texParameteri(f.TEXTURE_2D, f.TEXTURE_MIN_FILTER, f.LINEAR),
+                  f.bindTexture(f.TEXTURE_2D, null),
+                  (g.isReady = !0);
+              } catch (U) {}
+            }
+            var u = 0,
+              d = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"];
+            O = !1;
+            if (!c) return !1;
+            for (
+              z.debug.timeSetup && console.time("gl setup");
+              u < d.length && !(f = c.getContext(d[u], {}));
+              u++
+            );
+            if (f) g || k();
+            else return !1;
+            f.enable(f.BLEND);
+            f.blendFunc(f.SRC_ALPHA, f.ONE_MINUS_SRC_ALPHA);
+            f.disable(f.DEPTH_TEST);
+            f.depthFunc(f.LESS);
+            a = C(f);
+            if (!a) return !1;
+            L = q(f, a);
+            b("circle", function (a) {
+              a.beginPath();
+              a.arc(256, 256, 256, 0, 2 * Math.PI);
+              a.stroke();
+              a.fill();
+            });
+            b("square", function (a) {
+              a.fillRect(0, 0, 512, 512);
+            });
+            b("diamond", function (a) {
+              a.beginPath();
+              a.moveTo(256, 0);
+              a.lineTo(512, 256);
+              a.lineTo(256, 512);
+              a.lineTo(0, 256);
+              a.lineTo(256, 0);
+              a.fill();
+            });
+            b("triangle", function (a) {
+              a.beginPath();
+              a.moveTo(0, 512);
+              a.lineTo(256, 0);
+              a.lineTo(512, 512);
+              a.lineTo(0, 512);
+              a.fill();
+            });
+            b("triangle-down", function (a) {
+              a.beginPath();
+              a.moveTo(0, 0);
+              a.lineTo(256, 512);
+              a.lineTo(512, 0);
+              a.lineTo(0, 0);
+              a.fill();
+            });
+            O = !0;
+            z.debug.timeSetup && console.timeEnd("gl setup");
+            return !0;
+          },
+          render: K,
+          settings: z,
+          valid: function () {
+            return !1 !== f;
+          },
+          clear: n,
+          flush: k,
+          setXAxis: G,
+          setYAxis: c,
+          data: R,
+          gl: function () {
+            return f;
+          },
+          allocateBuffer: function (a) {
+            var c = 0;
+            z.usePreallocated &&
+              (a.series.forEach(function (a) {
+                a.isSeriesBoosting && (c += m(a));
+              }),
+              L.allocate(c));
+          },
+          destroy: function () {
+            k();
+            L.destroy();
+            a.destroy();
+            f &&
+              (h(V, function (a) {
+                a.handle && f.deleteTexture(a.handle);
+              }),
+              (f.canvas.width = 1),
+              (f.canvas.height = 1));
+          },
+          setOptions: function (a) {
+            y(!0, z, a);
+          },
+        });
+      };
+    }
+  );
+  r(
+    d,
+    "Extensions/Boost/BoostAttach.js",
+    [
+      d["Core/Chart/Chart.js"],
+      d["Extensions/Boost/WGLRenderer.js"],
+      d["Core/Globals.js"],
+      d["Core/Utilities.js"],
+    ],
+    function (d, C, q, l) {
+      var b = q.doc,
+        x = l.error,
+        w = b.createElement("canvas");
+      return function (p, l) {
+        var q = p.chartWidth,
+          h = p.chartHeight,
+          e = p,
+          n = p.seriesGroup || l.group,
+          m = b.implementation.hasFeature(
+            "www.http://w3.org/TR/SVG11/feature#Extensibility",
+            "1.1"
+          );
+        e = p.isChartSeriesBoosting() ? p : l;
+        m = !1;
+        e.renderTarget ||
+          ((e.canvas = w),
+          p.renderer.forExport || !m
+            ? ((e.renderTarget = p.renderer
+                .image("", 0, 0, q, h)
+                .addClass("highcharts-boost-canvas")
+                .add(n)),
+              (e.boostClear = function () {
+                e.renderTarget.attr({ href: "" });
+              }),
+              (e.boostCopy = function () {
+                e.boostResizeTarget();
+                e.renderTarget.attr({ href: e.canvas.toDataURL("image/png") });
+              }))
+            : ((e.renderTargetFo = p.renderer
+                .createElement("foreignObject")
+                .add(n)),
+              (e.renderTarget = b.createElement("canvas")),
+              (e.renderTargetCtx = e.renderTarget.getContext("2d")),
+              e.renderTargetFo.element.appendChild(e.renderTarget),
+              (e.boostClear = function () {
+                e.renderTarget.width = e.canvas.width;
+                e.renderTarget.height = e.canvas.height;
+              }),
+              (e.boostCopy = function () {
+                e.renderTarget.width = e.canvas.width;
+                e.renderTarget.height = e.canvas.height;
+                e.renderTargetCtx.drawImage(e.canvas, 0, 0);
+              })),
+          (e.boostResizeTarget = function () {
+            q = p.chartWidth;
+            h = p.chartHeight;
+            (e.renderTargetFo || e.renderTarget)
+              .attr({ x: 0, y: 0, width: q, height: h })
+              .css({
+                pointerEvents: "none",
+                mixedBlendMode: "normal",
+                opacity: 1,
+              });
+            e instanceof d && e.markerGroup.translate(p.plotLeft, p.plotTop);
+          }),
+          (e.boostClipRect = p.renderer.clipRect()),
+          (e.renderTargetFo || e.renderTarget).clip(e.boostClipRect),
+          e instanceof d &&
+            ((e.markerGroup = e.renderer.g().add(n)),
+            e.markerGroup.translate(l.xAxis.pos, l.yAxis.pos)));
+        e.canvas.width = q;
+        e.canvas.height = h;
+        e.boostClipRect.attr(p.getBoostClipRect(e));
+        e.boostResizeTarget();
+        e.boostClear();
+        e.ogl ||
+          ((e.ogl = C(function () {
+            e.ogl.settings.debug.timeBufferCopy && console.time("buffer copy");
+            e.boostCopy();
+            e.ogl.settings.debug.timeBufferCopy &&
+              console.timeEnd("buffer copy");
+          })),
+          e.ogl.init(e.canvas) ||
+            x("[highcharts boost] - unable to init WebGL renderer"),
+          e.ogl.setOptions(p.options.boost || {}),
+          e instanceof d && e.ogl.allocateBuffer(p));
+        e.ogl.setSize(q, h);
+        return e.ogl;
+      };
+    }
+  );
+  r(
+    d,
+    "Extensions/Boost/BoostUtils.js",
+    [
+      d["Core/Globals.js"],
+      d["Extensions/Boost/BoostableMap.js"],
+      d["Extensions/Boost/BoostAttach.js"],
+      d["Core/Utilities.js"],
+    ],
+    function (d, C, q, l) {
+      function b() {
+        for (var b = [], d = 0; d < arguments.length; d++) b[d] = arguments[d];
+        var e = -Number.MAX_VALUE;
+        b.forEach(function (b) {
+          if (
+            "undefined" !== typeof b &&
+            null !== b &&
+            "undefined" !== typeof b.length &&
+            0 < b.length
+          )
+            return (e = b.length), !0;
+        });
+        return e;
+      }
+      function x(b, d, e) {
+        b &&
+          d.renderTarget &&
+          d.canvas &&
+          !(e || d.chart).isChartSeriesBoosting() &&
+          b.render(e || d.chart);
+      }
+      function w(b, d) {
+        b &&
+          d.renderTarget &&
+          d.canvas &&
+          !d.chart.isChartSeriesBoosting() &&
+          b.allocateBufferForSingleSeries(d);
+      }
+      function p(b, d, e, h, k, l) {
+        k = k || 0;
+        h = h || 3e3;
+        for (var c = k + h, u = !0; u && k < c && k < b.length; )
+          (u = d(b[k], k)), ++k;
+        u &&
+          (k < b.length
+            ? l
+              ? p(b, d, e, h, k, l)
+              : y.requestAnimationFrame
+              ? y.requestAnimationFrame(function () {
+                  p(b, d, e, h, k);
+                })
+              : setTimeout(function () {
+                  p(b, d, e, h, k);
+                })
+            : e && e());
+      }
+      function r() {
+        var b = 0,
+          d,
+          e = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"],
+          p = !1;
+        if ("undefined" !== typeof y.WebGLRenderingContext)
+          for (d = h.createElement("canvas"); b < e.length; b++)
+            try {
+              if (
+                ((p = d.getContext(e[b])),
+                "undefined" !== typeof p && null !== p)
+              )
+                return !0;
+            } catch (k) {}
+        return !1;
+      }
+      var y = d.win,
+        h = d.doc,
+        e = l.pick;
+      l = {
+        patientMax: b,
+        boostEnabled: function (b) {
+          return e(
+            b && b.options && b.options.boost && b.options.boost.enabled,
+            !0
+          );
+        },
+        shouldForceChartSeriesBoosting: function (d) {
+          var h = 0,
+            p = 0,
+            n = e(d.options.boost && d.options.boost.allowForce, !0);
+          if ("undefined" !== typeof d.boostForceChartBoost)
+            return d.boostForceChartBoost;
+          if (1 < d.series.length)
+            for (var k = 0; k < d.series.length; k++) {
+              var l = d.series[k];
+              0 !== l.options.boostThreshold &&
+                !1 !== l.visible &&
+                "heatmap" !== l.type &&
+                (C[l.type] && ++p,
+                b(l.processedXData, l.options.data, l.points) >=
+                  (l.options.boostThreshold || Number.MAX_VALUE) && ++h);
+            }
+          d.boostForceChartBoost =
+            n && ((p === d.series.length && 0 < h) || 5 < h);
+          return d.boostForceChartBoost;
+        },
+        renderIfNotSeriesBoosting: x,
+        allocateIfNotSeriesBoosting: w,
+        eachAsync: p,
+        hasWebGLSupport: r,
+        pointDrawHandler: function (b) {
+          var d = !0;
+          this.chart.options &&
+            this.chart.options.boost &&
+            (d =
+              "undefined" === typeof this.chart.options.boost.enabled
+                ? !0
+                : this.chart.options.boost.enabled);
+          if (!d || !this.isSeriesBoosting) return b.call(this);
+          this.chart.isBoosting = !0;
+          if ((b = q(this.chart, this))) w(b, this), b.pushSeries(this);
+          x(b, this);
+        },
+      };
+      d.hasWebGLSupport = r;
+      return l;
+    }
+  );
+  r(
+    d,
+    "Extensions/Boost/BoostInit.js",
+    [
+      d["Core/Chart/Chart.js"],
+      d["Core/Globals.js"],
+      d["Core/Utilities.js"],
+      d["Extensions/Boost/BoostUtils.js"],
+      d["Extensions/Boost/BoostAttach.js"],
+    ],
+    function (d, r, q, l, b) {
+      var x = q.addEvent,
+        w = q.extend,
+        p = q.fireEvent,
+        C = q.wrap,
+        y = r.Series,
+        h = r.seriesTypes,
+        e = function () {},
+        n = l.eachAsync,
+        m = l.pointDrawHandler,
+        P = l.allocateIfNotSeriesBoosting,
+        t = l.renderIfNotSeriesBoosting,
+        k = l.shouldForceChartSeriesBoosting,
+        G;
+      return function () {
+        w(y.prototype, {
+          renderCanvas: function () {
+            function c(a, c) {
+              var b = !1,
+                g = "undefined" === typeof k.index,
+                d = !0;
+              if (!g) {
+                if (ka) {
+                  var u = a[0];
+                  var e = a[1];
+                } else (u = a), (e = q[c]);
+                aa
+                  ? (ka && (e = a.slice(1, 3)), (b = e[0]), (e = e[1]))
+                  : ja && ((u = a.x), (e = a.stackY), (b = e - a.y));
+                ta || (d = e >= C && e <= y);
+                if (null !== e && u >= r && u <= w && d)
+                  if (((a = f.toPixels(u, !0)), z)) {
+                    if ("undefined" === typeof U || a === D) {
+                      aa || (b = e);
+                      if ("undefined" === typeof da || e > ca)
+                        (ca = e), (da = c);
+                      if ("undefined" === typeof U || b < S) (S = b), (U = c);
+                    }
+                    a !== D &&
+                      ("undefined" !== typeof U &&
+                        ((e = l.toPixels(ca, !0)),
+                        (T = l.toPixels(S, !0)),
+                        ea(a, e, da),
+                        T !== e && ea(a, T, U)),
+                      (U = da = void 0),
+                      (D = a));
+                  } else (e = Math.ceil(l.toPixels(e, !0))), ea(a, e, c);
+              }
+              return !g;
+            }
+            function d() {
+              p(g, "renderedCanvas");
+              delete g.buildKDTree;
+              g.buildKDTree();
+              qa.debug.timeKDTree && console.timeEnd("kd tree building");
+            }
+            var g = this,
+              h = g.options || {},
+              a = !1,
+              k = g.chart,
+              f = this.xAxis,
+              l = this.yAxis,
+              m = h.xData || g.processedXData,
+              q = h.yData || g.processedYData,
+              x = h.data;
+            a = f.getExtremes();
+            var r = a.min,
+              w = a.max;
+            a = l.getExtremes();
+            var C = a.min,
+              y = a.max,
+              B = {},
+              D,
+              z = !!g.sampling,
+              E = !1 !== h.enableMouseTracking,
+              T = l.getThreshold(h.threshold),
+              aa = g.pointArrayMap && "low,high" === g.pointArrayMap.join(","),
+              ja = !!h.stacking,
+              na = g.cropStart || 0,
+              ta = g.requireSorting,
+              ka = !m,
+              S,
+              ca,
+              U,
+              da,
+              pa = "x" === h.findNearestPointBy,
+              la =
+                this.xData || this.options.xData || this.processedXData || !1,
+              ea = function (a, c, b) {
+                a = Math.ceil(a);
+                G = pa ? a : a + "," + c;
+                E &&
+                  !B[G] &&
+                  ((B[G] = !0),
+                  k.inverted && ((a = f.len - a), (c = l.len - c)),
+                  ra.push({
+                    x: la ? la[na + b] : !1,
+                    clientX: a,
+                    plotX: a,
+                    plotY: c,
+                    i: na + b,
+                  }));
+              };
+            a = b(k, g);
+            k.isBoosting = !0;
+            var qa = a.settings;
+            if (this.visible) {
+              (this.points || this.graph) && this.destroyGraphics();
+              k.isChartSeriesBoosting()
+                ? (this.markerGroup &&
+                    this.markerGroup !== k.markerGroup &&
+                    this.markerGroup.destroy(),
+                  (this.markerGroup = k.markerGroup),
+                  this.renderTarget &&
+                    (this.renderTarget = this.renderTarget.destroy()))
+                : (this.markerGroup === k.markerGroup &&
+                    (this.markerGroup = void 0),
+                  (this.markerGroup = g.plotGroup(
+                    "markerGroup",
+                    "markers",
+                    !0,
+                    1,
+                    k.seriesGroup
+                  )));
+              var ra = (this.points = []);
+              g.buildKDTree = e;
+              a && (P(a, this), a.pushSeries(g), t(a, this, k));
+              k.renderer.forExport ||
+                (qa.debug.timeKDTree && console.time("kd tree building"),
+                n(ja ? g.data : m || x, c, d));
+            }
+          },
+        });
+        ["heatmap", "treemap"].forEach(function (c) {
+          h[c] && C(h[c].prototype, "drawPoints", m);
+        });
+        h.bubble &&
+          (delete h.bubble.prototype.buildKDTree,
+          C(h.bubble.prototype, "markerAttribs", function (c) {
+            return this.isSeriesBoosting
+              ? !1
+              : c.apply(this, [].slice.call(arguments, 1));
+          }));
+        h.scatter.prototype.fill = !0;
+        w(h.area.prototype, { fill: !0, fillOpacity: !0, sampling: !0 });
+        w(h.column.prototype, { fill: !0, sampling: !0 });
+        d.prototype.callbacks.push(function (c) {
+          x(c, "predraw", function () {
+            c.boostForceChartBoost = void 0;
+            c.boostForceChartBoost = k(c);
+            c.isBoosting = !1;
+            !c.isChartSeriesBoosting() && c.didBoost && (c.didBoost = !1);
+            c.boostClear && c.boostClear();
+            c.canvas &&
+              c.ogl &&
+              c.isChartSeriesBoosting() &&
+              ((c.didBoost = !0), c.ogl.allocateBuffer(c));
+            c.markerGroup &&
+              c.xAxis &&
+              0 < c.xAxis.length &&
+              c.yAxis &&
+              0 < c.yAxis.length &&
+              c.markerGroup.translate(c.xAxis[0].pos, c.yAxis[0].pos);
+          });
+          x(c, "render", function () {
+            c.ogl && c.isChartSeriesBoosting() && c.ogl.render(c);
+          });
+        });
+      };
+    }
+  );
+  r(
+    d,
+    "Extensions/BoostCanvas.js",
+    [
+      d["Core/Chart/Chart.js"],
+      d["Core/Color/Color.js"],
+      d["Core/Globals.js"],
+      d["Series/LineSeries.js"],
+      d["Core/Series/Series.js"],
+      d["Core/Utilities.js"],
+    ],
+    function (d, r, q, l, b, B) {
+      var x = r.parse,
+        p = q.doc,
+        C = q.noop,
+        y = B.addEvent,
+        h = B.extend,
+        e = B.fireEvent,
+        n = B.isNumber,
+        m = B.merge,
+        P = B.pick,
+        t = B.wrap,
+        k = b.seriesTypes,
+        G;
+      return function () {
+        q.seriesTypes.heatmap &&
+          t(q.seriesTypes.heatmap.prototype, "drawPoints", function () {
+            var c = this.chart,
+              b = this.getContext(),
+              g = this.chart.inverted,
+              d = this.xAxis,
+              a = this.yAxis;
+            b
+              ? (this.points.forEach(function (e) {
+                  var f = e.plotY;
+                  "undefined" === typeof f ||
+                    isNaN(f) ||
+                    null === e.y ||
+                    ((f = e.shapeArgs),
+                    (e = c.styledMode
+                      ? e.series.colorAttribs(e)
+                      : e.series.pointAttribs(e)),
+                    (b.fillStyle = e.fill),
+                    g
+                      ? b.fillRect(
+                          a.len - f.y + d.left,
+                          d.len - f.x + a.top,
+                          -f.height,
+                          -f.width
+                        )
+                      : b.fillRect(
+                          f.x + d.left,
+                          f.y + a.top,
+                          f.width,
+                          f.height
+                        ));
+                }),
+                this.canvasToSVG())
+              : this.chart.showLoading(
+                  "Your browser doesn't support HTML5 canvas, <br>please use a modern browser"
+                );
+          });
+        h(l.prototype, {
+          getContext: function () {
+            var c = this.chart,
+              b = c.chartWidth,
+              g = c.chartHeight,
+              d = c.seriesGroup || this.group,
+              a = this,
+              e = function (a, c, b, g, d, e, f) {
+                a.call(this, b, c, g, d, e, f);
+              };
+            c.isChartSeriesBoosting() && ((a = c), (d = c.seriesGroup));
+            var f = a.ctx;
+            a.canvas ||
+              ((a.canvas = p.createElement("canvas")),
+              (a.renderTarget = c.renderer
+                .image("", 0, 0, b, g)
+                .addClass("highcharts-boost-canvas")
+                .add(d)),
+              (a.ctx = f = a.canvas.getContext("2d")),
+              c.inverted &&
+                ["moveTo", "lineTo", "rect", "arc"].forEach(function (a) {
+                  t(f, a, e);
+                }),
+              (a.boostCopy = function () {
+                a.renderTarget.attr({ href: a.canvas.toDataURL("image/png") });
+              }),
+              (a.boostClear = function () {
+                f.clearRect(0, 0, a.canvas.width, a.canvas.height);
+                a === this && a.renderTarget.attr({ href: "" });
+              }),
+              (a.boostClipRect = c.renderer.clipRect()),
+              a.renderTarget.clip(a.boostClipRect));
+            a.canvas.width !== b && (a.canvas.width = b);
+            a.canvas.height !== g && (a.canvas.height = g);
+            a.renderTarget.attr({
+              x: 0,
+              y: 0,
+              width: b,
+              height: g,
+              style: "pointer-events: none",
+              href: "",
+            });
+            a.boostClipRect.attr(c.getBoostClipRect(a));
+            return f;
+          },
+          canvasToSVG: function () {
+            this.chart.isChartSeriesBoosting()
+              ? this.boostClear && this.boostClear()
+              : (this.boostCopy || this.chart.boostCopy) &&
+                (this.boostCopy || this.chart.boostCopy)();
+          },
+          cvsLineTo: function (c, b, g) {
+            c.lineTo(b, g);
+          },
+          renderCanvas: function () {
+            var c = this,
+              b = c.options,
+              g = c.chart,
+              d = this.xAxis,
+              a = this.yAxis,
+              k = (g.options.boost || {}).timeRendering || !1,
+              f = 0,
+              l = c.processedXData,
+              p = c.processedYData,
+              w = b.data,
+              t = d.getExtremes(),
+              D = t.min,
+              O = t.max;
+            t = a.getExtremes();
+            var I = t.min,
+              V = t.max,
+              ia = {},
+              Z,
+              z = !!c.sampling,
+              E = b.marker && b.marker.radius,
+              T = this.cvsDrawPoint,
+              aa = b.lineWidth ? this.cvsLineTo : void 0,
+              ja = E && 1 >= E ? this.cvsMarkerSquare : this.cvsMarkerCircle,
+              na = this.cvsStrokeBatch || 1e3,
+              ta = !1 !== b.enableMouseTracking,
+              ka;
+            t = b.threshold;
+            var S = a.getThreshold(t),
+              ca = n(t),
+              U = S,
+              da = this.fill,
+              pa = c.pointArrayMap && "low,high" === c.pointArrayMap.join(","),
+              la = !!b.stacking,
+              ea = c.cropStart || 0;
+            t = g.options.loading;
+            var qa = c.requireSorting,
+              ra,
+              X = b.connectNulls,
+              Ca = !l,
+              ua,
+              va,
+              ba,
+              oa,
+              wa,
+              W = la ? c.data : l || w,
+              Ja = c.fillOpacity
+                ? new r(c.color).setOpacity(P(b.fillOpacity, 0.75)).get()
+                : c.color,
+              v = function () {
+                da
+                  ? ((N.fillStyle = Ja), N.fill())
+                  : ((N.strokeStyle = c.color),
+                    (N.lineWidth = b.lineWidth),
+                    N.stroke());
+              },
+              Da = function (a, b, d, e) {
+                0 === f && (N.beginPath(), aa && (N.lineJoin = "round"));
+                g.scroller &&
+                "highcharts-navigator-series" === c.options.className
+                  ? ((b += g.scroller.top), d && (d += g.scroller.top))
+                  : (b += g.plotTop);
+                a += g.plotLeft;
+                ra
+                  ? N.moveTo(a, b)
+                  : T
+                  ? T(N, a, b, d, ka)
+                  : aa
+                  ? aa(N, a, b)
+                  : ja && ja.call(c, N, a, b, E, e);
+                f += 1;
+                f === na && (v(), (f = 0));
+                ka = { clientX: a, plotY: b, yBottom: d };
+              },
+              Ka = "x" === b.findNearestPointBy,
+              Ea =
+                this.xData || this.options.xData || this.processedXData || !1,
+              xa = function (c, b, e) {
+                wa = Ka ? c : c + "," + b;
+                ta &&
+                  !ia[wa] &&
+                  ((ia[wa] = !0),
+                  g.inverted && ((c = d.len - c), (b = a.len - b)),
+                  La.push({
+                    x: Ea ? Ea[ea + e] : !1,
+                    clientX: c,
+                    plotX: c,
+                    plotY: b,
+                    i: ea + e,
+                  }));
+              };
+            this.renderTarget && this.renderTarget.attr({ href: "" });
+            (this.points || this.graph) && this.destroyGraphics();
+            c.plotGroup(
+              "group",
+              "series",
+              c.visible ? "visible" : "hidden",
+              b.zIndex,
+              g.seriesGroup
+            );
+            c.markerGroup = c.group;
+            y(c, "destroy", function () {
+              c.markerGroup = null;
+            });
+            var La = (this.points = []);
+            var N = this.getContext();
+            c.buildKDTree = C;
+            this.boostClear && this.boostClear();
+            this.visible &&
+              (99999 < w.length &&
+                ((g.options.loading = m(t, {
+                  labelStyle: {
+                    backgroundColor: x("#ffffff").setOpacity(0.75).get(),
+                    padding: "1em",
+                    borderRadius: "0.5em",
+                  },
+                  style: { backgroundColor: "none", opacity: 1 },
+                })),
+                B.clearTimeout(G),
+                g.showLoading("Drawing..."),
+                (g.options.loading = t)),
+              k && console.time("canvas rendering"),
+              q.eachAsync(
+                W,
+                function (b, e) {
+                  var f = !1,
+                    u = !1,
+                    h = !1,
+                    k = !1,
+                    l = "undefined" === typeof g.index,
+                    K = !0;
+                  if (!l) {
+                    if (Ca) {
+                      var n = b[0];
+                      var m = b[1];
+                      W[e + 1] && (h = W[e + 1][0]);
+                      W[e - 1] && (k = W[e - 1][0]);
+                    } else
+                      (n = b),
+                        (m = p[e]),
+                        W[e + 1] && (h = W[e + 1]),
+                        W[e - 1] && (k = W[e - 1]);
+                    h && h >= D && h <= O && (f = !0);
+                    k && k >= D && k <= O && (u = !0);
+                    if (pa) {
+                      Ca && (m = b.slice(1, 3));
+                      var q = m[0];
+                      m = m[1];
+                    } else la && ((n = b.x), (m = b.stackY), (q = m - b.y));
+                    b = null === m;
+                    qa || (K = m >= I && m <= V);
+                    if (!b && ((n >= D && n <= O && K) || f || u))
+                      if (((n = Math.round(d.toPixels(n, !0))), z)) {
+                        if ("undefined" === typeof ba || n === Z) {
+                          pa || (q = m);
+                          if ("undefined" === typeof oa || m > va)
+                            (va = m), (oa = e);
+                          if ("undefined" === typeof ba || q < ua)
+                            (ua = q), (ba = e);
+                        }
+                        n !== Z &&
+                          ("undefined" !== typeof ba &&
+                            ((m = a.toPixels(va, !0)),
+                            (S = a.toPixels(ua, !0)),
+                            Da(
+                              n,
+                              ca ? Math.min(m, U) : m,
+                              ca ? Math.max(S, U) : S,
+                              e
+                            ),
+                            xa(n, m, oa),
+                            S !== m && xa(n, S, ba)),
+                          (ba = oa = void 0),
+                          (Z = n));
+                      } else
+                        (m = Math.round(a.toPixels(m, !0))),
+                          Da(n, m, S, e),
+                          xa(n, m, e);
+                    ra = b && !X;
+                    0 === e % 5e4 &&
+                      (c.boostCopy || c.chart.boostCopy) &&
+                      (c.boostCopy || c.chart.boostCopy)();
+                  }
+                  return !l;
+                },
+                function () {
+                  var a = g.loadingDiv,
+                    b = g.loadingShown;
+                  v();
+                  c.canvasToSVG();
+                  k && console.timeEnd("canvas rendering");
+                  e(c, "renderedCanvas");
+                  b &&
+                    (h(a.style, { transition: "opacity 250ms", opacity: 0 }),
+                    (g.loadingShown = !1),
+                    (G = setTimeout(function () {
+                      a.parentNode && a.parentNode.removeChild(a);
+                      g.loadingDiv = g.loadingSpan = null;
+                    }, 250)));
+                  delete c.buildKDTree;
+                  c.buildKDTree();
+                },
+                g.renderer.forExport ? Number.MAX_VALUE : void 0
+              ));
+          },
+        });
+        k.scatter.prototype.cvsMarkerCircle = function (c, b, d, e) {
+          c.moveTo(b, d);
+          c.arc(b, d, e, 0, 2 * Math.PI, !1);
+        };
+        k.scatter.prototype.cvsMarkerSquare = function (c, b, d, e) {
+          c.rect(b - e, d - e, 2 * e, 2 * e);
+        };
+        k.scatter.prototype.fill = !0;
+        k.bubble &&
+          ((k.bubble.prototype.cvsMarkerCircle = function (c, b, d, e, a) {
+            c.moveTo(b, d);
+            c.arc(b, d, this.radii && this.radii[a], 0, 2 * Math.PI, !1);
+          }),
+          (k.bubble.prototype.cvsStrokeBatch = 1));
+        h(k.area.prototype, {
+          cvsDrawPoint: function (c, b, d, e, a) {
+            a &&
+              b !== a.clientX &&
+              (c.moveTo(a.clientX, a.yBottom),
+              c.lineTo(a.clientX, a.plotY),
+              c.lineTo(b, d),
+              c.lineTo(b, e));
+          },
+          fill: !0,
+          fillOpacity: !0,
+          sampling: !0,
+        });
+        h(k.column.prototype, {
+          cvsDrawPoint: function (c, b, d, e) {
+            c.rect(b - 1, d, 1, e - d);
+          },
+          fill: !0,
+          sampling: !0,
+        });
+        d.prototype.callbacks.push(function (b) {
+          y(b, "predraw", function () {
+            b.renderTarget && b.renderTarget.attr({ href: "" });
+            b.canvas &&
+              b.canvas
+                .getContext("2d")
+                .clearRect(0, 0, b.canvas.width, b.canvas.height);
+          });
+          y(b, "render", function () {
+            b.boostCopy && b.boostCopy();
+          });
+        });
+      };
+    }
+  );
+  r(
+    d,
+    "Extensions/Boost/BoostOverrides.js",
+    [
+      d["Core/Chart/Chart.js"],
+      d["Core/Globals.js"],
+      d["Core/Series/Point.js"],
+      d["Core/Utilities.js"],
+      d["Extensions/Boost/BoostUtils.js"],
+      d["Extensions/Boost/Boostables.js"],
+      d["Extensions/Boost/BoostableMap.js"],
+    ],
+    function (d, r, q, l, b, B, w) {
+      var p = l.addEvent,
+        x = l.error,
+        y = l.getOptions,
+        h = l.isArray,
+        e = l.isNumber,
+        n = l.pick,
+        m = l.wrap,
+        C = b.boostEnabled,
+        t = b.shouldForceChartSeriesBoosting,
+        k = r.Series,
+        G = r.seriesTypes,
+        c = y().plotOptions;
+      d.prototype.isChartSeriesBoosting = function () {
+        return (
+          n(this.options.boost && this.options.boost.seriesThreshold, 50) <=
+            this.series.length || t(this)
+        );
+      };
+      d.prototype.getBoostClipRect = function (b) {
+        var c = {
+          x: this.plotLeft,
+          y: this.plotTop,
+          width: this.plotWidth,
+          height: this.plotHeight,
+        };
+        b === this &&
+          this.yAxis.forEach(function (b) {
+            c.y = Math.min(b.pos, c.y);
+            c.height = Math.max(b.pos - this.plotTop + b.len, c.height);
+          }, this);
+        return c;
+      };
+      k.prototype.getPoint = function (b) {
+        var c = b,
+          d = this.xData || this.options.xData || this.processedXData || !1;
+        !b ||
+          b instanceof this.pointClass ||
+          ((c = new this.pointClass().init(
+            this,
+            this.options.data[b.i],
+            d ? d[b.i] : void 0
+          )),
+          (c.category = n(
+            this.xAxis.categories ? this.xAxis.categories[c.x] : c.x,
+            c.x
+          )),
+          (c.dist = b.dist),
+          (c.distX = b.distX),
+          (c.plotX = b.plotX),
+          (c.plotY = b.plotY),
+          (c.index = b.i),
+          (c.isInside = this.isPointInside(b)));
+        return c;
+      };
+      m(k.prototype, "searchPoint", function (b) {
+        return this.getPoint(b.apply(this, [].slice.call(arguments, 1)));
+      });
+      m(q.prototype, "haloPath", function (b) {
+        var c = this.series,
+          d = this.plotX,
+          a = this.plotY,
+          e = c.chart.inverted;
+        c.isSeriesBoosting &&
+          e &&
+          ((this.plotX = c.yAxis.len - a), (this.plotY = c.xAxis.len - d));
+        var f = b.apply(this, Array.prototype.slice.call(arguments, 1));
+        c.isSeriesBoosting && e && ((this.plotX = d), (this.plotY = a));
+        return f;
+      });
+      m(k.prototype, "markerAttribs", function (b, c) {
+        var d = c.plotX,
+          a = c.plotY,
+          e = this.chart.inverted;
+        this.isSeriesBoosting &&
+          e &&
+          ((c.plotX = this.yAxis.len - a), (c.plotY = this.xAxis.len - d));
+        var f = b.apply(this, Array.prototype.slice.call(arguments, 1));
+        this.isSeriesBoosting && e && ((c.plotX = d), (c.plotY = a));
+        return f;
+      });
+      p(k, "destroy", function () {
+        var b = this,
+          c = b.chart;
+        c.markerGroup === b.markerGroup && (b.markerGroup = null);
+        c.hoverPoints &&
+          (c.hoverPoints = c.hoverPoints.filter(function (c) {
+            return c.series === b;
+          }));
+        c.hoverPoint && c.hoverPoint.series === b && (c.hoverPoint = null);
+      });
+      m(k.prototype, "getExtremes", function (b) {
+        return this.isSeriesBoosting && this.hasExtremes && this.hasExtremes()
+          ? {}
+          : b.apply(this, Array.prototype.slice.call(arguments, 1));
+      });
+      [
+        "translate",
+        "generatePoints",
+        "drawTracker",
+        "drawPoints",
+        "render",
+      ].forEach(function (b) {
+        function c(c) {
+          var a =
+            this.options.stacking &&
+            ("translate" === b || "generatePoints" === b);
+          if (
+            !this.isSeriesBoosting ||
+            a ||
+            !C(this.chart) ||
+            "heatmap" === this.type ||
+            "treemap" === this.type ||
+            !w[this.type] ||
+            0 === this.options.boostThreshold
+          )
+            c.call(this);
+          else if (this[b + "Canvas"]) this[b + "Canvas"]();
+        }
+        m(k.prototype, b, c);
+        "translate" === b &&
+          "column bar arearange columnrange heatmap treemap"
+            .split(" ")
+            .forEach(function (d) {
+              G[d] && m(G[d].prototype, b, c);
+            });
+      });
+      m(k.prototype, "processData", function (b) {
+        function c(a) {
+          return (
+            d.chart.isChartSeriesBoosting() ||
+            (a ? a.length : 0) >= (d.options.boostThreshold || Number.MAX_VALUE)
+          );
+        }
+        var d = this,
+          a = this.options.data;
+        C(this.chart) && w[this.type]
+          ? ((c(a) &&
+              "heatmap" !== this.type &&
+              "treemap" !== this.type &&
+              !this.options.stacking &&
+              this.hasExtremes &&
+              this.hasExtremes(!0)) ||
+              (b.apply(this, Array.prototype.slice.call(arguments, 1)),
+              (a = this.processedXData)),
+            (this.isSeriesBoosting = c(a))
+              ? ((a = this.getFirstValidPoint(this.options.data)),
+                e(a) || h(a) || x(12, !1, this.chart),
+                this.enterBoost())
+              : this.exitBoost && this.exitBoost())
+          : b.apply(this, Array.prototype.slice.call(arguments, 1));
+      });
+      p(k, "hide", function () {
+        this.canvas &&
+          this.renderTarget &&
+          (this.ogl && this.ogl.clear(), this.boostClear());
+      });
+      k.prototype.enterBoost = function () {
+        this.alteredByBoost = [];
+        ["allowDG", "directTouch", "stickyTracking"].forEach(function (b) {
+          this.alteredByBoost.push({
+            prop: b,
+            val: this[b],
+            own: Object.hasOwnProperty.call(this, b),
+          });
+        }, this);
+        this.directTouch = this.allowDG = !1;
+        this.finishedAnimating = this.stickyTracking = !0;
+        this.labelBySeries &&
+          (this.labelBySeries = this.labelBySeries.destroy());
+      };
+      k.prototype.exitBoost = function () {
+        (this.alteredByBoost || []).forEach(function (b) {
+          b.own ? (this[b.prop] = b.val) : delete this[b.prop];
+        }, this);
+        this.boostClear && this.boostClear();
+      };
+      k.prototype.hasExtremes = function (b) {
+        var c = this.options,
+          d = this.xAxis && this.xAxis.options,
+          a = this.yAxis && this.yAxis.options,
+          h = this.colorAxis && this.colorAxis.options;
+        return (
+          c.data.length > (c.boostThreshold || Number.MAX_VALUE) &&
+          e(a.min) &&
+          e(a.max) &&
+          (!b || (e(d.min) && e(d.max))) &&
+          (!h || (e(h.min) && e(h.max)))
+        );
+      };
+      k.prototype.destroyGraphics = function () {
+        var b = this,
+          c = this.points,
+          d,
+          a;
+        if (c)
+          for (a = 0; a < c.length; a += 1)
+            (d = c[a]) && d.destroyElements && d.destroyElements();
+        ["graph", "area", "tracker"].forEach(function (a) {
+          b[a] && (b[a] = b[a].destroy());
+        });
+      };
+      B.forEach(function (b) {
+        c[b] &&
+          ((c[b].boostThreshold = 5e3),
+          (c[b].boostData = []),
+          (G[b].prototype.fillOpacity = !0));
+      });
+    }
+  );
+  r(
+    d,
+    "Extensions/Boost/NamedColors.js",
+    [d["Core/Color/Color.js"]],
+    function (d) {
+      var r = {
+        aliceblue: "#f0f8ff",
+        antiquewhite: "#faebd7",
+        aqua: "#00ffff",
+        aquamarine: "#7fffd4",
+        azure: "#f0ffff",
+        beige: "#f5f5dc",
+        bisque: "#ffe4c4",
+        black: "#000000",
+        blanchedalmond: "#ffebcd",
+        blue: "#0000ff",
+        blueviolet: "#8a2be2",
+        brown: "#a52a2a",
+        burlywood: "#deb887",
+        cadetblue: "#5f9ea0",
+        chartreuse: "#7fff00",
+        chocolate: "#d2691e",
+        coral: "#ff7f50",
+        cornflowerblue: "#6495ed",
+        cornsilk: "#fff8dc",
+        crimson: "#dc143c",
+        cyan: "#00ffff",
+        darkblue: "#00008b",
+        darkcyan: "#008b8b",
+        darkgoldenrod: "#b8860b",
+        darkgray: "#a9a9a9",
+        darkgreen: "#006400",
+        darkkhaki: "#bdb76b",
+        darkmagenta: "#8b008b",
+        darkolivegreen: "#556b2f",
+        darkorange: "#ff8c00",
+        darkorchid: "#9932cc",
+        darkred: "#8b0000",
+        darksalmon: "#e9967a",
+        darkseagreen: "#8fbc8f",
+        darkslateblue: "#483d8b",
+        darkslategray: "#2f4f4f",
+        darkturquoise: "#00ced1",
+        darkviolet: "#9400d3",
+        deeppink: "#ff1493",
+        deepskyblue: "#00bfff",
+        dimgray: "#696969",
+        dodgerblue: "#1e90ff",
+        feldspar: "#d19275",
+        firebrick: "#b22222",
+        floralwhite: "#fffaf0",
+        forestgreen: "#228b22",
+        fuchsia: "#ff00ff",
+        gainsboro: "#dcdcdc",
+        ghostwhite: "#f8f8ff",
+        gold: "#ffd700",
+        goldenrod: "#daa520",
+        gray: "#808080",
+        green: "#008000",
+        greenyellow: "#adff2f",
+        honeydew: "#f0fff0",
+        hotpink: "#ff69b4",
+        indianred: "#cd5c5c",
+        indigo: "#4b0082",
+        ivory: "#fffff0",
+        khaki: "#f0e68c",
+        lavender: "#e6e6fa",
+        lavenderblush: "#fff0f5",
+        lawngreen: "#7cfc00",
+        lemonchiffon: "#fffacd",
+        lightblue: "#add8e6",
+        lightcoral: "#f08080",
+        lightcyan: "#e0ffff",
+        lightgoldenrodyellow: "#fafad2",
+        lightgrey: "#d3d3d3",
+        lightgreen: "#90ee90",
+        lightpink: "#ffb6c1",
+        lightsalmon: "#ffa07a",
+        lightseagreen: "#20b2aa",
+        lightskyblue: "#87cefa",
+        lightslateblue: "#8470ff",
+        lightslategray: "#778899",
+        lightsteelblue: "#b0c4de",
+        lightyellow: "#ffffe0",
+        lime: "#00ff00",
+        limegreen: "#32cd32",
+        linen: "#faf0e6",
+        magenta: "#ff00ff",
+        maroon: "#800000",
+        mediumaquamarine: "#66cdaa",
+        mediumblue: "#0000cd",
+        mediumorchid: "#ba55d3",
+        mediumpurple: "#9370d8",
+        mediumseagreen: "#3cb371",
+        mediumslateblue: "#7b68ee",
+        mediumspringgreen: "#00fa9a",
+        mediumturquoise: "#48d1cc",
+        mediumvioletred: "#c71585",
+        midnightblue: "#191970",
+        mintcream: "#f5fffa",
+        mistyrose: "#ffe4e1",
+        moccasin: "#ffe4b5",
+        navajowhite: "#ffdead",
+        navy: "#000080",
+        oldlace: "#fdf5e6",
+        olive: "#808000",
+        olivedrab: "#6b8e23",
+        orange: "#ffa500",
+        orangered: "#ff4500",
+        orchid: "#da70d6",
+        palegoldenrod: "#eee8aa",
+        palegreen: "#98fb98",
+        paleturquoise: "#afeeee",
+        palevioletred: "#d87093",
+        papayawhip: "#ffefd5",
+        peachpuff: "#ffdab9",
+        peru: "#cd853f",
+        pink: "#ffc0cb",
+        plum: "#dda0dd",
+        powderblue: "#b0e0e6",
+        purple: "#800080",
+        red: "#ff0000",
+        rosybrown: "#bc8f8f",
+        royalblue: "#4169e1",
+        saddlebrown: "#8b4513",
+        salmon: "#fa8072",
+        sandybrown: "#f4a460",
+        seagreen: "#2e8b57",
+        seashell: "#fff5ee",
+        sienna: "#a0522d",
+        silver: "#c0c0c0",
+        skyblue: "#87ceeb",
+        slateblue: "#6a5acd",
+        slategray: "#708090",
+        snow: "#fffafa",
+        springgreen: "#00ff7f",
+        steelblue: "#4682b4",
+        tan: "#d2b48c",
+        teal: "#008080",
+        thistle: "#d8bfd8",
+        tomato: "#ff6347",
+        turquoise: "#40e0d0",
+        violet: "#ee82ee",
+        violetred: "#d02090",
+        wheat: "#f5deb3",
+        white: "#ffffff",
+        whitesmoke: "#f5f5f5",
+        yellow: "#ffff00",
+        yellowgreen: "#9acd32",
+      };
+      return (d.names = r);
+    }
+  );
+  r(
+    d,
+    "Extensions/Boost/Boost.js",
+    [
+      d["Extensions/Boost/BoostUtils.js"],
+      d["Extensions/Boost/BoostInit.js"],
+      d["Extensions/BoostCanvas.js"],
+      d["Core/Utilities.js"],
+    ],
+    function (d, r, q, l) {
+      l = l.error;
+      d = d.hasWebGLSupport;
+      d() ? r() : "undefined" !== typeof q ? q() : l(26);
+    }
+  );
+  r(d, "masters/modules/boost.src.js", [], function () {});
+});
+//# sourceMappingURL=boost.js.map
diff --git a/notemyprogress/js/highcharts/modules/boost.src.js b/notemyprogress/js/highcharts/modules/boost.src.js
index dd3aa72f64273322ae525824ef7319d993177539..863ea6d33e22e01809f66a8393592c5583879ddd 100644
--- a/notemyprogress/js/highcharts/modules/boost.src.js
+++ b/notemyprogress/js/highcharts/modules/boost.src.js
@@ -70,3784 +70,4181 @@
  *      usePreallocated: boolean - default: false
  *  }
  */
-'use strict';
+"use strict";
 (function (factory) {
-    if (typeof module === 'object' && module.exports) {
-        factory['default'] = factory;
-        module.exports = factory;
-    } else if (typeof define === 'function' && define.amd) {
-        define('highcharts/modules/boost', ['highcharts'], function (Highcharts) {
-            factory(Highcharts);
-            factory.Highcharts = Highcharts;
-            return factory;
-        });
-    } else {
-        factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
-    }
-}(function (Highcharts) {
-    var _modules = Highcharts ? Highcharts._modules : {};
-    function _registerModule(obj, path, args, fn) {
-        if (!obj.hasOwnProperty(path)) {
-            obj[path] = fn.apply(null, args);
-        }
+  if (typeof module === "object" && module.exports) {
+    factory["default"] = factory;
+    module.exports = factory;
+  } else if (typeof define === "function" && define.amd) {
+    define("highcharts/modules/boost", ["highcharts"], function (Highcharts) {
+      factory(Highcharts);
+      factory.Highcharts = Highcharts;
+      return factory;
+    });
+  } else {
+    factory(typeof Highcharts !== "undefined" ? Highcharts : undefined);
+  }
+})(function (Highcharts) {
+  var _modules = Highcharts ? Highcharts._modules : {};
+  function _registerModule(obj, path, args, fn) {
+    if (!obj.hasOwnProperty(path)) {
+      obj[path] = fn.apply(null, args);
     }
-    _registerModule(_modules, 'Extensions/Boost/Boostables.js', [], function () {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        // These are the series we allow boosting for.
-        var boostables = [
-                'area',
-                'arearange',
-                'column',
-                'columnrange',
-                'bar',
-                'line',
-                'scatter',
-                'heatmap',
-                'bubble',
-                'treemap'
-            ];
+  }
+  _registerModule(_modules, "Extensions/Boost/Boostables.js", [], function () {
+    /* *
+     *
+     *  Copyright (c) 2019-2020 Highsoft AS
+     *
+     *  Boost module: stripped-down renderer for higher performance
+     *
+     *  License: highcharts.com/license
+     *
+     *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+     *
+     * */
+    // These are the series we allow boosting for.
+    var boostables = [
+      "area",
+      "arearange",
+      "column",
+      "columnrange",
+      "bar",
+      "line",
+      "scatter",
+      "heatmap",
+      "bubble",
+      "treemap",
+    ];
 
-        return boostables;
-    });
-    _registerModule(_modules, 'Extensions/Boost/BoostableMap.js', [_modules['Extensions/Boost/Boostables.js']], function (boostables) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        // These are the series we allow boosting for.
-        var boostableMap = {};
-        boostables.forEach(function (item) {
-            boostableMap[item] = 1;
-        });
+    return boostables;
+  });
+  _registerModule(
+    _modules,
+    "Extensions/Boost/BoostableMap.js",
+    [_modules["Extensions/Boost/Boostables.js"]],
+    function (boostables) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      // These are the series we allow boosting for.
+      var boostableMap = {};
+      boostables.forEach(function (item) {
+        boostableMap[item] = 1;
+      });
 
-        return boostableMap;
-    });
-    _registerModule(_modules, 'Extensions/Boost/WGLShader.js', [_modules['Core/Utilities.js']], function (U) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var clamp = U.clamp,
-            error = U.error,
-            pick = U.pick;
-        /* eslint-disable valid-jsdoc */
+      return boostableMap;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/Boost/WGLShader.js",
+    [_modules["Core/Utilities.js"]],
+    function (U) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var clamp = U.clamp,
+        error = U.error,
+        pick = U.pick;
+      /* eslint-disable valid-jsdoc */
+      /**
+       * A static shader mimicing axis translation functions found in Core/Axis
+       *
+       * @private
+       * @function GLShader
+       *
+       * @param {WebGLContext} gl
+       *        the context in which the shader is active
+       *
+       * @return {*}
+       */
+      function GLShader(gl) {
+        var vertShade = [
+            /* eslint-disable max-len, @typescript-eslint/indent */
+            "#version 100",
+            "#define LN10 2.302585092994046",
+            "precision highp float;",
+            "attribute vec4 aVertexPosition;",
+            "attribute vec4 aColor;",
+            "varying highp vec2 position;",
+            "varying highp vec4 vColor;",
+            "uniform mat4 uPMatrix;",
+            "uniform float pSize;",
+            "uniform float translatedThreshold;",
+            "uniform bool hasThreshold;",
+            "uniform bool skipTranslation;",
+            "uniform float xAxisTrans;",
+            "uniform float xAxisMin;",
+            "uniform float xAxisMinPad;",
+            "uniform float xAxisPointRange;",
+            "uniform float xAxisLen;",
+            "uniform bool  xAxisPostTranslate;",
+            "uniform float xAxisOrdinalSlope;",
+            "uniform float xAxisOrdinalOffset;",
+            "uniform float xAxisPos;",
+            "uniform bool  xAxisCVSCoord;",
+            "uniform bool  xAxisIsLog;",
+            "uniform bool  xAxisReversed;",
+            "uniform float yAxisTrans;",
+            "uniform float yAxisMin;",
+            "uniform float yAxisMinPad;",
+            "uniform float yAxisPointRange;",
+            "uniform float yAxisLen;",
+            "uniform bool  yAxisPostTranslate;",
+            "uniform float yAxisOrdinalSlope;",
+            "uniform float yAxisOrdinalOffset;",
+            "uniform float yAxisPos;",
+            "uniform bool  yAxisCVSCoord;",
+            "uniform bool  yAxisIsLog;",
+            "uniform bool  yAxisReversed;",
+            "uniform bool  isBubble;",
+            "uniform bool  bubbleSizeByArea;",
+            "uniform float bubbleZMin;",
+            "uniform float bubbleZMax;",
+            "uniform float bubbleZThreshold;",
+            "uniform float bubbleMinSize;",
+            "uniform float bubbleMaxSize;",
+            "uniform bool  bubbleSizeAbs;",
+            "uniform bool  isInverted;",
+            "float bubbleRadius(){",
+            "float value = aVertexPosition.w;",
+            "float zMax = bubbleZMax;",
+            "float zMin = bubbleZMin;",
+            "float radius = 0.0;",
+            "float pos = 0.0;",
+            "float zRange = zMax - zMin;",
+            "if (bubbleSizeAbs){",
+            "value = value - bubbleZThreshold;",
+            "zMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);",
+            "zMin = 0.0;",
+            "}",
+            "if (value < zMin){",
+            "radius = bubbleZMin / 2.0 - 1.0;",
+            "} else {",
+            "pos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;",
+            "if (bubbleSizeByArea && pos > 0.0){",
+            "pos = sqrt(pos);",
+            "}",
+            "radius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;",
+            "}",
+            "return radius * 2.0;",
+            "}",
+            "float translate(float val,",
+            "float pointPlacement,",
+            "float localA,",
+            "float localMin,",
+            "float minPixelPadding,",
+            "float pointRange,",
+            "float len,",
+            "bool  cvsCoord,",
+            "bool  isLog,",
+            "bool  reversed",
+            "){",
+            "float sign = 1.0;",
+            "float cvsOffset = 0.0;",
+            "if (cvsCoord) {",
+            "sign *= -1.0;",
+            "cvsOffset = len;",
+            "}",
+            "if (isLog) {",
+            "val = log(val) / LN10;",
+            "}",
+            "if (reversed) {",
+            "sign *= -1.0;",
+            "cvsOffset -= sign * len;",
+            "}",
+            "return sign * (val - localMin) * localA + cvsOffset + ",
+            "(sign * minPixelPadding);",
+            "}",
+            "float xToPixels(float value) {",
+            "if (skipTranslation){",
+            "return value;// + xAxisPos;",
+            "}",
+            "return translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;",
+            "}",
+            "float yToPixels(float value, float checkTreshold) {",
+            "float v;",
+            "if (skipTranslation){",
+            "v = value;// + yAxisPos;",
+            "} else {",
+            "v = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;",
+            "if (v > yAxisLen) {",
+            "v = yAxisLen;",
+            "}",
+            "}",
+            "if (checkTreshold > 0.0 && hasThreshold) {",
+            "v = min(v, translatedThreshold);",
+            "}",
+            "return v;",
+            "}",
+            "void main(void) {",
+            "if (isBubble){",
+            "gl_PointSize = bubbleRadius();",
+            "} else {",
+            "gl_PointSize = pSize;",
+            "}",
+            // 'gl_PointSize = 10.0;',
+            "vColor = aColor;",
+            "if (skipTranslation && isInverted) {",
+            // If we get translated values from JS, just swap them (x, y)
+            "gl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);",
+            "} else if (isInverted) {",
+            // But when calculating pixel positions directly,
+            // swap axes and values (x, y)
+            "gl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);",
+            "} else {",
+            "gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);",
+            "}",
+            // 'gl_Position = uPMatrix * vec4(aVertexPosition.x, aVertexPosition.y, 0.0, 1.0);',
+            "}",
+            /* eslint-enable max-len, @typescript-eslint/indent */
+          ].join("\n"),
+          // Fragment shader source
+          fragShade = [
+            /* eslint-disable max-len, @typescript-eslint/indent */
+            "precision highp float;",
+            "uniform vec4 fillColor;",
+            "varying highp vec2 position;",
+            "varying highp vec4 vColor;",
+            "uniform sampler2D uSampler;",
+            "uniform bool isCircle;",
+            "uniform bool hasColor;",
+            // 'vec4 toColor(float value, vec2 point) {',
+            //     'return vec4(0.0, 0.0, 0.0, 0.0);',
+            // '}',
+            "void main(void) {",
+            "vec4 col = fillColor;",
+            "vec4 tcol = texture2D(uSampler, gl_PointCoord.st);",
+            "if (hasColor) {",
+            "col = vColor;",
+            "}",
+            "if (isCircle) {",
+            "col *= tcol;",
+            "if (tcol.r < 0.0) {",
+            "discard;",
+            "} else {",
+            "gl_FragColor = col;",
+            "}",
+            "} else {",
+            "gl_FragColor = col;",
+            "}",
+            "}",
+            /* eslint-enable max-len, @typescript-eslint/indent */
+          ].join("\n"),
+          uLocations = {},
+          // The shader program
+          shaderProgram,
+          // Uniform handle to the perspective matrix
+          pUniform,
+          // Uniform for point size
+          psUniform,
+          // Uniform for fill color
+          fillColorUniform,
+          // Uniform for isBubble
+          isBubbleUniform,
+          // Uniform for bubble abs sizing
+          bubbleSizeAbsUniform,
+          bubbleSizeAreaUniform,
+          // Skip translation uniform
+          skipTranslationUniform,
+          // Set to 1 if circle
+          isCircleUniform,
+          // Uniform for invertion
+          isInverted,
+          // Error stack
+          errors = [],
+          // Texture uniform
+          uSamplerUniform;
         /**
-         * A static shader mimicing axis translation functions found in Core/Axis
-         *
+         * Handle errors accumulated in errors stack
          * @private
-         * @function GLShader
-         *
-         * @param {WebGLContext} gl
-         *        the context in which the shader is active
-         *
-         * @return {*}
          */
-        function GLShader(gl) {
-            var vertShade = [
-                    /* eslint-disable max-len, @typescript-eslint/indent */
-                    '#version 100',
-                    '#define LN10 2.302585092994046',
-                    'precision highp float;',
-                    'attribute vec4 aVertexPosition;',
-                    'attribute vec4 aColor;',
-                    'varying highp vec2 position;',
-                    'varying highp vec4 vColor;',
-                    'uniform mat4 uPMatrix;',
-                    'uniform float pSize;',
-                    'uniform float translatedThreshold;',
-                    'uniform bool hasThreshold;',
-                    'uniform bool skipTranslation;',
-                    'uniform float xAxisTrans;',
-                    'uniform float xAxisMin;',
-                    'uniform float xAxisMinPad;',
-                    'uniform float xAxisPointRange;',
-                    'uniform float xAxisLen;',
-                    'uniform bool  xAxisPostTranslate;',
-                    'uniform float xAxisOrdinalSlope;',
-                    'uniform float xAxisOrdinalOffset;',
-                    'uniform float xAxisPos;',
-                    'uniform bool  xAxisCVSCoord;',
-                    'uniform bool  xAxisIsLog;',
-                    'uniform bool  xAxisReversed;',
-                    'uniform float yAxisTrans;',
-                    'uniform float yAxisMin;',
-                    'uniform float yAxisMinPad;',
-                    'uniform float yAxisPointRange;',
-                    'uniform float yAxisLen;',
-                    'uniform bool  yAxisPostTranslate;',
-                    'uniform float yAxisOrdinalSlope;',
-                    'uniform float yAxisOrdinalOffset;',
-                    'uniform float yAxisPos;',
-                    'uniform bool  yAxisCVSCoord;',
-                    'uniform bool  yAxisIsLog;',
-                    'uniform bool  yAxisReversed;',
-                    'uniform bool  isBubble;',
-                    'uniform bool  bubbleSizeByArea;',
-                    'uniform float bubbleZMin;',
-                    'uniform float bubbleZMax;',
-                    'uniform float bubbleZThreshold;',
-                    'uniform float bubbleMinSize;',
-                    'uniform float bubbleMaxSize;',
-                    'uniform bool  bubbleSizeAbs;',
-                    'uniform bool  isInverted;',
-                    'float bubbleRadius(){',
-                    'float value = aVertexPosition.w;',
-                    'float zMax = bubbleZMax;',
-                    'float zMin = bubbleZMin;',
-                    'float radius = 0.0;',
-                    'float pos = 0.0;',
-                    'float zRange = zMax - zMin;',
-                    'if (bubbleSizeAbs){',
-                    'value = value - bubbleZThreshold;',
-                    'zMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);',
-                    'zMin = 0.0;',
-                    '}',
-                    'if (value < zMin){',
-                    'radius = bubbleZMin / 2.0 - 1.0;',
-                    '} else {',
-                    'pos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;',
-                    'if (bubbleSizeByArea && pos > 0.0){',
-                    'pos = sqrt(pos);',
-                    '}',
-                    'radius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;',
-                    '}',
-                    'return radius * 2.0;',
-                    '}',
-                    'float translate(float val,',
-                    'float pointPlacement,',
-                    'float localA,',
-                    'float localMin,',
-                    'float minPixelPadding,',
-                    'float pointRange,',
-                    'float len,',
-                    'bool  cvsCoord,',
-                    'bool  isLog,',
-                    'bool  reversed',
-                    '){',
-                    'float sign = 1.0;',
-                    'float cvsOffset = 0.0;',
-                    'if (cvsCoord) {',
-                    'sign *= -1.0;',
-                    'cvsOffset = len;',
-                    '}',
-                    'if (isLog) {',
-                    'val = log(val) / LN10;',
-                    '}',
-                    'if (reversed) {',
-                    'sign *= -1.0;',
-                    'cvsOffset -= sign * len;',
-                    '}',
-                    'return sign * (val - localMin) * localA + cvsOffset + ',
-                    '(sign * minPixelPadding);',
-                    '}',
-                    'float xToPixels(float value) {',
-                    'if (skipTranslation){',
-                    'return value;// + xAxisPos;',
-                    '}',
-                    'return translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;',
-                    '}',
-                    'float yToPixels(float value, float checkTreshold) {',
-                    'float v;',
-                    'if (skipTranslation){',
-                    'v = value;// + yAxisPos;',
-                    '} else {',
-                    'v = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;',
-                    'if (v > yAxisLen) {',
-                    'v = yAxisLen;',
-                    '}',
-                    '}',
-                    'if (checkTreshold > 0.0 && hasThreshold) {',
-                    'v = min(v, translatedThreshold);',
-                    '}',
-                    'return v;',
-                    '}',
-                    'void main(void) {',
-                    'if (isBubble){',
-                    'gl_PointSize = bubbleRadius();',
-                    '} else {',
-                    'gl_PointSize = pSize;',
-                    '}',
-                    // 'gl_PointSize = 10.0;',
-                    'vColor = aColor;',
-                    'if (skipTranslation && isInverted) {',
-                    // If we get translated values from JS, just swap them (x, y)
-                    'gl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);',
-                    '} else if (isInverted) {',
-                    // But when calculating pixel positions directly,
-                    // swap axes and values (x, y)
-                    'gl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);',
-                    '} else {',
-                    'gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);',
-                    '}',
-                    // 'gl_Position = uPMatrix * vec4(aVertexPosition.x, aVertexPosition.y, 0.0, 1.0);',
-                    '}'
-                    /* eslint-enable max-len, @typescript-eslint/indent */
-                ].join('\n'), 
-                // Fragment shader source
-                fragShade = [
-                    /* eslint-disable max-len, @typescript-eslint/indent */
-                    'precision highp float;',
-                    'uniform vec4 fillColor;',
-                    'varying highp vec2 position;',
-                    'varying highp vec4 vColor;',
-                    'uniform sampler2D uSampler;',
-                    'uniform bool isCircle;',
-                    'uniform bool hasColor;',
-                    // 'vec4 toColor(float value, vec2 point) {',
-                    //     'return vec4(0.0, 0.0, 0.0, 0.0);',
-                    // '}',
-                    'void main(void) {',
-                    'vec4 col = fillColor;',
-                    'vec4 tcol = texture2D(uSampler, gl_PointCoord.st);',
-                    'if (hasColor) {',
-                    'col = vColor;',
-                    '}',
-                    'if (isCircle) {',
-                    'col *= tcol;',
-                    'if (tcol.r < 0.0) {',
-                    'discard;',
-                    '} else {',
-                    'gl_FragColor = col;',
-                    '}',
-                    '} else {',
-                    'gl_FragColor = col;',
-                    '}',
-                    '}'
-                    /* eslint-enable max-len, @typescript-eslint/indent */
-                ].join('\n'), uLocations = {}, 
-                // The shader program
-                shaderProgram, 
-                // Uniform handle to the perspective matrix
-                pUniform, 
-                // Uniform for point size
-                psUniform, 
-                // Uniform for fill color
-                fillColorUniform, 
-                // Uniform for isBubble
-                isBubbleUniform, 
-                // Uniform for bubble abs sizing
-                bubbleSizeAbsUniform, bubbleSizeAreaUniform, 
-                // Skip translation uniform
-                skipTranslationUniform, 
-                // Set to 1 if circle
-                isCircleUniform, 
-                // Uniform for invertion
-                isInverted, 
-                // Error stack
-                errors = [], 
-                // Texture uniform
-                uSamplerUniform;
-            /**
-             * Handle errors accumulated in errors stack
-             * @private
-             */
-            function handleErrors() {
-                if (errors.length) {
-                    error('[highcharts boost] shader error - ' + errors.join('\n'));
-                }
-            }
-            /**
-             * String to shader program
-             * @private
-             * @param {string} str - the program source
-             * @param {string} type - the program type: either `vertex` or `fragment`
-             * @returns {bool|shader}
-             */
-            function stringToProgram(str, type) {
-                var t = type === 'vertex' ? gl.VERTEX_SHADER : gl.FRAGMENT_SHADER,
-                    shader = gl.createShader(t);
-                gl.shaderSource(shader, str);
-                gl.compileShader(shader);
-                if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
-                    errors.push('when compiling ' +
-                        type +
-                        ' shader:\n' +
-                        gl.getShaderInfoLog(shader));
-                    return false;
-                }
-                return shader;
-            }
-            /**
-             * Create the shader.
-             * Loads the shader program statically defined above
-             * @private
-             */
-            function createShader() {
-                var v = stringToProgram(vertShade, 'vertex'), f = stringToProgram(fragShade, 'fragment');
-                if (!v || !f) {
-                    shaderProgram = false;
-                    handleErrors();
-                    return false;
-                }
-                /**
-                 * @private
-                 */
-                function uloc(n) {
-                    return gl.getUniformLocation(shaderProgram, n);
-                }
-                shaderProgram = gl.createProgram();
-                gl.attachShader(shaderProgram, v);
-                gl.attachShader(shaderProgram, f);
-                gl.linkProgram(shaderProgram);
-                if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
-                    errors.push(gl.getProgramInfoLog(shaderProgram));
-                    handleErrors();
-                    shaderProgram = false;
-                    return false;
-                }
-                gl.useProgram(shaderProgram);
-                gl.bindAttribLocation(shaderProgram, 0, 'aVertexPosition');
-                pUniform = uloc('uPMatrix');
-                psUniform = uloc('pSize');
-                fillColorUniform = uloc('fillColor');
-                isBubbleUniform = uloc('isBubble');
-                bubbleSizeAbsUniform = uloc('bubbleSizeAbs');
-                bubbleSizeAreaUniform = uloc('bubbleSizeByArea');
-                uSamplerUniform = uloc('uSampler');
-                skipTranslationUniform = uloc('skipTranslation');
-                isCircleUniform = uloc('isCircle');
-                isInverted = uloc('isInverted');
-                return true;
-            }
-            /**
-             * Destroy the shader
-             * @private
-             */
-            function destroy() {
-                if (gl && shaderProgram) {
-                    gl.deleteProgram(shaderProgram);
-                    shaderProgram = false;
-                }
-            }
-            /**
-             * Bind the shader.
-             * This makes the shader the active one until another one is bound,
-             * or until 0 is bound.
-             * @private
-             */
-            function bind() {
-                if (gl && shaderProgram) {
-                    gl.useProgram(shaderProgram);
-                }
-            }
-            /**
-             * Set a uniform value.
-             * This uses a hash map to cache uniform locations.
-             * @private
-             * @param name {string} - the name of the uniform to set
-             * @param val {float} - the value to set
-             */
-            function setUniform(name, val) {
-                if (gl && shaderProgram) {
-                    var u = uLocations[name] = (uLocations[name] ||
-                            gl.getUniformLocation(shaderProgram,
-                        name));
-                    gl.uniform1f(u, val);
-                }
-            }
-            /**
-             * Set the active texture
-             * @private
-             * @param texture - the texture
-             */
-            function setTexture(texture) {
-                if (gl && shaderProgram) {
-                    gl.uniform1i(uSamplerUniform, texture);
-                }
-            }
-            /**
-             * Set if inversion state
-             * @private
-             * @flag is the state
-             */
-            function setInverted(flag) {
-                if (gl && shaderProgram) {
-                    gl.uniform1i(isInverted, flag);
-                }
-            }
-            /**
-             * Enable/disable circle drawing
-             * @private
-             */
-            function setDrawAsCircle(flag) {
-                if (gl && shaderProgram) {
-                    gl.uniform1i(isCircleUniform, flag ? 1 : 0);
-                }
-            }
-            /**
-             * Flush
-             * @private
-             */
-            function reset() {
-                if (gl && shaderProgram) {
-                    gl.uniform1i(isBubbleUniform, 0);
-                    gl.uniform1i(isCircleUniform, 0);
-                }
-            }
-            /**
-             * Set bubble uniforms
-             * @private
-             * @param series {Highcharts.Series} - the series to use
-             */
-            function setBubbleUniforms(series, zCalcMin, zCalcMax) {
-                var seriesOptions = series.options,
-                    zMin = Number.MAX_VALUE,
-                    zMax = -Number.MAX_VALUE;
-                if (gl && shaderProgram && series.type === 'bubble') {
-                    zMin = pick(seriesOptions.zMin, clamp(zCalcMin, seriesOptions.displayNegative === false ?
-                        seriesOptions.zThreshold : -Number.MAX_VALUE, zMin));
-                    zMax = pick(seriesOptions.zMax, Math.max(zMax, zCalcMax));
-                    gl.uniform1i(isBubbleUniform, 1);
-                    gl.uniform1i(isCircleUniform, 1);
-                    gl.uniform1i(bubbleSizeAreaUniform, (series.options.sizeBy !== 'width'));
-                    gl.uniform1i(bubbleSizeAbsUniform, series.options
-                        .sizeByAbsoluteValue);
-                    setUniform('bubbleZMin', zMin);
-                    setUniform('bubbleZMax', zMax);
-                    setUniform('bubbleZThreshold', series.options.zThreshold);
-                    setUniform('bubbleMinSize', series.minPxSize);
-                    setUniform('bubbleMaxSize', series.maxPxSize);
-                }
-            }
-            /**
-             * Set the Color uniform.
-             * @private
-             * @param color {Array<float>} - an array with RGBA values
-             */
-            function setColor(color) {
-                if (gl && shaderProgram) {
-                    gl.uniform4f(fillColorUniform, color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, color[3]);
-                }
-            }
-            /**
-             * Set skip translation
-             * @private
-             */
-            function setSkipTranslation(flag) {
-                if (gl && shaderProgram) {
-                    gl.uniform1i(skipTranslationUniform, flag === true ? 1 : 0);
-                }
-            }
-            /**
-             * Set the perspective matrix
-             * @private
-             * @param m {Matrix4x4} - the matrix
-             */
-            function setPMatrix(m) {
-                if (gl && shaderProgram) {
-                    gl.uniformMatrix4fv(pUniform, false, m);
-                }
-            }
-            /**
-             * Set the point size.
-             * @private
-             * @param p {float} - point size
-             */
-            function setPointSize(p) {
-                if (gl && shaderProgram) {
-                    gl.uniform1f(psUniform, p);
-                }
-            }
-            /**
-             * Get the shader program handle
-             * @private
-             * @return {GLInt} - the handle for the program
-             */
-            function getProgram() {
-                return shaderProgram;
-            }
-            if (gl) {
-                if (!createShader()) {
-                    return false;
-                }
-            }
-            return {
-                psUniform: function () {
-                    return psUniform;
-                },
-                pUniform: function () {
-                    return pUniform;
-                },
-                fillColorUniform: function () {
-                    return fillColorUniform;
-                },
-                setBubbleUniforms: setBubbleUniforms,
-                bind: bind,
-                program: getProgram,
-                create: createShader,
-                setUniform: setUniform,
-                setPMatrix: setPMatrix,
-                setColor: setColor,
-                setPointSize: setPointSize,
-                setSkipTranslation: setSkipTranslation,
-                setTexture: setTexture,
-                setDrawAsCircle: setDrawAsCircle,
-                reset: reset,
-                setInverted: setInverted,
-                destroy: destroy
-            };
+        function handleErrors() {
+          if (errors.length) {
+            error("[highcharts boost] shader error - " + errors.join("\n"));
+          }
         }
-
-        return GLShader;
-    });
-    _registerModule(_modules, 'Extensions/Boost/WGLVBuffer.js', [], function () {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        /* eslint-disable valid-jsdoc */
         /**
-         * Vertex Buffer abstraction.
-         * A vertex buffer is a set of vertices which are passed to the GPU
-         * in a single call.
-         *
+         * String to shader program
          * @private
-         * @function GLVertexBuffer
-         *
-         * @param {WebGLContext} gl
-         *        the context in which to create the buffer
-         *
-         * @param {GLShader} shader
-         *        the shader to use
-         *
-         * @return {*}
+         * @param {string} str - the program source
+         * @param {string} type - the program type: either `vertex` or `fragment`
+         * @returns {bool|shader}
          */
-        function GLVertexBuffer(gl, shader, dataComponents
-        /* , type */
-        ) {
-            var buffer = false,
-                vertAttribute = false,
-                components = dataComponents || 2,
-                preAllocated = false,
-                iterator = 0, 
-                // farray = false,
-                data;
-            // type = type || 'float';
-            /**
-             * @private
-             */
-            function destroy() {
-                if (buffer) {
-                    gl.deleteBuffer(buffer);
-                    buffer = false;
-                    vertAttribute = false;
-                }
-                iterator = 0;
-                components = dataComponents || 2;
-                data = [];
-            }
-            /**
-             * Build the buffer
-             * @private
-             * @param dataIn {Array<float>} - a 0 padded array of indices
-             * @param attrib {String} - the name of the Attribute to bind the buffer to
-             * @param dataComponents {Integer} - the number of components per. indice
-             */
-            function build(dataIn, attrib, dataComponents) {
-                var farray;
-                data = dataIn || [];
-                if ((!data || data.length === 0) && !preAllocated) {
-                    // console.error('trying to render empty vbuffer');
-                    destroy();
-                    return false;
-                }
-                components = dataComponents || components;
-                if (buffer) {
-                    gl.deleteBuffer(buffer);
-                }
-                if (!preAllocated) {
-                    farray = new Float32Array(data);
-                }
-                buffer = gl.createBuffer();
-                gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
-                gl.bufferData(gl.ARRAY_BUFFER, preAllocated || farray, gl.STATIC_DRAW);
-                // gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
-                vertAttribute = gl.getAttribLocation(shader.program(), attrib);
-                gl.enableVertexAttribArray(vertAttribute);
-                // Trigger cleanup
-                farray = false;
-                return true;
-            }
-            /**
-             * Bind the buffer
-             * @private
-             */
-            function bind() {
-                if (!buffer) {
-                    return false;
-                }
-                // gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
-                // gl.enableVertexAttribArray(vertAttribute);
-                // gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
-                gl.vertexAttribPointer(vertAttribute, components, gl.FLOAT, false, 0, 0);
-                // gl.enableVertexAttribArray(vertAttribute);
-            }
-            /**
-             * Render the buffer
-             * @private
-             * @param from {Integer} - the start indice
-             * @param to {Integer} - the end indice
-             * @param drawMode {String} - the draw mode
-             */
-            function render(from, to, drawMode) {
-                var length = preAllocated ? preAllocated.length : data.length;
-                if (!buffer) {
-                    return false;
-                }
-                if (!length) {
-                    return false;
-                }
-                if (!from || from > length || from < 0) {
-                    from = 0;
-                }
-                if (!to || to > length) {
-                    to = length;
-                }
-                drawMode = drawMode || 'points';
-                gl.drawArrays(gl[drawMode.toUpperCase()], from / components, (to - from) / components);
-                return true;
-            }
-            /**
-             * @private
-             */
-            function push(x, y, a, b) {
-                if (preAllocated) { // && iterator <= preAllocated.length - 4) {
-                    preAllocated[++iterator] = x;
-                    preAllocated[++iterator] = y;
-                    preAllocated[++iterator] = a;
-                    preAllocated[++iterator] = b;
-                }
-            }
-            /**
-             * Note about pre-allocated buffers:
-             *     - This is slower for charts with many series
-             * @private
-             */
-            function allocate(size) {
-                size *= 4;
-                iterator = -1;
-                preAllocated = new Float32Array(size);
-            }
-            // /////////////////////////////////////////////////////////////////////////
-            return {
-                destroy: destroy,
-                bind: bind,
-                data: data,
-                build: build,
-                render: render,
-                allocate: allocate,
-                push: push
-            };
+        function stringToProgram(str, type) {
+          var t = type === "vertex" ? gl.VERTEX_SHADER : gl.FRAGMENT_SHADER,
+            shader = gl.createShader(t);
+          gl.shaderSource(shader, str);
+          gl.compileShader(shader);
+          if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
+            errors.push(
+              "when compiling " +
+                type +
+                " shader:\n" +
+                gl.getShaderInfoLog(shader)
+            );
+            return false;
+          }
+          return shader;
+        }
+        /**
+         * Create the shader.
+         * Loads the shader program statically defined above
+         * @private
+         */
+        function createShader() {
+          var v = stringToProgram(vertShade, "vertex"),
+            f = stringToProgram(fragShade, "fragment");
+          if (!v || !f) {
+            shaderProgram = false;
+            handleErrors();
+            return false;
+          }
+          /**
+           * @private
+           */
+          function uloc(n) {
+            return gl.getUniformLocation(shaderProgram, n);
+          }
+          shaderProgram = gl.createProgram();
+          gl.attachShader(shaderProgram, v);
+          gl.attachShader(shaderProgram, f);
+          gl.linkProgram(shaderProgram);
+          if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
+            errors.push(gl.getProgramInfoLog(shaderProgram));
+            handleErrors();
+            shaderProgram = false;
+            return false;
+          }
+          gl.useProgram(shaderProgram);
+          gl.bindAttribLocation(shaderProgram, 0, "aVertexPosition");
+          pUniform = uloc("uPMatrix");
+          psUniform = uloc("pSize");
+          fillColorUniform = uloc("fillColor");
+          isBubbleUniform = uloc("isBubble");
+          bubbleSizeAbsUniform = uloc("bubbleSizeAbs");
+          bubbleSizeAreaUniform = uloc("bubbleSizeByArea");
+          uSamplerUniform = uloc("uSampler");
+          skipTranslationUniform = uloc("skipTranslation");
+          isCircleUniform = uloc("isCircle");
+          isInverted = uloc("isInverted");
+          return true;
+        }
+        /**
+         * Destroy the shader
+         * @private
+         */
+        function destroy() {
+          if (gl && shaderProgram) {
+            gl.deleteProgram(shaderProgram);
+            shaderProgram = false;
+          }
+        }
+        /**
+         * Bind the shader.
+         * This makes the shader the active one until another one is bound,
+         * or until 0 is bound.
+         * @private
+         */
+        function bind() {
+          if (gl && shaderProgram) {
+            gl.useProgram(shaderProgram);
+          }
+        }
+        /**
+         * Set a uniform value.
+         * This uses a hash map to cache uniform locations.
+         * @private
+         * @param name {string} - the name of the uniform to set
+         * @param val {float} - the value to set
+         */
+        function setUniform(name, val) {
+          if (gl && shaderProgram) {
+            var u = (uLocations[name] =
+              uLocations[name] || gl.getUniformLocation(shaderProgram, name));
+            gl.uniform1f(u, val);
+          }
+        }
+        /**
+         * Set the active texture
+         * @private
+         * @param texture - the texture
+         */
+        function setTexture(texture) {
+          if (gl && shaderProgram) {
+            gl.uniform1i(uSamplerUniform, texture);
+          }
+        }
+        /**
+         * Set if inversion state
+         * @private
+         * @flag is the state
+         */
+        function setInverted(flag) {
+          if (gl && shaderProgram) {
+            gl.uniform1i(isInverted, flag);
+          }
+        }
+        /**
+         * Enable/disable circle drawing
+         * @private
+         */
+        function setDrawAsCircle(flag) {
+          if (gl && shaderProgram) {
+            gl.uniform1i(isCircleUniform, flag ? 1 : 0);
+          }
+        }
+        /**
+         * Flush
+         * @private
+         */
+        function reset() {
+          if (gl && shaderProgram) {
+            gl.uniform1i(isBubbleUniform, 0);
+            gl.uniform1i(isCircleUniform, 0);
+          }
+        }
+        /**
+         * Set bubble uniforms
+         * @private
+         * @param series {Highcharts.Series} - the series to use
+         */
+        function setBubbleUniforms(series, zCalcMin, zCalcMax) {
+          var seriesOptions = series.options,
+            zMin = Number.MAX_VALUE,
+            zMax = -Number.MAX_VALUE;
+          if (gl && shaderProgram && series.type === "bubble") {
+            zMin = pick(
+              seriesOptions.zMin,
+              clamp(
+                zCalcMin,
+                seriesOptions.displayNegative === false
+                  ? seriesOptions.zThreshold
+                  : -Number.MAX_VALUE,
+                zMin
+              )
+            );
+            zMax = pick(seriesOptions.zMax, Math.max(zMax, zCalcMax));
+            gl.uniform1i(isBubbleUniform, 1);
+            gl.uniform1i(isCircleUniform, 1);
+            gl.uniform1i(
+              bubbleSizeAreaUniform,
+              series.options.sizeBy !== "width"
+            );
+            gl.uniform1i(
+              bubbleSizeAbsUniform,
+              series.options.sizeByAbsoluteValue
+            );
+            setUniform("bubbleZMin", zMin);
+            setUniform("bubbleZMax", zMax);
+            setUniform("bubbleZThreshold", series.options.zThreshold);
+            setUniform("bubbleMinSize", series.minPxSize);
+            setUniform("bubbleMaxSize", series.maxPxSize);
+          }
+        }
+        /**
+         * Set the Color uniform.
+         * @private
+         * @param color {Array<float>} - an array with RGBA values
+         */
+        function setColor(color) {
+          if (gl && shaderProgram) {
+            gl.uniform4f(
+              fillColorUniform,
+              color[0] / 255.0,
+              color[1] / 255.0,
+              color[2] / 255.0,
+              color[3]
+            );
+          }
+        }
+        /**
+         * Set skip translation
+         * @private
+         */
+        function setSkipTranslation(flag) {
+          if (gl && shaderProgram) {
+            gl.uniform1i(skipTranslationUniform, flag === true ? 1 : 0);
+          }
+        }
+        /**
+         * Set the perspective matrix
+         * @private
+         * @param m {Matrix4x4} - the matrix
+         */
+        function setPMatrix(m) {
+          if (gl && shaderProgram) {
+            gl.uniformMatrix4fv(pUniform, false, m);
+          }
+        }
+        /**
+         * Set the point size.
+         * @private
+         * @param p {float} - point size
+         */
+        function setPointSize(p) {
+          if (gl && shaderProgram) {
+            gl.uniform1f(psUniform, p);
+          }
+        }
+        /**
+         * Get the shader program handle
+         * @private
+         * @return {GLInt} - the handle for the program
+         */
+        function getProgram() {
+          return shaderProgram;
+        }
+        if (gl) {
+          if (!createShader()) {
+            return false;
+          }
         }
+        return {
+          psUniform: function () {
+            return psUniform;
+          },
+          pUniform: function () {
+            return pUniform;
+          },
+          fillColorUniform: function () {
+            return fillColorUniform;
+          },
+          setBubbleUniforms: setBubbleUniforms,
+          bind: bind,
+          program: getProgram,
+          create: createShader,
+          setUniform: setUniform,
+          setPMatrix: setPMatrix,
+          setColor: setColor,
+          setPointSize: setPointSize,
+          setSkipTranslation: setSkipTranslation,
+          setTexture: setTexture,
+          setDrawAsCircle: setDrawAsCircle,
+          reset: reset,
+          setInverted: setInverted,
+          destroy: destroy,
+        };
+      }
 
-        return GLVertexBuffer;
-    });
-    _registerModule(_modules, 'Extensions/Boost/WGLRenderer.js', [_modules['Core/Color/Color.js'], _modules['Extensions/Boost/WGLShader.js'], _modules['Extensions/Boost/WGLVBuffer.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (Color, GLShader, GLVertexBuffer, H, U) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var color = Color.parse;
-        var doc = H.doc;
-        var isNumber = U.isNumber,
-            isObject = U.isObject,
-            merge = U.merge,
-            objectEach = U.objectEach,
-            pick = U.pick;
-        /* eslint-disable valid-jsdoc */
+      return GLShader;
+    }
+  );
+  _registerModule(_modules, "Extensions/Boost/WGLVBuffer.js", [], function () {
+    /* *
+     *
+     *  Copyright (c) 2019-2020 Highsoft AS
+     *
+     *  Boost module: stripped-down renderer for higher performance
+     *
+     *  License: highcharts.com/license
+     *
+     *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+     *
+     * */
+    /* eslint-disable valid-jsdoc */
+    /**
+     * Vertex Buffer abstraction.
+     * A vertex buffer is a set of vertices which are passed to the GPU
+     * in a single call.
+     *
+     * @private
+     * @function GLVertexBuffer
+     *
+     * @param {WebGLContext} gl
+     *        the context in which to create the buffer
+     *
+     * @param {GLShader} shader
+     *        the shader to use
+     *
+     * @return {*}
+     */
+    function GLVertexBuffer(
+      gl,
+      shader,
+      dataComponents
+      /* , type */
+    ) {
+      var buffer = false,
+        vertAttribute = false,
+        components = dataComponents || 2,
+        preAllocated = false,
+        iterator = 0,
+        // farray = false,
+        data;
+      // type = type || 'float';
+      /**
+       * @private
+       */
+      function destroy() {
+        if (buffer) {
+          gl.deleteBuffer(buffer);
+          buffer = false;
+          vertAttribute = false;
+        }
+        iterator = 0;
+        components = dataComponents || 2;
+        data = [];
+      }
+      /**
+       * Build the buffer
+       * @private
+       * @param dataIn {Array<float>} - a 0 padded array of indices
+       * @param attrib {String} - the name of the Attribute to bind the buffer to
+       * @param dataComponents {Integer} - the number of components per. indice
+       */
+      function build(dataIn, attrib, dataComponents) {
+        var farray;
+        data = dataIn || [];
+        if ((!data || data.length === 0) && !preAllocated) {
+          // console.error('trying to render empty vbuffer');
+          destroy();
+          return false;
+        }
+        components = dataComponents || components;
+        if (buffer) {
+          gl.deleteBuffer(buffer);
+        }
+        if (!preAllocated) {
+          farray = new Float32Array(data);
+        }
+        buffer = gl.createBuffer();
+        gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+        gl.bufferData(gl.ARRAY_BUFFER, preAllocated || farray, gl.STATIC_DRAW);
+        // gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
+        vertAttribute = gl.getAttribLocation(shader.program(), attrib);
+        gl.enableVertexAttribArray(vertAttribute);
+        // Trigger cleanup
+        farray = false;
+        return true;
+      }
+      /**
+       * Bind the buffer
+       * @private
+       */
+      function bind() {
+        if (!buffer) {
+          return false;
+        }
+        // gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');
+        // gl.enableVertexAttribArray(vertAttribute);
+        // gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+        gl.vertexAttribPointer(
+          vertAttribute,
+          components,
+          gl.FLOAT,
+          false,
+          0,
+          0
+        );
+        // gl.enableVertexAttribArray(vertAttribute);
+      }
+      /**
+       * Render the buffer
+       * @private
+       * @param from {Integer} - the start indice
+       * @param to {Integer} - the end indice
+       * @param drawMode {String} - the draw mode
+       */
+      function render(from, to, drawMode) {
+        var length = preAllocated ? preAllocated.length : data.length;
+        if (!buffer) {
+          return false;
+        }
+        if (!length) {
+          return false;
+        }
+        if (!from || from > length || from < 0) {
+          from = 0;
+        }
+        if (!to || to > length) {
+          to = length;
+        }
+        drawMode = drawMode || "points";
+        gl.drawArrays(
+          gl[drawMode.toUpperCase()],
+          from / components,
+          (to - from) / components
+        );
+        return true;
+      }
+      /**
+       * @private
+       */
+      function push(x, y, a, b) {
+        if (preAllocated) {
+          // && iterator <= preAllocated.length - 4) {
+          preAllocated[++iterator] = x;
+          preAllocated[++iterator] = y;
+          preAllocated[++iterator] = a;
+          preAllocated[++iterator] = b;
+        }
+      }
+      /**
+       * Note about pre-allocated buffers:
+       *     - This is slower for charts with many series
+       * @private
+       */
+      function allocate(size) {
+        size *= 4;
+        iterator = -1;
+        preAllocated = new Float32Array(size);
+      }
+      // /////////////////////////////////////////////////////////////////////////
+      return {
+        destroy: destroy,
+        bind: bind,
+        data: data,
+        build: build,
+        render: render,
+        allocate: allocate,
+        push: push,
+      };
+    }
+
+    return GLVertexBuffer;
+  });
+  _registerModule(
+    _modules,
+    "Extensions/Boost/WGLRenderer.js",
+    [
+      _modules["Core/Color/Color.js"],
+      _modules["Extensions/Boost/WGLShader.js"],
+      _modules["Extensions/Boost/WGLVBuffer.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Color, GLShader, GLVertexBuffer, H, U) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var color = Color.parse;
+      var doc = H.doc;
+      var isNumber = U.isNumber,
+        isObject = U.isObject,
+        merge = U.merge,
+        objectEach = U.objectEach,
+        pick = U.pick;
+      /* eslint-disable valid-jsdoc */
+      /**
+       * Main renderer. Used to render series.
+       *
+       * Notes to self:
+       * - May be able to build a point map by rendering to a separate canvas and
+       *   encoding values in the color data.
+       * - Need to figure out a way to transform the data quicker
+       *
+       * @private
+       * @function GLRenderer
+       *
+       * @param {Function} postRenderCallback
+       *
+       * @return {*}
+       */
+      function GLRenderer(postRenderCallback) {
+        //  // Shader
+        var shader = false,
+          // Vertex buffers - keyed on shader attribute name
+          vbuffer = false,
+          // Opengl context
+          gl = false,
+          // Width of our viewport in pixels
+          width = 0,
+          // Height of our viewport in pixels
+          height = 0,
+          // The data to render - array of coordinates
+          data = false,
+          // The marker data
+          markerData = false,
+          // Exports
+          exports = {},
+          // Is it inited?
+          isInited = false,
+          // The series stack
+          series = [],
+          // Texture handles
+          textureHandles = {},
+          // Things to draw as "rectangles" (i.e lines)
+          asBar = {
+            column: true,
+            columnrange: true,
+            bar: true,
+            area: true,
+            arearange: true,
+          },
+          asCircle = {
+            scatter: true,
+            bubble: true,
+          },
+          // Render settings
+          settings = {
+            pointSize: 1,
+            lineWidth: 1,
+            fillColor: "#AA00AA",
+            useAlpha: true,
+            usePreallocated: false,
+            useGPUTranslations: false,
+            debug: {
+              timeRendering: false,
+              timeSeriesProcessing: false,
+              timeSetup: false,
+              timeBufferCopy: false,
+              timeKDTree: false,
+              showSkipSummary: false,
+            },
+          };
+        // /////////////////////////////////////////////////////////////////////////
         /**
-         * Main renderer. Used to render series.
-         *
-         * Notes to self:
-         * - May be able to build a point map by rendering to a separate canvas and
-         *   encoding values in the color data.
-         * - Need to figure out a way to transform the data quicker
-         *
          * @private
-         * @function GLRenderer
-         *
-         * @param {Function} postRenderCallback
-         *
-         * @return {*}
          */
-        function GLRenderer(postRenderCallback) {
-            //  // Shader
-            var shader = false, 
-                // Vertex buffers - keyed on shader attribute name
-                vbuffer = false, 
-                // Opengl context
-                gl = false, 
-                // Width of our viewport in pixels
-                width = 0, 
-                // Height of our viewport in pixels
-                height = 0, 
-                // The data to render - array of coordinates
-                data = false, 
-                // The marker data
-                markerData = false, 
-                // Exports
-                exports = {}, 
-                // Is it inited?
-                isInited = false, 
-                // The series stack
-                series = [], 
-                // Texture handles
-                textureHandles = {}, 
-                // Things to draw as "rectangles" (i.e lines)
-                asBar = {
-                    'column': true,
-                    'columnrange': true,
-                    'bar': true,
-                    'area': true,
-                    'arearange': true
-                },
-                asCircle = {
-                    'scatter': true,
-                    'bubble': true
-                }, 
-                // Render settings
-                settings = {
-                    pointSize: 1,
-                    lineWidth: 1,
-                    fillColor: '#AA00AA',
-                    useAlpha: true,
-                    usePreallocated: false,
-                    useGPUTranslations: false,
-                    debug: {
-                        timeRendering: false,
-                        timeSeriesProcessing: false,
-                        timeSetup: false,
-                        timeBufferCopy: false,
-                        timeKDTree: false,
-                        showSkipSummary: false
-                    }
-                };
-            // /////////////////////////////////////////////////////////////////////////
-            /**
-             * @private
-             */
-            function setOptions(options) {
-                merge(true, settings, options);
-            }
-            /**
-             * @private
-             */
-            function seriesPointCount(series) {
-                var isStacked,
-                    xData,
-                    s;
-                if (series.isSeriesBoosting) {
-                    isStacked = !!series.options.stacking;
-                    xData = (series.xData ||
-                        series.options.xData ||
-                        series.processedXData);
-                    s = (isStacked ? series.data : (xData || series.options.data))
-                        .length;
-                    if (series.type === 'treemap') {
-                        s *= 12;
-                    }
-                    else if (series.type === 'heatmap') {
-                        s *= 6;
-                    }
-                    else if (asBar[series.type]) {
-                        s *= 2;
-                    }
-                    return s;
-                }
-                return 0;
-            }
-            /**
-             * Allocate a float buffer to fit all series
-             * @private
-             */
-            function allocateBuffer(chart) {
-                var s = 0;
-                if (!settings.usePreallocated) {
-                    return;
-                }
-                chart.series.forEach(function (series) {
-                    if (series.isSeriesBoosting) {
-                        s += seriesPointCount(series);
-                    }
-                });
-                vbuffer.allocate(s);
-            }
-            /**
-             * @private
-             */
-            function allocateBufferForSingleSeries(series) {
-                var s = 0;
-                if (!settings.usePreallocated) {
-                    return;
-                }
-                if (series.isSeriesBoosting) {
-                    s = seriesPointCount(series);
-                }
-                vbuffer.allocate(s);
-            }
-            /**
-             * Returns an orthographic perspective matrix
-             * @private
-             * @param {number} width - the width of the viewport in pixels
-             * @param {number} height - the height of the viewport in pixels
-             */
-            function orthoMatrix(width, height) {
-                var near = 0,
-                    far = 1;
-                return [
-                    2 / width, 0, 0, 0,
-                    0, -(2 / height), 0, 0,
-                    0, 0, -2 / (far - near), 0,
-                    -1, 1, -(far + near) / (far - near), 1
-                ];
-            }
-            /**
-             * Clear the depth and color buffer
-             * @private
-             */
-            function clear() {
-                gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
-            }
-            /**
-             * Get the WebGL context
-             * @private
-             * @returns {WebGLContext} - the context
-             */
-            function getGL() {
-                return gl;
-            }
-            /**
-             * Push data for a single series
-             * This calculates additional vertices and transforms the data to be
-             * aligned correctly in memory
-             * @private
-             */
-            function pushSeriesData(series, inst) {
-                var isRange = (series.pointArrayMap &&
-                        series.pointArrayMap.join(',') === 'low,high'), chart = series.chart, options = series.options, isStacked = !!options.stacking, rawData = options.data, xExtremes = series.xAxis.getExtremes(), xMin = xExtremes.min, xMax = xExtremes.max, yExtremes = series.yAxis.getExtremes(), yMin = yExtremes.min, yMax = yExtremes.max, xData = series.xData || options.xData || series.processedXData, yData = series.yData || options.yData || series.processedYData, zData = (series.zData || options.zData ||
-                        series.processedZData), yAxis = series.yAxis, xAxis = series.xAxis, 
-                    // plotHeight = series.chart.plotHeight,
-                    plotWidth = series.chart.plotWidth, useRaw = !xData || xData.length === 0, 
-                    // threshold = options.threshold,
-                    // yBottom = chart.yAxis[0].getThreshold(threshold),
-                    // hasThreshold = isNumber(threshold),
-                    // colorByPoint = series.options.colorByPoint,
-                    // This is required for color by point, so make sure this is
-                    // uncommented if enabling that
-                    // colorIndex = 0,
-                    // Required for color axis support
-                    // caxis,
-                    connectNulls = options.connectNulls, 
-                    // For some reason eslint/TypeScript don't pick up that this is
-                    // actually used: --- bre1470: it is never read, just set
-                    // maxVal: (number|undefined), // eslint-disable-line no-unused-vars
-                    points = series.points || false, lastX = false, lastY = false, minVal, pcolor, scolor, sdata = isStacked ? series.data : (xData || rawData), closestLeft = { x: Number.MAX_VALUE, y: 0 }, closestRight = { x: -Number.MAX_VALUE, y: 0 }, 
-                    //
-                    skipped = 0, hadPoints = false, 
-                    //
-                    cullXThreshold = 1, cullYThreshold = 1, 
-                    // The following are used in the builder while loop
-                    x, y, d, z, i = -1, px = false, nx = false, low, chartDestroyed = typeof chart.index === 'undefined', nextInside = false, prevInside = false, pcolor = false, drawAsBar = asBar[series.type], isXInside = false, isYInside = true, firstPoint = true, zones = options.zones || false, zoneDefColor = false, threshold = options.threshold, gapSize = false;
-                if (options.boostData && options.boostData.length > 0) {
-                    return;
-                }
-                if (options.gapSize) {
-                    gapSize = options.gapUnit !== 'value' ?
-                        options.gapSize * series.closestPointRange :
-                        options.gapSize;
-                }
-                if (zones) {
-                    zones.some(function (zone) {
-                        if (typeof zone.value === 'undefined') {
-                            zoneDefColor = new Color(zone.color);
-                            return true;
-                        }
-                        return false;
-                    });
-                    if (!zoneDefColor) {
-                        zoneDefColor = ((series.pointAttribs && series.pointAttribs().fill) ||
-                            series.color);
-                        zoneDefColor = new Color(zoneDefColor);
-                    }
-                }
-                if (chart.inverted) {
-                    // plotHeight = series.chart.plotWidth;
-                    plotWidth = series.chart.plotHeight;
-                }
-                series.closestPointRangePx = Number.MAX_VALUE;
-                /**
-                 * Push color to color buffer - need to do this per vertex.
-                 * @private
-                 */
-                function pushColor(color) {
-                    if (color) {
-                        inst.colorData.push(color[0]);
-                        inst.colorData.push(color[1]);
-                        inst.colorData.push(color[2]);
-                        inst.colorData.push(color[3]);
-                    }
-                }
-                /**
-                 * Push a vertice to the data buffer.
-                 * @private
-                 */
-                function vertice(x, y, checkTreshold, pointSize, color) {
-                    pushColor(color);
-                    if (settings.usePreallocated) {
-                        vbuffer.push(x, y, checkTreshold ? 1 : 0, pointSize || 1);
-                    }
-                    else {
-                        data.push(x);
-                        data.push(y);
-                        data.push(checkTreshold ? 1 : 0);
-                        data.push(pointSize || 1);
-                    }
-                }
-                /**
-                 * @private
-                 */
-                function closeSegment() {
-                    if (inst.segments.length) {
-                        inst.segments[inst.segments.length - 1].to = data.length;
-                    }
-                }
-                /**
-                 * Create a new segment for the current set.
-                 * @private
-                 */
-                function beginSegment() {
-                    // Insert a segment on the series.
-                    // A segment is just a start indice.
-                    // When adding a segment, if one exists from before, it should
-                    // set the previous segment's end
-                    if (inst.segments.length &&
-                        inst.segments[inst.segments.length - 1].from === data.length) {
-                        return;
-                    }
-                    closeSegment();
-                    inst.segments.push({
-                        from: data.length
-                    });
-                }
-                /**
-                 * Push a rectangle to the data buffer.
-                 * @private
-                 */
-                function pushRect(x, y, w, h, color) {
-                    pushColor(color);
-                    vertice(x + w, y);
-                    pushColor(color);
-                    vertice(x, y);
-                    pushColor(color);
-                    vertice(x, y + h);
-                    pushColor(color);
-                    vertice(x, y + h);
-                    pushColor(color);
-                    vertice(x + w, y + h);
-                    pushColor(color);
-                    vertice(x + w, y);
-                }
-                // Create the first segment
-                beginSegment();
-                // Special case for point shapes
-                if (points && points.length > 0) {
-                    // If we're doing points, we assume that the points are already
-                    // translated, so we skip the shader translation.
-                    inst.skipTranslation = true;
-                    // Force triangle draw mode
-                    inst.drawMode = 'triangles';
-                    // We don't have a z component in the shader, so we need to sort.
-                    if (points[0].node && points[0].node.levelDynamic) {
-                        points.sort(function (a, b) {
-                            if (a.node) {
-                                if (a.node.levelDynamic >
-                                    b.node.levelDynamic) {
-                                    return 1;
-                                }
-                                if (a.node.levelDynamic <
-                                    b.node.levelDynamic) {
-                                    return -1;
-                                }
-                            }
-                            return 0;
-                        });
-                    }
-                    points.forEach(function (point) {
-                        var plotY = point.plotY,
-                            shapeArgs,
-                            swidth,
-                            pointAttr;
-                        if (typeof plotY !== 'undefined' &&
-                            !isNaN(plotY) &&
-                            point.y !== null) {
-                            shapeArgs = point.shapeArgs;
-                            pointAttr = chart.styledMode ?
-                                point.series
-                                    .colorAttribs(point) :
-                                pointAttr = point.series.pointAttribs(point);
-                            swidth = pointAttr['stroke-width'] || 0;
-                            // Handle point colors
-                            pcolor = color(pointAttr.fill).rgba;
-                            pcolor[0] /= 255.0;
-                            pcolor[1] /= 255.0;
-                            pcolor[2] /= 255.0;
-                            // So there are two ways of doing this. Either we can
-                            // create a rectangle of two triangles, or we can do a
-                            // point and use point size. Latter is faster, but
-                            // only supports squares. So we're doing triangles.
-                            // We could also use one color per. vertice to get
-                            // better color interpolation.
-                            // If there's stroking, we do an additional rect
-                            if (series.type === 'treemap') {
-                                swidth = swidth || 1;
-                                scolor = color(pointAttr.stroke).rgba;
-                                scolor[0] /= 255.0;
-                                scolor[1] /= 255.0;
-                                scolor[2] /= 255.0;
-                                pushRect(shapeArgs.x, shapeArgs.y, shapeArgs.width, shapeArgs.height, scolor);
-                                swidth /= 2;
-                            }
-                            // } else {
-                            //     swidth = 0;
-                            // }
-                            // Fixes issues with inverted heatmaps (see #6981)
-                            // The root cause is that the coordinate system is flipped.
-                            // In other words, instead of [0,0] being top-left, it's
-                            // bottom-right. This causes a vertical and horizontal flip
-                            // in the resulting image, making it rotated 180 degrees.
-                            if (series.type === 'heatmap' && chart.inverted) {
-                                shapeArgs.x = xAxis.len - shapeArgs.x;
-                                shapeArgs.y = yAxis.len - shapeArgs.y;
-                                shapeArgs.width = -shapeArgs.width;
-                                shapeArgs.height = -shapeArgs.height;
-                            }
-                            pushRect(shapeArgs.x + swidth, shapeArgs.y + swidth, shapeArgs.width - (swidth * 2), shapeArgs.height - (swidth * 2), pcolor);
-                        }
-                    });
-                    closeSegment();
-                    return;
-                }
-                // Extract color axis
-                // (chart.axes || []).forEach(function (a) {
-                //     if (H.ColorAxis && a instanceof H.ColorAxis) {
-                //         caxis = a;
-                //     }
-                // });
-                while (i < sdata.length - 1) {
-                    d = sdata[++i];
-                    // px = x = y = z = nx = low = false;
-                    // chartDestroyed = typeof chart.index === 'undefined';
-                    // nextInside = prevInside = pcolor = isXInside = isYInside = false;
-                    // drawAsBar = asBar[series.type];
-                    if (chartDestroyed) {
-                        break;
-                    }
-                    // Uncomment this to enable color by point.
-                    // This currently left disabled as the charts look really ugly
-                    // when enabled and there's a lot of points.
-                    // Leaving in for the future (tm).
-                    // if (colorByPoint) {
-                    //     colorIndex = ++colorIndex %
-                    //         series.chart.options.colors.length;
-                    //     pcolor = toRGBAFast(series.chart.options.colors[colorIndex]);
-                    //     pcolor[0] /= 255.0;
-                    //     pcolor[1] /= 255.0;
-                    //     pcolor[2] /= 255.0;
-                    // }
-                    // Handle the point.color option (#5999)
-                    var pointOptions = rawData && rawData[i];
-                    if (!useRaw && isObject(pointOptions, true)) {
-                        if (pointOptions.color) {
-                            pcolor = color(pointOptions.color).rgba;
-                            pcolor[0] /= 255.0;
-                            pcolor[1] /= 255.0;
-                            pcolor[2] /= 255.0;
-                        }
-                    }
-                    if (useRaw) {
-                        x = d[0];
-                        y = d[1];
-                        if (sdata[i + 1]) {
-                            nx = sdata[i + 1][0];
-                        }
-                        if (sdata[i - 1]) {
-                            px = sdata[i - 1][0];
-                        }
-                        if (d.length >= 3) {
-                            z = d[2];
-                            if (d[2] > inst.zMax) {
-                                inst.zMax = d[2];
-                            }
-                            if (d[2] < inst.zMin) {
-                                inst.zMin = d[2];
-                            }
-                        }
-                    }
-                    else {
-                        x = d;
-                        y = yData[i];
-                        if (sdata[i + 1]) {
-                            nx = sdata[i + 1];
-                        }
-                        if (sdata[i - 1]) {
-                            px = sdata[i - 1];
-                        }
-                        if (zData && zData.length) {
-                            z = zData[i];
-                            if (zData[i] > inst.zMax) {
-                                inst.zMax = zData[i];
-                            }
-                            if (zData[i] < inst.zMin) {
-                                inst.zMin = zData[i];
-                            }
-                        }
-                    }
-                    if (!connectNulls && (x === null || y === null)) {
-                        beginSegment();
-                        continue;
-                    }
-                    if (nx && nx >= xMin && nx <= xMax) {
-                        nextInside = true;
-                    }
-                    if (px && px >= xMin && px <= xMax) {
-                        prevInside = true;
-                    }
-                    if (isRange) {
-                        if (useRaw) {
-                            y = d.slice(1, 3);
-                        }
-                        low = y[0];
-                        y = y[1];
-                    }
-                    else if (isStacked) {
-                        x = d.x;
-                        y = d.stackY;
-                        low = y - d.y;
-                    }
-                    if (yMin !== null &&
-                        typeof yMin !== 'undefined' &&
-                        yMax !== null &&
-                        typeof yMax !== 'undefined') {
-                        isYInside = y >= yMin && y <= yMax;
-                    }
-                    if (x > xMax && closestRight.x < xMax) {
-                        closestRight.x = x;
-                        closestRight.y = y;
-                    }
-                    if (x < xMin && closestLeft.x > xMin) {
-                        closestLeft.x = x;
-                        closestLeft.y = y;
-                    }
-                    if (y === null && connectNulls) {
-                        continue;
-                    }
-                    // Cull points outside the extremes
-                    if (y === null || (!isYInside && !nextInside && !prevInside)) {
-                        beginSegment();
-                        continue;
-                    }
-                    // The first point before and first after extremes should be
-                    // rendered (#9962)
-                    if ((nx >= xMin || x >= xMin) &&
-                        (px <= xMax || x <= xMax)) {
-                        isXInside = true;
-                    }
-                    if (!isXInside && !nextInside && !prevInside) {
-                        continue;
-                    }
-                    if (gapSize && x - px > gapSize) {
-                        beginSegment();
-                    }
-                    // Note: Boost requires that zones are sorted!
-                    if (zones) {
-                        pcolor = zoneDefColor.rgba;
-                        zones.some(function (// eslint-disable-line no-loop-func
-                        zone, i) {
-                            var last = zones[i - 1];
-                            if (typeof zone.value !== 'undefined' && y <= zone.value) {
-                                if (!last || y >= last.value) {
-                                    pcolor = color(zone.color).rgba;
-                                }
-                                return true;
-                            }
-                            return false;
-                        });
-                        pcolor[0] /= 255.0;
-                        pcolor[1] /= 255.0;
-                        pcolor[2] /= 255.0;
-                    }
-                    // Skip translations - temporary floating point fix
-                    if (!settings.useGPUTranslations) {
-                        inst.skipTranslation = true;
-                        x = xAxis.toPixels(x, true);
-                        y = yAxis.toPixels(y, true);
-                        // Make sure we're not drawing outside of the chart area.
-                        // See #6594. Update: this is no longer required as far as I
-                        // can tell. Leaving in for git blame in case there are edge
-                        // cases I've not found. Having this in breaks #10246.
-                        // if (y > plotHeight) {
-                        // y = plotHeight;
-                        // }
-                        if (x > plotWidth) {
-                            // If this is  rendered as a point, just skip drawing it
-                            // entirely, as we're not dependandt on lineTo'ing to it.
-                            // See #8197
-                            if (inst.drawMode === 'points') {
-                                continue;
-                            }
-                            // Having this here will clamp markers and make the angle
-                            // of the last line wrong. See 9166.
-                            // x = plotWidth;
-                        }
-                    }
-                    if (drawAsBar) {
-                        // maxVal = y;
-                        minVal = low;
-                        if (low === false || typeof low === 'undefined') {
-                            if (y < 0) {
-                                minVal = y;
-                            }
-                            else {
-                                minVal = 0;
-                            }
-                        }
-                        if (!isRange && !isStacked) {
-                            minVal = Math.max(threshold === null ? yMin : threshold, // #5268
-                            yMin); // #8731
-                        }
-                        if (!settings.useGPUTranslations) {
-                            minVal = yAxis.toPixels(minVal, true);
-                        }
-                        // Need to add an extra point here
-                        vertice(x, minVal, 0, 0, pcolor);
-                    }
-                    // No markers on out of bounds things.
-                    // Out of bound things are shown if and only if the next
-                    // or previous point is inside the rect.
-                    if (inst.hasMarkers && isXInside) {
-                        // x = Highcharts.correctFloat(
-                        //     Math.min(Math.max(-1e5, xAxis.translate(
-                        //         x,
-                        //         0,
-                        //         0,
-                        //         0,
-                        //         1,
-                        //         0.5,
-                        //         false
-                        //     )), 1e5)
-                        // );
-                        if (lastX !== false) {
-                            series.closestPointRangePx = Math.min(series.closestPointRangePx, Math.abs(x - lastX));
-                        }
-                    }
-                    // If the last _drawn_ point is closer to this point than the
-                    // threshold, skip it. Shaves off 20-100ms in processing.
-                    if (!settings.useGPUTranslations &&
-                        !settings.usePreallocated &&
-                        (lastX && Math.abs(x - lastX) < cullXThreshold) &&
-                        (lastY && Math.abs(y - lastY) < cullYThreshold)) {
-                        if (settings.debug.showSkipSummary) {
-                            ++skipped;
-                        }
-                        continue;
-                    }
-                    // Do step line if enabled.
-                    // Draws an additional point at the old Y at the new X.
-                    // See #6976.
-                    if (options.step && !firstPoint) {
-                        vertice(x, lastY, 0, 2, pcolor);
-                    }
-                    vertice(x, y, 0, series.type === 'bubble' ? (z || 1) : 2, pcolor);
-                    // Uncomment this to support color axis.
-                    // if (caxis) {
-                    //     pcolor = color(caxis.toColor(y)).rgba;
-                    //     inst.colorData.push(color[0] / 255.0);
-                    //     inst.colorData.push(color[1] / 255.0);
-                    //     inst.colorData.push(color[2] / 255.0);
-                    //     inst.colorData.push(color[3]);
-                    // }
-                    lastX = x;
-                    lastY = y;
-                    hadPoints = true;
-                    firstPoint = false;
-                }
-                if (settings.debug.showSkipSummary) {
-                    console.log('skipped points:', skipped); // eslint-disable-line no-console
-                }
-                /**
-                 * @private
-                 */
-                function pushSupplementPoint(point, atStart) {
-                    if (!settings.useGPUTranslations) {
-                        inst.skipTranslation = true;
-                        point.x = xAxis.toPixels(point.x, true);
-                        point.y = yAxis.toPixels(point.y, true);
-                    }
-                    // We should only do this for lines, and we should ignore markers
-                    // since there's no point here that would have a marker.
-                    if (atStart) {
-                        data = [point.x, point.y, 0, 2].concat(data);
-                        return;
-                    }
-                    vertice(point.x, point.y, 0, 2);
-                }
-                if (!hadPoints &&
-                    connectNulls !== false &&
-                    series.drawMode === 'line_strip') {
-                    if (closestLeft.x < Number.MAX_VALUE) {
-                        // We actually need to push this *before* the complete buffer.
-                        pushSupplementPoint(closestLeft, true);
-                    }
-                    if (closestRight.x > -Number.MAX_VALUE) {
-                        pushSupplementPoint(closestRight);
-                    }
-                }
-                closeSegment();
-            }
-            /**
-             * Push a series to the renderer
-             * If we render the series immediatly, we don't have to loop later
-             * @private
-             * @param s {Highchart.Series} - the series to push
-             */
-            function pushSeries(s) {
-                if (series.length > 0) {
-                    // series[series.length - 1].to = data.length;
-                    if (series[series.length - 1].hasMarkers) {
-                        series[series.length - 1].markerTo = markerData.length;
-                    }
-                }
-                if (settings.debug.timeSeriesProcessing) {
-                    console.time('building ' + s.type + ' series'); // eslint-disable-line no-console
-                }
-                series.push({
-                    segments: [],
-                    // from: data.length,
-                    markerFrom: markerData.length,
-                    // Push RGBA values to this array to use per. point coloring.
-                    // It should be 0-padded, so each component should be pushed in
-                    // succession.
-                    colorData: [],
-                    series: s,
-                    zMin: Number.MAX_VALUE,
-                    zMax: -Number.MAX_VALUE,
-                    hasMarkers: s.options.marker ?
-                        s.options.marker.enabled !== false :
-                        false,
-                    showMarkers: true,
-                    drawMode: {
-                        'area': 'lines',
-                        'arearange': 'lines',
-                        'areaspline': 'line_strip',
-                        'column': 'lines',
-                        'columnrange': 'lines',
-                        'bar': 'lines',
-                        'line': 'line_strip',
-                        'scatter': 'points',
-                        'heatmap': 'triangles',
-                        'treemap': 'triangles',
-                        'bubble': 'points'
-                    }[s.type] || 'line_strip'
-                });
-                // Add the series data to our buffer(s)
-                pushSeriesData(s, series[series.length - 1]);
-                if (settings.debug.timeSeriesProcessing) {
-                    console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console
-                }
-            }
-            /**
-             * Flush the renderer.
-             * This removes pushed series and vertices.
-             * Should be called after clearing and before rendering
-             * @private
-             */
-            function flush() {
-                series = [];
-                exports.data = data = [];
-                markerData = [];
-                if (vbuffer) {
-                    vbuffer.destroy();
-                }
-            }
-            /**
-             * Pass x-axis to shader
-             * @private
-             * @param axis {Highcharts.Axis} - the x-axis
-             */
-            function setXAxis(axis) {
-                if (!shader) {
-                    return;
-                }
-                shader.setUniform('xAxisTrans', axis.transA);
-                shader.setUniform('xAxisMin', axis.min);
-                shader.setUniform('xAxisMinPad', axis.minPixelPadding);
-                shader.setUniform('xAxisPointRange', axis.pointRange);
-                shader.setUniform('xAxisLen', axis.len);
-                shader.setUniform('xAxisPos', axis.pos);
-                shader.setUniform('xAxisCVSCoord', (!axis.horiz));
-                shader.setUniform('xAxisIsLog', (!!axis.logarithmic));
-                shader.setUniform('xAxisReversed', (!!axis.reversed));
-            }
-            /**
-             * Pass y-axis to shader
-             * @private
-             * @param axis {Highcharts.Axis} - the y-axis
-             */
-            function setYAxis(axis) {
-                if (!shader) {
-                    return;
-                }
-                shader.setUniform('yAxisTrans', axis.transA);
-                shader.setUniform('yAxisMin', axis.min);
-                shader.setUniform('yAxisMinPad', axis.minPixelPadding);
-                shader.setUniform('yAxisPointRange', axis.pointRange);
-                shader.setUniform('yAxisLen', axis.len);
-                shader.setUniform('yAxisPos', axis.pos);
-                shader.setUniform('yAxisCVSCoord', (!axis.horiz));
-                shader.setUniform('yAxisIsLog', (!!axis.logarithmic));
-                shader.setUniform('yAxisReversed', (!!axis.reversed));
-            }
-            /**
-             * Set the translation threshold
-             * @private
-             * @param has {boolean} - has threshold flag
-             * @param translation {Float} - the threshold
-             */
-            function setThreshold(has, translation) {
-                shader.setUniform('hasThreshold', has);
-                shader.setUniform('translatedThreshold', translation);
+        function setOptions(options) {
+          merge(true, settings, options);
+        }
+        /**
+         * @private
+         */
+        function seriesPointCount(series) {
+          var isStacked, xData, s;
+          if (series.isSeriesBoosting) {
+            isStacked = !!series.options.stacking;
+            xData =
+              series.xData || series.options.xData || series.processedXData;
+            s = (isStacked ? series.data : xData || series.options.data).length;
+            if (series.type === "treemap") {
+              s *= 12;
+            } else if (series.type === "heatmap") {
+              s *= 6;
+            } else if (asBar[series.type]) {
+              s *= 2;
             }
-            /**
-             * Render the data
-             * This renders all pushed series.
-             * @private
-             */
-            function render(chart) {
-                if (chart) {
-                    if (!chart.chartHeight || !chart.chartWidth) {
-                        // chart.setChartSize();
-                    }
-                    width = chart.chartWidth || 800;
-                    height = chart.chartHeight || 400;
-                }
-                else {
-                    return false;
-                }
-                if (!gl || !width || !height || !shader) {
-                    return false;
-                }
-                if (settings.debug.timeRendering) {
-                    console.time('gl rendering'); // eslint-disable-line no-console
-                }
-                gl.canvas.width = width;
-                gl.canvas.height = height;
-                shader.bind();
-                gl.viewport(0, 0, width, height);
-                shader.setPMatrix(orthoMatrix(width, height));
-                if (settings.lineWidth > 1 && !H.isMS) {
-                    gl.lineWidth(settings.lineWidth);
-                }
-                vbuffer.build(exports.data, 'aVertexPosition', 4);
-                vbuffer.bind();
-                shader.setInverted(chart.inverted);
-                // Render the series
-                series.forEach(function (s, si) {
-                    var options = s.series.options,
-                        shapeOptions = options.marker,
-                        sindex,
-                        lineWidth = (typeof options.lineWidth !== 'undefined' ?
-                            options.lineWidth :
-                            1),
-                        threshold = options.threshold,
-                        hasThreshold = isNumber(threshold),
-                        yBottom = s.series.yAxis.getThreshold(threshold),
-                        translatedThreshold = yBottom,
-                        cbuffer,
-                        showMarkers = pick(options.marker ? options.marker.enabled : null,
-                        s.series.xAxis.isRadial ? true : null,
-                        s.series.closestPointRangePx >
-                            2 * ((options.marker ?
-                                options.marker.radius :
-                                10) || 10)),
-                        fillColor,
-                        shapeTexture = textureHandles[(shapeOptions && shapeOptions.symbol) ||
-                            s.series.symbol] || textureHandles.circle,
-                        scolor = [];
-                    if (s.segments.length === 0 ||
-                        (s.segmentslength &&
-                            s.segments[0].from === s.segments[0].to)) {
-                        return;
-                    }
-                    if (shapeTexture.isReady) {
-                        gl.bindTexture(gl.TEXTURE_2D, shapeTexture.handle);
-                        shader.setTexture(shapeTexture.handle);
-                    }
-                    if (chart.styledMode) {
-                        fillColor = (s.series.markerGroup &&
-                            s.series.markerGroup.getStyle('fill'));
-                    }
-                    else {
-                        fillColor =
-                            (s.series.pointAttribs && s.series.pointAttribs().fill) ||
-                                s.series.color;
-                        if (options.colorByPoint) {
-                            fillColor = s.series.chart.options.colors[si];
-                        }
-                    }
-                    if (s.series.fillOpacity && options.fillOpacity) {
-                        fillColor = new Color(fillColor).setOpacity(pick(options.fillOpacity, 1.0)).get();
-                    }
-                    scolor = color(fillColor).rgba;
-                    if (!settings.useAlpha) {
-                        scolor[3] = 1.0;
-                    }
-                    // This is very much temporary
-                    if (s.drawMode === 'lines' &&
-                        settings.useAlpha &&
-                        scolor[3] < 1) {
-                        scolor[3] /= 10;
-                    }
-                    // Blending
-                    if (options.boostBlending === 'add') {
-                        gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
-                        gl.blendEquation(gl.FUNC_ADD);
-                    }
-                    else if (options.boostBlending === 'mult' ||
-                        options.boostBlending === 'multiply') {
-                        gl.blendFunc(gl.DST_COLOR, gl.ZERO);
-                    }
-                    else if (options.boostBlending === 'darken') {
-                        gl.blendFunc(gl.ONE, gl.ONE);
-                        gl.blendEquation(gl.FUNC_MIN);
-                    }
-                    else {
-                        // gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
-                        // gl.blendEquation(gl.FUNC_ADD);
-                        gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
-                    }
-                    shader.reset();
-                    // If there are entries in the colorData buffer, build and bind it.
-                    if (s.colorData.length > 0) {
-                        shader.setUniform('hasColor', 1.0);
-                        cbuffer = GLVertexBuffer(gl, shader); // eslint-disable-line new-cap
-                        cbuffer.build(s.colorData, 'aColor', 4);
-                        cbuffer.bind();
-                    }
-                    // Set series specific uniforms
-                    shader.setColor(scolor);
-                    setXAxis(s.series.xAxis);
-                    setYAxis(s.series.yAxis);
-                    setThreshold(hasThreshold, translatedThreshold);
-                    if (s.drawMode === 'points') {
-                        if (options.marker && isNumber(options.marker.radius)) {
-                            shader.setPointSize(options.marker.radius * 2.0);
-                        }
-                        else {
-                            shader.setPointSize(1);
-                        }
-                    }
-                    // If set to true, the toPixels translations in the shader
-                    // is skipped, i.e it's assumed that the value is a pixel coord.
-                    shader.setSkipTranslation(s.skipTranslation);
-                    if (s.series.type === 'bubble') {
-                        shader.setBubbleUniforms(s.series, s.zMin, s.zMax);
-                    }
-                    shader.setDrawAsCircle(asCircle[s.series.type] || false);
-                    // Do the actual rendering
-                    // If the line width is < 0, skip rendering of the lines. See #7833.
-                    if (lineWidth > 0 || s.drawMode !== 'line_strip') {
-                        for (sindex = 0; sindex < s.segments.length; sindex++) {
-                            // if (s.segments[sindex].from < s.segments[sindex].to) {
-                            vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, s.drawMode);
-                            // }
-                        }
-                    }
-                    if (s.hasMarkers && showMarkers) {
-                        if (options.marker && isNumber(options.marker.radius)) {
-                            shader.setPointSize(options.marker.radius * 2.0);
-                        }
-                        else {
-                            shader.setPointSize(10);
-                        }
-                        shader.setDrawAsCircle(true);
-                        for (sindex = 0; sindex < s.segments.length; sindex++) {
-                            // if (s.segments[sindex].from < s.segments[sindex].to) {
-                            vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, 'POINTS');
-                            // }
-                        }
-                    }
-                });
-                if (settings.debug.timeRendering) {
-                    console.timeEnd('gl rendering'); // eslint-disable-line no-console
-                }
-                if (postRenderCallback) {
-                    postRenderCallback();
-                }
-                flush();
+            return s;
+          }
+          return 0;
+        }
+        /**
+         * Allocate a float buffer to fit all series
+         * @private
+         */
+        function allocateBuffer(chart) {
+          var s = 0;
+          if (!settings.usePreallocated) {
+            return;
+          }
+          chart.series.forEach(function (series) {
+            if (series.isSeriesBoosting) {
+              s += seriesPointCount(series);
             }
-            /**
-             * Render the data when ready
-             * @private
-             */
-            function renderWhenReady(chart) {
-                clear();
-                if (chart.renderer.forExport) {
-                    return render(chart);
+          });
+          vbuffer.allocate(s);
+        }
+        /**
+         * @private
+         */
+        function allocateBufferForSingleSeries(series) {
+          var s = 0;
+          if (!settings.usePreallocated) {
+            return;
+          }
+          if (series.isSeriesBoosting) {
+            s = seriesPointCount(series);
+          }
+          vbuffer.allocate(s);
+        }
+        /**
+         * Returns an orthographic perspective matrix
+         * @private
+         * @param {number} width - the width of the viewport in pixels
+         * @param {number} height - the height of the viewport in pixels
+         */
+        function orthoMatrix(width, height) {
+          var near = 0,
+            far = 1;
+          return [
+            2 / width,
+            0,
+            0,
+            0,
+            0,
+            -(2 / height),
+            0,
+            0,
+            0,
+            0,
+            -2 / (far - near),
+            0,
+            -1,
+            1,
+            -(far + near) / (far - near),
+            1,
+          ];
+        }
+        /**
+         * Clear the depth and color buffer
+         * @private
+         */
+        function clear() {
+          gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+        }
+        /**
+         * Get the WebGL context
+         * @private
+         * @returns {WebGLContext} - the context
+         */
+        function getGL() {
+          return gl;
+        }
+        /**
+         * Push data for a single series
+         * This calculates additional vertices and transforms the data to be
+         * aligned correctly in memory
+         * @private
+         */
+        function pushSeriesData(series, inst) {
+          var isRange =
+              series.pointArrayMap &&
+              series.pointArrayMap.join(",") === "low,high",
+            chart = series.chart,
+            options = series.options,
+            isStacked = !!options.stacking,
+            rawData = options.data,
+            xExtremes = series.xAxis.getExtremes(),
+            xMin = xExtremes.min,
+            xMax = xExtremes.max,
+            yExtremes = series.yAxis.getExtremes(),
+            yMin = yExtremes.min,
+            yMax = yExtremes.max,
+            xData = series.xData || options.xData || series.processedXData,
+            yData = series.yData || options.yData || series.processedYData,
+            zData = series.zData || options.zData || series.processedZData,
+            yAxis = series.yAxis,
+            xAxis = series.xAxis,
+            // plotHeight = series.chart.plotHeight,
+            plotWidth = series.chart.plotWidth,
+            useRaw = !xData || xData.length === 0,
+            // threshold = options.threshold,
+            // yBottom = chart.yAxis[0].getThreshold(threshold),
+            // hasThreshold = isNumber(threshold),
+            // colorByPoint = series.options.colorByPoint,
+            // This is required for color by point, so make sure this is
+            // uncommented if enabling that
+            // colorIndex = 0,
+            // Required for color axis support
+            // caxis,
+            connectNulls = options.connectNulls,
+            // For some reason eslint/TypeScript don't pick up that this is
+            // actually used: --- bre1470: it is never read, just set
+            // maxVal: (number|undefined), // eslint-disable-line no-unused-vars
+            points = series.points || false,
+            lastX = false,
+            lastY = false,
+            minVal,
+            pcolor,
+            scolor,
+            sdata = isStacked ? series.data : xData || rawData,
+            closestLeft = { x: Number.MAX_VALUE, y: 0 },
+            closestRight = { x: -Number.MAX_VALUE, y: 0 },
+            //
+            skipped = 0,
+            hadPoints = false,
+            //
+            cullXThreshold = 1,
+            cullYThreshold = 1,
+            // The following are used in the builder while loop
+            x,
+            y,
+            d,
+            z,
+            i = -1,
+            px = false,
+            nx = false,
+            low,
+            chartDestroyed = typeof chart.index === "undefined",
+            nextInside = false,
+            prevInside = false,
+            pcolor = false,
+            drawAsBar = asBar[series.type],
+            isXInside = false,
+            isYInside = true,
+            firstPoint = true,
+            zones = options.zones || false,
+            zoneDefColor = false,
+            threshold = options.threshold,
+            gapSize = false;
+          if (options.boostData && options.boostData.length > 0) {
+            return;
+          }
+          if (options.gapSize) {
+            gapSize =
+              options.gapUnit !== "value"
+                ? options.gapSize * series.closestPointRange
+                : options.gapSize;
+          }
+          if (zones) {
+            zones.some(function (zone) {
+              if (typeof zone.value === "undefined") {
+                zoneDefColor = new Color(zone.color);
+                return true;
+              }
+              return false;
+            });
+            if (!zoneDefColor) {
+              zoneDefColor =
+                (series.pointAttribs && series.pointAttribs().fill) ||
+                series.color;
+              zoneDefColor = new Color(zoneDefColor);
+            }
+          }
+          if (chart.inverted) {
+            // plotHeight = series.chart.plotWidth;
+            plotWidth = series.chart.plotHeight;
+          }
+          series.closestPointRangePx = Number.MAX_VALUE;
+          /**
+           * Push color to color buffer - need to do this per vertex.
+           * @private
+           */
+          function pushColor(color) {
+            if (color) {
+              inst.colorData.push(color[0]);
+              inst.colorData.push(color[1]);
+              inst.colorData.push(color[2]);
+              inst.colorData.push(color[3]);
+            }
+          }
+          /**
+           * Push a vertice to the data buffer.
+           * @private
+           */
+          function vertice(x, y, checkTreshold, pointSize, color) {
+            pushColor(color);
+            if (settings.usePreallocated) {
+              vbuffer.push(x, y, checkTreshold ? 1 : 0, pointSize || 1);
+            } else {
+              data.push(x);
+              data.push(y);
+              data.push(checkTreshold ? 1 : 0);
+              data.push(pointSize || 1);
+            }
+          }
+          /**
+           * @private
+           */
+          function closeSegment() {
+            if (inst.segments.length) {
+              inst.segments[inst.segments.length - 1].to = data.length;
+            }
+          }
+          /**
+           * Create a new segment for the current set.
+           * @private
+           */
+          function beginSegment() {
+            // Insert a segment on the series.
+            // A segment is just a start indice.
+            // When adding a segment, if one exists from before, it should
+            // set the previous segment's end
+            if (
+              inst.segments.length &&
+              inst.segments[inst.segments.length - 1].from === data.length
+            ) {
+              return;
+            }
+            closeSegment();
+            inst.segments.push({
+              from: data.length,
+            });
+          }
+          /**
+           * Push a rectangle to the data buffer.
+           * @private
+           */
+          function pushRect(x, y, w, h, color) {
+            pushColor(color);
+            vertice(x + w, y);
+            pushColor(color);
+            vertice(x, y);
+            pushColor(color);
+            vertice(x, y + h);
+            pushColor(color);
+            vertice(x, y + h);
+            pushColor(color);
+            vertice(x + w, y + h);
+            pushColor(color);
+            vertice(x + w, y);
+          }
+          // Create the first segment
+          beginSegment();
+          // Special case for point shapes
+          if (points && points.length > 0) {
+            // If we're doing points, we assume that the points are already
+            // translated, so we skip the shader translation.
+            inst.skipTranslation = true;
+            // Force triangle draw mode
+            inst.drawMode = "triangles";
+            // We don't have a z component in the shader, so we need to sort.
+            if (points[0].node && points[0].node.levelDynamic) {
+              points.sort(function (a, b) {
+                if (a.node) {
+                  if (a.node.levelDynamic > b.node.levelDynamic) {
+                    return 1;
+                  }
+                  if (a.node.levelDynamic < b.node.levelDynamic) {
+                    return -1;
+                  }
                 }
-                if (isInited) {
-                    render(chart);
+                return 0;
+              });
+            }
+            points.forEach(function (point) {
+              var plotY = point.plotY,
+                shapeArgs,
+                swidth,
+                pointAttr;
+              if (
+                typeof plotY !== "undefined" &&
+                !isNaN(plotY) &&
+                point.y !== null
+              ) {
+                shapeArgs = point.shapeArgs;
+                pointAttr = chart.styledMode
+                  ? point.series.colorAttribs(point)
+                  : (pointAttr = point.series.pointAttribs(point));
+                swidth = pointAttr["stroke-width"] || 0;
+                // Handle point colors
+                pcolor = color(pointAttr.fill).rgba;
+                pcolor[0] /= 255.0;
+                pcolor[1] /= 255.0;
+                pcolor[2] /= 255.0;
+                // So there are two ways of doing this. Either we can
+                // create a rectangle of two triangles, or we can do a
+                // point and use point size. Latter is faster, but
+                // only supports squares. So we're doing triangles.
+                // We could also use one color per. vertice to get
+                // better color interpolation.
+                // If there's stroking, we do an additional rect
+                if (series.type === "treemap") {
+                  swidth = swidth || 1;
+                  scolor = color(pointAttr.stroke).rgba;
+                  scolor[0] /= 255.0;
+                  scolor[1] /= 255.0;
+                  scolor[2] /= 255.0;
+                  pushRect(
+                    shapeArgs.x,
+                    shapeArgs.y,
+                    shapeArgs.width,
+                    shapeArgs.height,
+                    scolor
+                  );
+                  swidth /= 2;
                 }
-                else {
-                    setTimeout(function () {
-                        renderWhenReady(chart);
-                    }, 1);
+                // } else {
+                //     swidth = 0;
+                // }
+                // Fixes issues with inverted heatmaps (see #6981)
+                // The root cause is that the coordinate system is flipped.
+                // In other words, instead of [0,0] being top-left, it's
+                // bottom-right. This causes a vertical and horizontal flip
+                // in the resulting image, making it rotated 180 degrees.
+                if (series.type === "heatmap" && chart.inverted) {
+                  shapeArgs.x = xAxis.len - shapeArgs.x;
+                  shapeArgs.y = yAxis.len - shapeArgs.y;
+                  shapeArgs.width = -shapeArgs.width;
+                  shapeArgs.height = -shapeArgs.height;
                 }
+                pushRect(
+                  shapeArgs.x + swidth,
+                  shapeArgs.y + swidth,
+                  shapeArgs.width - swidth * 2,
+                  shapeArgs.height - swidth * 2,
+                  pcolor
+                );
+              }
+            });
+            closeSegment();
+            return;
+          }
+          // Extract color axis
+          // (chart.axes || []).forEach(function (a) {
+          //     if (H.ColorAxis && a instanceof H.ColorAxis) {
+          //         caxis = a;
+          //     }
+          // });
+          while (i < sdata.length - 1) {
+            d = sdata[++i];
+            // px = x = y = z = nx = low = false;
+            // chartDestroyed = typeof chart.index === 'undefined';
+            // nextInside = prevInside = pcolor = isXInside = isYInside = false;
+            // drawAsBar = asBar[series.type];
+            if (chartDestroyed) {
+              break;
             }
-            /**
-             * Set the viewport size in pixels
-             * Creates an orthographic perspective matrix and applies it.
-             * @private
-             * @param w {Integer} - the width of the viewport
-             * @param h {Integer} - the height of the viewport
-             */
-            function setSize(w, h) {
-                // Skip if there's no change, or if we have no valid shader
-                if ((width === w && height === h) || !shader) {
-                    return;
-                }
-                width = w;
-                height = h;
-                shader.bind();
-                shader.setPMatrix(orthoMatrix(width, height));
+            // Uncomment this to enable color by point.
+            // This currently left disabled as the charts look really ugly
+            // when enabled and there's a lot of points.
+            // Leaving in for the future (tm).
+            // if (colorByPoint) {
+            //     colorIndex = ++colorIndex %
+            //         series.chart.options.colors.length;
+            //     pcolor = toRGBAFast(series.chart.options.colors[colorIndex]);
+            //     pcolor[0] /= 255.0;
+            //     pcolor[1] /= 255.0;
+            //     pcolor[2] /= 255.0;
+            // }
+            // Handle the point.color option (#5999)
+            var pointOptions = rawData && rawData[i];
+            if (!useRaw && isObject(pointOptions, true)) {
+              if (pointOptions.color) {
+                pcolor = color(pointOptions.color).rgba;
+                pcolor[0] /= 255.0;
+                pcolor[1] /= 255.0;
+                pcolor[2] /= 255.0;
+              }
             }
-            /**
-             * Init OpenGL
-             * @private
-             * @param canvas {HTMLCanvas} - the canvas to render to
-             */
-            function init(canvas, noFlush) {
-                var i = 0,
-                    contexts = [
-                        'webgl',
-                        'experimental-webgl',
-                        'moz-webgl',
-                        'webkit-3d'
-                    ];
-                isInited = false;
-                if (!canvas) {
-                    return false;
-                }
-                if (settings.debug.timeSetup) {
-                    console.time('gl setup'); // eslint-disable-line no-console
+            if (useRaw) {
+              x = d[0];
+              y = d[1];
+              if (sdata[i + 1]) {
+                nx = sdata[i + 1][0];
+              }
+              if (sdata[i - 1]) {
+                px = sdata[i - 1][0];
+              }
+              if (d.length >= 3) {
+                z = d[2];
+                if (d[2] > inst.zMax) {
+                  inst.zMax = d[2];
                 }
-                for (; i < contexts.length; i++) {
-                    gl = canvas.getContext(contexts[i], {
-                    //    premultipliedAlpha: false
-                    });
-                    if (gl) {
-                        break;
-                    }
+                if (d[2] < inst.zMin) {
+                  inst.zMin = d[2];
                 }
-                if (gl) {
-                    if (!noFlush) {
-                        flush();
-                    }
+              }
+            } else {
+              x = d;
+              y = yData[i];
+              if (sdata[i + 1]) {
+                nx = sdata[i + 1];
+              }
+              if (sdata[i - 1]) {
+                px = sdata[i - 1];
+              }
+              if (zData && zData.length) {
+                z = zData[i];
+                if (zData[i] > inst.zMax) {
+                  inst.zMax = zData[i];
                 }
-                else {
-                    return false;
+                if (zData[i] < inst.zMin) {
+                  inst.zMin = zData[i];
                 }
-                gl.enable(gl.BLEND);
-                // gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
-                gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
-                gl.disable(gl.DEPTH_TEST);
-                // gl.depthMask(gl.FALSE);
-                gl.depthFunc(gl.LESS);
-                shader = GLShader(gl); // eslint-disable-line new-cap
-                if (!shader) {
-                    // We need to abort, there's no shader context
-                    return false;
+              }
+            }
+            if (!connectNulls && (x === null || y === null)) {
+              beginSegment();
+              continue;
+            }
+            if (nx && nx >= xMin && nx <= xMax) {
+              nextInside = true;
+            }
+            if (px && px >= xMin && px <= xMax) {
+              prevInside = true;
+            }
+            if (isRange) {
+              if (useRaw) {
+                y = d.slice(1, 3);
+              }
+              low = y[0];
+              y = y[1];
+            } else if (isStacked) {
+              x = d.x;
+              y = d.stackY;
+              low = y - d.y;
+            }
+            if (
+              yMin !== null &&
+              typeof yMin !== "undefined" &&
+              yMax !== null &&
+              typeof yMax !== "undefined"
+            ) {
+              isYInside = y >= yMin && y <= yMax;
+            }
+            if (x > xMax && closestRight.x < xMax) {
+              closestRight.x = x;
+              closestRight.y = y;
+            }
+            if (x < xMin && closestLeft.x > xMin) {
+              closestLeft.x = x;
+              closestLeft.y = y;
+            }
+            if (y === null && connectNulls) {
+              continue;
+            }
+            // Cull points outside the extremes
+            if (y === null || (!isYInside && !nextInside && !prevInside)) {
+              beginSegment();
+              continue;
+            }
+            // The first point before and first after extremes should be
+            // rendered (#9962)
+            if ((nx >= xMin || x >= xMin) && (px <= xMax || x <= xMax)) {
+              isXInside = true;
+            }
+            if (!isXInside && !nextInside && !prevInside) {
+              continue;
+            }
+            if (gapSize && x - px > gapSize) {
+              beginSegment();
+            }
+            // Note: Boost requires that zones are sorted!
+            if (zones) {
+              pcolor = zoneDefColor.rgba;
+              zones.some(function (
+                // eslint-disable-line no-loop-func
+                zone,
+                i
+              ) {
+                var last = zones[i - 1];
+                if (typeof zone.value !== "undefined" && y <= zone.value) {
+                  if (!last || y >= last.value) {
+                    pcolor = color(zone.color).rgba;
+                  }
+                  return true;
                 }
-                vbuffer = GLVertexBuffer(gl, shader); // eslint-disable-line new-cap
-                /**
-                 * @private
-                 */
-                function createTexture(name, fn) {
-                    var props = {
-                            isReady: false,
-                            texture: doc.createElement('canvas'),
-                            handle: gl.createTexture()
-                        },
-                        ctx = props.texture.getContext('2d');
-                    textureHandles[name] = props;
-                    props.texture.width = 512;
-                    props.texture.height = 512;
-                    ctx.mozImageSmoothingEnabled = false;
-                    ctx.webkitImageSmoothingEnabled = false;
-                    ctx.msImageSmoothingEnabled = false;
-                    ctx.imageSmoothingEnabled = false;
-                    ctx.strokeStyle = 'rgba(255, 255, 255, 0)';
-                    ctx.fillStyle = '#FFF';
-                    fn(ctx);
-                    try {
-                        gl.activeTexture(gl.TEXTURE0);
-                        gl.bindTexture(gl.TEXTURE_2D, props.handle);
-                        // gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
-                        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, props.texture);
-                        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
-                        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
-                        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
-                        gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
-                        // gl.generateMipmap(gl.TEXTURE_2D);
-                        gl.bindTexture(gl.TEXTURE_2D, null);
-                        props.isReady = true;
-                    }
-                    catch (e) {
-                        // silent error
-                    }
+                return false;
+              });
+              pcolor[0] /= 255.0;
+              pcolor[1] /= 255.0;
+              pcolor[2] /= 255.0;
+            }
+            // Skip translations - temporary floating point fix
+            if (!settings.useGPUTranslations) {
+              inst.skipTranslation = true;
+              x = xAxis.toPixels(x, true);
+              y = yAxis.toPixels(y, true);
+              // Make sure we're not drawing outside of the chart area.
+              // See #6594. Update: this is no longer required as far as I
+              // can tell. Leaving in for git blame in case there are edge
+              // cases I've not found. Having this in breaks #10246.
+              // if (y > plotHeight) {
+              // y = plotHeight;
+              // }
+              if (x > plotWidth) {
+                // If this is  rendered as a point, just skip drawing it
+                // entirely, as we're not dependandt on lineTo'ing to it.
+                // See #8197
+                if (inst.drawMode === "points") {
+                  continue;
                 }
-                // Circle shape
-                createTexture('circle', function (ctx) {
-                    ctx.beginPath();
-                    ctx.arc(256, 256, 256, 0, 2 * Math.PI);
-                    ctx.stroke();
-                    ctx.fill();
-                });
-                // Square shape
-                createTexture('square', function (ctx) {
-                    ctx.fillRect(0, 0, 512, 512);
-                });
-                // Diamond shape
-                createTexture('diamond', function (ctx) {
-                    ctx.beginPath();
-                    ctx.moveTo(256, 0);
-                    ctx.lineTo(512, 256);
-                    ctx.lineTo(256, 512);
-                    ctx.lineTo(0, 256);
-                    ctx.lineTo(256, 0);
-                    ctx.fill();
-                });
-                // Triangle shape
-                createTexture('triangle', function (ctx) {
-                    ctx.beginPath();
-                    ctx.moveTo(0, 512);
-                    ctx.lineTo(256, 0);
-                    ctx.lineTo(512, 512);
-                    ctx.lineTo(0, 512);
-                    ctx.fill();
-                });
-                // Triangle shape (rotated)
-                createTexture('triangle-down', function (ctx) {
-                    ctx.beginPath();
-                    ctx.moveTo(0, 0);
-                    ctx.lineTo(256, 512);
-                    ctx.lineTo(512, 0);
-                    ctx.lineTo(0, 0);
-                    ctx.fill();
-                });
-                isInited = true;
-                if (settings.debug.timeSetup) {
-                    console.timeEnd('gl setup'); // eslint-disable-line no-console
+                // Having this here will clamp markers and make the angle
+                // of the last line wrong. See 9166.
+                // x = plotWidth;
+              }
+            }
+            if (drawAsBar) {
+              // maxVal = y;
+              minVal = low;
+              if (low === false || typeof low === "undefined") {
+                if (y < 0) {
+                  minVal = y;
+                } else {
+                  minVal = 0;
                 }
-                return true;
+              }
+              if (!isRange && !isStacked) {
+                minVal = Math.max(
+                  threshold === null ? yMin : threshold, // #5268
+                  yMin
+                ); // #8731
+              }
+              if (!settings.useGPUTranslations) {
+                minVal = yAxis.toPixels(minVal, true);
+              }
+              // Need to add an extra point here
+              vertice(x, minVal, 0, 0, pcolor);
             }
-            /**
-             * Check if we have a valid OGL context
-             * @private
-             * @returns {Boolean} - true if the context is valid
-             */
-            function valid() {
-                return gl !== false;
+            // No markers on out of bounds things.
+            // Out of bound things are shown if and only if the next
+            // or previous point is inside the rect.
+            if (inst.hasMarkers && isXInside) {
+              // x = Highcharts.correctFloat(
+              //     Math.min(Math.max(-1e5, xAxis.translate(
+              //         x,
+              //         0,
+              //         0,
+              //         0,
+              //         1,
+              //         0.5,
+              //         false
+              //     )), 1e5)
+              // );
+              if (lastX !== false) {
+                series.closestPointRangePx = Math.min(
+                  series.closestPointRangePx,
+                  Math.abs(x - lastX)
+                );
+              }
             }
-            /**
-             * Check if the renderer has been initialized
-             * @private
-             * @returns {Boolean} - true if it has, false if not
-             */
-            function inited() {
-                return isInited;
+            // If the last _drawn_ point is closer to this point than the
+            // threshold, skip it. Shaves off 20-100ms in processing.
+            if (
+              !settings.useGPUTranslations &&
+              !settings.usePreallocated &&
+              lastX &&
+              Math.abs(x - lastX) < cullXThreshold &&
+              lastY &&
+              Math.abs(y - lastY) < cullYThreshold
+            ) {
+              if (settings.debug.showSkipSummary) {
+                ++skipped;
+              }
+              continue;
             }
-            /**
-             * @private
-             */
-            function destroy() {
-                flush();
-                vbuffer.destroy();
-                shader.destroy();
-                if (gl) {
-                    objectEach(textureHandles, function (texture) {
-                        if (texture.handle) {
-                            gl.deleteTexture(texture.handle);
-                        }
-                    });
-                    gl.canvas.width = 1;
-                    gl.canvas.height = 1;
-                }
+            // Do step line if enabled.
+            // Draws an additional point at the old Y at the new X.
+            // See #6976.
+            if (options.step && !firstPoint) {
+              vertice(x, lastY, 0, 2, pcolor);
             }
-            // /////////////////////////////////////////////////////////////////////////
-            exports = {
-                allocateBufferForSingleSeries: allocateBufferForSingleSeries,
-                pushSeries: pushSeries,
-                setSize: setSize,
-                inited: inited,
-                setThreshold: setThreshold,
-                init: init,
-                render: renderWhenReady,
-                settings: settings,
-                valid: valid,
-                clear: clear,
-                flush: flush,
-                setXAxis: setXAxis,
-                setYAxis: setYAxis,
-                data: data,
-                gl: getGL,
-                allocateBuffer: allocateBuffer,
-                destroy: destroy,
-                setOptions: setOptions
-            };
-            return exports;
+            vertice(x, y, 0, series.type === "bubble" ? z || 1 : 2, pcolor);
+            // Uncomment this to support color axis.
+            // if (caxis) {
+            //     pcolor = color(caxis.toColor(y)).rgba;
+            //     inst.colorData.push(color[0] / 255.0);
+            //     inst.colorData.push(color[1] / 255.0);
+            //     inst.colorData.push(color[2] / 255.0);
+            //     inst.colorData.push(color[3]);
+            // }
+            lastX = x;
+            lastY = y;
+            hadPoints = true;
+            firstPoint = false;
+          }
+          if (settings.debug.showSkipSummary) {
+            //console.log("skipped points:", skipped); // eslint-disable-line no-console
+          }
+          /**
+           * @private
+           */
+          function pushSupplementPoint(point, atStart) {
+            if (!settings.useGPUTranslations) {
+              inst.skipTranslation = true;
+              point.x = xAxis.toPixels(point.x, true);
+              point.y = yAxis.toPixels(point.y, true);
+            }
+            // We should only do this for lines, and we should ignore markers
+            // since there's no point here that would have a marker.
+            if (atStart) {
+              data = [point.x, point.y, 0, 2].concat(data);
+              return;
+            }
+            vertice(point.x, point.y, 0, 2);
+          }
+          if (
+            !hadPoints &&
+            connectNulls !== false &&
+            series.drawMode === "line_strip"
+          ) {
+            if (closestLeft.x < Number.MAX_VALUE) {
+              // We actually need to push this *before* the complete buffer.
+              pushSupplementPoint(closestLeft, true);
+            }
+            if (closestRight.x > -Number.MAX_VALUE) {
+              pushSupplementPoint(closestRight);
+            }
+          }
+          closeSegment();
         }
-
-        return GLRenderer;
-    });
-    _registerModule(_modules, 'Extensions/Boost/BoostAttach.js', [_modules['Core/Chart/Chart.js'], _modules['Extensions/Boost/WGLRenderer.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (Chart, GLRenderer, H, U) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var doc = H.doc;
-        var error = U.error;
-        var mainCanvas = doc.createElement('canvas');
         /**
-         * Create a canvas + context and attach it to the target
-         *
+         * Push a series to the renderer
+         * If we render the series immediatly, we don't have to loop later
          * @private
-         * @function createAndAttachRenderer
-         *
-         * @param {Highcharts.Chart} chart
-         * the chart
-         *
-         * @param {Highcharts.Series} series
-         * the series
-         *
-         * @return {Highcharts.BoostGLRenderer}
-         * the canvas renderer
+         * @param s {Highchart.Series} - the series to push
          */
-        function createAndAttachRenderer(chart, series) {
-            var width = chart.chartWidth, height = chart.chartHeight, target = chart, targetGroup = chart.seriesGroup || series.group, alpha = 1, foSupported = doc.implementation.hasFeature('www.http://w3.org/TR/SVG11/feature#Extensibility', '1.1');
-            if (chart.isChartSeriesBoosting()) {
-                target = chart;
-            }
-            else {
-                target = series;
-            }
-            // Support for foreignObject is flimsy as best.
-            // IE does not support it, and Chrome has a bug which messes up
-            // the canvas draw order.
-            // As such, we force the Image fallback for now, but leaving the
-            // actual Canvas path in-place in case this changes in the future.
-            foSupported = false;
-            if (!target.renderTarget) {
-                target.canvas = mainCanvas;
-                // Fall back to image tag if foreignObject isn't supported,
-                // or if we're exporting.
-                if (chart.renderer.forExport || !foSupported) {
-                    target.renderTarget = chart.renderer.image('', 0, 0, width, height)
-                        .addClass('highcharts-boost-canvas')
-                        .add(targetGroup);
-                    target.boostClear = function () {
-                        target.renderTarget.attr({ href: '' });
-                    };
-                    target.boostCopy = function () {
-                        target.boostResizeTarget();
-                        target.renderTarget.attr({
-                            href: target.canvas.toDataURL('image/png')
-                        });
-                    };
-                }
-                else {
-                    target.renderTargetFo = chart.renderer
-                        .createElement('foreignObject')
-                        .add(targetGroup);
-                    target.renderTarget = doc.createElement('canvas');
-                    target.renderTargetCtx =
-                        target.renderTarget.getContext('2d');
-                    target.renderTargetFo.element.appendChild(target.renderTarget);
-                    target.boostClear = function () {
-                        target.renderTarget.width =
-                            target.canvas.width;
-                        target.renderTarget.height =
-                            target.canvas.height;
-                    };
-                    target.boostCopy = function () {
-                        target.renderTarget.width =
-                            target.canvas.width;
-                        target.renderTarget.height =
-                            target.canvas.height;
-                        target.renderTargetCtx
-                            .drawImage(target.canvas, 0, 0);
-                    };
-                }
-                target.boostResizeTarget = function () {
-                    width = chart.chartWidth;
-                    height = chart.chartHeight;
-                    (target.renderTargetFo || target.renderTarget)
-                        .attr({
-                        x: 0,
-                        y: 0,
-                        width: width,
-                        height: height
-                    })
-                        .css({
-                        pointerEvents: 'none',
-                        mixedBlendMode: 'normal',
-                        opacity: alpha
-                    });
-                    if (target instanceof Chart) {
-                        target.markerGroup.translate(chart.plotLeft, chart.plotTop);
-                    }
-                };
-                target.boostClipRect = chart.renderer.clipRect();
-                (target.renderTargetFo || target.renderTarget)
-                    .clip(target.boostClipRect);
-                if (target instanceof Chart) {
-                    target.markerGroup = target.renderer.g().add(targetGroup);
-                    target.markerGroup.translate(series.xAxis.pos, series.yAxis.pos);
-                }
-            }
-            target.canvas.width = width;
-            target.canvas.height = height;
-            target.boostClipRect.attr(chart.getBoostClipRect(target));
-            target.boostResizeTarget();
-            target.boostClear();
-            if (!target.ogl) {
-                target.ogl = GLRenderer(function () {
-                    if (target.ogl.settings.debug.timeBufferCopy) {
-                        console.time('buffer copy'); // eslint-disable-line no-console
-                    }
-                    target.boostCopy();
-                    if (target.ogl.settings.debug.timeBufferCopy) {
-                        console.timeEnd('buffer copy'); // eslint-disable-line no-console
-                    }
-                });
-                if (!target.ogl.init(target.canvas)) {
-                    // The OGL renderer couldn't be inited.
-                    // This likely means a shader error as we wouldn't get to this point
-                    // if there was no WebGL support.
-                    error('[highcharts boost] - unable to init WebGL renderer');
-                }
-                // target.ogl.clear();
-                target.ogl.setOptions(chart.options.boost || {});
-                if (target instanceof Chart) {
-                    target.ogl.allocateBuffer(chart);
-                }
+        function pushSeries(s) {
+          if (series.length > 0) {
+            // series[series.length - 1].to = data.length;
+            if (series[series.length - 1].hasMarkers) {
+              series[series.length - 1].markerTo = markerData.length;
             }
-            target.ogl.setSize(width, height);
-            return target.ogl;
+          }
+          if (settings.debug.timeSeriesProcessing) {
+            console.time("building " + s.type + " series"); // eslint-disable-line no-console
+          }
+          series.push({
+            segments: [],
+            // from: data.length,
+            markerFrom: markerData.length,
+            // Push RGBA values to this array to use per. point coloring.
+            // It should be 0-padded, so each component should be pushed in
+            // succession.
+            colorData: [],
+            series: s,
+            zMin: Number.MAX_VALUE,
+            zMax: -Number.MAX_VALUE,
+            hasMarkers: s.options.marker
+              ? s.options.marker.enabled !== false
+              : false,
+            showMarkers: true,
+            drawMode:
+              {
+                area: "lines",
+                arearange: "lines",
+                areaspline: "line_strip",
+                column: "lines",
+                columnrange: "lines",
+                bar: "lines",
+                line: "line_strip",
+                scatter: "points",
+                heatmap: "triangles",
+                treemap: "triangles",
+                bubble: "points",
+              }[s.type] || "line_strip",
+          });
+          // Add the series data to our buffer(s)
+          pushSeriesData(s, series[series.length - 1]);
+          if (settings.debug.timeSeriesProcessing) {
+            console.timeEnd("building " + s.type + " series"); // eslint-disable-line no-console
+          }
         }
-
-        return createAndAttachRenderer;
-    });
-    _registerModule(_modules, 'Extensions/Boost/BoostUtils.js', [_modules['Core/Globals.js'], _modules['Extensions/Boost/BoostableMap.js'], _modules['Extensions/Boost/BoostAttach.js'], _modules['Core/Utilities.js']], function (H, boostableMap, createAndAttachRenderer, U) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  This files contains generic utility functions used by the boost module.
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var win = H.win,
-            doc = H.doc;
-        var pick = U.pick;
-        // This should be a const.
-        var CHUNK_SIZE = 3000;
         /**
-         * Tolerant max() function.
-         *
+         * Flush the renderer.
+         * This removes pushed series and vertices.
+         * Should be called after clearing and before rendering
          * @private
-         * @function patientMax
-         *
-         * @param {...Array<Array<unknown>>} args
-         * Max arguments
-         *
-         * @return {number}
-         * Max value
          */
-        function patientMax() {
-            var args = [];
-            for (var _i = 0; _i < arguments.length; _i++) {
-                args[_i] = arguments[_i];
-            }
-            var r = -Number.MAX_VALUE;
-            args.forEach(function (t) {
-                if (typeof t !== 'undefined' &&
-                    t !== null &&
-                    typeof t.length !== 'undefined') {
-                    // r = r < t.length ? t.length : r;
-                    if (t.length > 0) {
-                        r = t.length;
-                        return true;
-                    }
-                }
-            });
-            return r;
+        function flush() {
+          series = [];
+          exports.data = data = [];
+          markerData = [];
+          if (vbuffer) {
+            vbuffer.destroy();
+          }
         }
         /**
-         * Return true if ths boost.enabled option is true
-         *
+         * Pass x-axis to shader
          * @private
-         * @function boostEnabled
-         *
-         * @param {Highcharts.Chart} chart
-         * The chart
-         *
-         * @return {boolean}
-         * True, if boost is enabled.
+         * @param axis {Highcharts.Axis} - the x-axis
          */
-        function boostEnabled(chart) {
-            return pick((chart &&
-                chart.options &&
-                chart.options.boost &&
-                chart.options.boost.enabled), true);
+        function setXAxis(axis) {
+          if (!shader) {
+            return;
+          }
+          shader.setUniform("xAxisTrans", axis.transA);
+          shader.setUniform("xAxisMin", axis.min);
+          shader.setUniform("xAxisMinPad", axis.minPixelPadding);
+          shader.setUniform("xAxisPointRange", axis.pointRange);
+          shader.setUniform("xAxisLen", axis.len);
+          shader.setUniform("xAxisPos", axis.pos);
+          shader.setUniform("xAxisCVSCoord", !axis.horiz);
+          shader.setUniform("xAxisIsLog", !!axis.logarithmic);
+          shader.setUniform("xAxisReversed", !!axis.reversed);
         }
         /**
-         * Returns true if we should force boosting the chart
+         * Pass y-axis to shader
          * @private
-         * @function shouldForceChartSeriesBoosting
-         *
-         * @param {Highcharts.Chart} chart
-         * The chart to check for forcing on
-         *
-         * @return {boolean}
-         * True, if boosting should be forced.
+         * @param axis {Highcharts.Axis} - the y-axis
          */
-        function shouldForceChartSeriesBoosting(chart) {
-            // If there are more than five series currently boosting,
-            // we should boost the whole chart to avoid running out of webgl contexts.
-            var sboostCount = 0,
-                canBoostCount = 0,
-                allowBoostForce = pick(chart.options.boost && chart.options.boost.allowForce,
-                true),
-                series;
-            if (typeof chart.boostForceChartBoost !== 'undefined') {
-                return chart.boostForceChartBoost;
-            }
-            if (chart.series.length > 1) {
-                for (var i = 0; i < chart.series.length; i++) {
-                    series = chart.series[i];
-                    // Don't count series with boostThreshold set to 0
-                    // See #8950
-                    // Also don't count if the series is hidden.
-                    // See #9046
-                    if (series.options.boostThreshold === 0 ||
-                        series.visible === false) {
-                        continue;
-                    }
-                    // Don't count heatmap series as they are handled differently.
-                    // In the future we should make the heatmap/treemap path compatible
-                    // with forcing. See #9636.
-                    if (series.type === 'heatmap') {
-                        continue;
-                    }
-                    if (boostableMap[series.type]) {
-                        ++canBoostCount;
-                    }
-                    if (patientMax(series.processedXData, series.options.data, 
-                    // series.xData,
-                    series.points) >= (series.options.boostThreshold || Number.MAX_VALUE)) {
-                        ++sboostCount;
-                    }
-                }
-            }
-            chart.boostForceChartBoost = allowBoostForce && ((canBoostCount === chart.series.length &&
-                sboostCount > 0) ||
-                sboostCount > 5);
-            return chart.boostForceChartBoost;
+        function setYAxis(axis) {
+          if (!shader) {
+            return;
+          }
+          shader.setUniform("yAxisTrans", axis.transA);
+          shader.setUniform("yAxisMin", axis.min);
+          shader.setUniform("yAxisMinPad", axis.minPixelPadding);
+          shader.setUniform("yAxisPointRange", axis.pointRange);
+          shader.setUniform("yAxisLen", axis.len);
+          shader.setUniform("yAxisPos", axis.pos);
+          shader.setUniform("yAxisCVSCoord", !axis.horiz);
+          shader.setUniform("yAxisIsLog", !!axis.logarithmic);
+          shader.setUniform("yAxisReversed", !!axis.reversed);
         }
-        /* eslint-disable valid-jsdoc */
         /**
-         * Performs the actual render if the renderer is
-         * attached to the series.
+         * Set the translation threshold
          * @private
-         * @param renderer {OGLRenderer} - the renderer
-         * @param series {Highcharts.Series} - the series
+         * @param has {boolean} - has threshold flag
+         * @param translation {Float} - the threshold
          */
-        function renderIfNotSeriesBoosting(renderer, series, chart) {
-            if (renderer &&
-                series.renderTarget &&
-                series.canvas &&
-                !(chart || series.chart).isChartSeriesBoosting()) {
-                renderer.render(chart || series.chart);
-            }
+        function setThreshold(has, translation) {
+          shader.setUniform("hasThreshold", has);
+          shader.setUniform("translatedThreshold", translation);
         }
         /**
+         * Render the data
+         * This renders all pushed series.
          * @private
          */
-        function allocateIfNotSeriesBoosting(renderer, series) {
-            if (renderer &&
-                series.renderTarget &&
-                series.canvas &&
-                !series.chart.isChartSeriesBoosting()) {
-                renderer.allocateBufferForSingleSeries(series);
+        function render(chart) {
+          if (chart) {
+            if (!chart.chartHeight || !chart.chartWidth) {
+              // chart.setChartSize();
+            }
+            width = chart.chartWidth || 800;
+            height = chart.chartHeight || 400;
+          } else {
+            return false;
+          }
+          if (!gl || !width || !height || !shader) {
+            return false;
+          }
+          if (settings.debug.timeRendering) {
+            console.time("gl rendering"); // eslint-disable-line no-console
+          }
+          gl.canvas.width = width;
+          gl.canvas.height = height;
+          shader.bind();
+          gl.viewport(0, 0, width, height);
+          shader.setPMatrix(orthoMatrix(width, height));
+          if (settings.lineWidth > 1 && !H.isMS) {
+            gl.lineWidth(settings.lineWidth);
+          }
+          vbuffer.build(exports.data, "aVertexPosition", 4);
+          vbuffer.bind();
+          shader.setInverted(chart.inverted);
+          // Render the series
+          series.forEach(function (s, si) {
+            var options = s.series.options,
+              shapeOptions = options.marker,
+              sindex,
+              lineWidth =
+                typeof options.lineWidth !== "undefined"
+                  ? options.lineWidth
+                  : 1,
+              threshold = options.threshold,
+              hasThreshold = isNumber(threshold),
+              yBottom = s.series.yAxis.getThreshold(threshold),
+              translatedThreshold = yBottom,
+              cbuffer,
+              showMarkers = pick(
+                options.marker ? options.marker.enabled : null,
+                s.series.xAxis.isRadial ? true : null,
+                s.series.closestPointRangePx >
+                  2 * ((options.marker ? options.marker.radius : 10) || 10)
+              ),
+              fillColor,
+              shapeTexture =
+                textureHandles[
+                  (shapeOptions && shapeOptions.symbol) || s.series.symbol
+                ] || textureHandles.circle,
+              scolor = [];
+            if (
+              s.segments.length === 0 ||
+              (s.segmentslength && s.segments[0].from === s.segments[0].to)
+            ) {
+              return;
+            }
+            if (shapeTexture.isReady) {
+              gl.bindTexture(gl.TEXTURE_2D, shapeTexture.handle);
+              shader.setTexture(shapeTexture.handle);
+            }
+            if (chart.styledMode) {
+              fillColor =
+                s.series.markerGroup && s.series.markerGroup.getStyle("fill");
+            } else {
+              fillColor =
+                (s.series.pointAttribs && s.series.pointAttribs().fill) ||
+                s.series.color;
+              if (options.colorByPoint) {
+                fillColor = s.series.chart.options.colors[si];
+              }
+            }
+            if (s.series.fillOpacity && options.fillOpacity) {
+              fillColor = new Color(fillColor)
+                .setOpacity(pick(options.fillOpacity, 1.0))
+                .get();
+            }
+            scolor = color(fillColor).rgba;
+            if (!settings.useAlpha) {
+              scolor[3] = 1.0;
+            }
+            // This is very much temporary
+            if (s.drawMode === "lines" && settings.useAlpha && scolor[3] < 1) {
+              scolor[3] /= 10;
+            }
+            // Blending
+            if (options.boostBlending === "add") {
+              gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
+              gl.blendEquation(gl.FUNC_ADD);
+            } else if (
+              options.boostBlending === "mult" ||
+              options.boostBlending === "multiply"
+            ) {
+              gl.blendFunc(gl.DST_COLOR, gl.ZERO);
+            } else if (options.boostBlending === "darken") {
+              gl.blendFunc(gl.ONE, gl.ONE);
+              gl.blendEquation(gl.FUNC_MIN);
+            } else {
+              // gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+              // gl.blendEquation(gl.FUNC_ADD);
+              gl.blendFuncSeparate(
+                gl.SRC_ALPHA,
+                gl.ONE_MINUS_SRC_ALPHA,
+                gl.ONE,
+                gl.ONE_MINUS_SRC_ALPHA
+              );
             }
+            shader.reset();
+            // If there are entries in the colorData buffer, build and bind it.
+            if (s.colorData.length > 0) {
+              shader.setUniform("hasColor", 1.0);
+              cbuffer = GLVertexBuffer(gl, shader); // eslint-disable-line new-cap
+              cbuffer.build(s.colorData, "aColor", 4);
+              cbuffer.bind();
+            }
+            // Set series specific uniforms
+            shader.setColor(scolor);
+            setXAxis(s.series.xAxis);
+            setYAxis(s.series.yAxis);
+            setThreshold(hasThreshold, translatedThreshold);
+            if (s.drawMode === "points") {
+              if (options.marker && isNumber(options.marker.radius)) {
+                shader.setPointSize(options.marker.radius * 2.0);
+              } else {
+                shader.setPointSize(1);
+              }
+            }
+            // If set to true, the toPixels translations in the shader
+            // is skipped, i.e it's assumed that the value is a pixel coord.
+            shader.setSkipTranslation(s.skipTranslation);
+            if (s.series.type === "bubble") {
+              shader.setBubbleUniforms(s.series, s.zMin, s.zMax);
+            }
+            shader.setDrawAsCircle(asCircle[s.series.type] || false);
+            // Do the actual rendering
+            // If the line width is < 0, skip rendering of the lines. See #7833.
+            if (lineWidth > 0 || s.drawMode !== "line_strip") {
+              for (sindex = 0; sindex < s.segments.length; sindex++) {
+                // if (s.segments[sindex].from < s.segments[sindex].to) {
+                vbuffer.render(
+                  s.segments[sindex].from,
+                  s.segments[sindex].to,
+                  s.drawMode
+                );
+                // }
+              }
+            }
+            if (s.hasMarkers && showMarkers) {
+              if (options.marker && isNumber(options.marker.radius)) {
+                shader.setPointSize(options.marker.radius * 2.0);
+              } else {
+                shader.setPointSize(10);
+              }
+              shader.setDrawAsCircle(true);
+              for (sindex = 0; sindex < s.segments.length; sindex++) {
+                // if (s.segments[sindex].from < s.segments[sindex].to) {
+                vbuffer.render(
+                  s.segments[sindex].from,
+                  s.segments[sindex].to,
+                  "POINTS"
+                );
+                // }
+              }
+            }
+          });
+          if (settings.debug.timeRendering) {
+            console.timeEnd("gl rendering"); // eslint-disable-line no-console
+          }
+          if (postRenderCallback) {
+            postRenderCallback();
+          }
+          flush();
         }
         /**
-         * An "async" foreach loop. Uses a setTimeout to keep the loop from blocking the
-         * UI thread.
-         *
+         * Render the data when ready
          * @private
-         *
-         * @param arr {Array} - the array to loop through
-         * @param fn {Function} - the callback to call for each item
-         * @param finalFunc {Function} - the callback to call when done
-         * @param chunkSize {Number} - the number of iterations per timeout
-         * @param i {Number} - the current index
-         * @param noTimeout {Boolean} - set to true to skip timeouts
          */
-        function eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout) {
-            i = i || 0;
-            chunkSize = chunkSize || CHUNK_SIZE;
-            var threshold = i + chunkSize,
-                proceed = true;
-            while (proceed && i < threshold && i < arr.length) {
-                proceed = fn(arr[i], i);
-                ++i;
-            }
-            if (proceed) {
-                if (i < arr.length) {
-                    if (noTimeout) {
-                        eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);
-                    }
-                    else if (win.requestAnimationFrame) {
-                        // If available, do requestAnimationFrame - shaves off a few ms
-                        win.requestAnimationFrame(function () {
-                            eachAsync(arr, fn, finalFunc, chunkSize, i);
-                        });
-                    }
-                    else {
-                        setTimeout(function () {
-                            eachAsync(arr, fn, finalFunc, chunkSize, i);
-                        });
-                    }
-                }
-                else if (finalFunc) {
-                    finalFunc();
-                }
-            }
+        function renderWhenReady(chart) {
+          clear();
+          if (chart.renderer.forExport) {
+            return render(chart);
+          }
+          if (isInited) {
+            render(chart);
+          } else {
+            setTimeout(function () {
+              renderWhenReady(chart);
+            }, 1);
+          }
         }
         /**
-         * Returns true if the current browser supports webgl
-         *
+         * Set the viewport size in pixels
+         * Creates an orthographic perspective matrix and applies it.
          * @private
-         * @function hasWebGLSupport
-         *
-         * @return {boolean}
+         * @param w {Integer} - the width of the viewport
+         * @param h {Integer} - the height of the viewport
          */
-        function hasWebGLSupport() {
-            var i = 0, canvas, contexts = ['webgl', 'experimental-webgl', 'moz-webgl', 'webkit-3d'], context = false;
-            if (typeof win.WebGLRenderingContext !== 'undefined') {
-                canvas = doc.createElement('canvas');
-                for (; i < contexts.length; i++) {
-                    try {
-                        context = canvas.getContext(contexts[i]);
-                        if (typeof context !== 'undefined' && context !== null) {
-                            return true;
-                        }
-                    }
-                    catch (e) {
-                        // silent error
-                    }
-                }
+        function setSize(w, h) {
+          // Skip if there's no change, or if we have no valid shader
+          if ((width === w && height === h) || !shader) {
+            return;
+          }
+          width = w;
+          height = h;
+          shader.bind();
+          shader.setPMatrix(orthoMatrix(width, height));
+        }
+        /**
+         * Init OpenGL
+         * @private
+         * @param canvas {HTMLCanvas} - the canvas to render to
+         */
+        function init(canvas, noFlush) {
+          var i = 0,
+            contexts = [
+              "webgl",
+              "experimental-webgl",
+              "moz-webgl",
+              "webkit-3d",
+            ];
+          isInited = false;
+          if (!canvas) {
+            return false;
+          }
+          if (settings.debug.timeSetup) {
+            console.time("gl setup"); // eslint-disable-line no-console
+          }
+          for (; i < contexts.length; i++) {
+            gl = canvas.getContext(contexts[i], {
+              //    premultipliedAlpha: false
+            });
+            if (gl) {
+              break;
+            }
+          }
+          if (gl) {
+            if (!noFlush) {
+              flush();
             }
+          } else {
             return false;
+          }
+          gl.enable(gl.BLEND);
+          // gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
+          gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+          gl.disable(gl.DEPTH_TEST);
+          // gl.depthMask(gl.FALSE);
+          gl.depthFunc(gl.LESS);
+          shader = GLShader(gl); // eslint-disable-line new-cap
+          if (!shader) {
+            // We need to abort, there's no shader context
+            return false;
+          }
+          vbuffer = GLVertexBuffer(gl, shader); // eslint-disable-line new-cap
+          /**
+           * @private
+           */
+          function createTexture(name, fn) {
+            var props = {
+                isReady: false,
+                texture: doc.createElement("canvas"),
+                handle: gl.createTexture(),
+              },
+              ctx = props.texture.getContext("2d");
+            textureHandles[name] = props;
+            props.texture.width = 512;
+            props.texture.height = 512;
+            ctx.mozImageSmoothingEnabled = false;
+            ctx.webkitImageSmoothingEnabled = false;
+            ctx.msImageSmoothingEnabled = false;
+            ctx.imageSmoothingEnabled = false;
+            ctx.strokeStyle = "rgba(255, 255, 255, 0)";
+            ctx.fillStyle = "#FFF";
+            fn(ctx);
+            try {
+              gl.activeTexture(gl.TEXTURE0);
+              gl.bindTexture(gl.TEXTURE_2D, props.handle);
+              // gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
+              gl.texImage2D(
+                gl.TEXTURE_2D,
+                0,
+                gl.RGBA,
+                gl.RGBA,
+                gl.UNSIGNED_BYTE,
+                props.texture
+              );
+              gl.texParameteri(
+                gl.TEXTURE_2D,
+                gl.TEXTURE_WRAP_S,
+                gl.CLAMP_TO_EDGE
+              );
+              gl.texParameteri(
+                gl.TEXTURE_2D,
+                gl.TEXTURE_WRAP_T,
+                gl.CLAMP_TO_EDGE
+              );
+              gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
+              gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
+              // gl.generateMipmap(gl.TEXTURE_2D);
+              gl.bindTexture(gl.TEXTURE_2D, null);
+              props.isReady = true;
+            } catch (e) {
+              // silent error
+            }
+          }
+          // Circle shape
+          createTexture("circle", function (ctx) {
+            ctx.beginPath();
+            ctx.arc(256, 256, 256, 0, 2 * Math.PI);
+            ctx.stroke();
+            ctx.fill();
+          });
+          // Square shape
+          createTexture("square", function (ctx) {
+            ctx.fillRect(0, 0, 512, 512);
+          });
+          // Diamond shape
+          createTexture("diamond", function (ctx) {
+            ctx.beginPath();
+            ctx.moveTo(256, 0);
+            ctx.lineTo(512, 256);
+            ctx.lineTo(256, 512);
+            ctx.lineTo(0, 256);
+            ctx.lineTo(256, 0);
+            ctx.fill();
+          });
+          // Triangle shape
+          createTexture("triangle", function (ctx) {
+            ctx.beginPath();
+            ctx.moveTo(0, 512);
+            ctx.lineTo(256, 0);
+            ctx.lineTo(512, 512);
+            ctx.lineTo(0, 512);
+            ctx.fill();
+          });
+          // Triangle shape (rotated)
+          createTexture("triangle-down", function (ctx) {
+            ctx.beginPath();
+            ctx.moveTo(0, 0);
+            ctx.lineTo(256, 512);
+            ctx.lineTo(512, 0);
+            ctx.lineTo(0, 0);
+            ctx.fill();
+          });
+          isInited = true;
+          if (settings.debug.timeSetup) {
+            console.timeEnd("gl setup"); // eslint-disable-line no-console
+          }
+          return true;
         }
-        /* eslint-disable no-invalid-this */
         /**
-         * Used for treemap|heatmap.drawPoints
-         *
+         * Check if we have a valid OGL context
          * @private
-         * @function pointDrawHandler
-         *
-         * @param {Function} proceed
-         *
-         * @return {*}
+         * @returns {Boolean} - true if the context is valid
          */
-        function pointDrawHandler(proceed) {
-            var enabled = true,
-                renderer;
-            if (this.chart.options && this.chart.options.boost) {
-                enabled = typeof this.chart.options.boost.enabled === 'undefined' ?
-                    true :
-                    this.chart.options.boost.enabled;
-            }
-            if (!enabled || !this.isSeriesBoosting) {
-                return proceed.call(this);
-            }
-            this.chart.isBoosting = true;
-            // Make sure we have a valid OGL context
-            renderer = createAndAttachRenderer(this.chart, this);
-            if (renderer) {
-                allocateIfNotSeriesBoosting(renderer, this);
-                renderer.pushSeries(this);
-            }
-            renderIfNotSeriesBoosting(renderer, this);
-        }
-        /* eslint-enable no-invalid-this, valid-jsdoc */
-        var funs = {
-                patientMax: patientMax,
-                boostEnabled: boostEnabled,
-                shouldForceChartSeriesBoosting: shouldForceChartSeriesBoosting,
-                renderIfNotSeriesBoosting: renderIfNotSeriesBoosting,
-                allocateIfNotSeriesBoosting: allocateIfNotSeriesBoosting,
-                eachAsync: eachAsync,
-                hasWebGLSupport: hasWebGLSupport,
-                pointDrawHandler: pointDrawHandler
-            };
-        // This needs to be fixed.
-        H.hasWebGLSupport = hasWebGLSupport;
-
-        return funs;
-    });
-    _registerModule(_modules, 'Extensions/Boost/BoostInit.js', [_modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js'], _modules['Extensions/Boost/BoostUtils.js'], _modules['Extensions/Boost/BoostAttach.js']], function (Chart, H, U, butils, createAndAttachRenderer) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var addEvent = U.addEvent,
-            extend = U.extend,
-            fireEvent = U.fireEvent,
-            wrap = U.wrap;
-        var Series = H.Series,
-            seriesTypes = H.seriesTypes,
-            noop = function () { },
-            eachAsync = butils.eachAsync,
-            pointDrawHandler = butils.pointDrawHandler,
-            allocateIfNotSeriesBoosting = butils.allocateIfNotSeriesBoosting,
-            renderIfNotSeriesBoosting = butils.renderIfNotSeriesBoosting,
-            shouldForceChartSeriesBoosting = butils.shouldForceChartSeriesBoosting,
-            index;
-        /* eslint-disable valid-jsdoc */
+        function valid() {
+          return gl !== false;
+        }
         /**
-         * Initialize the boot module.
-         *
+         * Check if the renderer has been initialized
          * @private
-         * @return {void}
+         * @returns {Boolean} - true if it has, false if not
          */
-        function init() {
-            extend(Series.prototype, {
-                /**
-                 * @private
-                 * @function Highcharts.Series#renderCanvas
-                 */
-                renderCanvas: function () {
-                    var series = this, options = series.options || {}, renderer = false, chart = series.chart, xAxis = this.xAxis, yAxis = this.yAxis, xData = options.xData || series.processedXData, yData = options.yData || series.processedYData, rawData = options.data, xExtremes = xAxis.getExtremes(), xMin = xExtremes.min, xMax = xExtremes.max, yExtremes = yAxis.getExtremes(), yMin = yExtremes.min, yMax = yExtremes.max, pointTaken = {}, lastClientX, sampling = !!series.sampling, points, enableMouseTracking = options.enableMouseTracking !== false, threshold = options.threshold, yBottom = yAxis.getThreshold(threshold), isRange = series.pointArrayMap &&
-                            series.pointArrayMap.join(',') === 'low,high', isStacked = !!options.stacking, cropStart = series.cropStart || 0, requireSorting = series.requireSorting, useRaw = !xData, minVal, maxVal, minI, maxI, boostOptions, compareX = options.findNearestPointBy === 'x', xDataFull = (this.xData ||
-                            this.options.xData ||
-                            this.processedXData ||
-                            false), addKDPoint = function (clientX, plotY, i) {
-                            // We need to do ceil on the clientX to make things
-                            // snap to pixel values. The renderer will frequently
-                            // draw stuff on "sub-pixels".
-                            clientX = Math.ceil(clientX);
-                        // Shaves off about 60ms compared to repeated concatenation
-                        index = compareX ? clientX : clientX + ',' + plotY;
-                        // The k-d tree requires series points.
-                        // Reduce the amount of points, since the time to build the
-                        // tree increases exponentially.
-                        if (enableMouseTracking && !pointTaken[index]) {
-                            pointTaken[index] = true;
-                            if (chart.inverted) {
-                                clientX = xAxis.len - clientX;
-                                plotY = yAxis.len - plotY;
-                            }
-                            points.push({
-                                x: xDataFull ? xDataFull[cropStart + i] : false,
-                                clientX: clientX,
-                                plotX: clientX,
-                                plotY: plotY,
-                                i: cropStart + i
-                            });
-                        }
-                    };
-                    // Get or create the renderer
-                    renderer = createAndAttachRenderer(chart, series);
-                    chart.isBoosting = true;
-                    boostOptions = renderer.settings;
-                    if (!this.visible) {
-                        return;
-                    }
-                    // If we are zooming out from SVG mode, destroy the graphics
-                    if (this.points || this.graph) {
-                        this.destroyGraphics();
-                    }
-                    // If we're rendering per. series we should create the marker groups
-                    // as usual.
-                    if (!chart.isChartSeriesBoosting()) {
-                        // If all series were boosting, but are not anymore
-                        // restore private markerGroup
-                        if (this.markerGroup === chart.markerGroup) {
-                            this.markerGroup = void 0;
-                        }
-                        this.markerGroup = series.plotGroup('markerGroup', 'markers', true, 1, chart.seriesGroup);
-                    }
-                    else {
-                        // If series has a private markeGroup, remove that
-                        // and use common markerGroup
-                        if (this.markerGroup &&
-                            this.markerGroup !== chart.markerGroup) {
-                            this.markerGroup.destroy();
-                        }
-                        // Use a single group for the markers
-                        this.markerGroup = chart.markerGroup;
-                        // When switching from chart boosting mode, destroy redundant
-                        // series boosting targets
-                        if (this.renderTarget) {
-                            this.renderTarget = this.renderTarget.destroy();
-                        }
-                    }
-                    points = this.points = [];
-                    // Do not start building while drawing
-                    series.buildKDTree = noop;
-                    if (renderer) {
-                        allocateIfNotSeriesBoosting(renderer, this);
-                        renderer.pushSeries(series);
-                        // Perform the actual renderer if we're on series level
-                        renderIfNotSeriesBoosting(renderer, this, chart);
-                    }
-                    /**
-                     * This builds the KD-tree
-                     * @private
-                     */
-                    function processPoint(d, i) {
-                        var x,
-                            y,
-                            clientX,
-                            plotY,
-                            isNull,
-                            low = false,
-                            chartDestroyed = typeof chart.index === 'undefined',
-                            isYInside = true;
-                        if (!chartDestroyed) {
-                            if (useRaw) {
-                                x = d[0];
-                                y = d[1];
-                            }
-                            else {
-                                x = d;
-                                y = yData[i];
-                            }
-                            // Resolve low and high for range series
-                            if (isRange) {
-                                if (useRaw) {
-                                    y = d.slice(1, 3);
-                                }
-                                low = y[0];
-                                y = y[1];
-                            }
-                            else if (isStacked) {
-                                x = d.x;
-                                y = d.stackY;
-                                low = y - d.y;
-                            }
-                            isNull = y === null;
-                            // Optimize for scatter zooming
-                            if (!requireSorting) {
-                                isYInside = y >= yMin && y <= yMax;
-                            }
-                            if (!isNull && x >= xMin && x <= xMax && isYInside) {
-                                clientX = xAxis.toPixels(x, true);
-                                if (sampling) {
-                                    if (typeof minI === 'undefined' ||
-                                        clientX === lastClientX) {
-                                        if (!isRange) {
-                                            low = y;
-                                        }
-                                        if (typeof maxI === 'undefined' ||
-                                            y > maxVal) {
-                                            maxVal = y;
-                                            maxI = i;
-                                        }
-                                        if (typeof minI === 'undefined' ||
-                                            low < minVal) {
-                                            minVal = low;
-                                            minI = i;
-                                        }
-                                    }
-                                    // Add points and reset
-                                    if (clientX !== lastClientX) {
-                                        // maxI is number too:
-                                        if (typeof minI !== 'undefined') {
-                                            plotY =
-                                                yAxis.toPixels(maxVal, true);
-                                            yBottom =
-                                                yAxis.toPixels(minVal, true);
-                                            addKDPoint(clientX, plotY, maxI);
-                                            if (yBottom !== plotY) {
-                                                addKDPoint(clientX, yBottom, minI);
-                                            }
-                                        }
-                                        minI = maxI = void 0;
-                                        lastClientX = clientX;
-                                    }
-                                }
-                                else {
-                                    plotY = Math.ceil(yAxis.toPixels(y, true));
-                                    addKDPoint(clientX, plotY, i);
-                                }
-                            }
-                        }
-                        return !chartDestroyed;
-                    }
-                    /**
-                     * @private
-                     */
-                    function doneProcessing() {
-                        fireEvent(series, 'renderedCanvas');
-                        // Go back to prototype, ready to build
-                        delete series.buildKDTree;
-                        series.buildKDTree();
-                        if (boostOptions.debug.timeKDTree) {
-                            console.timeEnd('kd tree building'); // eslint-disable-line no-console
-                        }
+        function inited() {
+          return isInited;
+        }
+        /**
+         * @private
+         */
+        function destroy() {
+          flush();
+          vbuffer.destroy();
+          shader.destroy();
+          if (gl) {
+            objectEach(textureHandles, function (texture) {
+              if (texture.handle) {
+                gl.deleteTexture(texture.handle);
+              }
+            });
+            gl.canvas.width = 1;
+            gl.canvas.height = 1;
+          }
+        }
+        // /////////////////////////////////////////////////////////////////////////
+        exports = {
+          allocateBufferForSingleSeries: allocateBufferForSingleSeries,
+          pushSeries: pushSeries,
+          setSize: setSize,
+          inited: inited,
+          setThreshold: setThreshold,
+          init: init,
+          render: renderWhenReady,
+          settings: settings,
+          valid: valid,
+          clear: clear,
+          flush: flush,
+          setXAxis: setXAxis,
+          setYAxis: setYAxis,
+          data: data,
+          gl: getGL,
+          allocateBuffer: allocateBuffer,
+          destroy: destroy,
+          setOptions: setOptions,
+        };
+        return exports;
+      }
+
+      return GLRenderer;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/Boost/BoostAttach.js",
+    [
+      _modules["Core/Chart/Chart.js"],
+      _modules["Extensions/Boost/WGLRenderer.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Chart, GLRenderer, H, U) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var doc = H.doc;
+      var error = U.error;
+      var mainCanvas = doc.createElement("canvas");
+      /**
+       * Create a canvas + context and attach it to the target
+       *
+       * @private
+       * @function createAndAttachRenderer
+       *
+       * @param {Highcharts.Chart} chart
+       * the chart
+       *
+       * @param {Highcharts.Series} series
+       * the series
+       *
+       * @return {Highcharts.BoostGLRenderer}
+       * the canvas renderer
+       */
+      function createAndAttachRenderer(chart, series) {
+        var width = chart.chartWidth,
+          height = chart.chartHeight,
+          target = chart,
+          targetGroup = chart.seriesGroup || series.group,
+          alpha = 1,
+          foSupported = doc.implementation.hasFeature(
+            "www.http://w3.org/TR/SVG11/feature#Extensibility",
+            "1.1"
+          );
+        if (chart.isChartSeriesBoosting()) {
+          target = chart;
+        } else {
+          target = series;
+        }
+        // Support for foreignObject is flimsy as best.
+        // IE does not support it, and Chrome has a bug which messes up
+        // the canvas draw order.
+        // As such, we force the Image fallback for now, but leaving the
+        // actual Canvas path in-place in case this changes in the future.
+        foSupported = false;
+        if (!target.renderTarget) {
+          target.canvas = mainCanvas;
+          // Fall back to image tag if foreignObject isn't supported,
+          // or if we're exporting.
+          if (chart.renderer.forExport || !foSupported) {
+            target.renderTarget = chart.renderer
+              .image("", 0, 0, width, height)
+              .addClass("highcharts-boost-canvas")
+              .add(targetGroup);
+            target.boostClear = function () {
+              target.renderTarget.attr({ href: "" });
+            };
+            target.boostCopy = function () {
+              target.boostResizeTarget();
+              target.renderTarget.attr({
+                href: target.canvas.toDataURL("image/png"),
+              });
+            };
+          } else {
+            target.renderTargetFo = chart.renderer
+              .createElement("foreignObject")
+              .add(targetGroup);
+            target.renderTarget = doc.createElement("canvas");
+            target.renderTargetCtx = target.renderTarget.getContext("2d");
+            target.renderTargetFo.element.appendChild(target.renderTarget);
+            target.boostClear = function () {
+              target.renderTarget.width = target.canvas.width;
+              target.renderTarget.height = target.canvas.height;
+            };
+            target.boostCopy = function () {
+              target.renderTarget.width = target.canvas.width;
+              target.renderTarget.height = target.canvas.height;
+              target.renderTargetCtx.drawImage(target.canvas, 0, 0);
+            };
+          }
+          target.boostResizeTarget = function () {
+            width = chart.chartWidth;
+            height = chart.chartHeight;
+            (target.renderTargetFo || target.renderTarget)
+              .attr({
+                x: 0,
+                y: 0,
+                width: width,
+                height: height,
+              })
+              .css({
+                pointerEvents: "none",
+                mixedBlendMode: "normal",
+                opacity: alpha,
+              });
+            if (target instanceof Chart) {
+              target.markerGroup.translate(chart.plotLeft, chart.plotTop);
+            }
+          };
+          target.boostClipRect = chart.renderer.clipRect();
+          (target.renderTargetFo || target.renderTarget).clip(
+            target.boostClipRect
+          );
+          if (target instanceof Chart) {
+            target.markerGroup = target.renderer.g().add(targetGroup);
+            target.markerGroup.translate(series.xAxis.pos, series.yAxis.pos);
+          }
+        }
+        target.canvas.width = width;
+        target.canvas.height = height;
+        target.boostClipRect.attr(chart.getBoostClipRect(target));
+        target.boostResizeTarget();
+        target.boostClear();
+        if (!target.ogl) {
+          target.ogl = GLRenderer(function () {
+            if (target.ogl.settings.debug.timeBufferCopy) {
+              console.time("buffer copy"); // eslint-disable-line no-console
+            }
+            target.boostCopy();
+            if (target.ogl.settings.debug.timeBufferCopy) {
+              console.timeEnd("buffer copy"); // eslint-disable-line no-console
+            }
+          });
+          if (!target.ogl.init(target.canvas)) {
+            // The OGL renderer couldn't be inited.
+            // This likely means a shader error as we wouldn't get to this point
+            // if there was no WebGL support.
+            error("[highcharts boost] - unable to init WebGL renderer");
+          }
+          // target.ogl.clear();
+          target.ogl.setOptions(chart.options.boost || {});
+          if (target instanceof Chart) {
+            target.ogl.allocateBuffer(chart);
+          }
+        }
+        target.ogl.setSize(width, height);
+        return target.ogl;
+      }
+
+      return createAndAttachRenderer;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/Boost/BoostUtils.js",
+    [
+      _modules["Core/Globals.js"],
+      _modules["Extensions/Boost/BoostableMap.js"],
+      _modules["Extensions/Boost/BoostAttach.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (H, boostableMap, createAndAttachRenderer, U) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  This files contains generic utility functions used by the boost module.
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var win = H.win,
+        doc = H.doc;
+      var pick = U.pick;
+      // This should be a const.
+      var CHUNK_SIZE = 3000;
+      /**
+       * Tolerant max() function.
+       *
+       * @private
+       * @function patientMax
+       *
+       * @param {...Array<Array<unknown>>} args
+       * Max arguments
+       *
+       * @return {number}
+       * Max value
+       */
+      function patientMax() {
+        var args = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+          args[_i] = arguments[_i];
+        }
+        var r = -Number.MAX_VALUE;
+        args.forEach(function (t) {
+          if (
+            typeof t !== "undefined" &&
+            t !== null &&
+            typeof t.length !== "undefined"
+          ) {
+            // r = r < t.length ? t.length : r;
+            if (t.length > 0) {
+              r = t.length;
+              return true;
+            }
+          }
+        });
+        return r;
+      }
+      /**
+       * Return true if ths boost.enabled option is true
+       *
+       * @private
+       * @function boostEnabled
+       *
+       * @param {Highcharts.Chart} chart
+       * The chart
+       *
+       * @return {boolean}
+       * True, if boost is enabled.
+       */
+      function boostEnabled(chart) {
+        return pick(
+          chart &&
+            chart.options &&
+            chart.options.boost &&
+            chart.options.boost.enabled,
+          true
+        );
+      }
+      /**
+       * Returns true if we should force boosting the chart
+       * @private
+       * @function shouldForceChartSeriesBoosting
+       *
+       * @param {Highcharts.Chart} chart
+       * The chart to check for forcing on
+       *
+       * @return {boolean}
+       * True, if boosting should be forced.
+       */
+      function shouldForceChartSeriesBoosting(chart) {
+        // If there are more than five series currently boosting,
+        // we should boost the whole chart to avoid running out of webgl contexts.
+        var sboostCount = 0,
+          canBoostCount = 0,
+          allowBoostForce = pick(
+            chart.options.boost && chart.options.boost.allowForce,
+            true
+          ),
+          series;
+        if (typeof chart.boostForceChartBoost !== "undefined") {
+          return chart.boostForceChartBoost;
+        }
+        if (chart.series.length > 1) {
+          for (var i = 0; i < chart.series.length; i++) {
+            series = chart.series[i];
+            // Don't count series with boostThreshold set to 0
+            // See #8950
+            // Also don't count if the series is hidden.
+            // See #9046
+            if (
+              series.options.boostThreshold === 0 ||
+              series.visible === false
+            ) {
+              continue;
+            }
+            // Don't count heatmap series as they are handled differently.
+            // In the future we should make the heatmap/treemap path compatible
+            // with forcing. See #9636.
+            if (series.type === "heatmap") {
+              continue;
+            }
+            if (boostableMap[series.type]) {
+              ++canBoostCount;
+            }
+            if (
+              patientMax(
+                series.processedXData,
+                series.options.data,
+                // series.xData,
+                series.points
+              ) >= (series.options.boostThreshold || Number.MAX_VALUE)
+            ) {
+              ++sboostCount;
+            }
+          }
+        }
+        chart.boostForceChartBoost =
+          allowBoostForce &&
+          ((canBoostCount === chart.series.length && sboostCount > 0) ||
+            sboostCount > 5);
+        return chart.boostForceChartBoost;
+      }
+      /* eslint-disable valid-jsdoc */
+      /**
+       * Performs the actual render if the renderer is
+       * attached to the series.
+       * @private
+       * @param renderer {OGLRenderer} - the renderer
+       * @param series {Highcharts.Series} - the series
+       */
+      function renderIfNotSeriesBoosting(renderer, series, chart) {
+        if (
+          renderer &&
+          series.renderTarget &&
+          series.canvas &&
+          !(chart || series.chart).isChartSeriesBoosting()
+        ) {
+          renderer.render(chart || series.chart);
+        }
+      }
+      /**
+       * @private
+       */
+      function allocateIfNotSeriesBoosting(renderer, series) {
+        if (
+          renderer &&
+          series.renderTarget &&
+          series.canvas &&
+          !series.chart.isChartSeriesBoosting()
+        ) {
+          renderer.allocateBufferForSingleSeries(series);
+        }
+      }
+      /**
+       * An "async" foreach loop. Uses a setTimeout to keep the loop from blocking the
+       * UI thread.
+       *
+       * @private
+       *
+       * @param arr {Array} - the array to loop through
+       * @param fn {Function} - the callback to call for each item
+       * @param finalFunc {Function} - the callback to call when done
+       * @param chunkSize {Number} - the number of iterations per timeout
+       * @param i {Number} - the current index
+       * @param noTimeout {Boolean} - set to true to skip timeouts
+       */
+      function eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout) {
+        i = i || 0;
+        chunkSize = chunkSize || CHUNK_SIZE;
+        var threshold = i + chunkSize,
+          proceed = true;
+        while (proceed && i < threshold && i < arr.length) {
+          proceed = fn(arr[i], i);
+          ++i;
+        }
+        if (proceed) {
+          if (i < arr.length) {
+            if (noTimeout) {
+              eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);
+            } else if (win.requestAnimationFrame) {
+              // If available, do requestAnimationFrame - shaves off a few ms
+              win.requestAnimationFrame(function () {
+                eachAsync(arr, fn, finalFunc, chunkSize, i);
+              });
+            } else {
+              setTimeout(function () {
+                eachAsync(arr, fn, finalFunc, chunkSize, i);
+              });
+            }
+          } else if (finalFunc) {
+            finalFunc();
+          }
+        }
+      }
+      /**
+       * Returns true if the current browser supports webgl
+       *
+       * @private
+       * @function hasWebGLSupport
+       *
+       * @return {boolean}
+       */
+      function hasWebGLSupport() {
+        var i = 0,
+          canvas,
+          contexts = ["webgl", "experimental-webgl", "moz-webgl", "webkit-3d"],
+          context = false;
+        if (typeof win.WebGLRenderingContext !== "undefined") {
+          canvas = doc.createElement("canvas");
+          for (; i < contexts.length; i++) {
+            try {
+              context = canvas.getContext(contexts[i]);
+              if (typeof context !== "undefined" && context !== null) {
+                return true;
+              }
+            } catch (e) {
+              // silent error
+            }
+          }
+        }
+        return false;
+      }
+      /* eslint-disable no-invalid-this */
+      /**
+       * Used for treemap|heatmap.drawPoints
+       *
+       * @private
+       * @function pointDrawHandler
+       *
+       * @param {Function} proceed
+       *
+       * @return {*}
+       */
+      function pointDrawHandler(proceed) {
+        var enabled = true,
+          renderer;
+        if (this.chart.options && this.chart.options.boost) {
+          enabled =
+            typeof this.chart.options.boost.enabled === "undefined"
+              ? true
+              : this.chart.options.boost.enabled;
+        }
+        if (!enabled || !this.isSeriesBoosting) {
+          return proceed.call(this);
+        }
+        this.chart.isBoosting = true;
+        // Make sure we have a valid OGL context
+        renderer = createAndAttachRenderer(this.chart, this);
+        if (renderer) {
+          allocateIfNotSeriesBoosting(renderer, this);
+          renderer.pushSeries(this);
+        }
+        renderIfNotSeriesBoosting(renderer, this);
+      }
+      /* eslint-enable no-invalid-this, valid-jsdoc */
+      var funs = {
+        patientMax: patientMax,
+        boostEnabled: boostEnabled,
+        shouldForceChartSeriesBoosting: shouldForceChartSeriesBoosting,
+        renderIfNotSeriesBoosting: renderIfNotSeriesBoosting,
+        allocateIfNotSeriesBoosting: allocateIfNotSeriesBoosting,
+        eachAsync: eachAsync,
+        hasWebGLSupport: hasWebGLSupport,
+        pointDrawHandler: pointDrawHandler,
+      };
+      // This needs to be fixed.
+      H.hasWebGLSupport = hasWebGLSupport;
+
+      return funs;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/Boost/BoostInit.js",
+    [
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Utilities.js"],
+      _modules["Extensions/Boost/BoostUtils.js"],
+      _modules["Extensions/Boost/BoostAttach.js"],
+    ],
+    function (Chart, H, U, butils, createAndAttachRenderer) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        extend = U.extend,
+        fireEvent = U.fireEvent,
+        wrap = U.wrap;
+      var Series = H.Series,
+        seriesTypes = H.seriesTypes,
+        noop = function () {},
+        eachAsync = butils.eachAsync,
+        pointDrawHandler = butils.pointDrawHandler,
+        allocateIfNotSeriesBoosting = butils.allocateIfNotSeriesBoosting,
+        renderIfNotSeriesBoosting = butils.renderIfNotSeriesBoosting,
+        shouldForceChartSeriesBoosting = butils.shouldForceChartSeriesBoosting,
+        index;
+      /* eslint-disable valid-jsdoc */
+      /**
+       * Initialize the boot module.
+       *
+       * @private
+       * @return {void}
+       */
+      function init() {
+        extend(Series.prototype, {
+          /**
+           * @private
+           * @function Highcharts.Series#renderCanvas
+           */
+          renderCanvas: function () {
+            var series = this,
+              options = series.options || {},
+              renderer = false,
+              chart = series.chart,
+              xAxis = this.xAxis,
+              yAxis = this.yAxis,
+              xData = options.xData || series.processedXData,
+              yData = options.yData || series.processedYData,
+              rawData = options.data,
+              xExtremes = xAxis.getExtremes(),
+              xMin = xExtremes.min,
+              xMax = xExtremes.max,
+              yExtremes = yAxis.getExtremes(),
+              yMin = yExtremes.min,
+              yMax = yExtremes.max,
+              pointTaken = {},
+              lastClientX,
+              sampling = !!series.sampling,
+              points,
+              enableMouseTracking = options.enableMouseTracking !== false,
+              threshold = options.threshold,
+              yBottom = yAxis.getThreshold(threshold),
+              isRange =
+                series.pointArrayMap &&
+                series.pointArrayMap.join(",") === "low,high",
+              isStacked = !!options.stacking,
+              cropStart = series.cropStart || 0,
+              requireSorting = series.requireSorting,
+              useRaw = !xData,
+              minVal,
+              maxVal,
+              minI,
+              maxI,
+              boostOptions,
+              compareX = options.findNearestPointBy === "x",
+              xDataFull =
+                this.xData ||
+                this.options.xData ||
+                this.processedXData ||
+                false,
+              addKDPoint = function (clientX, plotY, i) {
+                // We need to do ceil on the clientX to make things
+                // snap to pixel values. The renderer will frequently
+                // draw stuff on "sub-pixels".
+                clientX = Math.ceil(clientX);
+                // Shaves off about 60ms compared to repeated concatenation
+                index = compareX ? clientX : clientX + "," + plotY;
+                // The k-d tree requires series points.
+                // Reduce the amount of points, since the time to build the
+                // tree increases exponentially.
+                if (enableMouseTracking && !pointTaken[index]) {
+                  pointTaken[index] = true;
+                  if (chart.inverted) {
+                    clientX = xAxis.len - clientX;
+                    plotY = yAxis.len - plotY;
+                  }
+                  points.push({
+                    x: xDataFull ? xDataFull[cropStart + i] : false,
+                    clientX: clientX,
+                    plotX: clientX,
+                    plotY: plotY,
+                    i: cropStart + i,
+                  });
+                }
+              };
+            // Get or create the renderer
+            renderer = createAndAttachRenderer(chart, series);
+            chart.isBoosting = true;
+            boostOptions = renderer.settings;
+            if (!this.visible) {
+              return;
+            }
+            // If we are zooming out from SVG mode, destroy the graphics
+            if (this.points || this.graph) {
+              this.destroyGraphics();
+            }
+            // If we're rendering per. series we should create the marker groups
+            // as usual.
+            if (!chart.isChartSeriesBoosting()) {
+              // If all series were boosting, but are not anymore
+              // restore private markerGroup
+              if (this.markerGroup === chart.markerGroup) {
+                this.markerGroup = void 0;
+              }
+              this.markerGroup = series.plotGroup(
+                "markerGroup",
+                "markers",
+                true,
+                1,
+                chart.seriesGroup
+              );
+            } else {
+              // If series has a private markeGroup, remove that
+              // and use common markerGroup
+              if (this.markerGroup && this.markerGroup !== chart.markerGroup) {
+                this.markerGroup.destroy();
+              }
+              // Use a single group for the markers
+              this.markerGroup = chart.markerGroup;
+              // When switching from chart boosting mode, destroy redundant
+              // series boosting targets
+              if (this.renderTarget) {
+                this.renderTarget = this.renderTarget.destroy();
+              }
+            }
+            points = this.points = [];
+            // Do not start building while drawing
+            series.buildKDTree = noop;
+            if (renderer) {
+              allocateIfNotSeriesBoosting(renderer, this);
+              renderer.pushSeries(series);
+              // Perform the actual renderer if we're on series level
+              renderIfNotSeriesBoosting(renderer, this, chart);
+            }
+            /**
+             * This builds the KD-tree
+             * @private
+             */
+            function processPoint(d, i) {
+              var x,
+                y,
+                clientX,
+                plotY,
+                isNull,
+                low = false,
+                chartDestroyed = typeof chart.index === "undefined",
+                isYInside = true;
+              if (!chartDestroyed) {
+                if (useRaw) {
+                  x = d[0];
+                  y = d[1];
+                } else {
+                  x = d;
+                  y = yData[i];
+                }
+                // Resolve low and high for range series
+                if (isRange) {
+                  if (useRaw) {
+                    y = d.slice(1, 3);
+                  }
+                  low = y[0];
+                  y = y[1];
+                } else if (isStacked) {
+                  x = d.x;
+                  y = d.stackY;
+                  low = y - d.y;
+                }
+                isNull = y === null;
+                // Optimize for scatter zooming
+                if (!requireSorting) {
+                  isYInside = y >= yMin && y <= yMax;
+                }
+                if (!isNull && x >= xMin && x <= xMax && isYInside) {
+                  clientX = xAxis.toPixels(x, true);
+                  if (sampling) {
+                    if (
+                      typeof minI === "undefined" ||
+                      clientX === lastClientX
+                    ) {
+                      if (!isRange) {
+                        low = y;
+                      }
+                      if (typeof maxI === "undefined" || y > maxVal) {
+                        maxVal = y;
+                        maxI = i;
+                      }
+                      if (typeof minI === "undefined" || low < minVal) {
+                        minVal = low;
+                        minI = i;
+                      }
                     }
-                    // Loop over the points to build the k-d tree - skip this if
-                    // exporting
-                    if (!chart.renderer.forExport) {
-                        if (boostOptions.debug.timeKDTree) {
-                            console.time('kd tree building'); // eslint-disable-line no-console
+                    // Add points and reset
+                    if (clientX !== lastClientX) {
+                      // maxI is number too:
+                      if (typeof minI !== "undefined") {
+                        plotY = yAxis.toPixels(maxVal, true);
+                        yBottom = yAxis.toPixels(minVal, true);
+                        addKDPoint(clientX, plotY, maxI);
+                        if (yBottom !== plotY) {
+                          addKDPoint(clientX, yBottom, minI);
                         }
-                        eachAsync(isStacked ? series.data : (xData || rawData), processPoint, doneProcessing);
+                      }
+                      minI = maxI = void 0;
+                      lastClientX = clientX;
                     }
+                  } else {
+                    plotY = Math.ceil(yAxis.toPixels(y, true));
+                    addKDPoint(clientX, plotY, i);
+                  }
                 }
-            });
-            /*
-             * We need to handle heatmaps separatly, since we can't perform the
-             * size/color calculations in the shader easily.
-             *
-             * This likely needs future optimization.
+              }
+              return !chartDestroyed;
+            }
+            /**
+             * @private
              */
-            ['heatmap', 'treemap'].forEach(function (t) {
-                if (seriesTypes[t]) {
-                    wrap(seriesTypes[t].prototype, 'drawPoints', pointDrawHandler);
+            function doneProcessing() {
+              fireEvent(series, "renderedCanvas");
+              // Go back to prototype, ready to build
+              delete series.buildKDTree;
+              series.buildKDTree();
+              if (boostOptions.debug.timeKDTree) {
+                console.timeEnd("kd tree building"); // eslint-disable-line no-console
+              }
+            }
+            // Loop over the points to build the k-d tree - skip this if
+            // exporting
+            if (!chart.renderer.forExport) {
+              if (boostOptions.debug.timeKDTree) {
+                console.time("kd tree building"); // eslint-disable-line no-console
+              }
+              eachAsync(
+                isStacked ? series.data : xData || rawData,
+                processPoint,
+                doneProcessing
+              );
+            }
+          },
+        });
+        /*
+         * We need to handle heatmaps separatly, since we can't perform the
+         * size/color calculations in the shader easily.
+         *
+         * This likely needs future optimization.
+         */
+        ["heatmap", "treemap"].forEach(function (t) {
+          if (seriesTypes[t]) {
+            wrap(seriesTypes[t].prototype, "drawPoints", pointDrawHandler);
+          }
+        });
+        /* eslint-disable no-invalid-this */
+        if (seriesTypes.bubble) {
+          // By default, the bubble series does not use the KD-tree, so force it
+          // to.
+          delete seriesTypes.bubble.prototype.buildKDTree;
+          // seriesTypes.bubble.prototype.directTouch = false;
+          // Needed for markers to work correctly
+          wrap(
+            seriesTypes.bubble.prototype,
+            "markerAttribs",
+            function (proceed) {
+              if (this.isSeriesBoosting) {
+                return false;
+              }
+              return proceed.apply(this, [].slice.call(arguments, 1));
+            }
+          );
+        }
+        seriesTypes.scatter.prototype.fill = true;
+        extend(seriesTypes.area.prototype, {
+          fill: true,
+          fillOpacity: true,
+          sampling: true,
+        });
+        extend(seriesTypes.column.prototype, {
+          fill: true,
+          sampling: true,
+        });
+        // Take care of the canvas blitting
+        Chart.prototype.callbacks.push(function (chart) {
+          /**
+           * Convert chart-level canvas to image.
+           * @private
+           */
+          function canvasToSVG() {
+            if (chart.ogl && chart.isChartSeriesBoosting()) {
+              chart.ogl.render(chart);
+            }
+          }
+          /**
+           * Clear chart-level canvas.
+           * @private
+           */
+          function preRender() {
+            // Reset force state
+            chart.boostForceChartBoost = void 0;
+            chart.boostForceChartBoost = shouldForceChartSeriesBoosting(chart);
+            chart.isBoosting = false;
+            if (!chart.isChartSeriesBoosting() && chart.didBoost) {
+              chart.didBoost = false;
+            }
+            // Clear the canvas
+            if (chart.boostClear) {
+              chart.boostClear();
+            }
+            if (chart.canvas && chart.ogl && chart.isChartSeriesBoosting()) {
+              chart.didBoost = true;
+              // Allocate
+              chart.ogl.allocateBuffer(chart);
+            }
+            // see #6518 + #6739
+            if (
+              chart.markerGroup &&
+              chart.xAxis &&
+              chart.xAxis.length > 0 &&
+              chart.yAxis &&
+              chart.yAxis.length > 0
+            ) {
+              chart.markerGroup.translate(
+                chart.xAxis[0].pos,
+                chart.yAxis[0].pos
+              );
+            }
+          }
+          addEvent(chart, "predraw", preRender);
+          addEvent(chart, "render", canvasToSVG);
+          // addEvent(chart, 'zoom', function () {
+          //     chart.boostForceChartBoost =
+          //         shouldForceChartSeriesBoosting(chart);
+          // });
+        });
+        /* eslint-enable no-invalid-this */
+      }
+
+      return init;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/BoostCanvas.js",
+    [
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Color/Color.js"],
+      _modules["Core/Globals.js"],
+      _modules["Series/LineSeries.js"],
+      _modules["Core/Series/Series.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Chart, Color, H, LineSeries, Series, U) {
+      /* *
+       *
+       *  License: www.highcharts.com/license
+       *  Author: Torstein Honsi, Christer Vasseng
+       *
+       *  This module serves as a fallback for the Boost module in IE9 and IE10. Newer
+       *  browsers support WebGL which is faster.
+       *
+       *  It is recommended to include this module in conditional comments targeting
+       *  IE9 and IE10.
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var color = Color.parse;
+      var doc = H.doc,
+        noop = H.noop;
+      var addEvent = U.addEvent,
+        extend = U.extend,
+        fireEvent = U.fireEvent,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        pick = U.pick,
+        wrap = U.wrap;
+      var seriesTypes = Series.seriesTypes,
+        CHUNK_SIZE = 50000,
+        destroyLoadingDiv;
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * Initialize the canvas boost.
+       *
+       * @function Highcharts.initCanvasBoost
+       */
+      var initCanvasBoost = function () {
+        if (H.seriesTypes.heatmap) {
+          wrap(H.seriesTypes.heatmap.prototype, "drawPoints", function () {
+            var chart = this.chart,
+              ctx = this.getContext(),
+              inverted = this.chart.inverted,
+              xAxis = this.xAxis,
+              yAxis = this.yAxis;
+            if (ctx) {
+              // draw the columns
+              this.points.forEach(function (point) {
+                var plotY = point.plotY,
+                  shapeArgs,
+                  pointAttr;
+                if (
+                  typeof plotY !== "undefined" &&
+                  !isNaN(plotY) &&
+                  point.y !== null
+                ) {
+                  shapeArgs = point.shapeArgs;
+                  if (!chart.styledMode) {
+                    pointAttr = point.series.pointAttribs(point);
+                  } else {
+                    pointAttr = point.series.colorAttribs(point);
+                  }
+                  ctx.fillStyle = pointAttr.fill;
+                  if (inverted) {
+                    ctx.fillRect(
+                      yAxis.len - shapeArgs.y + xAxis.left,
+                      xAxis.len - shapeArgs.x + yAxis.top,
+                      -shapeArgs.height,
+                      -shapeArgs.width
+                    );
+                  } else {
+                    ctx.fillRect(
+                      shapeArgs.x + xAxis.left,
+                      shapeArgs.y + yAxis.top,
+                      shapeArgs.width,
+                      shapeArgs.height
+                    );
+                  }
                 }
-            });
-            /* eslint-disable no-invalid-this */
-            if (seriesTypes.bubble) {
-                // By default, the bubble series does not use the KD-tree, so force it
-                // to.
-                delete seriesTypes.bubble.prototype.buildKDTree;
-                // seriesTypes.bubble.prototype.directTouch = false;
-                // Needed for markers to work correctly
-                wrap(seriesTypes.bubble.prototype, 'markerAttribs', function (proceed) {
-                    if (this.isSeriesBoosting) {
-                        return false;
-                    }
-                    return proceed.apply(this, [].slice.call(arguments, 1));
+              });
+              this.canvasToSVG();
+            } else {
+              this.chart.showLoading(
+                "Your browser doesn't support HTML5 canvas, <br>" +
+                  "please use a modern browser"
+              );
+              // Uncomment this to provide low-level (slow) support in oldIE.
+              // It will cause script errors on charts with more than a few
+              // thousand points.
+              // arguments[0].call(this);
+            }
+          });
+        }
+        extend(LineSeries.prototype, {
+          /**
+           * Create a hidden canvas to draw the graph on. The contents is later
+           * copied over to an SVG image element.
+           *
+           * @private
+           * @function Highcharts.Series#getContext
+           */
+          getContext: function () {
+            var chart = this.chart,
+              width = chart.chartWidth,
+              height = chart.chartHeight,
+              targetGroup = chart.seriesGroup || this.group,
+              target = this,
+              ctx,
+              swapXY = function (proceed, x, y, a, b, c, d) {
+                proceed.call(this, y, x, a, b, c, d);
+              };
+            if (chart.isChartSeriesBoosting()) {
+              target = chart;
+              targetGroup = chart.seriesGroup;
+            }
+            ctx = target.ctx;
+            if (!target.canvas) {
+              target.canvas = doc.createElement("canvas");
+              target.renderTarget = chart.renderer
+                .image("", 0, 0, width, height)
+                .addClass("highcharts-boost-canvas")
+                .add(targetGroup);
+              target.ctx = ctx = target.canvas.getContext("2d");
+              if (chart.inverted) {
+                ["moveTo", "lineTo", "rect", "arc"].forEach(function (fn) {
+                  wrap(ctx, fn, swapXY);
+                });
+              }
+              target.boostCopy = function () {
+                target.renderTarget.attr({
+                  href: target.canvas.toDataURL("image/png"),
                 });
+              };
+              target.boostClear = function () {
+                ctx.clearRect(0, 0, target.canvas.width, target.canvas.height);
+                if (target === this) {
+                  target.renderTarget.attr({ href: "" });
+                }
+              };
+              target.boostClipRect = chart.renderer.clipRect();
+              target.renderTarget.clip(target.boostClipRect);
+            } else if (!(target instanceof H.Chart)) {
+              // ctx.clearRect(0, 0, width, height);
             }
-            seriesTypes.scatter.prototype.fill = true;
-            extend(seriesTypes.area.prototype, {
-                fill: true,
-                fillOpacity: true,
-                sampling: true
-            });
-            extend(seriesTypes.column.prototype, {
-                fill: true,
-                sampling: true
+            if (target.canvas.width !== width) {
+              target.canvas.width = width;
+            }
+            if (target.canvas.height !== height) {
+              target.canvas.height = height;
+            }
+            target.renderTarget.attr({
+              x: 0,
+              y: 0,
+              width: width,
+              height: height,
+              style: "pointer-events: none",
+              href: "",
             });
-            // Take care of the canvas blitting
-            Chart.prototype.callbacks.push(function (chart) {
-                /**
-                 * Convert chart-level canvas to image.
-                 * @private
-                 */
-                function canvasToSVG() {
-                    if (chart.ogl && chart.isChartSeriesBoosting()) {
-                        chart.ogl.render(chart);
-                    }
+            target.boostClipRect.attr(chart.getBoostClipRect(target));
+            return ctx;
+          },
+          /**
+           * Draw the canvas image inside an SVG image
+           *
+           * @private
+           * @function Highcharts.Series#canvasToSVG
+           */
+          canvasToSVG: function () {
+            if (!this.chart.isChartSeriesBoosting()) {
+              if (this.boostCopy || this.chart.boostCopy) {
+                (this.boostCopy || this.chart.boostCopy)();
+              }
+            } else {
+              if (this.boostClear) {
+                this.boostClear();
+              }
+            }
+          },
+          cvsLineTo: function (ctx, clientX, plotY) {
+            ctx.lineTo(clientX, plotY);
+          },
+          renderCanvas: function () {
+            var series = this,
+              options = series.options,
+              chart = series.chart,
+              xAxis = this.xAxis,
+              yAxis = this.yAxis,
+              activeBoostSettings = chart.options.boost || {},
+              boostSettings = {
+                timeRendering: activeBoostSettings.timeRendering || false,
+                timeSeriesProcessing:
+                  activeBoostSettings.timeSeriesProcessing || false,
+                timeSetup: activeBoostSettings.timeSetup || false,
+              },
+              ctx,
+              c = 0,
+              xData = series.processedXData,
+              yData = series.processedYData,
+              rawData = options.data,
+              xExtremes = xAxis.getExtremes(),
+              xMin = xExtremes.min,
+              xMax = xExtremes.max,
+              yExtremes = yAxis.getExtremes(),
+              yMin = yExtremes.min,
+              yMax = yExtremes.max,
+              pointTaken = {},
+              lastClientX,
+              sampling = !!series.sampling,
+              points,
+              r = options.marker && options.marker.radius,
+              cvsDrawPoint = this.cvsDrawPoint,
+              cvsLineTo = options.lineWidth ? this.cvsLineTo : void 0,
+              cvsMarker =
+                r && r <= 1 ? this.cvsMarkerSquare : this.cvsMarkerCircle,
+              strokeBatch = this.cvsStrokeBatch || 1000,
+              enableMouseTracking = options.enableMouseTracking !== false,
+              lastPoint,
+              threshold = options.threshold,
+              yBottom = yAxis.getThreshold(threshold),
+              hasThreshold = isNumber(threshold),
+              translatedThreshold = yBottom,
+              doFill = this.fill,
+              isRange =
+                series.pointArrayMap &&
+                series.pointArrayMap.join(",") === "low,high",
+              isStacked = !!options.stacking,
+              cropStart = series.cropStart || 0,
+              loadingOptions = chart.options.loading,
+              requireSorting = series.requireSorting,
+              wasNull,
+              connectNulls = options.connectNulls,
+              useRaw = !xData,
+              minVal,
+              maxVal,
+              minI,
+              maxI,
+              index,
+              sdata = isStacked ? series.data : xData || rawData,
+              fillColor = series.fillOpacity
+                ? new Color(series.color)
+                    .setOpacity(pick(options.fillOpacity, 0.75))
+                    .get()
+                : series.color,
+              //
+              stroke = function () {
+                if (doFill) {
+                  ctx.fillStyle = fillColor;
+                  ctx.fill();
+                } else {
+                  ctx.strokeStyle = series.color;
+                  ctx.lineWidth = options.lineWidth;
+                  ctx.stroke();
                 }
-                /**
-                 * Clear chart-level canvas.
-                 * @private
-                 */
-                function preRender() {
-                    // Reset force state
-                    chart.boostForceChartBoost = void 0;
-                    chart.boostForceChartBoost = shouldForceChartSeriesBoosting(chart);
-                    chart.isBoosting = false;
-                    if (!chart.isChartSeriesBoosting() && chart.didBoost) {
-                        chart.didBoost = false;
-                    }
-                    // Clear the canvas
-                    if (chart.boostClear) {
-                        chart.boostClear();
-                    }
-                    if (chart.canvas && chart.ogl && chart.isChartSeriesBoosting()) {
-                        chart.didBoost = true;
-                        // Allocate
-                        chart.ogl.allocateBuffer(chart);
-                    }
-                    // see #6518 + #6739
-                    if (chart.markerGroup &&
-                        chart.xAxis &&
-                        chart.xAxis.length > 0 &&
-                        chart.yAxis &&
-                        chart.yAxis.length > 0) {
-                        chart.markerGroup.translate(chart.xAxis[0].pos, chart.yAxis[0].pos);
-                    }
+              },
+              //
+              drawPoint = function (clientX, plotY, yBottom, i) {
+                if (c === 0) {
+                  ctx.beginPath();
+                  if (cvsLineTo) {
+                    ctx.lineJoin = "round";
+                  }
+                }
+                if (
+                  chart.scroller &&
+                  series.options.className === "highcharts-navigator-series"
+                ) {
+                  plotY += chart.scroller.top;
+                  if (yBottom) {
+                    yBottom += chart.scroller.top;
+                  }
+                } else {
+                  plotY += chart.plotTop;
+                }
+                clientX += chart.plotLeft;
+                if (wasNull) {
+                  ctx.moveTo(clientX, plotY);
+                } else {
+                  if (cvsDrawPoint) {
+                    cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint);
+                  } else if (cvsLineTo) {
+                    cvsLineTo(ctx, clientX, plotY);
+                  } else if (cvsMarker) {
+                    cvsMarker.call(series, ctx, clientX, plotY, r, i);
+                  }
+                }
+                // We need to stroke the line for every 1000 pixels. It will
+                // crash the browser memory use if we stroke too
+                // infrequently.
+                c = c + 1;
+                if (c === strokeBatch) {
+                  stroke();
+                  c = 0;
                 }
-                addEvent(chart, 'predraw', preRender);
-                addEvent(chart, 'render', canvasToSVG);
-                // addEvent(chart, 'zoom', function () {
-                //     chart.boostForceChartBoost =
-                //         shouldForceChartSeriesBoosting(chart);
-                // });
+                // Area charts need to keep track of the last point
+                lastPoint = {
+                  clientX: clientX,
+                  plotY: plotY,
+                  yBottom: yBottom,
+                };
+              },
+              //
+              compareX = options.findNearestPointBy === "x",
+              //
+              xDataFull =
+                this.xData ||
+                this.options.xData ||
+                this.processedXData ||
+                false,
+              //
+              addKDPoint = function (clientX, plotY, i) {
+                // Shaves off about 60ms compared to repeated concatenation
+                index = compareX ? clientX : clientX + "," + plotY;
+                // The k-d tree requires series points.
+                // Reduce the amount of points, since the time to build the
+                // tree increases exponentially.
+                if (enableMouseTracking && !pointTaken[index]) {
+                  pointTaken[index] = true;
+                  if (chart.inverted) {
+                    clientX = xAxis.len - clientX;
+                    plotY = yAxis.len - plotY;
+                  }
+                  points.push({
+                    x: xDataFull ? xDataFull[cropStart + i] : false,
+                    clientX: clientX,
+                    plotX: clientX,
+                    plotY: plotY,
+                    i: cropStart + i,
+                  });
+                }
+              };
+            if (this.renderTarget) {
+              this.renderTarget.attr({ href: "" });
+            }
+            // If we are zooming out from SVG mode, destroy the graphics
+            if (this.points || this.graph) {
+              this.destroyGraphics();
+            }
+            // The group
+            series.plotGroup(
+              "group",
+              "series",
+              series.visible ? "visible" : "hidden",
+              options.zIndex,
+              chart.seriesGroup
+            );
+            series.markerGroup = series.group;
+            addEvent(series, "destroy", function () {
+              // Prevent destroy twice
+              series.markerGroup = null;
             });
-            /* eslint-enable no-invalid-this */
-        }
-
-        return init;
-    });
-    _registerModule(_modules, 'Extensions/BoostCanvas.js', [_modules['Core/Chart/Chart.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Series/LineSeries.js'], _modules['Core/Series/Series.js'], _modules['Core/Utilities.js']], function (Chart, Color, H, LineSeries, Series, U) {
-        /* *
-         *
-         *  License: www.highcharts.com/license
-         *  Author: Torstein Honsi, Christer Vasseng
-         *
-         *  This module serves as a fallback for the Boost module in IE9 and IE10. Newer
-         *  browsers support WebGL which is faster.
-         *
-         *  It is recommended to include this module in conditional comments targeting
-         *  IE9 and IE10.
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var color = Color.parse;
-        var doc = H.doc,
-            noop = H.noop;
-        var addEvent = U.addEvent,
-            extend = U.extend,
-            fireEvent = U.fireEvent,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            pick = U.pick,
-            wrap = U.wrap;
-        var seriesTypes = Series.seriesTypes,
-            CHUNK_SIZE = 50000,
-            destroyLoadingDiv;
-        /* eslint-disable no-invalid-this, valid-jsdoc */
-        /**
-         * Initialize the canvas boost.
-         *
-         * @function Highcharts.initCanvasBoost
-         */
-        var initCanvasBoost = function () {
-                if (H.seriesTypes.heatmap) {
-                    wrap(H.seriesTypes.heatmap.prototype, 'drawPoints',
-            function () {
-                        var chart = this.chart,
-            ctx = this.getContext(),
-            inverted = this.chart.inverted,
-            xAxis = this.xAxis,
-            yAxis = this.yAxis;
-                    if (ctx) {
-                        // draw the columns
-                        this.points.forEach(function (point) {
-                            var plotY = point.plotY,
-                                shapeArgs,
-                                pointAttr;
-                            if (typeof plotY !== 'undefined' &&
-                                !isNaN(plotY) &&
-                                point.y !== null) {
-                                shapeArgs = point.shapeArgs;
-                                if (!chart.styledMode) {
-                                    pointAttr = point.series.pointAttribs(point);
-                                }
-                                else {
-                                    pointAttr = point.series.colorAttribs(point);
-                                }
-                                ctx.fillStyle = pointAttr.fill;
-                                if (inverted) {
-                                    ctx.fillRect(yAxis.len - shapeArgs.y + xAxis.left, xAxis.len - shapeArgs.x + yAxis.top, -shapeArgs.height, -shapeArgs.width);
-                                }
-                                else {
-                                    ctx.fillRect(shapeArgs.x + xAxis.left, shapeArgs.y + yAxis.top, shapeArgs.width, shapeArgs.height);
-                                }
-                            }
-                        });
-                        this.canvasToSVG();
-                    }
-                    else {
-                        this.chart.showLoading('Your browser doesn\'t support HTML5 canvas, <br>' +
-                            'please use a modern browser');
-                        // Uncomment this to provide low-level (slow) support in oldIE.
-                        // It will cause script errors on charts with more than a few
-                        // thousand points.
-                        // arguments[0].call(this);
-                    }
-                });
+            points = this.points = [];
+            ctx = this.getContext();
+            series.buildKDTree = noop; // Do not start building while drawing
+            if (this.boostClear) {
+              this.boostClear();
             }
-            extend(LineSeries.prototype, {
-                /**
-                 * Create a hidden canvas to draw the graph on. The contents is later
-                 * copied over to an SVG image element.
-                 *
-                 * @private
-                 * @function Highcharts.Series#getContext
-                 */
-                getContext: function () {
-                    var chart = this.chart,
-                        width = chart.chartWidth,
-                        height = chart.chartHeight,
-                        targetGroup = chart.seriesGroup || this.group,
-                        target = this,
-                        ctx,
-                        swapXY = function (proceed,
-                        x,
-                        y,
-                        a,
-                        b,
-                        c,
-                        d) {
-                            proceed.call(this,
-                        y,
-                        x,
-                        a,
-                        b,
-                        c,
-                        d);
-                    };
-                    if (chart.isChartSeriesBoosting()) {
-                        target = chart;
-                        targetGroup = chart.seriesGroup;
-                    }
-                    ctx = target.ctx;
-                    if (!target.canvas) {
-                        target.canvas = doc.createElement('canvas');
-                        target.renderTarget = chart.renderer
-                            .image('', 0, 0, width, height)
-                            .addClass('highcharts-boost-canvas')
-                            .add(targetGroup);
-                        target.ctx = ctx = target.canvas.getContext('2d');
-                        if (chart.inverted) {
-                            ['moveTo', 'lineTo', 'rect', 'arc'].forEach(function (fn) {
-                                wrap(ctx, fn, swapXY);
-                            });
-                        }
-                        target.boostCopy = function () {
-                            target.renderTarget.attr({
-                                href: target.canvas.toDataURL('image/png')
-                            });
-                        };
-                        target.boostClear = function () {
-                            ctx.clearRect(0, 0, target.canvas.width, target.canvas.height);
-                            if (target === this) {
-                                target.renderTarget.attr({ href: '' });
-                            }
-                        };
-                        target.boostClipRect = chart.renderer.clipRect();
-                        target.renderTarget.clip(target.boostClipRect);
-                    }
-                    else if (!(target instanceof H.Chart)) {
-                        // ctx.clearRect(0, 0, width, height);
-                    }
-                    if (target.canvas.width !== width) {
-                        target.canvas.width = width;
-                    }
-                    if (target.canvas.height !== height) {
-                        target.canvas.height = height;
-                    }
-                    target.renderTarget.attr({
-                        x: 0,
-                        y: 0,
-                        width: width,
-                        height: height,
-                        style: 'pointer-events: none',
-                        href: ''
-                    });
-                    target.boostClipRect.attr(chart.getBoostClipRect(target));
-                    return ctx;
-                },
-                /**
-                 * Draw the canvas image inside an SVG image
-                 *
-                 * @private
-                 * @function Highcharts.Series#canvasToSVG
-                 */
-                canvasToSVG: function () {
-                    if (!this.chart.isChartSeriesBoosting()) {
-                        if (this.boostCopy || this.chart.boostCopy) {
-                            (this.boostCopy || this.chart.boostCopy)();
-                        }
-                    }
-                    else {
-                        if (this.boostClear) {
-                            this.boostClear();
-                        }
-                    }
+            // if (this.canvas) {
+            //     ctx.clearRect(
+            //         0,
+            //         0,
+            //         this.canvas.width,
+            //         this.canvas.height
+            //     );
+            // }
+            if (!this.visible) {
+              return;
+            }
+            // Display a loading indicator
+            if (rawData.length > 99999) {
+              chart.options.loading = merge(loadingOptions, {
+                labelStyle: {
+                  backgroundColor: color("#ffffff").setOpacity(0.75).get(),
+                  padding: "1em",
+                  borderRadius: "0.5em",
                 },
-                cvsLineTo: function (ctx, clientX, plotY) {
-                    ctx.lineTo(clientX, plotY);
+                style: {
+                  backgroundColor: "none",
+                  opacity: 1,
                 },
-                renderCanvas: function () {
-                    var series = this, options = series.options, chart = series.chart, xAxis = this.xAxis, yAxis = this.yAxis, activeBoostSettings = chart.options.boost || {}, boostSettings = {
-                            timeRendering: activeBoostSettings.timeRendering || false,
-                            timeSeriesProcessing: activeBoostSettings.timeSeriesProcessing || false,
-                            timeSetup: activeBoostSettings.timeSetup || false
-                        }, ctx, c = 0, xData = series.processedXData, yData = series.processedYData, rawData = options.data, xExtremes = xAxis.getExtremes(), xMin = xExtremes.min, xMax = xExtremes.max, yExtremes = yAxis.getExtremes(), yMin = yExtremes.min, yMax = yExtremes.max, pointTaken = {}, lastClientX, sampling = !!series.sampling, points, r = options.marker && options.marker.radius, cvsDrawPoint = this.cvsDrawPoint, cvsLineTo = options.lineWidth ? this.cvsLineTo : void 0, cvsMarker = (r && r <= 1 ?
-                            this.cvsMarkerSquare :
-                            this.cvsMarkerCircle), strokeBatch = this.cvsStrokeBatch || 1000, enableMouseTracking = options.enableMouseTracking !== false, lastPoint, threshold = options.threshold, yBottom = yAxis.getThreshold(threshold), hasThreshold = isNumber(threshold), translatedThreshold = yBottom, doFill = this.fill, isRange = (series.pointArrayMap &&
-                            series.pointArrayMap.join(',') === 'low,high'), isStacked = !!options.stacking, cropStart = series.cropStart || 0, loadingOptions = chart.options.loading, requireSorting = series.requireSorting, wasNull, connectNulls = options.connectNulls, useRaw = !xData, minVal, maxVal, minI, maxI, index, sdata = (isStacked ?
-                            series.data :
-                            (xData || rawData)), fillColor = (series.fillOpacity ?
-                            new Color(series.color).setOpacity(pick(options.fillOpacity, 0.75)).get() :
-                            series.color), 
-                        //
-                        stroke = function () {
-                            if (doFill) {
-                                ctx.fillStyle = fillColor;
-                            ctx.fill();
-                        }
-                        else {
-                            ctx.strokeStyle = series.color;
-                            ctx.lineWidth = options.lineWidth;
-                            ctx.stroke();
-                        }
-                    }, 
-                    //
-                    drawPoint = function (clientX, plotY, yBottom, i) {
-                        if (c === 0) {
-                            ctx.beginPath();
-                            if (cvsLineTo) {
-                                ctx.lineJoin = 'round';
-                            }
-                        }
-                        if (chart.scroller &&
-                            series.options.className ===
-                                'highcharts-navigator-series') {
-                            plotY += chart.scroller.top;
-                            if (yBottom) {
-                                yBottom += chart.scroller.top;
-                            }
-                        }
-                        else {
-                            plotY += chart.plotTop;
-                        }
-                        clientX += chart.plotLeft;
-                        if (wasNull) {
-                            ctx.moveTo(clientX, plotY);
-                        }
-                        else {
-                            if (cvsDrawPoint) {
-                                cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint);
-                            }
-                            else if (cvsLineTo) {
-                                cvsLineTo(ctx, clientX, plotY);
-                            }
-                            else if (cvsMarker) {
-                                cvsMarker.call(series, ctx, clientX, plotY, r, i);
-                            }
-                        }
-                        // We need to stroke the line for every 1000 pixels. It will
-                        // crash the browser memory use if we stroke too
-                        // infrequently.
-                        c = c + 1;
-                        if (c === strokeBatch) {
-                            stroke();
-                            c = 0;
-                        }
-                        // Area charts need to keep track of the last point
-                        lastPoint = {
-                            clientX: clientX,
-                            plotY: plotY,
-                            yBottom: yBottom
-                        };
-                    }, 
-                    //
-                    compareX = options.findNearestPointBy === 'x', 
-                    //
-                    xDataFull = (this.xData ||
-                        this.options.xData ||
-                        this.processedXData ||
-                        false), 
-                    //
-                    addKDPoint = function (clientX, plotY, i) {
-                        // Shaves off about 60ms compared to repeated concatenation
-                        index = compareX ? clientX : clientX + ',' + plotY;
-                        // The k-d tree requires series points.
-                        // Reduce the amount of points, since the time to build the
-                        // tree increases exponentially.
-                        if (enableMouseTracking && !pointTaken[index]) {
-                            pointTaken[index] = true;
-                            if (chart.inverted) {
-                                clientX = xAxis.len - clientX;
-                                plotY = yAxis.len - plotY;
-                            }
-                            points.push({
-                                x: xDataFull ?
-                                    xDataFull[cropStart + i] :
-                                    false,
-                                clientX: clientX,
-                                plotX: clientX,
-                                plotY: plotY,
-                                i: cropStart + i
-                            });
-                        }
-                    };
-                    if (this.renderTarget) {
-                        this.renderTarget.attr({ 'href': '' });
-                    }
-                    // If we are zooming out from SVG mode, destroy the graphics
-                    if (this.points || this.graph) {
-                        this.destroyGraphics();
+              });
+              U.clearTimeout(destroyLoadingDiv);
+              chart.showLoading("Drawing...");
+              chart.options.loading = loadingOptions; // reset
+            }
+            if (boostSettings.timeRendering) {
+              console.time("canvas rendering"); // eslint-disable-line no-console
+            }
+            // Loop over the points
+            H.eachAsync(
+              sdata,
+              function (d, i) {
+                var x,
+                  y,
+                  clientX,
+                  plotY,
+                  isNull,
+                  low,
+                  isNextInside = false,
+                  isPrevInside = false,
+                  nx = false,
+                  px = false,
+                  chartDestroyed = typeof chart.index === "undefined",
+                  isYInside = true;
+                if (!chartDestroyed) {
+                  if (useRaw) {
+                    x = d[0];
+                    y = d[1];
+                    if (sdata[i + 1]) {
+                      nx = sdata[i + 1][0];
                     }
-                    // The group
-                    series.plotGroup('group', 'series', series.visible ? 'visible' : 'hidden', options.zIndex, chart.seriesGroup);
-                    series.markerGroup = series.group;
-                    addEvent(series, 'destroy', function () {
-                        // Prevent destroy twice
-                        series.markerGroup = null;
-                    });
-                    points = this.points = [];
-                    ctx = this.getContext();
-                    series.buildKDTree = noop; // Do not start building while drawing
-                    if (this.boostClear) {
-                        this.boostClear();
+                    if (sdata[i - 1]) {
+                      px = sdata[i - 1][0];
                     }
-                    // if (this.canvas) {
-                    //     ctx.clearRect(
-                    //         0,
-                    //         0,
-                    //         this.canvas.width,
-                    //         this.canvas.height
-                    //     );
-                    // }
-                    if (!this.visible) {
-                        return;
+                  } else {
+                    x = d;
+                    y = yData[i];
+                    if (sdata[i + 1]) {
+                      nx = sdata[i + 1];
                     }
-                    // Display a loading indicator
-                    if (rawData.length > 99999) {
-                        chart.options.loading = merge(loadingOptions, {
-                            labelStyle: {
-                                backgroundColor: color('#ffffff').setOpacity(0.75).get(),
-                                padding: '1em',
-                                borderRadius: '0.5em'
-                            },
-                            style: {
-                                backgroundColor: 'none',
-                                opacity: 1
-                            }
-                        });
-                        U.clearTimeout(destroyLoadingDiv);
-                        chart.showLoading('Drawing...');
-                        chart.options.loading = loadingOptions; // reset
+                    if (sdata[i - 1]) {
+                      px = sdata[i - 1];
                     }
-                    if (boostSettings.timeRendering) {
-                        console.time('canvas rendering'); // eslint-disable-line no-console
+                  }
+                  if (nx && nx >= xMin && nx <= xMax) {
+                    isNextInside = true;
+                  }
+                  if (px && px >= xMin && px <= xMax) {
+                    isPrevInside = true;
+                  }
+                  // Resolve low and high for range series
+                  if (isRange) {
+                    if (useRaw) {
+                      y = d.slice(1, 3);
                     }
-                    // Loop over the points
-                    H.eachAsync(sdata, function (d, i) {
-                        var x,
-                            y,
-                            clientX,
-                            plotY,
-                            isNull,
-                            low,
-                            isNextInside = false,
-                            isPrevInside = false,
-                            nx = false,
-                            px = false,
-                            chartDestroyed = typeof chart.index === 'undefined',
-                            isYInside = true;
-                        if (!chartDestroyed) {
-                            if (useRaw) {
-                                x = d[0];
-                                y = d[1];
-                                if (sdata[i + 1]) {
-                                    nx = sdata[i + 1][0];
-                                }
-                                if (sdata[i - 1]) {
-                                    px = sdata[i - 1][0];
-                                }
-                            }
-                            else {
-                                x = d;
-                                y = yData[i];
-                                if (sdata[i + 1]) {
-                                    nx = sdata[i + 1];
-                                }
-                                if (sdata[i - 1]) {
-                                    px = sdata[i - 1];
-                                }
-                            }
-                            if (nx && nx >= xMin && nx <= xMax) {
-                                isNextInside = true;
-                            }
-                            if (px && px >= xMin && px <= xMax) {
-                                isPrevInside = true;
-                            }
-                            // Resolve low and high for range series
-                            if (isRange) {
-                                if (useRaw) {
-                                    y = d.slice(1, 3);
-                                }
-                                low = y[0];
-                                y = y[1];
-                            }
-                            else if (isStacked) {
-                                x = d.x;
-                                y = d.stackY;
-                                low = y - d.y;
-                            }
-                            isNull = y === null;
-                            // Optimize for scatter zooming
-                            if (!requireSorting) {
-                                isYInside = y >= yMin && y <= yMax;
-                            }
-                            if (!isNull &&
-                                ((x >= xMin && x <= xMax && isYInside) ||
-                                    (isNextInside || isPrevInside))) {
-                                clientX = Math.round(xAxis.toPixels(x, true));
-                                if (sampling) {
-                                    if (typeof minI === 'undefined' ||
-                                        clientX === lastClientX) {
-                                        if (!isRange) {
-                                            low = y;
-                                        }
-                                        if (typeof maxI === 'undefined' || y > maxVal) {
-                                            maxVal = y;
-                                            maxI = i;
-                                        }
-                                        if (typeof minI === 'undefined' ||
-                                            low < minVal) {
-                                            minVal = low;
-                                            minI = i;
-                                        }
-                                    }
-                                    // Add points and reset
-                                    if (clientX !== lastClientX) {
-                                        // maxI also a number:
-                                        if (typeof minI !== 'undefined') {
-                                            plotY = yAxis.toPixels(maxVal, true);
-                                            yBottom = yAxis.toPixels(minVal, true);
-                                            drawPoint(clientX, hasThreshold ?
-                                                Math.min(plotY, translatedThreshold) : plotY, hasThreshold ?
-                                                Math.max(yBottom, translatedThreshold) : yBottom, i);
-                                            addKDPoint(clientX, plotY, maxI);
-                                            if (yBottom !== plotY) {
-                                                addKDPoint(clientX, yBottom, minI);
-                                            }
-                                        }
-                                        minI = maxI = void 0;
-                                        lastClientX = clientX;
-                                    }
-                                }
-                                else {
-                                    plotY = Math.round(yAxis.toPixels(y, true));
-                                    drawPoint(clientX, plotY, yBottom, i);
-                                    addKDPoint(clientX, plotY, i);
-                                }
-                            }
-                            wasNull = isNull && !connectNulls;
-                            if (i % CHUNK_SIZE === 0) {
-                                if (series.boostCopy || series.chart.boostCopy) {
-                                    (series.boostCopy || series.chart.boostCopy)();
-                                }
-                            }
+                    low = y[0];
+                    y = y[1];
+                  } else if (isStacked) {
+                    x = d.x;
+                    y = d.stackY;
+                    low = y - d.y;
+                  }
+                  isNull = y === null;
+                  // Optimize for scatter zooming
+                  if (!requireSorting) {
+                    isYInside = y >= yMin && y <= yMax;
+                  }
+                  if (
+                    !isNull &&
+                    ((x >= xMin && x <= xMax && isYInside) ||
+                      isNextInside ||
+                      isPrevInside)
+                  ) {
+                    clientX = Math.round(xAxis.toPixels(x, true));
+                    if (sampling) {
+                      if (
+                        typeof minI === "undefined" ||
+                        clientX === lastClientX
+                      ) {
+                        if (!isRange) {
+                          low = y;
                         }
-                        return !chartDestroyed;
-                    }, function () {
-                        var loadingDiv = chart.loadingDiv,
-                            loadingShown = chart.loadingShown;
-                        stroke();
-                        // if (series.boostCopy || series.chart.boostCopy) {
-                        //     (series.boostCopy || series.chart.boostCopy)();
-                        // }
-                        series.canvasToSVG();
-                        if (boostSettings.timeRendering) {
-                            console.timeEnd('canvas rendering'); // eslint-disable-line no-console
+                        if (typeof maxI === "undefined" || y > maxVal) {
+                          maxVal = y;
+                          maxI = i;
                         }
-                        fireEvent(series, 'renderedCanvas');
-                        // Do not use chart.hideLoading, as it runs JS animation and
-                        // will be blocked by buildKDTree. CSS animation looks good, but
-                        // then it must be deleted in timeout. If we add the module to
-                        // core, change hideLoading so we can skip this block.
-                        if (loadingShown) {
-                            extend(loadingDiv.style, {
-                                transition: 'opacity 250ms',
-                                opacity: 0
-                            });
-                            chart.loadingShown = false;
-                            destroyLoadingDiv = setTimeout(function () {
-                                if (loadingDiv.parentNode) { // In exporting it is falsy
-                                    loadingDiv.parentNode.removeChild(loadingDiv);
-                                }
-                                chart.loadingDiv = chart.loadingSpan = null;
-                            }, 250);
+                        if (typeof minI === "undefined" || low < minVal) {
+                          minVal = low;
+                          minI = i;
                         }
-                        // Go back to prototype, ready to build
-                        delete series.buildKDTree;
-                        series.buildKDTree();
-                        // Don't do async on export, the exportChart, getSVGForExport and
-                        // getSVG methods are not chained for it.
-                    }, chart.renderer.forExport ? Number.MAX_VALUE : void 0);
-                }
-            });
-            seriesTypes.scatter.prototype.cvsMarkerCircle = function (ctx, clientX, plotY, r) {
-                ctx.moveTo(clientX, plotY);
-                ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false);
-            };
-            // Rect is twice as fast as arc, should be used for small markers
-            seriesTypes.scatter.prototype.cvsMarkerSquare = function (ctx, clientX, plotY, r) {
-                ctx.rect(clientX - r, plotY - r, r * 2, r * 2);
-            };
-            seriesTypes.scatter.prototype.fill = true;
-            if (seriesTypes.bubble) {
-                seriesTypes.bubble.prototype.cvsMarkerCircle = function (ctx, clientX, plotY, r, i) {
-                    ctx.moveTo(clientX, plotY);
-                    ctx.arc(clientX, plotY, this.radii && this.radii[i], 0, 2 * Math.PI, false);
-                };
-                seriesTypes.bubble.prototype.cvsStrokeBatch = 1;
-            }
-            extend(seriesTypes.area.prototype, {
-                cvsDrawPoint: function (ctx, clientX, plotY, yBottom, lastPoint) {
-                    if (lastPoint && clientX !== lastPoint.clientX) {
-                        ctx.moveTo(lastPoint.clientX, lastPoint.yBottom);
-                        ctx.lineTo(lastPoint.clientX, lastPoint.plotY);
-                        ctx.lineTo(clientX, plotY);
-                        ctx.lineTo(clientX, yBottom);
+                      }
+                      // Add points and reset
+                      if (clientX !== lastClientX) {
+                        // maxI also a number:
+                        if (typeof minI !== "undefined") {
+                          plotY = yAxis.toPixels(maxVal, true);
+                          yBottom = yAxis.toPixels(minVal, true);
+                          drawPoint(
+                            clientX,
+                            hasThreshold
+                              ? Math.min(plotY, translatedThreshold)
+                              : plotY,
+                            hasThreshold
+                              ? Math.max(yBottom, translatedThreshold)
+                              : yBottom,
+                            i
+                          );
+                          addKDPoint(clientX, plotY, maxI);
+                          if (yBottom !== plotY) {
+                            addKDPoint(clientX, yBottom, minI);
+                          }
+                        }
+                        minI = maxI = void 0;
+                        lastClientX = clientX;
+                      }
+                    } else {
+                      plotY = Math.round(yAxis.toPixels(y, true));
+                      drawPoint(clientX, plotY, yBottom, i);
+                      addKDPoint(clientX, plotY, i);
                     }
-                },
-                fill: true,
-                fillOpacity: true,
-                sampling: true
-            });
-            extend(seriesTypes.column.prototype, {
-                cvsDrawPoint: function (ctx, clientX, plotY, yBottom) {
-                    ctx.rect(clientX - 1, plotY, 1, yBottom - plotY);
-                },
-                fill: true,
-                sampling: true
-            });
-            Chart.prototype.callbacks.push(function (chart) {
-                /**
-                 * @private
-                 */
-                function canvasToSVG() {
-                    if (chart.boostCopy) {
-                        chart.boostCopy();
+                  }
+                  wasNull = isNull && !connectNulls;
+                  if (i % CHUNK_SIZE === 0) {
+                    if (series.boostCopy || series.chart.boostCopy) {
+                      (series.boostCopy || series.chart.boostCopy)();
                     }
+                  }
                 }
-                /**
-                 * @private
-                 */
-                function clear() {
-                    if (chart.renderTarget) {
-                        chart.renderTarget.attr({ href: '' });
-                    }
-                    if (chart.canvas) {
-                        chart.canvas.getContext('2d').clearRect(0, 0, chart.canvas.width, chart.canvas.height);
+                return !chartDestroyed;
+              },
+              function () {
+                var loadingDiv = chart.loadingDiv,
+                  loadingShown = chart.loadingShown;
+                stroke();
+                // if (series.boostCopy || series.chart.boostCopy) {
+                //     (series.boostCopy || series.chart.boostCopy)();
+                // }
+                series.canvasToSVG();
+                if (boostSettings.timeRendering) {
+                  console.timeEnd("canvas rendering"); // eslint-disable-line no-console
+                }
+                fireEvent(series, "renderedCanvas");
+                // Do not use chart.hideLoading, as it runs JS animation and
+                // will be blocked by buildKDTree. CSS animation looks good, but
+                // then it must be deleted in timeout. If we add the module to
+                // core, change hideLoading so we can skip this block.
+                if (loadingShown) {
+                  extend(loadingDiv.style, {
+                    transition: "opacity 250ms",
+                    opacity: 0,
+                  });
+                  chart.loadingShown = false;
+                  destroyLoadingDiv = setTimeout(function () {
+                    if (loadingDiv.parentNode) {
+                      // In exporting it is falsy
+                      loadingDiv.parentNode.removeChild(loadingDiv);
                     }
+                    chart.loadingDiv = chart.loadingSpan = null;
+                  }, 250);
                 }
-                addEvent(chart, 'predraw', clear);
-                addEvent(chart, 'render', canvasToSVG);
-            });
-        };
-
-        return initCanvasBoost;
-    });
-    _registerModule(_modules, 'Extensions/Boost/BoostOverrides.js', [_modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Core/Series/Point.js'], _modules['Core/Utilities.js'], _modules['Extensions/Boost/BoostUtils.js'], _modules['Extensions/Boost/Boostables.js'], _modules['Extensions/Boost/BoostableMap.js']], function (Chart, H, Point, U, butils, boostable, boostableMap) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var addEvent = U.addEvent,
-            error = U.error,
-            getOptions = U.getOptions,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            pick = U.pick,
-            wrap = U.wrap;
-        var boostEnabled = butils.boostEnabled,
-            shouldForceChartSeriesBoosting = butils.shouldForceChartSeriesBoosting,
-            Series = H.Series,
-            seriesTypes = H.seriesTypes,
-            plotOptions = getOptions().plotOptions;
-        /**
-         * Returns true if the chart is in series boost mode.
-         *
-         * @function Highcharts.Chart#isChartSeriesBoosting
-         *
-         * @param {Highcharts.Chart} chart
-         *        the chart to check
-         *
-         * @return {boolean}
-         *         true if the chart is in series boost mode
-         */
-        Chart.prototype.isChartSeriesBoosting = function () {
-            var isSeriesBoosting,
-                threshold = pick(this.options.boost && this.options.boost.seriesThreshold, 50);
-            isSeriesBoosting = threshold <= this.series.length ||
-                shouldForceChartSeriesBoosting(this);
-            return isSeriesBoosting;
-        };
-        /* eslint-disable valid-jsdoc */
-        /**
-         * Get the clip rectangle for a target, either a series or the chart. For the
-         * chart, we need to consider the maximum extent of its Y axes, in case of
-         * Highstock panes and navigator.
-         *
-         * @private
-         * @function Highcharts.Chart#getBoostClipRect
-         *
-         * @param {Highcharts.Chart} target
-         *
-         * @return {Highcharts.BBoxObject}
-         */
-        Chart.prototype.getBoostClipRect = function (target) {
-            var clipBox = {
-                    x: this.plotLeft,
-                    y: this.plotTop,
-                    width: this.plotWidth,
-                    height: this.plotHeight
-                };
-            if (target === this) {
-                this.yAxis.forEach(function (yAxis) {
-                    clipBox.y = Math.min(yAxis.pos, clipBox.y);
-                    clipBox.height = Math.max(yAxis.pos - this.plotTop + yAxis.len, clipBox.height);
-                }, this);
-            }
-            return clipBox;
+                // Go back to prototype, ready to build
+                delete series.buildKDTree;
+                series.buildKDTree();
+                // Don't do async on export, the exportChart, getSVGForExport and
+                // getSVG methods are not chained for it.
+              },
+              chart.renderer.forExport ? Number.MAX_VALUE : void 0
+            );
+          },
+        });
+        seriesTypes.scatter.prototype.cvsMarkerCircle = function (
+          ctx,
+          clientX,
+          plotY,
+          r
+        ) {
+          ctx.moveTo(clientX, plotY);
+          ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false);
         };
-        /**
-         * Return a full Point object based on the index.
-         * The boost module uses stripped point objects for performance reasons.
-         *
-         * @function Highcharts.Series#getPoint
-         *
-         * @param {object|Highcharts.Point} boostPoint
-         *        A stripped-down point object
-         *
-         * @return {Highcharts.Point}
-         *         A Point object as per https://api.highcharts.com/highcharts#Point
-         */
-        Series.prototype.getPoint = function (boostPoint) {
-            var point = boostPoint,
-                xData = (this.xData || this.options.xData || this.processedXData ||
-                    false);
-            if (boostPoint && !(boostPoint instanceof this.pointClass)) {
-                point = (new this.pointClass()).init(// eslint-disable-line new-cap
-                this, this.options.data[boostPoint.i], xData ? xData[boostPoint.i] : void 0);
-                point.category = pick(this.xAxis.categories ?
-                    this.xAxis.categories[point.x] :
-                    point.x, // @todo simplify
-                point.x);
-                point.dist = boostPoint.dist;
-                point.distX = boostPoint.distX;
-                point.plotX = boostPoint.plotX;
-                point.plotY = boostPoint.plotY;
-                point.index = boostPoint.i;
-                point.isInside = this.isPointInside(boostPoint);
-            }
-            return point;
+        // Rect is twice as fast as arc, should be used for small markers
+        seriesTypes.scatter.prototype.cvsMarkerSquare = function (
+          ctx,
+          clientX,
+          plotY,
+          r
+        ) {
+          ctx.rect(clientX - r, plotY - r, r * 2, r * 2);
         };
-        /* eslint-disable no-invalid-this */
-        // Return a point instance from the k-d-tree
-        wrap(Series.prototype, 'searchPoint', function (proceed) {
-            return this.getPoint(proceed.apply(this, [].slice.call(arguments, 1)));
-        });
-        // For inverted series, we need to swap X-Y values before running base methods
-        wrap(Point.prototype, 'haloPath', function (proceed) {
-            var halo,
-                point = this,
-                series = point.series,
-                chart = series.chart,
-                plotX = point.plotX,
-                plotY = point.plotY,
-                inverted = chart.inverted;
-            if (series.isSeriesBoosting && inverted) {
-                point.plotX = series.yAxis.len - plotY;
-                point.plotY = series.xAxis.len - plotX;
-            }
-            halo = proceed.apply(this, Array.prototype.slice.call(arguments, 1));
-            if (series.isSeriesBoosting && inverted) {
-                point.plotX = plotX;
-                point.plotY = plotY;
-            }
-            return halo;
-        });
-        wrap(Series.prototype, 'markerAttribs', function (proceed, point) {
-            var attribs,
-                series = this,
-                chart = series.chart,
-                plotX = point.plotX,
-                plotY = point.plotY,
-                inverted = chart.inverted;
-            if (series.isSeriesBoosting && inverted) {
-                point.plotX = series.yAxis.len - plotY;
-                point.plotY = series.xAxis.len - plotX;
-            }
-            attribs = proceed.apply(this, Array.prototype.slice.call(arguments, 1));
-            if (series.isSeriesBoosting && inverted) {
-                point.plotX = plotX;
-                point.plotY = plotY;
-            }
-            return attribs;
-        });
-        /*
-         * Extend series.destroy to also remove the fake k-d-tree points (#5137).
-         * Normally this is handled by Series.destroy that calls Point.destroy,
-         * but the fake search points are not registered like that.
-         */
-        addEvent(Series, 'destroy', function () {
-            var series = this,
-                chart = series.chart;
-            if (chart.markerGroup === series.markerGroup) {
-                series.markerGroup = null;
-            }
-            if (chart.hoverPoints) {
-                chart.hoverPoints = chart.hoverPoints.filter(function (point) {
-                    return point.series === series;
-                });
-            }
-            if (chart.hoverPoint && chart.hoverPoint.series === series) {
-                chart.hoverPoint = null;
-            }
-        });
-        /*
-         * Do not compute extremes when min and max are set.
-         * If we use this in the core, we can add the hook
-         * to hasExtremes to the methods directly.
-         */
-        wrap(Series.prototype, 'getExtremes', function (proceed) {
-            if (!this.isSeriesBoosting || (!this.hasExtremes || !this.hasExtremes())) {
-                return proceed.apply(this, Array.prototype.slice.call(arguments, 1));
+        seriesTypes.scatter.prototype.fill = true;
+        if (seriesTypes.bubble) {
+          seriesTypes.bubble.prototype.cvsMarkerCircle = function (
+            ctx,
+            clientX,
+            plotY,
+            r,
+            i
+          ) {
+            ctx.moveTo(clientX, plotY);
+            ctx.arc(
+              clientX,
+              plotY,
+              this.radii && this.radii[i],
+              0,
+              2 * Math.PI,
+              false
+            );
+          };
+          seriesTypes.bubble.prototype.cvsStrokeBatch = 1;
+        }
+        extend(seriesTypes.area.prototype, {
+          cvsDrawPoint: function (ctx, clientX, plotY, yBottom, lastPoint) {
+            if (lastPoint && clientX !== lastPoint.clientX) {
+              ctx.moveTo(lastPoint.clientX, lastPoint.yBottom);
+              ctx.lineTo(lastPoint.clientX, lastPoint.plotY);
+              ctx.lineTo(clientX, plotY);
+              ctx.lineTo(clientX, yBottom);
             }
-            return {};
+          },
+          fill: true,
+          fillOpacity: true,
+          sampling: true,
         });
-        /*
-         * Override a bunch of methods the same way. If the number of points is
-         * below the threshold, run the original method. If not, check for a
-         * canvas version or do nothing.
-         *
-         * Note that we're not overriding any of these for heatmaps.
-         */
-        [
-            'translate',
-            'generatePoints',
-            'drawTracker',
-            'drawPoints',
-            'render'
-        ].forEach(function (method) {
-            /**
-             * @private
-             */
-            function branch(proceed) {
-                var letItPass = this.options.stacking &&
-                        (method === 'translate' || method === 'generatePoints');
-                if (!this.isSeriesBoosting ||
-                    letItPass ||
-                    !boostEnabled(this.chart) ||
-                    this.type === 'heatmap' ||
-                    this.type === 'treemap' ||
-                    !boostableMap[this.type] ||
-                    this.options.boostThreshold === 0) {
-                    proceed.call(this);
-                    // If a canvas version of the method exists, like renderCanvas(), run
-                }
-                else if (this[method + 'Canvas']) {
-                    this[method + 'Canvas']();
-                }
-            }
-            wrap(Series.prototype, method, branch);
-            // A special case for some types - their translate method is already wrapped
-            if (method === 'translate') {
-                [
-                    'column',
-                    'bar',
-                    'arearange',
-                    'columnrange',
-                    'heatmap',
-                    'treemap'
-                ].forEach(function (type) {
-                    if (seriesTypes[type]) {
-                        wrap(seriesTypes[type].prototype, method, branch);
-                    }
-                });
-            }
+        extend(seriesTypes.column.prototype, {
+          cvsDrawPoint: function (ctx, clientX, plotY, yBottom) {
+            ctx.rect(clientX - 1, plotY, 1, yBottom - plotY);
+          },
+          fill: true,
+          sampling: true,
         });
-        // If the series is a heatmap or treemap, or if the series is not boosting
-        // do the default behaviour. Otherwise, process if the series has no extremes.
-        wrap(Series.prototype, 'processData', function (proceed) {
-            var series = this,
-                dataToMeasure = this.options.data,
-                firstPoint;
-            /**
-             * Used twice in this function, first on this.options.data, the second
-             * time it runs the check again after processedXData is built.
-             * @private
-             * @todo Check what happens with data grouping
-             */
-            function getSeriesBoosting(data) {
-                return series.chart.isChartSeriesBoosting() || ((data ? data.length : 0) >=
-                    (series.options.boostThreshold || Number.MAX_VALUE));
-            }
-            if (boostEnabled(this.chart) && boostableMap[this.type]) {
-                // If there are no extremes given in the options, we also need to
-                // process the data to read the data extremes. If this is a heatmap, do
-                // default behaviour.
-                if (!getSeriesBoosting(dataToMeasure) || // First pass with options.data
-                    this.type === 'heatmap' ||
-                    this.type === 'treemap' ||
-                    this.options.stacking || // processedYData for the stack (#7481)
-                    !this.hasExtremes ||
-                    !this.hasExtremes(true)) {
-                    proceed.apply(this, Array.prototype.slice.call(arguments, 1));
-                    dataToMeasure = this.processedXData;
-                }
-                // Set the isBoosting flag, second pass with processedXData to see if we
-                // have zoomed.
-                this.isSeriesBoosting = getSeriesBoosting(dataToMeasure);
-                // Enter or exit boost mode
-                if (this.isSeriesBoosting) {
-                    // Force turbo-mode:
-                    firstPoint = this.getFirstValidPoint(this.options.data);
-                    if (!isNumber(firstPoint) && !isArray(firstPoint)) {
-                        error(12, false, this.chart);
-                    }
-                    this.enterBoost();
-                }
-                else if (this.exitBoost) {
-                    this.exitBoost();
-                }
-                // The series type is not boostable
+        Chart.prototype.callbacks.push(function (chart) {
+          /**
+           * @private
+           */
+          function canvasToSVG() {
+            if (chart.boostCopy) {
+              chart.boostCopy();
             }
-            else {
-                proceed.apply(this, Array.prototype.slice.call(arguments, 1));
+          }
+          /**
+           * @private
+           */
+          function clear() {
+            if (chart.renderTarget) {
+              chart.renderTarget.attr({ href: "" });
             }
-        });
-        addEvent(Series, 'hide', function () {
-            if (this.canvas && this.renderTarget) {
-                if (this.ogl) {
-                    this.ogl.clear();
-                }
-                this.boostClear();
+            if (chart.canvas) {
+              chart.canvas
+                .getContext("2d")
+                .clearRect(0, 0, chart.canvas.width, chart.canvas.height);
             }
+          }
+          addEvent(chart, "predraw", clear);
+          addEvent(chart, "render", canvasToSVG);
         });
-        /**
-         * Enter boost mode and apply boost-specific properties.
-         *
-         * @function Highcharts.Series#enterBoost
-         */
-        Series.prototype.enterBoost = function () {
-            this.alteredByBoost = [];
-            // Save the original values, including whether it was an own property or
-            // inherited from the prototype.
-            ['allowDG', 'directTouch', 'stickyTracking'].forEach(function (prop) {
-                this.alteredByBoost.push({
-                    prop: prop,
-                    val: this[prop],
-                    own: Object.hasOwnProperty.call(this, prop)
-                });
-            }, this);
-            this.allowDG = false;
-            this.directTouch = false;
-            this.stickyTracking = true;
-            // Prevent animation when zooming in on boosted series(#13421).
-            this.finishedAnimating = true;
-            // Hide series label if any
-            if (this.labelBySeries) {
-                this.labelBySeries = this.labelBySeries.destroy();
-            }
+      };
+
+      return initCanvasBoost;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/Boost/BoostOverrides.js",
+    [
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Series/Point.js"],
+      _modules["Core/Utilities.js"],
+      _modules["Extensions/Boost/BoostUtils.js"],
+      _modules["Extensions/Boost/Boostables.js"],
+      _modules["Extensions/Boost/BoostableMap.js"],
+    ],
+    function (Chart, H, Point, U, butils, boostable, boostableMap) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        error = U.error,
+        getOptions = U.getOptions,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        pick = U.pick,
+        wrap = U.wrap;
+      var boostEnabled = butils.boostEnabled,
+        shouldForceChartSeriesBoosting = butils.shouldForceChartSeriesBoosting,
+        Series = H.Series,
+        seriesTypes = H.seriesTypes,
+        plotOptions = getOptions().plotOptions;
+      /**
+       * Returns true if the chart is in series boost mode.
+       *
+       * @function Highcharts.Chart#isChartSeriesBoosting
+       *
+       * @param {Highcharts.Chart} chart
+       *        the chart to check
+       *
+       * @return {boolean}
+       *         true if the chart is in series boost mode
+       */
+      Chart.prototype.isChartSeriesBoosting = function () {
+        var isSeriesBoosting,
+          threshold = pick(
+            this.options.boost && this.options.boost.seriesThreshold,
+            50
+          );
+        isSeriesBoosting =
+          threshold <= this.series.length ||
+          shouldForceChartSeriesBoosting(this);
+        return isSeriesBoosting;
+      };
+      /* eslint-disable valid-jsdoc */
+      /**
+       * Get the clip rectangle for a target, either a series or the chart. For the
+       * chart, we need to consider the maximum extent of its Y axes, in case of
+       * Highstock panes and navigator.
+       *
+       * @private
+       * @function Highcharts.Chart#getBoostClipRect
+       *
+       * @param {Highcharts.Chart} target
+       *
+       * @return {Highcharts.BBoxObject}
+       */
+      Chart.prototype.getBoostClipRect = function (target) {
+        var clipBox = {
+          x: this.plotLeft,
+          y: this.plotTop,
+          width: this.plotWidth,
+          height: this.plotHeight,
         };
+        if (target === this) {
+          this.yAxis.forEach(function (yAxis) {
+            clipBox.y = Math.min(yAxis.pos, clipBox.y);
+            clipBox.height = Math.max(
+              yAxis.pos - this.plotTop + yAxis.len,
+              clipBox.height
+            );
+          }, this);
+        }
+        return clipBox;
+      };
+      /**
+       * Return a full Point object based on the index.
+       * The boost module uses stripped point objects for performance reasons.
+       *
+       * @function Highcharts.Series#getPoint
+       *
+       * @param {object|Highcharts.Point} boostPoint
+       *        A stripped-down point object
+       *
+       * @return {Highcharts.Point}
+       *         A Point object as per https://api.highcharts.com/highcharts#Point
+       */
+      Series.prototype.getPoint = function (boostPoint) {
+        var point = boostPoint,
+          xData =
+            this.xData || this.options.xData || this.processedXData || false;
+        if (boostPoint && !(boostPoint instanceof this.pointClass)) {
+          point = new this.pointClass().init(
+            // eslint-disable-line new-cap
+            this,
+            this.options.data[boostPoint.i],
+            xData ? xData[boostPoint.i] : void 0
+          );
+          point.category = pick(
+            this.xAxis.categories ? this.xAxis.categories[point.x] : point.x, // @todo simplify
+            point.x
+          );
+          point.dist = boostPoint.dist;
+          point.distX = boostPoint.distX;
+          point.plotX = boostPoint.plotX;
+          point.plotY = boostPoint.plotY;
+          point.index = boostPoint.i;
+          point.isInside = this.isPointInside(boostPoint);
+        }
+        return point;
+      };
+      /* eslint-disable no-invalid-this */
+      // Return a point instance from the k-d-tree
+      wrap(Series.prototype, "searchPoint", function (proceed) {
+        return this.getPoint(proceed.apply(this, [].slice.call(arguments, 1)));
+      });
+      // For inverted series, we need to swap X-Y values before running base methods
+      wrap(Point.prototype, "haloPath", function (proceed) {
+        var halo,
+          point = this,
+          series = point.series,
+          chart = series.chart,
+          plotX = point.plotX,
+          plotY = point.plotY,
+          inverted = chart.inverted;
+        if (series.isSeriesBoosting && inverted) {
+          point.plotX = series.yAxis.len - plotY;
+          point.plotY = series.xAxis.len - plotX;
+        }
+        halo = proceed.apply(this, Array.prototype.slice.call(arguments, 1));
+        if (series.isSeriesBoosting && inverted) {
+          point.plotX = plotX;
+          point.plotY = plotY;
+        }
+        return halo;
+      });
+      wrap(Series.prototype, "markerAttribs", function (proceed, point) {
+        var attribs,
+          series = this,
+          chart = series.chart,
+          plotX = point.plotX,
+          plotY = point.plotY,
+          inverted = chart.inverted;
+        if (series.isSeriesBoosting && inverted) {
+          point.plotX = series.yAxis.len - plotY;
+          point.plotY = series.xAxis.len - plotX;
+        }
+        attribs = proceed.apply(this, Array.prototype.slice.call(arguments, 1));
+        if (series.isSeriesBoosting && inverted) {
+          point.plotX = plotX;
+          point.plotY = plotY;
+        }
+        return attribs;
+      });
+      /*
+       * Extend series.destroy to also remove the fake k-d-tree points (#5137).
+       * Normally this is handled by Series.destroy that calls Point.destroy,
+       * but the fake search points are not registered like that.
+       */
+      addEvent(Series, "destroy", function () {
+        var series = this,
+          chart = series.chart;
+        if (chart.markerGroup === series.markerGroup) {
+          series.markerGroup = null;
+        }
+        if (chart.hoverPoints) {
+          chart.hoverPoints = chart.hoverPoints.filter(function (point) {
+            return point.series === series;
+          });
+        }
+        if (chart.hoverPoint && chart.hoverPoint.series === series) {
+          chart.hoverPoint = null;
+        }
+      });
+      /*
+       * Do not compute extremes when min and max are set.
+       * If we use this in the core, we can add the hook
+       * to hasExtremes to the methods directly.
+       */
+      wrap(Series.prototype, "getExtremes", function (proceed) {
+        if (
+          !this.isSeriesBoosting ||
+          !this.hasExtremes ||
+          !this.hasExtremes()
+        ) {
+          return proceed.apply(this, Array.prototype.slice.call(arguments, 1));
+        }
+        return {};
+      });
+      /*
+       * Override a bunch of methods the same way. If the number of points is
+       * below the threshold, run the original method. If not, check for a
+       * canvas version or do nothing.
+       *
+       * Note that we're not overriding any of these for heatmaps.
+       */
+      [
+        "translate",
+        "generatePoints",
+        "drawTracker",
+        "drawPoints",
+        "render",
+      ].forEach(function (method) {
         /**
-         * Exit from boost mode and restore non-boost properties.
-         *
-         * @function Highcharts.Series#exitBoost
+         * @private
          */
-        Series.prototype.exitBoost = function () {
-            // Reset instance properties and/or delete instance properties and go back
-            // to prototype
-            (this.alteredByBoost || []).forEach(function (setting) {
-                if (setting.own) {
-                    this[setting.prop] = setting.val;
-                }
-                else {
-                    // Revert to prototype
-                    delete this[setting.prop];
-                }
-            }, this);
-            // Clear previous run
-            if (this.boostClear) {
-                this.boostClear();
+        function branch(proceed) {
+          var letItPass =
+            this.options.stacking &&
+            (method === "translate" || method === "generatePoints");
+          if (
+            !this.isSeriesBoosting ||
+            letItPass ||
+            !boostEnabled(this.chart) ||
+            this.type === "heatmap" ||
+            this.type === "treemap" ||
+            !boostableMap[this.type] ||
+            this.options.boostThreshold === 0
+          ) {
+            proceed.call(this);
+            // If a canvas version of the method exists, like renderCanvas(), run
+          } else if (this[method + "Canvas"]) {
+            this[method + "Canvas"]();
+          }
+        }
+        wrap(Series.prototype, method, branch);
+        // A special case for some types - their translate method is already wrapped
+        if (method === "translate") {
+          [
+            "column",
+            "bar",
+            "arearange",
+            "columnrange",
+            "heatmap",
+            "treemap",
+          ].forEach(function (type) {
+            if (seriesTypes[type]) {
+              wrap(seriesTypes[type].prototype, method, branch);
             }
-        };
+          });
+        }
+      });
+      // If the series is a heatmap or treemap, or if the series is not boosting
+      // do the default behaviour. Otherwise, process if the series has no extremes.
+      wrap(Series.prototype, "processData", function (proceed) {
+        var series = this,
+          dataToMeasure = this.options.data,
+          firstPoint;
         /**
+         * Used twice in this function, first on this.options.data, the second
+         * time it runs the check again after processedXData is built.
          * @private
-         * @function Highcharts.Series#hasExtremes
-         *
-         * @param {boolean} checkX
-         *
-         * @return {boolean}
+         * @todo Check what happens with data grouping
          */
-        Series.prototype.hasExtremes = function (checkX) {
-            var options = this.options,
-                data = options.data,
-                xAxis = this.xAxis && this.xAxis.options,
-                yAxis = this.yAxis && this.yAxis.options,
-                colorAxis = this.colorAxis && this.colorAxis.options;
-            return data.length > (options.boostThreshold || Number.MAX_VALUE) &&
-                // Defined yAxis extremes
-                isNumber(yAxis.min) &&
-                isNumber(yAxis.max) &&
-                // Defined (and required) xAxis extremes
-                (!checkX ||
-                    (isNumber(xAxis.min) && isNumber(xAxis.max))) &&
-                // Defined (e.g. heatmap) colorAxis extremes
-                (!colorAxis ||
-                    (isNumber(colorAxis.min) && isNumber(colorAxis.max)));
-        };
-        /**
-         * If implemented in the core, parts of this can probably be
-         * shared with other similar methods in Highcharts.
-         *
-         * @function Highcharts.Series#destroyGraphics
-         */
-        Series.prototype.destroyGraphics = function () {
-            var series = this,
-                points = this.points,
-                point,
-                i;
-            if (points) {
-                for (i = 0; i < points.length; i = i + 1) {
-                    point = points[i];
-                    if (point && point.destroyElements) {
-                        point.destroyElements(); // #7557
-                    }
-                }
-            }
-            ['graph', 'area', 'tracker'].forEach(function (prop) {
-                if (series[prop]) {
-                    series[prop] = series[prop].destroy();
-                }
-            });
-        };
-        // Set default options
-        boostable.forEach(function (type) {
-            if (plotOptions[type]) {
-                plotOptions[type].boostThreshold = 5000;
-                plotOptions[type].boostData = [];
-                seriesTypes[type].prototype.fillOpacity = true;
-            }
-        });
-
-    });
-    _registerModule(_modules, 'Extensions/Boost/NamedColors.js', [_modules['Core/Color/Color.js']], function (Color) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        // Register color names since GL can't render those directly.
-        // TODO: When supporting modern syntax, make this a const and a named export
-        var defaultHTMLColorMap = {
-                aliceblue: '#f0f8ff',
-                antiquewhite: '#faebd7',
-                aqua: '#00ffff',
-                aquamarine: '#7fffd4',
-                azure: '#f0ffff',
-                beige: '#f5f5dc',
-                bisque: '#ffe4c4',
-                black: '#000000',
-                blanchedalmond: '#ffebcd',
-                blue: '#0000ff',
-                blueviolet: '#8a2be2',
-                brown: '#a52a2a',
-                burlywood: '#deb887',
-                cadetblue: '#5f9ea0',
-                chartreuse: '#7fff00',
-                chocolate: '#d2691e',
-                coral: '#ff7f50',
-                cornflowerblue: '#6495ed',
-                cornsilk: '#fff8dc',
-                crimson: '#dc143c',
-                cyan: '#00ffff',
-                darkblue: '#00008b',
-                darkcyan: '#008b8b',
-                darkgoldenrod: '#b8860b',
-                darkgray: '#a9a9a9',
-                darkgreen: '#006400',
-                darkkhaki: '#bdb76b',
-                darkmagenta: '#8b008b',
-                darkolivegreen: '#556b2f',
-                darkorange: '#ff8c00',
-                darkorchid: '#9932cc',
-                darkred: '#8b0000',
-                darksalmon: '#e9967a',
-                darkseagreen: '#8fbc8f',
-                darkslateblue: '#483d8b',
-                darkslategray: '#2f4f4f',
-                darkturquoise: '#00ced1',
-                darkviolet: '#9400d3',
-                deeppink: '#ff1493',
-                deepskyblue: '#00bfff',
-                dimgray: '#696969',
-                dodgerblue: '#1e90ff',
-                feldspar: '#d19275',
-                firebrick: '#b22222',
-                floralwhite: '#fffaf0',
-                forestgreen: '#228b22',
-                fuchsia: '#ff00ff',
-                gainsboro: '#dcdcdc',
-                ghostwhite: '#f8f8ff',
-                gold: '#ffd700',
-                goldenrod: '#daa520',
-                gray: '#808080',
-                green: '#008000',
-                greenyellow: '#adff2f',
-                honeydew: '#f0fff0',
-                hotpink: '#ff69b4',
-                indianred: '#cd5c5c',
-                indigo: '#4b0082',
-                ivory: '#fffff0',
-                khaki: '#f0e68c',
-                lavender: '#e6e6fa',
-                lavenderblush: '#fff0f5',
-                lawngreen: '#7cfc00',
-                lemonchiffon: '#fffacd',
-                lightblue: '#add8e6',
-                lightcoral: '#f08080',
-                lightcyan: '#e0ffff',
-                lightgoldenrodyellow: '#fafad2',
-                lightgrey: '#d3d3d3',
-                lightgreen: '#90ee90',
-                lightpink: '#ffb6c1',
-                lightsalmon: '#ffa07a',
-                lightseagreen: '#20b2aa',
-                lightskyblue: '#87cefa',
-                lightslateblue: '#8470ff',
-                lightslategray: '#778899',
-                lightsteelblue: '#b0c4de',
-                lightyellow: '#ffffe0',
-                lime: '#00ff00',
-                limegreen: '#32cd32',
-                linen: '#faf0e6',
-                magenta: '#ff00ff',
-                maroon: '#800000',
-                mediumaquamarine: '#66cdaa',
-                mediumblue: '#0000cd',
-                mediumorchid: '#ba55d3',
-                mediumpurple: '#9370d8',
-                mediumseagreen: '#3cb371',
-                mediumslateblue: '#7b68ee',
-                mediumspringgreen: '#00fa9a',
-                mediumturquoise: '#48d1cc',
-                mediumvioletred: '#c71585',
-                midnightblue: '#191970',
-                mintcream: '#f5fffa',
-                mistyrose: '#ffe4e1',
-                moccasin: '#ffe4b5',
-                navajowhite: '#ffdead',
-                navy: '#000080',
-                oldlace: '#fdf5e6',
-                olive: '#808000',
-                olivedrab: '#6b8e23',
-                orange: '#ffa500',
-                orangered: '#ff4500',
-                orchid: '#da70d6',
-                palegoldenrod: '#eee8aa',
-                palegreen: '#98fb98',
-                paleturquoise: '#afeeee',
-                palevioletred: '#d87093',
-                papayawhip: '#ffefd5',
-                peachpuff: '#ffdab9',
-                peru: '#cd853f',
-                pink: '#ffc0cb',
-                plum: '#dda0dd',
-                powderblue: '#b0e0e6',
-                purple: '#800080',
-                red: '#ff0000',
-                rosybrown: '#bc8f8f',
-                royalblue: '#4169e1',
-                saddlebrown: '#8b4513',
-                salmon: '#fa8072',
-                sandybrown: '#f4a460',
-                seagreen: '#2e8b57',
-                seashell: '#fff5ee',
-                sienna: '#a0522d',
-                silver: '#c0c0c0',
-                skyblue: '#87ceeb',
-                slateblue: '#6a5acd',
-                slategray: '#708090',
-                snow: '#fffafa',
-                springgreen: '#00ff7f',
-                steelblue: '#4682b4',
-                tan: '#d2b48c',
-                teal: '#008080',
-                thistle: '#d8bfd8',
-                tomato: '#ff6347',
-                turquoise: '#40e0d0',
-                violet: '#ee82ee',
-                violetred: '#d02090',
-                wheat: '#f5deb3',
-                white: '#ffffff',
-                whitesmoke: '#f5f5f5',
-                yellow: '#ffff00',
-                yellowgreen: '#9acd32'
-            };
-        Color.names = defaultHTMLColorMap;
-
-        return defaultHTMLColorMap;
-    });
-    _registerModule(_modules, 'Extensions/Boost/Boost.js', [_modules['Extensions/Boost/BoostUtils.js'], _modules['Extensions/Boost/BoostInit.js'], _modules['Extensions/BoostCanvas.js'], _modules['Core/Utilities.js']], function (butils, init, initCanvasBoost, U) {
-        /* *
-         *
-         *  Copyright (c) 2019-2020 Highsoft AS
-         *
-         *  Boost module: stripped-down renderer for higher performance
-         *
-         *  License: highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var error = U.error;
-        // These need to be fixed when we support named imports
-        var hasWebGLSupport = butils.hasWebGLSupport;
-        if (!hasWebGLSupport()) {
-            if (typeof initCanvasBoost !== 'undefined') {
-                // Fallback to canvas boost
-                initCanvasBoost();
+        function getSeriesBoosting(data) {
+          return (
+            series.chart.isChartSeriesBoosting() ||
+            (data ? data.length : 0) >=
+              (series.options.boostThreshold || Number.MAX_VALUE)
+          );
+        }
+        if (boostEnabled(this.chart) && boostableMap[this.type]) {
+          // If there are no extremes given in the options, we also need to
+          // process the data to read the data extremes. If this is a heatmap, do
+          // default behaviour.
+          if (
+            !getSeriesBoosting(dataToMeasure) || // First pass with options.data
+            this.type === "heatmap" ||
+            this.type === "treemap" ||
+            this.options.stacking || // processedYData for the stack (#7481)
+            !this.hasExtremes ||
+            !this.hasExtremes(true)
+          ) {
+            proceed.apply(this, Array.prototype.slice.call(arguments, 1));
+            dataToMeasure = this.processedXData;
+          }
+          // Set the isBoosting flag, second pass with processedXData to see if we
+          // have zoomed.
+          this.isSeriesBoosting = getSeriesBoosting(dataToMeasure);
+          // Enter or exit boost mode
+          if (this.isSeriesBoosting) {
+            // Force turbo-mode:
+            firstPoint = this.getFirstValidPoint(this.options.data);
+            if (!isNumber(firstPoint) && !isArray(firstPoint)) {
+              error(12, false, this.chart);
             }
-            else {
-                error(26);
+            this.enterBoost();
+          } else if (this.exitBoost) {
+            this.exitBoost();
+          }
+          // The series type is not boostable
+        } else {
+          proceed.apply(this, Array.prototype.slice.call(arguments, 1));
+        }
+      });
+      addEvent(Series, "hide", function () {
+        if (this.canvas && this.renderTarget) {
+          if (this.ogl) {
+            this.ogl.clear();
+          }
+          this.boostClear();
+        }
+      });
+      /**
+       * Enter boost mode and apply boost-specific properties.
+       *
+       * @function Highcharts.Series#enterBoost
+       */
+      Series.prototype.enterBoost = function () {
+        this.alteredByBoost = [];
+        // Save the original values, including whether it was an own property or
+        // inherited from the prototype.
+        ["allowDG", "directTouch", "stickyTracking"].forEach(function (prop) {
+          this.alteredByBoost.push({
+            prop: prop,
+            val: this[prop],
+            own: Object.hasOwnProperty.call(this, prop),
+          });
+        }, this);
+        this.allowDG = false;
+        this.directTouch = false;
+        this.stickyTracking = true;
+        // Prevent animation when zooming in on boosted series(#13421).
+        this.finishedAnimating = true;
+        // Hide series label if any
+        if (this.labelBySeries) {
+          this.labelBySeries = this.labelBySeries.destroy();
+        }
+      };
+      /**
+       * Exit from boost mode and restore non-boost properties.
+       *
+       * @function Highcharts.Series#exitBoost
+       */
+      Series.prototype.exitBoost = function () {
+        // Reset instance properties and/or delete instance properties and go back
+        // to prototype
+        (this.alteredByBoost || []).forEach(function (setting) {
+          if (setting.own) {
+            this[setting.prop] = setting.val;
+          } else {
+            // Revert to prototype
+            delete this[setting.prop];
+          }
+        }, this);
+        // Clear previous run
+        if (this.boostClear) {
+          this.boostClear();
+        }
+      };
+      /**
+       * @private
+       * @function Highcharts.Series#hasExtremes
+       *
+       * @param {boolean} checkX
+       *
+       * @return {boolean}
+       */
+      Series.prototype.hasExtremes = function (checkX) {
+        var options = this.options,
+          data = options.data,
+          xAxis = this.xAxis && this.xAxis.options,
+          yAxis = this.yAxis && this.yAxis.options,
+          colorAxis = this.colorAxis && this.colorAxis.options;
+        return (
+          data.length > (options.boostThreshold || Number.MAX_VALUE) &&
+          // Defined yAxis extremes
+          isNumber(yAxis.min) &&
+          isNumber(yAxis.max) &&
+          // Defined (and required) xAxis extremes
+          (!checkX || (isNumber(xAxis.min) && isNumber(xAxis.max))) &&
+          // Defined (e.g. heatmap) colorAxis extremes
+          (!colorAxis || (isNumber(colorAxis.min) && isNumber(colorAxis.max)))
+        );
+      };
+      /**
+       * If implemented in the core, parts of this can probably be
+       * shared with other similar methods in Highcharts.
+       *
+       * @function Highcharts.Series#destroyGraphics
+       */
+      Series.prototype.destroyGraphics = function () {
+        var series = this,
+          points = this.points,
+          point,
+          i;
+        if (points) {
+          for (i = 0; i < points.length; i = i + 1) {
+            point = points[i];
+            if (point && point.destroyElements) {
+              point.destroyElements(); // #7557
             }
+          }
         }
-        else {
-            // WebGL support is alright, and we're good to go.
-            init();
+        ["graph", "area", "tracker"].forEach(function (prop) {
+          if (series[prop]) {
+            series[prop] = series[prop].destroy();
+          }
+        });
+      };
+      // Set default options
+      boostable.forEach(function (type) {
+        if (plotOptions[type]) {
+          plotOptions[type].boostThreshold = 5000;
+          plotOptions[type].boostData = [];
+          seriesTypes[type].prototype.fillOpacity = true;
         }
+      });
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/Boost/NamedColors.js",
+    [_modules["Core/Color/Color.js"]],
+    function (Color) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      // Register color names since GL can't render those directly.
+      // TODO: When supporting modern syntax, make this a const and a named export
+      var defaultHTMLColorMap = {
+        aliceblue: "#f0f8ff",
+        antiquewhite: "#faebd7",
+        aqua: "#00ffff",
+        aquamarine: "#7fffd4",
+        azure: "#f0ffff",
+        beige: "#f5f5dc",
+        bisque: "#ffe4c4",
+        black: "#000000",
+        blanchedalmond: "#ffebcd",
+        blue: "#0000ff",
+        blueviolet: "#8a2be2",
+        brown: "#a52a2a",
+        burlywood: "#deb887",
+        cadetblue: "#5f9ea0",
+        chartreuse: "#7fff00",
+        chocolate: "#d2691e",
+        coral: "#ff7f50",
+        cornflowerblue: "#6495ed",
+        cornsilk: "#fff8dc",
+        crimson: "#dc143c",
+        cyan: "#00ffff",
+        darkblue: "#00008b",
+        darkcyan: "#008b8b",
+        darkgoldenrod: "#b8860b",
+        darkgray: "#a9a9a9",
+        darkgreen: "#006400",
+        darkkhaki: "#bdb76b",
+        darkmagenta: "#8b008b",
+        darkolivegreen: "#556b2f",
+        darkorange: "#ff8c00",
+        darkorchid: "#9932cc",
+        darkred: "#8b0000",
+        darksalmon: "#e9967a",
+        darkseagreen: "#8fbc8f",
+        darkslateblue: "#483d8b",
+        darkslategray: "#2f4f4f",
+        darkturquoise: "#00ced1",
+        darkviolet: "#9400d3",
+        deeppink: "#ff1493",
+        deepskyblue: "#00bfff",
+        dimgray: "#696969",
+        dodgerblue: "#1e90ff",
+        feldspar: "#d19275",
+        firebrick: "#b22222",
+        floralwhite: "#fffaf0",
+        forestgreen: "#228b22",
+        fuchsia: "#ff00ff",
+        gainsboro: "#dcdcdc",
+        ghostwhite: "#f8f8ff",
+        gold: "#ffd700",
+        goldenrod: "#daa520",
+        gray: "#808080",
+        green: "#008000",
+        greenyellow: "#adff2f",
+        honeydew: "#f0fff0",
+        hotpink: "#ff69b4",
+        indianred: "#cd5c5c",
+        indigo: "#4b0082",
+        ivory: "#fffff0",
+        khaki: "#f0e68c",
+        lavender: "#e6e6fa",
+        lavenderblush: "#fff0f5",
+        lawngreen: "#7cfc00",
+        lemonchiffon: "#fffacd",
+        lightblue: "#add8e6",
+        lightcoral: "#f08080",
+        lightcyan: "#e0ffff",
+        lightgoldenrodyellow: "#fafad2",
+        lightgrey: "#d3d3d3",
+        lightgreen: "#90ee90",
+        lightpink: "#ffb6c1",
+        lightsalmon: "#ffa07a",
+        lightseagreen: "#20b2aa",
+        lightskyblue: "#87cefa",
+        lightslateblue: "#8470ff",
+        lightslategray: "#778899",
+        lightsteelblue: "#b0c4de",
+        lightyellow: "#ffffe0",
+        lime: "#00ff00",
+        limegreen: "#32cd32",
+        linen: "#faf0e6",
+        magenta: "#ff00ff",
+        maroon: "#800000",
+        mediumaquamarine: "#66cdaa",
+        mediumblue: "#0000cd",
+        mediumorchid: "#ba55d3",
+        mediumpurple: "#9370d8",
+        mediumseagreen: "#3cb371",
+        mediumslateblue: "#7b68ee",
+        mediumspringgreen: "#00fa9a",
+        mediumturquoise: "#48d1cc",
+        mediumvioletred: "#c71585",
+        midnightblue: "#191970",
+        mintcream: "#f5fffa",
+        mistyrose: "#ffe4e1",
+        moccasin: "#ffe4b5",
+        navajowhite: "#ffdead",
+        navy: "#000080",
+        oldlace: "#fdf5e6",
+        olive: "#808000",
+        olivedrab: "#6b8e23",
+        orange: "#ffa500",
+        orangered: "#ff4500",
+        orchid: "#da70d6",
+        palegoldenrod: "#eee8aa",
+        palegreen: "#98fb98",
+        paleturquoise: "#afeeee",
+        palevioletred: "#d87093",
+        papayawhip: "#ffefd5",
+        peachpuff: "#ffdab9",
+        peru: "#cd853f",
+        pink: "#ffc0cb",
+        plum: "#dda0dd",
+        powderblue: "#b0e0e6",
+        purple: "#800080",
+        red: "#ff0000",
+        rosybrown: "#bc8f8f",
+        royalblue: "#4169e1",
+        saddlebrown: "#8b4513",
+        salmon: "#fa8072",
+        sandybrown: "#f4a460",
+        seagreen: "#2e8b57",
+        seashell: "#fff5ee",
+        sienna: "#a0522d",
+        silver: "#c0c0c0",
+        skyblue: "#87ceeb",
+        slateblue: "#6a5acd",
+        slategray: "#708090",
+        snow: "#fffafa",
+        springgreen: "#00ff7f",
+        steelblue: "#4682b4",
+        tan: "#d2b48c",
+        teal: "#008080",
+        thistle: "#d8bfd8",
+        tomato: "#ff6347",
+        turquoise: "#40e0d0",
+        violet: "#ee82ee",
+        violetred: "#d02090",
+        wheat: "#f5deb3",
+        white: "#ffffff",
+        whitesmoke: "#f5f5f5",
+        yellow: "#ffff00",
+        yellowgreen: "#9acd32",
+      };
+      Color.names = defaultHTMLColorMap;
 
-    });
-    _registerModule(_modules, 'masters/modules/boost.src.js', [], function () {
-
-
-        /* *
-         * Options for the Boost module. The Boost module allows certain series types
-         * to be rendered by WebGL instead of the default SVG. This allows hundreds of
-         * thousands of data points to be rendered in milliseconds. In addition to the
-         * WebGL rendering it saves time by skipping processing and inspection of the
-         * data wherever possible. This introduces some limitations to what features are
-         * available in boost mode. See [the docs](
-         * https://www.highcharts.com/docs/advanced-chart-features/boost-module) for
-         * details.
-         *
-         * In addition to the global `boost` option, each series has a
-         * [boostThreshold](#plotOptions.series.boostThreshold) that defines when the
-         * boost should kick in.
-         *
-         * Requires the `modules/boost.js` module.
-         *
-         * @sample {highstock} highcharts/boost/line-series-heavy-stock
-         *         Stock chart
-         * @sample {highstock} highcharts/boost/line-series-heavy-dynamic
-         *         Dynamic stock chart
-         * @sample highcharts/boost/line
-         *         Line chart
-         * @sample highcharts/boost/line-series-heavy
-         *         Line chart with hundreds of series
-         * @sample highcharts/boost/scatter
-         *         Scatter chart
-         * @sample highcharts/boost/area
-         *         Area chart
-         * @sample highcharts/boost/arearange
-         *         Area range chart
-         * @sample highcharts/boost/column
-         *         Column chart
-         * @sample highcharts/boost/columnrange
-         *         Column range chart
-         * @sample highcharts/boost/bubble
-         *         Bubble chart
-         * @sample highcharts/boost/heatmap
-         *         Heat map
-         * @sample highcharts/boost/treemap
-         *         Tree map
-         *
-         * @product   highcharts highstock
-         * @apioption boost
-         * */
-
-
-    });
-}));
\ No newline at end of file
+      return defaultHTMLColorMap;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/Boost/Boost.js",
+    [
+      _modules["Extensions/Boost/BoostUtils.js"],
+      _modules["Extensions/Boost/BoostInit.js"],
+      _modules["Extensions/BoostCanvas.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (butils, init, initCanvasBoost, U) {
+      /* *
+       *
+       *  Copyright (c) 2019-2020 Highsoft AS
+       *
+       *  Boost module: stripped-down renderer for higher performance
+       *
+       *  License: highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var error = U.error;
+      // These need to be fixed when we support named imports
+      var hasWebGLSupport = butils.hasWebGLSupport;
+      if (!hasWebGLSupport()) {
+        if (typeof initCanvasBoost !== "undefined") {
+          // Fallback to canvas boost
+          initCanvasBoost();
+        } else {
+          error(26);
+        }
+      } else {
+        // WebGL support is alright, and we're good to go.
+        init();
+      }
+    }
+  );
+  _registerModule(_modules, "masters/modules/boost.src.js", [], function () {
+    /* *
+     * Options for the Boost module. The Boost module allows certain series types
+     * to be rendered by WebGL instead of the default SVG. This allows hundreds of
+     * thousands of data points to be rendered in milliseconds. In addition to the
+     * WebGL rendering it saves time by skipping processing and inspection of the
+     * data wherever possible. This introduces some limitations to what features are
+     * available in boost mode. See [the docs](
+     * https://www.highcharts.com/docs/advanced-chart-features/boost-module) for
+     * details.
+     *
+     * In addition to the global `boost` option, each series has a
+     * [boostThreshold](#plotOptions.series.boostThreshold) that defines when the
+     * boost should kick in.
+     *
+     * Requires the `modules/boost.js` module.
+     *
+     * @sample {highstock} highcharts/boost/line-series-heavy-stock
+     *         Stock chart
+     * @sample {highstock} highcharts/boost/line-series-heavy-dynamic
+     *         Dynamic stock chart
+     * @sample highcharts/boost/line
+     *         Line chart
+     * @sample highcharts/boost/line-series-heavy
+     *         Line chart with hundreds of series
+     * @sample highcharts/boost/scatter
+     *         Scatter chart
+     * @sample highcharts/boost/area
+     *         Area chart
+     * @sample highcharts/boost/arearange
+     *         Area range chart
+     * @sample highcharts/boost/column
+     *         Column chart
+     * @sample highcharts/boost/columnrange
+     *         Column range chart
+     * @sample highcharts/boost/bubble
+     *         Bubble chart
+     * @sample highcharts/boost/heatmap
+     *         Heat map
+     * @sample highcharts/boost/treemap
+     *         Tree map
+     *
+     * @product   highcharts highstock
+     * @apioption boost
+     * */
+  });
+});
diff --git a/notemyprogress/js/highcharts/modules/gantt.src.js b/notemyprogress/js/highcharts/modules/gantt.src.js
index 77f2cc2bcdb517bf47ec56fac0dfa9393b17f956..70ec70fdb0d23cd2932e3e19a4c9ca8c4a4455ac 100644
--- a/notemyprogress/js/highcharts/modules/gantt.src.js
+++ b/notemyprogress/js/highcharts/modules/gantt.src.js
@@ -7,1313 +7,1406 @@
  *
  * License: www.highcharts.com/license
  */
-'use strict';
+"use strict";
 (function (factory) {
-    if (typeof module === 'object' && module.exports) {
-        factory['default'] = factory;
-        module.exports = factory;
-    } else if (typeof define === 'function' && define.amd) {
-        define('highcharts/modules/gantt', ['highcharts'], function (Highcharts) {
-            factory(Highcharts);
-            factory.Highcharts = Highcharts;
-            return factory;
-        });
-    } else {
-        factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
+  if (typeof module === "object" && module.exports) {
+    factory["default"] = factory;
+    module.exports = factory;
+  } else if (typeof define === "function" && define.amd) {
+    define("highcharts/modules/gantt", ["highcharts"], function (Highcharts) {
+      factory(Highcharts);
+      factory.Highcharts = Highcharts;
+      return factory;
+    });
+  } else {
+    factory(typeof Highcharts !== "undefined" ? Highcharts : undefined);
+  }
+})(function (Highcharts) {
+  var _modules = Highcharts ? Highcharts._modules : {};
+  function _registerModule(obj, path, args, fn) {
+    if (!obj.hasOwnProperty(path)) {
+      obj[path] = fn.apply(null, args);
     }
-}(function (Highcharts) {
-    var _modules = Highcharts ? Highcharts._modules : {};
-    function _registerModule(obj, path, args, fn) {
-        if (!obj.hasOwnProperty(path)) {
-            obj[path] = fn.apply(null, args);
+  }
+  _registerModule(
+    _modules,
+    "Gantt/Tree.js",
+    [_modules["Core/Utilities.js"]],
+    function (U) {
+      /* *
+       *
+       *  (c) 2016-2020 Highsoft AS
+       *
+       *  Authors: Jon Arild Nygard
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      /* eslint no-console: 0 */
+      var extend = U.extend,
+        isNumber = U.isNumber,
+        pick = U.pick;
+      /**
+       * Creates an object map from parent id to childrens index.
+       *
+       * @private
+       * @function Highcharts.Tree#getListOfParents
+       *
+       * @param {Array<*>} data
+       *        List of points set in options. `Array.parent` is parent id of point.
+       *
+       * @param {Array<string>} ids
+       *        List of all point ids.
+       *
+       * @return {Highcharts.Dictionary<Array<*>>}
+       *         Map from parent id to children index in data
+       */
+      var getListOfParents = function (data, ids) {
+        var listOfParents = data.reduce(function (prev, curr) {
+            var parent = pick(curr.parent, "");
+            if (typeof prev[parent] === "undefined") {
+              prev[parent] = [];
+            }
+            prev[parent].push(curr);
+            return prev;
+          }, {}),
+          parents = Object.keys(listOfParents);
+        // If parent does not exist, hoist parent to root of tree.
+        parents.forEach(function (parent, list) {
+          var children = listOfParents[parent];
+          if (parent !== "" && ids.indexOf(parent) === -1) {
+            children.forEach(function (child) {
+              list[""].push(child);
+            });
+            delete list[parent];
+          }
+        });
+        return listOfParents;
+      };
+      var getNode = function (
+        id,
+        parent,
+        level,
+        data,
+        mapOfIdToChildren,
+        options
+      ) {
+        var descendants = 0,
+          height = 0,
+          after = options && options.after,
+          before = options && options.before,
+          node = {
+            data: data,
+            depth: level - 1,
+            id: id,
+            level: level,
+            parent: parent,
+          },
+          start,
+          end,
+          children;
+        // Allow custom logic before the children has been created.
+        if (typeof before === "function") {
+          before(node, options);
+        }
+        // Call getNode recursively on the children. Calulate the height of the
+        // node, and the number of descendants.
+        children = (mapOfIdToChildren[id] || []).map(function (child) {
+          var node = getNode(
+              child.id,
+              id,
+              level + 1,
+              child,
+              mapOfIdToChildren,
+              options
+            ),
+            childStart = child.start,
+            childEnd = child.milestone === true ? childStart : child.end;
+          // Start should be the lowest child.start.
+          start = !isNumber(start) || childStart < start ? childStart : start;
+          // End should be the largest child.end.
+          // If child is milestone, then use start as end.
+          end = !isNumber(end) || childEnd > end ? childEnd : end;
+          descendants = descendants + 1 + node.descendants;
+          height = Math.max(node.height + 1, height);
+          return node;
+        });
+        // Calculate start and end for point if it is not already explicitly set.
+        if (data) {
+          data.start = pick(data.start, start);
+          data.end = pick(data.end, end);
+        }
+        extend(node, {
+          children: children,
+          descendants: descendants,
+          height: height,
+        });
+        // Allow custom logic after the children has been created.
+        if (typeof after === "function") {
+          after(node, options);
         }
+        return node;
+      };
+      var getTree = function (data, options) {
+        var ids = data.map(function (d) {
+            return d.id;
+          }),
+          mapOfIdToChildren = getListOfParents(data, ids);
+        return getNode("", null, 1, null, mapOfIdToChildren, options);
+      };
+      var Tree = {
+        getListOfParents: getListOfParents,
+        getNode: getNode,
+        getTree: getTree,
+      };
+
+      return Tree;
     }
-    _registerModule(_modules, 'Gantt/Tree.js', [_modules['Core/Utilities.js']], function (U) {
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/TreeGridTick.js",
+    [_modules["Core/Utilities.js"]],
+    function (U) {
+      /* *
+       *
+       *  (c) 2016 Highsoft AS
+       *  Authors: Jon Arild Nygard
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        isObject = U.isObject,
+        isNumber = U.isNumber,
+        pick = U.pick,
+        wrap = U.wrap;
+      /**
+       * @private
+       */
+      var TreeGridTick;
+      (function (TreeGridTick) {
         /* *
          *
-         *  (c) 2016-2020 Highsoft AS
+         *  Interfaces
+         *
+         * */
+        /* *
          *
-         *  Authors: Jon Arild Nygard
+         *  Variables
          *
-         *  License: www.highcharts.com/license
+         * */
+        var applied = false;
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Functions
          *
          * */
-        /* eslint no-console: 0 */
-        var extend = U.extend,
-            isNumber = U.isNumber,
-            pick = U.pick;
         /**
-         * Creates an object map from parent id to childrens index.
-         *
          * @private
-         * @function Highcharts.Tree#getListOfParents
-         *
-         * @param {Array<*>} data
-         *        List of points set in options. `Array.parent` is parent id of point.
-         *
-         * @param {Array<string>} ids
-         *        List of all point ids.
-         *
-         * @return {Highcharts.Dictionary<Array<*>>}
-         *         Map from parent id to children index in data
          */
-        var getListOfParents = function (data,
-            ids) {
-                var listOfParents = data.reduce(function (prev,
-            curr) {
-                    var parent = pick(curr.parent, '');
-                if (typeof prev[parent] === 'undefined') {
-                    prev[parent] = [];
-                }
-                prev[parent].push(curr);
-                return prev;
-            }, {}), parents = Object.keys(listOfParents);
-            // If parent does not exist, hoist parent to root of tree.
-            parents.forEach(function (parent, list) {
-                var children = listOfParents[parent];
-                if ((parent !== '') && (ids.indexOf(parent) === -1)) {
-                    children.forEach(function (child) {
-                        list[''].push(child);
-                    });
-                    delete list[parent];
-                }
-            });
-            return listOfParents;
-        };
-        var getNode = function (id,
-            parent,
-            level,
-            data,
-            mapOfIdToChildren,
-            options) {
-                var descendants = 0,
-            height = 0,
-            after = options && options.after,
-            before = options && options.before,
-            node = {
-                    data: data,
-                    depth: level - 1,
-                    id: id,
-                    level: level,
-                    parent: parent
-                },
-            start,
-            end,
-            children;
-            // Allow custom logic before the children has been created.
-            if (typeof before === 'function') {
-                before(node, options);
-            }
-            // Call getNode recursively on the children. Calulate the height of the
-            // node, and the number of descendants.
-            children = ((mapOfIdToChildren[id] || [])).map(function (child) {
-                var node = getNode(child.id,
-                    id, (level + 1),
-                    child,
-                    mapOfIdToChildren,
-                    options),
-                    childStart = child.start,
-                    childEnd = (child.milestone === true ?
-                        childStart :
-                        child.end);
-                // Start should be the lowest child.start.
-                start = ((!isNumber(start) || childStart < start) ?
-                    childStart :
-                    start);
-                // End should be the largest child.end.
-                // If child is milestone, then use start as end.
-                end = ((!isNumber(end) || childEnd > end) ?
-                    childEnd :
-                    end);
-                descendants = descendants + 1 + node.descendants;
-                height = Math.max(node.height + 1, height);
-                return node;
-            });
-            // Calculate start and end for point if it is not already explicitly set.
-            if (data) {
-                data.start = pick(data.start, start);
-                data.end = pick(data.end, end);
-            }
-            extend(node, {
-                children: children,
-                descendants: descendants,
-                height: height
-            });
-            // Allow custom logic after the children has been created.
-            if (typeof after === 'function') {
-                after(node, options);
-            }
-            return node;
-        };
-        var getTree = function (data,
-            options) {
-                var ids = data.map(function (d) {
-                    return d.id;
-            }), mapOfIdToChildren = getListOfParents(data, ids);
-            return getNode('', null, 1, null, mapOfIdToChildren, options);
-        };
-        var Tree = {
-                getListOfParents: getListOfParents,
-                getNode: getNode,
-                getTree: getTree
+        function compose(TickClass) {
+          if (!applied) {
+            addEvent(TickClass, "init", onInit);
+            wrap(TickClass.prototype, "getLabelPosition", wrapGetLabelPosition);
+            wrap(TickClass.prototype, "renderLabel", wrapRenderLabel);
+            // backwards compatibility
+            TickClass.prototype.collapse = function (redraw) {
+              this.treeGrid.collapse(redraw);
             };
-
-        return Tree;
-    });
-    _registerModule(_modules, 'Core/Axis/TreeGridTick.js', [_modules['Core/Utilities.js']], function (U) {
-        /* *
-         *
-         *  (c) 2016 Highsoft AS
-         *  Authors: Jon Arild Nygard
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            isObject = U.isObject,
-            isNumber = U.isNumber,
-            pick = U.pick,
-            wrap = U.wrap;
+            TickClass.prototype.expand = function (redraw) {
+              this.treeGrid.expand(redraw);
+            };
+            TickClass.prototype.toggleCollapse = function (redraw) {
+              this.treeGrid.toggleCollapse(redraw);
+            };
+            applied = true;
+          }
+        }
+        TreeGridTick.compose = compose;
         /**
          * @private
          */
-        var TreeGridTick;
-        (function (TreeGridTick) {
-            /* *
-             *
-             *  Interfaces
-             *
-             * */
-            /* *
-             *
-             *  Variables
-             *
-             * */
-            var applied = false;
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * @private
-             */
-            function compose(TickClass) {
-                if (!applied) {
-                    addEvent(TickClass, 'init', onInit);
-                    wrap(TickClass.prototype, 'getLabelPosition', wrapGetLabelPosition);
-                    wrap(TickClass.prototype, 'renderLabel', wrapRenderLabel);
-                    // backwards compatibility
-                    TickClass.prototype.collapse = function (redraw) {
-                        this.treeGrid.collapse(redraw);
-                    };
-                    TickClass.prototype.expand = function (redraw) {
-                        this.treeGrid.expand(redraw);
-                    };
-                    TickClass.prototype.toggleCollapse = function (redraw) {
-                        this.treeGrid.toggleCollapse(redraw);
-                    };
-                    applied = true;
-                }
-            }
-            TreeGridTick.compose = compose;
-            /**
-             * @private
-             */
-            function onInit() {
-                var tick = this;
-                if (!tick.treeGrid) {
-                    tick.treeGrid = new Additions(tick);
-                }
-            }
-            /**
-             * @private
-             */
-            function onTickHover(label) {
-                label.addClass('highcharts-treegrid-node-active');
-                if (!label.renderer.styledMode) {
-                    label.css({
-                        textDecoration: 'underline'
-                    });
-                }
-            }
-            /**
-             * @private
-             */
-            function onTickHoverExit(label, options) {
-                var css = defined(options.style) ? options.style : {};
-                label.removeClass('highcharts-treegrid-node-active');
-                if (!label.renderer.styledMode) {
-                    label.css({ textDecoration: css.textDecoration });
-                }
-            }
-            /**
-             * @private
-             */
-            function renderLabelIcon(tick, params) {
-                var treeGrid = tick.treeGrid,
-                    isNew = !treeGrid.labelIcon,
-                    renderer = params.renderer,
-                    labelBox = params.xy,
-                    options = params.options,
-                    width = options.width,
-                    height = options.height,
-                    iconCenter = {
-                        x: labelBox.x - (width / 2) - options.padding,
-                        y: labelBox.y - (height / 2)
-                    },
-                    rotation = params.collapsed ? 90 : 180,
-                    shouldRender = params.show && isNumber(iconCenter.y);
-                var icon = treeGrid.labelIcon;
-                if (!icon) {
-                    treeGrid.labelIcon = icon = renderer
-                        .path(renderer.symbols[options.type](options.x, options.y, width, height))
-                        .addClass('highcharts-label-icon')
-                        .add(params.group);
-                }
-                // Set the new position, and show or hide
-                if (!shouldRender) {
-                    icon.attr({ y: -9999 }); // #1338
-                }
-                // Presentational attributes
-                if (!renderer.styledMode) {
-                    icon
-                        .attr({
-                        'stroke-width': 1,
-                        'fill': pick(params.color, '#666666')
-                    })
-                        .css({
-                        cursor: 'pointer',
-                        stroke: options.lineColor,
-                        strokeWidth: options.lineWidth
-                    });
-                }
-                // Update the icon positions
-                icon[isNew ? 'attr' : 'animate']({
-                    translateX: iconCenter.x,
-                    translateY: iconCenter.y,
-                    rotation: rotation
-                });
-            }
-            /**
-             * @private
-             */
-            function wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {
-                var tick = this,
-                    lbOptions = pick(tick.options && tick.options.labels,
-                    labelOptions),
-                    pos = tick.pos,
-                    axis = tick.axis,
-                    options = axis.options,
-                    isTreeGrid = options.type === 'treegrid',
-                    result = proceed.apply(tick,
-                    [x,
-                    y,
-                    label,
-                    horiz,
-                    lbOptions,
-                    tickmarkOffset,
-                    index,
-                    step]);
-                var symbolOptions,
-                    indentation,
-                    mapOfPosToGridNode,
-                    node,
-                    level;
-                if (isTreeGrid) {
-                    symbolOptions = (lbOptions && isObject(lbOptions.symbol, true) ?
-                        lbOptions.symbol :
-                        {});
-                    indentation = (lbOptions && isNumber(lbOptions.indentation) ?
-                        lbOptions.indentation :
-                        0);
-                    mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;
-                    node = mapOfPosToGridNode && mapOfPosToGridNode[pos];
-                    level = (node && node.depth) || 1;
-                    result.x += (
-                    // Add space for symbols
-                    ((symbolOptions.width) + (symbolOptions.padding * 2)) +
-                        // Apply indentation
-                        ((level - 1) * indentation));
-                }
-                return result;
-            }
-            /**
-             * @private
-             */
-            function wrapRenderLabel(proceed) {
-                var tick = this, pos = tick.pos, axis = tick.axis, label = tick.label, mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode, options = axis.options, labelOptions = pick(tick.options && tick.options.labels, options && options.labels), symbolOptions = (labelOptions && isObject(labelOptions.symbol, true) ?
-                        labelOptions.symbol :
-                        {}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], level = node && node.depth, isTreeGrid = options.type === 'treegrid', shouldRender = axis.tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', styledMode = axis.chart.styledMode;
-                var collapsed,
-                    addClassName,
-                    removeClassName;
-                if (isTreeGrid && node) {
-                    // Add class name for hierarchical styling.
-                    if (label &&
-                        label.element) {
-                        label.addClass(prefixClassName + 'level-' + level);
-                    }
-                }
-                proceed.apply(tick, Array.prototype.slice.call(arguments, 1));
-                if (isTreeGrid &&
-                    label &&
-                    label.element &&
-                    node &&
-                    node.descendants &&
-                    node.descendants > 0) {
-                    collapsed = axis.treeGrid.isCollapsed(node);
-                    renderLabelIcon(tick, {
-                        color: !styledMode && label.styles && label.styles.color || '',
-                        collapsed: collapsed,
-                        group: label.parentGroup,
-                        options: symbolOptions,
-                        renderer: label.renderer,
-                        show: shouldRender,
-                        xy: label.xy
-                    });
-                    // Add class name for the node.
-                    addClassName = prefixClassName +
-                        (collapsed ? 'collapsed' : 'expanded');
-                    removeClassName = prefixClassName +
-                        (collapsed ? 'expanded' : 'collapsed');
-                    label
-                        .addClass(addClassName)
-                        .removeClass(removeClassName);
-                    if (!styledMode) {
-                        label.css({
-                            cursor: 'pointer'
-                        });
-                    }
-                    // Add events to both label text and icon
-                    [label, tick.treeGrid.labelIcon].forEach(function (object) {
-                        if (object && !object.attachedTreeGridEvents) {
-                            // On hover
-                            addEvent(object.element, 'mouseover', function () {
-                                onTickHover(label);
-                            });
-                            // On hover out
-                            addEvent(object.element, 'mouseout', function () {
-                                onTickHoverExit(label, labelOptions);
-                            });
-                            addEvent(object.element, 'click', function () {
-                                tick.treeGrid.toggleCollapse();
-                            });
-                            object.attachedTreeGridEvents = true;
-                        }
-                    });
-                }
-            }
-            /* *
-             *
-             *  Classes
-             *
-             * */
-            /**
-             * @private
-             * @class
-             */
-            var Additions = /** @class */ (function () {
-                    /* *
-                     *
-                     *  Constructors
-                     *
-                     * */
-                    /**
-                     * @private
-                     */
-                    function Additions(tick) {
-                        this.tick = tick;
-                }
-                /* *
-                 *
-                 *  Functions
-                 *
-                 * */
-                /**
-                 * Collapse the grid cell. Used when axis is of type treegrid.
-                 *
-                 * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
-                 *
-                 * @private
-                 * @function Highcharts.Tick#collapse
-                 *
-                 * @param {boolean} [redraw=true]
-                 * Whether to redraw the chart or wait for an explicit call to
-                 * {@link Highcharts.Chart#redraw}
-                 */
-                Additions.prototype.collapse = function (redraw) {
-                    var tick = this.tick,
-                        axis = tick.axis,
-                        brokenAxis = axis.brokenAxis;
-                    if (brokenAxis &&
-                        axis.treeGrid.mapOfPosToGridNode) {
-                        var pos = tick.pos,
-                            node = axis.treeGrid.mapOfPosToGridNode[pos],
-                            breaks = axis.treeGrid.collapse(node);
-                        brokenAxis.setBreaks(breaks, pick(redraw, true));
-                    }
-                };
-                /**
-                 * Expand the grid cell. Used when axis is of type treegrid.
-                 *
-                 * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
-                 *
-                 * @private
-                 * @function Highcharts.Tick#expand
-                 *
-                 * @param {boolean} [redraw=true]
-                 * Whether to redraw the chart or wait for an explicit call to
-                 * {@link Highcharts.Chart#redraw}
-                 */
-                Additions.prototype.expand = function (redraw) {
-                    var tick = this.tick,
-                        axis = tick.axis,
-                        brokenAxis = axis.brokenAxis;
-                    if (brokenAxis &&
-                        axis.treeGrid.mapOfPosToGridNode) {
-                        var pos = tick.pos,
-                            node = axis.treeGrid.mapOfPosToGridNode[pos],
-                            breaks = axis.treeGrid.expand(node);
-                        brokenAxis.setBreaks(breaks, pick(redraw, true));
-                    }
-                };
-                /**
-                 * Toggle the collapse/expand state of the grid cell. Used when axis is
-                 * of type treegrid.
-                 *
-                 * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
-                 *
-                 * @private
-                 * @function Highcharts.Tick#toggleCollapse
-                 *
-                 * @param {boolean} [redraw=true]
-                 * Whether to redraw the chart or wait for an explicit call to
-                 * {@link Highcharts.Chart#redraw}
-                 */
-                Additions.prototype.toggleCollapse = function (redraw) {
-                    var tick = this.tick,
-                        axis = tick.axis,
-                        brokenAxis = axis.brokenAxis;
-                    if (brokenAxis &&
-                        axis.treeGrid.mapOfPosToGridNode) {
-                        var pos = tick.pos,
-                            node = axis.treeGrid.mapOfPosToGridNode[pos],
-                            breaks = axis.treeGrid.toggleCollapse(node);
-                        brokenAxis.setBreaks(breaks, pick(redraw, true));
-                    }
-                };
-                return Additions;
-            }());
-            TreeGridTick.Additions = Additions;
-        })(TreeGridTick || (TreeGridTick = {}));
-
-        return TreeGridTick;
-    });
-    _registerModule(_modules, 'Mixins/TreeSeries.js', [_modules['Core/Color/Color.js'], _modules['Core/Utilities.js']], function (Color, U) {
-        /* *
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var extend = U.extend,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            isObject = U.isObject,
-            merge = U.merge,
-            pick = U.pick;
-        var isBoolean = function (x) {
-                return typeof x === 'boolean';
-        }, isFn = function (x) {
-            return typeof x === 'function';
-        };
-        /* eslint-disable valid-jsdoc */
+        function onInit() {
+          var tick = this;
+          if (!tick.treeGrid) {
+            tick.treeGrid = new Additions(tick);
+          }
+        }
         /**
-         * @todo Combine buildTree and buildNode with setTreeValues
-         * @todo Remove logic from Treemap and make it utilize this mixin.
          * @private
          */
-        var setTreeValues = function setTreeValues(tree,
-            options) {
-                var before = options.before,
-            idRoot = options.idRoot,
-            mapIdToNode = options.mapIdToNode,
-            nodeRoot = mapIdToNode[idRoot],
-            levelIsConstant = (isBoolean(options.levelIsConstant) ?
-                    options.levelIsConstant :
-                    true),
-            points = options.points,
-            point = points[tree.i],
-            optionsPoint = point && point.options || {},
-            childrenTotal = 0,
-            children = [],
-            value;
-            extend(tree, {
-                levelDynamic: tree.level - (levelIsConstant ? 0 : nodeRoot.level),
-                name: pick(point && point.name, ''),
-                visible: (idRoot === tree.id ||
-                    (isBoolean(options.visible) ? options.visible : false))
-            });
-            if (isFn(before)) {
-                tree = before(tree, options);
-            }
-            // First give the children some values
-            tree.children.forEach(function (child, i) {
-                var newOptions = extend({},
-                    options);
-                extend(newOptions, {
-                    index: i,
-                    siblings: tree.children.length,
-                    visible: tree.visible
-                });
-                child = setTreeValues(child, newOptions);
-                children.push(child);
-                if (child.visible) {
-                    childrenTotal += child.val;
-                }
-            });
-            tree.visible = childrenTotal > 0 || tree.visible;
-            // Set the values
-            value = pick(optionsPoint.value, childrenTotal);
-            extend(tree, {
-                children: children,
-                childrenTotal: childrenTotal,
-                isLeaf: tree.visible && !childrenTotal,
-                val: value
+        function onTickHover(label) {
+          label.addClass("highcharts-treegrid-node-active");
+          if (!label.renderer.styledMode) {
+            label.css({
+              textDecoration: "underline",
             });
-            return tree;
-        };
+          }
+        }
         /**
          * @private
          */
-        var getColor = function getColor(node,
-            options) {
-                var index = options.index,
-            mapOptionsToLevel = options.mapOptionsToLevel,
-            parentColor = options.parentColor,
-            parentColorIndex = options.parentColorIndex,
-            series = options.series,
-            colors = options.colors,
-            siblings = options.siblings,
-            points = series.points,
-            getColorByPoint,
-            chartOptionsChart = series.chart.options.chart,
-            point,
-            level,
-            colorByPoint,
-            colorIndexByPoint,
-            color,
-            colorIndex;
-            /**
-             * @private
-             */
-            function variation(color) {
-                var colorVariation = level && level.colorVariation;
-                if (colorVariation) {
-                    if (colorVariation.key === 'brightness') {
-                        return Color.parse(color).brighten(colorVariation.to * (index / siblings)).get();
-                    }
-                }
-                return color;
-            }
-            if (node) {
-                point = points[node.i];
-                level = mapOptionsToLevel[node.level] || {};
-                getColorByPoint = point && level.colorByPoint;
-                if (getColorByPoint) {
-                    colorIndexByPoint = point.index % (colors ?
-                        colors.length :
-                        chartOptionsChart.colorCount);
-                    colorByPoint = colors && colors[colorIndexByPoint];
-                }
-                // Select either point color, level color or inherited color.
-                if (!series.chart.styledMode) {
-                    color = pick(point && point.options.color, level && level.color, colorByPoint, parentColor && variation(parentColor), series.color);
-                }
-                colorIndex = pick(point && point.options.colorIndex, level && level.colorIndex, colorIndexByPoint, parentColorIndex, options.colorIndex);
-            }
-            return {
-                color: color,
-                colorIndex: colorIndex
-            };
-        };
+        function onTickHoverExit(label, options) {
+          var css = defined(options.style) ? options.style : {};
+          label.removeClass("highcharts-treegrid-node-active");
+          if (!label.renderer.styledMode) {
+            label.css({ textDecoration: css.textDecoration });
+          }
+        }
+        /**
+         * @private
+         */
+        function renderLabelIcon(tick, params) {
+          var treeGrid = tick.treeGrid,
+            isNew = !treeGrid.labelIcon,
+            renderer = params.renderer,
+            labelBox = params.xy,
+            options = params.options,
+            width = options.width,
+            height = options.height,
+            iconCenter = {
+              x: labelBox.x - width / 2 - options.padding,
+              y: labelBox.y - height / 2,
+            },
+            rotation = params.collapsed ? 90 : 180,
+            shouldRender = params.show && isNumber(iconCenter.y);
+          var icon = treeGrid.labelIcon;
+          if (!icon) {
+            treeGrid.labelIcon = icon = renderer
+              .path(
+                renderer.symbols[options.type](
+                  options.x,
+                  options.y,
+                  width,
+                  height
+                )
+              )
+              .addClass("highcharts-label-icon")
+              .add(params.group);
+          }
+          // Set the new position, and show or hide
+          if (!shouldRender) {
+            icon.attr({ y: -9999 }); // #1338
+          }
+          // Presentational attributes
+          if (!renderer.styledMode) {
+            icon
+              .attr({
+                "stroke-width": 1,
+                fill: pick(params.color, "#666666"),
+              })
+              .css({
+                cursor: "pointer",
+                stroke: options.lineColor,
+                strokeWidth: options.lineWidth,
+              });
+          }
+          // Update the icon positions
+          icon[isNew ? "attr" : "animate"]({
+            translateX: iconCenter.x,
+            translateY: iconCenter.y,
+            rotation: rotation,
+          });
+        }
+        /**
+         * @private
+         */
+        function wrapGetLabelPosition(
+          proceed,
+          x,
+          y,
+          label,
+          horiz,
+          labelOptions,
+          tickmarkOffset,
+          index,
+          step
+        ) {
+          var tick = this,
+            lbOptions = pick(tick.options && tick.options.labels, labelOptions),
+            pos = tick.pos,
+            axis = tick.axis,
+            options = axis.options,
+            isTreeGrid = options.type === "treegrid",
+            result = proceed.apply(tick, [
+              x,
+              y,
+              label,
+              horiz,
+              lbOptions,
+              tickmarkOffset,
+              index,
+              step,
+            ]);
+          var symbolOptions, indentation, mapOfPosToGridNode, node, level;
+          if (isTreeGrid) {
+            symbolOptions =
+              lbOptions && isObject(lbOptions.symbol, true)
+                ? lbOptions.symbol
+                : {};
+            indentation =
+              lbOptions && isNumber(lbOptions.indentation)
+                ? lbOptions.indentation
+                : 0;
+            mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;
+            node = mapOfPosToGridNode && mapOfPosToGridNode[pos];
+            level = (node && node.depth) || 1;
+            result.x +=
+              // Add space for symbols
+              symbolOptions.width +
+              symbolOptions.padding * 2 +
+              // Apply indentation
+              (level - 1) * indentation;
+          }
+          return result;
+        }
         /**
-         * Creates a map from level number to its given options.
+         * @private
+         */
+        function wrapRenderLabel(proceed) {
+          var tick = this,
+            pos = tick.pos,
+            axis = tick.axis,
+            label = tick.label,
+            mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode,
+            options = axis.options,
+            labelOptions = pick(
+              tick.options && tick.options.labels,
+              options && options.labels
+            ),
+            symbolOptions =
+              labelOptions && isObject(labelOptions.symbol, true)
+                ? labelOptions.symbol
+                : {},
+            node = mapOfPosToGridNode && mapOfPosToGridNode[pos],
+            level = node && node.depth,
+            isTreeGrid = options.type === "treegrid",
+            shouldRender = axis.tickPositions.indexOf(pos) > -1,
+            prefixClassName = "highcharts-treegrid-node-",
+            styledMode = axis.chart.styledMode;
+          var collapsed, addClassName, removeClassName;
+          if (isTreeGrid && node) {
+            // Add class name for hierarchical styling.
+            if (label && label.element) {
+              label.addClass(prefixClassName + "level-" + level);
+            }
+          }
+          proceed.apply(tick, Array.prototype.slice.call(arguments, 1));
+          if (
+            isTreeGrid &&
+            label &&
+            label.element &&
+            node &&
+            node.descendants &&
+            node.descendants > 0
+          ) {
+            collapsed = axis.treeGrid.isCollapsed(node);
+            renderLabelIcon(tick, {
+              color: (!styledMode && label.styles && label.styles.color) || "",
+              collapsed: collapsed,
+              group: label.parentGroup,
+              options: symbolOptions,
+              renderer: label.renderer,
+              show: shouldRender,
+              xy: label.xy,
+            });
+            // Add class name for the node.
+            addClassName =
+              prefixClassName + (collapsed ? "collapsed" : "expanded");
+            removeClassName =
+              prefixClassName + (collapsed ? "expanded" : "collapsed");
+            label.addClass(addClassName).removeClass(removeClassName);
+            if (!styledMode) {
+              label.css({
+                cursor: "pointer",
+              });
+            }
+            // Add events to both label text and icon
+            [label, tick.treeGrid.labelIcon].forEach(function (object) {
+              if (object && !object.attachedTreeGridEvents) {
+                // On hover
+                addEvent(object.element, "mouseover", function () {
+                  onTickHover(label);
+                });
+                // On hover out
+                addEvent(object.element, "mouseout", function () {
+                  onTickHoverExit(label, labelOptions);
+                });
+                addEvent(object.element, "click", function () {
+                  tick.treeGrid.toggleCollapse();
+                });
+                object.attachedTreeGridEvents = true;
+              }
+            });
+          }
+        }
+        /* *
          *
+         *  Classes
+         *
+         * */
+        /**
          * @private
-         * @function getLevelOptions
-         * @param {object} params
-         *        Object containing parameters.
-         *        - `defaults` Object containing default options. The default options
-         *           are merged with the userOptions to get the final options for a
-         *           specific level.
-         *        - `from` The lowest level number.
-         *        - `levels` User options from series.levels.
-         *        - `to` The highest level number.
-         * @return {Highcharts.Dictionary<object>|null}
-         *         Returns a map from level number to its given options.
+         * @class
          */
-        var getLevelOptions = function getLevelOptions(params) {
-                var result = null,
-            defaults,
-            converted,
-            i,
-            from,
-            to,
-            levels;
-            if (isObject(params)) {
-                result = {};
-                from = isNumber(params.from) ? params.from : 1;
-                levels = params.levels;
-                converted = {};
-                defaults = isObject(params.defaults) ? params.defaults : {};
-                if (isArray(levels)) {
-                    converted = levels.reduce(function (obj, item) {
-                        var level,
-                            levelIsConstant,
-                            options;
-                        if (isObject(item) && isNumber(item.level)) {
-                            options = merge({}, item);
-                            levelIsConstant = (isBoolean(options.levelIsConstant) ?
-                                options.levelIsConstant :
-                                defaults.levelIsConstant);
-                            // Delete redundant properties.
-                            delete options.levelIsConstant;
-                            delete options.level;
-                            // Calculate which level these options apply to.
-                            level = item.level + (levelIsConstant ? 0 : from - 1);
-                            if (isObject(obj[level])) {
-                                extend(obj[level], options);
-                            }
-                            else {
-                                obj[level] = options;
-                            }
-                        }
-                        return obj;
-                    }, {});
-                }
-                to = isNumber(params.to) ? params.to : 1;
-                for (i = 0; i <= to; i++) {
-                    result[i] = merge({}, defaults, isObject(converted[i]) ? converted[i] : {});
-                }
+        var Additions = /** @class */ (function () {
+          /* *
+           *
+           *  Constructors
+           *
+           * */
+          /**
+           * @private
+           */
+          function Additions(tick) {
+            this.tick = tick;
+          }
+          /* *
+           *
+           *  Functions
+           *
+           * */
+          /**
+           * Collapse the grid cell. Used when axis is of type treegrid.
+           *
+           * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
+           *
+           * @private
+           * @function Highcharts.Tick#collapse
+           *
+           * @param {boolean} [redraw=true]
+           * Whether to redraw the chart or wait for an explicit call to
+           * {@link Highcharts.Chart#redraw}
+           */
+          Additions.prototype.collapse = function (redraw) {
+            var tick = this.tick,
+              axis = tick.axis,
+              brokenAxis = axis.brokenAxis;
+            if (brokenAxis && axis.treeGrid.mapOfPosToGridNode) {
+              var pos = tick.pos,
+                node = axis.treeGrid.mapOfPosToGridNode[pos],
+                breaks = axis.treeGrid.collapse(node);
+              brokenAxis.setBreaks(breaks, pick(redraw, true));
+            }
+          };
+          /**
+           * Expand the grid cell. Used when axis is of type treegrid.
+           *
+           * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
+           *
+           * @private
+           * @function Highcharts.Tick#expand
+           *
+           * @param {boolean} [redraw=true]
+           * Whether to redraw the chart or wait for an explicit call to
+           * {@link Highcharts.Chart#redraw}
+           */
+          Additions.prototype.expand = function (redraw) {
+            var tick = this.tick,
+              axis = tick.axis,
+              brokenAxis = axis.brokenAxis;
+            if (brokenAxis && axis.treeGrid.mapOfPosToGridNode) {
+              var pos = tick.pos,
+                node = axis.treeGrid.mapOfPosToGridNode[pos],
+                breaks = axis.treeGrid.expand(node);
+              brokenAxis.setBreaks(breaks, pick(redraw, true));
             }
-            return result;
+          };
+          /**
+           * Toggle the collapse/expand state of the grid cell. Used when axis is
+           * of type treegrid.
+           *
+           * @see gantt/treegrid-axis/collapsed-dynamically/demo.js
+           *
+           * @private
+           * @function Highcharts.Tick#toggleCollapse
+           *
+           * @param {boolean} [redraw=true]
+           * Whether to redraw the chart or wait for an explicit call to
+           * {@link Highcharts.Chart#redraw}
+           */
+          Additions.prototype.toggleCollapse = function (redraw) {
+            var tick = this.tick,
+              axis = tick.axis,
+              brokenAxis = axis.brokenAxis;
+            if (brokenAxis && axis.treeGrid.mapOfPosToGridNode) {
+              var pos = tick.pos,
+                node = axis.treeGrid.mapOfPosToGridNode[pos],
+                breaks = axis.treeGrid.toggleCollapse(node);
+              brokenAxis.setBreaks(breaks, pick(redraw, true));
+            }
+          };
+          return Additions;
+        })();
+        TreeGridTick.Additions = Additions;
+      })(TreeGridTick || (TreeGridTick = {}));
+
+      return TreeGridTick;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Mixins/TreeSeries.js",
+    [_modules["Core/Color/Color.js"], _modules["Core/Utilities.js"]],
+    function (Color, U) {
+      /* *
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var extend = U.extend,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        isObject = U.isObject,
+        merge = U.merge,
+        pick = U.pick;
+      var isBoolean = function (x) {
+          return typeof x === "boolean";
+        },
+        isFn = function (x) {
+          return typeof x === "function";
         };
+      /* eslint-disable valid-jsdoc */
+      /**
+       * @todo Combine buildTree and buildNode with setTreeValues
+       * @todo Remove logic from Treemap and make it utilize this mixin.
+       * @private
+       */
+      var setTreeValues = function setTreeValues(tree, options) {
+        var before = options.before,
+          idRoot = options.idRoot,
+          mapIdToNode = options.mapIdToNode,
+          nodeRoot = mapIdToNode[idRoot],
+          levelIsConstant = isBoolean(options.levelIsConstant)
+            ? options.levelIsConstant
+            : true,
+          points = options.points,
+          point = points[tree.i],
+          optionsPoint = (point && point.options) || {},
+          childrenTotal = 0,
+          children = [],
+          value;
+        extend(tree, {
+          levelDynamic: tree.level - (levelIsConstant ? 0 : nodeRoot.level),
+          name: pick(point && point.name, ""),
+          visible:
+            idRoot === tree.id ||
+            (isBoolean(options.visible) ? options.visible : false),
+        });
+        if (isFn(before)) {
+          tree = before(tree, options);
+        }
+        // First give the children some values
+        tree.children.forEach(function (child, i) {
+          var newOptions = extend({}, options);
+          extend(newOptions, {
+            index: i,
+            siblings: tree.children.length,
+            visible: tree.visible,
+          });
+          child = setTreeValues(child, newOptions);
+          children.push(child);
+          if (child.visible) {
+            childrenTotal += child.val;
+          }
+        });
+        tree.visible = childrenTotal > 0 || tree.visible;
+        // Set the values
+        value = pick(optionsPoint.value, childrenTotal);
+        extend(tree, {
+          children: children,
+          childrenTotal: childrenTotal,
+          isLeaf: tree.visible && !childrenTotal,
+          val: value,
+        });
+        return tree;
+      };
+      /**
+       * @private
+       */
+      var getColor = function getColor(node, options) {
+        var index = options.index,
+          mapOptionsToLevel = options.mapOptionsToLevel,
+          parentColor = options.parentColor,
+          parentColorIndex = options.parentColorIndex,
+          series = options.series,
+          colors = options.colors,
+          siblings = options.siblings,
+          points = series.points,
+          getColorByPoint,
+          chartOptionsChart = series.chart.options.chart,
+          point,
+          level,
+          colorByPoint,
+          colorIndexByPoint,
+          color,
+          colorIndex;
         /**
-         * Update the rootId property on the series. Also makes sure that it is
-         * accessible to exporting.
-         *
          * @private
-         * @function updateRootId
-         *
-         * @param {object} series
-         *        The series to operate on.
-         *
-         * @return {string}
-         *         Returns the resulting rootId after update.
          */
-        var updateRootId = function (series) {
-                var rootId,
-            options;
-            if (isObject(series)) {
-                // Get the series options.
-                options = isObject(series.options) ? series.options : {};
-                // Calculate the rootId.
-                rootId = pick(series.rootNode, options.rootId, '');
-                // Set rootId on series.userOptions to pick it up in exporting.
-                if (isObject(series.userOptions)) {
-                    series.userOptions.rootId = rootId;
-                }
-                // Set rootId on series to pick it up on next update.
-                series.rootNode = rootId;
+        function variation(color) {
+          var colorVariation = level && level.colorVariation;
+          if (colorVariation) {
+            if (colorVariation.key === "brightness") {
+              return Color.parse(color)
+                .brighten(colorVariation.to * (index / siblings))
+                .get();
             }
-            return rootId;
+          }
+          return color;
+        }
+        if (node) {
+          point = points[node.i];
+          level = mapOptionsToLevel[node.level] || {};
+          getColorByPoint = point && level.colorByPoint;
+          if (getColorByPoint) {
+            colorIndexByPoint =
+              point.index %
+              (colors ? colors.length : chartOptionsChart.colorCount);
+            colorByPoint = colors && colors[colorIndexByPoint];
+          }
+          // Select either point color, level color or inherited color.
+          if (!series.chart.styledMode) {
+            color = pick(
+              point && point.options.color,
+              level && level.color,
+              colorByPoint,
+              parentColor && variation(parentColor),
+              series.color
+            );
+          }
+          colorIndex = pick(
+            point && point.options.colorIndex,
+            level && level.colorIndex,
+            colorIndexByPoint,
+            parentColorIndex,
+            options.colorIndex
+          );
+        }
+        return {
+          color: color,
+          colorIndex: colorIndex,
         };
-        var result = {
-                getColor: getColor,
-                getLevelOptions: getLevelOptions,
-                setTreeValues: setTreeValues,
-                updateRootId: updateRootId
-            };
-
+      };
+      /**
+       * Creates a map from level number to its given options.
+       *
+       * @private
+       * @function getLevelOptions
+       * @param {object} params
+       *        Object containing parameters.
+       *        - `defaults` Object containing default options. The default options
+       *           are merged with the userOptions to get the final options for a
+       *           specific level.
+       *        - `from` The lowest level number.
+       *        - `levels` User options from series.levels.
+       *        - `to` The highest level number.
+       * @return {Highcharts.Dictionary<object>|null}
+       *         Returns a map from level number to its given options.
+       */
+      var getLevelOptions = function getLevelOptions(params) {
+        var result = null,
+          defaults,
+          converted,
+          i,
+          from,
+          to,
+          levels;
+        if (isObject(params)) {
+          result = {};
+          from = isNumber(params.from) ? params.from : 1;
+          levels = params.levels;
+          converted = {};
+          defaults = isObject(params.defaults) ? params.defaults : {};
+          if (isArray(levels)) {
+            converted = levels.reduce(function (obj, item) {
+              var level, levelIsConstant, options;
+              if (isObject(item) && isNumber(item.level)) {
+                options = merge({}, item);
+                levelIsConstant = isBoolean(options.levelIsConstant)
+                  ? options.levelIsConstant
+                  : defaults.levelIsConstant;
+                // Delete redundant properties.
+                delete options.levelIsConstant;
+                delete options.level;
+                // Calculate which level these options apply to.
+                level = item.level + (levelIsConstant ? 0 : from - 1);
+                if (isObject(obj[level])) {
+                  extend(obj[level], options);
+                } else {
+                  obj[level] = options;
+                }
+              }
+              return obj;
+            }, {});
+          }
+          to = isNumber(params.to) ? params.to : 1;
+          for (i = 0; i <= to; i++) {
+            result[i] = merge(
+              {},
+              defaults,
+              isObject(converted[i]) ? converted[i] : {}
+            );
+          }
+        }
         return result;
-    });
-    _registerModule(_modules, 'Core/Axis/GridAxis.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Globals.js'], _modules['Core/Options.js'], _modules['Core/Axis/Tick.js'], _modules['Core/Utilities.js']], function (Axis, H, O, Tick, U) {
+      };
+      /**
+       * Update the rootId property on the series. Also makes sure that it is
+       * accessible to exporting.
+       *
+       * @private
+       * @function updateRootId
+       *
+       * @param {object} series
+       *        The series to operate on.
+       *
+       * @return {string}
+       *         Returns the resulting rootId after update.
+       */
+      var updateRootId = function (series) {
+        var rootId, options;
+        if (isObject(series)) {
+          // Get the series options.
+          options = isObject(series.options) ? series.options : {};
+          // Calculate the rootId.
+          rootId = pick(series.rootNode, options.rootId, "");
+          // Set rootId on series.userOptions to pick it up in exporting.
+          if (isObject(series.userOptions)) {
+            series.userOptions.rootId = rootId;
+          }
+          // Set rootId on series to pick it up on next update.
+          series.rootNode = rootId;
+        }
+        return rootId;
+      };
+      var result = {
+        getColor: getColor,
+        getLevelOptions: getLevelOptions,
+        setTreeValues: setTreeValues,
+        updateRootId: updateRootId,
+      };
+
+      return result;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/GridAxis.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Axis/Tick.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, H, O, Tick, U) {
+      /* *
+       *
+       *  (c) 2016 Highsoft AS
+       *  Authors: Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var dateFormat = O.dateFormat;
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        erase = U.erase,
+        find = U.find,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        pick = U.pick,
+        timeUnits = U.timeUnits,
+        wrap = U.wrap;
+      var argsToArray = function (args) {
+          return Array.prototype.slice.call(args, 1);
+        },
+        isObject = function (x) {
+          // Always use strict mode
+          return U.isObject(x, true);
+        },
+        Chart = H.Chart;
+      var applyGridOptions = function applyGridOptions(axis) {
+        var options = axis.options;
+        // Center-align by default
+        if (!options.labels) {
+          options.labels = {};
+        }
+        options.labels.align = pick(options.labels.align, "center");
+        // @todo: Check against tickLabelPlacement between/on etc
+        /* Prevents adding the last tick label if the axis is not a category
+               axis.
+               Since numeric labels are normally placed at starts and ends of a
+               range of value, and this module makes the label point at the value,
+               an "extra" label would appear. */
+        if (!axis.categories) {
+          options.showLastLabel = false;
+        }
+        // Prevents rotation of labels when squished, as rotating them would not
+        // help.
+        axis.labelRotation = 0;
+        options.labels.rotation = 0;
+      };
+      /**
+       * @productdesc {gantt}
+       * For grid axes (like in Gantt charts),
+       * it is possible to declare as a list to provide different
+       * formats depending on available space.
+       *
+       * Defaults to:
+       * ```js
+       * {
+       *     hour: { list: ['%H:%M', '%H'] },
+       *     day: { list: ['%A, %e. %B', '%a, %e. %b', '%E'] },
+       *     week: { list: ['Week %W', 'W%W'] },
+       *     month: { list: ['%B', '%b', '%o'] }
+       * }
+       * ```
+       *
+       * @sample {gantt} gantt/grid-axis/date-time-label-formats
+       *         Gantt chart with custom axis date format.
+       *
+       * @apioption xAxis.dateTimeLabelFormats
+       */
+      /**
+       * Set grid options for the axis labels. Requires Highcharts Gantt.
+       *
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption xAxis.grid
+       */
+      /**
+       * Enable grid on the axis labels. Defaults to true for Gantt charts.
+       *
+       * @type      {boolean}
+       * @default   true
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption xAxis.grid.enabled
+       */
+      /**
+       * Set specific options for each column (or row for horizontal axes) in the
+       * grid. Each extra column/row is its own axis, and the axis options can be set
+       * here.
+       *
+       * @sample gantt/demo/left-axis-table
+       *         Left axis as a table
+       *
+       * @type      {Array<Highcharts.XAxisOptions>}
+       * @apioption xAxis.grid.columns
+       */
+      /**
+       * Set border color for the label grid lines.
+       *
+       * @type      {Highcharts.ColorString}
+       * @apioption xAxis.grid.borderColor
+       */
+      /**
+       * Set border width of the label grid lines.
+       *
+       * @type      {number}
+       * @default   1
+       * @apioption xAxis.grid.borderWidth
+       */
+      /**
+       * Set cell height for grid axis labels. By default this is calculated from font
+       * size. This option only applies to horizontal axes.
+       *
+       * @sample gantt/grid-axis/cellheight
+       *         Gant chart with custom cell height
+       * @type      {number}
+       * @apioption xAxis.grid.cellHeight
+       */
+      (""); // detach doclets above
+      /**
+       * Get the largest label width and height.
+       *
+       * @private
+       * @function Highcharts.Axis#getMaxLabelDimensions
+       *
+       * @param {Highcharts.Dictionary<Highcharts.Tick>} ticks
+       * All the ticks on one axis.
+       *
+       * @param {Array<number|string>} tickPositions
+       * All the tick positions on one axis.
+       *
+       * @return {Highcharts.SizeObject}
+       * Object containing the properties height and width.
+       *
+       * @todo Move this to the generic axis implementation, as it is used there.
+       */
+      Axis.prototype.getMaxLabelDimensions = function (ticks, tickPositions) {
+        var dimensions = {
+          width: 0,
+          height: 0,
+        };
+        tickPositions.forEach(function (pos) {
+          var tick = ticks[pos],
+            labelHeight = 0,
+            labelWidth = 0,
+            label;
+          if (isObject(tick)) {
+            label = isObject(tick.label) ? tick.label : {};
+            // Find width and height of label
+            labelHeight = label.getBBox ? label.getBBox().height : 0;
+            if (label.textStr && !isNumber(label.textPxLength)) {
+              label.textPxLength = label.getBBox().width;
+            }
+            labelWidth = isNumber(label.textPxLength)
+              ? // Math.round ensures crisp lines
+                Math.round(label.textPxLength)
+              : 0;
+            if (label.textStr) {
+              // Set the tickWidth same as the label width after ellipsis
+              // applied #10281
+              labelWidth = Math.round(label.getBBox().width);
+            }
+            // Update the result if width and/or height are larger
+            dimensions.height = Math.max(labelHeight, dimensions.height);
+            dimensions.width = Math.max(labelWidth, dimensions.width);
+          }
+        });
+        return dimensions;
+      };
+      // Adds week date format
+      H.dateFormats.W = function (timestamp) {
+        var d = new this.Date(timestamp);
+        var firstDay = (this.get("Day", d) + 6) % 7;
+        var thursday = new this.Date(d.valueOf());
+        this.set("Date", thursday, this.get("Date", d) - firstDay + 3);
+        var firstThursday = new this.Date(this.get("FullYear", thursday), 0, 1);
+        if (this.get("Day", firstThursday) !== 4) {
+          this.set("Month", d, 0);
+          this.set("Date", d, 1 + ((11 - this.get("Day", firstThursday)) % 7));
+        }
+        return (
+          1 +
+          Math.floor((thursday.valueOf() - firstThursday.valueOf()) / 604800000)
+        ).toString();
+      };
+      // First letter of the day of the week, e.g. 'M' for 'Monday'.
+      H.dateFormats.E = function (timestamp) {
+        return this.dateFormat("%a", timestamp, true).charAt(0);
+      };
+      /* eslint-disable no-invalid-this */
+      addEvent(Chart, "afterSetChartSize", function () {
+        this.axes.forEach(function (axis) {
+          ((axis.grid && axis.grid.columns) || []).forEach(function (column) {
+            column.setAxisSize();
+            column.setAxisTranslation();
+          });
+        });
+      });
+      // Center tick labels in cells.
+      addEvent(Tick, "afterGetLabelPosition", function (e) {
+        var tick = this,
+          label = tick.label,
+          axis = tick.axis,
+          reversed = axis.reversed,
+          chart = axis.chart,
+          options = axis.options,
+          gridOptions = options.grid || {},
+          labelOpts = axis.options.labels,
+          align = labelOpts.align,
+          // verticalAlign is currently not supported for axis.labels.
+          verticalAlign = "middle", // labelOpts.verticalAlign,
+          side = GridAxis.Side[axis.side],
+          tickmarkOffset = e.tickmarkOffset,
+          tickPositions = axis.tickPositions,
+          tickPos = tick.pos - tickmarkOffset,
+          nextTickPos = isNumber(tickPositions[e.index + 1])
+            ? tickPositions[e.index + 1] - tickmarkOffset
+            : axis.max + tickmarkOffset,
+          tickSize = axis.tickSize("tick"),
+          tickWidth = tickSize ? tickSize[0] : 0,
+          crispCorr = tickSize ? tickSize[1] / 2 : 0,
+          labelHeight,
+          lblMetrics,
+          lines,
+          bottom,
+          top,
+          left,
+          right;
+        // Only center tick labels in grid axes
+        if (gridOptions.enabled === true) {
+          // Calculate top and bottom positions of the cell.
+          if (side === "top") {
+            bottom = axis.top + axis.offset;
+            top = bottom - tickWidth;
+          } else if (side === "bottom") {
+            top = chart.chartHeight - axis.bottom + axis.offset;
+            bottom = top + tickWidth;
+          } else {
+            bottom =
+              axis.top +
+              axis.len -
+              axis.translate(reversed ? nextTickPos : tickPos);
+            top =
+              axis.top +
+              axis.len -
+              axis.translate(reversed ? tickPos : nextTickPos);
+          }
+          // Calculate left and right positions of the cell.
+          if (side === "right") {
+            left = chart.chartWidth - axis.right + axis.offset;
+            right = left + tickWidth;
+          } else if (side === "left") {
+            right = axis.left + axis.offset;
+            left = right - tickWidth;
+          } else {
+            left =
+              Math.round(
+                axis.left + axis.translate(reversed ? nextTickPos : tickPos)
+              ) - crispCorr;
+            right =
+              Math.round(
+                axis.left + axis.translate(reversed ? tickPos : nextTickPos)
+              ) - crispCorr;
+          }
+          tick.slotWidth = right - left;
+          // Calculate the positioning of the label based on
+          // alignment.
+          e.pos.x =
+            align === "left"
+              ? left
+              : align === "right"
+              ? right
+              : left + (right - left) / 2; // default to center
+          e.pos.y =
+            verticalAlign === "top"
+              ? top
+              : verticalAlign === "bottom"
+              ? bottom
+              : top + (bottom - top) / 2; // default to middle
+          lblMetrics = chart.renderer.fontMetrics(
+            labelOpts.style.fontSize,
+            label.element
+          );
+          labelHeight = label.getBBox().height;
+          // Adjustment to y position to align the label correctly.
+          // Would be better to have a setter or similar for this.
+          if (!labelOpts.useHTML) {
+            lines = Math.round(labelHeight / lblMetrics.h);
+            e.pos.y +=
+              // Center the label
+              // TODO: why does this actually center the label?
+              (lblMetrics.b - (lblMetrics.h - lblMetrics.f)) / 2 +
+              // Adjust for height of additional lines.
+              -(((lines - 1) * lblMetrics.h) / 2);
+          } else {
+            e.pos.y +=
+              // Readjust yCorr in htmlUpdateTransform
+              lblMetrics.b +
+              // Adjust for height of html label
+              -(labelHeight / 2);
+          }
+          e.pos.x += (axis.horiz && labelOpts.x) || 0;
+        }
+      });
+      /* eslint-enable no-invalid-this */
+      /**
+       * Additions for grid axes.
+       * @private
+       * @class
+       */
+      var GridAxisAdditions = /** @class */ (function () {
         /* *
          *
-         *  (c) 2016 Highsoft AS
-         *  Authors: Lars A. V. Cabrera
+         *  Constructors
          *
-         *  License: www.highcharts.com/license
+         * */
+        function GridAxisAdditions(axis) {
+          this.axis = axis;
+        }
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Functions
          *
          * */
-        var dateFormat = O.dateFormat;
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            erase = U.erase,
-            find = U.find,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            pick = U.pick,
-            timeUnits = U.timeUnits,
-            wrap = U.wrap;
-        var argsToArray = function (args) {
-                return Array.prototype.slice.call(args, 1);
-        }, isObject = function (x) {
-            // Always use strict mode
-            return U.isObject(x, true);
-        }, Chart = H.Chart;
-        var applyGridOptions = function applyGridOptions(axis) {
-                var options = axis.options;
-            // Center-align by default
-            if (!options.labels) {
-                options.labels = {};
-            }
-            options.labels.align = pick(options.labels.align, 'center');
-            // @todo: Check against tickLabelPlacement between/on etc
-            /* Prevents adding the last tick label if the axis is not a category
-               axis.
-               Since numeric labels are normally placed at starts and ends of a
-               range of value, and this module makes the label point at the value,
-               an "extra" label would appear. */
-            if (!axis.categories) {
-                options.showLastLabel = false;
-            }
-            // Prevents rotation of labels when squished, as rotating them would not
-            // help.
-            axis.labelRotation = 0;
-            options.labels.rotation = 0;
-        };
         /**
-         * @productdesc {gantt}
-         * For grid axes (like in Gantt charts),
-         * it is possible to declare as a list to provide different
-         * formats depending on available space.
+         * Checks if an axis is the outer axis in its dimension. Since
+         * axes are placed outwards in order, the axis with the highest
+         * index is the outermost axis.
          *
-         * Defaults to:
-         * ```js
-         * {
-         *     hour: { list: ['%H:%M', '%H'] },
-         *     day: { list: ['%A, %e. %B', '%a, %e. %b', '%E'] },
-         *     week: { list: ['Week %W', 'W%W'] },
-         *     month: { list: ['%B', '%b', '%o'] }
-         * }
-         * ```
+         * Example: If there are multiple x-axes at the top of the chart,
+         * this function returns true if the axis supplied is the last
+         * of the x-axes.
          *
-         * @sample {gantt} gantt/grid-axis/date-time-label-formats
-         *         Gantt chart with custom axis date format.
+         * @private
          *
-         * @apioption xAxis.dateTimeLabelFormats
+         * @return {boolean}
+         * True if the axis is the outermost axis in its dimension; false if
+         * not.
          */
+        GridAxisAdditions.prototype.isOuterAxis = function () {
+          var axis = this.axis;
+          var chart = axis.chart;
+          var columnIndex = axis.grid.columnIndex;
+          var columns =
+            (axis.linkedParent && axis.linkedParent.grid.columns) ||
+            axis.grid.columns;
+          var parentAxis = columnIndex ? axis.linkedParent : axis;
+          var thisIndex = -1,
+            lastIndex = 0;
+          chart[axis.coll].forEach(function (otherAxis, index) {
+            if (otherAxis.side === axis.side && !otherAxis.options.isInternal) {
+              lastIndex = index;
+              if (otherAxis === parentAxis) {
+                // Get the index of the axis in question
+                thisIndex = index;
+              }
+            }
+          });
+          return (
+            lastIndex === thisIndex &&
+            (isNumber(columnIndex) ? columns.length === columnIndex : true)
+          );
+        };
         /**
-         * Set grid options for the axis labels. Requires Highcharts Gantt.
+         * Add extra border based on the provided path.
+         *  *
+         * @private
          *
-         * @since     6.2.0
-         * @product   gantt
-         * @apioption xAxis.grid
-         */
-        /**
-         * Enable grid on the axis labels. Defaults to true for Gantt charts.
+         * @param {SVGPath} path
+         * The path of the border.
          *
-         * @type      {boolean}
-         * @default   true
-         * @since     6.2.0
-         * @product   gantt
-         * @apioption xAxis.grid.enabled
+         * @return {Highcharts.SVGElement}
          */
-        /**
-         * Set specific options for each column (or row for horizontal axes) in the
-         * grid. Each extra column/row is its own axis, and the axis options can be set
-         * here.
+        GridAxisAdditions.prototype.renderBorder = function (path) {
+          var axis = this.axis,
+            renderer = axis.chart.renderer,
+            options = axis.options,
+            extraBorderLine = renderer
+              .path(path)
+              .addClass("highcharts-axis-line")
+              .add(axis.axisBorder);
+          if (!renderer.styledMode) {
+            extraBorderLine.attr({
+              stroke: options.lineColor,
+              "stroke-width": options.lineWidth,
+              zIndex: 7,
+            });
+          }
+          return extraBorderLine;
+        };
+        return GridAxisAdditions;
+      })();
+      /**
+       * Axis with grid support.
+       * @private
+       * @class
+       */
+      var GridAxis = /** @class */ (function () {
+        function GridAxis() {}
+        /* *
          *
-         * @sample gantt/demo/left-axis-table
-         *         Left axis as a table
+         *  Static Functions
          *
-         * @type      {Array<Highcharts.XAxisOptions>}
-         * @apioption xAxis.grid.columns
-         */
+         * */
+        /* eslint-disable valid-jsdoc */
         /**
-         * Set border color for the label grid lines.
-         *
-         * @type      {Highcharts.ColorString}
-         * @apioption xAxis.grid.borderColor
+         * Extends axis class with grid support.
+         * @private
          */
+        GridAxis.compose = function (AxisClass) {
+          Axis.keepProps.push("grid");
+          wrap(AxisClass.prototype, "unsquish", GridAxis.wrapUnsquish);
+          // Add event handlers
+          addEvent(AxisClass, "init", GridAxis.onInit);
+          addEvent(AxisClass, "afterGetOffset", GridAxis.onAfterGetOffset);
+          addEvent(
+            AxisClass,
+            "afterGetTitlePosition",
+            GridAxis.onAfterGetTitlePosition
+          );
+          addEvent(AxisClass, "afterInit", GridAxis.onAfterInit);
+          addEvent(AxisClass, "afterRender", GridAxis.onAfterRender);
+          addEvent(
+            AxisClass,
+            "afterSetAxisTranslation",
+            GridAxis.onAfterSetAxisTranslation
+          );
+          addEvent(AxisClass, "afterSetOptions", GridAxis.onAfterSetOptions);
+          addEvent(AxisClass, "afterSetOptions", GridAxis.onAfterSetOptions2);
+          addEvent(AxisClass, "afterSetScale", GridAxis.onAfterSetScale);
+          addEvent(AxisClass, "afterTickSize", GridAxis.onAfterTickSize);
+          addEvent(AxisClass, "trimTicks", GridAxis.onTrimTicks);
+          addEvent(AxisClass, "destroy", GridAxis.onDestroy);
+        };
         /**
-         * Set border width of the label grid lines.
-         *
-         * @type      {number}
-         * @default   1
-         * @apioption xAxis.grid.borderWidth
+         * Handle columns and getOffset.
+         * @private
          */
+        GridAxis.onAfterGetOffset = function () {
+          var grid = this.grid;
+          ((grid && grid.columns) || []).forEach(function (column) {
+            column.getOffset();
+          });
+        };
         /**
-         * Set cell height for grid axis labels. By default this is calculated from font
-         * size. This option only applies to horizontal axes.
-         *
-         * @sample gantt/grid-axis/cellheight
-         *         Gant chart with custom cell height
-         * @type      {number}
-         * @apioption xAxis.grid.cellHeight
+         * @private
          */
-        ''; // detach doclets above
+        GridAxis.onAfterGetTitlePosition = function (e) {
+          var axis = this;
+          var options = axis.options;
+          var gridOptions = options.grid || {};
+          if (gridOptions.enabled === true) {
+            // compute anchor points for each of the title align options
+            var title = axis.axisTitle,
+              axisHeight = axis.height,
+              horiz = axis.horiz,
+              axisLeft = axis.left,
+              offset = axis.offset,
+              opposite = axis.opposite,
+              _a = axis.options.title,
+              axisTitleOptions = _a === void 0 ? {} : _a,
+              axisTop = axis.top,
+              axisWidth = axis.width;
+            var tickSize = axis.tickSize();
+            var titleWidth = title && title.getBBox().width;
+            var xOption = axisTitleOptions.x || 0;
+            var yOption = axisTitleOptions.y || 0;
+            var titleMargin = pick(axisTitleOptions.margin, horiz ? 5 : 10);
+            var titleFontSize = axis.chart.renderer.fontMetrics(
+              axisTitleOptions.style && axisTitleOptions.style.fontSize,
+              title
+            ).f;
+            var crispCorr = tickSize ? tickSize[0] / 2 : 0;
+            // TODO account for alignment
+            // the position in the perpendicular direction of the axis
+            var offAxis =
+              (horiz ? axisTop + axisHeight : axisLeft) +
+              (horiz ? 1 : -1) * // horizontal axis reverses the margin
+                (opposite ? -1 : 1) * // so does opposite axes
+                crispCorr +
+              (axis.side === GridAxis.Side.bottom ? titleFontSize : 0);
+            e.titlePosition.x = horiz
+              ? axisLeft - titleWidth / 2 - titleMargin + xOption
+              : offAxis + (opposite ? axisWidth : 0) + offset + xOption;
+            e.titlePosition.y = horiz
+              ? offAxis -
+                (opposite ? axisHeight : 0) +
+                (opposite ? titleFontSize : -titleFontSize) / 2 +
+                offset +
+                yOption
+              : axisTop - titleMargin + yOption;
+          }
+        };
         /**
-         * Get the largest label width and height.
-         *
          * @private
-         * @function Highcharts.Axis#getMaxLabelDimensions
-         *
-         * @param {Highcharts.Dictionary<Highcharts.Tick>} ticks
-         * All the ticks on one axis.
-         *
-         * @param {Array<number|string>} tickPositions
-         * All the tick positions on one axis.
-         *
-         * @return {Highcharts.SizeObject}
-         * Object containing the properties height and width.
-         *
-         * @todo Move this to the generic axis implementation, as it is used there.
          */
-        Axis.prototype.getMaxLabelDimensions = function (ticks, tickPositions) {
-            var dimensions = {
-                    width: 0,
-                    height: 0
-                };
-            tickPositions.forEach(function (pos) {
-                var tick = ticks[pos],
-                    labelHeight = 0,
-                    labelWidth = 0,
-                    label;
-                if (isObject(tick)) {
-                    label = isObject(tick.label) ? tick.label : {};
-                    // Find width and height of label
-                    labelHeight = label.getBBox ? label.getBBox().height : 0;
-                    if (label.textStr && !isNumber(label.textPxLength)) {
-                        label.textPxLength = label.getBBox().width;
-                    }
-                    labelWidth = isNumber(label.textPxLength) ?
-                        // Math.round ensures crisp lines
-                        Math.round(label.textPxLength) :
-                        0;
-                    if (label.textStr) {
-                        // Set the tickWidth same as the label width after ellipsis
-                        // applied #10281
-                        labelWidth = Math.round(label.getBBox().width);
-                    }
-                    // Update the result if width and/or height are larger
-                    dimensions.height = Math.max(labelHeight, dimensions.height);
-                    dimensions.width = Math.max(labelWidth, dimensions.width);
-                }
-            });
-            return dimensions;
-        };
-        // Adds week date format
-        H.dateFormats.W = function (timestamp) {
-            var d = new this.Date(timestamp);
-            var firstDay = (this.get('Day',
-                d) + 6) % 7;
-            var thursday = new this.Date(d.valueOf());
-            this.set('Date', thursday, this.get('Date', d) - firstDay + 3);
-            var firstThursday = new this.Date(this.get('FullYear',
-                thursday), 0, 1);
-            if (this.get('Day', firstThursday) !== 4) {
-                this.set('Month', d, 0);
-                this.set('Date', d, 1 + (11 - this.get('Day', firstThursday)) % 7);
-            }
-            return (1 +
-                Math.floor((thursday.valueOf() - firstThursday.valueOf()) / 604800000)).toString();
-        };
-        // First letter of the day of the week, e.g. 'M' for 'Monday'.
-        H.dateFormats.E = function (timestamp) {
-            return this.dateFormat('%a', timestamp, true).charAt(0);
-        };
-        /* eslint-disable no-invalid-this */
-        addEvent(Chart, 'afterSetChartSize', function () {
-            this.axes.forEach(function (axis) {
-                (axis.grid && axis.grid.columns || []).forEach(function (column) {
-                    column.setAxisSize();
-                    column.setAxisTranslation();
+        GridAxis.onAfterInit = function () {
+          var axis = this;
+          var chart = axis.chart,
+            _a = axis.options.grid,
+            gridOptions = _a === void 0 ? {} : _a,
+            userOptions = axis.userOptions;
+          if (gridOptions.enabled) {
+            applyGridOptions(axis);
+            /* eslint-disable no-invalid-this */
+            // TODO: wrap the axis instead
+            wrap(axis, "labelFormatter", function (proceed) {
+              var _a = this,
+                axis = _a.axis,
+                value = _a.value;
+              var tickPos = axis.tickPositions;
+              var series = (axis.isLinked ? axis.linkedParent : axis).series[0];
+              var isFirst = value === tickPos[0];
+              var isLast = value === tickPos[tickPos.length - 1];
+              var point =
+                series &&
+                find(series.options.data, function (p) {
+                  return p[axis.isXAxis ? "x" : "y"] === value;
                 });
+              var pointCopy;
+              if (point && series.is("gantt")) {
+                // For the Gantt set point aliases to the pointCopy
+                // to do not change the original point
+                pointCopy = merge(point);
+                H.seriesTypes.gantt.prototype.setGanttPointAliases(pointCopy);
+              }
+              // Make additional properties available for the
+              // formatter
+              this.isFirst = isFirst;
+              this.isLast = isLast;
+              this.point = pointCopy;
+              // Call original labelFormatter
+              return proceed.call(this);
             });
-        });
-        // Center tick labels in cells.
-        addEvent(Tick, 'afterGetLabelPosition', function (e) {
-            var tick = this,
-                label = tick.label,
-                axis = tick.axis,
-                reversed = axis.reversed,
-                chart = axis.chart,
-                options = axis.options,
-                gridOptions = options.grid || {},
-                labelOpts = axis.options.labels,
-                align = labelOpts.align, 
-                // verticalAlign is currently not supported for axis.labels.
-                verticalAlign = 'middle', // labelOpts.verticalAlign,
-                side = GridAxis.Side[axis.side],
-                tickmarkOffset = e.tickmarkOffset,
-                tickPositions = axis.tickPositions,
-                tickPos = tick.pos - tickmarkOffset,
-                nextTickPos = (isNumber(tickPositions[e.index + 1]) ?
-                    tickPositions[e.index + 1] - tickmarkOffset :
-                    axis.max + tickmarkOffset),
-                tickSize = axis.tickSize('tick'),
-                tickWidth = tickSize ? tickSize[0] : 0,
-                crispCorr = tickSize ? tickSize[1] / 2 : 0,
-                labelHeight,
-                lblMetrics,
-                lines,
-                bottom,
-                top,
-                left,
-                right;
-            // Only center tick labels in grid axes
-            if (gridOptions.enabled === true) {
-                // Calculate top and bottom positions of the cell.
-                if (side === 'top') {
-                    bottom = axis.top + axis.offset;
-                    top = bottom - tickWidth;
-                }
-                else if (side === 'bottom') {
-                    top = chart.chartHeight - axis.bottom + axis.offset;
-                    bottom = top + tickWidth;
-                }
-                else {
-                    bottom = axis.top + axis.len - axis.translate(reversed ? nextTickPos : tickPos);
-                    top = axis.top + axis.len - axis.translate(reversed ? tickPos : nextTickPos);
-                }
-                // Calculate left and right positions of the cell.
-                if (side === 'right') {
-                    left = chart.chartWidth - axis.right + axis.offset;
-                    right = left + tickWidth;
-                }
-                else if (side === 'left') {
-                    right = axis.left + axis.offset;
-                    left = right - tickWidth;
-                }
-                else {
-                    left = Math.round(axis.left + axis.translate(reversed ? nextTickPos : tickPos)) - crispCorr;
-                    right = Math.round(axis.left + axis.translate(reversed ? tickPos : nextTickPos)) - crispCorr;
-                }
-                tick.slotWidth = right - left;
-                // Calculate the positioning of the label based on
-                // alignment.
-                e.pos.x = (align === 'left' ?
-                    left :
-                    align === 'right' ?
-                        right :
-                        left + ((right - left) / 2) // default to center
-                );
-                e.pos.y = (verticalAlign === 'top' ?
-                    top :
-                    verticalAlign === 'bottom' ?
-                        bottom :
-                        top + ((bottom - top) / 2) // default to middle
-                );
-                lblMetrics = chart.renderer.fontMetrics(labelOpts.style.fontSize, label.element);
-                labelHeight = label.getBBox().height;
-                // Adjustment to y position to align the label correctly.
-                // Would be better to have a setter or similar for this.
-                if (!labelOpts.useHTML) {
-                    lines = Math.round(labelHeight / lblMetrics.h);
-                    e.pos.y += (
-                    // Center the label
-                    // TODO: why does this actually center the label?
-                    ((lblMetrics.b - (lblMetrics.h - lblMetrics.f)) / 2) +
-                        // Adjust for height of additional lines.
-                        -(((lines - 1) * lblMetrics.h) / 2));
-                }
-                else {
-                    e.pos.y += (
-                    // Readjust yCorr in htmlUpdateTransform
-                    lblMetrics.b +
-                        // Adjust for height of html label
-                        -(labelHeight / 2));
-                }
-                e.pos.x += (axis.horiz && labelOpts.x || 0);
+            /* eslint-enable no-invalid-this */
+          }
+          if (gridOptions.columns) {
+            var columns = (axis.grid.columns = []),
+              columnIndex = (axis.grid.columnIndex = 0);
+            // Handle columns, each column is a grid axis
+            while (++columnIndex < gridOptions.columns.length) {
+              var columnOptions = merge(
+                userOptions,
+                gridOptions.columns[
+                  gridOptions.columns.length - columnIndex - 1
+                ],
+                {
+                  linkedTo: 0,
+                  // Force to behave like category axis
+                  type: "category",
+                  // Disable by default the scrollbar on the grid axis
+                  scrollbar: {
+                    enabled: false,
+                  },
+                }
+              );
+              delete columnOptions.grid.columns; // Prevent recursion
+              var column = new Axis(axis.chart, columnOptions);
+              column.grid.isColumn = true;
+              column.grid.columnIndex = columnIndex;
+              // Remove column axis from chart axes array, and place it
+              // in the columns array.
+              erase(chart.axes, column);
+              erase(chart[axis.coll], column);
+              columns.push(column);
             }
-        });
-        /* eslint-enable no-invalid-this */
-        /**
-         * Additions for grid axes.
-         * @private
-         * @class
-         */
-        var GridAxisAdditions = /** @class */ (function () {
-                /* *
-                 *
-                 *  Constructors
-                 *
-                 * */
-                function GridAxisAdditions(axis) {
-                    this.axis = axis;
-            }
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * Checks if an axis is the outer axis in its dimension. Since
-             * axes are placed outwards in order, the axis with the highest
-             * index is the outermost axis.
-             *
-             * Example: If there are multiple x-axes at the top of the chart,
-             * this function returns true if the axis supplied is the last
-             * of the x-axes.
-             *
-             * @private
-             *
-             * @return {boolean}
-             * True if the axis is the outermost axis in its dimension; false if
-             * not.
-             */
-            GridAxisAdditions.prototype.isOuterAxis = function () {
-                var axis = this.axis;
-                var chart = axis.chart;
-                var columnIndex = axis.grid.columnIndex;
-                var columns = (axis.linkedParent && axis.linkedParent.grid.columns ||
-                        axis.grid.columns);
-                var parentAxis = columnIndex ? axis.linkedParent : axis;
-                var thisIndex = -1,
-                    lastIndex = 0;
-                chart[axis.coll].forEach(function (otherAxis, index) {
-                    if (otherAxis.side === axis.side && !otherAxis.options.isInternal) {
-                        lastIndex = index;
-                        if (otherAxis === parentAxis) {
-                            // Get the index of the axis in question
-                            thisIndex = index;
-                        }
-                    }
-                });
-                return (lastIndex === thisIndex &&
-                    (isNumber(columnIndex) ? columns.length === columnIndex : true));
-            };
-            /**
-             * Add extra border based on the provided path.
-             *  *
-             * @private
-             *
-             * @param {SVGPath} path
-             * The path of the border.
-             *
-             * @return {Highcharts.SVGElement}
-             */
-            GridAxisAdditions.prototype.renderBorder = function (path) {
-                var axis = this.axis,
-                    renderer = axis.chart.renderer,
-                    options = axis.options,
-                    extraBorderLine = renderer.path(path)
-                        .addClass('highcharts-axis-line')
-                        .add(axis.axisBorder);
-                if (!renderer.styledMode) {
-                    extraBorderLine.attr({
-                        stroke: options.lineColor,
-                        'stroke-width': options.lineWidth,
-                        zIndex: 7
-                    });
-                }
-                return extraBorderLine;
-            };
-            return GridAxisAdditions;
-        }());
+          }
+        };
         /**
-         * Axis with grid support.
+         * Draw an extra line on the far side of the outermost axis,
+         * creating floor/roof/wall of a grid. And some padding.
+         * ```
+         * Make this:
+         *             (axis.min) __________________________ (axis.max)
+         *                           |    |    |    |    |
+         * Into this:
+         *             (axis.min) __________________________ (axis.max)
+         *                        ___|____|____|____|____|__
+         * ```
          * @private
-         * @class
          */
-        var GridAxis = /** @class */ (function () {
-                function GridAxis() {
-                }
-                /* *
-                 *
-                 *  Static Functions
-                 *
-                 * */
-                /* eslint-disable valid-jsdoc */
-                /**
-                 * Extends axis class with grid support.
-                 * @private
-                 */
-                GridAxis.compose = function (AxisClass) {
-                    Axis.keepProps.push('grid');
-                wrap(AxisClass.prototype, 'unsquish', GridAxis.wrapUnsquish);
-                // Add event handlers
-                addEvent(AxisClass, 'init', GridAxis.onInit);
-                addEvent(AxisClass, 'afterGetOffset', GridAxis.onAfterGetOffset);
-                addEvent(AxisClass, 'afterGetTitlePosition', GridAxis.onAfterGetTitlePosition);
-                addEvent(AxisClass, 'afterInit', GridAxis.onAfterInit);
-                addEvent(AxisClass, 'afterRender', GridAxis.onAfterRender);
-                addEvent(AxisClass, 'afterSetAxisTranslation', GridAxis.onAfterSetAxisTranslation);
-                addEvent(AxisClass, 'afterSetOptions', GridAxis.onAfterSetOptions);
-                addEvent(AxisClass, 'afterSetOptions', GridAxis.onAfterSetOptions2);
-                addEvent(AxisClass, 'afterSetScale', GridAxis.onAfterSetScale);
-                addEvent(AxisClass, 'afterTickSize', GridAxis.onAfterTickSize);
-                addEvent(AxisClass, 'trimTicks', GridAxis.onTrimTicks);
-                addEvent(AxisClass, 'destroy', GridAxis.onDestroy);
-            };
-            /**
-             * Handle columns and getOffset.
-             * @private
-             */
-            GridAxis.onAfterGetOffset = function () {
-                var grid = this.grid;
-                (grid && grid.columns || []).forEach(function (column) {
-                    column.getOffset();
-                });
-            };
-            /**
-             * @private
-             */
-            GridAxis.onAfterGetTitlePosition = function (e) {
-                var axis = this;
-                var options = axis.options;
-                var gridOptions = options.grid || {};
-                if (gridOptions.enabled === true) {
-                    // compute anchor points for each of the title align options
-                    var title = axis.axisTitle,
-                        axisHeight = axis.height,
-                        horiz = axis.horiz,
-                        axisLeft = axis.left,
-                        offset = axis.offset,
-                        opposite = axis.opposite,
-                        _a = axis.options.title,
-                        axisTitleOptions = _a === void 0 ? {} : _a,
-                        axisTop = axis.top,
-                        axisWidth = axis.width;
-                    var tickSize = axis.tickSize();
-                    var titleWidth = title && title.getBBox().width;
-                    var xOption = axisTitleOptions.x || 0;
-                    var yOption = axisTitleOptions.y || 0;
-                    var titleMargin = pick(axisTitleOptions.margin,
-                        horiz ? 5 : 10);
-                    var titleFontSize = axis.chart.renderer.fontMetrics(axisTitleOptions.style &&
-                            axisTitleOptions.style.fontSize,
-                        title).f;
-                    var crispCorr = tickSize ? tickSize[0] / 2 : 0;
-                    // TODO account for alignment
-                    // the position in the perpendicular direction of the axis
-                    var offAxis = ((horiz ? axisTop + axisHeight : axisLeft) +
-                            (horiz ? 1 : -1) * // horizontal axis reverses the margin
-                                (opposite ? -1 : 1) * // so does opposite axes
-                                crispCorr +
-                            (axis.side === GridAxis.Side.bottom ? titleFontSize : 0));
-                    e.titlePosition.x = horiz ?
-                        axisLeft - titleWidth / 2 - titleMargin + xOption :
-                        offAxis + (opposite ? axisWidth : 0) + offset + xOption;
-                    e.titlePosition.y = horiz ?
-                        (offAxis -
-                            (opposite ? axisHeight : 0) +
-                            (opposite ? titleFontSize : -titleFontSize) / 2 +
-                            offset +
-                            yOption) :
-                        axisTop - titleMargin + yOption;
-                }
-            };
-            /**
-             * @private
-             */
-            GridAxis.onAfterInit = function () {
-                var axis = this;
-                var chart = axis.chart,
-                    _a = axis.options.grid,
-                    gridOptions = _a === void 0 ? {} : _a,
-                    userOptions = axis.userOptions;
-                if (gridOptions.enabled) {
-                    applyGridOptions(axis);
-                    /* eslint-disable no-invalid-this */
-                    // TODO: wrap the axis instead
-                    wrap(axis, 'labelFormatter', function (proceed) {
-                        var _a = this,
-                            axis = _a.axis,
-                            value = _a.value;
-                        var tickPos = axis.tickPositions;
-                        var series = (axis.isLinked ?
-                                axis.linkedParent :
-                                axis).series[0];
-                        var isFirst = value === tickPos[0];
-                        var isLast = value === tickPos[tickPos.length - 1];
-                        var point = series && find(series.options.data,
-                            function (p) {
-                                return p[axis.isXAxis ? 'x' : 'y'] === value;
-                        });
-                        var pointCopy;
-                        if (point && series.is('gantt')) {
-                            // For the Gantt set point aliases to the pointCopy
-                            // to do not change the original point
-                            pointCopy = merge(point);
-                            H.seriesTypes.gantt.prototype.setGanttPointAliases(pointCopy);
-                        }
-                        // Make additional properties available for the
-                        // formatter
-                        this.isFirst = isFirst;
-                        this.isLast = isLast;
-                        this.point = pointCopy;
-                        // Call original labelFormatter
-                        return proceed.call(this);
-                    });
-                    /* eslint-enable no-invalid-this */
-                }
-                if (gridOptions.columns) {
-                    var columns = axis.grid.columns = [],
-                        columnIndex = axis.grid.columnIndex = 0;
-                    // Handle columns, each column is a grid axis
-                    while (++columnIndex < gridOptions.columns.length) {
-                        var columnOptions = merge(userOptions,
-                            gridOptions.columns[gridOptions.columns.length - columnIndex - 1], {
-                                linkedTo: 0,
-                                // Force to behave like category axis
-                                type: 'category',
-                                // Disable by default the scrollbar on the grid axis
-                                scrollbar: {
-                                    enabled: false
-                                }
-                            });
-                        delete columnOptions.grid.columns; // Prevent recursion
-                        var column = new Axis(axis.chart,
-                            columnOptions);
-                        column.grid.isColumn = true;
-                        column.grid.columnIndex = columnIndex;
-                        // Remove column axis from chart axes array, and place it
-                        // in the columns array.
-                        erase(chart.axes, column);
-                        erase(chart[axis.coll], column);
-                        columns.push(column);
-                    }
-                }
-            };
-            /**
-             * Draw an extra line on the far side of the outermost axis,
-             * creating floor/roof/wall of a grid. And some padding.
-             * ```
-             * Make this:
-             *             (axis.min) __________________________ (axis.max)
-             *                           |    |    |    |    |
-             * Into this:
-             *             (axis.min) __________________________ (axis.max)
-             *                        ___|____|____|____|____|__
-             * ```
-             * @private
-             */
-            GridAxis.onAfterRender = function () {
-                var _a;
-                var axis = this,
-                    grid = axis.grid,
-                    options = axis.options,
-                    gridOptions = options.grid || {};
-                if (gridOptions.enabled === true) {
-                    // @todo acutual label padding (top, bottom, left, right)
-                    axis.maxLabelDimensions = axis.getMaxLabelDimensions(axis.ticks, axis.tickPositions);
-                    // Remove right wall before rendering if updating
-                    if (axis.rightWall) {
-                        axis.rightWall.destroy();
-                    }
-                    /*
+        GridAxis.onAfterRender = function () {
+          var _a;
+          var axis = this,
+            grid = axis.grid,
+            options = axis.options,
+            gridOptions = options.grid || {};
+          if (gridOptions.enabled === true) {
+            // @todo acutual label padding (top, bottom, left, right)
+            axis.maxLabelDimensions = axis.getMaxLabelDimensions(
+              axis.ticks,
+              axis.tickPositions
+            );
+            // Remove right wall before rendering if updating
+            if (axis.rightWall) {
+              axis.rightWall.destroy();
+            }
+            /*
                     Draw an extra axis line on outer axes
                                 >
                     Make this:    |______|______|______|___
@@ -1321,10994 +1414,12005 @@
                                 > _________________________
                     Into this:    |______|______|______|__|
                                                             */
-                    if (axis.grid && axis.grid.isOuterAxis() && axis.axisLine) {
-                        var lineWidth = options.lineWidth;
-                        if (lineWidth) {
-                            var linePath = axis.getLinePath(lineWidth),
-                                startPoint = linePath[0],
-                                endPoint = linePath[1], 
-                                // Negate distance if top or left axis
-                                // Subtract 1px to draw the line at the end of the tick
-                                tickLength = (axis.tickSize('tick') || [1])[0],
-                                distance = (tickLength - 1) * ((axis.side === GridAxis.Side.top ||
-                                    axis.side === GridAxis.Side.left) ? -1 : 1);
-                            // If axis is horizontal, reposition line path vertically
-                            if (startPoint[0] === 'M' && endPoint[0] === 'L') {
-                                if (axis.horiz) {
-                                    startPoint[2] += distance;
-                                    endPoint[2] += distance;
-                                }
-                                else {
-                                    startPoint[1] += distance;
-                                    endPoint[1] += distance;
-                                }
-                            }
-                            // If it doesn't exist, add an upper and lower border
-                            // for the vertical grid axis.
-                            if (!axis.horiz && axis.chart.marginRight) {
-                                var upperBorderStartPoint = startPoint, upperBorderEndPoint = ['L', axis.left, startPoint[2]], upperBorderPath = [upperBorderStartPoint, upperBorderEndPoint], lowerBorderEndPoint = ['L', axis.chart.chartWidth - axis.chart.marginRight, axis.toPixels(axis.max + axis.tickmarkOffset)], lowerBorderStartPoint = ['M', endPoint[1], axis.toPixels(axis.max + axis.tickmarkOffset)], lowerBorderPath = [lowerBorderStartPoint, lowerBorderEndPoint];
-                                if (!axis.grid.upperBorder && axis.min % 1 !== 0) {
-                                    axis.grid.upperBorder = axis.grid.renderBorder(upperBorderPath);
-                                }
-                                if (axis.grid.upperBorder) {
-                                    axis.grid.upperBorder.animate({
-                                        d: upperBorderPath
-                                    });
-                                }
-                                if (!axis.grid.lowerBorder && axis.max % 1 !== 0) {
-                                    axis.grid.lowerBorder = axis.grid.renderBorder(lowerBorderPath);
-                                }
-                                if (axis.grid.lowerBorder) {
-                                    axis.grid.lowerBorder.animate({
-                                        d: lowerBorderPath
-                                    });
-                                }
-                            }
-                            // Render an extra line parallel to the existing axes,
-                            // to close the grid.
-                            if (!axis.grid.axisLineExtra) {
-                                axis.grid.axisLineExtra = axis.grid.renderBorder(linePath);
-                            }
-                            else {
-                                axis.grid.axisLineExtra.animate({
-                                    d: linePath
-                                });
-                            }
-                            // show or hide the line depending on
-                            // options.showEmpty
-                            axis.axisLine[axis.showAxis ? 'show' : 'hide'](true);
-                        }
-                    }
-                    (grid && grid.columns || []).forEach(function (column) {
-                        column.render();
+            if (axis.grid && axis.grid.isOuterAxis() && axis.axisLine) {
+              var lineWidth = options.lineWidth;
+              if (lineWidth) {
+                var linePath = axis.getLinePath(lineWidth),
+                  startPoint = linePath[0],
+                  endPoint = linePath[1],
+                  // Negate distance if top or left axis
+                  // Subtract 1px to draw the line at the end of the tick
+                  tickLength = (axis.tickSize("tick") || [1])[0],
+                  distance =
+                    (tickLength - 1) *
+                    (axis.side === GridAxis.Side.top ||
+                    axis.side === GridAxis.Side.left
+                      ? -1
+                      : 1);
+                // If axis is horizontal, reposition line path vertically
+                if (startPoint[0] === "M" && endPoint[0] === "L") {
+                  if (axis.horiz) {
+                    startPoint[2] += distance;
+                    endPoint[2] += distance;
+                  } else {
+                    startPoint[1] += distance;
+                    endPoint[1] += distance;
+                  }
+                }
+                // If it doesn't exist, add an upper and lower border
+                // for the vertical grid axis.
+                if (!axis.horiz && axis.chart.marginRight) {
+                  var upperBorderStartPoint = startPoint,
+                    upperBorderEndPoint = ["L", axis.left, startPoint[2]],
+                    upperBorderPath = [
+                      upperBorderStartPoint,
+                      upperBorderEndPoint,
+                    ],
+                    lowerBorderEndPoint = [
+                      "L",
+                      axis.chart.chartWidth - axis.chart.marginRight,
+                      axis.toPixels(axis.max + axis.tickmarkOffset),
+                    ],
+                    lowerBorderStartPoint = [
+                      "M",
+                      endPoint[1],
+                      axis.toPixels(axis.max + axis.tickmarkOffset),
+                    ],
+                    lowerBorderPath = [
+                      lowerBorderStartPoint,
+                      lowerBorderEndPoint,
+                    ];
+                  if (!axis.grid.upperBorder && axis.min % 1 !== 0) {
+                    axis.grid.upperBorder =
+                      axis.grid.renderBorder(upperBorderPath);
+                  }
+                  if (axis.grid.upperBorder) {
+                    axis.grid.upperBorder.animate({
+                      d: upperBorderPath,
                     });
-                    // Manipulate the tick mark visibility
-                    // based on the axis.max- allows smooth scrolling.
-                    if (!axis.horiz && axis.chart.hasRendered && (axis.scrollbar || ((_a = axis.linkedParent) === null || _a === void 0 ? void 0 : _a.scrollbar))) {
-                        var max = axis.max,
-                            min = axis.min,
-                            tickmarkOffset = axis.tickmarkOffset,
-                            lastTick = axis.tickPositions[axis.tickPositions.length - 1],
-                            firstTick = axis.tickPositions[0];
-                        // Hide/show firts tick label.
-                        if (min - firstTick > tickmarkOffset) {
-                            axis.ticks[firstTick].label.hide();
-                        }
-                        else {
-                            axis.ticks[firstTick].label.show();
-                        }
-                        // Hide/show last tick mark/label.
-                        if (lastTick - max > tickmarkOffset) {
-                            axis.ticks[lastTick].label.hide();
-                        }
-                        else {
-                            axis.ticks[lastTick].label.show();
-                        }
-                        if (lastTick - max < tickmarkOffset && lastTick - max > 0 && axis.ticks[lastTick].isLast) {
-                            axis.ticks[lastTick].mark.hide();
-                        }
-                        else {
-                            axis.ticks[lastTick - 1].mark.show();
-                        }
-                    }
-                }
-            };
-            /**
-             * @private
-             */
-            GridAxis.onAfterSetAxisTranslation = function () {
-                var _a;
-                var axis = this;
-                var tickInfo = axis.tickPositions && axis.tickPositions.info;
-                var options = axis.options;
-                var gridOptions = options.grid || {};
-                var userLabels = axis.userOptions.labels || {};
-                if (axis.horiz) {
-                    if (gridOptions.enabled === true) {
-                        axis.series.forEach(function (series) {
-                            series.options.pointRange = 0;
-                        });
-                    }
-                    // Lower level time ticks, like hours or minutes, represent
-                    // points in time and not ranges. These should be aligned
-                    // left in the grid cell by default. The same applies to
-                    // years of higher order.
-                    if (tickInfo &&
-                        options.dateTimeLabelFormats &&
-                        options.labels &&
-                        !defined(userLabels.align) &&
-                        (options.dateTimeLabelFormats[tickInfo.unitName].range === false ||
-                            tickInfo.count > 1 // years
-                        )) {
-                        options.labels.align = 'left';
-                        if (!defined(userLabels.x)) {
-                            options.labels.x = 3;
-                        }
-                    }
-                }
-                else {
-                    // Don't trim ticks which not in min/max range but
-                    // they are still in the min/max plus tickInterval.
-                    if (this.options.type !== 'treegrid' && ((_a = axis.grid) === null || _a === void 0 ? void 0 : _a.columns)) {
-                        this.minPointOffset = this.tickInterval;
-                    }
-                }
-            };
-            /**
-             * Creates a left and right wall on horizontal axes:
-             * - Places leftmost tick at the start of the axis, to create a left
-             *   wall
-             * - Ensures that the rightmost tick is at the end of the axis, to
-             *   create a right wall.
-             * @private
-             */
-            GridAxis.onAfterSetOptions = function (e) {
-                var options = this.options,
-                    userOptions = e.userOptions,
-                    gridAxisOptions,
-                    gridOptions = ((options && isObject(options.grid)) ? options.grid : {});
-                if (gridOptions.enabled === true) {
-                    // Merge the user options into default grid axis options so
-                    // that when a user option is set, it takes presedence.
-                    gridAxisOptions = merge(true, {
-                        className: ('highcharts-grid-axis ' + (userOptions.className || '')),
-                        dateTimeLabelFormats: {
-                            hour: {
-                                list: ['%H:%M', '%H']
-                            },
-                            day: {
-                                list: ['%A, %e. %B', '%a, %e. %b', '%E']
-                            },
-                            week: {
-                                list: ['Week %W', 'W%W']
-                            },
-                            month: {
-                                list: ['%B', '%b', '%o']
-                            }
-                        },
-                        grid: {
-                            borderWidth: 1
-                        },
-                        labels: {
-                            padding: 2,
-                            style: {
-                                fontSize: '13px'
-                            }
-                        },
-                        margin: 0,
-                        title: {
-                            text: null,
-                            reserveSpace: false,
-                            rotation: 0
-                        },
-                        // In a grid axis, only allow one unit of certain types,
-                        // for example we shouln't have one grid cell spanning
-                        // two days.
-                        units: [[
-                                'millisecond',
-                                [1, 10, 100]
-                            ], [
-                                'second',
-                                [1, 10]
-                            ], [
-                                'minute',
-                                [1, 5, 15]
-                            ], [
-                                'hour',
-                                [1, 6]
-                            ], [
-                                'day',
-                                [1]
-                            ], [
-                                'week',
-                                [1]
-                            ], [
-                                'month',
-                                [1]
-                            ], [
-                                'year',
-                                null
-                            ]]
-                    }, userOptions);
-                    // X-axis specific options
-                    if (this.coll === 'xAxis') {
-                        // For linked axes, tickPixelInterval is used only if
-                        // the tickPositioner below doesn't run or returns
-                        // undefined (like multiple years)
-                        if (defined(userOptions.linkedTo) &&
-                            !defined(userOptions.tickPixelInterval)) {
-                            gridAxisOptions.tickPixelInterval = 350;
-                        }
-                        // For the secondary grid axis, use the primary axis'
-                        // tick intervals and return ticks one level higher.
-                        if (
-                        // Check for tick pixel interval in options
-                        !defined(userOptions.tickPixelInterval) &&
-                            // Only for linked axes
-                            defined(userOptions.linkedTo) &&
-                            !defined(userOptions.tickPositioner) &&
-                            !defined(userOptions.tickInterval)) {
-                            gridAxisOptions.tickPositioner = function (min, max) {
-                                var parentInfo = (this.linkedParent &&
-                                        this.linkedParent.tickPositions &&
-                                        this.linkedParent.tickPositions.info);
-                                if (parentInfo) {
-                                    var unitIdx,
-                                        count,
-                                        unitName,
-                                        i,
-                                        units = gridAxisOptions.units,
-                                        unitRange;
-                                    for (i = 0; i < units.length; i++) {
-                                        if (units[i][0] ===
-                                            parentInfo.unitName) {
-                                            unitIdx = i;
-                                            break;
-                                        }
-                                    }
-                                    // Get the first allowed count on the next
-                                    // unit.
-                                    if (units[unitIdx + 1]) {
-                                        unitName = units[unitIdx + 1][0];
-                                        count =
-                                            (units[unitIdx + 1][1] || [1])[0];
-                                        // In case the base X axis shows years, make
-                                        // the secondary axis show ten times the
-                                        // years (#11427)
-                                    }
-                                    else if (parentInfo.unitName === 'year') {
-                                        unitName = 'year';
-                                        count = parentInfo.count * 10;
-                                    }
-                                    unitRange = timeUnits[unitName];
-                                    this.tickInterval = unitRange * count;
-                                    return this.getTimeTicks({
-                                        unitRange: unitRange,
-                                        count: count,
-                                        unitName: unitName
-                                    }, min, max, this.options.startOfWeek);
-                                }
-                            };
-                        }
-                    }
-                    // Now merge the combined options into the axis options
-                    merge(true, this.options, gridAxisOptions);
-                    if (this.horiz) {
-                        /*               _________________________
+                  }
+                  if (!axis.grid.lowerBorder && axis.max % 1 !== 0) {
+                    axis.grid.lowerBorder =
+                      axis.grid.renderBorder(lowerBorderPath);
+                  }
+                  if (axis.grid.lowerBorder) {
+                    axis.grid.lowerBorder.animate({
+                      d: lowerBorderPath,
+                    });
+                  }
+                }
+                // Render an extra line parallel to the existing axes,
+                // to close the grid.
+                if (!axis.grid.axisLineExtra) {
+                  axis.grid.axisLineExtra = axis.grid.renderBorder(linePath);
+                } else {
+                  axis.grid.axisLineExtra.animate({
+                    d: linePath,
+                  });
+                }
+                // show or hide the line depending on
+                // options.showEmpty
+                axis.axisLine[axis.showAxis ? "show" : "hide"](true);
+              }
+            }
+            ((grid && grid.columns) || []).forEach(function (column) {
+              column.render();
+            });
+            // Manipulate the tick mark visibility
+            // based on the axis.max- allows smooth scrolling.
+            if (
+              !axis.horiz &&
+              axis.chart.hasRendered &&
+              (axis.scrollbar ||
+                ((_a = axis.linkedParent) === null || _a === void 0
+                  ? void 0
+                  : _a.scrollbar))
+            ) {
+              var max = axis.max,
+                min = axis.min,
+                tickmarkOffset = axis.tickmarkOffset,
+                lastTick = axis.tickPositions[axis.tickPositions.length - 1],
+                firstTick = axis.tickPositions[0];
+              // Hide/show firts tick label.
+              if (min - firstTick > tickmarkOffset) {
+                axis.ticks[firstTick].label.hide();
+              } else {
+                axis.ticks[firstTick].label.show();
+              }
+              // Hide/show last tick mark/label.
+              if (lastTick - max > tickmarkOffset) {
+                axis.ticks[lastTick].label.hide();
+              } else {
+                axis.ticks[lastTick].label.show();
+              }
+              if (
+                lastTick - max < tickmarkOffset &&
+                lastTick - max > 0 &&
+                axis.ticks[lastTick].isLast
+              ) {
+                axis.ticks[lastTick].mark.hide();
+              } else {
+                axis.ticks[lastTick - 1].mark.show();
+              }
+            }
+          }
+        };
+        /**
+         * @private
+         */
+        GridAxis.onAfterSetAxisTranslation = function () {
+          var _a;
+          var axis = this;
+          var tickInfo = axis.tickPositions && axis.tickPositions.info;
+          var options = axis.options;
+          var gridOptions = options.grid || {};
+          var userLabels = axis.userOptions.labels || {};
+          if (axis.horiz) {
+            if (gridOptions.enabled === true) {
+              axis.series.forEach(function (series) {
+                series.options.pointRange = 0;
+              });
+            }
+            // Lower level time ticks, like hours or minutes, represent
+            // points in time and not ranges. These should be aligned
+            // left in the grid cell by default. The same applies to
+            // years of higher order.
+            if (
+              tickInfo &&
+              options.dateTimeLabelFormats &&
+              options.labels &&
+              !defined(userLabels.align) &&
+              (options.dateTimeLabelFormats[tickInfo.unitName].range ===
+                false ||
+                tickInfo.count > 1) // years
+            ) {
+              options.labels.align = "left";
+              if (!defined(userLabels.x)) {
+                options.labels.x = 3;
+              }
+            }
+          } else {
+            // Don't trim ticks which not in min/max range but
+            // they are still in the min/max plus tickInterval.
+            if (
+              this.options.type !== "treegrid" &&
+              ((_a = axis.grid) === null || _a === void 0 ? void 0 : _a.columns)
+            ) {
+              this.minPointOffset = this.tickInterval;
+            }
+          }
+        };
+        /**
+         * Creates a left and right wall on horizontal axes:
+         * - Places leftmost tick at the start of the axis, to create a left
+         *   wall
+         * - Ensures that the rightmost tick is at the end of the axis, to
+         *   create a right wall.
+         * @private
+         */
+        GridAxis.onAfterSetOptions = function (e) {
+          var options = this.options,
+            userOptions = e.userOptions,
+            gridAxisOptions,
+            gridOptions = options && isObject(options.grid) ? options.grid : {};
+          if (gridOptions.enabled === true) {
+            // Merge the user options into default grid axis options so
+            // that when a user option is set, it takes presedence.
+            gridAxisOptions = merge(
+              true,
+              {
+                className:
+                  "highcharts-grid-axis " + (userOptions.className || ""),
+                dateTimeLabelFormats: {
+                  hour: {
+                    list: ["%H:%M", "%H"],
+                  },
+                  day: {
+                    list: ["%A, %e. %B", "%a, %e. %b", "%E"],
+                  },
+                  week: {
+                    list: ["Week %W", "W%W"],
+                  },
+                  month: {
+                    list: ["%B", "%b", "%o"],
+                  },
+                },
+                grid: {
+                  borderWidth: 1,
+                },
+                labels: {
+                  padding: 2,
+                  style: {
+                    fontSize: "13px",
+                  },
+                },
+                margin: 0,
+                title: {
+                  text: null,
+                  reserveSpace: false,
+                  rotation: 0,
+                },
+                // In a grid axis, only allow one unit of certain types,
+                // for example we shouln't have one grid cell spanning
+                // two days.
+                units: [
+                  ["millisecond", [1, 10, 100]],
+                  ["second", [1, 10]],
+                  ["minute", [1, 5, 15]],
+                  ["hour", [1, 6]],
+                  ["day", [1]],
+                  ["week", [1]],
+                  ["month", [1]],
+                  ["year", null],
+                ],
+              },
+              userOptions
+            );
+            // X-axis specific options
+            if (this.coll === "xAxis") {
+              // For linked axes, tickPixelInterval is used only if
+              // the tickPositioner below doesn't run or returns
+              // undefined (like multiple years)
+              if (
+                defined(userOptions.linkedTo) &&
+                !defined(userOptions.tickPixelInterval)
+              ) {
+                gridAxisOptions.tickPixelInterval = 350;
+              }
+              // For the secondary grid axis, use the primary axis'
+              // tick intervals and return ticks one level higher.
+              if (
+                // Check for tick pixel interval in options
+                !defined(userOptions.tickPixelInterval) &&
+                // Only for linked axes
+                defined(userOptions.linkedTo) &&
+                !defined(userOptions.tickPositioner) &&
+                !defined(userOptions.tickInterval)
+              ) {
+                gridAxisOptions.tickPositioner = function (min, max) {
+                  var parentInfo =
+                    this.linkedParent &&
+                    this.linkedParent.tickPositions &&
+                    this.linkedParent.tickPositions.info;
+                  if (parentInfo) {
+                    var unitIdx,
+                      count,
+                      unitName,
+                      i,
+                      units = gridAxisOptions.units,
+                      unitRange;
+                    for (i = 0; i < units.length; i++) {
+                      if (units[i][0] === parentInfo.unitName) {
+                        unitIdx = i;
+                        break;
+                      }
+                    }
+                    // Get the first allowed count on the next
+                    // unit.
+                    if (units[unitIdx + 1]) {
+                      unitName = units[unitIdx + 1][0];
+                      count = (units[unitIdx + 1][1] || [1])[0];
+                      // In case the base X axis shows years, make
+                      // the secondary axis show ten times the
+                      // years (#11427)
+                    } else if (parentInfo.unitName === "year") {
+                      unitName = "year";
+                      count = parentInfo.count * 10;
+                    }
+                    unitRange = timeUnits[unitName];
+                    this.tickInterval = unitRange * count;
+                    return this.getTimeTicks(
+                      {
+                        unitRange: unitRange,
+                        count: count,
+                        unitName: unitName,
+                      },
+                      min,
+                      max,
+                      this.options.startOfWeek
+                    );
+                  }
+                };
+              }
+            }
+            // Now merge the combined options into the axis options
+            merge(true, this.options, gridAxisOptions);
+            if (this.horiz) {
+              /*               _________________________
                         Make this:    ___|_____|_____|_____|__|
                                         ^                     ^
                                         _________________________
                         Into this:    |_____|_____|_____|_____|
                                             ^                 ^    */
-                        options.minPadding = pick(userOptions.minPadding, 0);
-                        options.maxPadding = pick(userOptions.maxPadding, 0);
-                    }
-                    // If borderWidth is set, then use its value for tick and
-                    // line width.
-                    if (isNumber(options.grid.borderWidth)) {
-                        options.tickWidth = options.lineWidth = gridOptions.borderWidth;
-                    }
-                }
-            };
-            /**
-             * @private
-             */
-            GridAxis.onAfterSetOptions2 = function (e) {
-                var axis = this;
-                var userOptions = e.userOptions;
-                var gridOptions = userOptions && userOptions.grid || {};
-                var columns = gridOptions.columns;
-                // Add column options to the parent axis. Children has their column
-                // options set on init in onGridAxisAfterInit.
-                if (gridOptions.enabled && columns) {
-                    merge(true, axis.options, columns[columns.length - 1]);
-                }
-            };
-            /**
-             * Handle columns and setScale.
-             * @private
-             */
-            GridAxis.onAfterSetScale = function () {
-                var axis = this;
-                (axis.grid.columns || []).forEach(function (column) {
-                    column.setScale();
-                });
-            };
-            /**
-             * Draw vertical axis ticks extra long to create cell floors and roofs.
-             * Overrides the tickLength for vertical axes.
-             * @private
-             */
-            GridAxis.onAfterTickSize = function (e) {
-                var defaultLeftAxisOptions = Axis.defaultLeftAxisOptions;
-                var _a = this,
-                    horiz = _a.horiz,
-                    maxLabelDimensions = _a.maxLabelDimensions,
-                    _b = _a.options.grid,
-                    gridOptions = _b === void 0 ? {} : _b;
-                if (gridOptions.enabled && maxLabelDimensions) {
-                    var labelPadding = (Math.abs(defaultLeftAxisOptions.labels.x) * 2);
-                    var distance = horiz ?
-                            gridOptions.cellHeight || labelPadding + maxLabelDimensions.height :
-                            labelPadding + maxLabelDimensions.width;
-                    if (isArray(e.tickSize)) {
-                        e.tickSize[0] = distance;
-                    }
-                    else {
-                        e.tickSize = [distance, 0];
-                    }
-                }
-            };
-            /**
-             * @private
-             */
-            GridAxis.onDestroy = function (e) {
-                var grid = this.grid;
-                (grid.columns || []).forEach(function (column) {
-                    column.destroy(e.keepEvents);
-                });
-                grid.columns = void 0;
-            };
-            /**
-             * Wraps axis init to draw cell walls on vertical axes.
-             * @private
-             */
-            GridAxis.onInit = function (e) {
-                var axis = this;
-                var userOptions = e.userOptions || {};
-                var gridOptions = userOptions.grid || {};
-                if (gridOptions.enabled && defined(gridOptions.borderColor)) {
-                    userOptions.tickColor = userOptions.lineColor = gridOptions.borderColor;
-                }
-                if (!axis.grid) {
-                    axis.grid = new GridAxisAdditions(axis);
-                }
-            };
-            /**
-             * Makes tick labels which are usually ignored in a linked axis
-             * displayed if they are within range of linkedParent.min.
-             * ```
-             *                        _____________________________
-             *                        |   |       |       |       |
-             * Make this:             |   |   2   |   3   |   4   |
-             *                        |___|_______|_______|_______|
-             *                          ^
-             *                        _____________________________
-             *                        |   |       |       |       |
-             * Into this:             | 1 |   2   |   3   |   4   |
-             *                        |___|_______|_______|_______|
-             *                          ^
-             * ```
-             * @private
-             * @todo Does this function do what the drawing says? Seems to affect
-             *       ticks and not the labels directly?
-             */
-            GridAxis.onTrimTicks = function () {
-                var axis = this;
-                var options = axis.options;
-                var gridOptions = options.grid || {};
-                var categoryAxis = axis.categories;
-                var tickPositions = axis.tickPositions;
-                var firstPos = tickPositions[0];
-                var lastPos = tickPositions[tickPositions.length - 1];
-                var linkedMin = axis.linkedParent && axis.linkedParent.min;
-                var linkedMax = axis.linkedParent && axis.linkedParent.max;
-                var min = linkedMin || axis.min;
-                var max = linkedMax || axis.max;
-                var tickInterval = axis.tickInterval;
-                var endMoreThanMin = (firstPos < min &&
-                        firstPos + tickInterval > min);
-                var startLessThanMax = (lastPos > max &&
-                        lastPos - tickInterval < max);
-                if (gridOptions.enabled === true &&
-                    !categoryAxis &&
-                    (axis.horiz || axis.isLinked)) {
-                    if (endMoreThanMin && !options.startOnTick) {
-                        tickPositions[0] = min;
-                    }
-                    if (startLessThanMax && !options.endOnTick) {
-                        tickPositions[tickPositions.length - 1] = max;
-                    }
-                }
-            };
-            /**
-             * Avoid altering tickInterval when reserving space.
-             * @private
-             */
-            GridAxis.wrapUnsquish = function (proceed) {
-                var axis = this;
-                var _a = axis.options.grid,
-                    gridOptions = _a === void 0 ? {} : _a;
-                if (gridOptions.enabled === true && axis.categories) {
-                    return axis.tickInterval;
-                }
-                return proceed.apply(axis, argsToArray(arguments));
-            };
-            return GridAxis;
-        }());
-        (function (GridAxis) {
-            /**
-             * Enum for which side the axis is on. Maps to axis.side.
-             * @private
-             */
-            var Side;
-            (function (Side) {
-                Side[Side["top"] = 0] = "top";
-                Side[Side["right"] = 1] = "right";
-                Side[Side["bottom"] = 2] = "bottom";
-                Side[Side["left"] = 3] = "left";
-            })(Side = GridAxis.Side || (GridAxis.Side = {}));
-        })(GridAxis || (GridAxis = {}));
-        GridAxis.compose(Axis);
-
+              options.minPadding = pick(userOptions.minPadding, 0);
+              options.maxPadding = pick(userOptions.maxPadding, 0);
+            }
+            // If borderWidth is set, then use its value for tick and
+            // line width.
+            if (isNumber(options.grid.borderWidth)) {
+              options.tickWidth = options.lineWidth = gridOptions.borderWidth;
+            }
+          }
+        };
+        /**
+         * @private
+         */
+        GridAxis.onAfterSetOptions2 = function (e) {
+          var axis = this;
+          var userOptions = e.userOptions;
+          var gridOptions = (userOptions && userOptions.grid) || {};
+          var columns = gridOptions.columns;
+          // Add column options to the parent axis. Children has their column
+          // options set on init in onGridAxisAfterInit.
+          if (gridOptions.enabled && columns) {
+            merge(true, axis.options, columns[columns.length - 1]);
+          }
+        };
+        /**
+         * Handle columns and setScale.
+         * @private
+         */
+        GridAxis.onAfterSetScale = function () {
+          var axis = this;
+          (axis.grid.columns || []).forEach(function (column) {
+            column.setScale();
+          });
+        };
+        /**
+         * Draw vertical axis ticks extra long to create cell floors and roofs.
+         * Overrides the tickLength for vertical axes.
+         * @private
+         */
+        GridAxis.onAfterTickSize = function (e) {
+          var defaultLeftAxisOptions = Axis.defaultLeftAxisOptions;
+          var _a = this,
+            horiz = _a.horiz,
+            maxLabelDimensions = _a.maxLabelDimensions,
+            _b = _a.options.grid,
+            gridOptions = _b === void 0 ? {} : _b;
+          if (gridOptions.enabled && maxLabelDimensions) {
+            var labelPadding = Math.abs(defaultLeftAxisOptions.labels.x) * 2;
+            var distance = horiz
+              ? gridOptions.cellHeight ||
+                labelPadding + maxLabelDimensions.height
+              : labelPadding + maxLabelDimensions.width;
+            if (isArray(e.tickSize)) {
+              e.tickSize[0] = distance;
+            } else {
+              e.tickSize = [distance, 0];
+            }
+          }
+        };
+        /**
+         * @private
+         */
+        GridAxis.onDestroy = function (e) {
+          var grid = this.grid;
+          (grid.columns || []).forEach(function (column) {
+            column.destroy(e.keepEvents);
+          });
+          grid.columns = void 0;
+        };
+        /**
+         * Wraps axis init to draw cell walls on vertical axes.
+         * @private
+         */
+        GridAxis.onInit = function (e) {
+          var axis = this;
+          var userOptions = e.userOptions || {};
+          var gridOptions = userOptions.grid || {};
+          if (gridOptions.enabled && defined(gridOptions.borderColor)) {
+            userOptions.tickColor = userOptions.lineColor =
+              gridOptions.borderColor;
+          }
+          if (!axis.grid) {
+            axis.grid = new GridAxisAdditions(axis);
+          }
+        };
+        /**
+         * Makes tick labels which are usually ignored in a linked axis
+         * displayed if they are within range of linkedParent.min.
+         * ```
+         *                        _____________________________
+         *                        |   |       |       |       |
+         * Make this:             |   |   2   |   3   |   4   |
+         *                        |___|_______|_______|_______|
+         *                          ^
+         *                        _____________________________
+         *                        |   |       |       |       |
+         * Into this:             | 1 |   2   |   3   |   4   |
+         *                        |___|_______|_______|_______|
+         *                          ^
+         * ```
+         * @private
+         * @todo Does this function do what the drawing says? Seems to affect
+         *       ticks and not the labels directly?
+         */
+        GridAxis.onTrimTicks = function () {
+          var axis = this;
+          var options = axis.options;
+          var gridOptions = options.grid || {};
+          var categoryAxis = axis.categories;
+          var tickPositions = axis.tickPositions;
+          var firstPos = tickPositions[0];
+          var lastPos = tickPositions[tickPositions.length - 1];
+          var linkedMin = axis.linkedParent && axis.linkedParent.min;
+          var linkedMax = axis.linkedParent && axis.linkedParent.max;
+          var min = linkedMin || axis.min;
+          var max = linkedMax || axis.max;
+          var tickInterval = axis.tickInterval;
+          var endMoreThanMin = firstPos < min && firstPos + tickInterval > min;
+          var startLessThanMax = lastPos > max && lastPos - tickInterval < max;
+          if (
+            gridOptions.enabled === true &&
+            !categoryAxis &&
+            (axis.horiz || axis.isLinked)
+          ) {
+            if (endMoreThanMin && !options.startOnTick) {
+              tickPositions[0] = min;
+            }
+            if (startLessThanMax && !options.endOnTick) {
+              tickPositions[tickPositions.length - 1] = max;
+            }
+          }
+        };
+        /**
+         * Avoid altering tickInterval when reserving space.
+         * @private
+         */
+        GridAxis.wrapUnsquish = function (proceed) {
+          var axis = this;
+          var _a = axis.options.grid,
+            gridOptions = _a === void 0 ? {} : _a;
+          if (gridOptions.enabled === true && axis.categories) {
+            return axis.tickInterval;
+          }
+          return proceed.apply(axis, argsToArray(arguments));
+        };
         return GridAxis;
-    });
-    _registerModule(_modules, 'Core/Axis/BrokenAxis.js', [_modules['Core/Axis/Axis.js'], _modules['Series/LineSeries.js'], _modules['Extensions/Stacking.js'], _modules['Core/Utilities.js']], function (Axis, LineSeries, StackItem, U) {
+      })();
+      (function (GridAxis) {
+        /**
+         * Enum for which side the axis is on. Maps to axis.side.
+         * @private
+         */
+        var Side;
+        (function (Side) {
+          Side[(Side["top"] = 0)] = "top";
+          Side[(Side["right"] = 1)] = "right";
+          Side[(Side["bottom"] = 2)] = "bottom";
+          Side[(Side["left"] = 3)] = "left";
+        })((Side = GridAxis.Side || (GridAxis.Side = {})));
+      })(GridAxis || (GridAxis = {}));
+      GridAxis.compose(Axis);
+
+      return GridAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/BrokenAxis.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Series/LineSeries.js"],
+      _modules["Extensions/Stacking.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, LineSeries, StackItem, U) {
+      /* *
+       *
+       *  (c) 2009-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        find = U.find,
+        fireEvent = U.fireEvent,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        pick = U.pick;
+      /* eslint-disable valid-jsdoc */
+      /**
+       * Provides support for broken axes.
+       * @private
+       * @class
+       */
+      var BrokenAxisAdditions = /** @class */ (function () {
         /* *
          *
-         *  (c) 2009-2020 Torstein Honsi
+         *  Constructors
          *
-         *  License: www.highcharts.com/license
+         * */
+        function BrokenAxisAdditions(axis) {
+          this.hasBreaks = false;
+          this.axis = axis;
+        }
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Static Functions
          *
          * */
-        var addEvent = U.addEvent,
-            find = U.find,
-            fireEvent = U.fireEvent,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            pick = U.pick;
-        /* eslint-disable valid-jsdoc */
         /**
-         * Provides support for broken axes.
          * @private
-         * @class
          */
-        var BrokenAxisAdditions = /** @class */ (function () {
-                /* *
-                 *
-                 *  Constructors
-                 *
-                 * */
-                function BrokenAxisAdditions(axis) {
-                    this.hasBreaks = false;
-                this.axis = axis;
-            }
-            /* *
-             *
-             *  Static Functions
-             *
-             * */
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.isInBreak = function (brk, val) {
-                var ret,
-                    repeat = brk.repeat || Infinity,
-                    from = brk.from,
-                    length = brk.to - brk.from,
-                    test = (val >= from ?
-                        (val - from) % repeat :
-                        repeat - ((from - val) % repeat));
-                if (!brk.inclusive) {
-                    ret = test < length && test !== 0;
-                }
-                else {
-                    ret = test <= length;
-                }
-                return ret;
-            };
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.lin2Val = function (val) {
-                var axis = this;
-                var brokenAxis = axis.brokenAxis;
-                var breakArray = brokenAxis && brokenAxis.breakArray;
-                if (!breakArray) {
-                    return val;
-                }
-                var nval = val,
-                    brk,
-                    i;
-                for (i = 0; i < breakArray.length; i++) {
-                    brk = breakArray[i];
-                    if (brk.from >= nval) {
-                        break;
-                    }
-                    else if (brk.to < nval) {
-                        nval += brk.len;
-                    }
-                    else if (BrokenAxisAdditions.isInBreak(brk, nval)) {
-                        nval += brk.len;
-                    }
-                }
-                return nval;
-            };
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.val2Lin = function (val) {
-                var axis = this;
-                var brokenAxis = axis.brokenAxis;
-                var breakArray = brokenAxis && brokenAxis.breakArray;
-                if (!breakArray) {
-                    return val;
-                }
-                var nval = val,
-                    brk,
-                    i;
-                for (i = 0; i < breakArray.length; i++) {
-                    brk = breakArray[i];
-                    if (brk.to <= val) {
-                        nval -= brk.len;
-                    }
-                    else if (brk.from >= val) {
-                        break;
-                    }
-                    else if (BrokenAxisAdditions.isInBreak(brk, val)) {
-                        nval -= (val - brk.from);
-                        break;
-                    }
-                }
-                return nval;
-            };
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * Returns the first break found where the x is larger then break.from and
-             * smaller then break.to.
-             *
-             * @param {number} x
-             * The number which should be within a break.
-             *
-             * @param {Array<Highcharts.XAxisBreaksOptions>} breaks
-             * The array of breaks to search within.
-             *
-             * @return {Highcharts.XAxisBreaksOptions|undefined}
-             * Returns the first break found that matches, returns false if no break is
-             * found.
-             */
-            BrokenAxisAdditions.prototype.findBreakAt = function (x, breaks) {
-                return find(breaks, function (b) {
-                    return b.from < x && x < b.to;
-                });
-            };
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.prototype.isInAnyBreak = function (val, testKeep) {
-                var brokenAxis = this;
-                var axis = brokenAxis.axis;
-                var breaks = axis.options.breaks,
-                    i = breaks && breaks.length,
-                    inbrk,
-                    keep,
-                    ret;
-                if (i) {
-                    while (i--) {
-                        if (BrokenAxisAdditions.isInBreak(breaks[i], val)) {
-                            inbrk = true;
-                            if (!keep) {
-                                keep = pick(breaks[i].showPoints, !axis.isXAxis);
-                            }
-                        }
-                    }
-                    if (inbrk && testKeep) {
-                        ret = inbrk && !keep;
-                    }
-                    else {
-                        ret = inbrk;
-                    }
-                }
-                return ret;
-            };
-            /**
-             * Dynamically set or unset breaks in an axis. This function in lighter than
-             * usin Axis.update, and it also preserves animation.
-             *
-             * @private
-             * @function Highcharts.Axis#setBreaks
-             *
-             * @param {Array<Highcharts.XAxisBreaksOptions>} [breaks]
-             *        The breaks to add. When `undefined` it removes existing breaks.
-             *
-             * @param {boolean} [redraw=true]
-             *        Whether to redraw the chart immediately.
-             *
-             * @return {void}
-             */
-            BrokenAxisAdditions.prototype.setBreaks = function (breaks, redraw) {
-                var brokenAxis = this;
-                var axis = brokenAxis.axis;
-                var hasBreaks = (isArray(breaks) && !!breaks.length);
-                axis.isDirty = brokenAxis.hasBreaks !== hasBreaks;
-                brokenAxis.hasBreaks = hasBreaks;
-                axis.options.breaks = axis.userOptions.breaks = breaks;
-                axis.forceRedraw = true; // Force recalculation in setScale
-                // Recalculate series related to the axis.
-                axis.series.forEach(function (series) {
-                    series.isDirty = true;
-                });
-                if (!hasBreaks && axis.val2lin === BrokenAxisAdditions.val2Lin) {
-                    // Revert to prototype functions
-                    delete axis.val2lin;
-                    delete axis.lin2val;
-                }
-                if (hasBreaks) {
-                    axis.userOptions.ordinal = false;
-                    axis.lin2val = BrokenAxisAdditions.lin2Val;
-                    axis.val2lin = BrokenAxisAdditions.val2Lin;
-                    axis.setExtremes = function (newMin, newMax, redraw, animation, eventArguments) {
-                        // If trying to set extremes inside a break, extend min to
-                        // after, and max to before the break ( #3857 )
-                        if (brokenAxis.hasBreaks) {
-                            var axisBreak,
-                                breaks = this.options.breaks;
-                            while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks))) {
-                                newMin = axisBreak.to;
-                            }
-                            while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks))) {
-                                newMax = axisBreak.from;
-                            }
-                            // If both min and max is within the same break.
-                            if (newMax < newMin) {
-                                newMax = newMin;
-                            }
-                        }
-                        Axis.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments);
-                    };
-                    axis.setAxisTranslation = function (saveOld) {
-                        Axis.prototype.setAxisTranslation.call(this, saveOld);
-                        brokenAxis.unitLength = null;
-                        if (brokenAxis.hasBreaks) {
-                            var breaks = axis.options.breaks || [], 
-                                // Temporary one:
-                                breakArrayT = [],
-                                breakArray = [],
-                                length = 0,
-                                inBrk,
-                                repeat,
-                                min = axis.userMin || axis.min,
-                                max = axis.userMax || axis.max,
-                                pointRangePadding = pick(axis.pointRangePadding, 0),
-                                start,
-                                i;
-                            // Min & max check (#4247)
-                            breaks.forEach(function (brk) {
-                                repeat = brk.repeat || Infinity;
-                                if (BrokenAxisAdditions.isInBreak(brk, min)) {
-                                    min +=
-                                        (brk.to % repeat) -
-                                            (min % repeat);
-                                }
-                                if (BrokenAxisAdditions.isInBreak(brk, max)) {
-                                    max -=
-                                        (max % repeat) -
-                                            (brk.from % repeat);
-                                }
-                            });
-                            // Construct an array holding all breaks in the axis
-                            breaks.forEach(function (brk) {
-                                start = brk.from;
-                                repeat = brk.repeat || Infinity;
-                                while (start - repeat > min) {
-                                    start -= repeat;
-                                }
-                                while (start < min) {
-                                    start += repeat;
-                                }
-                                for (i = start; i < max; i += repeat) {
-                                    breakArrayT.push({
-                                        value: i,
-                                        move: 'in'
-                                    });
-                                    breakArrayT.push({
-                                        value: i + (brk.to - brk.from),
-                                        move: 'out',
-                                        size: brk.breakSize
-                                    });
-                                }
-                            });
-                            breakArrayT.sort(function (a, b) {
-                                return ((a.value === b.value) ?
-                                    ((a.move === 'in' ? 0 : 1) -
-                                        (b.move === 'in' ? 0 : 1)) :
-                                    a.value - b.value);
-                            });
-                            // Simplify the breaks
-                            inBrk = 0;
-                            start = min;
-                            breakArrayT.forEach(function (brk) {
-                                inBrk += (brk.move === 'in' ? 1 : -1);
-                                if (inBrk === 1 && brk.move === 'in') {
-                                    start = brk.value;
-                                }
-                                if (inBrk === 0) {
-                                    breakArray.push({
-                                        from: start,
-                                        to: brk.value,
-                                        len: brk.value - start - (brk.size || 0)
-                                    });
-                                    length += brk.value - start - (brk.size || 0);
-                                }
-                            });
-                            /**
-                             * HC <= 8 backwards compatibility, used by demo samples.
-                             * @deprecated
-                             * @private
-                             * @requires modules/broken-axis
-                             */
-                            axis.breakArray = brokenAxis.breakArray = breakArray;
-                            // Used with staticScale, and below the actual axis length,
-                            // when breaks are substracted.
-                            brokenAxis.unitLength = max - min - length + pointRangePadding;
-                            fireEvent(axis, 'afterBreaks');
-                            if (axis.staticScale) {
-                                axis.transA = axis.staticScale;
-                            }
-                            else if (brokenAxis.unitLength) {
-                                axis.transA *=
-                                    (max - axis.min + pointRangePadding) /
-                                        brokenAxis.unitLength;
-                            }
-                            if (pointRangePadding) {
-                                axis.minPixelPadding =
-                                    axis.transA * axis.minPointOffset;
-                            }
-                            axis.min = min;
-                            axis.max = max;
-                        }
-                    };
-                }
-                if (pick(redraw, true)) {
-                    axis.chart.redraw();
-                }
-            };
-            return BrokenAxisAdditions;
-        }());
+        BrokenAxisAdditions.isInBreak = function (brk, val) {
+          var ret,
+            repeat = brk.repeat || Infinity,
+            from = brk.from,
+            length = brk.to - brk.from,
+            test =
+              val >= from
+                ? (val - from) % repeat
+                : repeat - ((from - val) % repeat);
+          if (!brk.inclusive) {
+            ret = test < length && test !== 0;
+          } else {
+            ret = test <= length;
+          }
+          return ret;
+        };
         /**
-         * Axis with support of broken data rows.
          * @private
-         * @class
          */
-        var BrokenAxis = /** @class */ (function () {
-                function BrokenAxis() {
+        BrokenAxisAdditions.lin2Val = function (val) {
+          var axis = this;
+          var brokenAxis = axis.brokenAxis;
+          var breakArray = brokenAxis && brokenAxis.breakArray;
+          if (!breakArray) {
+            return val;
+          }
+          var nval = val,
+            brk,
+            i;
+          for (i = 0; i < breakArray.length; i++) {
+            brk = breakArray[i];
+            if (brk.from >= nval) {
+              break;
+            } else if (brk.to < nval) {
+              nval += brk.len;
+            } else if (BrokenAxisAdditions.isInBreak(brk, nval)) {
+              nval += brk.len;
+            }
+          }
+          return nval;
+        };
+        /**
+         * @private
+         */
+        BrokenAxisAdditions.val2Lin = function (val) {
+          var axis = this;
+          var brokenAxis = axis.brokenAxis;
+          var breakArray = brokenAxis && brokenAxis.breakArray;
+          if (!breakArray) {
+            return val;
+          }
+          var nval = val,
+            brk,
+            i;
+          for (i = 0; i < breakArray.length; i++) {
+            brk = breakArray[i];
+            if (brk.to <= val) {
+              nval -= brk.len;
+            } else if (brk.from >= val) {
+              break;
+            } else if (BrokenAxisAdditions.isInBreak(brk, val)) {
+              nval -= val - brk.from;
+              break;
+            }
+          }
+          return nval;
+        };
+        /* *
+         *
+         *  Functions
+         *
+         * */
+        /**
+         * Returns the first break found where the x is larger then break.from and
+         * smaller then break.to.
+         *
+         * @param {number} x
+         * The number which should be within a break.
+         *
+         * @param {Array<Highcharts.XAxisBreaksOptions>} breaks
+         * The array of breaks to search within.
+         *
+         * @return {Highcharts.XAxisBreaksOptions|undefined}
+         * Returns the first break found that matches, returns false if no break is
+         * found.
+         */
+        BrokenAxisAdditions.prototype.findBreakAt = function (x, breaks) {
+          return find(breaks, function (b) {
+            return b.from < x && x < b.to;
+          });
+        };
+        /**
+         * @private
+         */
+        BrokenAxisAdditions.prototype.isInAnyBreak = function (val, testKeep) {
+          var brokenAxis = this;
+          var axis = brokenAxis.axis;
+          var breaks = axis.options.breaks,
+            i = breaks && breaks.length,
+            inbrk,
+            keep,
+            ret;
+          if (i) {
+            while (i--) {
+              if (BrokenAxisAdditions.isInBreak(breaks[i], val)) {
+                inbrk = true;
+                if (!keep) {
+                  keep = pick(breaks[i].showPoints, !axis.isXAxis);
                 }
-                /**
-                 * Adds support for broken axes.
-                 * @private
-                 */
-                BrokenAxis.compose = function (AxisClass, SeriesClass) {
-                    AxisClass.keepProps.push('brokenAxis');
-                var seriesProto = LineSeries.prototype;
-                /**
-                 * @private
-                 */
-                seriesProto.drawBreaks = function (axis, keys) {
-                    var series = this,
-                        points = series.points,
-                        breaks,
-                        threshold,
-                        eventName,
-                        y;
-                    if (axis && // #5950
-                        axis.brokenAxis &&
-                        axis.brokenAxis.hasBreaks) {
-                        var brokenAxis_1 = axis.brokenAxis;
-                        keys.forEach(function (key) {
-                            breaks = brokenAxis_1 && brokenAxis_1.breakArray || [];
-                            threshold = axis.isXAxis ?
-                                axis.min :
-                                pick(series.options.threshold, axis.min);
-                            points.forEach(function (point) {
-                                y = pick(point['stack' + key.toUpperCase()], point[key]);
-                                breaks.forEach(function (brk) {
-                                    if (isNumber(threshold) && isNumber(y)) {
-                                        eventName = false;
-                                        if ((threshold < brk.from && y > brk.to) ||
-                                            (threshold > brk.from && y < brk.from)) {
-                                            eventName = 'pointBreak';
-                                        }
-                                        else if ((threshold < brk.from && y > brk.from && y < brk.to) ||
-                                            (threshold > brk.from && y > brk.to && y < brk.from)) {
-                                            eventName = 'pointInBreak';
-                                        }
-                                        if (eventName) {
-                                            fireEvent(axis, eventName, { point: point, brk: brk });
-                                        }
-                                    }
-                                });
-                            });
-                        });
-                    }
-                };
-                /**
-                 * Extend getGraphPath by identifying gaps in the data so that we can
-                 * draw a gap in the line or area. This was moved from ordinal axis
-                 * module to broken axis module as of #5045.
-                 *
-                 * @private
-                 * @function Highcharts.Series#gappedPath
-                 *
-                 * @return {Highcharts.SVGPathArray}
-                 * Gapped path
-                 */
-                seriesProto.gappedPath = function () {
-                    var currentDataGrouping = this.currentDataGrouping,
-                        groupingSize = currentDataGrouping && currentDataGrouping.gapSize,
-                        gapSize = this.options.gapSize,
-                        points = this.points.slice(),
-                        i = points.length - 1,
-                        yAxis = this.yAxis,
-                        stack;
-                    /**
-                     * Defines when to display a gap in the graph, together with the
-                     * [gapUnit](plotOptions.series.gapUnit) option.
-                     *
-                     * In case when `dataGrouping` is enabled, points can be grouped
-                     * into a larger time span. This can make the grouped points to have
-                     * a greater distance than the absolute value of `gapSize` property,
-                     * which will result in disappearing graph completely. To prevent
-                     * this situation the mentioned distance between grouped points is
-                     * used instead of previously defined `gapSize`.
-                     *
-                     * In practice, this option is most often used to visualize gaps in
-                     * time series. In a stock chart, intraday data is available for
-                     * daytime hours, while gaps will appear in nights and weekends.
-                     *
-                     * @see [gapUnit](plotOptions.series.gapUnit)
-                     * @see [xAxis.breaks](#xAxis.breaks)
-                     *
-                     * @sample {highstock} stock/plotoptions/series-gapsize/
-                     *         Setting the gap size to 2 introduces gaps for weekends
-                     *         in daily datasets.
-                     *
-                     * @type      {number}
-                     * @default   0
-                     * @product   highstock
-                     * @requires  modules/broken-axis
-                     * @apioption plotOptions.series.gapSize
-                     */
-                    /**
-                     * Together with [gapSize](plotOptions.series.gapSize), this option
-                     * defines where to draw gaps in the graph.
-                     *
-                     * When the `gapUnit` is `"relative"` (default), a gap size of 5
-                     * means that if the distance between two points is greater than
-                     * 5 times that of the two closest points, the graph will be broken.
-                     *
-                     * When the `gapUnit` is `"value"`, the gap is based on absolute
-                     * axis values, which on a datetime axis is milliseconds. This also
-                     * applies to the navigator series that inherits gap options from
-                     * the base series.
-                     *
-                     * @see [gapSize](plotOptions.series.gapSize)
-                     *
-                     * @type       {string}
-                     * @default    relative
-                     * @since      5.0.13
-                     * @product    highstock
-                     * @validvalue ["relative", "value"]
-                     * @requires   modules/broken-axis
-                     * @apioption  plotOptions.series.gapUnit
-                     */
-                    if (gapSize && i > 0) { // #5008
-                        // Gap unit is relative
-                        if (this.options.gapUnit !== 'value') {
-                            gapSize *= this.basePointRange;
-                        }
-                        // Setting a new gapSize in case dataGrouping is enabled (#7686)
-                        if (groupingSize &&
-                            groupingSize > gapSize &&
-                            // Except when DG is forced (e.g. from other series)
-                            // and has lower granularity than actual points (#11351)
-                            groupingSize >= this.basePointRange) {
-                            gapSize = groupingSize;
-                        }
-                        // extension for ordinal breaks
-                        var current = void 0,
-                            next = void 0;
-                        while (i--) {
-                            // Reassign next if it is not visible
-                            if (!(next && next.visible !== false)) {
-                                next = points[i + 1];
-                            }
-                            current = points[i];
-                            // Skip iteration if one of the points is not visible
-                            if (next.visible === false || current.visible === false) {
-                                continue;
-                            }
-                            if (next.x - current.x > gapSize) {
-                                var xRange = (current.x + next.x) / 2;
-                                points.splice(// insert after this one
-                                i + 1, 0, {
-                                    isNull: true,
-                                    x: xRange
-                                });
-                                // For stacked chart generate empty stack items, #6546
-                                if (yAxis.stacking && this.options.stacking) {
-                                    stack = yAxis.stacking.stacks[this.stackKey][xRange] =
-                                        new StackItem(yAxis, yAxis.options
-                                            .stackLabels, false, xRange, this.stack);
-                                    stack.total = 0;
-                                }
-                            }
-                            // Assign current to next for the upcoming iteration
-                            next = current;
-                        }
-                    }
-                    // Call base method
-                    return this.getGraphPath(points);
-                };
-                /* eslint-disable no-invalid-this */
-                addEvent(AxisClass, 'init', function () {
-                    var axis = this;
-                    if (!axis.brokenAxis) {
-                        axis.brokenAxis = new BrokenAxisAdditions(axis);
-                    }
-                });
-                addEvent(AxisClass, 'afterInit', function () {
-                    if (typeof this.brokenAxis !== 'undefined') {
-                        this.brokenAxis.setBreaks(this.options.breaks, false);
-                    }
-                });
-                addEvent(AxisClass, 'afterSetTickPositions', function () {
-                    var axis = this;
-                    var brokenAxis = axis.brokenAxis;
-                    if (brokenAxis &&
-                        brokenAxis.hasBreaks) {
-                        var tickPositions = this.tickPositions,
-                            info = this.tickPositions.info,
-                            newPositions = [],
-                            i;
-                        for (i = 0; i < tickPositions.length; i++) {
-                            if (!brokenAxis.isInAnyBreak(tickPositions[i])) {
-                                newPositions.push(tickPositions[i]);
-                            }
-                        }
-                        this.tickPositions = newPositions;
-                        this.tickPositions.info = info;
-                    }
+              }
+            }
+            if (inbrk && testKeep) {
+              ret = inbrk && !keep;
+            } else {
+              ret = inbrk;
+            }
+          }
+          return ret;
+        };
+        /**
+         * Dynamically set or unset breaks in an axis. This function in lighter than
+         * usin Axis.update, and it also preserves animation.
+         *
+         * @private
+         * @function Highcharts.Axis#setBreaks
+         *
+         * @param {Array<Highcharts.XAxisBreaksOptions>} [breaks]
+         *        The breaks to add. When `undefined` it removes existing breaks.
+         *
+         * @param {boolean} [redraw=true]
+         *        Whether to redraw the chart immediately.
+         *
+         * @return {void}
+         */
+        BrokenAxisAdditions.prototype.setBreaks = function (breaks, redraw) {
+          var brokenAxis = this;
+          var axis = brokenAxis.axis;
+          var hasBreaks = isArray(breaks) && !!breaks.length;
+          axis.isDirty = brokenAxis.hasBreaks !== hasBreaks;
+          brokenAxis.hasBreaks = hasBreaks;
+          axis.options.breaks = axis.userOptions.breaks = breaks;
+          axis.forceRedraw = true; // Force recalculation in setScale
+          // Recalculate series related to the axis.
+          axis.series.forEach(function (series) {
+            series.isDirty = true;
+          });
+          if (!hasBreaks && axis.val2lin === BrokenAxisAdditions.val2Lin) {
+            // Revert to prototype functions
+            delete axis.val2lin;
+            delete axis.lin2val;
+          }
+          if (hasBreaks) {
+            axis.userOptions.ordinal = false;
+            axis.lin2val = BrokenAxisAdditions.lin2Val;
+            axis.val2lin = BrokenAxisAdditions.val2Lin;
+            axis.setExtremes = function (
+              newMin,
+              newMax,
+              redraw,
+              animation,
+              eventArguments
+            ) {
+              // If trying to set extremes inside a break, extend min to
+              // after, and max to before the break ( #3857 )
+              if (brokenAxis.hasBreaks) {
+                var axisBreak,
+                  breaks = this.options.breaks;
+                while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks))) {
+                  newMin = axisBreak.to;
+                }
+                while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks))) {
+                  newMax = axisBreak.from;
+                }
+                // If both min and max is within the same break.
+                if (newMax < newMin) {
+                  newMax = newMin;
+                }
+              }
+              Axis.prototype.setExtremes.call(
+                this,
+                newMin,
+                newMax,
+                redraw,
+                animation,
+                eventArguments
+              );
+            };
+            axis.setAxisTranslation = function (saveOld) {
+              Axis.prototype.setAxisTranslation.call(this, saveOld);
+              brokenAxis.unitLength = null;
+              if (brokenAxis.hasBreaks) {
+                var breaks = axis.options.breaks || [],
+                  // Temporary one:
+                  breakArrayT = [],
+                  breakArray = [],
+                  length = 0,
+                  inBrk,
+                  repeat,
+                  min = axis.userMin || axis.min,
+                  max = axis.userMax || axis.max,
+                  pointRangePadding = pick(axis.pointRangePadding, 0),
+                  start,
+                  i;
+                // Min & max check (#4247)
+                breaks.forEach(function (brk) {
+                  repeat = brk.repeat || Infinity;
+                  if (BrokenAxisAdditions.isInBreak(brk, min)) {
+                    min += (brk.to % repeat) - (min % repeat);
+                  }
+                  if (BrokenAxisAdditions.isInBreak(brk, max)) {
+                    max -= (max % repeat) - (brk.from % repeat);
+                  }
                 });
-                // Force Axis to be not-ordinal when breaks are defined
-                addEvent(AxisClass, 'afterSetOptions', function () {
-                    if (this.brokenAxis && this.brokenAxis.hasBreaks) {
-                        this.options.ordinal = false;
-                    }
+                // Construct an array holding all breaks in the axis
+                breaks.forEach(function (brk) {
+                  start = brk.from;
+                  repeat = brk.repeat || Infinity;
+                  while (start - repeat > min) {
+                    start -= repeat;
+                  }
+                  while (start < min) {
+                    start += repeat;
+                  }
+                  for (i = start; i < max; i += repeat) {
+                    breakArrayT.push({
+                      value: i,
+                      move: "in",
+                    });
+                    breakArrayT.push({
+                      value: i + (brk.to - brk.from),
+                      move: "out",
+                      size: brk.breakSize,
+                    });
+                  }
                 });
-                addEvent(SeriesClass, 'afterGeneratePoints', function () {
-                    var _a = this,
-                        isDirty = _a.isDirty,
-                        connectNulls = _a.options.connectNulls,
-                        points = _a.points,
-                        xAxis = _a.xAxis,
-                        yAxis = _a.yAxis;
-                    // Set, or reset visibility of the points. Axis.setBreaks marks the
-                    // series as isDirty
-                    if (isDirty) {
-                        var i = points.length;
-                        while (i--) {
-                            var point = points[i];
-                            // Respect nulls inside the break (#4275)
-                            var nullGap = point.y === null && connectNulls === false;
-                            var isPointInBreak = (!nullGap && ((xAxis &&
-                                    xAxis.brokenAxis &&
-                                    xAxis.brokenAxis.isInAnyBreak(point.x,
-                                true)) || (yAxis &&
-                                    yAxis.brokenAxis &&
-                                    yAxis.brokenAxis.isInAnyBreak(point.y,
-                                true))));
-                            // Set point.visible if in any break.
-                            // If not in break, reset visible to original value.
-                            point.visible = isPointInBreak ?
-                                false :
-                                point.options.visible !== false;
-                        }
-                    }
+                breakArrayT.sort(function (a, b) {
+                  return a.value === b.value
+                    ? (a.move === "in" ? 0 : 1) - (b.move === "in" ? 0 : 1)
+                    : a.value - b.value;
                 });
-                addEvent(SeriesClass, 'afterRender', function drawPointsWrapped() {
-                    this.drawBreaks(this.xAxis, ['x']);
-                    this.drawBreaks(this.yAxis, pick(this.pointArrayMap, ['y']));
+                // Simplify the breaks
+                inBrk = 0;
+                start = min;
+                breakArrayT.forEach(function (brk) {
+                  inBrk += brk.move === "in" ? 1 : -1;
+                  if (inBrk === 1 && brk.move === "in") {
+                    start = brk.value;
+                  }
+                  if (inBrk === 0) {
+                    breakArray.push({
+                      from: start,
+                      to: brk.value,
+                      len: brk.value - start - (brk.size || 0),
+                    });
+                    length += brk.value - start - (brk.size || 0);
+                  }
                 });
+                /**
+                 * HC <= 8 backwards compatibility, used by demo samples.
+                 * @deprecated
+                 * @private
+                 * @requires modules/broken-axis
+                 */
+                axis.breakArray = brokenAxis.breakArray = breakArray;
+                // Used with staticScale, and below the actual axis length,
+                // when breaks are substracted.
+                brokenAxis.unitLength = max - min - length + pointRangePadding;
+                fireEvent(axis, "afterBreaks");
+                if (axis.staticScale) {
+                  axis.transA = axis.staticScale;
+                } else if (brokenAxis.unitLength) {
+                  axis.transA *=
+                    (max - axis.min + pointRangePadding) /
+                    brokenAxis.unitLength;
+                }
+                if (pointRangePadding) {
+                  axis.minPixelPadding = axis.transA * axis.minPointOffset;
+                }
+                axis.min = min;
+                axis.max = max;
+              }
             };
-            return BrokenAxis;
-        }());
-        BrokenAxis.compose(Axis, LineSeries); // @todo remove automatism
-
+          }
+          if (pick(redraw, true)) {
+            axis.chart.redraw();
+          }
+        };
+        return BrokenAxisAdditions;
+      })();
+      /**
+       * Axis with support of broken data rows.
+       * @private
+       * @class
+       */
+      var BrokenAxis = /** @class */ (function () {
+        function BrokenAxis() {}
+        /**
+         * Adds support for broken axes.
+         * @private
+         */
+        BrokenAxis.compose = function (AxisClass, SeriesClass) {
+          AxisClass.keepProps.push("brokenAxis");
+          var seriesProto = LineSeries.prototype;
+          /**
+           * @private
+           */
+          seriesProto.drawBreaks = function (axis, keys) {
+            var series = this,
+              points = series.points,
+              breaks,
+              threshold,
+              eventName,
+              y;
+            if (
+              axis && // #5950
+              axis.brokenAxis &&
+              axis.brokenAxis.hasBreaks
+            ) {
+              var brokenAxis_1 = axis.brokenAxis;
+              keys.forEach(function (key) {
+                breaks = (brokenAxis_1 && brokenAxis_1.breakArray) || [];
+                threshold = axis.isXAxis
+                  ? axis.min
+                  : pick(series.options.threshold, axis.min);
+                points.forEach(function (point) {
+                  y = pick(point["stack" + key.toUpperCase()], point[key]);
+                  breaks.forEach(function (brk) {
+                    if (isNumber(threshold) && isNumber(y)) {
+                      eventName = false;
+                      if (
+                        (threshold < brk.from && y > brk.to) ||
+                        (threshold > brk.from && y < brk.from)
+                      ) {
+                        eventName = "pointBreak";
+                      } else if (
+                        (threshold < brk.from && y > brk.from && y < brk.to) ||
+                        (threshold > brk.from && y > brk.to && y < brk.from)
+                      ) {
+                        eventName = "pointInBreak";
+                      }
+                      if (eventName) {
+                        fireEvent(axis, eventName, { point: point, brk: brk });
+                      }
+                    }
+                  });
+                });
+              });
+            }
+          };
+          /**
+           * Extend getGraphPath by identifying gaps in the data so that we can
+           * draw a gap in the line or area. This was moved from ordinal axis
+           * module to broken axis module as of #5045.
+           *
+           * @private
+           * @function Highcharts.Series#gappedPath
+           *
+           * @return {Highcharts.SVGPathArray}
+           * Gapped path
+           */
+          seriesProto.gappedPath = function () {
+            var currentDataGrouping = this.currentDataGrouping,
+              groupingSize = currentDataGrouping && currentDataGrouping.gapSize,
+              gapSize = this.options.gapSize,
+              points = this.points.slice(),
+              i = points.length - 1,
+              yAxis = this.yAxis,
+              stack;
+            /**
+             * Defines when to display a gap in the graph, together with the
+             * [gapUnit](plotOptions.series.gapUnit) option.
+             *
+             * In case when `dataGrouping` is enabled, points can be grouped
+             * into a larger time span. This can make the grouped points to have
+             * a greater distance than the absolute value of `gapSize` property,
+             * which will result in disappearing graph completely. To prevent
+             * this situation the mentioned distance between grouped points is
+             * used instead of previously defined `gapSize`.
+             *
+             * In practice, this option is most often used to visualize gaps in
+             * time series. In a stock chart, intraday data is available for
+             * daytime hours, while gaps will appear in nights and weekends.
+             *
+             * @see [gapUnit](plotOptions.series.gapUnit)
+             * @see [xAxis.breaks](#xAxis.breaks)
+             *
+             * @sample {highstock} stock/plotoptions/series-gapsize/
+             *         Setting the gap size to 2 introduces gaps for weekends
+             *         in daily datasets.
+             *
+             * @type      {number}
+             * @default   0
+             * @product   highstock
+             * @requires  modules/broken-axis
+             * @apioption plotOptions.series.gapSize
+             */
+            /**
+             * Together with [gapSize](plotOptions.series.gapSize), this option
+             * defines where to draw gaps in the graph.
+             *
+             * When the `gapUnit` is `"relative"` (default), a gap size of 5
+             * means that if the distance between two points is greater than
+             * 5 times that of the two closest points, the graph will be broken.
+             *
+             * When the `gapUnit` is `"value"`, the gap is based on absolute
+             * axis values, which on a datetime axis is milliseconds. This also
+             * applies to the navigator series that inherits gap options from
+             * the base series.
+             *
+             * @see [gapSize](plotOptions.series.gapSize)
+             *
+             * @type       {string}
+             * @default    relative
+             * @since      5.0.13
+             * @product    highstock
+             * @validvalue ["relative", "value"]
+             * @requires   modules/broken-axis
+             * @apioption  plotOptions.series.gapUnit
+             */
+            if (gapSize && i > 0) {
+              // #5008
+              // Gap unit is relative
+              if (this.options.gapUnit !== "value") {
+                gapSize *= this.basePointRange;
+              }
+              // Setting a new gapSize in case dataGrouping is enabled (#7686)
+              if (
+                groupingSize &&
+                groupingSize > gapSize &&
+                // Except when DG is forced (e.g. from other series)
+                // and has lower granularity than actual points (#11351)
+                groupingSize >= this.basePointRange
+              ) {
+                gapSize = groupingSize;
+              }
+              // extension for ordinal breaks
+              var current = void 0,
+                next = void 0;
+              while (i--) {
+                // Reassign next if it is not visible
+                if (!(next && next.visible !== false)) {
+                  next = points[i + 1];
+                }
+                current = points[i];
+                // Skip iteration if one of the points is not visible
+                if (next.visible === false || current.visible === false) {
+                  continue;
+                }
+                if (next.x - current.x > gapSize) {
+                  var xRange = (current.x + next.x) / 2;
+                  points.splice(
+                    // insert after this one
+                    i + 1,
+                    0,
+                    {
+                      isNull: true,
+                      x: xRange,
+                    }
+                  );
+                  // For stacked chart generate empty stack items, #6546
+                  if (yAxis.stacking && this.options.stacking) {
+                    stack = yAxis.stacking.stacks[this.stackKey][xRange] =
+                      new StackItem(
+                        yAxis,
+                        yAxis.options.stackLabels,
+                        false,
+                        xRange,
+                        this.stack
+                      );
+                    stack.total = 0;
+                  }
+                }
+                // Assign current to next for the upcoming iteration
+                next = current;
+              }
+            }
+            // Call base method
+            return this.getGraphPath(points);
+          };
+          /* eslint-disable no-invalid-this */
+          addEvent(AxisClass, "init", function () {
+            var axis = this;
+            if (!axis.brokenAxis) {
+              axis.brokenAxis = new BrokenAxisAdditions(axis);
+            }
+          });
+          addEvent(AxisClass, "afterInit", function () {
+            if (typeof this.brokenAxis !== "undefined") {
+              this.brokenAxis.setBreaks(this.options.breaks, false);
+            }
+          });
+          addEvent(AxisClass, "afterSetTickPositions", function () {
+            var axis = this;
+            var brokenAxis = axis.brokenAxis;
+            if (brokenAxis && brokenAxis.hasBreaks) {
+              var tickPositions = this.tickPositions,
+                info = this.tickPositions.info,
+                newPositions = [],
+                i;
+              for (i = 0; i < tickPositions.length; i++) {
+                if (!brokenAxis.isInAnyBreak(tickPositions[i])) {
+                  newPositions.push(tickPositions[i]);
+                }
+              }
+              this.tickPositions = newPositions;
+              this.tickPositions.info = info;
+            }
+          });
+          // Force Axis to be not-ordinal when breaks are defined
+          addEvent(AxisClass, "afterSetOptions", function () {
+            if (this.brokenAxis && this.brokenAxis.hasBreaks) {
+              this.options.ordinal = false;
+            }
+          });
+          addEvent(SeriesClass, "afterGeneratePoints", function () {
+            var _a = this,
+              isDirty = _a.isDirty,
+              connectNulls = _a.options.connectNulls,
+              points = _a.points,
+              xAxis = _a.xAxis,
+              yAxis = _a.yAxis;
+            // Set, or reset visibility of the points. Axis.setBreaks marks the
+            // series as isDirty
+            if (isDirty) {
+              var i = points.length;
+              while (i--) {
+                var point = points[i];
+                // Respect nulls inside the break (#4275)
+                var nullGap = point.y === null && connectNulls === false;
+                var isPointInBreak =
+                  !nullGap &&
+                  ((xAxis &&
+                    xAxis.brokenAxis &&
+                    xAxis.brokenAxis.isInAnyBreak(point.x, true)) ||
+                    (yAxis &&
+                      yAxis.brokenAxis &&
+                      yAxis.brokenAxis.isInAnyBreak(point.y, true)));
+                // Set point.visible if in any break.
+                // If not in break, reset visible to original value.
+                point.visible = isPointInBreak
+                  ? false
+                  : point.options.visible !== false;
+              }
+            }
+          });
+          addEvent(SeriesClass, "afterRender", function drawPointsWrapped() {
+            this.drawBreaks(this.xAxis, ["x"]);
+            this.drawBreaks(this.yAxis, pick(this.pointArrayMap, ["y"]));
+          });
+        };
         return BrokenAxis;
-    });
-    _registerModule(_modules, 'Core/Axis/TreeGridAxis.js', [_modules['Core/Globals.js'], _modules['Core/Axis/Axis.js'], _modules['Core/Axis/Tick.js'], _modules['Gantt/Tree.js'], _modules['Core/Axis/TreeGridTick.js'], _modules['Mixins/TreeSeries.js'], _modules['Core/Utilities.js']], function (H, Axis, Tick, Tree, TreeGridTick, mixinTreeSeries, U) {
+      })();
+      BrokenAxis.compose(Axis, LineSeries); // @todo remove automatism
+
+      return BrokenAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/TreeGridAxis.js",
+    [
+      _modules["Core/Globals.js"],
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Axis/Tick.js"],
+      _modules["Gantt/Tree.js"],
+      _modules["Core/Axis/TreeGridTick.js"],
+      _modules["Mixins/TreeSeries.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (H, Axis, Tick, Tree, TreeGridTick, mixinTreeSeries, U) {
+      /* *
+       *
+       *  (c) 2016 Highsoft AS
+       *  Authors: Jon Arild Nygard
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var getLevelOptions = mixinTreeSeries.getLevelOptions;
+      var addEvent = U.addEvent,
+        find = U.find,
+        fireEvent = U.fireEvent,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        isObject = U.isObject,
+        isString = U.isString,
+        merge = U.merge,
+        pick = U.pick,
+        wrap = U.wrap;
+      /**
+       * @private
+       */
+      var TreeGridAxis;
+      (function (TreeGridAxis) {
+        /* *
+         *
+         *  Interfaces
+         *
+         * */
         /* *
          *
-         *  (c) 2016 Highsoft AS
-         *  Authors: Jon Arild Nygard
+         *  Variables
          *
-         *  License: www.highcharts.com/license
+         * */
+        var applied = false;
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Functions
          *
          * */
-        var getLevelOptions = mixinTreeSeries.getLevelOptions;
-        var addEvent = U.addEvent,
-            find = U.find,
-            fireEvent = U.fireEvent,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            isObject = U.isObject,
-            isString = U.isString,
-            merge = U.merge,
-            pick = U.pick,
-            wrap = U.wrap;
         /**
          * @private
          */
-        var TreeGridAxis;
-        (function (TreeGridAxis) {
-            /* *
-             *
-             *  Interfaces
-             *
-             * */
-            /* *
-             *
-             *  Variables
-             *
-             * */
-            var applied = false;
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * @private
-             */
-            function compose(AxisClass) {
-                if (!applied) {
-                    wrap(AxisClass.prototype, 'generateTick', wrapGenerateTick);
-                    wrap(AxisClass.prototype, 'getMaxLabelDimensions', wrapGetMaxLabelDimensions);
-                    wrap(AxisClass.prototype, 'init', wrapInit);
-                    wrap(AxisClass.prototype, 'setTickInterval', wrapSetTickInterval);
-                    TreeGridTick.compose(Tick);
-                    applied = true;
-                }
-            }
-            TreeGridAxis.compose = compose;
-            /**
-             * @private
-             */
-            function getBreakFromNode(node, max) {
-                var from = node.collapseStart || 0,
-                    to = node.collapseEnd || 0;
-                // In broken-axis, the axis.max is minimized until it is not within a
-                // break. Therefore, if break.to is larger than axis.max, the axis.to
-                // should not add the 0.5 axis.tickMarkOffset, to avoid adding a break
-                // larger than axis.max.
-                // TODO consider simplifying broken-axis and this might solve itself
-                if (to >= max) {
-                    from -= 0.5;
-                }
-                return {
-                    from: from,
-                    to: to,
-                    showPoints: false
+        function compose(AxisClass) {
+          if (!applied) {
+            wrap(AxisClass.prototype, "generateTick", wrapGenerateTick);
+            wrap(
+              AxisClass.prototype,
+              "getMaxLabelDimensions",
+              wrapGetMaxLabelDimensions
+            );
+            wrap(AxisClass.prototype, "init", wrapInit);
+            wrap(AxisClass.prototype, "setTickInterval", wrapSetTickInterval);
+            TreeGridTick.compose(Tick);
+            applied = true;
+          }
+        }
+        TreeGridAxis.compose = compose;
+        /**
+         * @private
+         */
+        function getBreakFromNode(node, max) {
+          var from = node.collapseStart || 0,
+            to = node.collapseEnd || 0;
+          // In broken-axis, the axis.max is minimized until it is not within a
+          // break. Therefore, if break.to is larger than axis.max, the axis.to
+          // should not add the 0.5 axis.tickMarkOffset, to avoid adding a break
+          // larger than axis.max.
+          // TODO consider simplifying broken-axis and this might solve itself
+          if (to >= max) {
+            from -= 0.5;
+          }
+          return {
+            from: from,
+            to: to,
+            showPoints: false,
+          };
+        }
+        /**
+         * Creates a tree structure of the data, and the treegrid. Calculates
+         * categories, and y-values of points based on the tree.
+         *
+         * @private
+         * @function getTreeGridFromData
+         *
+         * @param {Array<Highcharts.GanttPointOptions>} data
+         * All the data points to display in the axis.
+         *
+         * @param {boolean} uniqueNames
+         * Wether or not the data node with the same name should share grid cell. If
+         * true they do share cell. False by default.
+         *
+         * @param {number} numberOfSeries
+         *
+         * @return {object}
+         * Returns an object containing categories, mapOfIdToNode,
+         * mapOfPosToGridNode, and tree.
+         *
+         * @todo There should be only one point per line.
+         * @todo It should be optional to have one category per point, or merge
+         *       cells
+         * @todo Add unit-tests.
+         */
+        function getTreeGridFromData(data, uniqueNames, numberOfSeries) {
+          var categories = [],
+            collapsedNodes = [],
+            mapOfIdToNode = {},
+            mapOfPosToGridNode = {},
+            posIterator = -1,
+            uniqueNamesEnabled =
+              typeof uniqueNames === "boolean" ? uniqueNames : false,
+            tree;
+          // Build the tree from the series data.
+          var treeParams = {
+            // After the children has been created.
+            after: function (node) {
+              var gridNode = mapOfPosToGridNode[node.pos],
+                height = 0,
+                descendants = 0;
+              gridNode.children.forEach(function (child) {
+                descendants += (child.descendants || 0) + 1;
+                height = Math.max((child.height || 0) + 1, height);
+              });
+              gridNode.descendants = descendants;
+              gridNode.height = height;
+              if (gridNode.collapsed) {
+                collapsedNodes.push(gridNode);
+              }
+            },
+            // Before the children has been created.
+            before: function (node) {
+              var data = isObject(node.data, true) ? node.data : {},
+                name = isString(data.name) ? data.name : "",
+                parentNode = mapOfIdToNode[node.parent],
+                parentGridNode = isObject(parentNode, true)
+                  ? mapOfPosToGridNode[parentNode.pos]
+                  : null,
+                hasSameName = function (x) {
+                  return x.name === name;
+                },
+                gridNode,
+                pos;
+              // If not unique names, look for sibling node with the same name
+              if (
+                uniqueNamesEnabled &&
+                isObject(parentGridNode, true) &&
+                !!(gridNode = find(parentGridNode.children, hasSameName))
+              ) {
+                // If there is a gridNode with the same name, reuse position
+                pos = gridNode.pos;
+                // Add data node to list of nodes in the grid node.
+                gridNode.nodes.push(node);
+              } else {
+                // If it is a new grid node, increment position.
+                pos = posIterator++;
+              }
+              // Add new grid node to map.
+              if (!mapOfPosToGridNode[pos]) {
+                mapOfPosToGridNode[pos] = gridNode = {
+                  depth: parentGridNode ? parentGridNode.depth + 1 : 0,
+                  name: name,
+                  id: data.id,
+                  nodes: [node],
+                  children: [],
+                  pos: pos,
                 };
-            }
-            /**
-             * Creates a tree structure of the data, and the treegrid. Calculates
-             * categories, and y-values of points based on the tree.
-             *
-             * @private
-             * @function getTreeGridFromData
-             *
-             * @param {Array<Highcharts.GanttPointOptions>} data
-             * All the data points to display in the axis.
-             *
-             * @param {boolean} uniqueNames
-             * Wether or not the data node with the same name should share grid cell. If
-             * true they do share cell. False by default.
-             *
-             * @param {number} numberOfSeries
-             *
-             * @return {object}
-             * Returns an object containing categories, mapOfIdToNode,
-             * mapOfPosToGridNode, and tree.
-             *
-             * @todo There should be only one point per line.
-             * @todo It should be optional to have one category per point, or merge
-             *       cells
-             * @todo Add unit-tests.
-             */
-            function getTreeGridFromData(data, uniqueNames, numberOfSeries) {
-                var categories = [],
-                    collapsedNodes = [],
-                    mapOfIdToNode = {},
-                    mapOfPosToGridNode = {},
-                    posIterator = -1,
-                    uniqueNamesEnabled = typeof uniqueNames === 'boolean' ? uniqueNames : false,
-                    tree;
-                // Build the tree from the series data.
-                var treeParams = {
-                        // After the children has been created.
-                        after: function (node) {
-                            var gridNode = mapOfPosToGridNode[node.pos],
-                    height = 0,
-                    descendants = 0;
-                        gridNode.children.forEach(function (child) {
-                            descendants += (child.descendants || 0) + 1;
-                            height = Math.max((child.height || 0) + 1, height);
-                        });
-                        gridNode.descendants = descendants;
-                        gridNode.height = height;
-                        if (gridNode.collapsed) {
-                            collapsedNodes.push(gridNode);
-                        }
-                    },
-                    // Before the children has been created.
-                    before: function (node) {
-                        var data = isObject(node.data,
-                            true) ? node.data : {},
-                            name = isString(data.name) ? data.name : '',
-                            parentNode = mapOfIdToNode[node.parent],
-                            parentGridNode = (isObject(parentNode,
-                            true) ?
-                                mapOfPosToGridNode[parentNode.pos] :
-                                null),
-                            hasSameName = function (x) {
-                                return x.name === name;
-                        }, gridNode, pos;
-                        // If not unique names, look for sibling node with the same name
-                        if (uniqueNamesEnabled &&
-                            isObject(parentGridNode, true) &&
-                            !!(gridNode = find(parentGridNode.children, hasSameName))) {
-                            // If there is a gridNode with the same name, reuse position
-                            pos = gridNode.pos;
-                            // Add data node to list of nodes in the grid node.
-                            gridNode.nodes.push(node);
-                        }
-                        else {
-                            // If it is a new grid node, increment position.
-                            pos = posIterator++;
-                        }
-                        // Add new grid node to map.
-                        if (!mapOfPosToGridNode[pos]) {
-                            mapOfPosToGridNode[pos] = gridNode = {
-                                depth: parentGridNode ? parentGridNode.depth + 1 : 0,
-                                name: name,
-                                id: data.id,
-                                nodes: [node],
-                                children: [],
-                                pos: pos
-                            };
-                            // If not root, then add name to categories.
-                            if (pos !== -1) {
-                                categories.push(name);
-                            }
-                            // Add name to list of children.
-                            if (isObject(parentGridNode, true)) {
-                                parentGridNode.children.push(gridNode);
-                            }
-                        }
-                        // Add data node to map
-                        if (isString(node.id)) {
-                            mapOfIdToNode[node.id] = node;
-                        }
-                        // If one of the points are collapsed, then start the grid node
-                        // in collapsed state.
-                        if (gridNode &&
-                            data.collapsed === true) {
-                            gridNode.collapsed = true;
+                // If not root, then add name to categories.
+                if (pos !== -1) {
+                  categories.push(name);
+                }
+                // Add name to list of children.
+                if (isObject(parentGridNode, true)) {
+                  parentGridNode.children.push(gridNode);
+                }
+              }
+              // Add data node to map
+              if (isString(node.id)) {
+                mapOfIdToNode[node.id] = node;
+              }
+              // If one of the points are collapsed, then start the grid node
+              // in collapsed state.
+              if (gridNode && data.collapsed === true) {
+                gridNode.collapsed = true;
+              }
+              // Assign pos to data node
+              node.pos = pos;
+            },
+          };
+          var updateYValuesAndTickPos = function (map, numberOfSeries) {
+            var setValues = function (gridNode, start, result) {
+              var nodes = gridNode.nodes,
+                end = start + (start === -1 ? 0 : numberOfSeries - 1),
+                diff = (end - start) / 2,
+                padding = 0.5,
+                pos = start + diff;
+              nodes.forEach(function (node) {
+                var data = node.data;
+                if (isObject(data, true)) {
+                  // Update point
+                  data.y = start + (data.seriesIndex || 0);
+                  // Remove the property once used
+                  delete data.seriesIndex;
+                }
+                node.pos = pos;
+              });
+              result[pos] = gridNode;
+              gridNode.pos = pos;
+              gridNode.tickmarkOffset = diff + padding;
+              gridNode.collapseStart = end + padding;
+              gridNode.children.forEach(function (child) {
+                setValues(child, end + 1, result);
+                end = (child.collapseEnd || 0) - padding;
+              });
+              // Set collapseEnd to the end of the last child node.
+              gridNode.collapseEnd = end + padding;
+              return result;
+            };
+            return setValues(map["-1"], -1, {});
+          };
+          // Create tree from data
+          tree = Tree.getTree(data, treeParams);
+          // Update y values of data, and set calculate tick positions.
+          mapOfPosToGridNode = updateYValuesAndTickPos(
+            mapOfPosToGridNode,
+            numberOfSeries
+          );
+          // Return the resulting data.
+          return {
+            categories: categories,
+            mapOfIdToNode: mapOfIdToNode,
+            mapOfPosToGridNode: mapOfPosToGridNode,
+            collapsedNodes: collapsedNodes,
+            tree: tree,
+          };
+        }
+        /**
+         * Builds the tree of categories and calculates its positions.
+         * @private
+         * @param {object} e Event object
+         * @param {object} e.target The chart instance which the event was fired on.
+         * @param {object[]} e.target.axes The axes of the chart.
+         */
+        function onBeforeRender(e) {
+          var chart = e.target,
+            axes = chart.axes;
+          axes
+            .filter(function (axis) {
+              return axis.options.type === "treegrid";
+            })
+            .forEach(function (axis) {
+              var options = axis.options || {},
+                labelOptions = options.labels,
+                uniqueNames = options.uniqueNames,
+                numberOfSeries = 0,
+                isDirty,
+                data,
+                treeGrid,
+                max = options.max;
+              // Check whether any of series is rendering for the first time,
+              // visibility has changed, or its data is dirty,
+              // and only then update. #10570, #10580
+              // Also check if mapOfPosToGridNode exists. #10887
+              isDirty =
+                !axis.treeGrid.mapOfPosToGridNode ||
+                axis.series.some(function (series) {
+                  return (
+                    !series.hasRendered || series.isDirtyData || series.isDirty
+                  );
+                });
+              if (isDirty) {
+                // Concatenate data from all series assigned to this axis.
+                data = axis.series.reduce(function (arr, s) {
+                  if (s.visible) {
+                    // Push all data to array
+                    (s.options.data || []).forEach(function (data) {
+                      // For using keys - rebuild the data structure
+                      if (s.options.keys && s.options.keys.length) {
+                        data = s.pointClass.prototype.optionsToObject.call(
+                          { series: s },
+                          data
+                        );
+                        H.seriesTypes.gantt.prototype.setGanttPointAliases(
+                          data
+                        );
+                      }
+                      if (isObject(data, true)) {
+                        // Set series index on data. Removed again
+                        // after use.
+                        data.seriesIndex = numberOfSeries;
+                        arr.push(data);
+                      }
+                    });
+                    // Increment series index
+                    if (uniqueNames === true) {
+                      numberOfSeries++;
+                    }
+                  }
+                  return arr;
+                }, []);
+                // If max is higher than set data - add a
+                // dummy data to render categories #10779
+                if (max && data.length < max) {
+                  for (var i = data.length; i <= max; i++) {
+                    data.push({
+                      // Use the zero-width character
+                      // to avoid conflict with uniqueNames
+                      name: i + "\u200B",
+                    });
+                  }
+                }
+                // setScale is fired after all the series is initialized,
+                // which is an ideal time to update the axis.categories.
+                treeGrid = getTreeGridFromData(
+                  data,
+                  uniqueNames || false,
+                  uniqueNames === true ? numberOfSeries : 1
+                );
+                // Assign values to the axis.
+                axis.categories = treeGrid.categories;
+                axis.treeGrid.mapOfPosToGridNode = treeGrid.mapOfPosToGridNode;
+                axis.hasNames = true;
+                axis.treeGrid.tree = treeGrid.tree;
+                // Update yData now that we have calculated the y values
+                axis.series.forEach(function (series) {
+                  var axisData = (series.options.data || []).map(function (d) {
+                    if (
+                      isArray(d) &&
+                      series.options.keys &&
+                      series.options.keys.length
+                    ) {
+                      // Get the axisData from the data array used to
+                      // build the treeGrid where has been modified
+                      data.forEach(function (point) {
+                        if (
+                          d.indexOf(point.x) >= 0 &&
+                          d.indexOf(point.x2) >= 0
+                        ) {
+                          d = point;
                         }
-                        // Assign pos to data node
-                        node.pos = pos;
-                    }
-                };
-                var updateYValuesAndTickPos = function (map,
-                    numberOfSeries) {
-                        var setValues = function (gridNode,
-                    start,
-                    result) {
-                            var nodes = gridNode.nodes,
-                    end = start + (start === -1 ? 0 : numberOfSeries - 1),
-                    diff = (end - start) / 2,
-                    padding = 0.5,
-                    pos = start + diff;
-                        nodes.forEach(function (node) {
-                            var data = node.data;
-                            if (isObject(data, true)) {
-                                // Update point
-                                data.y = start + (data.seriesIndex || 0);
-                                // Remove the property once used
-                                delete data.seriesIndex;
-                            }
-                            node.pos = pos;
-                        });
-                        result[pos] = gridNode;
-                        gridNode.pos = pos;
-                        gridNode.tickmarkOffset = diff + padding;
-                        gridNode.collapseStart = end + padding;
-                        gridNode.children.forEach(function (child) {
-                            setValues(child, end + 1, result);
-                            end = (child.collapseEnd || 0) - padding;
-                        });
-                        // Set collapseEnd to the end of the last child node.
-                        gridNode.collapseEnd = end + padding;
-                        return result;
-                    };
-                    return setValues(map['-1'], -1, {});
-                };
-                // Create tree from data
-                tree = Tree.getTree(data, treeParams);
-                // Update y values of data, and set calculate tick positions.
-                mapOfPosToGridNode = updateYValuesAndTickPos(mapOfPosToGridNode, numberOfSeries);
-                // Return the resulting data.
-                return {
-                    categories: categories,
-                    mapOfIdToNode: mapOfIdToNode,
-                    mapOfPosToGridNode: mapOfPosToGridNode,
-                    collapsedNodes: collapsedNodes,
-                    tree: tree
-                };
+                      });
+                    }
+                    return isObject(d, true) ? merge(d) : d;
+                  });
+                  // Avoid destroying points when series is not visible
+                  if (series.visible) {
+                    series.setData(axisData, false);
+                  }
+                });
+                // Calculate the label options for each level in the tree.
+                axis.treeGrid.mapOptionsToLevel = getLevelOptions({
+                  defaults: labelOptions,
+                  from: 1,
+                  levels: labelOptions && labelOptions.levels,
+                  to: axis.treeGrid.tree && axis.treeGrid.tree.height,
+                });
+                // Setting initial collapsed nodes
+                if (e.type === "beforeRender") {
+                  axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;
+                }
+              }
+            });
+        }
+        /**
+         * Generates a tick for initial positioning.
+         *
+         * @private
+         * @function Highcharts.GridAxis#generateTick
+         *
+         * @param {Function} proceed
+         * The original generateTick function.
+         *
+         * @param {number} pos
+         * The tick position in axis values.
+         */
+        function wrapGenerateTick(proceed, pos) {
+          var axis = this,
+            mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {},
+            isTreeGrid = axis.options.type === "treegrid",
+            ticks = axis.ticks;
+          var tick = ticks[pos],
+            levelOptions,
+            options,
+            gridNode;
+          if (isTreeGrid && axis.treeGrid.mapOfPosToGridNode) {
+            gridNode = axis.treeGrid.mapOfPosToGridNode[pos];
+            levelOptions = mapOptionsToLevel[gridNode.depth];
+            if (levelOptions) {
+              options = {
+                labels: levelOptions,
+              };
             }
-            /**
-             * Builds the tree of categories and calculates its positions.
-             * @private
-             * @param {object} e Event object
-             * @param {object} e.target The chart instance which the event was fired on.
-             * @param {object[]} e.target.axes The axes of the chart.
-             */
-            function onBeforeRender(e) {
-                var chart = e.target,
-                    axes = chart.axes;
-                axes.filter(function (axis) {
-                    return axis.options.type === 'treegrid';
-                }).forEach(function (axis) {
-                    var options = axis.options || {},
-                        labelOptions = options.labels,
-                        uniqueNames = options.uniqueNames,
-                        numberOfSeries = 0,
-                        isDirty,
-                        data,
-                        treeGrid,
-                        max = options.max;
-                    // Check whether any of series is rendering for the first time,
-                    // visibility has changed, or its data is dirty,
-                    // and only then update. #10570, #10580
-                    // Also check if mapOfPosToGridNode exists. #10887
-                    isDirty = (!axis.treeGrid.mapOfPosToGridNode ||
-                        axis.series.some(function (series) {
-                            return !series.hasRendered ||
-                                series.isDirtyData ||
-                                series.isDirty;
-                        }));
-                    if (isDirty) {
-                        // Concatenate data from all series assigned to this axis.
-                        data = axis.series.reduce(function (arr, s) {
-                            if (s.visible) {
-                                // Push all data to array
-                                (s.options.data || []).forEach(function (data) {
-                                    // For using keys - rebuild the data structure
-                                    if (s.options.keys && s.options.keys.length) {
-                                        data = s.pointClass.prototype.optionsToObject.call({ series: s }, data);
-                                        H.seriesTypes.gantt.prototype.setGanttPointAliases(data);
-                                    }
-                                    if (isObject(data, true)) {
-                                        // Set series index on data. Removed again
-                                        // after use.
-                                        data.seriesIndex = numberOfSeries;
-                                        arr.push(data);
-                                    }
-                                });
-                                // Increment series index
-                                if (uniqueNames === true) {
-                                    numberOfSeries++;
-                                }
-                            }
-                            return arr;
-                        }, []);
-                        // If max is higher than set data - add a
-                        // dummy data to render categories #10779
-                        if (max && data.length < max) {
-                            for (var i = data.length; i <= max; i++) {
-                                data.push({
-                                    // Use the zero-width character
-                                    // to avoid conflict with uniqueNames
-                                    name: i + '\u200B'
-                                });
-                            }
-                        }
-                        // setScale is fired after all the series is initialized,
-                        // which is an ideal time to update the axis.categories.
-                        treeGrid = getTreeGridFromData(data, uniqueNames || false, (uniqueNames === true) ? numberOfSeries : 1);
-                        // Assign values to the axis.
-                        axis.categories = treeGrid.categories;
-                        axis.treeGrid.mapOfPosToGridNode = treeGrid.mapOfPosToGridNode;
-                        axis.hasNames = true;
-                        axis.treeGrid.tree = treeGrid.tree;
-                        // Update yData now that we have calculated the y values
-                        axis.series.forEach(function (series) {
-                            var axisData = (series.options.data || []).map(function (d) {
-                                    if (isArray(d) && series.options.keys && series.options.keys.length) {
-                                        // Get the axisData from the data array used to
-                                        // build the treeGrid where has been modified
-                                        data.forEach(function (point) {
-                                            if (d.indexOf(point.x) >= 0 && d.indexOf(point.x2) >= 0) {
-                                                d = point;
-                                        }
-                                    });
-                                }
-                                return isObject(d, true) ? merge(d) : d;
-                            });
-                            // Avoid destroying points when series is not visible
-                            if (series.visible) {
-                                series.setData(axisData, false);
-                            }
+            if (!tick) {
+              ticks[pos] = tick = new Tick(axis, pos, void 0, void 0, {
+                category: gridNode.name,
+                tickmarkOffset: gridNode.tickmarkOffset,
+                options: options,
+              });
+            } else {
+              // update labels depending on tick interval
+              tick.parameters.category = gridNode.name;
+              tick.options = options;
+              tick.addLabel();
+            }
+          } else {
+            proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
+          }
+        }
+        /**
+         * Override to add indentation to axis.maxLabelDimensions.
+         *
+         * @private
+         * @function Highcharts.GridAxis#getMaxLabelDimensions
+         *
+         * @param {Function} proceed
+         * The original function
+         */
+        function wrapGetMaxLabelDimensions(proceed) {
+          var axis = this,
+            options = axis.options,
+            labelOptions = options && options.labels,
+            indentation =
+              labelOptions && isNumber(labelOptions.indentation)
+                ? labelOptions.indentation
+                : 0,
+            retVal = proceed.apply(
+              axis,
+              Array.prototype.slice.call(arguments, 1)
+            ),
+            isTreeGrid = axis.options.type === "treegrid";
+          var treeDepth;
+          if (isTreeGrid && axis.treeGrid.mapOfPosToGridNode) {
+            treeDepth = axis.treeGrid.mapOfPosToGridNode[-1].height || 0;
+            retVal.width += indentation * (treeDepth - 1);
+          }
+          return retVal;
+        }
+        /**
+         * @private
+         */
+        function wrapInit(proceed, chart, userOptions) {
+          var axis = this,
+            isTreeGrid = userOptions.type === "treegrid";
+          if (!axis.treeGrid) {
+            axis.treeGrid = new Additions(axis);
+          }
+          // Set default and forced options for TreeGrid
+          if (isTreeGrid) {
+            // Add event for updating the categories of a treegrid.
+            // NOTE Preferably these events should be set on the axis.
+            addEvent(chart, "beforeRender", onBeforeRender);
+            addEvent(chart, "beforeRedraw", onBeforeRender);
+            // Add new collapsed nodes on addseries
+            addEvent(chart, "addSeries", function (e) {
+              if (e.options.data) {
+                var treeGrid = getTreeGridFromData(
+                  e.options.data,
+                  userOptions.uniqueNames || false,
+                  1
+                );
+                axis.treeGrid.collapsedNodes = (
+                  axis.treeGrid.collapsedNodes || []
+                ).concat(treeGrid.collapsedNodes);
+              }
+            });
+            // Collapse all nodes in axis.treegrid.collapsednodes
+            // where collapsed equals true.
+            addEvent(axis, "foundExtremes", function () {
+              if (axis.treeGrid.collapsedNodes) {
+                axis.treeGrid.collapsedNodes.forEach(function (node) {
+                  var breaks = axis.treeGrid.collapse(node);
+                  if (axis.brokenAxis) {
+                    axis.brokenAxis.setBreaks(breaks, false);
+                    // remove the node from the axis collapsedNodes
+                    if (axis.treeGrid.collapsedNodes) {
+                      axis.treeGrid.collapsedNodes =
+                        axis.treeGrid.collapsedNodes.filter(function (n) {
+                          return (
+                            node.collapseStart !== n.collapseStart ||
+                            node.collapseEnd !== n.collapseEnd
+                          );
                         });
-                        // Calculate the label options for each level in the tree.
-                        axis.treeGrid.mapOptionsToLevel =
-                            getLevelOptions({
-                                defaults: labelOptions,
-                                from: 1,
-                                levels: labelOptions && labelOptions.levels,
-                                to: axis.treeGrid.tree && axis.treeGrid.tree.height
-                            });
-                        // Setting initial collapsed nodes
-                        if (e.type === 'beforeRender') {
-                            axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;
-                        }
                     }
+                  }
                 });
-            }
-            /**
-             * Generates a tick for initial positioning.
-             *
-             * @private
-             * @function Highcharts.GridAxis#generateTick
-             *
-             * @param {Function} proceed
-             * The original generateTick function.
-             *
-             * @param {number} pos
-             * The tick position in axis values.
-             */
-            function wrapGenerateTick(proceed, pos) {
-                var axis = this,
-                    mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {},
-                    isTreeGrid = axis.options.type === 'treegrid',
-                    ticks = axis.ticks;
-                var tick = ticks[pos],
-                    levelOptions,
-                    options,
-                    gridNode;
-                if (isTreeGrid &&
-                    axis.treeGrid.mapOfPosToGridNode) {
-                    gridNode = axis.treeGrid.mapOfPosToGridNode[pos];
-                    levelOptions = mapOptionsToLevel[gridNode.depth];
-                    if (levelOptions) {
-                        options = {
-                            labels: levelOptions
-                        };
-                    }
-                    if (!tick) {
-                        ticks[pos] = tick =
-                            new Tick(axis, pos, void 0, void 0, {
-                                category: gridNode.name,
-                                tickmarkOffset: gridNode.tickmarkOffset,
-                                options: options
-                            });
-                    }
-                    else {
-                        // update labels depending on tick interval
-                        tick.parameters.category = gridNode.name;
-                        tick.options = options;
-                        tick.addLabel();
-                    }
-                }
-                else {
-                    proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
-                }
-            }
-            /**
-             * Override to add indentation to axis.maxLabelDimensions.
-             *
-             * @private
-             * @function Highcharts.GridAxis#getMaxLabelDimensions
-             *
-             * @param {Function} proceed
-             * The original function
-             */
-            function wrapGetMaxLabelDimensions(proceed) {
-                var axis = this,
-                    options = axis.options,
-                    labelOptions = options && options.labels,
-                    indentation = (labelOptions && isNumber(labelOptions.indentation) ?
-                        labelOptions.indentation :
-                        0),
-                    retVal = proceed.apply(axis,
-                    Array.prototype.slice.call(arguments, 1)),
-                    isTreeGrid = axis.options.type === 'treegrid';
-                var treeDepth;
-                if (isTreeGrid && axis.treeGrid.mapOfPosToGridNode) {
-                    treeDepth = axis.treeGrid.mapOfPosToGridNode[-1].height || 0;
-                    retVal.width += indentation * (treeDepth - 1);
-                }
-                return retVal;
-            }
-            /**
-             * @private
-             */
-            function wrapInit(proceed, chart, userOptions) {
-                var axis = this,
-                    isTreeGrid = userOptions.type === 'treegrid';
-                if (!axis.treeGrid) {
-                    axis.treeGrid = new Additions(axis);
-                }
-                // Set default and forced options for TreeGrid
-                if (isTreeGrid) {
-                    // Add event for updating the categories of a treegrid.
-                    // NOTE Preferably these events should be set on the axis.
-                    addEvent(chart, 'beforeRender', onBeforeRender);
-                    addEvent(chart, 'beforeRedraw', onBeforeRender);
-                    // Add new collapsed nodes on addseries
-                    addEvent(chart, 'addSeries', function (e) {
-                        if (e.options.data) {
-                            var treeGrid = getTreeGridFromData(e.options.data,
-                                userOptions.uniqueNames || false, 1);
-                            axis.treeGrid.collapsedNodes = (axis.treeGrid.collapsedNodes || []).concat(treeGrid.collapsedNodes);
-                        }
-                    });
-                    // Collapse all nodes in axis.treegrid.collapsednodes
-                    // where collapsed equals true.
-                    addEvent(axis, 'foundExtremes', function () {
-                        if (axis.treeGrid.collapsedNodes) {
-                            axis.treeGrid.collapsedNodes.forEach(function (node) {
-                                var breaks = axis.treeGrid.collapse(node);
-                                if (axis.brokenAxis) {
-                                    axis.brokenAxis.setBreaks(breaks, false);
-                                    // remove the node from the axis collapsedNodes
-                                    if (axis.treeGrid.collapsedNodes) {
-                                        axis.treeGrid.collapsedNodes = axis.treeGrid.collapsedNodes.filter(function (n) {
-                                            return node.collapseStart !== n.collapseStart ||
-                                                node.collapseEnd !== n.collapseEnd;
-                                        });
-                                    }
-                                }
-                            });
-                        }
-                    });
-                    // If staticScale is not defined on the yAxis
-                    // and chart height is set, set axis.isDirty
-                    // to ensure collapsing works (#12012)
-                    addEvent(axis, 'afterBreaks', function () {
-                        var _a;
-                        if (axis.coll === 'yAxis' && !axis.staticScale && ((_a = axis.chart.options.chart) === null || _a === void 0 ? void 0 : _a.height)) {
-                            axis.isDirty = true;
-                        }
-                    });
-                    userOptions = merge({
-                        // Default options
-                        grid: {
-                            enabled: true
-                        },
-                        // TODO: add support for align in treegrid.
-                        labels: {
-                            align: 'left',
-                            /**
-                            * Set options on specific levels in a tree grid axis. Takes
-                            * precedence over labels options.
-                            *
-                            * @sample {gantt} gantt/treegrid-axis/labels-levels
-                            *         Levels on TreeGrid Labels
-                            *
-                            * @type      {Array<*>}
-                            * @product   gantt
-                            * @apioption yAxis.labels.levels
-                            *
-                            * @private
-                            */
-                            levels: [{
-                                    /**
-                                    * Specify the level which the options within this object
-                                    * applies to.
-                                    *
-                                    * @type      {number}
-                                    * @product   gantt
-                                    * @apioption yAxis.labels.levels.level
-                                    *
-                                    * @private
-                                    */
-                                    level: void 0
-                                }, {
-                                    level: 1,
-                                    /**
-                                     * @type      {Highcharts.CSSObject}
-                                     * @product   gantt
-                                     * @apioption yAxis.labels.levels.style
-                                     *
-                                     * @private
-                                     */
-                                    style: {
-                                        /** @ignore-option */
-                                        fontWeight: 'bold'
-                                    }
-                                }],
-                            /**
-                             * The symbol for the collapse and expand icon in a
-                             * treegrid.
-                             *
-                             * @product      gantt
-                             * @optionparent yAxis.labels.symbol
-                             *
-                             * @private
-                             */
-                            symbol: {
-                                /**
-                                 * The symbol type. Points to a definition function in
-                                 * the `Highcharts.Renderer.symbols` collection.
-                                 *
-                                 * @type {Highcharts.SymbolKeyValue}
-                                 *
-                                 * @private
-                                 */
-                                type: 'triangle',
-                                x: -5,
-                                y: -5,
-                                height: 10,
-                                width: 10,
-                                padding: 5
-                            }
-                        },
-                        uniqueNames: false
-                    }, userOptions, {
-                        // Forced options
-                        reversed: true,
-                        // grid.columns is not supported in treegrid
-                        grid: {
-                            columns: void 0
-                        }
-                    });
-                }
-                // Now apply the original function with the original arguments,
-                // which are sliced off this function's arguments
-                proceed.apply(axis, [chart, userOptions]);
-                if (isTreeGrid) {
-                    axis.hasNames = true;
-                    axis.options.showLastLabel = true;
-                }
-            }
-            /**
-             * Set the tick positions, tickInterval, axis min and max.
-             *
-             * @private
-             * @function Highcharts.GridAxis#setTickInterval
-             *
-             * @param {Function} proceed
-             * The original setTickInterval function.
-             */
-            function wrapSetTickInterval(proceed) {
-                var axis = this,
-                    options = axis.options,
-                    isTreeGrid = options.type === 'treegrid';
-                if (isTreeGrid) {
-                    axis.min = pick(axis.userMin, options.min, axis.dataMin);
-                    axis.max = pick(axis.userMax, options.max, axis.dataMax);
-                    fireEvent(axis, 'foundExtremes');
-                    // setAxisTranslation modifies the min and max according to
-                    // axis breaks.
-                    axis.setAxisTranslation(true);
-                    axis.tickmarkOffset = 0.5;
-                    axis.tickInterval = 1;
-                    axis.tickPositions = axis.treeGrid.mapOfPosToGridNode ?
-                        axis.treeGrid.getTickPositions() :
-                        [];
-                }
-                else {
-                    proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
-                }
-            }
-            /* *
-             *
-             *  Classes
-             *
-             * */
-            /**
-             * @private
-             * @class
-             */
-            var Additions = /** @class */ (function () {
-                    /* *
+              }
+            });
+            // If staticScale is not defined on the yAxis
+            // and chart height is set, set axis.isDirty
+            // to ensure collapsing works (#12012)
+            addEvent(axis, "afterBreaks", function () {
+              var _a;
+              if (
+                axis.coll === "yAxis" &&
+                !axis.staticScale &&
+                ((_a = axis.chart.options.chart) === null || _a === void 0
+                  ? void 0
+                  : _a.height)
+              ) {
+                axis.isDirty = true;
+              }
+            });
+            userOptions = merge(
+              {
+                // Default options
+                grid: {
+                  enabled: true,
+                },
+                // TODO: add support for align in treegrid.
+                labels: {
+                  align: "left",
+                  /**
+                   * Set options on specific levels in a tree grid axis. Takes
+                   * precedence over labels options.
+                   *
+                   * @sample {gantt} gantt/treegrid-axis/labels-levels
+                   *         Levels on TreeGrid Labels
+                   *
+                   * @type      {Array<*>}
+                   * @product   gantt
+                   * @apioption yAxis.labels.levels
+                   *
+                   * @private
+                   */
+                  levels: [
+                    {
+                      /**
+                       * Specify the level which the options within this object
+                       * applies to.
+                       *
+                       * @type      {number}
+                       * @product   gantt
+                       * @apioption yAxis.labels.levels.level
+                       *
+                       * @private
+                       */
+                      level: void 0,
+                    },
+                    {
+                      level: 1,
+                      /**
+                       * @type      {Highcharts.CSSObject}
+                       * @product   gantt
+                       * @apioption yAxis.labels.levels.style
+                       *
+                       * @private
+                       */
+                      style: {
+                        /** @ignore-option */
+                        fontWeight: "bold",
+                      },
+                    },
+                  ],
+                  /**
+                   * The symbol for the collapse and expand icon in a
+                   * treegrid.
+                   *
+                   * @product      gantt
+                   * @optionparent yAxis.labels.symbol
+                   *
+                   * @private
+                   */
+                  symbol: {
+                    /**
+                     * The symbol type. Points to a definition function in
+                     * the `Highcharts.Renderer.symbols` collection.
                      *
-                     *  Constructors
+                     * @type {Highcharts.SymbolKeyValue}
                      *
-                     * */
-                    /**
                      * @private
                      */
-                    function Additions(axis) {
-                        this.axis = axis;
-                }
-                /* *
-                 *
-                 *  Functions
-                 *
-                 * */
-                /**
-                 * Set the collapse status.
-                 *
-                 * @private
-                 *
-                 * @param {Highcharts.Axis} axis
-                 * The axis to check against.
-                 *
-                 * @param {Highcharts.GridNode} node
-                 * The node to collapse.
-                 */
-                Additions.prototype.setCollapsedStatus = function (node) {
-                    var axis = this.axis,
-                        chart = axis.chart;
-                    axis.series.forEach(function (series) {
-                        var data = series.options.data;
-                        if (node.id && data) {
-                            var point = chart.get(node.id),
-                                dataPoint = data[series.data.indexOf(point)];
-                            if (point && dataPoint) {
-                                point.collapsed = node.collapsed;
-                                dataPoint.collapsed = node.collapsed;
-                            }
-                        }
-                    });
-                };
-                /**
-                 * Calculates the new axis breaks to collapse a node.
-                 *
-                 * @private
-                 *
-                 * @param {Highcharts.Axis} axis
-                 * The axis to check against.
-                 *
-                 * @param {Highcharts.GridNode} node
-                 * The node to collapse.
-                 *
-                 * @param {number} pos
-                 * The tick position to collapse.
-                 *
-                 * @return {Array<object>}
-                 * Returns an array of the new breaks for the axis.
-                 */
-                Additions.prototype.collapse = function (node) {
-                    var axis = this.axis,
-                        breaks = (axis.options.breaks || []),
-                        obj = getBreakFromNode(node,
-                        axis.max);
-                    breaks.push(obj);
-                    // Change the collapsed flag #13838
-                    node.collapsed = true;
-                    axis.treeGrid.setCollapsedStatus(node);
-                    return breaks;
-                };
-                /**
-                 * Calculates the new axis breaks to expand a node.
-                 *
-                 * @private
-                 *
-                 * @param {Highcharts.Axis} axis
-                 * The axis to check against.
-                 *
-                 * @param {Highcharts.GridNode} node
-                 * The node to expand.
-                 *
-                 * @param {number} pos
-                 * The tick position to expand.
-                 *
-                 * @return {Array<object>}
-                 * Returns an array of the new breaks for the axis.
-                 */
-                Additions.prototype.expand = function (node) {
-                    var axis = this.axis,
-                        breaks = (axis.options.breaks || []),
-                        obj = getBreakFromNode(node,
-                        axis.max);
-                    // Change the collapsed flag #13838
-                    node.collapsed = false;
-                    axis.treeGrid.setCollapsedStatus(node);
-                    // Remove the break from the axis breaks array.
-                    return breaks.reduce(function (arr, b) {
-                        if (b.to !== obj.to || b.from !== obj.from) {
-                            arr.push(b);
-                        }
-                        return arr;
-                    }, []);
-                };
-                /**
-                 * Creates a list of positions for the ticks on the axis. Filters out
-                 * positions that are outside min and max, or is inside an axis break.
-                 *
-                 * @private
-                 *
-                 * @return {Array<number>}
-                 * List of positions.
-                 */
-                Additions.prototype.getTickPositions = function () {
-                    var axis = this.axis,
-                        roundedMin = Math.floor(axis.min / axis.tickInterval) * axis.tickInterval,
-                        roundedMax = Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;
-                    return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(function (arr, key) {
-                        var pos = +key;
-                        if (pos >= roundedMin &&
-                            pos <= roundedMax &&
-                            !(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))) {
-                            arr.push(pos);
-                        }
-                        return arr;
-                    }, []);
-                };
-                /**
-                 * Check if a node is collapsed.
-                 *
-                 * @private
-                 *
-                 * @param {Highcharts.Axis} axis
-                 * The axis to check against.
-                 *
-                 * @param {object} node
-                 * The node to check if is collapsed.
-                 *
-                 * @param {number} pos
-                 * The tick position to collapse.
-                 *
-                 * @return {boolean}
-                 * Returns true if collapsed, false if expanded.
-                 */
-                Additions.prototype.isCollapsed = function (node) {
-                    var axis = this.axis,
-                        breaks = (axis.options.breaks || []),
-                        obj = getBreakFromNode(node,
-                        axis.max);
-                    return breaks.some(function (b) {
-                        return b.from === obj.from && b.to === obj.to;
-                    });
-                };
-                /**
-                 * Calculates the new axis breaks after toggling the collapse/expand
-                 * state of a node. If it is collapsed it will be expanded, and if it is
-                 * exapended it will be collapsed.
-                 *
-                 * @private
-                 *
-                 * @param {Highcharts.Axis} axis
-                 * The axis to check against.
-                 *
-                 * @param {Highcharts.GridNode} node
-                 * The node to toggle.
-                 *
-                 * @return {Array<object>}
-                 * Returns an array of the new breaks for the axis.
-                 */
-                Additions.prototype.toggleCollapse = function (node) {
-                    return (this.isCollapsed(node) ?
-                        this.expand(node) :
-                        this.collapse(node));
-                };
-                return Additions;
-            }());
-            TreeGridAxis.Additions = Additions;
-        })(TreeGridAxis || (TreeGridAxis = {}));
-        // Make utility functions available for testing.
-        Axis.prototype.utils = {
-            getNode: Tree.getNode
-        };
-        TreeGridAxis.compose(Axis);
-
-        return TreeGridAxis;
-    });
-    _registerModule(_modules, 'Extensions/CurrentDateIndication.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Utilities.js'], _modules['Core/Axis/PlotLineOrBand.js']], function (Axis, U, PlotLineOrBand) {
-        /* *
-         *
-         *  (c) 2016-2020 Highsoft AS
-         *
-         *  Author: Lars A. V. Cabrera
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var addEvent = U.addEvent,
-            merge = U.merge,
-            wrap = U.wrap;
-        var defaultConfig = {
-                /**
-                 * Show an indicator on the axis for the current date and time. Can be a
-                 * boolean or a configuration object similar to
-                 * [xAxis.plotLines](#xAxis.plotLines).
-                 *
-                 * @sample gantt/current-date-indicator/demo
-                 *         Current date indicator enabled
-                 * @sample gantt/current-date-indicator/object-config
-                 *         Current date indicator with custom options
-                 *
-                 * @declare   Highcharts.AxisCurrentDateIndicatorOptions
-                 * @type      {boolean|*}
-                 * @default   true
-                 * @extends   xAxis.plotLines
-                 * @excluding value
-                 * @product   gantt
-                 * @apioption xAxis.currentDateIndicator
-                 */
-                currentDateIndicator: true,
-                color: '#ccd6eb',
-                width: 2,
-                /**
-                 * @declare Highcharts.AxisCurrentDateIndicatorLabelOptions
-                 */
-                label: {
-                    /**
-                     * Format of the label. This options is passed as the fist argument to
-                     * [dateFormat](/class-reference/Highcharts#dateFormat) function.
-                     *
-                     * @type      {string}
-                     * @default   %a, %b %d %Y, %H:%M
-                     * @product   gantt
-                     * @apioption xAxis.currentDateIndicator.label.format
-                     */
-                    format: '%a, %b %d %Y, %H:%M',
-                    formatter: function (value, format) {
-                        return this.axis.chart.time.dateFormat(format, value);
+                    type: "triangle",
+                    x: -5,
+                    y: -5,
+                    height: 10,
+                    width: 10,
+                    padding: 5,
+                  },
                 },
-                rotation: 0,
-                /**
-                 * @type {Highcharts.CSSObject}
-                 */
-                style: {
-                    /** @internal */
-                    fontSize: '10px'
-                }
-            }
-        };
-        /* eslint-disable no-invalid-this */
-        addEvent(Axis, 'afterSetOptions', function () {
-            var options = this.options,
-                cdiOptions = options.currentDateIndicator;
-            if (cdiOptions) {
-                cdiOptions = typeof cdiOptions === 'object' ?
-                    merge(defaultConfig, cdiOptions) : merge(defaultConfig);
-                cdiOptions.value = new Date();
-                if (!options.plotLines) {
-                    options.plotLines = [];
-                }
-                options.plotLines.push(cdiOptions);
-            }
-        });
-        addEvent(PlotLineOrBand, 'render', function () {
-            // If the label already exists, update its text
-            if (this.label) {
-                this.label.attr({
-                    text: this.getLabelText(this.options.label)
-                });
-            }
-        });
-        wrap(PlotLineOrBand.prototype, 'getLabelText', function (defaultMethod, defaultLabelOptions) {
-            var options = this.options;
-            if (options.currentDateIndicator && options.label &&
-                typeof options.label.formatter === 'function') {
-                options.value = new Date();
-                return options.label.formatter
-                    .call(this, options.value, options.label.format);
-            }
-            return defaultMethod.call(this, defaultLabelOptions);
-        });
-
-    });
-    _registerModule(_modules, 'Extensions/StaticScale.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Utilities.js']], function (Axis, Chart, U) {
-        /* *
+                uniqueNames: false,
+              },
+              userOptions,
+              {
+                // Forced options
+                reversed: true,
+                // grid.columns is not supported in treegrid
+                grid: {
+                  columns: void 0,
+                },
+              }
+            );
+          }
+          // Now apply the original function with the original arguments,
+          // which are sliced off this function's arguments
+          proceed.apply(axis, [chart, userOptions]);
+          if (isTreeGrid) {
+            axis.hasNames = true;
+            axis.options.showLastLabel = true;
+          }
+        }
+        /**
+         * Set the tick positions, tickInterval, axis min and max.
          *
-         *  (c) 2016-2020 Torstein Honsi, Lars Cabrera
+         * @private
+         * @function Highcharts.GridAxis#setTickInterval
          *
-         *  License: www.highcharts.com/license
+         * @param {Function} proceed
+         * The original setTickInterval function.
+         */
+        function wrapSetTickInterval(proceed) {
+          var axis = this,
+            options = axis.options,
+            isTreeGrid = options.type === "treegrid";
+          if (isTreeGrid) {
+            axis.min = pick(axis.userMin, options.min, axis.dataMin);
+            axis.max = pick(axis.userMax, options.max, axis.dataMax);
+            fireEvent(axis, "foundExtremes");
+            // setAxisTranslation modifies the min and max according to
+            // axis breaks.
+            axis.setAxisTranslation(true);
+            axis.tickmarkOffset = 0.5;
+            axis.tickInterval = 1;
+            axis.tickPositions = axis.treeGrid.mapOfPosToGridNode
+              ? axis.treeGrid.getTickPositions()
+              : [];
+          } else {
+            proceed.apply(axis, Array.prototype.slice.call(arguments, 1));
+          }
+        }
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Classes
          *
          * */
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            isNumber = U.isNumber,
-            pick = U.pick;
-        /* eslint-disable no-invalid-this */
         /**
-         * For vertical axes only. Setting the static scale ensures that each tick unit
-         * is translated into a fixed pixel height. For example, setting the static
-         * scale to 24 results in each Y axis category taking up 24 pixels, and the
-         * height of the chart adjusts. Adding or removing items will make the chart
-         * resize.
+         * @private
+         * @class
+         */
+        var Additions = /** @class */ (function () {
+          /* *
+           *
+           *  Constructors
+           *
+           * */
+          /**
+           * @private
+           */
+          function Additions(axis) {
+            this.axis = axis;
+          }
+          /* *
+           *
+           *  Functions
+           *
+           * */
+          /**
+           * Set the collapse status.
+           *
+           * @private
+           *
+           * @param {Highcharts.Axis} axis
+           * The axis to check against.
+           *
+           * @param {Highcharts.GridNode} node
+           * The node to collapse.
+           */
+          Additions.prototype.setCollapsedStatus = function (node) {
+            var axis = this.axis,
+              chart = axis.chart;
+            axis.series.forEach(function (series) {
+              var data = series.options.data;
+              if (node.id && data) {
+                var point = chart.get(node.id),
+                  dataPoint = data[series.data.indexOf(point)];
+                if (point && dataPoint) {
+                  point.collapsed = node.collapsed;
+                  dataPoint.collapsed = node.collapsed;
+                }
+              }
+            });
+          };
+          /**
+           * Calculates the new axis breaks to collapse a node.
+           *
+           * @private
+           *
+           * @param {Highcharts.Axis} axis
+           * The axis to check against.
+           *
+           * @param {Highcharts.GridNode} node
+           * The node to collapse.
+           *
+           * @param {number} pos
+           * The tick position to collapse.
+           *
+           * @return {Array<object>}
+           * Returns an array of the new breaks for the axis.
+           */
+          Additions.prototype.collapse = function (node) {
+            var axis = this.axis,
+              breaks = axis.options.breaks || [],
+              obj = getBreakFromNode(node, axis.max);
+            breaks.push(obj);
+            // Change the collapsed flag #13838
+            node.collapsed = true;
+            axis.treeGrid.setCollapsedStatus(node);
+            return breaks;
+          };
+          /**
+           * Calculates the new axis breaks to expand a node.
+           *
+           * @private
+           *
+           * @param {Highcharts.Axis} axis
+           * The axis to check against.
+           *
+           * @param {Highcharts.GridNode} node
+           * The node to expand.
+           *
+           * @param {number} pos
+           * The tick position to expand.
+           *
+           * @return {Array<object>}
+           * Returns an array of the new breaks for the axis.
+           */
+          Additions.prototype.expand = function (node) {
+            var axis = this.axis,
+              breaks = axis.options.breaks || [],
+              obj = getBreakFromNode(node, axis.max);
+            // Change the collapsed flag #13838
+            node.collapsed = false;
+            axis.treeGrid.setCollapsedStatus(node);
+            // Remove the break from the axis breaks array.
+            return breaks.reduce(function (arr, b) {
+              if (b.to !== obj.to || b.from !== obj.from) {
+                arr.push(b);
+              }
+              return arr;
+            }, []);
+          };
+          /**
+           * Creates a list of positions for the ticks on the axis. Filters out
+           * positions that are outside min and max, or is inside an axis break.
+           *
+           * @private
+           *
+           * @return {Array<number>}
+           * List of positions.
+           */
+          Additions.prototype.getTickPositions = function () {
+            var axis = this.axis,
+              roundedMin =
+                Math.floor(axis.min / axis.tickInterval) * axis.tickInterval,
+              roundedMax =
+                Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;
+            return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(
+              function (arr, key) {
+                var pos = +key;
+                if (
+                  pos >= roundedMin &&
+                  pos <= roundedMax &&
+                  !(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))
+                ) {
+                  arr.push(pos);
+                }
+                return arr;
+              },
+              []
+            );
+          };
+          /**
+           * Check if a node is collapsed.
+           *
+           * @private
+           *
+           * @param {Highcharts.Axis} axis
+           * The axis to check against.
+           *
+           * @param {object} node
+           * The node to check if is collapsed.
+           *
+           * @param {number} pos
+           * The tick position to collapse.
+           *
+           * @return {boolean}
+           * Returns true if collapsed, false if expanded.
+           */
+          Additions.prototype.isCollapsed = function (node) {
+            var axis = this.axis,
+              breaks = axis.options.breaks || [],
+              obj = getBreakFromNode(node, axis.max);
+            return breaks.some(function (b) {
+              return b.from === obj.from && b.to === obj.to;
+            });
+          };
+          /**
+           * Calculates the new axis breaks after toggling the collapse/expand
+           * state of a node. If it is collapsed it will be expanded, and if it is
+           * exapended it will be collapsed.
+           *
+           * @private
+           *
+           * @param {Highcharts.Axis} axis
+           * The axis to check against.
+           *
+           * @param {Highcharts.GridNode} node
+           * The node to toggle.
+           *
+           * @return {Array<object>}
+           * Returns an array of the new breaks for the axis.
+           */
+          Additions.prototype.toggleCollapse = function (node) {
+            return this.isCollapsed(node)
+              ? this.expand(node)
+              : this.collapse(node);
+          };
+          return Additions;
+        })();
+        TreeGridAxis.Additions = Additions;
+      })(TreeGridAxis || (TreeGridAxis = {}));
+      // Make utility functions available for testing.
+      Axis.prototype.utils = {
+        getNode: Tree.getNode,
+      };
+      TreeGridAxis.compose(Axis);
+
+      return TreeGridAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/CurrentDateIndication.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Utilities.js"],
+      _modules["Core/Axis/PlotLineOrBand.js"],
+    ],
+    function (Axis, U, PlotLineOrBand) {
+      /* *
+       *
+       *  (c) 2016-2020 Highsoft AS
+       *
+       *  Author: Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        merge = U.merge,
+        wrap = U.wrap;
+      var defaultConfig = {
+        /**
+         * Show an indicator on the axis for the current date and time. Can be a
+         * boolean or a configuration object similar to
+         * [xAxis.plotLines](#xAxis.plotLines).
          *
-         * @sample gantt/xrange-series/demo/
-         *         X-range series with static scale
+         * @sample gantt/current-date-indicator/demo
+         *         Current date indicator enabled
+         * @sample gantt/current-date-indicator/object-config
+         *         Current date indicator with custom options
          *
-         * @type      {number}
-         * @default   50
-         * @since     6.2.0
+         * @declare   Highcharts.AxisCurrentDateIndicatorOptions
+         * @type      {boolean|*}
+         * @default   true
+         * @extends   xAxis.plotLines
+         * @excluding value
          * @product   gantt
-         * @apioption yAxis.staticScale
+         * @apioption xAxis.currentDateIndicator
          */
-        addEvent(Axis, 'afterSetOptions', function () {
-            var chartOptions = this.chart.options && this.chart.options.chart;
-            if (!this.horiz &&
-                isNumber(this.options.staticScale) &&
-                (!chartOptions.height ||
-                    (chartOptions.scrollablePlotArea &&
-                        chartOptions.scrollablePlotArea.minHeight))) {
-                this.staticScale = this.options.staticScale;
-            }
-        });
-        Chart.prototype.adjustHeight = function () {
-            if (this.redrawTrigger !== 'adjustHeight') {
-                (this.axes || []).forEach(function (axis) {
-                    var chart = axis.chart,
-                        animate = !!chart.initiatedScale &&
-                            chart.options.animation,
-                        staticScale = axis.options.staticScale,
-                        height,
-                        diff;
-                    if (axis.staticScale && defined(axis.min)) {
-                        height = pick(axis.brokenAxis && axis.brokenAxis.unitLength, axis.max + axis.tickInterval - axis.min) * staticScale;
-                        // Minimum height is 1 x staticScale.
-                        height = Math.max(height, staticScale);
-                        diff = height - chart.plotHeight;
-                        if (Math.abs(diff) >= 1) {
-                            chart.plotHeight = height;
-                            chart.redrawTrigger = 'adjustHeight';
-                            chart.setSize(void 0, chart.chartHeight + diff, animate);
-                        }
-                        // Make sure clip rects have the right height before initial
-                        // animation.
-                        axis.series.forEach(function (series) {
-                            var clipRect = series.sharedClipKey &&
-                                    chart[series.sharedClipKey];
-                            if (clipRect) {
-                                clipRect.attr({
-                                    height: chart.plotHeight
-                                });
-                            }
-                        });
-                    }
-                });
-                this.initiatedScale = true;
+        currentDateIndicator: true,
+        color: "#ccd6eb",
+        width: 2,
+        /**
+         * @declare Highcharts.AxisCurrentDateIndicatorLabelOptions
+         */
+        label: {
+          /**
+           * Format of the label. This options is passed as the fist argument to
+           * [dateFormat](/class-reference/Highcharts#dateFormat) function.
+           *
+           * @type      {string}
+           * @default   %a, %b %d %Y, %H:%M
+           * @product   gantt
+           * @apioption xAxis.currentDateIndicator.label.format
+           */
+          format: "%a, %b %d %Y, %H:%M",
+          formatter: function (value, format) {
+            return this.axis.chart.time.dateFormat(format, value);
+          },
+          rotation: 0,
+          /**
+           * @type {Highcharts.CSSObject}
+           */
+          style: {
+            /** @internal */
+            fontSize: "10px",
+          },
+        },
+      };
+      /* eslint-disable no-invalid-this */
+      addEvent(Axis, "afterSetOptions", function () {
+        var options = this.options,
+          cdiOptions = options.currentDateIndicator;
+        if (cdiOptions) {
+          cdiOptions =
+            typeof cdiOptions === "object"
+              ? merge(defaultConfig, cdiOptions)
+              : merge(defaultConfig);
+          cdiOptions.value = new Date();
+          if (!options.plotLines) {
+            options.plotLines = [];
+          }
+          options.plotLines.push(cdiOptions);
+        }
+      });
+      addEvent(PlotLineOrBand, "render", function () {
+        // If the label already exists, update its text
+        if (this.label) {
+          this.label.attr({
+            text: this.getLabelText(this.options.label),
+          });
+        }
+      });
+      wrap(
+        PlotLineOrBand.prototype,
+        "getLabelText",
+        function (defaultMethod, defaultLabelOptions) {
+          var options = this.options;
+          if (
+            options.currentDateIndicator &&
+            options.label &&
+            typeof options.label.formatter === "function"
+          ) {
+            options.value = new Date();
+            return options.label.formatter.call(
+              this,
+              options.value,
+              options.label.format
+            );
+          }
+          return defaultMethod.call(this, defaultLabelOptions);
+        }
+      );
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/StaticScale.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, Chart, U) {
+      /* *
+       *
+       *  (c) 2016-2020 Torstein Honsi, Lars Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        isNumber = U.isNumber,
+        pick = U.pick;
+      /* eslint-disable no-invalid-this */
+      /**
+       * For vertical axes only. Setting the static scale ensures that each tick unit
+       * is translated into a fixed pixel height. For example, setting the static
+       * scale to 24 results in each Y axis category taking up 24 pixels, and the
+       * height of the chart adjusts. Adding or removing items will make the chart
+       * resize.
+       *
+       * @sample gantt/xrange-series/demo/
+       *         X-range series with static scale
+       *
+       * @type      {number}
+       * @default   50
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption yAxis.staticScale
+       */
+      addEvent(Axis, "afterSetOptions", function () {
+        var chartOptions = this.chart.options && this.chart.options.chart;
+        if (
+          !this.horiz &&
+          isNumber(this.options.staticScale) &&
+          (!chartOptions.height ||
+            (chartOptions.scrollablePlotArea &&
+              chartOptions.scrollablePlotArea.minHeight))
+        ) {
+          this.staticScale = this.options.staticScale;
+        }
+      });
+      Chart.prototype.adjustHeight = function () {
+        if (this.redrawTrigger !== "adjustHeight") {
+          (this.axes || []).forEach(function (axis) {
+            var chart = axis.chart,
+              animate = !!chart.initiatedScale && chart.options.animation,
+              staticScale = axis.options.staticScale,
+              height,
+              diff;
+            if (axis.staticScale && defined(axis.min)) {
+              height =
+                pick(
+                  axis.brokenAxis && axis.brokenAxis.unitLength,
+                  axis.max + axis.tickInterval - axis.min
+                ) * staticScale;
+              // Minimum height is 1 x staticScale.
+              height = Math.max(height, staticScale);
+              diff = height - chart.plotHeight;
+              if (Math.abs(diff) >= 1) {
+                chart.plotHeight = height;
+                chart.redrawTrigger = "adjustHeight";
+                chart.setSize(void 0, chart.chartHeight + diff, animate);
+              }
+              // Make sure clip rects have the right height before initial
+              // animation.
+              axis.series.forEach(function (series) {
+                var clipRect =
+                  series.sharedClipKey && chart[series.sharedClipKey];
+                if (clipRect) {
+                  clipRect.attr({
+                    height: chart.plotHeight,
+                  });
+                }
+              });
             }
-            this.redrawTrigger = null;
-        };
-        addEvent(Chart, 'render', Chart.prototype.adjustHeight);
-
-    });
-    _registerModule(_modules, 'Extensions/ArrowSymbols.js', [_modules['Core/Renderer/SVG/SVGRenderer.js']], function (SVGRenderer) {
-        /* *
+          });
+          this.initiatedScale = true;
+        }
+        this.redrawTrigger = null;
+      };
+      addEvent(Chart, "render", Chart.prototype.adjustHeight);
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/ArrowSymbols.js",
+    [_modules["Core/Renderer/SVG/SVGRenderer.js"]],
+    function (SVGRenderer) {
+      /* *
+       *
+       *  (c) 2017 Highsoft AS
+       *  Authors: Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      /**
+       * Creates an arrow symbol. Like a triangle, except not filled.
+       * ```
+       *                   o
+       *             o
+       *       o
+       * o
+       *       o
+       *             o
+       *                   o
+       * ```
+       *
+       * @private
+       * @function
+       *
+       * @param {number} x
+       *        x position of the arrow
+       *
+       * @param {number} y
+       *        y position of the arrow
+       *
+       * @param {number} w
+       *        width of the arrow
+       *
+       * @param {number} h
+       *        height of the arrow
+       *
+       * @return {Highcharts.SVGPathArray}
+       *         Path array
+       */
+      SVGRenderer.prototype.symbols.arrow = function (x, y, w, h) {
+        return [
+          ["M", x, y + h / 2],
+          ["L", x + w, y],
+          ["L", x, y + h / 2],
+          ["L", x + w, y + h],
+        ];
+      };
+      /**
+       * Creates a half-width arrow symbol. Like a triangle, except not filled.
+       * ```
+       *       o
+       *    o
+       * o
+       *    o
+       *       o
+       * ```
+       *
+       * @private
+       * @function
+       *
+       * @param {number} x
+       *        x position of the arrow
+       *
+       * @param {number} y
+       *        y position of the arrow
+       *
+       * @param {number} w
+       *        width of the arrow
+       *
+       * @param {number} h
+       *        height of the arrow
+       *
+       * @return {Highcharts.SVGPathArray}
+       *         Path array
+       */
+      SVGRenderer.prototype.symbols["arrow-half"] = function (x, y, w, h) {
+        return SVGRenderer.prototype.symbols.arrow(x, y, w / 2, h);
+      };
+      /**
+       * Creates a left-oriented triangle.
+       * ```
+       *             o
+       *       ooooooo
+       * ooooooooooooo
+       *       ooooooo
+       *             o
+       * ```
+       *
+       * @private
+       * @function
+       *
+       * @param {number} x
+       *        x position of the triangle
+       *
+       * @param {number} y
+       *        y position of the triangle
+       *
+       * @param {number} w
+       *        width of the triangle
+       *
+       * @param {number} h
+       *        height of the triangle
+       *
+       * @return {Highcharts.SVGPathArray}
+       *         Path array
+       */
+      SVGRenderer.prototype.symbols["triangle-left"] = function (x, y, w, h) {
+        return [
+          ["M", x + w, y],
+          ["L", x, y + h / 2],
+          ["L", x + w, y + h],
+          ["Z"],
+        ];
+      };
+      /**
+       * Alias function for triangle-left.
+       *
+       * @private
+       * @function
+       *
+       * @param {number} x
+       *        x position of the arrow
+       *
+       * @param {number} y
+       *        y position of the arrow
+       *
+       * @param {number} w
+       *        width of the arrow
+       *
+       * @param {number} h
+       *        height of the arrow
+       *
+       * @return {Highcharts.SVGPathArray}
+       *         Path array
+       */
+      SVGRenderer.prototype.symbols["arrow-filled"] =
+        SVGRenderer.prototype.symbols["triangle-left"];
+      /**
+       * Creates a half-width, left-oriented triangle.
+       * ```
+       *       o
+       *    oooo
+       * ooooooo
+       *    oooo
+       *       o
+       * ```
+       *
+       * @private
+       * @function
+       *
+       * @param {number} x
+       *        x position of the triangle
+       *
+       * @param {number} y
+       *        y position of the triangle
+       *
+       * @param {number} w
+       *        width of the triangle
+       *
+       * @param {number} h
+       *        height of the triangle
+       *
+       * @return {Highcharts.SVGPathArray}
+       *         Path array
+       */
+      SVGRenderer.prototype.symbols["triangle-left-half"] = function (
+        x,
+        y,
+        w,
+        h
+      ) {
+        return SVGRenderer.prototype.symbols["triangle-left"](x, y, w / 2, h);
+      };
+      /**
+       * Alias function for triangle-left-half.
+       *
+       * @private
+       * @function
+       *
+       * @param {number} x
+       *        x position of the arrow
+       *
+       * @param {number} y
+       *        y position of the arrow
+       *
+       * @param {number} w
+       *        width of the arrow
+       *
+       * @param {number} h
+       *        height of the arrow
+       *
+       * @return {Highcharts.SVGPathArray}
+       *         Path array
+       */
+      SVGRenderer.prototype.symbols["arrow-filled-half"] =
+        SVGRenderer.prototype.symbols["triangle-left-half"];
+    }
+  );
+  _registerModule(
+    _modules,
+    "Gantt/Connection.js",
+    [
+      _modules["Core/Globals.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Series/Point.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (H, O, Point, U) {
+      /* *
+       *
+       *  (c) 2016 Highsoft AS
+       *  Authors: Øystein Moseng, Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      /**
+       * The default pathfinder algorithm to use for a chart. It is possible to define
+       * your own algorithms by adding them to the
+       * `Highcharts.Pathfinder.prototype.algorithms`
+       * object before the chart has been created.
+       *
+       * The default algorithms are as follows:
+       *
+       * `straight`:      Draws a straight line between the connecting
+       *                  points. Does not avoid other points when drawing.
+       *
+       * `simpleConnect`: Finds a path between the points using right angles
+       *                  only. Takes only starting/ending points into
+       *                  account, and will not avoid other points.
+       *
+       * `fastAvoid`:     Finds a path between the points using right angles
+       *                  only. Will attempt to avoid other points, but its
+       *                  focus is performance over accuracy. Works well with
+       *                  less dense datasets.
+       *
+       * @typedef {"fastAvoid"|"simpleConnect"|"straight"|string} Highcharts.PathfinderTypeValue
+       */
+      ""; // detach doclets above
+      var defaultOptions = O.defaultOptions;
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        error = U.error,
+        extend = U.extend,
+        merge = U.merge,
+        objectEach = U.objectEach,
+        pick = U.pick,
+        splat = U.splat;
+      var deg2rad = H.deg2rad,
+        max = Math.max,
+        min = Math.min;
+      /*
+         @todo:
+             - Document how to write your own algorithms
+             - Consider adding a Point.pathTo method that wraps creating a connection
+               and rendering it
+        */
+      // Set default Pathfinder options
+      extend(defaultOptions, {
+        /**
+         * The Pathfinder module allows you to define connections between any two
+         * points, represented as lines - optionally with markers for the start
+         * and/or end points. Multiple algorithms are available for calculating how
+         * the connecting lines are drawn.
          *
-         *  (c) 2017 Highsoft AS
-         *  Authors: Lars A. V. Cabrera
+         * Connector functionality requires Highcharts Gantt to be loaded. In Gantt
+         * charts, the connectors are used to draw dependencies between tasks.
          *
-         *  License: www.highcharts.com/license
+         * @see [dependency](series.gantt.data.dependency)
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @sample gantt/pathfinder/demo
+         *         Pathfinder connections
          *
-         * */
+         * @declare      Highcharts.ConnectorsOptions
+         * @product      gantt
+         * @optionparent connectors
+         */
+        connectors: {
+          /**
+           * Enable connectors for this chart. Requires Highcharts Gantt.
+           *
+           * @type      {boolean}
+           * @default   true
+           * @since     6.2.0
+           * @apioption connectors.enabled
+           */
+          /**
+           * Set the default dash style for this chart's connecting lines.
+           *
+           * @type      {string}
+           * @default   solid
+           * @since     6.2.0
+           * @apioption connectors.dashStyle
+           */
+          /**
+           * Set the default color for this chart's Pathfinder connecting lines.
+           * Defaults to the color of the point being connected.
+           *
+           * @type      {Highcharts.ColorString}
+           * @since     6.2.0
+           * @apioption connectors.lineColor
+           */
+          /**
+           * Set the default pathfinder margin to use, in pixels. Some Pathfinder
+           * algorithms attempt to avoid obstacles, such as other points in the
+           * chart. These algorithms use this margin to determine how close lines
+           * can be to an obstacle. The default is to compute this automatically
+           * from the size of the obstacles in the chart.
+           *
+           * To draw connecting lines close to existing points, set this to a low
+           * number. For more space around existing points, set this number
+           * higher.
+           *
+           * @sample gantt/pathfinder/algorithm-margin
+           *         Small algorithmMargin
+           *
+           * @type      {number}
+           * @since     6.2.0
+           * @apioption connectors.algorithmMargin
+           */
+          /**
+           * Set the default pathfinder algorithm to use for this chart. It is
+           * possible to define your own algorithms by adding them to the
+           * Highcharts.Pathfinder.prototype.algorithms object before the chart
+           * has been created.
+           *
+           * The default algorithms are as follows:
+           *
+           * `straight`:      Draws a straight line between the connecting
+           *                  points. Does not avoid other points when drawing.
+           *
+           * `simpleConnect`: Finds a path between the points using right angles
+           *                  only. Takes only starting/ending points into
+           *                  account, and will not avoid other points.
+           *
+           * `fastAvoid`:     Finds a path between the points using right angles
+           *                  only. Will attempt to avoid other points, but its
+           *                  focus is performance over accuracy. Works well with
+           *                  less dense datasets.
+           *
+           * Default value: `straight` is used as default for most series types,
+           * while `simpleConnect` is used as default for Gantt series, to show
+           * dependencies between points.
+           *
+           * @sample gantt/pathfinder/demo
+           *         Different types used
+           *
+           * @type    {Highcharts.PathfinderTypeValue}
+           * @default undefined
+           * @since   6.2.0
+           */
+          type: "straight",
+          /**
+           * Set the default pixel width for this chart's Pathfinder connecting
+           * lines.
+           *
+           * @since 6.2.0
+           */
+          lineWidth: 1,
+          /**
+           * Marker options for this chart's Pathfinder connectors. Note that
+           * this option is overridden by the `startMarker` and `endMarker`
+           * options.
+           *
+           * @declare Highcharts.ConnectorsMarkerOptions
+           * @since   6.2.0
+           */
+          marker: {
+            /**
+             * Set the radius of the connector markers. The default is
+             * automatically computed based on the algorithmMargin setting.
+             *
+             * Setting marker.width and marker.height will override this
+             * setting.
+             *
+             * @type      {number}
+             * @since     6.2.0
+             * @apioption connectors.marker.radius
+             */
+            /**
+             * Set the width of the connector markers. If not supplied, this
+             * is inferred from the marker radius.
+             *
+             * @type      {number}
+             * @since     6.2.0
+             * @apioption connectors.marker.width
+             */
+            /**
+             * Set the height of the connector markers. If not supplied, this
+             * is inferred from the marker radius.
+             *
+             * @type      {number}
+             * @since     6.2.0
+             * @apioption connectors.marker.height
+             */
+            /**
+             * Set the color of the connector markers. By default this is the
+             * same as the connector color.
+             *
+             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+             * @since     6.2.0
+             * @apioption connectors.marker.color
+             */
+            /**
+             * Set the line/border color of the connector markers. By default
+             * this is the same as the marker color.
+             *
+             * @type      {Highcharts.ColorString}
+             * @since     6.2.0
+             * @apioption connectors.marker.lineColor
+             */
+            /**
+             * Enable markers for the connectors.
+             */
+            enabled: false,
+            /**
+             * Horizontal alignment of the markers relative to the points.
+             *
+             * @type {Highcharts.AlignValue}
+             */
+            align: "center",
+            /**
+             * Vertical alignment of the markers relative to the points.
+             *
+             * @type {Highcharts.VerticalAlignValue}
+             */
+            verticalAlign: "middle",
+            /**
+             * Whether or not to draw the markers inside the points.
+             */
+            inside: false,
+            /**
+             * Set the line/border width of the pathfinder markers.
+             */
+            lineWidth: 1,
+          },
+          /**
+           * Marker options specific to the start markers for this chart's
+           * Pathfinder connectors. Overrides the generic marker options.
+           *
+           * @declare Highcharts.ConnectorsStartMarkerOptions
+           * @extends connectors.marker
+           * @since   6.2.0
+           */
+          startMarker: {
+            /**
+             * Set the symbol of the connector start markers.
+             */
+            symbol: "diamond",
+          },
+          /**
+           * Marker options specific to the end markers for this chart's
+           * Pathfinder connectors. Overrides the generic marker options.
+           *
+           * @declare Highcharts.ConnectorsEndMarkerOptions
+           * @extends connectors.marker
+           * @since   6.2.0
+           */
+          endMarker: {
+            /**
+             * Set the symbol of the connector end markers.
+             */
+            symbol: "arrow-filled",
+          },
+        },
+      });
+      /**
+       * Override Pathfinder connector options for a series. Requires Highcharts Gantt
+       * to be loaded.
+       *
+       * @declare   Highcharts.SeriesConnectorsOptionsObject
+       * @extends   connectors
+       * @since     6.2.0
+       * @excluding enabled, algorithmMargin
+       * @product   gantt
+       * @apioption plotOptions.series.connectors
+       */
+      /**
+       * Connect to a point. This option can be either a string, referring to the ID
+       * of another point, or an object, or an array of either. If the option is an
+       * array, each element defines a connection.
+       *
+       * @sample gantt/pathfinder/demo
+       *         Different connection types
+       *
+       * @declare   Highcharts.XrangePointConnectorsOptionsObject
+       * @type      {string|Array<string|*>|*}
+       * @extends   plotOptions.series.connectors
+       * @since     6.2.0
+       * @excluding enabled
+       * @product   gantt
+       * @requires  highcharts-gantt
+       * @apioption series.xrange.data.connect
+       */
+      /**
+       * The ID of the point to connect to.
+       *
+       * @type      {string}
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption series.xrange.data.connect.to
+       */
+      /**
+       * Get point bounding box using plotX/plotY and shapeArgs. If using
+       * graphic.getBBox() directly, the bbox will be affected by animation.
+       *
+       * @private
+       * @function
+       *
+       * @param {Highcharts.Point} point
+       *        The point to get BB of.
+       *
+       * @return {Highcharts.Dictionary<number>|null}
+       *         Result xMax, xMin, yMax, yMin.
+       */
+      function getPointBB(point) {
+        var shapeArgs = point.shapeArgs,
+          bb;
+        // Prefer using shapeArgs (columns)
+        if (shapeArgs) {
+          return {
+            xMin: shapeArgs.x,
+            xMax: shapeArgs.x + shapeArgs.width,
+            yMin: shapeArgs.y,
+            yMax: shapeArgs.y + shapeArgs.height,
+          };
+        }
+        // Otherwise use plotX/plotY and bb
+        bb = point.graphic && point.graphic.getBBox();
+        return bb
+          ? {
+              xMin: point.plotX - bb.width / 2,
+              xMax: point.plotX + bb.width / 2,
+              yMin: point.plotY - bb.height / 2,
+              yMax: point.plotY + bb.height / 2,
+            }
+          : null;
+      }
+      /**
+       * Calculate margin to place around obstacles for the pathfinder in pixels.
+       * Returns a minimum of 1 pixel margin.
+       *
+       * @private
+       * @function
+       *
+       * @param {Array<object>} obstacles
+       *        Obstacles to calculate margin from.
+       *
+       * @return {number}
+       *         The calculated margin in pixels. At least 1.
+       */
+      function calculateObstacleMargin(obstacles) {
+        var len = obstacles.length,
+          i = 0,
+          j,
+          obstacleDistance,
+          distances = [],
+          // Compute smallest distance between two rectangles
+          distance = function (a, b, bbMargin) {
+            // Count the distance even if we are slightly off
+            var margin = pick(bbMargin, 10),
+              yOverlap =
+                a.yMax + margin > b.yMin - margin &&
+                a.yMin - margin < b.yMax + margin,
+              xOverlap =
+                a.xMax + margin > b.xMin - margin &&
+                a.xMin - margin < b.xMax + margin,
+              xDistance = yOverlap
+                ? a.xMin > b.xMax
+                  ? a.xMin - b.xMax
+                  : b.xMin - a.xMax
+                : Infinity,
+              yDistance = xOverlap
+                ? a.yMin > b.yMax
+                  ? a.yMin - b.yMax
+                  : b.yMin - a.yMax
+                : Infinity;
+            // If the rectangles collide, try recomputing with smaller margin.
+            // If they collide anyway, discard the obstacle.
+            if (xOverlap && yOverlap) {
+              return margin ? distance(a, b, Math.floor(margin / 2)) : Infinity;
+            }
+            return min(xDistance, yDistance);
+          };
+        // Go over all obstacles and compare them to the others.
+        for (; i < len; ++i) {
+          // Compare to all obstacles ahead. We will already have compared this
+          // obstacle to the ones before.
+          for (j = i + 1; j < len; ++j) {
+            obstacleDistance = distance(obstacles[i], obstacles[j]);
+            // TODO: Magic number 80
+            if (obstacleDistance < 80) {
+              // Ignore large distances
+              distances.push(obstacleDistance);
+            }
+          }
+        }
+        // Ensure we always have at least one value, even in very spaceous charts
+        distances.push(80);
+        return max(
+          Math.floor(
+            distances.sort(function (a, b) {
+              return a - b;
+            })[
+              // Discard first 10% of the relevant distances, and then grab
+              // the smallest one.
+              Math.floor(distances.length / 10)
+            ] /
+              2 -
+              1 // Divide the distance by 2 and subtract 1.
+          ),
+          1 // 1 is the minimum margin
+        );
+      }
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * The Connection class. Used internally to represent a connection between two
+       * points.
+       *
+       * @private
+       * @class
+       * @name Highcharts.Connection
+       *
+       * @param {Highcharts.Point} from
+       *        Connection runs from this Point.
+       *
+       * @param {Highcharts.Point} to
+       *        Connection runs to this Point.
+       *
+       * @param {Highcharts.ConnectorsOptions} [options]
+       *        Connection options.
+       */
+      var Connection = /** @class */ (function () {
+        function Connection(from, to, options) {
+          /* *
+           *
+           * Properties
+           *
+           * */
+          this.chart = void 0;
+          this.fromPoint = void 0;
+          this.graphics = void 0;
+          this.pathfinder = void 0;
+          this.toPoint = void 0;
+          this.init(from, to, options);
+        }
         /**
-         * Creates an arrow symbol. Like a triangle, except not filled.
-         * ```
-         *                   o
-         *             o
-         *       o
-         * o
-         *       o
-         *             o
-         *                   o
-         * ```
-         *
-         * @private
-         * @function
+         * Initialize the Connection object. Used as constructor only.
          *
-         * @param {number} x
-         *        x position of the arrow
-         *
-         * @param {number} y
-         *        y position of the arrow
+         * @function Highcharts.Connection#init
          *
-         * @param {number} w
-         *        width of the arrow
+         * @param {Highcharts.Point} from
+         *        Connection runs from this Point.
          *
-         * @param {number} h
-         *        height of the arrow
+         * @param {Highcharts.Point} to
+         *        Connection runs to this Point.
          *
-         * @return {Highcharts.SVGPathArray}
-         *         Path array
+         * @param {Highcharts.ConnectorsOptions} [options]
+         *        Connection options.
          */
-        SVGRenderer.prototype.symbols.arrow = function (x, y, w, h) {
-            return [
-                ['M', x, y + h / 2],
-                ['L', x + w, y],
-                ['L', x, y + h / 2],
-                ['L', x + w, y + h]
-            ];
+        Connection.prototype.init = function (from, to, options) {
+          this.fromPoint = from;
+          this.toPoint = to;
+          this.options = options;
+          this.chart = from.series.chart;
+          this.pathfinder = this.chart.pathfinder;
         };
         /**
-         * Creates a half-width arrow symbol. Like a triangle, except not filled.
-         * ```
-         *       o
-         *    o
-         * o
-         *    o
-         *       o
-         * ```
+         * Add (or update) this connection's path on chart. Stores reference to the
+         * created element on this.graphics.path.
          *
-         * @private
-         * @function
-         *
-         * @param {number} x
-         *        x position of the arrow
-         *
-         * @param {number} y
-         *        y position of the arrow
+         * @function Highcharts.Connection#renderPath
          *
-         * @param {number} w
-         *        width of the arrow
+         * @param {Highcharts.SVGPathArray} path
+         *        Path to render, in array format. E.g. ['M', 0, 0, 'L', 10, 10]
          *
-         * @param {number} h
-         *        height of the arrow
+         * @param {Highcharts.SVGAttributes} [attribs]
+         *        SVG attributes for the path.
          *
-         * @return {Highcharts.SVGPathArray}
-         *         Path array
+         * @param {Partial<Highcharts.AnimationOptionsObject>} [animation]
+         *        Animation options for the rendering.
          */
-        SVGRenderer.prototype.symbols['arrow-half'] = function (x, y, w, h) {
-            return SVGRenderer.prototype.symbols.arrow(x, y, w / 2, h);
+        Connection.prototype.renderPath = function (path, attribs, animation) {
+          var connection = this,
+            chart = this.chart,
+            styledMode = chart.styledMode,
+            pathfinder = chart.pathfinder,
+            animate = !chart.options.chart.forExport && animation !== false,
+            pathGraphic = connection.graphics && connection.graphics.path,
+            anim;
+          // Add the SVG element of the pathfinder group if it doesn't exist
+          if (!pathfinder.group) {
+            pathfinder.group = chart.renderer
+              .g()
+              .addClass("highcharts-pathfinder-group")
+              .attr({ zIndex: -1 })
+              .add(chart.seriesGroup);
+          }
+          // Shift the group to compensate for plot area.
+          // Note: Do this always (even when redrawing a path) to avoid issues
+          // when updating chart in a way that changes plot metrics.
+          pathfinder.group.translate(chart.plotLeft, chart.plotTop);
+          // Create path if does not exist
+          if (!(pathGraphic && pathGraphic.renderer)) {
+            pathGraphic = chart.renderer.path().add(pathfinder.group);
+            if (!styledMode) {
+              pathGraphic.attr({
+                opacity: 0,
+              });
+            }
+          }
+          // Set path attribs and animate to the new path
+          pathGraphic.attr(attribs);
+          anim = { d: path };
+          if (!styledMode) {
+            anim.opacity = 1;
+          }
+          pathGraphic[animate ? "animate" : "attr"](anim, animation);
+          // Store reference on connection
+          this.graphics = this.graphics || {};
+          this.graphics.path = pathGraphic;
         };
         /**
-         * Creates a left-oriented triangle.
-         * ```
-         *             o
-         *       ooooooo
-         * ooooooooooooo
-         *       ooooooo
-         *             o
-         * ```
-         *
-         * @private
-         * @function
-         *
-         * @param {number} x
-         *        x position of the triangle
+         * Calculate and add marker graphics for connection to the chart. The
+         * created/updated elements are stored on this.graphics.start and
+         * this.graphics.end.
          *
-         * @param {number} y
-         *        y position of the triangle
+         * @function Highcharts.Connection#addMarker
          *
-         * @param {number} w
-         *        width of the triangle
+         * @param {string} type
+         *        Marker type, either 'start' or 'end'.
          *
-         * @param {number} h
-         *        height of the triangle
+         * @param {Highcharts.ConnectorsMarkerOptions} options
+         *        All options for this marker. Not calculated or merged with other
+         *        options.
          *
-         * @return {Highcharts.SVGPathArray}
-         *         Path array
+         * @param {Highcharts.SVGPathArray} path
+         *        Connection path in array format. This is used to calculate the
+         *        rotation angle of the markers.
          */
-        SVGRenderer.prototype.symbols['triangle-left'] = function (x, y, w, h) {
-            return [
-                ['M', x + w, y],
-                ['L', x, y + h / 2],
-                ['L', x + w, y + h],
-                ['Z']
-            ];
+        Connection.prototype.addMarker = function (type, options, path) {
+          var connection = this,
+            chart = connection.fromPoint.series.chart,
+            pathfinder = chart.pathfinder,
+            renderer = chart.renderer,
+            point =
+              type === "start" ? connection.fromPoint : connection.toPoint,
+            anchor = point.getPathfinderAnchorPoint(options),
+            markerVector,
+            radians,
+            rotation,
+            box,
+            width,
+            height,
+            pathVector,
+            segment;
+          if (!options.enabled) {
+            return;
+          }
+          // Last vector before start/end of path, used to get angle
+          if (type === "start") {
+            segment = path[1];
+          } else {
+            // 'end'
+            segment = path[path.length - 2];
+          }
+          if ((segment && segment[0] === "M") || segment[0] === "L") {
+            pathVector = {
+              x: segment[1],
+              y: segment[2],
+            };
+            // Get angle between pathVector and anchor point and use it to
+            // create marker position.
+            radians = point.getRadiansToVector(pathVector, anchor);
+            markerVector = point.getMarkerVector(
+              radians,
+              options.radius,
+              anchor
+            );
+            // Rotation of marker is calculated from angle between pathVector
+            // and markerVector.
+            // (Note:
+            //  Used to recalculate radians between markerVector and pathVector,
+            //  but this should be the same as between pathVector and anchor.)
+            rotation = -radians / deg2rad;
+            if (options.width && options.height) {
+              width = options.width;
+              height = options.height;
+            } else {
+              width = height = options.radius * 2;
+            }
+            // Add graphics object if it does not exist
+            connection.graphics = connection.graphics || {};
+            box = {
+              x: markerVector.x - width / 2,
+              y: markerVector.y - height / 2,
+              width: width,
+              height: height,
+              rotation: rotation,
+              rotationOriginX: markerVector.x,
+              rotationOriginY: markerVector.y,
+            };
+            if (!connection.graphics[type]) {
+              // Create new marker element
+              connection.graphics[type] = renderer
+                .symbol(options.symbol)
+                .addClass(
+                  "highcharts-point-connecting-path-" + type + "-marker"
+                )
+                .attr(box)
+                .add(pathfinder.group);
+              if (!renderer.styledMode) {
+                connection.graphics[type]
+                  .attr({
+                    fill: options.color || connection.fromPoint.color,
+                    stroke: options.lineColor,
+                    "stroke-width": options.lineWidth,
+                    opacity: 0,
+                  })
+                  .animate(
+                    {
+                      opacity: 1,
+                    },
+                    point.series.options.animation
+                  );
+              }
+            } else {
+              connection.graphics[type].animate(box);
+            }
+          }
         };
         /**
-         * Alias function for triangle-left.
-         *
-         * @private
-         * @function
-         *
-         * @param {number} x
-         *        x position of the arrow
-         *
-         * @param {number} y
-         *        y position of the arrow
+         * Calculate and return connection path.
+         * Note: Recalculates chart obstacles on demand if they aren't calculated.
          *
-         * @param {number} w
-         *        width of the arrow
+         * @function Highcharts.Connection#getPath
          *
-         * @param {number} h
-         *        height of the arrow
+         * @param {Highcharts.ConnectorsOptions} options
+         *        Connector options. Not calculated or merged with other options.
          *
-         * @return {Highcharts.SVGPathArray}
-         *         Path array
+         * @return {object|undefined}
+         *         Calculated SVG path data in array format.
          */
-        SVGRenderer.prototype.symbols['arrow-filled'] = SVGRenderer.prototype.symbols['triangle-left'];
+        Connection.prototype.getPath = function (options) {
+          var pathfinder = this.pathfinder,
+            chart = this.chart,
+            algorithm = pathfinder.algorithms[options.type],
+            chartObstacles = pathfinder.chartObstacles;
+          if (typeof algorithm !== "function") {
+            error('"' + options.type + '" is not a Pathfinder algorithm.');
+            return {
+              path: [],
+              obstacles: [],
+            };
+          }
+          // This function calculates obstacles on demand if they don't exist
+          if (algorithm.requiresObstacles && !chartObstacles) {
+            chartObstacles = pathfinder.chartObstacles =
+              pathfinder.getChartObstacles(options);
+            // If the algorithmMargin was computed, store the result in default
+            // options.
+            chart.options.connectors.algorithmMargin = options.algorithmMargin;
+            // Cache some metrics too
+            pathfinder.chartObstacleMetrics =
+              pathfinder.getObstacleMetrics(chartObstacles);
+          }
+          // Get the SVG path
+          return algorithm(
+            // From
+            this.fromPoint.getPathfinderAnchorPoint(options.startMarker),
+            // To
+            this.toPoint.getPathfinderAnchorPoint(options.endMarker),
+            merge(
+              {
+                chartObstacles: chartObstacles,
+                lineObstacles: pathfinder.lineObstacles || [],
+                obstacleMetrics: pathfinder.chartObstacleMetrics,
+                hardBounds: {
+                  xMin: 0,
+                  xMax: chart.plotWidth,
+                  yMin: 0,
+                  yMax: chart.plotHeight,
+                },
+                obstacleOptions: {
+                  margin: options.algorithmMargin,
+                },
+                startDirectionX: pathfinder.getAlgorithmStartDirection(
+                  options.startMarker
+                ),
+              },
+              options
+            )
+          );
+        };
         /**
-         * Creates a half-width, left-oriented triangle.
-         * ```
-         *       o
-         *    oooo
-         * ooooooo
-         *    oooo
-         *       o
-         * ```
-         *
-         * @private
-         * @function
-         *
-         * @param {number} x
-         *        x position of the triangle
+         * (re)Calculate and (re)draw the connection.
          *
-         * @param {number} y
-         *        y position of the triangle
-         *
-         * @param {number} w
-         *        width of the triangle
-         *
-         * @param {number} h
-         *        height of the triangle
-         *
-         * @return {Highcharts.SVGPathArray}
-         *         Path array
+         * @function Highcharts.Connection#render
          */
-        SVGRenderer.prototype.symbols['triangle-left-half'] = function (x, y, w, h) {
-            return SVGRenderer.prototype.symbols['triangle-left'](x, y, w / 2, h);
+        Connection.prototype.render = function () {
+          var connection = this,
+            fromPoint = connection.fromPoint,
+            series = fromPoint.series,
+            chart = series.chart,
+            pathfinder = chart.pathfinder,
+            pathResult,
+            path,
+            options = merge(
+              chart.options.connectors,
+              series.options.connectors,
+              fromPoint.options.connectors,
+              connection.options
+            ),
+            attribs = {};
+          // Set path attribs
+          if (!chart.styledMode) {
+            attribs.stroke = options.lineColor || fromPoint.color;
+            attribs["stroke-width"] = options.lineWidth;
+            if (options.dashStyle) {
+              attribs.dashstyle = options.dashStyle;
+            }
+          }
+          attribs["class"] = // eslint-disable-line dot-notation
+            "highcharts-point-connecting-path " +
+            "highcharts-color-" +
+            fromPoint.colorIndex;
+          options = merge(attribs, options);
+          // Set common marker options
+          if (!defined(options.marker.radius)) {
+            options.marker.radius = min(
+              max(Math.ceil((options.algorithmMargin || 8) / 2) - 1, 1),
+              5
+            );
+          }
+          // Get the path
+          pathResult = connection.getPath(options);
+          path = pathResult.path;
+          // Always update obstacle storage with obstacles from this path.
+          // We don't know if future calls will need this for their algorithm.
+          if (pathResult.obstacles) {
+            pathfinder.lineObstacles = pathfinder.lineObstacles || [];
+            pathfinder.lineObstacles = pathfinder.lineObstacles.concat(
+              pathResult.obstacles
+            );
+          }
+          // Add the calculated path to the pathfinder group
+          connection.renderPath(path, attribs, series.options.animation);
+          // Render the markers
+          connection.addMarker(
+            "start",
+            merge(options.marker, options.startMarker),
+            path
+          );
+          connection.addMarker(
+            "end",
+            merge(options.marker, options.endMarker),
+            path
+          );
         };
         /**
-         * Alias function for triangle-left-half.
+         * Destroy connection by destroying the added graphics elements.
          *
-         * @private
-         * @function
-         *
-         * @param {number} x
-         *        x position of the arrow
-         *
-         * @param {number} y
-         *        y position of the arrow
-         *
-         * @param {number} w
-         *        width of the arrow
-         *
-         * @param {number} h
-         *        height of the arrow
-         *
-         * @return {Highcharts.SVGPathArray}
-         *         Path array
+         * @function Highcharts.Connection#destroy
          */
-        SVGRenderer.prototype.symbols['arrow-filled-half'] = SVGRenderer.prototype.symbols['triangle-left-half'];
+        Connection.prototype.destroy = function () {
+          if (this.graphics) {
+            objectEach(this.graphics, function (val) {
+              val.destroy();
+            });
+            delete this.graphics;
+          }
+        };
+        return Connection;
+      })();
+      // Add to Highcharts namespace
+      H.Connection = Connection;
+      // Add pathfinding capabilities to Points
+      extend(
+        Point.prototype,
+        /** @lends Point.prototype */ {
+          /**
+           * Get coordinates of anchor point for pathfinder connection.
+           *
+           * @private
+           * @function Highcharts.Point#getPathfinderAnchorPoint
+           *
+           * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
+           *        Connection options for position on point.
+           *
+           * @return {Highcharts.PositionObject}
+           *         An object with x/y properties for the position. Coordinates are
+           *         in plot values, not relative to point.
+           */
+          getPathfinderAnchorPoint: function (markerOptions) {
+            var bb = getPointBB(this),
+              x,
+              y;
+            switch (
+              markerOptions.align // eslint-disable-line default-case
+            ) {
+              case "right":
+                x = "xMax";
+                break;
+              case "left":
+                x = "xMin";
+            }
+            switch (
+              markerOptions.verticalAlign // eslint-disable-line default-case
+            ) {
+              case "top":
+                y = "yMin";
+                break;
+              case "bottom":
+                y = "yMax";
+            }
+            return {
+              x: x ? bb[x] : (bb.xMin + bb.xMax) / 2,
+              y: y ? bb[y] : (bb.yMin + bb.yMax) / 2,
+            };
+          },
+          /**
+           * Utility to get the angle from one point to another.
+           *
+           * @private
+           * @function Highcharts.Point#getRadiansToVector
+           *
+           * @param {Highcharts.PositionObject} v1
+           *        The first vector, as an object with x/y properties.
+           *
+           * @param {Highcharts.PositionObject} v2
+           *        The second vector, as an object with x/y properties.
+           *
+           * @return {number}
+           *         The angle in degrees
+           */
+          getRadiansToVector: function (v1, v2) {
+            var box;
+            if (!defined(v2)) {
+              box = getPointBB(this);
+              if (box) {
+                v2 = {
+                  x: (box.xMin + box.xMax) / 2,
+                  y: (box.yMin + box.yMax) / 2,
+                };
+              }
+            }
+            return Math.atan2(v2.y - v1.y, v1.x - v2.x);
+          },
+          /**
+           * Utility to get the position of the marker, based on the path angle and
+           * the marker's radius.
+           *
+           * @private
+           * @function Highcharts.Point#getMarkerVector
+           *
+           * @param {number} radians
+           *        The angle in radians from the point center to another vector.
+           *
+           * @param {number} markerRadius
+           *        The radius of the marker, to calculate the additional distance to
+           *        the center of the marker.
+           *
+           * @param {object} anchor
+           *        The anchor point of the path and marker as an object with x/y
+           *        properties.
+           *
+           * @return {object}
+           *         The marker vector as an object with x/y properties.
+           */
+          getMarkerVector: function (radians, markerRadius, anchor) {
+            var twoPI = Math.PI * 2.0,
+              theta = radians,
+              bb = getPointBB(this),
+              rectWidth = bb.xMax - bb.xMin,
+              rectHeight = bb.yMax - bb.yMin,
+              rAtan = Math.atan2(rectHeight, rectWidth),
+              tanTheta = 1,
+              leftOrRightRegion = false,
+              rectHalfWidth = rectWidth / 2.0,
+              rectHalfHeight = rectHeight / 2.0,
+              rectHorizontalCenter = bb.xMin + rectHalfWidth,
+              rectVerticalCenter = bb.yMin + rectHalfHeight,
+              edgePoint = {
+                x: rectHorizontalCenter,
+                y: rectVerticalCenter,
+              },
+              markerPoint = {},
+              xFactor = 1,
+              yFactor = 1;
+            while (theta < -Math.PI) {
+              theta += twoPI;
+            }
+            while (theta > Math.PI) {
+              theta -= twoPI;
+            }
+            tanTheta = Math.tan(theta);
+            if (theta > -rAtan && theta <= rAtan) {
+              // Right side
+              yFactor = -1;
+              leftOrRightRegion = true;
+            } else if (theta > rAtan && theta <= Math.PI - rAtan) {
+              // Top side
+              yFactor = -1;
+            } else if (theta > Math.PI - rAtan || theta <= -(Math.PI - rAtan)) {
+              // Left side
+              xFactor = -1;
+              leftOrRightRegion = true;
+            } else {
+              // Bottom side
+              xFactor = -1;
+            }
+            // Correct the edgePoint according to the placement of the marker
+            if (leftOrRightRegion) {
+              edgePoint.x += xFactor * rectHalfWidth;
+              edgePoint.y += yFactor * rectHalfWidth * tanTheta;
+            } else {
+              edgePoint.x += xFactor * (rectHeight / (2.0 * tanTheta));
+              edgePoint.y += yFactor * rectHalfHeight;
+            }
+            if (anchor.x !== rectHorizontalCenter) {
+              edgePoint.x = anchor.x;
+            }
+            if (anchor.y !== rectVerticalCenter) {
+              edgePoint.y = anchor.y;
+            }
+            markerPoint.x = edgePoint.x + markerRadius * Math.cos(theta);
+            markerPoint.y = edgePoint.y - markerRadius * Math.sin(theta);
+            return markerPoint;
+          },
+        }
+      );
+      /**
+       * Warn if using legacy options. Copy the options over. Note that this will
+       * still break if using the legacy options in chart.update, addSeries etc.
+       * @private
+       */
+      function warnLegacy(chart) {
+        if (
+          chart.options.pathfinder ||
+          chart.series.reduce(function (acc, series) {
+            if (series.options) {
+              merge(
+                true,
+                (series.options.connectors = series.options.connectors || {}),
+                series.options.pathfinder
+              );
+            }
+            return acc || (series.options && series.options.pathfinder);
+          }, false)
+        ) {
+          merge(
+            true,
+            (chart.options.connectors = chart.options.connectors || {}),
+            chart.options.pathfinder
+          );
+          error(
+            "WARNING: Pathfinder options have been renamed. " +
+              'Use "chart.connectors" or "series.connectors" instead.'
+          );
+        }
+      }
 
-    });
-    _registerModule(_modules, 'Gantt/Connection.js', [_modules['Core/Globals.js'], _modules['Core/Options.js'], _modules['Core/Series/Point.js'], _modules['Core/Utilities.js']], function (H, O, Point, U) {
-        /* *
-         *
-         *  (c) 2016 Highsoft AS
-         *  Authors: Øystein Moseng, Lars A. V. Cabrera
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
+      return Connection;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Gantt/PathfinderAlgorithms.js",
+    [_modules["Core/Utilities.js"]],
+    function (U) {
+      /* *
+       *
+       *  (c) 2016 Highsoft AS
+       *  Author: Øystein Moseng
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var extend = U.extend,
+        pick = U.pick;
+      var min = Math.min,
+        max = Math.max,
+        abs = Math.abs;
+      /**
+       * Get index of last obstacle before xMin. Employs a type of binary search, and
+       * thus requires that obstacles are sorted by xMin value.
+       *
+       * @private
+       * @function findLastObstacleBefore
+       *
+       * @param {Array<object>} obstacles
+       *        Array of obstacles to search in.
+       *
+       * @param {number} xMin
+       *        The xMin threshold.
+       *
+       * @param {number} [startIx]
+       *        Starting index to search from. Must be within array range.
+       *
+       * @return {number}
+       *         The index of the last obstacle element before xMin.
+       */
+      function findLastObstacleBefore(obstacles, xMin, startIx) {
+        var left = startIx || 0, // left limit
+          right = obstacles.length - 1, // right limit
+          min = xMin - 0.0000001, // Make sure we include all obstacles at xMin
+          cursor,
+          cmp;
+        while (left <= right) {
+          cursor = (right + left) >> 1;
+          cmp = min - obstacles[cursor].xMin;
+          if (cmp > 0) {
+            left = cursor + 1;
+          } else if (cmp < 0) {
+            right = cursor - 1;
+          } else {
+            return cursor;
+          }
+        }
+        return left > 0 ? left - 1 : 0;
+      }
+      /**
+       * Test if a point lays within an obstacle.
+       *
+       * @private
+       * @function pointWithinObstacle
+       *
+       * @param {object} obstacle
+       *        Obstacle to test.
+       *
+       * @param {Highcharts.Point} point
+       *        Point with x/y props.
+       *
+       * @return {boolean}
+       *         Whether point is within the obstacle or not.
+       */
+      function pointWithinObstacle(obstacle, point) {
+        return (
+          point.x <= obstacle.xMax &&
+          point.x >= obstacle.xMin &&
+          point.y <= obstacle.yMax &&
+          point.y >= obstacle.yMin
+        );
+      }
+      /**
+       * Find the index of an obstacle that wraps around a point.
+       * Returns -1 if not found.
+       *
+       * @private
+       * @function findObstacleFromPoint
+       *
+       * @param {Array<object>} obstacles
+       *        Obstacles to test.
+       *
+       * @param {Highcharts.Point} point
+       *        Point with x/y props.
+       *
+       * @return {number}
+       *         Ix of the obstacle in the array, or -1 if not found.
+       */
+      function findObstacleFromPoint(obstacles, point) {
+        var i = findLastObstacleBefore(obstacles, point.x + 1) + 1;
+        while (i--) {
+          if (
+            obstacles[i].xMax >= point.x &&
+            // optimization using lazy evaluation
+            pointWithinObstacle(obstacles[i], point)
+          ) {
+            return i;
+          }
+        }
+        return -1;
+      }
+      /**
+       * Get SVG path array from array of line segments.
+       *
+       * @private
+       * @function pathFromSegments
+       *
+       * @param {Array<object>} segments
+       *        The segments to build the path from.
+       *
+       * @return {Highcharts.SVGPathArray}
+       *         SVG path array as accepted by the SVG Renderer.
+       */
+      function pathFromSegments(segments) {
+        var path = [];
+        if (segments.length) {
+          path.push(["M", segments[0].start.x, segments[0].start.y]);
+          for (var i = 0; i < segments.length; ++i) {
+            path.push(["L", segments[i].end.x, segments[i].end.y]);
+          }
+        }
+        return path;
+      }
+      /**
+       * Limits obstacle max/mins in all directions to bounds. Modifies input
+       * obstacle.
+       *
+       * @private
+       * @function limitObstacleToBounds
+       *
+       * @param {object} obstacle
+       *        Obstacle to limit.
+       *
+       * @param {object} bounds
+       *        Bounds to use as limit.
+       *
+       * @return {void}
+       */
+      function limitObstacleToBounds(obstacle, bounds) {
+        obstacle.yMin = max(obstacle.yMin, bounds.yMin);
+        obstacle.yMax = min(obstacle.yMax, bounds.yMax);
+        obstacle.xMin = max(obstacle.xMin, bounds.xMin);
+        obstacle.xMax = min(obstacle.xMax, bounds.xMax);
+      }
+      /**
+       * Get an SVG path from a starting coordinate to an ending coordinate.
+       * Draws a straight line.
+       *
+       * @function Highcharts.Pathfinder.algorithms.straight
+       *
+       * @param {Highcharts.PositionObject} start
+       *        Starting coordinate, object with x/y props.
+       *
+       * @param {Highcharts.PositionObject} end
+       *        Ending coordinate, object with x/y props.
+       *
+       * @return {object}
+       *         An object with the SVG path in Array form as accepted by the SVG
+       *         renderer, as well as an array of new obstacles making up this
+       *         path.
+       */
+      function straight(start, end) {
+        return {
+          path: [
+            ["M", start.x, start.y],
+            ["L", end.x, end.y],
+          ],
+          obstacles: [{ start: start, end: end }],
+        };
+      }
+      /**
+       * Find a path from a starting coordinate to an ending coordinate, using
+       * right angles only, and taking only starting/ending obstacle into
+       * consideration.
+       *
+       * @function Highcharts.Pathfinder.algorithms.simpleConnect
+       *
+       * @param {Highcharts.PositionObject} start
+       *        Starting coordinate, object with x/y props.
+       *
+       * @param {Highcharts.PositionObject} end
+       *        Ending coordinate, object with x/y props.
+       *
+       * @param {object} options
+       *        Options for the algorithm:
+       *        - chartObstacles: Array of chart obstacles to avoid
+       *        - startDirectionX: Optional. True if starting in the X direction.
+       *          If not provided, the algorithm starts in the direction that is
+       *          the furthest between start/end.
+       *
+       * @return {object}
+       *         An object with the SVG path in Array form as accepted by the SVG
+       *         renderer, as well as an array of new obstacles making up this
+       *         path.
+       */
+      var simpleConnect = extend(
+        function (start, end, options) {
+          var segments = [],
+            endSegment,
+            dir = pick(
+              options.startDirectionX,
+              abs(end.x - start.x) > abs(end.y - start.y)
+            )
+              ? "x"
+              : "y",
+            chartObstacles = options.chartObstacles,
+            startObstacleIx = findObstacleFromPoint(chartObstacles, start),
+            endObstacleIx = findObstacleFromPoint(chartObstacles, end),
+            startObstacle,
+            endObstacle,
+            prevWaypoint,
+            waypoint,
+            waypoint2,
+            useMax,
+            endPoint;
+          // eslint-disable-next-line valid-jsdoc
+          /**
+           * Return a clone of a point with a property set from a target object,
+           * optionally with an offset
+           * @private
+           */
+          function copyFromPoint(from, fromKey, to, toKey, offset) {
+            var point = {
+              x: from.x,
+              y: from.y,
+            };
+            point[fromKey] = to[toKey || fromKey] + (offset || 0);
+            return point;
+          }
+          // eslint-disable-next-line valid-jsdoc
+          /**
+           * Return waypoint outside obstacle.
+           * @private
+           */
+          function getMeOut(obstacle, point, direction) {
+            var useMax =
+              abs(point[direction] - obstacle[direction + "Min"]) >
+              abs(point[direction] - obstacle[direction + "Max"]);
+            return copyFromPoint(
+              point,
+              direction,
+              obstacle,
+              direction + (useMax ? "Max" : "Min"),
+              useMax ? 1 : -1
+            );
+          }
+          // Pull out end point
+          if (endObstacleIx > -1) {
+            endObstacle = chartObstacles[endObstacleIx];
+            waypoint = getMeOut(endObstacle, end, dir);
+            endSegment = {
+              start: waypoint,
+              end: end,
+            };
+            endPoint = waypoint;
+          } else {
+            endPoint = end;
+          }
+          // If an obstacle envelops the start point, add a segment to get out,
+          // and around it.
+          if (startObstacleIx > -1) {
+            startObstacle = chartObstacles[startObstacleIx];
+            waypoint = getMeOut(startObstacle, start, dir);
+            segments.push({
+              start: start,
+              end: waypoint,
+            });
+            // If we are going back again, switch direction to get around start
+            // obstacle.
+            if (
+              // Going towards max from start:
+              waypoint[dir] >= start[dir] ===
+              // Going towards min to end:
+              waypoint[dir] >= endPoint[dir]
+            ) {
+              dir = dir === "y" ? "x" : "y";
+              useMax = start[dir] < end[dir];
+              segments.push({
+                start: waypoint,
+                end: copyFromPoint(
+                  waypoint,
+                  dir,
+                  startObstacle,
+                  dir + (useMax ? "Max" : "Min"),
+                  useMax ? 1 : -1
+                ),
+              });
+              // Switch direction again
+              dir = dir === "y" ? "x" : "y";
+            }
+          }
+          // We are around the start obstacle. Go towards the end in one
+          // direction.
+          prevWaypoint = segments.length
+            ? segments[segments.length - 1].end
+            : start;
+          waypoint = copyFromPoint(prevWaypoint, dir, endPoint);
+          segments.push({
+            start: prevWaypoint,
+            end: waypoint,
+          });
+          // Final run to end point in the other direction
+          dir = dir === "y" ? "x" : "y";
+          waypoint2 = copyFromPoint(waypoint, dir, endPoint);
+          segments.push({
+            start: waypoint,
+            end: waypoint2,
+          });
+          // Finally add the endSegment
+          segments.push(endSegment);
+          return {
+            path: pathFromSegments(segments),
+            obstacles: segments,
+          };
+        },
+        {
+          requiresObstacles: true,
+        }
+      );
+      /**
+       * Find a path from a starting coordinate to an ending coordinate, taking
+       * obstacles into consideration. Might not always find the optimal path,
+       * but is fast, and usually good enough.
+       *
+       * @function Highcharts.Pathfinder.algorithms.fastAvoid
+       *
+       * @param {Highcharts.PositionObject} start
+       *        Starting coordinate, object with x/y props.
+       *
+       * @param {Highcharts.PositionObject} end
+       *        Ending coordinate, object with x/y props.
+       *
+       * @param {object} options
+       *        Options for the algorithm.
+       *        - chartObstacles:  Array of chart obstacles to avoid
+       *        - lineObstacles:   Array of line obstacles to jump over
+       *        - obstacleMetrics: Object with metrics of chartObstacles cached
+       *        - hardBounds:      Hard boundaries to not cross
+       *        - obstacleOptions: Options for the obstacles, including margin
+       *        - startDirectionX: Optional. True if starting in the X direction.
+       *                           If not provided, the algorithm starts in the
+       *                           direction that is the furthest between
+       *                           start/end.
+       *
+       * @return {object}
+       *         An object with the SVG path in Array form as accepted by the SVG
+       *         renderer, as well as an array of new obstacles making up this
+       *         path.
+       */
+      var fastAvoid = extend(
+        function (start, end, options) {
+          /*
+                    Algorithm rules/description
+                    - Find initial direction
+                    - Determine soft/hard max for each direction.
+                    - Move along initial direction until obstacle.
+                    - Change direction.
+                    - If hitting obstacle,
+            first try to change length of previous line
+                        before changing direction again.
+    
+                    Soft min/max x = start/destination x +/- widest obstacle + margin
+                    Soft min/max y = start/destination y +/- tallest obstacle + margin
+    
+                    @todo:
+                        - Make retrospective,
+            try changing prev segment to reduce
+                            corners
+                        - Fix logic for breaking out of end-points - not always picking
+                            the best direction currently
+                        - When going around the end obstacle we should not always go the
+                            shortest route,
+            rather pick the one closer to the end point
+                */
+          var dirIsX = pick(
+              options.startDirectionX,
+              abs(end.x - start.x) > abs(end.y - start.y)
+            ),
+            dir = dirIsX ? "x" : "y",
+            segments,
+            useMax,
+            extractedEndPoint,
+            endSegments = [],
+            forceObstacleBreak = false, // Used in clearPathTo to keep track of
+            // when to force break through an obstacle.
+            // Boundaries to stay within. If beyond soft boundary, prefer to
+            // change direction ASAP. If at hard max, always change immediately.
+            metrics = options.obstacleMetrics,
+            softMinX = min(start.x, end.x) - metrics.maxWidth - 10,
+            softMaxX = max(start.x, end.x) + metrics.maxWidth + 10,
+            softMinY = min(start.y, end.y) - metrics.maxHeight - 10,
+            softMaxY = max(start.y, end.y) + metrics.maxHeight + 10,
+            // Obstacles
+            chartObstacles = options.chartObstacles,
+            startObstacleIx = findLastObstacleBefore(chartObstacles, softMinX),
+            endObstacleIx = findLastObstacleBefore(chartObstacles, softMaxX);
+          // eslint-disable-next-line valid-jsdoc
+          /**
+           * How far can you go between two points before hitting an obstacle?
+           * Does not work for diagonal lines (because it doesn't have to).
+           * @private
+           */
+          function pivotPoint(fromPoint, toPoint, directionIsX) {
+            var firstPoint,
+              lastPoint,
+              highestPoint,
+              lowestPoint,
+              i,
+              searchDirection = fromPoint.x < toPoint.x ? 1 : -1;
+            if (fromPoint.x < toPoint.x) {
+              firstPoint = fromPoint;
+              lastPoint = toPoint;
+            } else {
+              firstPoint = toPoint;
+              lastPoint = fromPoint;
+            }
+            if (fromPoint.y < toPoint.y) {
+              lowestPoint = fromPoint;
+              highestPoint = toPoint;
+            } else {
+              lowestPoint = toPoint;
+              highestPoint = fromPoint;
+            }
+            // Go through obstacle range in reverse if toPoint is before
+            // fromPoint in the X-dimension.
+            i =
+              searchDirection < 0
+                ? // Searching backwards, start at last obstacle before last point
+                  min(
+                    findLastObstacleBefore(chartObstacles, lastPoint.x),
+                    chartObstacles.length - 1
+                  )
+                : // Forwards. Since we're not sorted by xMax, we have to look
+                  // at all obstacles.
+                  0;
+            // Go through obstacles in this X range
+            while (
+              chartObstacles[i] &&
+              ((searchDirection > 0 && chartObstacles[i].xMin <= lastPoint.x) ||
+                (searchDirection < 0 && chartObstacles[i].xMax >= firstPoint.x))
+            ) {
+              // If this obstacle is between from and to points in a straight
+              // line, pivot at the intersection.
+              if (
+                chartObstacles[i].xMin <= lastPoint.x &&
+                chartObstacles[i].xMax >= firstPoint.x &&
+                chartObstacles[i].yMin <= highestPoint.y &&
+                chartObstacles[i].yMax >= lowestPoint.y
+              ) {
+                if (directionIsX) {
+                  return {
+                    y: fromPoint.y,
+                    x:
+                      fromPoint.x < toPoint.x
+                        ? chartObstacles[i].xMin - 1
+                        : chartObstacles[i].xMax + 1,
+                    obstacle: chartObstacles[i],
+                  };
+                }
+                // else ...
+                return {
+                  x: fromPoint.x,
+                  y:
+                    fromPoint.y < toPoint.y
+                      ? chartObstacles[i].yMin - 1
+                      : chartObstacles[i].yMax + 1,
+                  obstacle: chartObstacles[i],
+                };
+              }
+              i += searchDirection;
+            }
+            return toPoint;
+          }
+          /**
+           * Decide in which direction to dodge or get out of an obstacle.
+           * Considers desired direction, which way is shortest, soft and hard
+           * bounds.
+           *
+           * (? Returns a string, either xMin, xMax, yMin or yMax.)
+           *
+           * @private
+           * @function
+           *
+           * @param {object} obstacle
+           *        Obstacle to dodge/escape.
+           *
+           * @param {object} fromPoint
+           *        Point with x/y props that's dodging/escaping.
+           *
+           * @param {object} toPoint
+           *        Goal point.
+           *
+           * @param {boolean} dirIsX
+           *        Dodge in X dimension.
+           *
+           * @param {object} bounds
+           *        Hard and soft boundaries.
+           *
+           * @return {boolean}
+           *         Use max or not.
+           */
+          function getDodgeDirection(
+            obstacle,
+            fromPoint,
+            toPoint,
+            dirIsX,
+            bounds
+          ) {
+            var softBounds = bounds.soft,
+              hardBounds = bounds.hard,
+              dir = dirIsX ? "x" : "y",
+              toPointMax = { x: fromPoint.x, y: fromPoint.y },
+              toPointMin = { x: fromPoint.x, y: fromPoint.y },
+              minPivot,
+              maxPivot,
+              maxOutOfSoftBounds =
+                obstacle[dir + "Max"] >= softBounds[dir + "Max"],
+              minOutOfSoftBounds =
+                obstacle[dir + "Min"] <= softBounds[dir + "Min"],
+              maxOutOfHardBounds =
+                obstacle[dir + "Max"] >= hardBounds[dir + "Max"],
+              minOutOfHardBounds =
+                obstacle[dir + "Min"] <= hardBounds[dir + "Min"],
+              // Find out if we should prefer one direction over the other if
+              // we can choose freely
+              minDistance = abs(obstacle[dir + "Min"] - fromPoint[dir]),
+              maxDistance = abs(obstacle[dir + "Max"] - fromPoint[dir]),
+              // If it's a small difference, pick the one leading towards dest
+              // point. Otherwise pick the shortest distance
+              useMax =
+                abs(minDistance - maxDistance) < 10
+                  ? fromPoint[dir] < toPoint[dir]
+                  : maxDistance < minDistance;
+            // Check if we hit any obstacles trying to go around in either
+            // direction.
+            toPointMin[dir] = obstacle[dir + "Min"];
+            toPointMax[dir] = obstacle[dir + "Max"];
+            minPivot =
+              pivotPoint(fromPoint, toPointMin, dirIsX)[dir] !==
+              toPointMin[dir];
+            maxPivot =
+              pivotPoint(fromPoint, toPointMax, dirIsX)[dir] !==
+              toPointMax[dir];
+            useMax = minPivot
+              ? maxPivot
+                ? useMax
+                : true
+              : maxPivot
+              ? false
+              : useMax;
+            // useMax now contains our preferred choice, bounds not taken into
+            // account. If both or neither direction is out of bounds we want to
+            // use this.
+            // Deal with soft bounds
+            useMax = minOutOfSoftBounds
+              ? maxOutOfSoftBounds
+                ? useMax
+                : true // Out on min
+              : maxOutOfSoftBounds
+              ? false
+              : useMax; // Not out on min
+            // Deal with hard bounds
+            useMax = minOutOfHardBounds
+              ? maxOutOfHardBounds
+                ? useMax
+                : true // Out on min
+              : maxOutOfHardBounds
+              ? false
+              : useMax; // Not out on min
+            return useMax;
+          }
+          // eslint-disable-next-line valid-jsdoc
+          /**
+           * Find a clear path between point.
+           * @private
+           */
+          function clearPathTo(fromPoint, toPoint, dirIsX) {
+            // Don't waste time if we've hit goal
+            if (fromPoint.x === toPoint.x && fromPoint.y === toPoint.y) {
+              return [];
+            }
+            var dir = dirIsX ? "x" : "y",
+              pivot,
+              segments,
+              waypoint,
+              waypointUseMax,
+              envelopingObstacle,
+              secondEnvelopingObstacle,
+              envelopWaypoint,
+              obstacleMargin = options.obstacleOptions.margin,
+              bounds = {
+                soft: {
+                  xMin: softMinX,
+                  xMax: softMaxX,
+                  yMin: softMinY,
+                  yMax: softMaxY,
+                },
+                hard: options.hardBounds,
+              };
+            // If fromPoint is inside an obstacle we have a problem. Break out
+            // by just going to the outside of this obstacle. We prefer to go to
+            // the nearest edge in the chosen direction.
+            envelopingObstacle = findObstacleFromPoint(
+              chartObstacles,
+              fromPoint
+            );
+            if (envelopingObstacle > -1) {
+              envelopingObstacle = chartObstacles[envelopingObstacle];
+              waypointUseMax = getDodgeDirection(
+                envelopingObstacle,
+                fromPoint,
+                toPoint,
+                dirIsX,
+                bounds
+              );
+              // Cut obstacle to hard bounds to make sure we stay within
+              limitObstacleToBounds(envelopingObstacle, options.hardBounds);
+              envelopWaypoint = dirIsX
+                ? {
+                    y: fromPoint.y,
+                    x:
+                      envelopingObstacle[waypointUseMax ? "xMax" : "xMin"] +
+                      (waypointUseMax ? 1 : -1),
+                  }
+                : {
+                    x: fromPoint.x,
+                    y:
+                      envelopingObstacle[waypointUseMax ? "yMax" : "yMin"] +
+                      (waypointUseMax ? 1 : -1),
+                  };
+              // If we crashed into another obstacle doing this, we put the
+              // waypoint between them instead
+              secondEnvelopingObstacle = findObstacleFromPoint(
+                chartObstacles,
+                envelopWaypoint
+              );
+              if (secondEnvelopingObstacle > -1) {
+                secondEnvelopingObstacle =
+                  chartObstacles[secondEnvelopingObstacle];
+                // Cut obstacle to hard bounds
+                limitObstacleToBounds(
+                  secondEnvelopingObstacle,
+                  options.hardBounds
+                );
+                // Modify waypoint to lay between obstacles
+                envelopWaypoint[dir] = waypointUseMax
+                  ? max(
+                      envelopingObstacle[dir + "Max"] - obstacleMargin + 1,
+                      (secondEnvelopingObstacle[dir + "Min"] +
+                        envelopingObstacle[dir + "Max"]) /
+                        2
+                    )
+                  : min(
+                      envelopingObstacle[dir + "Min"] + obstacleMargin - 1,
+                      (secondEnvelopingObstacle[dir + "Max"] +
+                        envelopingObstacle[dir + "Min"]) /
+                        2
+                    );
+                // We are not going anywhere. If this happens for the first
+                // time, do nothing. Otherwise, try to go to the extreme of
+                // the obstacle pair in the current direction.
+                if (
+                  fromPoint.x === envelopWaypoint.x &&
+                  fromPoint.y === envelopWaypoint.y
+                ) {
+                  if (forceObstacleBreak) {
+                    envelopWaypoint[dir] = waypointUseMax
+                      ? max(
+                          envelopingObstacle[dir + "Max"],
+                          secondEnvelopingObstacle[dir + "Max"]
+                        ) + 1
+                      : min(
+                          envelopingObstacle[dir + "Min"],
+                          secondEnvelopingObstacle[dir + "Min"]
+                        ) - 1;
+                  }
+                  // Toggle on if off, and the opposite
+                  forceObstacleBreak = !forceObstacleBreak;
+                } else {
+                  // This point is not identical to previous.
+                  // Clear break trigger.
+                  forceObstacleBreak = false;
+                }
+              }
+              segments = [
+                {
+                  start: fromPoint,
+                  end: envelopWaypoint,
+                },
+              ];
+            } else {
+              // If not enveloping, use standard pivot calculation
+              pivot = pivotPoint(
+                fromPoint,
+                {
+                  x: dirIsX ? toPoint.x : fromPoint.x,
+                  y: dirIsX ? fromPoint.y : toPoint.y,
+                },
+                dirIsX
+              );
+              segments = [
+                {
+                  start: fromPoint,
+                  end: {
+                    x: pivot.x,
+                    y: pivot.y,
+                  },
+                },
+              ];
+              // Pivot before goal, use a waypoint to dodge obstacle
+              if (pivot[dirIsX ? "x" : "y"] !== toPoint[dirIsX ? "x" : "y"]) {
+                // Find direction of waypoint
+                waypointUseMax = getDodgeDirection(
+                  pivot.obstacle,
+                  pivot,
+                  toPoint,
+                  !dirIsX,
+                  bounds
+                );
+                // Cut waypoint to hard bounds
+                limitObstacleToBounds(pivot.obstacle, options.hardBounds);
+                waypoint = {
+                  x: dirIsX
+                    ? pivot.x
+                    : pivot.obstacle[waypointUseMax ? "xMax" : "xMin"] +
+                      (waypointUseMax ? 1 : -1),
+                  y: dirIsX
+                    ? pivot.obstacle[waypointUseMax ? "yMax" : "yMin"] +
+                      (waypointUseMax ? 1 : -1)
+                    : pivot.y,
+                };
+                // We're changing direction here, store that to make sure we
+                // also change direction when adding the last segment array
+                // after handling waypoint.
+                dirIsX = !dirIsX;
+                segments = segments.concat(
+                  clearPathTo(
+                    {
+                      x: pivot.x,
+                      y: pivot.y,
+                    },
+                    waypoint,
+                    dirIsX
+                  )
+                );
+              }
+            }
+            // Get segments for the other direction too
+            // Recursion is our friend
+            segments = segments.concat(
+              clearPathTo(segments[segments.length - 1].end, toPoint, !dirIsX)
+            );
+            return segments;
+          }
+          // eslint-disable-next-line valid-jsdoc
+          /**
+           * Extract point to outside of obstacle in whichever direction is
+           * closest. Returns new point outside obstacle.
+           * @private
+           */
+          function extractFromObstacle(obstacle, point, goalPoint) {
+            var dirIsX =
+                min(obstacle.xMax - point.x, point.x - obstacle.xMin) <
+                min(obstacle.yMax - point.y, point.y - obstacle.yMin),
+              bounds = {
+                soft: options.hardBounds,
+                hard: options.hardBounds,
+              },
+              useMax = getDodgeDirection(
+                obstacle,
+                point,
+                goalPoint,
+                dirIsX,
+                bounds
+              );
+            return dirIsX
+              ? {
+                  y: point.y,
+                  x: obstacle[useMax ? "xMax" : "xMin"] + (useMax ? 1 : -1),
+                }
+              : {
+                  x: point.x,
+                  y: obstacle[useMax ? "yMax" : "yMin"] + (useMax ? 1 : -1),
+                };
+          }
+          // Cut the obstacle array to soft bounds for optimization in large
+          // datasets.
+          chartObstacles = chartObstacles.slice(
+            startObstacleIx,
+            endObstacleIx + 1
+          );
+          // If an obstacle envelops the end point, move it out of there and add
+          // a little segment to where it was.
+          if (
+            (endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1
+          ) {
+            extractedEndPoint = extractFromObstacle(
+              chartObstacles[endObstacleIx],
+              end,
+              start
+            );
+            endSegments.push({
+              end: end,
+              start: extractedEndPoint,
+            });
+            end = extractedEndPoint;
+          }
+          // If it's still inside one or more obstacles, get out of there by
+          // force-moving towards the start point.
+          while (
+            (endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1
+          ) {
+            useMax = end[dir] - start[dir] < 0;
+            extractedEndPoint = {
+              x: end.x,
+              y: end.y,
+            };
+            extractedEndPoint[dir] =
+              chartObstacles[endObstacleIx][
+                useMax ? dir + "Max" : dir + "Min"
+              ] + (useMax ? 1 : -1);
+            endSegments.push({
+              end: end,
+              start: extractedEndPoint,
+            });
+            end = extractedEndPoint;
+          }
+          // Find the path
+          segments = clearPathTo(start, end, dirIsX);
+          // Add the end-point segments
+          segments = segments.concat(endSegments.reverse());
+          return {
+            path: pathFromSegments(segments),
+            obstacles: segments,
+          };
+        },
+        {
+          requiresObstacles: true,
+        }
+      );
+      // Define the available pathfinding algorithms.
+      // Algorithms take up to 3 arguments: starting point, ending point, and an
+      // options object.
+      var algorithms = {
+        fastAvoid: fastAvoid,
+        straight: straight,
+        simpleConnect: simpleConnect,
+      };
+
+      return algorithms;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Gantt/Pathfinder.js",
+    [
+      _modules["Gantt/Connection.js"],
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Series/Point.js"],
+      _modules["Core/Utilities.js"],
+      _modules["Gantt/PathfinderAlgorithms.js"],
+    ],
+    function (Connection, Chart, H, O, Point, U, pathfinderAlgorithms) {
+      /* *
+       *
+       *  (c) 2016 Highsoft AS
+       *  Authors: Øystein Moseng, Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      /**
+       * The default pathfinder algorithm to use for a chart. It is possible to define
+       * your own algorithms by adding them to the
+       * `Highcharts.Pathfinder.prototype.algorithms`
+       * object before the chart has been created.
+       *
+       * The default algorithms are as follows:
+       *
+       * `straight`:      Draws a straight line between the connecting
+       *                  points. Does not avoid other points when drawing.
+       *
+       * `simpleConnect`: Finds a path between the points using right angles
+       *                  only. Takes only starting/ending points into
+       *                  account, and will not avoid other points.
+       *
+       * `fastAvoid`:     Finds a path between the points using right angles
+       *                  only. Will attempt to avoid other points, but its
+       *                  focus is performance over accuracy. Works well with
+       *                  less dense datasets.
+       *
+       * @typedef {"fastAvoid"|"simpleConnect"|"straight"|string} Highcharts.PathfinderTypeValue
+       */
+      ""; // detach doclets above
+      var defaultOptions = O.defaultOptions;
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        error = U.error,
+        extend = U.extend,
+        merge = U.merge,
+        objectEach = U.objectEach,
+        pick = U.pick,
+        splat = U.splat;
+      var deg2rad = H.deg2rad,
+        max = Math.max,
+        min = Math.min;
+      /*
+         @todo:
+             - Document how to write your own algorithms
+             - Consider adding a Point.pathTo method that wraps creating a connection
+               and rendering it
+        */
+      // Set default Pathfinder options
+      extend(defaultOptions, {
         /**
-         * The default pathfinder algorithm to use for a chart. It is possible to define
-         * your own algorithms by adding them to the
-         * `Highcharts.Pathfinder.prototype.algorithms`
-         * object before the chart has been created.
-         *
-         * The default algorithms are as follows:
+         * The Pathfinder module allows you to define connections between any two
+         * points, represented as lines - optionally with markers for the start
+         * and/or end points. Multiple algorithms are available for calculating how
+         * the connecting lines are drawn.
          *
-         * `straight`:      Draws a straight line between the connecting
-         *                  points. Does not avoid other points when drawing.
+         * Connector functionality requires Highcharts Gantt to be loaded. In Gantt
+         * charts, the connectors are used to draw dependencies between tasks.
          *
-         * `simpleConnect`: Finds a path between the points using right angles
-         *                  only. Takes only starting/ending points into
-         *                  account, and will not avoid other points.
+         * @see [dependency](series.gantt.data.dependency)
          *
-         * `fastAvoid`:     Finds a path between the points using right angles
-         *                  only. Will attempt to avoid other points, but its
-         *                  focus is performance over accuracy. Works well with
-         *                  less dense datasets.
+         * @sample gantt/pathfinder/demo
+         *         Pathfinder connections
          *
-         * @typedef {"fastAvoid"|"simpleConnect"|"straight"|string} Highcharts.PathfinderTypeValue
+         * @declare      Highcharts.ConnectorsOptions
+         * @product      gantt
+         * @optionparent connectors
          */
-        ''; // detach doclets above
-        var defaultOptions = O.defaultOptions;
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            error = U.error,
-            extend = U.extend,
-            merge = U.merge,
-            objectEach = U.objectEach,
-            pick = U.pick,
-            splat = U.splat;
-        var deg2rad = H.deg2rad,
-            max = Math.max,
-            min = Math.min;
-        /*
-         @todo:
-             - Document how to write your own algorithms
-             - Consider adding a Point.pathTo method that wraps creating a connection
-               and rendering it
-        */
-        // Set default Pathfinder options
-        extend(defaultOptions, {
-            /**
-             * The Pathfinder module allows you to define connections between any two
-             * points, represented as lines - optionally with markers for the start
-             * and/or end points. Multiple algorithms are available for calculating how
-             * the connecting lines are drawn.
+        connectors: {
+          /**
+           * Enable connectors for this chart. Requires Highcharts Gantt.
+           *
+           * @type      {boolean}
+           * @default   true
+           * @since     6.2.0
+           * @apioption connectors.enabled
+           */
+          /**
+           * Set the default dash style for this chart's connecting lines.
+           *
+           * @type      {string}
+           * @default   solid
+           * @since     6.2.0
+           * @apioption connectors.dashStyle
+           */
+          /**
+           * Set the default color for this chart's Pathfinder connecting lines.
+           * Defaults to the color of the point being connected.
+           *
+           * @type      {Highcharts.ColorString}
+           * @since     6.2.0
+           * @apioption connectors.lineColor
+           */
+          /**
+           * Set the default pathfinder margin to use, in pixels. Some Pathfinder
+           * algorithms attempt to avoid obstacles, such as other points in the
+           * chart. These algorithms use this margin to determine how close lines
+           * can be to an obstacle. The default is to compute this automatically
+           * from the size of the obstacles in the chart.
+           *
+           * To draw connecting lines close to existing points, set this to a low
+           * number. For more space around existing points, set this number
+           * higher.
+           *
+           * @sample gantt/pathfinder/algorithm-margin
+           *         Small algorithmMargin
+           *
+           * @type      {number}
+           * @since     6.2.0
+           * @apioption connectors.algorithmMargin
+           */
+          /**
+           * Set the default pathfinder algorithm to use for this chart. It is
+           * possible to define your own algorithms by adding them to the
+           * Highcharts.Pathfinder.prototype.algorithms object before the chart
+           * has been created.
+           *
+           * The default algorithms are as follows:
+           *
+           * `straight`:      Draws a straight line between the connecting
+           *                  points. Does not avoid other points when drawing.
+           *
+           * `simpleConnect`: Finds a path between the points using right angles
+           *                  only. Takes only starting/ending points into
+           *                  account, and will not avoid other points.
+           *
+           * `fastAvoid`:     Finds a path between the points using right angles
+           *                  only. Will attempt to avoid other points, but its
+           *                  focus is performance over accuracy. Works well with
+           *                  less dense datasets.
+           *
+           * Default value: `straight` is used as default for most series types,
+           * while `simpleConnect` is used as default for Gantt series, to show
+           * dependencies between points.
+           *
+           * @sample gantt/pathfinder/demo
+           *         Different types used
+           *
+           * @type    {Highcharts.PathfinderTypeValue}
+           * @default undefined
+           * @since   6.2.0
+           */
+          type: "straight",
+          /**
+           * Set the default pixel width for this chart's Pathfinder connecting
+           * lines.
+           *
+           * @since 6.2.0
+           */
+          lineWidth: 1,
+          /**
+           * Marker options for this chart's Pathfinder connectors. Note that
+           * this option is overridden by the `startMarker` and `endMarker`
+           * options.
+           *
+           * @declare Highcharts.ConnectorsMarkerOptions
+           * @since   6.2.0
+           */
+          marker: {
+            /**
+             * Set the radius of the connector markers. The default is
+             * automatically computed based on the algorithmMargin setting.
+             *
+             * Setting marker.width and marker.height will override this
+             * setting.
              *
-             * Connector functionality requires Highcharts Gantt to be loaded. In Gantt
-             * charts, the connectors are used to draw dependencies between tasks.
-             *
-             * @see [dependency](series.gantt.data.dependency)
+             * @type      {number}
+             * @since     6.2.0
+             * @apioption connectors.marker.radius
+             */
+            /**
+             * Set the width of the connector markers. If not supplied, this
+             * is inferred from the marker radius.
              *
-             * @sample gantt/pathfinder/demo
-             *         Pathfinder connections
+             * @type      {number}
+             * @since     6.2.0
+             * @apioption connectors.marker.width
+             */
+            /**
+             * Set the height of the connector markers. If not supplied, this
+             * is inferred from the marker radius.
              *
-             * @declare      Highcharts.ConnectorsOptions
-             * @product      gantt
-             * @optionparent connectors
+             * @type      {number}
+             * @since     6.2.0
+             * @apioption connectors.marker.height
              */
-            connectors: {
-                /**
-                 * Enable connectors for this chart. Requires Highcharts Gantt.
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @since     6.2.0
-                 * @apioption connectors.enabled
-                 */
-                /**
-                 * Set the default dash style for this chart's connecting lines.
-                 *
-                 * @type      {string}
-                 * @default   solid
-                 * @since     6.2.0
-                 * @apioption connectors.dashStyle
-                 */
-                /**
-                 * Set the default color for this chart's Pathfinder connecting lines.
-                 * Defaults to the color of the point being connected.
-                 *
-                 * @type      {Highcharts.ColorString}
-                 * @since     6.2.0
-                 * @apioption connectors.lineColor
-                 */
-                /**
-                 * Set the default pathfinder margin to use, in pixels. Some Pathfinder
-                 * algorithms attempt to avoid obstacles, such as other points in the
-                 * chart. These algorithms use this margin to determine how close lines
-                 * can be to an obstacle. The default is to compute this automatically
-                 * from the size of the obstacles in the chart.
-                 *
-                 * To draw connecting lines close to existing points, set this to a low
-                 * number. For more space around existing points, set this number
-                 * higher.
-                 *
-                 * @sample gantt/pathfinder/algorithm-margin
-                 *         Small algorithmMargin
-                 *
-                 * @type      {number}
-                 * @since     6.2.0
-                 * @apioption connectors.algorithmMargin
-                 */
-                /**
-                 * Set the default pathfinder algorithm to use for this chart. It is
-                 * possible to define your own algorithms by adding them to the
-                 * Highcharts.Pathfinder.prototype.algorithms object before the chart
-                 * has been created.
-                 *
-                 * The default algorithms are as follows:
-                 *
-                 * `straight`:      Draws a straight line between the connecting
-                 *                  points. Does not avoid other points when drawing.
-                 *
-                 * `simpleConnect`: Finds a path between the points using right angles
-                 *                  only. Takes only starting/ending points into
-                 *                  account, and will not avoid other points.
-                 *
-                 * `fastAvoid`:     Finds a path between the points using right angles
-                 *                  only. Will attempt to avoid other points, but its
-                 *                  focus is performance over accuracy. Works well with
-                 *                  less dense datasets.
-                 *
-                 * Default value: `straight` is used as default for most series types,
-                 * while `simpleConnect` is used as default for Gantt series, to show
-                 * dependencies between points.
-                 *
-                 * @sample gantt/pathfinder/demo
-                 *         Different types used
-                 *
-                 * @type    {Highcharts.PathfinderTypeValue}
-                 * @default undefined
-                 * @since   6.2.0
-                 */
-                type: 'straight',
-                /**
-                 * Set the default pixel width for this chart's Pathfinder connecting
-                 * lines.
-                 *
-                 * @since 6.2.0
-                 */
-                lineWidth: 1,
-                /**
-                 * Marker options for this chart's Pathfinder connectors. Note that
-                 * this option is overridden by the `startMarker` and `endMarker`
-                 * options.
-                 *
-                 * @declare Highcharts.ConnectorsMarkerOptions
-                 * @since   6.2.0
-                 */
-                marker: {
-                    /**
-                     * Set the radius of the connector markers. The default is
-                     * automatically computed based on the algorithmMargin setting.
-                     *
-                     * Setting marker.width and marker.height will override this
-                     * setting.
-                     *
-                     * @type      {number}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.radius
-                     */
-                    /**
-                     * Set the width of the connector markers. If not supplied, this
-                     * is inferred from the marker radius.
-                     *
-                     * @type      {number}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.width
-                     */
-                    /**
-                     * Set the height of the connector markers. If not supplied, this
-                     * is inferred from the marker radius.
-                     *
-                     * @type      {number}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.height
-                     */
-                    /**
-                     * Set the color of the connector markers. By default this is the
-                     * same as the connector color.
-                     *
-                     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.color
-                     */
-                    /**
-                     * Set the line/border color of the connector markers. By default
-                     * this is the same as the marker color.
-                     *
-                     * @type      {Highcharts.ColorString}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.lineColor
-                     */
-                    /**
-                     * Enable markers for the connectors.
-                     */
-                    enabled: false,
-                    /**
-                     * Horizontal alignment of the markers relative to the points.
-                     *
-                     * @type {Highcharts.AlignValue}
-                     */
-                    align: 'center',
-                    /**
-                     * Vertical alignment of the markers relative to the points.
-                     *
-                     * @type {Highcharts.VerticalAlignValue}
-                     */
-                    verticalAlign: 'middle',
-                    /**
-                     * Whether or not to draw the markers inside the points.
-                     */
-                    inside: false,
-                    /**
-                     * Set the line/border width of the pathfinder markers.
-                     */
-                    lineWidth: 1
-                },
-                /**
-                 * Marker options specific to the start markers for this chart's
-                 * Pathfinder connectors. Overrides the generic marker options.
-                 *
-                 * @declare Highcharts.ConnectorsStartMarkerOptions
-                 * @extends connectors.marker
-                 * @since   6.2.0
-                 */
-                startMarker: {
-                    /**
-                     * Set the symbol of the connector start markers.
-                     */
-                    symbol: 'diamond'
-                },
-                /**
-                 * Marker options specific to the end markers for this chart's
-                 * Pathfinder connectors. Overrides the generic marker options.
-                 *
-                 * @declare Highcharts.ConnectorsEndMarkerOptions
-                 * @extends connectors.marker
-                 * @since   6.2.0
-                 */
-                endMarker: {
-                    /**
-                     * Set the symbol of the connector end markers.
-                     */
-                    symbol: 'arrow-filled'
-                }
+            /**
+             * Set the color of the connector markers. By default this is the
+             * same as the connector color.
+             *
+             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+             * @since     6.2.0
+             * @apioption connectors.marker.color
+             */
+            /**
+             * Set the line/border color of the connector markers. By default
+             * this is the same as the marker color.
+             *
+             * @type      {Highcharts.ColorString}
+             * @since     6.2.0
+             * @apioption connectors.marker.lineColor
+             */
+            /**
+             * Enable markers for the connectors.
+             */
+            enabled: false,
+            /**
+             * Horizontal alignment of the markers relative to the points.
+             *
+             * @type {Highcharts.AlignValue}
+             */
+            align: "center",
+            /**
+             * Vertical alignment of the markers relative to the points.
+             *
+             * @type {Highcharts.VerticalAlignValue}
+             */
+            verticalAlign: "middle",
+            /**
+             * Whether or not to draw the markers inside the points.
+             */
+            inside: false,
+            /**
+             * Set the line/border width of the pathfinder markers.
+             */
+            lineWidth: 1,
+          },
+          /**
+           * Marker options specific to the start markers for this chart's
+           * Pathfinder connectors. Overrides the generic marker options.
+           *
+           * @declare Highcharts.ConnectorsStartMarkerOptions
+           * @extends connectors.marker
+           * @since   6.2.0
+           */
+          startMarker: {
+            /**
+             * Set the symbol of the connector start markers.
+             */
+            symbol: "diamond",
+          },
+          /**
+           * Marker options specific to the end markers for this chart's
+           * Pathfinder connectors. Overrides the generic marker options.
+           *
+           * @declare Highcharts.ConnectorsEndMarkerOptions
+           * @extends connectors.marker
+           * @since   6.2.0
+           */
+          endMarker: {
+            /**
+             * Set the symbol of the connector end markers.
+             */
+            symbol: "arrow-filled",
+          },
+        },
+      });
+      /**
+       * Override Pathfinder connector options for a series. Requires Highcharts Gantt
+       * to be loaded.
+       *
+       * @declare   Highcharts.SeriesConnectorsOptionsObject
+       * @extends   connectors
+       * @since     6.2.0
+       * @excluding enabled, algorithmMargin
+       * @product   gantt
+       * @apioption plotOptions.series.connectors
+       */
+      /**
+       * Connect to a point. This option can be either a string, referring to the ID
+       * of another point, or an object, or an array of either. If the option is an
+       * array, each element defines a connection.
+       *
+       * @sample gantt/pathfinder/demo
+       *         Different connection types
+       *
+       * @declare   Highcharts.XrangePointConnectorsOptionsObject
+       * @type      {string|Array<string|*>|*}
+       * @extends   plotOptions.series.connectors
+       * @since     6.2.0
+       * @excluding enabled
+       * @product   gantt
+       * @requires  highcharts-gantt
+       * @apioption series.xrange.data.connect
+       */
+      /**
+       * The ID of the point to connect to.
+       *
+       * @type      {string}
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption series.xrange.data.connect.to
+       */
+      /**
+       * Get point bounding box using plotX/plotY and shapeArgs. If using
+       * graphic.getBBox() directly, the bbox will be affected by animation.
+       *
+       * @private
+       * @function
+       *
+       * @param {Highcharts.Point} point
+       *        The point to get BB of.
+       *
+       * @return {Highcharts.Dictionary<number>|null}
+       *         Result xMax, xMin, yMax, yMin.
+       */
+      function getPointBB(point) {
+        var shapeArgs = point.shapeArgs,
+          bb;
+        // Prefer using shapeArgs (columns)
+        if (shapeArgs) {
+          return {
+            xMin: shapeArgs.x,
+            xMax: shapeArgs.x + shapeArgs.width,
+            yMin: shapeArgs.y,
+            yMax: shapeArgs.y + shapeArgs.height,
+          };
+        }
+        // Otherwise use plotX/plotY and bb
+        bb = point.graphic && point.graphic.getBBox();
+        return bb
+          ? {
+              xMin: point.plotX - bb.width / 2,
+              xMax: point.plotX + bb.width / 2,
+              yMin: point.plotY - bb.height / 2,
+              yMax: point.plotY + bb.height / 2,
             }
-        });
+          : null;
+      }
+      /**
+       * Calculate margin to place around obstacles for the pathfinder in pixels.
+       * Returns a minimum of 1 pixel margin.
+       *
+       * @private
+       * @function
+       *
+       * @param {Array<object>} obstacles
+       *        Obstacles to calculate margin from.
+       *
+       * @return {number}
+       *         The calculated margin in pixels. At least 1.
+       */
+      function calculateObstacleMargin(obstacles) {
+        var len = obstacles.length,
+          i = 0,
+          j,
+          obstacleDistance,
+          distances = [],
+          // Compute smallest distance between two rectangles
+          distance = function (a, b, bbMargin) {
+            // Count the distance even if we are slightly off
+            var margin = pick(bbMargin, 10),
+              yOverlap =
+                a.yMax + margin > b.yMin - margin &&
+                a.yMin - margin < b.yMax + margin,
+              xOverlap =
+                a.xMax + margin > b.xMin - margin &&
+                a.xMin - margin < b.xMax + margin,
+              xDistance = yOverlap
+                ? a.xMin > b.xMax
+                  ? a.xMin - b.xMax
+                  : b.xMin - a.xMax
+                : Infinity,
+              yDistance = xOverlap
+                ? a.yMin > b.yMax
+                  ? a.yMin - b.yMax
+                  : b.yMin - a.yMax
+                : Infinity;
+            // If the rectangles collide, try recomputing with smaller margin.
+            // If they collide anyway, discard the obstacle.
+            if (xOverlap && yOverlap) {
+              return margin ? distance(a, b, Math.floor(margin / 2)) : Infinity;
+            }
+            return min(xDistance, yDistance);
+          };
+        // Go over all obstacles and compare them to the others.
+        for (; i < len; ++i) {
+          // Compare to all obstacles ahead. We will already have compared this
+          // obstacle to the ones before.
+          for (j = i + 1; j < len; ++j) {
+            obstacleDistance = distance(obstacles[i], obstacles[j]);
+            // TODO: Magic number 80
+            if (obstacleDistance < 80) {
+              // Ignore large distances
+              distances.push(obstacleDistance);
+            }
+          }
+        }
+        // Ensure we always have at least one value, even in very spaceous charts
+        distances.push(80);
+        return max(
+          Math.floor(
+            distances.sort(function (a, b) {
+              return a - b;
+            })[
+              // Discard first 10% of the relevant distances, and then grab
+              // the smallest one.
+              Math.floor(distances.length / 10)
+            ] /
+              2 -
+              1 // Divide the distance by 2 and subtract 1.
+          ),
+          1 // 1 is the minimum margin
+        );
+      }
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * The Pathfinder class.
+       *
+       * @private
+       * @class
+       * @name Highcharts.Pathfinder
+       *
+       * @param {Highcharts.Chart} chart
+       *        The chart to operate on.
+       */
+      var Pathfinder = /** @class */ (function () {
+        function Pathfinder(chart) {
+          /* *
+           *
+           * Properties
+           *
+           * */
+          this.chart = void 0;
+          this.chartObstacles = void 0;
+          this.chartObstacleMetrics = void 0;
+          this.connections = void 0;
+          this.group = void 0;
+          this.lineObstacles = void 0;
+          this.init(chart);
+        }
         /**
-         * Override Pathfinder connector options for a series. Requires Highcharts Gantt
-         * to be loaded.
+         * @name Highcharts.Pathfinder#algorithms
+         * @type {Highcharts.Dictionary<Function>}
+         */
+        /**
+         * Initialize the Pathfinder object.
          *
-         * @declare   Highcharts.SeriesConnectorsOptionsObject
-         * @extends   connectors
-         * @since     6.2.0
-         * @excluding enabled, algorithmMargin
-         * @product   gantt
-         * @apioption plotOptions.series.connectors
+         * @function Highcharts.Pathfinder#init
+         *
+         * @param {Highcharts.Chart} chart
+         *        The chart context.
          */
+        Pathfinder.prototype.init = function (chart) {
+          // Initialize pathfinder with chart context
+          this.chart = chart;
+          // Init connection reference list
+          this.connections = [];
+          // Recalculate paths/obstacles on chart redraw
+          addEvent(chart, "redraw", function () {
+            this.pathfinder.update();
+          });
+        };
         /**
-         * Connect to a point. This option can be either a string, referring to the ID
-         * of another point, or an object, or an array of either. If the option is an
-         * array, each element defines a connection.
+         * Update Pathfinder connections from scratch.
          *
-         * @sample gantt/pathfinder/demo
-         *         Different connection types
+         * @function Highcharts.Pathfinder#update
          *
-         * @declare   Highcharts.XrangePointConnectorsOptionsObject
-         * @type      {string|Array<string|*>|*}
-         * @extends   plotOptions.series.connectors
-         * @since     6.2.0
-         * @excluding enabled
-         * @product   gantt
-         * @requires  highcharts-gantt
-         * @apioption series.xrange.data.connect
+         * @param {boolean} [deferRender]
+         *        Whether or not to defer rendering of connections until
+         *        series.afterAnimate event has fired. Used on first render.
          */
+        Pathfinder.prototype.update = function (deferRender) {
+          var chart = this.chart,
+            pathfinder = this,
+            oldConnections = pathfinder.connections;
+          // Rebuild pathfinder connections from options
+          pathfinder.connections = [];
+          chart.series.forEach(function (series) {
+            if (series.visible && !series.options.isInternal) {
+              series.points.forEach(function (point) {
+                var ganttPointOptions = point.options;
+                // For Gantt series the connect could be
+                // defined as a dependency
+                if (ganttPointOptions && ganttPointOptions.dependency) {
+                  ganttPointOptions.connect = ganttPointOptions.dependency;
+                }
+                var to,
+                  connects =
+                    point.options &&
+                    point.options.connect &&
+                    splat(point.options.connect);
+                if (point.visible && point.isInside !== false && connects) {
+                  connects.forEach(function (connect) {
+                    to = chart.get(
+                      typeof connect === "string" ? connect : connect.to
+                    );
+                    if (
+                      to instanceof Point &&
+                      to.series.visible &&
+                      to.visible &&
+                      to.isInside !== false
+                    ) {
+                      // Add new connection
+                      pathfinder.connections.push(
+                        new Connection(
+                          point, // from
+                          to,
+                          typeof connect === "string" ? {} : connect
+                        )
+                      );
+                    }
+                  });
+                }
+              });
+            }
+          });
+          // Clear connections that should not be updated, and move old info over
+          // to new connections.
+          for (
+            var j = 0,
+              k,
+              found,
+              lenOld = oldConnections.length,
+              lenNew = pathfinder.connections.length;
+            j < lenOld;
+            ++j
+          ) {
+            found = false;
+            for (k = 0; k < lenNew; ++k) {
+              if (
+                oldConnections[j].fromPoint ===
+                  pathfinder.connections[k].fromPoint &&
+                oldConnections[j].toPoint === pathfinder.connections[k].toPoint
+              ) {
+                pathfinder.connections[k].graphics = oldConnections[j].graphics;
+                found = true;
+                break;
+              }
+            }
+            if (!found) {
+              oldConnections[j].destroy();
+            }
+          }
+          // Clear obstacles to force recalculation. This must be done on every
+          // redraw in case positions have changed. Recalculation is handled in
+          // Connection.getPath on demand.
+          delete this.chartObstacles;
+          delete this.lineObstacles;
+          // Draw the pending connections
+          pathfinder.renderConnections(deferRender);
+        };
         /**
-         * The ID of the point to connect to.
+         * Draw the chart's connecting paths.
          *
-         * @type      {string}
-         * @since     6.2.0
-         * @product   gantt
-         * @apioption series.xrange.data.connect.to
+         * @function Highcharts.Pathfinder#renderConnections
+         *
+         * @param {boolean} [deferRender]
+         *        Whether or not to defer render until series animation is finished.
+         *        Used on first render.
          */
+        Pathfinder.prototype.renderConnections = function (deferRender) {
+          if (deferRender) {
+            // Render after series are done animating
+            this.chart.series.forEach(function (series) {
+              var render = function () {
+                // Find pathfinder connections belonging to this series
+                // that haven't rendered, and render them now.
+                var pathfinder = series.chart.pathfinder,
+                  conns = (pathfinder && pathfinder.connections) || [];
+                conns.forEach(function (connection) {
+                  if (
+                    connection.fromPoint &&
+                    connection.fromPoint.series === series
+                  ) {
+                    connection.render();
+                  }
+                });
+                if (series.pathfinderRemoveRenderEvent) {
+                  series.pathfinderRemoveRenderEvent();
+                  delete series.pathfinderRemoveRenderEvent;
+                }
+              };
+              if (series.options.animation === false) {
+                render();
+              } else {
+                series.pathfinderRemoveRenderEvent = addEvent(
+                  series,
+                  "afterAnimate",
+                  render
+                );
+              }
+            });
+          } else {
+            // Go through connections and render them
+            this.connections.forEach(function (connection) {
+              connection.render();
+            });
+          }
+        };
         /**
-         * Get point bounding box using plotX/plotY and shapeArgs. If using
-         * graphic.getBBox() directly, the bbox will be affected by animation.
+         * Get obstacles for the points in the chart. Does not include connecting
+         * lines from Pathfinder. Applies algorithmMargin to the obstacles.
          *
-         * @private
-         * @function
+         * @function Highcharts.Pathfinder#getChartObstacles
          *
-         * @param {Highcharts.Point} point
-         *        The point to get BB of.
+         * @param {object} options
+         *        Options for the calculation. Currenlty only
+         *        options.algorithmMargin.
          *
-         * @return {Highcharts.Dictionary<number>|null}
-         *         Result xMax, xMin, yMax, yMin.
+         * @return {Array<object>}
+         *         An array of calculated obstacles. Each obstacle is defined as an
+         *         object with xMin, xMax, yMin and yMax properties.
          */
-        function getPointBB(point) {
-            var shapeArgs = point.shapeArgs,
-                bb;
-            // Prefer using shapeArgs (columns)
-            if (shapeArgs) {
-                return {
-                    xMin: shapeArgs.x,
-                    xMax: shapeArgs.x + shapeArgs.width,
-                    yMin: shapeArgs.y,
-                    yMax: shapeArgs.y + shapeArgs.height
-                };
+        Pathfinder.prototype.getChartObstacles = function (options) {
+          var obstacles = [],
+            series = this.chart.series,
+            margin = pick(options.algorithmMargin, 0),
+            calculatedMargin;
+          for (var i = 0, sLen = series.length; i < sLen; ++i) {
+            if (series[i].visible && !series[i].options.isInternal) {
+              for (
+                var j = 0, pLen = series[i].points.length, bb, point;
+                j < pLen;
+                ++j
+              ) {
+                point = series[i].points[j];
+                if (point.visible) {
+                  bb = getPointBB(point);
+                  if (bb) {
+                    obstacles.push({
+                      xMin: bb.xMin - margin,
+                      xMax: bb.xMax + margin,
+                      yMin: bb.yMin - margin,
+                      yMax: bb.yMax + margin,
+                    });
+                  }
+                }
+              }
             }
-            // Otherwise use plotX/plotY and bb
-            bb = point.graphic && point.graphic.getBBox();
-            return bb ? {
-                xMin: point.plotX - bb.width / 2,
-                xMax: point.plotX + bb.width / 2,
-                yMin: point.plotY - bb.height / 2,
-                yMax: point.plotY + bb.height / 2
-            } : null;
-        }
+          }
+          // Sort obstacles by xMin for optimization
+          obstacles = obstacles.sort(function (a, b) {
+            return a.xMin - b.xMin;
+          });
+          // Add auto-calculated margin if the option is not defined
+          if (!defined(options.algorithmMargin)) {
+            calculatedMargin = options.algorithmMargin =
+              calculateObstacleMargin(obstacles);
+            obstacles.forEach(function (obstacle) {
+              obstacle.xMin -= calculatedMargin;
+              obstacle.xMax += calculatedMargin;
+              obstacle.yMin -= calculatedMargin;
+              obstacle.yMax += calculatedMargin;
+            });
+          }
+          return obstacles;
+        };
         /**
-         * Calculate margin to place around obstacles for the pathfinder in pixels.
-         * Returns a minimum of 1 pixel margin.
+         * Utility function to get metrics for obstacles:
+         * - Widest obstacle width
+         * - Tallest obstacle height
          *
-         * @private
-         * @function
+         * @function Highcharts.Pathfinder#getObstacleMetrics
          *
          * @param {Array<object>} obstacles
-         *        Obstacles to calculate margin from.
+         *        An array of obstacles to inspect.
          *
-         * @return {number}
-         *         The calculated margin in pixels. At least 1.
+         * @return {object}
+         *         The calculated metrics, as an object with maxHeight and maxWidth
+         *         properties.
          */
-        function calculateObstacleMargin(obstacles) {
-            var len = obstacles.length,
-                i = 0,
-                j,
-                obstacleDistance,
-                distances = [], 
-                // Compute smallest distance between two rectangles
-                distance = function (a,
-                b,
-                bbMargin) {
-                    // Count the distance even if we are slightly off
-                    var margin = pick(bbMargin, 10),
-                yOverlap = a.yMax + margin > b.yMin - margin &&
-                        a.yMin - margin < b.yMax + margin,
-                xOverlap = a.xMax + margin > b.xMin - margin &&
-                        a.xMin - margin < b.xMax + margin,
-                xDistance = yOverlap ? (a.xMin > b.xMax ? a.xMin - b.xMax : b.xMin - a.xMax) : Infinity,
-                yDistance = xOverlap ? (a.yMin > b.yMax ? a.yMin - b.yMax : b.yMin - a.yMax) : Infinity;
-                // If the rectangles collide, try recomputing with smaller margin.
-                // If they collide anyway, discard the obstacle.
-                if (xOverlap && yOverlap) {
-                    return (margin ?
-                        distance(a, b, Math.floor(margin / 2)) :
-                        Infinity);
-                }
-                return min(xDistance, yDistance);
-            };
-            // Go over all obstacles and compare them to the others.
-            for (; i < len; ++i) {
-                // Compare to all obstacles ahead. We will already have compared this
-                // obstacle to the ones before.
-                for (j = i + 1; j < len; ++j) {
-                    obstacleDistance = distance(obstacles[i], obstacles[j]);
-                    // TODO: Magic number 80
-                    if (obstacleDistance < 80) { // Ignore large distances
-                        distances.push(obstacleDistance);
-                    }
-                }
+        Pathfinder.prototype.getObstacleMetrics = function (obstacles) {
+          var maxWidth = 0,
+            maxHeight = 0,
+            width,
+            height,
+            i = obstacles.length;
+          while (i--) {
+            width = obstacles[i].xMax - obstacles[i].xMin;
+            height = obstacles[i].yMax - obstacles[i].yMin;
+            if (maxWidth < width) {
+              maxWidth = width;
             }
-            // Ensure we always have at least one value, even in very spaceous charts
-            distances.push(80);
-            return max(Math.floor(distances.sort(function (a, b) {
-                return (a - b);
-            })[
-            // Discard first 10% of the relevant distances, and then grab
-            // the smallest one.
-            Math.floor(distances.length / 10)] / 2 - 1 // Divide the distance by 2 and subtract 1.
-            ), 1 // 1 is the minimum margin
-            );
-        }
-        /* eslint-disable no-invalid-this, valid-jsdoc */
+            if (maxHeight < height) {
+              maxHeight = height;
+            }
+          }
+          return {
+            maxHeight: maxHeight,
+            maxWidth: maxWidth,
+          };
+        };
         /**
-         * The Connection class. Used internally to represent a connection between two
-         * points.
-         *
-         * @private
-         * @class
-         * @name Highcharts.Connection
+         * Utility to get which direction to start the pathfinding algorithm
+         * (X vs Y), calculated from a set of marker options.
          *
-         * @param {Highcharts.Point} from
-         *        Connection runs from this Point.
+         * @function Highcharts.Pathfinder#getAlgorithmStartDirection
          *
-         * @param {Highcharts.Point} to
-         *        Connection runs to this Point.
+         * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
+         *        Marker options to calculate from.
          *
-         * @param {Highcharts.ConnectorsOptions} [options]
-         *        Connection options.
+         * @return {boolean}
+         *         Returns true for X, false for Y, and undefined for autocalculate.
          */
-        var Connection = /** @class */ (function () {
-                function Connection(from, to, options) {
-                    /* *
-                    *
-                    * Properties
-                    *
-                    * */
-                    this.chart = void 0;
-                this.fromPoint = void 0;
-                this.graphics = void 0;
-                this.pathfinder = void 0;
-                this.toPoint = void 0;
-                this.init(from, to, options);
+        Pathfinder.prototype.getAlgorithmStartDirection = function (
+          markerOptions
+        ) {
+          var xCenter =
+              markerOptions.align !== "left" && markerOptions.align !== "right",
+            yCenter =
+              markerOptions.verticalAlign !== "top" &&
+              markerOptions.verticalAlign !== "bottom",
+            undef;
+          return xCenter
+            ? yCenter
+              ? undef
+              : false // x is centered
+            : yCenter
+            ? true
+            : undef; // x is off-center
+        };
+        return Pathfinder;
+      })();
+      Pathfinder.prototype.algorithms = pathfinderAlgorithms;
+      // Add to Highcharts namespace
+      H.Pathfinder = Pathfinder;
+      // Add pathfinding capabilities to Points
+      extend(
+        Point.prototype,
+        /** @lends Point.prototype */ {
+          /**
+           * Get coordinates of anchor point for pathfinder connection.
+           *
+           * @private
+           * @function Highcharts.Point#getPathfinderAnchorPoint
+           *
+           * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
+           *        Connection options for position on point.
+           *
+           * @return {Highcharts.PositionObject}
+           *         An object with x/y properties for the position. Coordinates are
+           *         in plot values, not relative to point.
+           */
+          getPathfinderAnchorPoint: function (markerOptions) {
+            var bb = getPointBB(this),
+              x,
+              y;
+            switch (
+              markerOptions.align // eslint-disable-line default-case
+            ) {
+              case "right":
+                x = "xMax";
+                break;
+              case "left":
+                x = "xMin";
             }
-            /**
-             * Initialize the Connection object. Used as constructor only.
-             *
-             * @function Highcharts.Connection#init
-             *
-             * @param {Highcharts.Point} from
-             *        Connection runs from this Point.
-             *
-             * @param {Highcharts.Point} to
-             *        Connection runs to this Point.
-             *
-             * @param {Highcharts.ConnectorsOptions} [options]
-             *        Connection options.
-             */
-            Connection.prototype.init = function (from, to, options) {
-                this.fromPoint = from;
-                this.toPoint = to;
-                this.options = options;
-                this.chart = from.series.chart;
-                this.pathfinder = this.chart.pathfinder;
-            };
-            /**
-             * Add (or update) this connection's path on chart. Stores reference to the
-             * created element on this.graphics.path.
-             *
-             * @function Highcharts.Connection#renderPath
-             *
-             * @param {Highcharts.SVGPathArray} path
-             *        Path to render, in array format. E.g. ['M', 0, 0, 'L', 10, 10]
-             *
-             * @param {Highcharts.SVGAttributes} [attribs]
-             *        SVG attributes for the path.
-             *
-             * @param {Partial<Highcharts.AnimationOptionsObject>} [animation]
-             *        Animation options for the rendering.
-             */
-            Connection.prototype.renderPath = function (path, attribs, animation) {
-                var connection = this,
-                    chart = this.chart,
-                    styledMode = chart.styledMode,
-                    pathfinder = chart.pathfinder,
-                    animate = !chart.options.chart.forExport && animation !== false,
-                    pathGraphic = connection.graphics && connection.graphics.path,
-                    anim;
-                // Add the SVG element of the pathfinder group if it doesn't exist
-                if (!pathfinder.group) {
-                    pathfinder.group = chart.renderer.g()
-                        .addClass('highcharts-pathfinder-group')
-                        .attr({ zIndex: -1 })
-                        .add(chart.seriesGroup);
-                }
-                // Shift the group to compensate for plot area.
-                // Note: Do this always (even when redrawing a path) to avoid issues
-                // when updating chart in a way that changes plot metrics.
-                pathfinder.group.translate(chart.plotLeft, chart.plotTop);
-                // Create path if does not exist
-                if (!(pathGraphic && pathGraphic.renderer)) {
-                    pathGraphic = chart.renderer.path()
-                        .add(pathfinder.group);
-                    if (!styledMode) {
-                        pathGraphic.attr({
-                            opacity: 0
-                        });
-                    }
-                }
-                // Set path attribs and animate to the new path
-                pathGraphic.attr(attribs);
-                anim = { d: path };
-                if (!styledMode) {
-                    anim.opacity = 1;
-                }
-                pathGraphic[animate ? 'animate' : 'attr'](anim, animation);
-                // Store reference on connection
-                this.graphics = this.graphics || {};
-                this.graphics.path = pathGraphic;
-            };
-            /**
-             * Calculate and add marker graphics for connection to the chart. The
-             * created/updated elements are stored on this.graphics.start and
-             * this.graphics.end.
-             *
-             * @function Highcharts.Connection#addMarker
-             *
-             * @param {string} type
-             *        Marker type, either 'start' or 'end'.
-             *
-             * @param {Highcharts.ConnectorsMarkerOptions} options
-             *        All options for this marker. Not calculated or merged with other
-             *        options.
-             *
-             * @param {Highcharts.SVGPathArray} path
-             *        Connection path in array format. This is used to calculate the
-             *        rotation angle of the markers.
-             */
-            Connection.prototype.addMarker = function (type, options, path) {
-                var connection = this,
-                    chart = connection.fromPoint.series.chart,
-                    pathfinder = chart.pathfinder,
-                    renderer = chart.renderer,
-                    point = (type === 'start' ?
-                        connection.fromPoint :
-                        connection.toPoint),
-                    anchor = point.getPathfinderAnchorPoint(options),
-                    markerVector,
-                    radians,
-                    rotation,
-                    box,
-                    width,
-                    height,
-                    pathVector,
-                    segment;
-                if (!options.enabled) {
-                    return;
-                }
-                // Last vector before start/end of path, used to get angle
-                if (type === 'start') {
-                    segment = path[1];
-                }
-                else { // 'end'
-                    segment = path[path.length - 2];
-                }
-                if (segment && segment[0] === 'M' || segment[0] === 'L') {
-                    pathVector = {
-                        x: segment[1],
-                        y: segment[2]
-                    };
-                    // Get angle between pathVector and anchor point and use it to
-                    // create marker position.
-                    radians = point.getRadiansToVector(pathVector, anchor);
-                    markerVector = point.getMarkerVector(radians, options.radius, anchor);
-                    // Rotation of marker is calculated from angle between pathVector
-                    // and markerVector.
-                    // (Note:
-                    //  Used to recalculate radians between markerVector and pathVector,
-                    //  but this should be the same as between pathVector and anchor.)
-                    rotation = -radians / deg2rad;
-                    if (options.width && options.height) {
-                        width = options.width;
-                        height = options.height;
-                    }
-                    else {
-                        width = height = options.radius * 2;
-                    }
-                    // Add graphics object if it does not exist
-                    connection.graphics = connection.graphics || {};
-                    box = {
-                        x: markerVector.x - (width / 2),
-                        y: markerVector.y - (height / 2),
-                        width: width,
-                        height: height,
-                        rotation: rotation,
-                        rotationOriginX: markerVector.x,
-                        rotationOriginY: markerVector.y
-                    };
-                    if (!connection.graphics[type]) {
-                        // Create new marker element
-                        connection.graphics[type] = renderer
-                            .symbol(options.symbol)
-                            .addClass('highcharts-point-connecting-path-' + type + '-marker')
-                            .attr(box)
-                            .add(pathfinder.group);
-                        if (!renderer.styledMode) {
-                            connection.graphics[type].attr({
-                                fill: options.color || connection.fromPoint.color,
-                                stroke: options.lineColor,
-                                'stroke-width': options.lineWidth,
-                                opacity: 0
-                            })
-                                .animate({
-                                opacity: 1
-                            }, point.series.options.animation);
-                        }
-                    }
-                    else {
-                        connection.graphics[type].animate(box);
-                    }
-                }
-            };
-            /**
-             * Calculate and return connection path.
-             * Note: Recalculates chart obstacles on demand if they aren't calculated.
-             *
-             * @function Highcharts.Connection#getPath
-             *
-             * @param {Highcharts.ConnectorsOptions} options
-             *        Connector options. Not calculated or merged with other options.
-             *
-             * @return {object|undefined}
-             *         Calculated SVG path data in array format.
-             */
-            Connection.prototype.getPath = function (options) {
-                var pathfinder = this.pathfinder,
-                    chart = this.chart,
-                    algorithm = pathfinder.algorithms[options.type],
-                    chartObstacles = pathfinder.chartObstacles;
-                if (typeof algorithm !== 'function') {
-                    error('"' + options.type + '" is not a Pathfinder algorithm.');
-                    return {
-                        path: [],
-                        obstacles: []
-                    };
-                }
-                // This function calculates obstacles on demand if they don't exist
-                if (algorithm.requiresObstacles && !chartObstacles) {
-                    chartObstacles =
-                        pathfinder.chartObstacles =
-                            pathfinder.getChartObstacles(options);
-                    // If the algorithmMargin was computed, store the result in default
-                    // options.
-                    chart.options.connectors.algorithmMargin =
-                        options.algorithmMargin;
-                    // Cache some metrics too
-                    pathfinder.chartObstacleMetrics =
-                        pathfinder.getObstacleMetrics(chartObstacles);
-                }
-                // Get the SVG path
-                return algorithm(
-                // From
-                this.fromPoint.getPathfinderAnchorPoint(options.startMarker), 
-                // To
-                this.toPoint.getPathfinderAnchorPoint(options.endMarker), merge({
-                    chartObstacles: chartObstacles,
-                    lineObstacles: pathfinder.lineObstacles || [],
-                    obstacleMetrics: pathfinder.chartObstacleMetrics,
-                    hardBounds: {
-                        xMin: 0,
-                        xMax: chart.plotWidth,
-                        yMin: 0,
-                        yMax: chart.plotHeight
-                    },
-                    obstacleOptions: {
-                        margin: options.algorithmMargin
-                    },
-                    startDirectionX: pathfinder.getAlgorithmStartDirection(options.startMarker)
-                }, options));
-            };
-            /**
-             * (re)Calculate and (re)draw the connection.
-             *
-             * @function Highcharts.Connection#render
-             */
-            Connection.prototype.render = function () {
-                var connection = this,
-                    fromPoint = connection.fromPoint,
-                    series = fromPoint.series,
-                    chart = series.chart,
-                    pathfinder = chart.pathfinder,
-                    pathResult,
-                    path,
-                    options = merge(chart.options.connectors,
-                    series.options.connectors,
-                    fromPoint.options.connectors,
-                    connection.options),
-                    attribs = {};
-                // Set path attribs
-                if (!chart.styledMode) {
-                    attribs.stroke = options.lineColor || fromPoint.color;
-                    attribs['stroke-width'] = options.lineWidth;
-                    if (options.dashStyle) {
-                        attribs.dashstyle = options.dashStyle;
-                    }
-                }
-                attribs['class'] = // eslint-disable-line dot-notation
-                    'highcharts-point-connecting-path ' +
-                        'highcharts-color-' + fromPoint.colorIndex;
-                options = merge(attribs, options);
-                // Set common marker options
-                if (!defined(options.marker.radius)) {
-                    options.marker.radius = min(max(Math.ceil((options.algorithmMargin || 8) / 2) - 1, 1), 5);
-                }
-                // Get the path
-                pathResult = connection.getPath(options);
-                path = pathResult.path;
-                // Always update obstacle storage with obstacles from this path.
-                // We don't know if future calls will need this for their algorithm.
-                if (pathResult.obstacles) {
-                    pathfinder.lineObstacles =
-                        pathfinder.lineObstacles || [];
-                    pathfinder.lineObstacles =
-                        pathfinder.lineObstacles.concat(pathResult.obstacles);
-                }
-                // Add the calculated path to the pathfinder group
-                connection.renderPath(path, attribs, series.options.animation);
-                // Render the markers
-                connection.addMarker('start', merge(options.marker, options.startMarker), path);
-                connection.addMarker('end', merge(options.marker, options.endMarker), path);
-            };
-            /**
-             * Destroy connection by destroying the added graphics elements.
-             *
-             * @function Highcharts.Connection#destroy
-             */
-            Connection.prototype.destroy = function () {
-                if (this.graphics) {
-                    objectEach(this.graphics, function (val) {
-                        val.destroy();
-                    });
-                    delete this.graphics;
-                }
+            switch (
+              markerOptions.verticalAlign // eslint-disable-line default-case
+            ) {
+              case "top":
+                y = "yMin";
+                break;
+              case "bottom":
+                y = "yMax";
+            }
+            return {
+              x: x ? bb[x] : (bb.xMin + bb.xMax) / 2,
+              y: y ? bb[y] : (bb.yMin + bb.yMax) / 2,
             };
-            return Connection;
-        }());
-        // Add to Highcharts namespace
-        H.Connection = Connection;
-        // Add pathfinding capabilities to Points
-        extend(Point.prototype, /** @lends Point.prototype */ {
-            /**
-             * Get coordinates of anchor point for pathfinder connection.
-             *
-             * @private
-             * @function Highcharts.Point#getPathfinderAnchorPoint
-             *
-             * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
-             *        Connection options for position on point.
-             *
-             * @return {Highcharts.PositionObject}
-             *         An object with x/y properties for the position. Coordinates are
-             *         in plot values, not relative to point.
-             */
-            getPathfinderAnchorPoint: function (markerOptions) {
-                var bb = getPointBB(this),
-                    x,
-                    y;
-                switch (markerOptions.align) { // eslint-disable-line default-case
-                    case 'right':
-                        x = 'xMax';
-                        break;
-                    case 'left':
-                        x = 'xMin';
-                }
-                switch (markerOptions.verticalAlign) { // eslint-disable-line default-case
-                    case 'top':
-                        y = 'yMin';
-                        break;
-                    case 'bottom':
-                        y = 'yMax';
-                }
-                return {
-                    x: x ? bb[x] : (bb.xMin + bb.xMax) / 2,
-                    y: y ? bb[y] : (bb.yMin + bb.yMax) / 2
+          },
+          /**
+           * Utility to get the angle from one point to another.
+           *
+           * @private
+           * @function Highcharts.Point#getRadiansToVector
+           *
+           * @param {Highcharts.PositionObject} v1
+           *        The first vector, as an object with x/y properties.
+           *
+           * @param {Highcharts.PositionObject} v2
+           *        The second vector, as an object with x/y properties.
+           *
+           * @return {number}
+           *         The angle in degrees
+           */
+          getRadiansToVector: function (v1, v2) {
+            var box;
+            if (!defined(v2)) {
+              box = getPointBB(this);
+              if (box) {
+                v2 = {
+                  x: (box.xMin + box.xMax) / 2,
+                  y: (box.yMin + box.yMax) / 2,
                 };
+              }
+            }
+            return Math.atan2(v2.y - v1.y, v1.x - v2.x);
+          },
+          /**
+           * Utility to get the position of the marker, based on the path angle and
+           * the marker's radius.
+           *
+           * @private
+           * @function Highcharts.Point#getMarkerVector
+           *
+           * @param {number} radians
+           *        The angle in radians from the point center to another vector.
+           *
+           * @param {number} markerRadius
+           *        The radius of the marker, to calculate the additional distance to
+           *        the center of the marker.
+           *
+           * @param {object} anchor
+           *        The anchor point of the path and marker as an object with x/y
+           *        properties.
+           *
+           * @return {object}
+           *         The marker vector as an object with x/y properties.
+           */
+          getMarkerVector: function (radians, markerRadius, anchor) {
+            var twoPI = Math.PI * 2.0,
+              theta = radians,
+              bb = getPointBB(this),
+              rectWidth = bb.xMax - bb.xMin,
+              rectHeight = bb.yMax - bb.yMin,
+              rAtan = Math.atan2(rectHeight, rectWidth),
+              tanTheta = 1,
+              leftOrRightRegion = false,
+              rectHalfWidth = rectWidth / 2.0,
+              rectHalfHeight = rectHeight / 2.0,
+              rectHorizontalCenter = bb.xMin + rectHalfWidth,
+              rectVerticalCenter = bb.yMin + rectHalfHeight,
+              edgePoint = {
+                x: rectHorizontalCenter,
+                y: rectVerticalCenter,
+              },
+              markerPoint = {},
+              xFactor = 1,
+              yFactor = 1;
+            while (theta < -Math.PI) {
+              theta += twoPI;
+            }
+            while (theta > Math.PI) {
+              theta -= twoPI;
+            }
+            tanTheta = Math.tan(theta);
+            if (theta > -rAtan && theta <= rAtan) {
+              // Right side
+              yFactor = -1;
+              leftOrRightRegion = true;
+            } else if (theta > rAtan && theta <= Math.PI - rAtan) {
+              // Top side
+              yFactor = -1;
+            } else if (theta > Math.PI - rAtan || theta <= -(Math.PI - rAtan)) {
+              // Left side
+              xFactor = -1;
+              leftOrRightRegion = true;
+            } else {
+              // Bottom side
+              xFactor = -1;
+            }
+            // Correct the edgePoint according to the placement of the marker
+            if (leftOrRightRegion) {
+              edgePoint.x += xFactor * rectHalfWidth;
+              edgePoint.y += yFactor * rectHalfWidth * tanTheta;
+            } else {
+              edgePoint.x += xFactor * (rectHeight / (2.0 * tanTheta));
+              edgePoint.y += yFactor * rectHalfHeight;
+            }
+            if (anchor.x !== rectHorizontalCenter) {
+              edgePoint.x = anchor.x;
+            }
+            if (anchor.y !== rectVerticalCenter) {
+              edgePoint.y = anchor.y;
+            }
+            markerPoint.x = edgePoint.x + markerRadius * Math.cos(theta);
+            markerPoint.y = edgePoint.y - markerRadius * Math.sin(theta);
+            return markerPoint;
+          },
+        }
+      );
+      /**
+       * Warn if using legacy options. Copy the options over. Note that this will
+       * still break if using the legacy options in chart.update, addSeries etc.
+       * @private
+       */
+      function warnLegacy(chart) {
+        if (
+          chart.options.pathfinder ||
+          chart.series.reduce(function (acc, series) {
+            if (series.options) {
+              merge(
+                true,
+                (series.options.connectors = series.options.connectors || {}),
+                series.options.pathfinder
+              );
+            }
+            return acc || (series.options && series.options.pathfinder);
+          }, false)
+        ) {
+          merge(
+            true,
+            (chart.options.connectors = chart.options.connectors || {}),
+            chart.options.pathfinder
+          );
+          error(
+            "WARNING: Pathfinder options have been renamed. " +
+              'Use "chart.connectors" or "series.connectors" instead.'
+          );
+        }
+      }
+      // Initialize Pathfinder for charts
+      Chart.prototype.callbacks.push(function (chart) {
+        var options = chart.options;
+        if (options.connectors.enabled !== false) {
+          warnLegacy(chart);
+          this.pathfinder = new Pathfinder(this);
+          this.pathfinder.update(true); // First draw, defer render
+        }
+      });
+
+      return Pathfinder;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Series/XRangeSeries.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Series/Series.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Color/Color.js"],
+      _modules["Core/Series/Point.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, BaseSeries, H, Color, Point, U) {
+      /* *
+       *
+       *  X-range series module
+       *
+       *  (c) 2010-2020 Torstein Honsi, Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var color = Color.parse;
+      var addEvent = U.addEvent,
+        clamp = U.clamp,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        find = U.find,
+        isNumber = U.isNumber,
+        isObject = U.isObject,
+        merge = U.merge,
+        pick = U.pick;
+      /* *
+       * @interface Highcharts.PointOptionsObject in parts/Point.ts
+       */ /**
+       * The ending X value of the range point.
+       * @name Highcharts.PointOptionsObject#x2
+       * @type {number|undefined}
+       * @requires modules/xrange
+       */
+      var Series = H.Series,
+        seriesTypes = BaseSeries.seriesTypes,
+        columnType = seriesTypes.column;
+      /**
+       * Return color of a point based on its category.
+       *
+       * @private
+       * @function getColorByCategory
+       *
+       * @param {object} series
+       *        The series which the point belongs to.
+       *
+       * @param {object} point
+       *        The point to calculate its color for.
+       *
+       * @return {object}
+       *         Returns an object containing the properties color and colorIndex.
+       */
+      function getColorByCategory(series, point) {
+        var colors = series.options.colors || series.chart.options.colors,
+          colorCount = colors
+            ? colors.length
+            : series.chart.options.chart.colorCount,
+          colorIndex = point.y % colorCount,
+          color = colors && colors[colorIndex];
+        return {
+          colorIndex: colorIndex,
+          color: color,
+        };
+      }
+      /**
+       * @private
+       * @class
+       * @name Highcharts.seriesTypes.xrange
+       *
+       * @augments Highcharts.Series
+       */
+      BaseSeries.seriesType(
+        "xrange",
+        "column",
+        /**
+         * The X-range series displays ranges on the X axis, typically time
+         * intervals with a start and end date.
+         *
+         * @sample {highcharts} highcharts/demo/x-range/
+         *         X-range
+         * @sample {highcharts} highcharts/css/x-range/
+         *         Styled mode X-range
+         * @sample {highcharts} highcharts/chart/inverted-xrange/
+         *         Inverted X-range
+         *
+         * @extends      plotOptions.column
+         * @since        6.0.0
+         * @product      highcharts highstock gantt
+         * @excluding    boostThreshold, crisp, cropThreshold, depth, edgeColor,
+         *               edgeWidth, findNearestPointBy, getExtremesFromAll,
+         *               negativeColor, pointInterval, pointIntervalUnit,
+         *               pointPlacement, pointRange, pointStart, softThreshold,
+         *               stacking, threshold, data, dataSorting, boostBlending
+         * @requires     modules/xrange
+         * @optionparent plotOptions.xrange
+         */
+        {
+          /**
+           * A partial fill for each point, typically used to visualize how much
+           * of a task is performed. The partial fill object can be set either on
+           * series or point level.
+           *
+           * @sample {highcharts} highcharts/demo/x-range
+           *         X-range with partial fill
+           *
+           * @product   highcharts highstock gantt
+           * @apioption plotOptions.xrange.partialFill
+           */
+          /**
+           * The fill color to be used for partial fills. Defaults to a darker
+           * shade of the point color.
+           *
+           * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @product   highcharts highstock gantt
+           * @apioption plotOptions.xrange.partialFill.fill
+           */
+          /**
+           * A partial fill for each point, typically used to visualize how much
+           * of a task is performed. See [completed](series.gantt.data.completed).
+           *
+           * @sample gantt/demo/progress-indicator
+           *         Gantt with progress indicator
+           *
+           * @product   gantt
+           * @apioption plotOptions.gantt.partialFill
+           */
+          /**
+           * In an X-range series, this option makes all points of the same Y-axis
+           * category the same color.
+           */
+          colorByPoint: true,
+          dataLabels: {
+            formatter: function () {
+              var point = this.point,
+                amount = point.partialFill;
+              if (isObject(amount)) {
+                amount = amount.amount;
+              }
+              if (isNumber(amount) && amount > 0) {
+                return correctFloat(amount * 100) + "%";
+              }
+            },
+            inside: true,
+            verticalAlign: "middle",
+          },
+          tooltip: {
+            headerFormat:
+              '<span style="font-size: 10px">{point.x} - {point.x2}</span><br/>',
+            pointFormat:
+              '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>',
+          },
+          borderRadius: 3,
+          pointRange: 0,
+        },
+        {
+          type: "xrange",
+          parallelArrays: ["x", "x2", "y"],
+          requireSorting: false,
+          animate: seriesTypes.line.prototype.animate,
+          cropShoulder: 1,
+          getExtremesFromAll: true,
+          autoIncrement: H.noop,
+          buildKDTree: H.noop,
+          /* eslint-disable valid-jsdoc */
+          /**
+           * @private
+           * @function Highcarts.seriesTypes.xrange#init
+           * @return {void}
+           */
+          init: function () {
+            seriesTypes.column.prototype.init.apply(this, arguments);
+            this.options.stacking = void 0; // #13161
+          },
+          /**
+           * Borrow the column series metrics, but with swapped axes. This gives
+           * free access to features like groupPadding, grouping, pointWidth etc.
+           *
+           * @private
+           * @function Highcharts.Series#getColumnMetrics
+           *
+           * @return {Highcharts.ColumnMetricsObject}
+           */
+          getColumnMetrics: function () {
+            var metrics,
+              chart = this.chart;
+            /**
+             * @private
+             */
+            function swapAxes() {
+              chart.series.forEach(function (s) {
+                var xAxis = s.xAxis;
+                s.xAxis = s.yAxis;
+                s.yAxis = xAxis;
+              });
+            }
+            swapAxes();
+            metrics = columnType.prototype.getColumnMetrics.call(this);
+            swapAxes();
+            return metrics;
+          },
+          /**
+           * Override cropData to show a point where x or x2 is outside visible
+           * range, but one of them is inside.
+           *
+           * @private
+           * @function Highcharts.Series#cropData
+           *
+           * @param {Array<number>} xData
+           *
+           * @param {Array<number>} yData
+           *
+           * @param {number} min
+           *
+           * @param {number} max
+           *
+           * @param {number} [cropShoulder]
+           *
+           * @return {*}
+           */
+          cropData: function (xData, yData, min, max) {
+            // Replace xData with x2Data to find the appropriate cropStart
+            var cropData = Series.prototype.cropData,
+              crop = cropData.call(this, this.x2Data, yData, min, max);
+            // Re-insert the cropped xData
+            crop.xData = xData.slice(crop.start, crop.end);
+            return crop;
+          },
+          /**
+           * Finds the index of an existing point that matches the given point
+           * options.
+           *
+           * @private
+           * @function Highcharts.Series#findPointIndex
+           * @param {object} options The options of the point.
+           * @returns {number|undefined} Returns index of a matching point,
+           * returns undefined if no match is found.
+           */
+          findPointIndex: function (options) {
+            var _a = this,
+              cropped = _a.cropped,
+              cropStart = _a.cropStart,
+              points = _a.points;
+            var id = options.id;
+            var pointIndex;
+            if (id) {
+              var point = find(points, function (point) {
+                return point.id === id;
+              });
+              pointIndex = point ? point.index : void 0;
+            }
+            if (typeof pointIndex === "undefined") {
+              var point = find(points, function (point) {
+                return (
+                  point.x === options.x &&
+                  point.x2 === options.x2 &&
+                  !point.touched
+                );
+              });
+              pointIndex = point ? point.index : void 0;
+            }
+            // Reduce pointIndex if data is cropped
+            if (
+              cropped &&
+              isNumber(pointIndex) &&
+              isNumber(cropStart) &&
+              pointIndex >= cropStart
+            ) {
+              pointIndex -= cropStart;
+            }
+            return pointIndex;
+          },
+          /**
+           * @private
+           * @function Highcharts.Series#translatePoint
+           *
+           * @param {Highcharts.Point} point
+           */
+          translatePoint: function (point) {
+            var series = this,
+              xAxis = series.xAxis,
+              yAxis = series.yAxis,
+              metrics = series.columnMetrics,
+              options = series.options,
+              minPointLength = options.minPointLength || 0,
+              plotX = point.plotX,
+              posX = pick(point.x2, point.x + (point.len || 0)),
+              plotX2 = xAxis.translate(posX, 0, 0, 0, 1),
+              length = Math.abs(plotX2 - plotX),
+              widthDifference,
+              shapeArgs,
+              partialFill,
+              inverted = this.chart.inverted,
+              borderWidth = pick(options.borderWidth, 1),
+              crisper = (borderWidth % 2) / 2,
+              yOffset = metrics.offset,
+              pointHeight = Math.round(metrics.width),
+              dlLeft,
+              dlRight,
+              dlWidth,
+              clipRectWidth,
+              tooltipYOffset;
+            if (minPointLength) {
+              widthDifference = minPointLength - length;
+              if (widthDifference < 0) {
+                widthDifference = 0;
+              }
+              plotX -= widthDifference / 2;
+              plotX2 += widthDifference / 2;
+            }
+            plotX = Math.max(plotX, -10);
+            plotX2 = clamp(plotX2, -10, xAxis.len + 10);
+            // Handle individual pointWidth
+            if (defined(point.options.pointWidth)) {
+              yOffset -=
+                (Math.ceil(point.options.pointWidth) - pointHeight) / 2;
+              pointHeight = Math.ceil(point.options.pointWidth);
+            }
+            // Apply pointPlacement to the Y axis
+            if (
+              options.pointPlacement &&
+              isNumber(point.plotY) &&
+              yAxis.categories
+            ) {
+              point.plotY = yAxis.translate(
+                point.y,
+                0,
+                1,
+                0,
+                1,
+                options.pointPlacement
+              );
+            }
+            point.shapeArgs = {
+              x: Math.floor(Math.min(plotX, plotX2)) + crisper,
+              y: Math.floor(point.plotY + yOffset) + crisper,
+              width: Math.round(Math.abs(plotX2 - plotX)),
+              height: pointHeight,
+              r: series.options.borderRadius,
+            };
+            // Align data labels inside the shape and inside the plot area
+            dlLeft = point.shapeArgs.x;
+            dlRight = dlLeft + point.shapeArgs.width;
+            if (dlLeft < 0 || dlRight > xAxis.len) {
+              dlLeft = clamp(dlLeft, 0, xAxis.len);
+              dlRight = clamp(dlRight, 0, xAxis.len);
+              dlWidth = dlRight - dlLeft;
+              point.dlBox = merge(point.shapeArgs, {
+                x: dlLeft,
+                width: dlRight - dlLeft,
+                centerX: dlWidth ? dlWidth / 2 : null,
+              });
+            } else {
+              point.dlBox = null;
+            }
+            // Tooltip position
+            var tooltipPos = point.tooltipPos;
+            var xIndex = !inverted ? 0 : 1;
+            var yIndex = !inverted ? 1 : 0;
+            tooltipYOffset = series.columnMetrics
+              ? series.columnMetrics.offset
+              : -metrics.width / 2;
+            // Limit position by the correct axis size (#9727)
+            tooltipPos[xIndex] = clamp(
+              tooltipPos[xIndex] +
+                (!inverted ? 1 : -1) * (xAxis.reversed ? -1 : 1) * (length / 2),
+              0,
+              xAxis.len - 1
+            );
+            tooltipPos[yIndex] = clamp(
+              tooltipPos[yIndex] + (inverted ? -1 : 1) * tooltipYOffset,
+              0,
+              yAxis.len - 1
+            );
+            // Add a partShapeArgs to the point, based on the shapeArgs property
+            partialFill = point.partialFill;
+            if (partialFill) {
+              // Get the partial fill amount
+              if (isObject(partialFill)) {
+                partialFill = partialFill.amount;
+              }
+              // If it was not a number, assume 0
+              if (!isNumber(partialFill)) {
+                partialFill = 0;
+              }
+              shapeArgs = point.shapeArgs;
+              point.partShapeArgs = {
+                x: shapeArgs.x,
+                y: shapeArgs.y,
+                width: shapeArgs.width,
+                height: shapeArgs.height,
+                r: series.options.borderRadius,
+              };
+              clipRectWidth = Math.max(
+                Math.round(length * partialFill + point.plotX - plotX),
+                0
+              );
+              point.clipRectArgs = {
+                x: xAxis.reversed // #10717
+                  ? shapeArgs.x + length - clipRectWidth
+                  : shapeArgs.x,
+                y: shapeArgs.y,
+                width: clipRectWidth,
+                height: shapeArgs.height,
+              };
+            }
+          },
+          /**
+           * @private
+           * @function Highcharts.Series#translate
+           */
+          translate: function () {
+            columnType.prototype.translate.apply(this, arguments);
+            this.points.forEach(function (point) {
+              this.translatePoint(point);
+            }, this);
+          },
+          /**
+           * Draws a single point in the series. Needed for partial fill.
+           *
+           * This override turns point.graphic into a group containing the
+           * original graphic and an overlay displaying the partial fill.
+           *
+           * @private
+           * @function Highcharts.Series#drawPoint
+           *
+           * @param {Highcharts.Point} point
+           *        An instance of Point in the series.
+           *
+           * @param {"animate"|"attr"} verb
+           *        'animate' (animates changes) or 'attr' (sets options)
+           */
+          drawPoint: function (point, verb) {
+            var series = this,
+              seriesOpts = series.options,
+              renderer = series.chart.renderer,
+              graphic = point.graphic,
+              type = point.shapeType,
+              shapeArgs = point.shapeArgs,
+              partShapeArgs = point.partShapeArgs,
+              clipRectArgs = point.clipRectArgs,
+              pfOptions = point.partialFill,
+              cutOff = seriesOpts.stacking && !seriesOpts.borderRadius,
+              pointState = point.state,
+              stateOpts = seriesOpts.states[pointState || "normal"] || {},
+              pointStateVerb =
+                typeof pointState === "undefined" ? "attr" : verb,
+              pointAttr = series.pointAttribs(point, pointState),
+              animation = pick(
+                series.chart.options.chart.animation,
+                stateOpts.animation
+              ),
+              fill;
+            if (!point.isNull && point.visible !== false) {
+              // Original graphic
+              if (graphic) {
+                // update
+                graphic.rect[verb](shapeArgs);
+              } else {
+                point.graphic = graphic = renderer
+                  .g("point")
+                  .addClass(point.getClassName())
+                  .add(point.group || series.group);
+                graphic.rect = renderer[type](merge(shapeArgs))
+                  .addClass(point.getClassName())
+                  .addClass("highcharts-partfill-original")
+                  .add(graphic);
+              }
+              // Partial fill graphic
+              if (partShapeArgs) {
+                if (graphic.partRect) {
+                  graphic.partRect[verb](merge(partShapeArgs));
+                  graphic.partialClipRect[verb](merge(clipRectArgs));
+                } else {
+                  graphic.partialClipRect = renderer.clipRect(
+                    clipRectArgs.x,
+                    clipRectArgs.y,
+                    clipRectArgs.width,
+                    clipRectArgs.height
+                  );
+                  graphic.partRect = renderer[type](partShapeArgs)
+                    .addClass("highcharts-partfill-overlay")
+                    .add(graphic)
+                    .clip(graphic.partialClipRect);
+                }
+              }
+              // Presentational
+              if (!series.chart.styledMode) {
+                graphic.rect[verb](pointAttr, animation).shadow(
+                  seriesOpts.shadow,
+                  null,
+                  cutOff
+                );
+                if (partShapeArgs) {
+                  // Ensure pfOptions is an object
+                  if (!isObject(pfOptions)) {
+                    pfOptions = {};
+                  }
+                  if (isObject(seriesOpts.partialFill)) {
+                    pfOptions = merge(seriesOpts.partialFill, pfOptions);
+                  }
+                  fill =
+                    pfOptions.fill ||
+                    color(pointAttr.fill).brighten(-0.3).get() ||
+                    color(point.color || series.color)
+                      .brighten(-0.3)
+                      .get();
+                  pointAttr.fill = fill;
+                  graphic.partRect[pointStateVerb](pointAttr, animation).shadow(
+                    seriesOpts.shadow,
+                    null,
+                    cutOff
+                  );
+                }
+              }
+            } else if (graphic) {
+              point.graphic = graphic.destroy(); // #1269
+            }
+          },
+          /**
+           * @private
+           * @function Highcharts.Series#drawPoints
+           */
+          drawPoints: function () {
+            var series = this,
+              verb = series.getAnimationVerb();
+            // Draw the columns
+            series.points.forEach(function (point) {
+              series.drawPoint(point, verb);
+            });
+          },
+          /**
+           * Returns "animate", or "attr" if the number of points is above the
+           * animation limit.
+           *
+           * @private
+           * @function Highcharts.Series#getAnimationVerb
+           *
+           * @return {string}
+           */
+          getAnimationVerb: function () {
+            return this.chart.pointCount < (this.options.animationLimit || 250)
+              ? "animate"
+              : "attr";
+          },
+          /*
+            // Override to remove stroke from points. For partial fill.
+            pointAttribs: function () {
+                var series = this,
+                        retVal = columnType.prototype.pointAttribs
+                            .apply(series,
+                    arguments);
+
+                //retVal['stroke-width'] = 0;
+                return retVal;
+            }
+            //*/
+          /* eslint-enable valid-jsdoc */
+        },
+        {
+          /**
+           * The ending X value of the range point.
+           * @name Highcharts.Point#x2
+           * @type {number|undefined}
+           * @requires modules/xrange
+           */
+          /**
+           * Extend applyOptions so that `colorByPoint` for x-range means that one
+           * color is applied per Y axis category.
+           *
+           * @private
+           * @function Highcharts.Point#applyOptions
+           *
+           * @return {Highcharts.Series}
+           */
+          /* eslint-disable valid-jsdoc */
+          /**
+           * @private
+           */
+          resolveColor: function () {
+            var series = this.series,
+              colorByPoint;
+            if (series.options.colorByPoint && !this.options.color) {
+              colorByPoint = getColorByCategory(series, this);
+              if (!series.chart.styledMode) {
+                this.color = colorByPoint.color;
+              }
+              if (!this.options.colorIndex) {
+                this.colorIndex = colorByPoint.colorIndex;
+              }
+            } else if (!this.color) {
+              this.color = series.color;
+            }
+          },
+          /**
+           * Extend init to have y default to 0.
+           *
+           * @private
+           * @function Highcharts.Point#init
+           *
+           * @return {Highcharts.Point}
+           */
+          init: function () {
+            Point.prototype.init.apply(this, arguments);
+            if (!this.y) {
+              this.y = 0;
+            }
+            return this;
+          },
+          /**
+           * @private
+           * @function Highcharts.Point#setState
+           */
+          setState: function () {
+            Point.prototype.setState.apply(this, arguments);
+            this.series.drawPoint(this, this.series.getAnimationVerb());
+          },
+          /**
+           * @private
+           * @function Highcharts.Point#getLabelConfig
+           *
+           * @return {Highcharts.PointLabelObject}
+           */
+          // Add x2 and yCategory to the available properties for tooltip formats
+          getLabelConfig: function () {
+            var point = this,
+              cfg = Point.prototype.getLabelConfig.call(point),
+              yCats = point.series.yAxis.categories;
+            cfg.x2 = point.x2;
+            cfg.yCategory = point.yCategory = yCats && yCats[point.y];
+            return cfg;
+          },
+          tooltipDateKeys: ["x", "x2"],
+          /**
+           * @private
+           * @function Highcharts.Point#isValid
+           *
+           * @return {boolean}
+           */
+          isValid: function () {
+            return typeof this.x === "number" && typeof this.x2 === "number";
+          },
+          /* eslint-enable valid-jsdoc */
+        }
+      );
+      /**
+       * Max x2 should be considered in xAxis extremes
+       */
+      addEvent(Axis, "afterGetSeriesExtremes", function () {
+        var axis = this, // eslint-disable-line no-invalid-this
+          axisSeries = axis.series,
+          dataMax,
+          modMax;
+        if (axis.isXAxis) {
+          dataMax = pick(axis.dataMax, -Number.MAX_VALUE);
+          axisSeries.forEach(function (series) {
+            if (series.x2Data) {
+              series.x2Data.forEach(function (val) {
+                if (val > dataMax) {
+                  dataMax = val;
+                  modMax = true;
+                }
+              });
+            }
+          });
+          if (modMax) {
+            axis.dataMax = dataMax;
+          }
+        }
+      });
+      /**
+       * An `xrange` series. If the [type](#series.xrange.type) option is not
+       * specified, it is inherited from [chart.type](#chart.type).
+       *
+       * @extends   series,plotOptions.xrange
+       * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,
+       *            findNearestPointBy, getExtremesFromAll, negativeColor,
+       *            pointInterval, pointIntervalUnit, pointPlacement, pointRange,
+       *            pointStart, softThreshold, stacking, threshold, dataSorting,
+       *            boostBlending
+       * @product   highcharts highstock gantt
+       * @requires  modules/xrange
+       * @apioption series.xrange
+       */
+      /**
+       * An array of data points for the series. For the `xrange` series type,
+       * points can be given in the following ways:
+       *
+       * 1. An array of objects with named values. The objects are point configuration
+       *    objects as seen below.
+       *    ```js
+       *    data: [{
+       *        x: Date.UTC(2017, 0, 1),
+       *        x2: Date.UTC(2017, 0, 3),
+       *        name: "Test",
+       *        y: 0,
+       *        color: "#00FF00"
+       *    }, {
+       *        x: Date.UTC(2017, 0, 4),
+       *        x2: Date.UTC(2017, 0, 5),
+       *        name: "Deploy",
+       *        y: 1,
+       *        color: "#FF0000"
+       *    }]
+       *    ```
+       *
+       * @sample {highcharts} highcharts/series/data-array-of-objects/
+       *         Config objects
+       *
+       * @declare   Highcharts.XrangePointOptionsObject
+       * @type      {Array<*>}
+       * @extends   series.line.data
+       * @product   highcharts highstock gantt
+       * @apioption series.xrange.data
+       */
+      /**
+       * The starting X value of the range point.
+       *
+       * @sample {highcharts} highcharts/demo/x-range
+       *         X-range
+       *
+       * @type      {number}
+       * @product   highcharts highstock gantt
+       * @apioption series.xrange.data.x
+       */
+      /**
+       * The ending X value of the range point.
+       *
+       * @sample {highcharts} highcharts/demo/x-range
+       *         X-range
+       *
+       * @type      {number}
+       * @product   highcharts highstock gantt
+       * @apioption series.xrange.data.x2
+       */
+      /**
+       * The Y value of the range point.
+       *
+       * @sample {highcharts} highcharts/demo/x-range
+       *         X-range
+       *
+       * @type      {number}
+       * @product   highcharts highstock gantt
+       * @apioption series.xrange.data.y
+       */
+      /**
+       * A partial fill for each point, typically used to visualize how much of
+       * a task is performed. The partial fill object can be set either on series
+       * or point level.
+       *
+       * @sample {highcharts} highcharts/demo/x-range
+       *         X-range with partial fill
+       *
+       * @declare   Highcharts.XrangePointPartialFillOptionsObject
+       * @product   highcharts highstock gantt
+       * @apioption series.xrange.data.partialFill
+       */
+      /**
+       * The amount of the X-range point to be filled. Values can be 0-1 and are
+       * converted to percentages in the default data label formatter.
+       *
+       * @type      {number}
+       * @product   highcharts highstock gantt
+       * @apioption series.xrange.data.partialFill.amount
+       */
+      /**
+       * The fill color to be used for partial fills. Defaults to a darker shade
+       * of the point color.
+       *
+       * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+       * @product   highcharts highstock gantt
+       * @apioption series.xrange.data.partialFill.fill
+       */
+      (""); // adds doclets above to transpiled file
+    }
+  );
+  _registerModule(
+    _modules,
+    "Series/GanttSeries.js",
+    [
+      _modules["Core/Series/Series.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (BaseSeries, H, O, U) {
+      /* *
+       *
+       *  (c) 2016-2020 Highsoft AS
+       *
+       *  Author: Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var dateFormat = O.dateFormat;
+      var isNumber = U.isNumber,
+        merge = U.merge,
+        pick = U.pick,
+        splat = U.splat;
+      var Series = H.Series,
+        seriesTypes = BaseSeries.seriesTypes,
+        parent = seriesTypes.xrange;
+      /**
+       * @private
+       * @class
+       * @name Highcharts.seriesTypes.gantt
+       *
+       * @augments Highcharts.Series
+       */
+      BaseSeries.seriesType(
+        "gantt",
+        "xrange",
+        /**
+         * A `gantt` series. If the [type](#series.gantt.type) option is not specified,
+         * it is inherited from [chart.type](#chart.type).
+         *
+         * @extends      plotOptions.xrange
+         * @product      gantt
+         * @requires     highcharts-gantt
+         * @optionparent plotOptions.gantt
+         */
+        {
+          // options - default options merged with parent
+          grouping: false,
+          dataLabels: {
+            enabled: true,
+          },
+          tooltip: {
+            headerFormat:
+              '<span style="font-size: 10px">{series.name}</span><br/>',
+            pointFormat: null,
+            pointFormatter: function () {
+              var point = this,
+                series = point.series,
+                tooltip = series.chart.tooltip,
+                xAxis = series.xAxis,
+                formats = series.tooltipOptions.dateTimeLabelFormats,
+                startOfWeek = xAxis.options.startOfWeek,
+                ttOptions = series.tooltipOptions,
+                format = ttOptions.xDateFormat,
+                start,
+                end,
+                milestone = point.options.milestone,
+                retVal = "<b>" + (point.name || point.yCategory) + "</b>";
+              if (ttOptions.pointFormat) {
+                return point.tooltipFormatter(ttOptions.pointFormat);
+              }
+              if (!format) {
+                format = splat(
+                  tooltip.getDateFormat(
+                    xAxis.closestPointRange,
+                    point.start,
+                    startOfWeek,
+                    formats
+                  )
+                )[0];
+              }
+              start = series.chart.time.dateFormat(format, point.start);
+              end = series.chart.time.dateFormat(format, point.end);
+              retVal += "<br/>";
+              if (!milestone) {
+                retVal += "Start: " + start + "<br/>";
+                retVal += "End: " + end + "<br/>";
+              } else {
+                retVal += start + "<br/>";
+              }
+              return retVal;
             },
+          },
+          connectors: {
+            type: "simpleConnect",
             /**
-             * Utility to get the angle from one point to another.
-             *
-             * @private
-             * @function Highcharts.Point#getRadiansToVector
-             *
-             * @param {Highcharts.PositionObject} v1
-             *        The first vector, as an object with x/y properties.
-             *
-             * @param {Highcharts.PositionObject} v2
-             *        The second vector, as an object with x/y properties.
-             *
-             * @return {number}
-             *         The angle in degrees
+             * @declare Highcharts.ConnectorsAnimationOptionsObject
              */
-            getRadiansToVector: function (v1, v2) {
-                var box;
-                if (!defined(v2)) {
-                    box = getPointBB(this);
-                    if (box) {
-                        v2 = {
-                            x: (box.xMin + box.xMax) / 2,
-                            y: (box.yMin + box.yMax) / 2
-                        };
-                    }
-                }
-                return Math.atan2(v2.y - v1.y, v1.x - v2.x);
+            animation: {
+              reversed: true, // Dependencies go from child to parent
+            },
+            startMarker: {
+              enabled: true,
+              symbol: "arrow-filled",
+              radius: 4,
+              fill: "#fa0",
+              align: "left",
             },
+            endMarker: {
+              enabled: false,
+              align: "right",
+            },
+          },
+        },
+        {
+          pointArrayMap: ["start", "end", "y"],
+          // Keyboard navigation, don't use nearest vertical mode
+          keyboardMoveVertical: false,
+          /* eslint-disable valid-jsdoc */
+          /**
+           * Handle milestones, as they have no x2.
+           * @private
+           */
+          translatePoint: function (point) {
+            var series = this,
+              shapeArgs,
+              size;
+            parent.prototype.translatePoint.call(series, point);
+            if (point.options.milestone) {
+              shapeArgs = point.shapeArgs;
+              size = shapeArgs.height;
+              point.shapeArgs = {
+                x: shapeArgs.x - size / 2,
+                y: shapeArgs.y,
+                width: size,
+                height: size,
+              };
+            }
+          },
+          /**
+           * Draws a single point in the series.
+           *
+           * This override draws the point as a diamond if point.options.milestone
+           * is true, and uses the original drawPoint() if it is false or not set.
+           *
+           * @requires highcharts-gantt
+           *
+           * @private
+           * @function Highcharts.seriesTypes.gantt#drawPoint
+           *
+           * @param {Highcharts.Point} point
+           *        An instance of Point in the series
+           *
+           * @param {"animate"|"attr"} verb
+           *        'animate' (animates changes) or 'attr' (sets options)
+           *
+           * @return {void}
+           */
+          drawPoint: function (point, verb) {
+            var series = this,
+              seriesOpts = series.options,
+              renderer = series.chart.renderer,
+              shapeArgs = point.shapeArgs,
+              plotY = point.plotY,
+              graphic = point.graphic,
+              state = point.selected && "select",
+              cutOff = seriesOpts.stacking && !seriesOpts.borderRadius,
+              diamondShape;
+            if (point.options.milestone) {
+              if (
+                isNumber(plotY) &&
+                point.y !== null &&
+                point.visible !== false
+              ) {
+                diamondShape = renderer.symbols.diamond(
+                  shapeArgs.x,
+                  shapeArgs.y,
+                  shapeArgs.width,
+                  shapeArgs.height
+                );
+                if (graphic) {
+                  graphic[verb]({
+                    d: diamondShape,
+                  });
+                } else {
+                  point.graphic = graphic = renderer
+                    .path(diamondShape)
+                    .addClass(point.getClassName(), true)
+                    .add(point.group || series.group);
+                }
+                // Presentational
+                if (!series.chart.styledMode) {
+                  point.graphic
+                    .attr(series.pointAttribs(point, state))
+                    .shadow(seriesOpts.shadow, null, cutOff);
+                }
+              } else if (graphic) {
+                point.graphic = graphic.destroy(); // #1269
+              }
+            } else {
+              parent.prototype.drawPoint.call(series, point, verb);
+            }
+          },
+          setData: Series.prototype.setData,
+          /**
+           * @private
+           */
+          setGanttPointAliases: function (options) {
             /**
-             * Utility to get the position of the marker, based on the path angle and
-             * the marker's radius.
-             *
+             * Add a value to options if the value exists.
              * @private
-             * @function Highcharts.Point#getMarkerVector
-             *
-             * @param {number} radians
-             *        The angle in radians from the point center to another vector.
-             *
-             * @param {number} markerRadius
-             *        The radius of the marker, to calculate the additional distance to
-             *        the center of the marker.
-             *
-             * @param {object} anchor
-             *        The anchor point of the path and marker as an object with x/y
-             *        properties.
-             *
-             * @return {object}
-             *         The marker vector as an object with x/y properties.
              */
-            getMarkerVector: function (radians, markerRadius, anchor) {
-                var twoPI = Math.PI * 2.0,
-                    theta = radians,
-                    bb = getPointBB(this),
-                    rectWidth = bb.xMax - bb.xMin,
-                    rectHeight = bb.yMax - bb.yMin,
-                    rAtan = Math.atan2(rectHeight,
-                    rectWidth),
-                    tanTheta = 1,
-                    leftOrRightRegion = false,
-                    rectHalfWidth = rectWidth / 2.0,
-                    rectHalfHeight = rectHeight / 2.0,
-                    rectHorizontalCenter = bb.xMin + rectHalfWidth,
-                    rectVerticalCenter = bb.yMin + rectHalfHeight,
-                    edgePoint = {
-                        x: rectHorizontalCenter,
-                        y: rectVerticalCenter
-                    },
-                    markerPoint = {},
-                    xFactor = 1,
-                    yFactor = 1;
-                while (theta < -Math.PI) {
-                    theta += twoPI;
-                }
-                while (theta > Math.PI) {
-                    theta -= twoPI;
-                }
-                tanTheta = Math.tan(theta);
-                if ((theta > -rAtan) && (theta <= rAtan)) {
-                    // Right side
-                    yFactor = -1;
-                    leftOrRightRegion = true;
-                }
-                else if (theta > rAtan && theta <= (Math.PI - rAtan)) {
-                    // Top side
-                    yFactor = -1;
-                }
-                else if (theta > (Math.PI - rAtan) || theta <= -(Math.PI - rAtan)) {
-                    // Left side
-                    xFactor = -1;
-                    leftOrRightRegion = true;
-                }
-                else {
-                    // Bottom side
-                    xFactor = -1;
-                }
-                // Correct the edgePoint according to the placement of the marker
-                if (leftOrRightRegion) {
-                    edgePoint.x += xFactor * (rectHalfWidth);
-                    edgePoint.y += yFactor * (rectHalfWidth) * tanTheta;
-                }
-                else {
-                    edgePoint.x += xFactor * (rectHeight / (2.0 * tanTheta));
-                    edgePoint.y += yFactor * (rectHalfHeight);
-                }
-                if (anchor.x !== rectHorizontalCenter) {
-                    edgePoint.x = anchor.x;
-                }
-                if (anchor.y !== rectVerticalCenter) {
-                    edgePoint.y = anchor.y;
-                }
-                markerPoint.x = edgePoint.x + (markerRadius * Math.cos(theta));
-                markerPoint.y = edgePoint.y - (markerRadius * Math.sin(theta));
-                return markerPoint;
+            function addIfExists(prop, val) {
+              if (typeof val !== "undefined") {
+                options[prop] = val;
+              }
+            }
+            addIfExists("x", pick(options.start, options.x));
+            addIfExists("x2", pick(options.end, options.x2));
+            addIfExists(
+              "partialFill",
+              pick(options.completed, options.partialFill)
+            );
+          },
+          /* eslint-enable valid-jsdoc */
+        },
+        merge(parent.prototype.pointClass.prototype, {
+          // pointProps - point member overrides. We inherit from parent as well.
+          /* eslint-disable valid-jsdoc */
+          /**
+           * Applies the options containing the x and y data and possible some
+           * extra properties. This is called on point init or from point.update.
+           *
+           * @private
+           * @function Highcharts.Point#applyOptions
+           *
+           * @param {object} options
+           *        The point options
+           *
+           * @param {number} x
+           *        The x value
+           *
+           * @return {Highcharts.Point}
+           *         The Point instance
+           */
+          applyOptions: function (options, x) {
+            var point = this,
+              ganttPoint;
+            ganttPoint =
+              parent.prototype.pointClass.prototype.applyOptions.call(
+                point,
+                options,
+                x
+              );
+            H.seriesTypes.gantt.prototype.setGanttPointAliases(ganttPoint);
+            return ganttPoint;
+          },
+          isValid: function () {
+            return (
+              (typeof this.start === "number" || typeof this.x === "number") &&
+              (typeof this.end === "number" ||
+                typeof this.x2 === "number" ||
+                this.milestone)
+            );
+          },
+          /* eslint-enable valid-jsdoc */
+        })
+      );
+      /**
+       * A `gantt` series.
+       *
+       * @extends   series,plotOptions.gantt
+       * @excluding boostThreshold, connectors, dashStyle, findNearestPointBy,
+       *            getExtremesFromAll, marker, negativeColor, pointInterval,
+       *            pointIntervalUnit, pointPlacement, pointStart
+       * @product   gantt
+       * @requires  highcharts-gantt
+       * @apioption series.gantt
+       */
+      /**
+       * Data for a Gantt series.
+       *
+       * @declare   Highcharts.GanttPointOptionsObject
+       * @type      {Array<*>}
+       * @extends   series.xrange.data
+       * @excluding className, color, colorIndex, connect, dataLabels, events,
+       *            partialFill, selected, x, x2
+       * @product   gantt
+       * @apioption series.gantt.data
+       */
+      /**
+       * Whether the grid node belonging to this point should start as collapsed. Used
+       * in axes of type treegrid.
+       *
+       * @sample {gantt} gantt/treegrid-axis/collapsed/
+       *         Start as collapsed
+       *
+       * @type      {boolean}
+       * @default   false
+       * @product   gantt
+       * @apioption series.gantt.data.collapsed
+       */
+      /**
+       * The start time of a task.
+       *
+       * @type      {number}
+       * @product   gantt
+       * @apioption series.gantt.data.start
+       */
+      /**
+       * The end time of a task.
+       *
+       * @type      {number}
+       * @product   gantt
+       * @apioption series.gantt.data.end
+       */
+      /**
+       * The Y value of a task.
+       *
+       * @type      {number}
+       * @product   gantt
+       * @apioption series.gantt.data.y
+       */
+      /**
+       * The name of a task. If a `treegrid` y-axis is used (default in Gantt charts),
+       * this will be picked up automatically, and used to calculate the y-value.
+       *
+       * @type      {string}
+       * @product   gantt
+       * @apioption series.gantt.data.name
+       */
+      /**
+       * Progress indicator, how much of the task completed. If it is a number, the
+       * `fill` will be applied automatically.
+       *
+       * @sample {gantt} gantt/demo/progress-indicator
+       *         Progress indicator
+       *
+       * @type      {number|*}
+       * @extends   series.xrange.data.partialFill
+       * @product   gantt
+       * @apioption series.gantt.data.completed
+       */
+      /**
+       * The amount of the progress indicator, ranging from 0 (not started) to 1
+       * (finished).
+       *
+       * @type      {number}
+       * @default   0
+       * @apioption series.gantt.data.completed.amount
+       */
+      /**
+       * The fill of the progress indicator. Defaults to a darkened variety of the
+       * main color.
+       *
+       * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+       * @apioption series.gantt.data.completed.fill
+       */
+      /**
+       * The ID of the point (task) that this point depends on in Gantt charts.
+       * Aliases [connect](series.xrange.data.connect). Can also be an object,
+       * specifying further connecting [options](series.gantt.connectors) between the
+       * points. Multiple connections can be specified by providing an array.
+       *
+       * @sample gantt/demo/project-management
+       *         Dependencies
+       * @sample gantt/pathfinder/demo
+       *         Different connection types
+       *
+       * @type      {string|Array<string|*>|*}
+       * @extends   series.xrange.data.connect
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption series.gantt.data.dependency
+       */
+      /**
+       * Whether this point is a milestone. If so, only the `start` option is handled,
+       * while `end` is ignored.
+       *
+       * @sample gantt/gantt/milestones
+       *         Milestones
+       *
+       * @type      {boolean}
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption series.gantt.data.milestone
+       */
+      /**
+       * The ID of the parent point (task) of this point in Gantt charts.
+       *
+       * @sample gantt/demo/subtasks
+       *         Gantt chart with subtasks
+       *
+       * @type      {string}
+       * @since     6.2.0
+       * @product   gantt
+       * @apioption series.gantt.data.parent
+       */
+      /**
+       * @excluding afterAnimate
+       * @apioption series.gantt.events
+       */
+      (""); // adds doclets above to the transpiled file
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Chart/GanttChart.js",
+    [
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Chart, H, U) {
+      /* *
+       *
+       *  (c) 2016-2020 Highsoft AS
+       *
+       *  Author: Lars A. V. Cabrera
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var getOptions = U.getOptions,
+        isArray = U.isArray,
+        merge = U.merge,
+        splat = U.splat;
+      /**
+       * Factory function for Gantt charts.
+       *
+       * @example
+       * // Render a chart in to div#container
+       * var chart = Highcharts.ganttChart('container', {
+       *     title: {
+       *         text: 'My chart'
+       *     },
+       *     series: [{
+       *         data: ...
+       *     }]
+       * });
+       *
+       * @function Highcharts.ganttChart
+       *
+       * @param {string|Highcharts.HTMLDOMElement} renderTo
+       *        The DOM element to render to, or its id.
+       *
+       * @param {Highcharts.Options} options
+       *        The chart options structure.
+       *
+       * @param {Highcharts.ChartCallbackFunction} [callback]
+       *        Function to run when the chart has loaded and and all external images
+       *        are loaded. Defining a
+       *        [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)
+       *        handler is equivalent.
+       *
+       * @return {Highcharts.Chart}
+       *         Returns the Chart object.
+       */
+      H.ganttChart = function (renderTo, options, callback) {
+        var hasRenderToArg = typeof renderTo === "string" || renderTo.nodeName,
+          seriesOptions = options.series,
+          defaultOptions = getOptions(),
+          defaultLinkedTo,
+          userOptions = options;
+        options = arguments[hasRenderToArg ? 1 : 0];
+        // If user hasn't defined axes as array, make it into an array and add a
+        // second axis by default.
+        if (!isArray(options.xAxis)) {
+          options.xAxis = [options.xAxis || {}, {}];
+        }
+        // apply X axis options to both single and multi x axes
+        options.xAxis = options.xAxis.map(function (xAxisOptions, i) {
+          if (i === 1) {
+            // Second xAxis
+            defaultLinkedTo = 0;
+          }
+          return merge(
+            defaultOptions.xAxis,
+            {
+              grid: {
+                enabled: true,
+              },
+              opposite: true,
+              linkedTo: defaultLinkedTo,
+            },
+            xAxisOptions, // user options
+            {
+              type: "datetime",
             }
+          );
+        });
+        // apply Y axis options to both single and multi y axes
+        options.yAxis = splat(options.yAxis || {}).map(function (yAxisOptions) {
+          return merge(
+            defaultOptions.yAxis, // #3802
+            {
+              grid: {
+                enabled: true,
+              },
+              staticScale: 50,
+              reversed: true,
+              // Set default type treegrid, but only if 'categories' is
+              // undefined
+              type: yAxisOptions.categories ? yAxisOptions.type : "treegrid",
+            },
+            yAxisOptions // user options
+          );
         });
+        options.series = null;
+        options = merge(
+          true,
+          {
+            chart: {
+              type: "gantt",
+            },
+            title: {
+              text: null,
+            },
+            legend: {
+              enabled: false,
+            },
+            navigator: {
+              series: { type: "gantt" },
+              // Bars were clipped, #14060.
+              yAxis: {
+                type: "category",
+              },
+            },
+          },
+          options, // user's options
+          // forced options
+          {
+            isGantt: true,
+          }
+        );
+        options.series = userOptions.series = seriesOptions;
+        return hasRenderToArg
+          ? new Chart(renderTo, options, callback)
+          : new Chart(options, options); // @todo does not look correct
+      };
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/ScrollbarAxis.js",
+    [_modules["Core/Globals.js"], _modules["Core/Utilities.js"]],
+    function (H, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        pick = U.pick;
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * Creates scrollbars if enabled.
+       *
+       * @private
+       */
+      var ScrollbarAxis = /** @class */ (function () {
+        function ScrollbarAxis() {}
         /**
-         * Warn if using legacy options. Copy the options over. Note that this will
-         * still break if using the legacy options in chart.update, addSeries etc.
+         * Attaches to axis events to create scrollbars if enabled.
+         *
          * @private
+         *
+         * @param AxisClass
+         * Axis class to extend.
+         *
+         * @param ScrollbarClass
+         * Scrollbar class to use.
          */
-        function warnLegacy(chart) {
-            if (chart.options.pathfinder ||
-                chart.series.reduce(function (acc, series) {
-                    if (series.options) {
-                        merge(true, (series.options.connectors = series.options.connectors ||
-                            {}), series.options.pathfinder);
-                    }
-                    return acc || series.options && series.options.pathfinder;
-                }, false)) {
-                merge(true, (chart.options.connectors = chart.options.connectors || {}), chart.options.pathfinder);
-                error('WARNING: Pathfinder options have been renamed. ' +
-                    'Use "chart.connectors" or "series.connectors" instead.');
+        ScrollbarAxis.compose = function (AxisClass, ScrollbarClass) {
+          // Wrap axis initialization and create scrollbar if enabled:
+          addEvent(AxisClass, "afterInit", function () {
+            var axis = this;
+            if (
+              axis.options &&
+              axis.options.scrollbar &&
+              axis.options.scrollbar.enabled
+            ) {
+              // Predefined options:
+              axis.options.scrollbar.vertical = !axis.horiz;
+              axis.options.startOnTick = axis.options.endOnTick = false;
+              axis.scrollbar = new ScrollbarClass(
+                axis.chart.renderer,
+                axis.options.scrollbar,
+                axis.chart
+              );
+              addEvent(axis.scrollbar, "changed", function (e) {
+                var axisMin = pick(axis.options && axis.options.min, axis.min),
+                  axisMax = pick(axis.options && axis.options.max, axis.max),
+                  unitedMin = defined(axis.dataMin)
+                    ? Math.min(axisMin, axis.min, axis.dataMin)
+                    : axisMin,
+                  unitedMax = defined(axis.dataMax)
+                    ? Math.max(axisMax, axis.max, axis.dataMax)
+                    : axisMax,
+                  range = unitedMax - unitedMin,
+                  to,
+                  from;
+                // #12834, scroll when show/hide series, wrong extremes
+                if (!defined(axisMin) || !defined(axisMax)) {
+                  return;
+                }
+                if (
+                  (axis.horiz && !axis.reversed) ||
+                  (!axis.horiz && axis.reversed)
+                ) {
+                  to = unitedMin + range * this.to;
+                  from = unitedMin + range * this.from;
+                } else {
+                  // y-values in browser are reversed, but this also
+                  // applies for reversed horizontal axis:
+                  to = unitedMin + range * (1 - this.from);
+                  from = unitedMin + range * (1 - this.to);
+                }
+                if (
+                  pick(
+                    this.options.liveRedraw,
+                    H.svg && !H.isTouchDevice && !this.chart.isBoosting
+                  ) ||
+                  // Mouseup always should change extremes
+                  e.DOMType === "mouseup" ||
+                  // Internal events
+                  !defined(e.DOMType)
+                ) {
+                  axis.setExtremes(
+                    from,
+                    to,
+                    true,
+                    e.DOMType !== "mousemove",
+                    e
+                  );
+                } else {
+                  // When live redraw is disabled, don't change extremes
+                  // Only change the position of the scollbar thumb
+                  this.setRange(this.from, this.to);
+                }
+              });
             }
-        }
+          });
+          // Wrap rendering axis, and update scrollbar if one is created:
+          addEvent(AxisClass, "afterRender", function () {
+            var axis = this,
+              scrollMin = Math.min(
+                pick(axis.options.min, axis.min),
+                axis.min,
+                pick(axis.dataMin, axis.min) // #6930
+              ),
+              scrollMax = Math.max(
+                pick(axis.options.max, axis.max),
+                axis.max,
+                pick(axis.dataMax, axis.max) // #6930
+              ),
+              scrollbar = axis.scrollbar,
+              offset = axis.axisTitleMargin + (axis.titleOffset || 0),
+              scrollbarsOffsets = axis.chart.scrollbarsOffsets,
+              axisMargin = axis.options.margin || 0,
+              offsetsIndex,
+              from,
+              to;
+            if (scrollbar) {
+              if (axis.horiz) {
+                // Reserve space for labels/title
+                if (!axis.opposite) {
+                  scrollbarsOffsets[1] += offset;
+                }
+                scrollbar.position(
+                  axis.left,
+                  axis.top +
+                    axis.height +
+                    2 +
+                    scrollbarsOffsets[1] -
+                    (axis.opposite ? axisMargin : 0),
+                  axis.width,
+                  axis.height
+                );
+                // Next scrollbar should reserve space for margin (if set)
+                if (!axis.opposite) {
+                  scrollbarsOffsets[1] += axisMargin;
+                }
+                offsetsIndex = 1;
+              } else {
+                // Reserve space for labels/title
+                if (axis.opposite) {
+                  scrollbarsOffsets[0] += offset;
+                }
+                scrollbar.position(
+                  axis.left +
+                    axis.width +
+                    2 +
+                    scrollbarsOffsets[0] -
+                    (axis.opposite ? 0 : axisMargin),
+                  axis.top,
+                  axis.width,
+                  axis.height
+                );
+                // Next scrollbar should reserve space for margin (if set)
+                if (axis.opposite) {
+                  scrollbarsOffsets[0] += axisMargin;
+                }
+                offsetsIndex = 0;
+              }
+              scrollbarsOffsets[offsetsIndex] +=
+                scrollbar.size + scrollbar.options.margin;
+              if (
+                isNaN(scrollMin) ||
+                isNaN(scrollMax) ||
+                !defined(axis.min) ||
+                !defined(axis.max) ||
+                axis.min === axis.max // #10733
+              ) {
+                // default action: when extremes are the same or there is
+                // not extremes on the axis, but scrollbar exists, make it
+                // full size
+                scrollbar.setRange(0, 1);
+              } else {
+                from = (axis.min - scrollMin) / (scrollMax - scrollMin);
+                to = (axis.max - scrollMin) / (scrollMax - scrollMin);
+                if (
+                  (axis.horiz && !axis.reversed) ||
+                  (!axis.horiz && axis.reversed)
+                ) {
+                  scrollbar.setRange(from, to);
+                } else {
+                  // inverse vertical axis
+                  scrollbar.setRange(1 - to, 1 - from);
+                }
+              }
+            }
+          });
+          // Make space for a scrollbar:
+          addEvent(AxisClass, "afterGetOffset", function () {
+            var axis = this,
+              index = axis.horiz ? 2 : 1,
+              scrollbar = axis.scrollbar;
+            if (scrollbar) {
+              axis.chart.scrollbarsOffsets = [0, 0]; // reset scrollbars offsets
+              axis.chart.axisOffset[index] +=
+                scrollbar.size + scrollbar.options.margin;
+            }
+          });
+        };
+        return ScrollbarAxis;
+      })();
 
-        return Connection;
-    });
-    _registerModule(_modules, 'Gantt/PathfinderAlgorithms.js', [_modules['Core/Utilities.js']], function (U) {
+      return ScrollbarAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Scrollbar.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Axis/ScrollbarAxis.js"],
+      _modules["Core/Utilities.js"],
+      _modules["Core/Options.js"],
+    ],
+    function (Axis, H, ScrollbarAxis, U, O) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        destroyObjectProperties = U.destroyObjectProperties,
+        fireEvent = U.fireEvent,
+        merge = U.merge,
+        pick = U.pick,
+        removeEvent = U.removeEvent;
+      var defaultOptions = O.defaultOptions;
+      var hasTouch = H.hasTouch,
+        isTouchDevice = H.isTouchDevice;
+      /**
+       * When we have vertical scrollbar, rifles and arrow in buttons should be
+       * rotated. The same method is used in Navigator's handles, to rotate them.
+       *
+       * @function Highcharts.swapXY
+       *
+       * @param {Highcharts.SVGPathArray} path
+       * Path to be rotated.
+       *
+       * @param {boolean} [vertical]
+       * If vertical scrollbar, swap x-y values.
+       *
+       * @return {Highcharts.SVGPathArray}
+       * Rotated path.
+       *
+       * @requires modules/stock
+       */
+      var swapXY = (H.swapXY = function (path, vertical) {
+        if (vertical) {
+          path.forEach(function (seg) {
+            var len = seg.length;
+            var temp;
+            for (var i = 0; i < len; i += 2) {
+              temp = seg[i + 1];
+              if (typeof temp === "number") {
+                seg[i + 1] = seg[i + 2];
+                seg[i + 2] = temp;
+              }
+            }
+          });
+        }
+        return path;
+      });
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * A reusable scrollbar, internally used in Highstock's navigator and optionally
+       * on individual axes.
+       *
+       * @private
+       * @class
+       * @name Highcharts.Scrollbar
+       * @param {Highcharts.SVGRenderer} renderer
+       * @param {Highcharts.ScrollbarOptions} options
+       * @param {Highcharts.Chart} chart
+       */
+      var Scrollbar = /** @class */ (function () {
         /* *
          *
-         *  (c) 2016 Highsoft AS
-         *  Author: Øystein Moseng
+         *  Constructors
          *
-         *  License: www.highcharts.com/license
+         * */
+        function Scrollbar(renderer, options, chart) {
+          /* *
+           *
+           *  Properties
+           *
+           * */
+          this._events = [];
+          this.chartX = 0;
+          this.chartY = 0;
+          this.from = 0;
+          this.group = void 0;
+          this.scrollbar = void 0;
+          this.scrollbarButtons = [];
+          this.scrollbarGroup = void 0;
+          this.scrollbarLeft = 0;
+          this.scrollbarRifles = void 0;
+          this.scrollbarStrokeWidth = 1;
+          this.scrollbarTop = 0;
+          this.size = 0;
+          this.to = 0;
+          this.track = void 0;
+          this.trackBorderWidth = 1;
+          this.userOptions = {};
+          this.x = 0;
+          this.y = 0;
+          this.chart = chart;
+          this.options = options;
+          this.renderer = chart.renderer;
+          this.init(renderer, options, chart);
+        }
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Functions
          *
          * */
-        var extend = U.extend,
-            pick = U.pick;
-        var min = Math.min,
-            max = Math.max,
-            abs = Math.abs;
         /**
-         * Get index of last obstacle before xMin. Employs a type of binary search, and
-         * thus requires that obstacles are sorted by xMin value.
+         * Set up the mouse and touch events for the Scrollbar
          *
          * @private
-         * @function findLastObstacleBefore
-         *
-         * @param {Array<object>} obstacles
-         *        Array of obstacles to search in.
-         *
-         * @param {number} xMin
-         *        The xMin threshold.
-         *
-         * @param {number} [startIx]
-         *        Starting index to search from. Must be within array range.
-         *
-         * @return {number}
-         *         The index of the last obstacle element before xMin.
+         * @function Highcharts.Scrollbar#addEvents
+         * @return {void}
          */
-        function findLastObstacleBefore(obstacles, xMin, startIx) {
-            var left = startIx || 0, // left limit
-                right = obstacles.length - 1, // right limit
-                min = xMin - 0.0000001, // Make sure we include all obstacles at xMin
-                cursor,
-                cmp;
-            while (left <= right) {
-                cursor = (right + left) >> 1;
-                cmp = min - obstacles[cursor].xMin;
-                if (cmp > 0) {
-                    left = cursor + 1;
-                }
-                else if (cmp < 0) {
-                    right = cursor - 1;
-                }
-                else {
-                    return cursor;
-                }
-            }
-            return left > 0 ? left - 1 : 0;
-        }
+        Scrollbar.prototype.addEvents = function () {
+          var buttonsOrder = this.options.inverted ? [1, 0] : [0, 1],
+            buttons = this.scrollbarButtons,
+            bar = this.scrollbarGroup.element,
+            track = this.track.element,
+            mouseDownHandler = this.mouseDownHandler.bind(this),
+            mouseMoveHandler = this.mouseMoveHandler.bind(this),
+            mouseUpHandler = this.mouseUpHandler.bind(this),
+            _events;
+          // Mouse events
+          _events = [
+            [
+              buttons[buttonsOrder[0]].element,
+              "click",
+              this.buttonToMinClick.bind(this),
+            ],
+            [
+              buttons[buttonsOrder[1]].element,
+              "click",
+              this.buttonToMaxClick.bind(this),
+            ],
+            [track, "click", this.trackClick.bind(this)],
+            [bar, "mousedown", mouseDownHandler],
+            [bar.ownerDocument, "mousemove", mouseMoveHandler],
+            [bar.ownerDocument, "mouseup", mouseUpHandler],
+          ];
+          // Touch events
+          if (hasTouch) {
+            _events.push(
+              [bar, "touchstart", mouseDownHandler],
+              [bar.ownerDocument, "touchmove", mouseMoveHandler],
+              [bar.ownerDocument, "touchend", mouseUpHandler]
+            );
+          }
+          // Add them all
+          _events.forEach(function (args) {
+            addEvent.apply(null, args);
+          });
+          this._events = _events;
+        };
+        Scrollbar.prototype.buttonToMaxClick = function (e) {
+          var scroller = this;
+          var range =
+            (scroller.to - scroller.from) * pick(scroller.options.step, 0.2);
+          scroller.updatePosition(scroller.from + range, scroller.to + range);
+          fireEvent(scroller, "changed", {
+            from: scroller.from,
+            to: scroller.to,
+            trigger: "scrollbar",
+            DOMEvent: e,
+          });
+        };
+        Scrollbar.prototype.buttonToMinClick = function (e) {
+          var scroller = this;
+          var range =
+            correctFloat(scroller.to - scroller.from) *
+            pick(scroller.options.step, 0.2);
+          scroller.updatePosition(
+            correctFloat(scroller.from - range),
+            correctFloat(scroller.to - range)
+          );
+          fireEvent(scroller, "changed", {
+            from: scroller.from,
+            to: scroller.to,
+            trigger: "scrollbar",
+            DOMEvent: e,
+          });
+        };
         /**
-         * Test if a point lays within an obstacle.
+         * Get normalized (0-1) cursor position over the scrollbar
          *
          * @private
-         * @function pointWithinObstacle
-         *
-         * @param {object} obstacle
-         *        Obstacle to test.
+         * @function Highcharts.Scrollbar#cursorToScrollbarPosition
          *
-         * @param {Highcharts.Point} point
-         *        Point with x/y props.
+         * @param  {*} normalizedEvent
+         *         normalized event, with chartX and chartY values
          *
-         * @return {boolean}
-         *         Whether point is within the obstacle or not.
+         * @return {Highcharts.Dictionary<number>}
+         *         Local position {chartX, chartY}
          */
-        function pointWithinObstacle(obstacle, point) {
-            return (point.x <= obstacle.xMax &&
-                point.x >= obstacle.xMin &&
-                point.y <= obstacle.yMax &&
-                point.y >= obstacle.yMin);
-        }
+        Scrollbar.prototype.cursorToScrollbarPosition = function (
+          normalizedEvent
+        ) {
+          var scroller = this,
+            options = scroller.options,
+            minWidthDifference =
+              options.minWidth > scroller.calculatedWidth
+                ? options.minWidth
+                : 0; // minWidth distorts translation
+          return {
+            chartX:
+              (normalizedEvent.chartX - scroller.x - scroller.xOffset) /
+              (scroller.barWidth - minWidthDifference),
+            chartY:
+              (normalizedEvent.chartY - scroller.y - scroller.yOffset) /
+              (scroller.barWidth - minWidthDifference),
+          };
+        };
         /**
-         * Find the index of an obstacle that wraps around a point.
-         * Returns -1 if not found.
+         * Destroys allocated elements.
          *
          * @private
-         * @function findObstacleFromPoint
-         *
-         * @param {Array<object>} obstacles
-         *        Obstacles to test.
-         *
-         * @param {Highcharts.Point} point
-         *        Point with x/y props.
-         *
-         * @return {number}
-         *         Ix of the obstacle in the array, or -1 if not found.
+         * @function Highcharts.Scrollbar#destroy
+         * @return {void}
          */
-        function findObstacleFromPoint(obstacles, point) {
-            var i = findLastObstacleBefore(obstacles,
-                point.x + 1) + 1;
-            while (i--) {
-                if (obstacles[i].xMax >= point.x &&
-                    // optimization using lazy evaluation
-                    pointWithinObstacle(obstacles[i], point)) {
-                    return i;
-                }
+        Scrollbar.prototype.destroy = function () {
+          var scroller = this.chart.scroller;
+          // Disconnect events added in addEvents
+          this.removeEvents();
+          // Destroy properties
+          [
+            "track",
+            "scrollbarRifles",
+            "scrollbar",
+            "scrollbarGroup",
+            "group",
+          ].forEach(function (prop) {
+            if (this[prop] && this[prop].destroy) {
+              this[prop] = this[prop].destroy();
             }
-            return -1;
-        }
+          }, this);
+          // #6421, chart may have more scrollbars
+          if (scroller && this === scroller.scrollbar) {
+            scroller.scrollbar = null;
+            // Destroy elements in collection
+            destroyObjectProperties(scroller.scrollbarButtons);
+          }
+        };
         /**
-         * Get SVG path array from array of line segments.
+         * Draw the scrollbar buttons with arrows
          *
          * @private
-         * @function pathFromSegments
-         *
-         * @param {Array<object>} segments
-         *        The segments to build the path from.
-         *
-         * @return {Highcharts.SVGPathArray}
-         *         SVG path array as accepted by the SVG Renderer.
+         * @function Highcharts.Scrollbar#drawScrollbarButton
+         * @param {number} index
+         *        0 is left, 1 is right
+         * @return {void}
          */
-        function pathFromSegments(segments) {
-            var path = [];
-            if (segments.length) {
-                path.push(['M', segments[0].start.x, segments[0].start.y]);
-                for (var i = 0; i < segments.length; ++i) {
-                    path.push(['L', segments[i].end.x, segments[i].end.y]);
-                }
+        Scrollbar.prototype.drawScrollbarButton = function (index) {
+          var scroller = this,
+            renderer = scroller.renderer,
+            scrollbarButtons = scroller.scrollbarButtons,
+            options = scroller.options,
+            size = scroller.size,
+            group,
+            tempElem;
+          group = renderer.g().add(scroller.group);
+          scrollbarButtons.push(group);
+          // Create a rectangle for the scrollbar button
+          tempElem = renderer
+            .rect()
+            .addClass("highcharts-scrollbar-button")
+            .add(group);
+          // Presentational attributes
+          if (!this.chart.styledMode) {
+            tempElem.attr({
+              stroke: options.buttonBorderColor,
+              "stroke-width": options.buttonBorderWidth,
+              fill: options.buttonBackgroundColor,
+            });
+          }
+          // Place the rectangle based on the rendered stroke width
+          tempElem.attr(
+            tempElem.crisp(
+              {
+                x: -0.5,
+                y: -0.5,
+                width: size + 1,
+                height: size + 1,
+                r: options.buttonBorderRadius,
+              },
+              tempElem.strokeWidth()
+            )
+          );
+          // Button arrow
+          tempElem = renderer
+            .path(
+              swapXY(
+                [
+                  ["M", size / 2 + (index ? -1 : 1), size / 2 - 3],
+                  ["L", size / 2 + (index ? -1 : 1), size / 2 + 3],
+                  ["L", size / 2 + (index ? 2 : -2), size / 2],
+                ],
+                options.vertical
+              )
+            )
+            .addClass("highcharts-scrollbar-arrow")
+            .add(scrollbarButtons[index]);
+          if (!this.chart.styledMode) {
+            tempElem.attr({
+              fill: options.buttonArrowColor,
+            });
+          }
+        };
+        /**
+         * @private
+         * @function Highcharts.Scrollbar#init
+         * @param {Highcharts.SVGRenderer} renderer
+         * @param {Highcharts.ScrollbarOptions} options
+         * @param {Highcharts.Chart} chart
+         */
+        Scrollbar.prototype.init = function (renderer, options, chart) {
+          this.scrollbarButtons = [];
+          this.renderer = renderer;
+          this.userOptions = options;
+          this.options = merge(Scrollbar.defaultOptions, options);
+          this.chart = chart;
+          // backward compatibility
+          this.size = pick(this.options.size, this.options.height);
+          // Init
+          if (options.enabled) {
+            this.render();
+            this.addEvents();
+          }
+        };
+        Scrollbar.prototype.mouseDownHandler = function (e) {
+          var scroller = this;
+          var normalizedEvent = scroller.chart.pointer.normalize(e),
+            mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);
+          scroller.chartX = mousePosition.chartX;
+          scroller.chartY = mousePosition.chartY;
+          scroller.initPositions = [scroller.from, scroller.to];
+          scroller.grabbedCenter = true;
+        };
+        /**
+         * Event handler for the mouse move event.
+         * @private
+         */
+        Scrollbar.prototype.mouseMoveHandler = function (e) {
+          var scroller = this;
+          var normalizedEvent = scroller.chart.pointer.normalize(e),
+            options = scroller.options,
+            direction = options.vertical ? "chartY" : "chartX",
+            initPositions = scroller.initPositions || [],
+            scrollPosition,
+            chartPosition,
+            change;
+          // In iOS, a mousemove event with e.pageX === 0 is fired when
+          // holding the finger down in the center of the scrollbar. This
+          // should be ignored.
+          if (
+            scroller.grabbedCenter &&
+            // #4696, scrollbar failed on Android
+            (!e.touches || e.touches[0][direction] !== 0)
+          ) {
+            chartPosition =
+              scroller.cursorToScrollbarPosition(normalizedEvent)[direction];
+            scrollPosition = scroller[direction];
+            change = chartPosition - scrollPosition;
+            scroller.hasDragged = true;
+            scroller.updatePosition(
+              initPositions[0] + change,
+              initPositions[1] + change
+            );
+            if (scroller.hasDragged) {
+              fireEvent(scroller, "changed", {
+                from: scroller.from,
+                to: scroller.to,
+                trigger: "scrollbar",
+                DOMType: e.type,
+                DOMEvent: e,
+              });
             }
-            return path;
-        }
+          }
+        };
         /**
-         * Limits obstacle max/mins in all directions to bounds. Modifies input
-         * obstacle.
+         * Event handler for the mouse up event.
+         * @private
+         */
+        Scrollbar.prototype.mouseUpHandler = function (e) {
+          var scroller = this;
+          if (scroller.hasDragged) {
+            fireEvent(scroller, "changed", {
+              from: scroller.from,
+              to: scroller.to,
+              trigger: "scrollbar",
+              DOMType: e.type,
+              DOMEvent: e,
+            });
+          }
+          scroller.grabbedCenter =
+            scroller.hasDragged =
+            scroller.chartX =
+            scroller.chartY =
+              null;
+        };
+        /**
+         * Position the scrollbar, method called from a parent with defined
+         * dimensions.
          *
          * @private
-         * @function limitObstacleToBounds
+         * @function Highcharts.Scrollbar#position
+         * @param {number} x
+         *        x-position on the chart
+         * @param {number} y
+         *        y-position on the chart
+         * @param {number} width
+         *        width of the scrollbar
+         * @param {number} height
+         *        height of the scorllbar
+         * @return {void}
+         */
+        Scrollbar.prototype.position = function (x, y, width, height) {
+          var scroller = this,
+            options = scroller.options,
+            vertical = options.vertical,
+            xOffset = height,
+            yOffset = 0,
+            method = scroller.rendered ? "animate" : "attr";
+          scroller.x = x;
+          scroller.y = y + this.trackBorderWidth;
+          scroller.width = width; // width with buttons
+          scroller.height = height;
+          scroller.xOffset = xOffset;
+          scroller.yOffset = yOffset;
+          // If Scrollbar is a vertical type, swap options:
+          if (vertical) {
+            scroller.width = scroller.yOffset = width = yOffset = scroller.size;
+            scroller.xOffset = xOffset = 0;
+            scroller.barWidth = height - width * 2; // width without buttons
+            scroller.x = x = x + scroller.options.margin;
+          } else {
+            scroller.height =
+              scroller.xOffset =
+              height =
+              xOffset =
+                scroller.size;
+            scroller.barWidth = width - height * 2; // width without buttons
+            scroller.y = scroller.y + scroller.options.margin;
+          }
+          // Set general position for a group:
+          scroller.group[method]({
+            translateX: x,
+            translateY: scroller.y,
+          });
+          // Resize background/track:
+          scroller.track[method]({
+            width: width,
+            height: height,
+          });
+          // Move right/bottom button ot it's place:
+          scroller.scrollbarButtons[1][method]({
+            translateX: vertical ? 0 : width - xOffset,
+            translateY: vertical ? height - yOffset : 0,
+          });
+        };
+        /**
+         * Removes the event handlers attached previously with addEvents.
          *
-         * @param {object} obstacle
-         *        Obstacle to limit.
+         * @private
+         * @function Highcharts.Scrollbar#removeEvents
+         * @return {void}
+         */
+        Scrollbar.prototype.removeEvents = function () {
+          this._events.forEach(function (args) {
+            removeEvent.apply(null, args);
+          });
+          this._events.length = 0;
+        };
+        /**
+         * Render scrollbar with all required items.
          *
-         * @param {object} bounds
-         *        Bounds to use as limit.
+         * @private
+         * @function Highcharts.Scrollbar#render
+         */
+        Scrollbar.prototype.render = function () {
+          var scroller = this,
+            renderer = scroller.renderer,
+            options = scroller.options,
+            size = scroller.size,
+            styledMode = this.chart.styledMode,
+            group;
+          // Draw the scrollbar group
+          scroller.group = group = renderer
+            .g("scrollbar")
+            .attr({
+              zIndex: options.zIndex,
+              translateY: -99999,
+            })
+            .add();
+          // Draw the scrollbar track:
+          scroller.track = renderer
+            .rect()
+            .addClass("highcharts-scrollbar-track")
+            .attr({
+              x: 0,
+              r: options.trackBorderRadius || 0,
+              height: size,
+              width: size,
+            })
+            .add(group);
+          if (!styledMode) {
+            scroller.track.attr({
+              fill: options.trackBackgroundColor,
+              stroke: options.trackBorderColor,
+              "stroke-width": options.trackBorderWidth,
+            });
+          }
+          this.trackBorderWidth = scroller.track.strokeWidth();
+          scroller.track.attr({
+            y: (-this.trackBorderWidth % 2) / 2,
+          });
+          // Draw the scrollbar itself
+          scroller.scrollbarGroup = renderer.g().add(group);
+          scroller.scrollbar = renderer
+            .rect()
+            .addClass("highcharts-scrollbar-thumb")
+            .attr({
+              height: size,
+              width: size,
+              r: options.barBorderRadius || 0,
+            })
+            .add(scroller.scrollbarGroup);
+          scroller.scrollbarRifles = renderer
+            .path(
+              swapXY(
+                [
+                  ["M", -3, size / 4],
+                  ["L", -3, (2 * size) / 3],
+                  ["M", 0, size / 4],
+                  ["L", 0, (2 * size) / 3],
+                  ["M", 3, size / 4],
+                  ["L", 3, (2 * size) / 3],
+                ],
+                options.vertical
+              )
+            )
+            .addClass("highcharts-scrollbar-rifles")
+            .add(scroller.scrollbarGroup);
+          if (!styledMode) {
+            scroller.scrollbar.attr({
+              fill: options.barBackgroundColor,
+              stroke: options.barBorderColor,
+              "stroke-width": options.barBorderWidth,
+            });
+            scroller.scrollbarRifles.attr({
+              stroke: options.rifleColor,
+              "stroke-width": 1,
+            });
+          }
+          scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();
+          scroller.scrollbarGroup.translate(
+            (-scroller.scrollbarStrokeWidth % 2) / 2,
+            (-scroller.scrollbarStrokeWidth % 2) / 2
+          );
+          // Draw the buttons:
+          scroller.drawScrollbarButton(0);
+          scroller.drawScrollbarButton(1);
+        };
+        /**
+         * Set scrollbar size, with a given scale.
          *
+         * @private
+         * @function Highcharts.Scrollbar#setRange
+         * @param {number} from
+         *        scale (0-1) where bar should start
+         * @param {number} to
+         *        scale (0-1) where bar should end
          * @return {void}
          */
-        function limitObstacleToBounds(obstacle, bounds) {
-            obstacle.yMin = max(obstacle.yMin, bounds.yMin);
-            obstacle.yMax = min(obstacle.yMax, bounds.yMax);
-            obstacle.xMin = max(obstacle.xMin, bounds.xMin);
-            obstacle.xMax = min(obstacle.xMax, bounds.xMax);
-        }
+        Scrollbar.prototype.setRange = function (from, to) {
+          var scroller = this,
+            options = scroller.options,
+            vertical = options.vertical,
+            minWidth = options.minWidth,
+            fullWidth = scroller.barWidth,
+            fromPX,
+            toPX,
+            newPos,
+            newSize,
+            newRiflesPos,
+            method =
+              this.rendered &&
+              !this.hasDragged &&
+              !(this.chart.navigator && this.chart.navigator.hasDragged)
+                ? "animate"
+                : "attr";
+          if (!defined(fullWidth)) {
+            return;
+          }
+          from = Math.max(from, 0);
+          fromPX = Math.ceil(fullWidth * from);
+          toPX = fullWidth * Math.min(to, 1);
+          scroller.calculatedWidth = newSize = correctFloat(toPX - fromPX);
+          // We need to recalculate position, if minWidth is used
+          if (newSize < minWidth) {
+            fromPX = (fullWidth - minWidth + newSize) * from;
+            newSize = minWidth;
+          }
+          newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);
+          newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2
+          // Store current position:
+          scroller.from = from;
+          scroller.to = to;
+          if (!vertical) {
+            scroller.scrollbarGroup[method]({
+              translateX: newPos,
+            });
+            scroller.scrollbar[method]({
+              width: newSize,
+            });
+            scroller.scrollbarRifles[method]({
+              translateX: newRiflesPos,
+            });
+            scroller.scrollbarLeft = newPos;
+            scroller.scrollbarTop = 0;
+          } else {
+            scroller.scrollbarGroup[method]({
+              translateY: newPos,
+            });
+            scroller.scrollbar[method]({
+              height: newSize,
+            });
+            scroller.scrollbarRifles[method]({
+              translateY: newRiflesPos,
+            });
+            scroller.scrollbarTop = newPos;
+            scroller.scrollbarLeft = 0;
+          }
+          if (newSize <= 12) {
+            scroller.scrollbarRifles.hide();
+          } else {
+            scroller.scrollbarRifles.show(true);
+          }
+          // Show or hide the scrollbar based on the showFull setting
+          if (options.showFull === false) {
+            if (from <= 0 && to >= 1) {
+              scroller.group.hide();
+            } else {
+              scroller.group.show();
+            }
+          }
+          scroller.rendered = true;
+        };
+        Scrollbar.prototype.trackClick = function (e) {
+          var scroller = this;
+          var normalizedEvent = scroller.chart.pointer.normalize(e),
+            range = scroller.to - scroller.from,
+            top = scroller.y + scroller.scrollbarTop,
+            left = scroller.x + scroller.scrollbarLeft;
+          if (
+            (scroller.options.vertical && normalizedEvent.chartY > top) ||
+            (!scroller.options.vertical && normalizedEvent.chartX > left)
+          ) {
+            // On the top or on the left side of the track:
+            scroller.updatePosition(scroller.from + range, scroller.to + range);
+          } else {
+            // On the bottom or the right side of the track:
+            scroller.updatePosition(scroller.from - range, scroller.to - range);
+          }
+          fireEvent(scroller, "changed", {
+            from: scroller.from,
+            to: scroller.to,
+            trigger: "scrollbar",
+            DOMEvent: e,
+          });
+        };
         /**
-         * Get an SVG path from a starting coordinate to an ending coordinate.
-         * Draws a straight line.
+         * Update the scrollbar with new options
          *
-         * @function Highcharts.Pathfinder.algorithms.straight
+         * @private
+         * @function Highcharts.Scrollbar#update
+         * @param  {Highcharts.ScrollbarOptions} options
+         * @return {void}
+         */
+        Scrollbar.prototype.update = function (options) {
+          this.destroy();
+          this.init(
+            this.chart.renderer,
+            merge(true, this.options, options),
+            this.chart
+          );
+        };
+        /**
+         * Update position option in the Scrollbar, with normalized 0-1 scale
          *
-         * @param {Highcharts.PositionObject} start
-         *        Starting coordinate, object with x/y props.
+         * @private
+         * @function Highcharts.Scrollbar#updatePosition
+         * @param  {number} from
+         * @param  {number} to
+         * @return {void}
+         */
+        Scrollbar.prototype.updatePosition = function (from, to) {
+          if (to > 1) {
+            from = correctFloat(1 - correctFloat(to - from));
+            to = 1;
+          }
+          if (from < 0) {
+            to = correctFloat(to - from);
+            from = 0;
+          }
+          this.from = from;
+          this.to = to;
+        };
+        /* *
          *
-         * @param {Highcharts.PositionObject} end
-         *        Ending coordinate, object with x/y props.
+         *  Static Properties
          *
-         * @return {object}
-         *         An object with the SVG path in Array form as accepted by the SVG
-         *         renderer, as well as an array of new obstacles making up this
-         *         path.
-         */
-        function straight(start, end) {
-            return {
-                path: [
-                    ['M', start.x, start.y],
-                    ['L', end.x, end.y]
-                ],
-                obstacles: [{ start: start, end: end }]
-            };
-        }
+         * */
         /**
-         * Find a path from a starting coordinate to an ending coordinate, using
-         * right angles only, and taking only starting/ending obstacle into
-         * consideration.
          *
-         * @function Highcharts.Pathfinder.algorithms.simpleConnect
+         * The scrollbar is a means of panning over the X axis of a stock chart.
+         * Scrollbars can  also be applied to other types of axes.
          *
-         * @param {Highcharts.PositionObject} start
-         *        Starting coordinate, object with x/y props.
+         * Another approach to scrollable charts is the [chart.scrollablePlotArea](
+         * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that
+         * is especially suitable for simpler cartesian charts on mobile.
          *
-         * @param {Highcharts.PositionObject} end
-         *        Ending coordinate, object with x/y props.
+         * In styled mode, all the presentational options for the
+         * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,
+         * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,
+         * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.
          *
-         * @param {object} options
-         *        Options for the algorithm:
-         *        - chartObstacles: Array of chart obstacles to avoid
-         *        - startDirectionX: Optional. True if starting in the X direction.
-         *          If not provided, the algorithm starts in the direction that is
-         *          the furthest between start/end.
+         * @sample stock/yaxis/inverted-bar-scrollbar/
+         *         A scrollbar on a simple bar chart
          *
-         * @return {object}
-         *         An object with the SVG path in Array form as accepted by the SVG
-         *         renderer, as well as an array of new obstacles making up this
-         *         path.
+         * @product highstock gantt
+         * @optionparent scrollbar
+         *
+         * @private
          */
-        var simpleConnect = extend(function (start,
-            end,
-            options) {
-                var segments = [],
-            endSegment,
-            dir = pick(options.startDirectionX,
-            abs(end.x - start.x) > abs(end.y - start.y)) ? 'x' : 'y',
-            chartObstacles = options.chartObstacles,
-            startObstacleIx = findObstacleFromPoint(chartObstacles,
-            start),
-            endObstacleIx = findObstacleFromPoint(chartObstacles,
-            end),
-            startObstacle,
-            endObstacle,
-            prevWaypoint,
-            waypoint,
-            waypoint2,
-            useMax,
-            endPoint;
-            // eslint-disable-next-line valid-jsdoc
-            /**
-             * Return a clone of a point with a property set from a target object,
-             * optionally with an offset
-             * @private
-             */
-            function copyFromPoint(from, fromKey, to, toKey, offset) {
-                var point = {
-                        x: from.x,
-                        y: from.y
-                    };
-                point[fromKey] = to[toKey || fromKey] + (offset || 0);
-                return point;
-            }
-            // eslint-disable-next-line valid-jsdoc
-            /**
-             * Return waypoint outside obstacle.
-             * @private
-             */
-            function getMeOut(obstacle, point, direction) {
-                var useMax = abs(point[direction] - obstacle[direction + 'Min']) >
-                        abs(point[direction] - obstacle[direction + 'Max']);
-                return copyFromPoint(point, direction, obstacle, direction + (useMax ? 'Max' : 'Min'), useMax ? 1 : -1);
-            }
-            // Pull out end point
-            if (endObstacleIx > -1) {
-                endObstacle = chartObstacles[endObstacleIx];
-                waypoint = getMeOut(endObstacle, end, dir);
-                endSegment = {
-                    start: waypoint,
-                    end: end
-                };
-                endPoint = waypoint;
-            }
-            else {
-                endPoint = end;
-            }
-            // If an obstacle envelops the start point, add a segment to get out,
-            // and around it.
-            if (startObstacleIx > -1) {
-                startObstacle = chartObstacles[startObstacleIx];
-                waypoint = getMeOut(startObstacle, start, dir);
-                segments.push({
-                    start: start,
-                    end: waypoint
-                });
-                // If we are going back again, switch direction to get around start
-                // obstacle.
-                if (
-                // Going towards max from start:
-                waypoint[dir] >= start[dir] ===
-                    // Going towards min to end:
-                    waypoint[dir] >= endPoint[dir]) {
-                    dir = dir === 'y' ? 'x' : 'y';
-                    useMax = start[dir] < end[dir];
-                    segments.push({
-                        start: waypoint,
-                        end: copyFromPoint(waypoint, dir, startObstacle, dir + (useMax ? 'Max' : 'Min'), useMax ? 1 : -1)
-                    });
-                    // Switch direction again
-                    dir = dir === 'y' ? 'x' : 'y';
-                }
-            }
-            // We are around the start obstacle. Go towards the end in one
-            // direction.
-            prevWaypoint = segments.length ?
-                segments[segments.length - 1].end :
-                start;
-            waypoint = copyFromPoint(prevWaypoint, dir, endPoint);
-            segments.push({
-                start: prevWaypoint,
-                end: waypoint
-            });
-            // Final run to end point in the other direction
-            dir = dir === 'y' ? 'x' : 'y';
-            waypoint2 = copyFromPoint(waypoint, dir, endPoint);
-            segments.push({
-                start: waypoint,
-                end: waypoint2
-            });
-            // Finally add the endSegment
-            segments.push(endSegment);
-            return {
-                path: pathFromSegments(segments),
-                obstacles: segments
-            };
-        }, {
-            requiresObstacles: true
-        });
+        Scrollbar.defaultOptions = {
+          /**
+           * The height of the scrollbar. The height also applies to the width
+           * of the scroll arrows so that they are always squares. Defaults to
+           * 20 for touch devices and 14 for mouse devices.
+           *
+           * @sample stock/scrollbar/height/
+           *         A 30px scrollbar
+           *
+           * @type    {number}
+           * @default 20/14
+           */
+          height: isTouchDevice ? 20 : 14,
+          /**
+           * The border rounding radius of the bar.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          barBorderRadius: 0,
+          /**
+           * The corner radius of the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          buttonBorderRadius: 0,
+          /**
+           * Enable or disable the scrollbar.
+           *
+           * @sample stock/scrollbar/enabled/
+           *         Disable the scrollbar, only use navigator
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption scrollbar.enabled
+           */
+          /**
+           * Whether to redraw the main chart as the scrollbar or the navigator
+           * zoomed window is moved. Defaults to `true` for modern browsers and
+           * `false` for legacy IE browsers as well as mobile devices.
+           *
+           * @sample stock/scrollbar/liveredraw
+           *         Setting live redraw to false
+           *
+           * @type  {boolean}
+           * @since 1.3
+           */
+          liveRedraw: void 0,
+          /**
+           * The margin between the scrollbar and its axis when the scrollbar is
+           * applied directly to an axis.
+           */
+          margin: 10,
+          /**
+           * The minimum width of the scrollbar.
+           *
+           * @since 1.2.5
+           */
+          minWidth: 6,
+          /**
+           * Whether to show or hide the scrollbar when the scrolled content is
+           * zoomed out to it full extent.
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption scrollbar.showFull
+           */
+          step: 0.2,
+          /**
+           * The z index of the scrollbar group.
+           */
+          zIndex: 3,
+          /**
+           * The background color of the scrollbar itself.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          barBackgroundColor: "#cccccc",
+          /**
+           * The width of the bar's border.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          barBorderWidth: 1,
+          /**
+           * The color of the scrollbar's border.
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          barBorderColor: "#cccccc",
+          /**
+           * The color of the small arrow inside the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          buttonArrowColor: "#333333",
+          /**
+           * The color of scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          buttonBackgroundColor: "#e6e6e6",
+          /**
+           * The color of the border of the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          buttonBorderColor: "#cccccc",
+          /**
+           * The border width of the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          buttonBorderWidth: 1,
+          /**
+           * The color of the small rifles in the middle of the scrollbar.
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          rifleColor: "#333333",
+          /**
+           * The color of the track background.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          trackBackgroundColor: "#f2f2f2",
+          /**
+           * The color of the border of the scrollbar track.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          trackBorderColor: "#f2f2f2",
+          /**
+           * The corner radius of the border of the scrollbar track.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type      {number}
+           * @default   0
+           * @apioption scrollbar.trackBorderRadius
+           */
+          /**
+           * The width of the border of the scrollbar track.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          trackBorderWidth: 1,
+        };
+        return Scrollbar;
+      })();
+      if (!H.Scrollbar) {
+        defaultOptions.scrollbar = merge(
+          true,
+          Scrollbar.defaultOptions,
+          defaultOptions.scrollbar
+        );
+        H.Scrollbar = Scrollbar;
+        ScrollbarAxis.compose(Axis, Scrollbar);
+      }
+
+      return H.Scrollbar;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/RangeSelector.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Renderer/SVG/SVGElement.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, Chart, H, O, SVGElement, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var defaultOptions = O.defaultOptions;
+      var addEvent = U.addEvent,
+        createElement = U.createElement,
+        css = U.css,
+        defined = U.defined,
+        destroyObjectProperties = U.destroyObjectProperties,
+        discardElement = U.discardElement,
+        extend = U.extend,
+        fireEvent = U.fireEvent,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        objectEach = U.objectEach,
+        pick = U.pick,
+        pInt = U.pInt,
+        splat = U.splat;
+      /**
+       * Define the time span for the button
+       *
+       * @typedef {"all"|"day"|"hour"|"millisecond"|"minute"|"month"|"second"|"week"|"year"|"ytd"} Highcharts.RangeSelectorButtonTypeValue
+       */
+      /**
+       * Callback function to react on button clicks.
+       *
+       * @callback Highcharts.RangeSelectorClickCallbackFunction
+       *
+       * @param {global.Event} e
+       *        Event arguments.
+       *
+       * @param {boolean|undefined}
+       *        Return false to cancel the default button event.
+       */
+      /**
+       * Callback function to parse values entered in the input boxes and return a
+       * valid JavaScript time as milliseconds since 1970.
+       *
+       * @callback Highcharts.RangeSelectorParseCallbackFunction
+       *
+       * @param {string} value
+       *        Input value to parse.
+       *
+       * @return {number}
+       *         Parsed JavaScript time value.
+       */
+      /* ************************************************************************** *
+       * Start Range Selector code                                                  *
+       * ************************************************************************** */
+      extend(defaultOptions, {
         /**
-         * Find a path from a starting coordinate to an ending coordinate, taking
-         * obstacles into consideration. Might not always find the optimal path,
-         * but is fast, and usually good enough.
+         * The range selector is a tool for selecting ranges to display within
+         * the chart. It provides buttons to select preconfigured ranges in
+         * the chart, like 1 day, 1 week, 1 month etc. It also provides input
+         * boxes where min and max dates can be manually input.
          *
-         * @function Highcharts.Pathfinder.algorithms.fastAvoid
-         *
-         * @param {Highcharts.PositionObject} start
-         *        Starting coordinate, object with x/y props.
+         * @product      highstock gantt
+         * @optionparent rangeSelector
+         */
+        rangeSelector: {
+          /**
+           * Whether to enable all buttons from the start. By default buttons are
+           * only enabled if the corresponding time range exists on the X axis,
+           * but enabling all buttons allows for dynamically loading different
+           * time ranges.
+           *
+           * @sample {highstock} stock/rangeselector/allbuttonsenabled-true/
+           *         All buttons enabled
+           *
+           * @type      {boolean}
+           * @default   false
+           * @since     2.0.3
+           * @apioption rangeSelector.allButtonsEnabled
+           */
+          /**
+           * An array of configuration objects for the buttons.
+           *
+           * Defaults to:
+           * ```js
+           * buttons: [{
+           *     type: 'month',
+           *     count: 1,
+           *     text: '1m'
+           * }, {
+           *     type: 'month',
+           *     count: 3,
+           *     text: '3m'
+           * }, {
+           *     type: 'month',
+           *     count: 6,
+           *     text: '6m'
+           * }, {
+           *     type: 'ytd',
+           *     text: 'YTD'
+           * }, {
+           *     type: 'year',
+           *     count: 1,
+           *     text: '1y'
+           * }, {
+           *     type: 'all',
+           *     text: 'All'
+           * }]
+           * ```
+           *
+           * @sample {highstock} stock/rangeselector/datagrouping/
+           *         Data grouping by buttons
+           *
+           * @type      {Array<*>}
+           * @apioption rangeSelector.buttons
+           */
+          /**
+           * How many units of the defined type the button should span. If `type`
+           * is "month" and `count` is 3, the button spans three months.
+           *
+           * @type      {number}
+           * @default   1
+           * @apioption rangeSelector.buttons.count
+           */
+          /**
+           * Fires when clicking on the rangeSelector button. One parameter,
+           * event, is passed to the function, containing common event
+           * information.
+           *
+           * ```js
+           * click: function(e) {
+           *   //console.log(this);
+           * }
+           * ```
+           *
+           * Return false to stop default button's click action.
+           *
+           * @sample {highstock} stock/rangeselector/button-click/
+           *         Click event on the button
+           *
+           * @type      {Highcharts.RangeSelectorClickCallbackFunction}
+           * @apioption rangeSelector.buttons.events.click
+           */
+          /**
+           * Additional range (in milliseconds) added to the end of the calculated
+           * time span.
+           *
+           * @sample {highstock} stock/rangeselector/min-max-offsets/
+           *         Button offsets
+           *
+           * @type      {number}
+           * @default   0
+           * @since     6.0.0
+           * @apioption rangeSelector.buttons.offsetMax
+           */
+          /**
+           * Additional range (in milliseconds) added to the start of the
+           * calculated time span.
+           *
+           * @sample {highstock} stock/rangeselector/min-max-offsets/
+           *         Button offsets
+           *
+           * @type      {number}
+           * @default   0
+           * @since     6.0.0
+           * @apioption rangeSelector.buttons.offsetMin
+           */
+          /**
+           * When buttons apply dataGrouping on a series, by default zooming
+           * in/out will deselect buttons and unset dataGrouping. Enable this
+           * option to keep buttons selected when extremes change.
+           *
+           * @sample {highstock} stock/rangeselector/preserve-datagrouping/
+           *         Different preserveDataGrouping settings
+           *
+           * @type      {boolean}
+           * @default   false
+           * @since     6.1.2
+           * @apioption rangeSelector.buttons.preserveDataGrouping
+           */
+          /**
+           * A custom data grouping object for each button.
+           *
+           * @see [series.dataGrouping](#plotOptions.series.dataGrouping)
+           *
+           * @sample {highstock} stock/rangeselector/datagrouping/
+           *         Data grouping by range selector buttons
+           *
+           * @type      {*}
+           * @extends   plotOptions.series.dataGrouping
+           * @apioption rangeSelector.buttons.dataGrouping
+           */
+          /**
+           * The text for the button itself.
+           *
+           * @type      {string}
+           * @apioption rangeSelector.buttons.text
+           */
+          /**
+           * Defined the time span for the button. Can be one of `millisecond`,
+           * `second`, `minute`, `hour`, `day`, `week`, `month`, `year`, `ytd`,
+           * and `all`.
+           *
+           * @type       {Highcharts.RangeSelectorButtonTypeValue}
+           * @apioption  rangeSelector.buttons.type
+           */
+          /**
+           * The space in pixels between the buttons in the range selector.
+           *
+           * @type      {number}
+           * @default   0
+           * @apioption rangeSelector.buttonSpacing
+           */
+          /**
+           * Enable or disable the range selector.
+           *
+           * @sample {highstock} stock/rangeselector/enabled/
+           *         Disable the range selector
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption rangeSelector.enabled
+           */
+          /**
+           * The vertical alignment of the rangeselector box. Allowed properties
+           * are `top`, `middle`, `bottom`.
+           *
+           * @sample {highstock} stock/rangeselector/vertical-align-middle/
+           *         Middle
+           * @sample {highstock} stock/rangeselector/vertical-align-bottom/
+           *         Bottom
+           *
+           * @type  {Highcharts.VerticalAlignValue}
+           * @since 6.0.0
+           */
+          verticalAlign: "top",
+          /**
+           * A collection of attributes for the buttons. The object takes SVG
+           * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,
+           * a collection of CSS properties for the text.
+           *
+           * The object can also be extended with states, so you can set
+           * presentational options for `hover`, `select` or `disabled` button
+           * states.
+           *
+           * CSS styles for the text label.
+           *
+           * In styled mode, the buttons are styled by the
+           * `.highcharts-range-selector-buttons .highcharts-button` rule with its
+           * different states.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type {Highcharts.SVGAttributes}
+           */
+          buttonTheme: {
+            /** @ignore */
+            width: 28,
+            /** @ignore */
+            height: 18,
+            /** @ignore */
+            padding: 2,
+            /** @ignore */
+            zIndex: 7, // #484, #852
+          },
+          /**
+           * When the rangeselector is floating, the plot area does not reserve
+           * space for it. This opens for positioning anywhere on the chart.
+           *
+           * @sample {highstock} stock/rangeselector/floating/
+           *         Placing the range selector between the plot area and the
+           *         navigator
+           *
+           * @since 6.0.0
+           */
+          floating: false,
+          /**
+           * The x offset of the range selector relative to its horizontal
+           * alignment within `chart.spacingLeft` and `chart.spacingRight`.
+           *
+           * @since 6.0.0
+           */
+          x: 0,
+          /**
+           * The y offset of the range selector relative to its horizontal
+           * alignment within `chart.spacingLeft` and `chart.spacingRight`.
+           *
+           * @since 6.0.0
+           */
+          y: 0,
+          /**
+           * Deprecated. The height of the range selector. Currently it is
+           * calculated dynamically.
+           *
+           * @deprecated
+           * @type  {number|undefined}
+           * @since 2.1.9
+           */
+          height: void 0,
+          /**
+           * The border color of the date input boxes.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {Highcharts.ColorString}
+           * @default   #cccccc
+           * @since     1.3.7
+           * @apioption rangeSelector.inputBoxBorderColor
+           */
+          /**
+           * The pixel height of the date input boxes.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {number}
+           * @default   17
+           * @since     1.3.7
+           * @apioption rangeSelector.inputBoxHeight
+           */
+          /**
+           * CSS for the container DIV holding the input boxes. Deprecated as
+           * of 1.2.5\. Use [inputPosition](#rangeSelector.inputPosition) instead.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @deprecated
+           * @type      {Highcharts.CSSObject}
+           * @apioption rangeSelector.inputBoxStyle
+           */
+          /**
+           * The pixel width of the date input boxes.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {number}
+           * @default   90
+           * @since     1.3.7
+           * @apioption rangeSelector.inputBoxWidth
+           */
+          /**
+           * The date format in the input boxes when not selected for editing.
+           * Defaults to `%b %e, %Y`.
+           *
+           * @sample {highstock} stock/rangeselector/input-format/
+           *         Milliseconds in the range selector
+           *
+           * @type      {string}
+           * @default   %b %e, %Y
+           * @apioption rangeSelector.inputDateFormat
+           */
+          /**
+           * A custom callback function to parse values entered in the input boxes
+           * and return a valid JavaScript time as milliseconds since 1970.
+           * The first argument passed is a value to parse,
+           * second is a boolean indicating use of the UTC time.
+           *
+           * @sample {highstock} stock/rangeselector/input-format/
+           *         Milliseconds in the range selector
+           *
+           * @type      {Highcharts.RangeSelectorParseCallbackFunction}
+           * @since     1.3.3
+           * @apioption rangeSelector.inputDateParser
+           */
+          /**
+           * The date format in the input boxes when they are selected for
+           * editing. This must be a format that is recognized by JavaScript
+           * Date.parse.
+           *
+           * @sample {highstock} stock/rangeselector/input-format/
+           *         Milliseconds in the range selector
+           *
+           * @type      {string}
+           * @default   %Y-%m-%d
+           * @apioption rangeSelector.inputEditDateFormat
+           */
+          /**
+           * Enable or disable the date input boxes. Defaults to enabled when
+           * there is enough space, disabled if not (typically mobile).
+           *
+           * @sample {highstock} stock/rangeselector/input-datepicker/
+           *         Extending the input with a jQuery UI datepicker
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption rangeSelector.inputEnabled
+           */
+          /**
+           * Positioning for the input boxes. Allowed properties are `align`,
+           *  `x` and `y`.
+           *
+           * @since 1.2.4
+           */
+          inputPosition: {
+            /**
+             * The alignment of the input box. Allowed properties are `left`,
+             * `center`, `right`.
+             *
+             * @sample {highstock} stock/rangeselector/input-button-position/
+             *         Alignment
+             *
+             * @type  {Highcharts.AlignValue}
+             * @since 6.0.0
+             */
+            align: "right",
+            /**
+             * X offset of the input row.
+             */
+            x: 0,
+            /**
+             * Y offset of the input row.
+             */
+            y: 0,
+          },
+          /**
+           * The index of the button to appear pre-selected.
+           *
+           * @type      {number}
+           * @apioption rangeSelector.selected
+           */
+          /**
+           * Positioning for the button row.
+           *
+           * @since 1.2.4
+           */
+          buttonPosition: {
+            /**
+             * The alignment of the input box. Allowed properties are `left`,
+             * `center`, `right`.
+             *
+             * @sample {highstock} stock/rangeselector/input-button-position/
+             *         Alignment
+             *
+             * @type  {Highcharts.AlignValue}
+             * @since 6.0.0
+             */
+            align: "left",
+            /**
+             * X offset of the button row.
+             */
+            x: 0,
+            /**
+             * Y offset of the button row.
+             */
+            y: 0,
+          },
+          /**
+           * CSS for the HTML inputs in the range selector.
+           *
+           * In styled mode, the inputs are styled by the
+           * `.highcharts-range-input text` rule in SVG mode, and
+           * `input.highcharts-range-selector` when active.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {Highcharts.CSSObject}
+           * @apioption rangeSelector.inputStyle
+           */
+          /**
+           * CSS styles for the labels - the Zoom, From and To texts.
+           *
+           * In styled mode, the labels are styled by the
+           * `.highcharts-range-label` class.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type {Highcharts.CSSObject}
+           */
+          labelStyle: {
+            /** @ignore */
+            color: "#666666",
+          },
+        },
+      });
+      defaultOptions.lang = merge(
+        defaultOptions.lang,
+        /**
+         * Language object. The language object is global and it can't be set
+         * on each chart initialization. Instead, use `Highcharts.setOptions` to
+         * set it before any chart is initialized.
          *
-         * @param {Highcharts.PositionObject} end
-         *        Ending coordinate, object with x/y props.
+         * ```js
+         * Highcharts.setOptions({
+         *     lang: {
+         *         months: [
+         *             'Janvier', 'Février', 'Mars', 'Avril',
+         *             'Mai', 'Juin', 'Juillet', 'Août',
+         *             'Septembre', 'Octobre', 'Novembre', 'Décembre'
+         *         ],
+         *         weekdays: [
+         *             'Dimanche', 'Lundi', 'Mardi', 'Mercredi',
+         *             'Jeudi', 'Vendredi', 'Samedi'
+         *         ]
+         *     }
+         * });
+         * ```
          *
-         * @param {object} options
-         *        Options for the algorithm.
-         *        - chartObstacles:  Array of chart obstacles to avoid
-         *        - lineObstacles:   Array of line obstacles to jump over
-         *        - obstacleMetrics: Object with metrics of chartObstacles cached
-         *        - hardBounds:      Hard boundaries to not cross
-         *        - obstacleOptions: Options for the obstacles, including margin
-         *        - startDirectionX: Optional. True if starting in the X direction.
-         *                           If not provided, the algorithm starts in the
-         *                           direction that is the furthest between
-         *                           start/end.
+         * @optionparent lang
+         */
+        {
+          /**
+           * The text for the label for the range selector buttons.
+           *
+           * @product highstock gantt
+           */
+          rangeSelectorZoom: "Zoom",
+          /**
+           * The text for the label for the "from" input box in the range
+           * selector.
+           *
+           * @product highstock gantt
+           */
+          rangeSelectorFrom: "From",
+          /**
+           * The text for the label for the "to" input box in the range selector.
+           *
+           * @product highstock gantt
+           */
+          rangeSelectorTo: "To",
+        }
+      );
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * The range selector.
+       *
+       * @private
+       * @class
+       * @name Highcharts.RangeSelector
+       * @param {Highcharts.Chart} chart
+       */
+      var RangeSelector = /** @class */ (function () {
+        function RangeSelector(chart) {
+          /* *
+           *
+           * Properties
+           *
+           * */
+          this.buttons = void 0;
+          this.buttonOptions = RangeSelector.prototype.defaultButtons;
+          this.options = void 0;
+          this.chart = chart;
+          // Run RangeSelector
+          this.init(chart);
+        }
+        /**
+         * The method to run when one of the buttons in the range selectors is
+         * clicked
          *
-         * @return {object}
-         *         An object with the SVG path in Array form as accepted by the SVG
-         *         renderer, as well as an array of new obstacles making up this
-         *         path.
+         * @private
+         * @function Highcharts.RangeSelector#clickButton
+         * @param {number} i
+         *        The index of the button
+         * @param {boolean} [redraw]
+         * @return {void}
          */
-        var fastAvoid = extend(function (start,
-            end,
-            options) {
-                /*
-                    Algorithm rules/description
-                    - Find initial direction
-                    - Determine soft/hard max for each direction.
-                    - Move along initial direction until obstacle.
-                    - Change direction.
-                    - If hitting obstacle,
-            first try to change length of previous line
-                        before changing direction again.
-    
-                    Soft min/max x = start/destination x +/- widest obstacle + margin
-                    Soft min/max y = start/destination y +/- tallest obstacle + margin
-    
-                    @todo:
-                        - Make retrospective,
-            try changing prev segment to reduce
-                            corners
-                        - Fix logic for breaking out of end-points - not always picking
-                            the best direction currently
-                        - When going around the end obstacle we should not always go the
-                            shortest route,
-            rather pick the one closer to the end point
-                */
-                var dirIsX = pick(options.startDirectionX,
-            abs(end.x - start.x) > abs(end.y - start.y)),
-            dir = dirIsX ? 'x' : 'y',
-            segments,
-            useMax,
-            extractedEndPoint,
-            endSegments = [],
-            forceObstacleBreak = false, // Used in clearPathTo to keep track of
-                // when to force break through an obstacle.
-                // Boundaries to stay within. If beyond soft boundary, prefer to
-                // change direction ASAP. If at hard max, always change immediately.
-                metrics = options.obstacleMetrics,
-            softMinX = min(start.x,
-            end.x) - metrics.maxWidth - 10,
-            softMaxX = max(start.x,
-            end.x) + metrics.maxWidth + 10,
-            softMinY = min(start.y,
-            end.y) - metrics.maxHeight - 10,
-            softMaxY = max(start.y,
-            end.y) + metrics.maxHeight + 10, 
-                // Obstacles
-                chartObstacles = options.chartObstacles,
-            startObstacleIx = findLastObstacleBefore(chartObstacles,
-            softMinX),
-            endObstacleIx = findLastObstacleBefore(chartObstacles,
-            softMaxX);
-            // eslint-disable-next-line valid-jsdoc
-            /**
-             * How far can you go between two points before hitting an obstacle?
-             * Does not work for diagonal lines (because it doesn't have to).
-             * @private
-             */
-            function pivotPoint(fromPoint, toPoint, directionIsX) {
-                var firstPoint,
-                    lastPoint,
-                    highestPoint,
-                    lowestPoint,
-                    i,
-                    searchDirection = fromPoint.x < toPoint.x ? 1 : -1;
-                if (fromPoint.x < toPoint.x) {
-                    firstPoint = fromPoint;
-                    lastPoint = toPoint;
-                }
-                else {
-                    firstPoint = toPoint;
-                    lastPoint = fromPoint;
-                }
-                if (fromPoint.y < toPoint.y) {
-                    lowestPoint = fromPoint;
-                    highestPoint = toPoint;
-                }
-                else {
-                    lowestPoint = toPoint;
-                    highestPoint = fromPoint;
-                }
-                // Go through obstacle range in reverse if toPoint is before
-                // fromPoint in the X-dimension.
-                i = searchDirection < 0 ?
-                    // Searching backwards, start at last obstacle before last point
-                    min(findLastObstacleBefore(chartObstacles, lastPoint.x), chartObstacles.length - 1) :
-                    // Forwards. Since we're not sorted by xMax, we have to look
-                    // at all obstacles.
-                    0;
-                // Go through obstacles in this X range
-                while (chartObstacles[i] && (searchDirection > 0 && chartObstacles[i].xMin <= lastPoint.x ||
-                    searchDirection < 0 && chartObstacles[i].xMax >= firstPoint.x)) {
-                    // If this obstacle is between from and to points in a straight
-                    // line, pivot at the intersection.
-                    if (chartObstacles[i].xMin <= lastPoint.x &&
-                        chartObstacles[i].xMax >= firstPoint.x &&
-                        chartObstacles[i].yMin <= highestPoint.y &&
-                        chartObstacles[i].yMax >= lowestPoint.y) {
-                        if (directionIsX) {
-                            return {
-                                y: fromPoint.y,
-                                x: fromPoint.x < toPoint.x ?
-                                    chartObstacles[i].xMin - 1 :
-                                    chartObstacles[i].xMax + 1,
-                                obstacle: chartObstacles[i]
-                            };
-                        }
-                        // else ...
-                        return {
-                            x: fromPoint.x,
-                            y: fromPoint.y < toPoint.y ?
-                                chartObstacles[i].yMin - 1 :
-                                chartObstacles[i].yMax + 1,
-                            obstacle: chartObstacles[i]
-                        };
-                    }
-                    i += searchDirection;
-                }
-                return toPoint;
-            }
-            /**
-             * Decide in which direction to dodge or get out of an obstacle.
-             * Considers desired direction, which way is shortest, soft and hard
-             * bounds.
-             *
-             * (? Returns a string, either xMin, xMax, yMin or yMax.)
-             *
-             * @private
-             * @function
-             *
-             * @param {object} obstacle
-             *        Obstacle to dodge/escape.
-             *
-             * @param {object} fromPoint
-             *        Point with x/y props that's dodging/escaping.
-             *
-             * @param {object} toPoint
-             *        Goal point.
-             *
-             * @param {boolean} dirIsX
-             *        Dodge in X dimension.
-             *
-             * @param {object} bounds
-             *        Hard and soft boundaries.
-             *
-             * @return {boolean}
-             *         Use max or not.
-             */
-            function getDodgeDirection(obstacle, fromPoint, toPoint, dirIsX, bounds) {
-                var softBounds = bounds.soft, hardBounds = bounds.hard, dir = dirIsX ? 'x' : 'y', toPointMax = { x: fromPoint.x, y: fromPoint.y }, toPointMin = { x: fromPoint.x, y: fromPoint.y }, minPivot, maxPivot, maxOutOfSoftBounds = obstacle[dir + 'Max'] >=
-                        softBounds[dir + 'Max'], minOutOfSoftBounds = obstacle[dir + 'Min'] <=
-                        softBounds[dir + 'Min'], maxOutOfHardBounds = obstacle[dir + 'Max'] >=
-                        hardBounds[dir + 'Max'], minOutOfHardBounds = obstacle[dir + 'Min'] <=
-                        hardBounds[dir + 'Min'], 
-                    // Find out if we should prefer one direction over the other if
-                    // we can choose freely
-                    minDistance = abs(obstacle[dir + 'Min'] - fromPoint[dir]), maxDistance = abs(obstacle[dir + 'Max'] - fromPoint[dir]), 
-                    // If it's a small difference, pick the one leading towards dest
-                    // point. Otherwise pick the shortest distance
-                    useMax = abs(minDistance - maxDistance) < 10 ?
-                        fromPoint[dir] < toPoint[dir] :
-                        maxDistance < minDistance;
-                // Check if we hit any obstacles trying to go around in either
-                // direction.
-                toPointMin[dir] = obstacle[dir + 'Min'];
-                toPointMax[dir] = obstacle[dir + 'Max'];
-                minPivot = pivotPoint(fromPoint, toPointMin, dirIsX)[dir] !==
-                    toPointMin[dir];
-                maxPivot = pivotPoint(fromPoint, toPointMax, dirIsX)[dir] !==
-                    toPointMax[dir];
-                useMax = minPivot ?
-                    (maxPivot ? useMax : true) :
-                    (maxPivot ? false : useMax);
-                // useMax now contains our preferred choice, bounds not taken into
-                // account. If both or neither direction is out of bounds we want to
-                // use this.
-                // Deal with soft bounds
-                useMax = minOutOfSoftBounds ?
-                    (maxOutOfSoftBounds ? useMax : true) : // Out on min
-                    (maxOutOfSoftBounds ? false : useMax); // Not out on min
-                // Deal with hard bounds
-                useMax = minOutOfHardBounds ?
-                    (maxOutOfHardBounds ? useMax : true) : // Out on min
-                    (maxOutOfHardBounds ? false : useMax); // Not out on min
-                return useMax;
-            }
-            // eslint-disable-next-line valid-jsdoc
-            /**
-             * Find a clear path between point.
-             * @private
-             */
-            function clearPathTo(fromPoint, toPoint, dirIsX) {
-                // Don't waste time if we've hit goal
-                if (fromPoint.x === toPoint.x && fromPoint.y === toPoint.y) {
-                    return [];
-                }
-                var dir = dirIsX ? 'x' : 'y',
-                    pivot,
-                    segments,
-                    waypoint,
-                    waypointUseMax,
-                    envelopingObstacle,
-                    secondEnvelopingObstacle,
-                    envelopWaypoint,
-                    obstacleMargin = options.obstacleOptions.margin,
-                    bounds = {
-                        soft: {
-                            xMin: softMinX,
-                            xMax: softMaxX,
-                            yMin: softMinY,
-                            yMax: softMaxY
-                        },
-                        hard: options.hardBounds
-                    };
-                // If fromPoint is inside an obstacle we have a problem. Break out
-                // by just going to the outside of this obstacle. We prefer to go to
-                // the nearest edge in the chosen direction.
-                envelopingObstacle =
-                    findObstacleFromPoint(chartObstacles, fromPoint);
-                if (envelopingObstacle > -1) {
-                    envelopingObstacle = chartObstacles[envelopingObstacle];
-                    waypointUseMax = getDodgeDirection(envelopingObstacle, fromPoint, toPoint, dirIsX, bounds);
-                    // Cut obstacle to hard bounds to make sure we stay within
-                    limitObstacleToBounds(envelopingObstacle, options.hardBounds);
-                    envelopWaypoint = dirIsX ? {
-                        y: fromPoint.y,
-                        x: envelopingObstacle[waypointUseMax ? 'xMax' : 'xMin'] +
-                            (waypointUseMax ? 1 : -1)
-                    } : {
-                        x: fromPoint.x,
-                        y: envelopingObstacle[waypointUseMax ? 'yMax' : 'yMin'] +
-                            (waypointUseMax ? 1 : -1)
-                    };
-                    // If we crashed into another obstacle doing this, we put the
-                    // waypoint between them instead
-                    secondEnvelopingObstacle = findObstacleFromPoint(chartObstacles, envelopWaypoint);
-                    if (secondEnvelopingObstacle > -1) {
-                        secondEnvelopingObstacle = chartObstacles[secondEnvelopingObstacle];
-                        // Cut obstacle to hard bounds
-                        limitObstacleToBounds(secondEnvelopingObstacle, options.hardBounds);
-                        // Modify waypoint to lay between obstacles
-                        envelopWaypoint[dir] = waypointUseMax ? max(envelopingObstacle[dir + 'Max'] - obstacleMargin + 1, (secondEnvelopingObstacle[dir + 'Min'] +
-                            envelopingObstacle[dir + 'Max']) / 2) :
-                            min((envelopingObstacle[dir + 'Min'] + obstacleMargin - 1), ((secondEnvelopingObstacle[dir + 'Max'] +
-                                envelopingObstacle[dir + 'Min']) / 2));
-                        // We are not going anywhere. If this happens for the first
-                        // time, do nothing. Otherwise, try to go to the extreme of
-                        // the obstacle pair in the current direction.
-                        if (fromPoint.x === envelopWaypoint.x &&
-                            fromPoint.y === envelopWaypoint.y) {
-                            if (forceObstacleBreak) {
-                                envelopWaypoint[dir] = waypointUseMax ?
-                                    max(envelopingObstacle[dir + 'Max'], secondEnvelopingObstacle[dir + 'Max']) + 1 :
-                                    min(envelopingObstacle[dir + 'Min'], secondEnvelopingObstacle[dir + 'Min']) - 1;
-                            }
-                            // Toggle on if off, and the opposite
-                            forceObstacleBreak = !forceObstacleBreak;
-                        }
-                        else {
-                            // This point is not identical to previous.
-                            // Clear break trigger.
-                            forceObstacleBreak = false;
-                        }
-                    }
-                    segments = [{
-                            start: fromPoint,
-                            end: envelopWaypoint
-                        }];
-                }
-                else { // If not enveloping, use standard pivot calculation
-                    pivot = pivotPoint(fromPoint, {
-                        x: dirIsX ? toPoint.x : fromPoint.x,
-                        y: dirIsX ? fromPoint.y : toPoint.y
-                    }, dirIsX);
-                    segments = [{
-                            start: fromPoint,
-                            end: {
-                                x: pivot.x,
-                                y: pivot.y
-                            }
-                        }];
-                    // Pivot before goal, use a waypoint to dodge obstacle
-                    if (pivot[dirIsX ? 'x' : 'y'] !== toPoint[dirIsX ? 'x' : 'y']) {
-                        // Find direction of waypoint
-                        waypointUseMax = getDodgeDirection(pivot.obstacle, pivot, toPoint, !dirIsX, bounds);
-                        // Cut waypoint to hard bounds
-                        limitObstacleToBounds(pivot.obstacle, options.hardBounds);
-                        waypoint = {
-                            x: dirIsX ?
-                                pivot.x :
-                                pivot.obstacle[waypointUseMax ? 'xMax' : 'xMin'] +
-                                    (waypointUseMax ? 1 : -1),
-                            y: dirIsX ?
-                                pivot.obstacle[waypointUseMax ? 'yMax' : 'yMin'] +
-                                    (waypointUseMax ? 1 : -1) :
-                                pivot.y
-                        };
-                        // We're changing direction here, store that to make sure we
-                        // also change direction when adding the last segment array
-                        // after handling waypoint.
-                        dirIsX = !dirIsX;
-                        segments = segments.concat(clearPathTo({
-                            x: pivot.x,
-                            y: pivot.y
-                        }, waypoint, dirIsX));
-                    }
-                }
-                // Get segments for the other direction too
-                // Recursion is our friend
-                segments = segments.concat(clearPathTo(segments[segments.length - 1].end, toPoint, !dirIsX));
-                return segments;
-            }
-            // eslint-disable-next-line valid-jsdoc
-            /**
-             * Extract point to outside of obstacle in whichever direction is
-             * closest. Returns new point outside obstacle.
-             * @private
-             */
-            function extractFromObstacle(obstacle, point, goalPoint) {
-                var dirIsX = min(obstacle.xMax - point.x,
-                    point.x - obstacle.xMin) <
-                        min(obstacle.yMax - point.y,
-                    point.y - obstacle.yMin),
-                    bounds = {
-                        soft: options.hardBounds,
-                        hard: options.hardBounds
-                    },
-                    useMax = getDodgeDirection(obstacle,
-                    point,
-                    goalPoint,
-                    dirIsX,
-                    bounds);
-                return dirIsX ? {
-                    y: point.y,
-                    x: obstacle[useMax ? 'xMax' : 'xMin'] + (useMax ? 1 : -1)
-                } : {
-                    x: point.x,
-                    y: obstacle[useMax ? 'yMax' : 'yMin'] + (useMax ? 1 : -1)
-                };
+        RangeSelector.prototype.clickButton = function (i, redraw) {
+          var rangeSelector = this,
+            chart = rangeSelector.chart,
+            rangeOptions = rangeSelector.buttonOptions[i],
+            baseAxis = chart.xAxis[0],
+            unionExtremes =
+              (chart.scroller && chart.scroller.getUnionExtremes()) ||
+              baseAxis ||
+              {},
+            dataMin = unionExtremes.dataMin,
+            dataMax = unionExtremes.dataMax,
+            newMin,
+            newMax =
+              baseAxis &&
+              Math.round(Math.min(baseAxis.max, pick(dataMax, baseAxis.max))), // #1568
+            type = rangeOptions.type,
+            baseXAxisOptions,
+            range = rangeOptions._range,
+            rangeMin,
+            minSetting,
+            rangeSetting,
+            ctx,
+            ytdExtremes,
+            dataGrouping = rangeOptions.dataGrouping;
+          // chart has no data, base series is removed
+          if (dataMin === null || dataMax === null) {
+            return;
+          }
+          // Set the fixed range before range is altered
+          chart.fixedRange = range;
+          // Apply dataGrouping associated to button
+          if (dataGrouping) {
+            this.forcedDataGrouping = true;
+            Axis.prototype.setDataGrouping.call(
+              baseAxis || { chart: this.chart },
+              dataGrouping,
+              false
+            );
+            this.frozenStates = rangeOptions.preserveDataGrouping;
+          }
+          // Apply range
+          if (type === "month" || type === "year") {
+            if (!baseAxis) {
+              // This is set to the user options and picked up later when the
+              // axis is instantiated so that we know the min and max.
+              range = rangeOptions;
+            } else {
+              ctx = {
+                range: rangeOptions,
+                max: newMax,
+                chart: chart,
+                dataMin: dataMin,
+                dataMax: dataMax,
+              };
+              newMin = baseAxis.minFromRange.call(ctx);
+              if (isNumber(ctx.newMax)) {
+                newMax = ctx.newMax;
+              }
             }
-            // Cut the obstacle array to soft bounds for optimization in large
-            // datasets.
-            chartObstacles =
-                chartObstacles.slice(startObstacleIx, endObstacleIx + 1);
-            // If an obstacle envelops the end point, move it out of there and add
-            // a little segment to where it was.
-            if ((endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1) {
-                extractedEndPoint = extractFromObstacle(chartObstacles[endObstacleIx], end, start);
-                endSegments.push({
-                    end: end,
-                    start: extractedEndPoint
-                });
-                end = extractedEndPoint;
-            }
-            // If it's still inside one or more obstacles, get out of there by
-            // force-moving towards the start point.
-            while ((endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1) {
-                useMax = end[dir] - start[dir] < 0;
-                extractedEndPoint = {
-                    x: end.x,
-                    y: end.y
-                };
-                extractedEndPoint[dir] = chartObstacles[endObstacleIx][useMax ? dir + 'Max' : dir + 'Min'] + (useMax ? 1 : -1);
-                endSegments.push({
-                    end: end,
-                    start: extractedEndPoint
+            // Fixed times like minutes, hours, days
+          } else if (range) {
+            newMin = Math.max(newMax - range, dataMin);
+            newMax = Math.min(newMin + range, dataMax);
+          } else if (type === "ytd") {
+            // On user clicks on the buttons, or a delayed action running from
+            // the beforeRender event (below), the baseAxis is defined.
+            if (baseAxis) {
+              // When "ytd" is the pre-selected button for the initial view,
+              // its calculation is delayed and rerun in the beforeRender
+              // event (below). When the series are initialized, but before
+              // the chart is rendered, we have access to the xData array
+              // (#942).
+              if (typeof dataMax === "undefined") {
+                dataMin = Number.MAX_VALUE;
+                dataMax = Number.MIN_VALUE;
+                chart.series.forEach(function (series) {
+                  // reassign it to the last item
+                  var xData = series.xData;
+                  dataMin = Math.min(xData[0], dataMin);
+                  dataMax = Math.max(xData[xData.length - 1], dataMax);
                 });
-                end = extractedEndPoint;
+                redraw = false;
+              }
+              ytdExtremes = rangeSelector.getYTDExtremes(
+                dataMax,
+                dataMin,
+                chart.time.useUTC
+              );
+              newMin = rangeMin = ytdExtremes.min;
+              newMax = ytdExtremes.max;
+              // "ytd" is pre-selected. We don't yet have access to processed
+              // point and extremes data (things like pointStart and pointInterval
+              // are missing), so we delay the process (#942)
+            } else {
+              rangeSelector.deferredYTDClick = i;
+              return;
             }
-            // Find the path
-            segments = clearPathTo(start, end, dirIsX);
-            // Add the end-point segments
-            segments = segments.concat(endSegments.reverse());
-            return {
-                path: pathFromSegments(segments),
-                obstacles: segments
-            };
-        }, {
-            requiresObstacles: true
-        });
-        // Define the available pathfinding algorithms.
-        // Algorithms take up to 3 arguments: starting point, ending point, and an
-        // options object.
-        var algorithms = {
-                fastAvoid: fastAvoid,
-                straight: straight,
-                simpleConnect: simpleConnect
-            };
-
-        return algorithms;
-    });
-    _registerModule(_modules, 'Gantt/Pathfinder.js', [_modules['Gantt/Connection.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Core/Options.js'], _modules['Core/Series/Point.js'], _modules['Core/Utilities.js'], _modules['Gantt/PathfinderAlgorithms.js']], function (Connection, Chart, H, O, Point, U, pathfinderAlgorithms) {
-        /* *
+          } else if (type === "all" && baseAxis) {
+            newMin = dataMin;
+            newMax = dataMax;
+          }
+          if (defined(newMin)) {
+            newMin += rangeOptions._offsetMin;
+          }
+          if (defined(newMax)) {
+            newMax += rangeOptions._offsetMax;
+          }
+          rangeSelector.setSelected(i);
+          // Update the chart
+          if (!baseAxis) {
+            // Axis not yet instanciated. Temporarily set min and range
+            // options and remove them on chart load (#4317).
+            baseXAxisOptions = splat(chart.options.xAxis)[0];
+            rangeSetting = baseXAxisOptions.range;
+            baseXAxisOptions.range = range;
+            minSetting = baseXAxisOptions.min;
+            baseXAxisOptions.min = rangeMin;
+            addEvent(chart, "load", function resetMinAndRange() {
+              baseXAxisOptions.range = rangeSetting;
+              baseXAxisOptions.min = minSetting;
+            });
+          } else {
+            // Existing axis object. Set extremes after render time.
+            baseAxis.setExtremes(
+              newMin,
+              newMax,
+              pick(redraw, 1),
+              null, // auto animation
+              {
+                trigger: "rangeSelectorButton",
+                rangeSelectorButton: rangeOptions,
+              }
+            );
+          }
+        };
+        /**
+         * Set the selected option. This method only sets the internal flag, it
+         * doesn't update the buttons or the actual zoomed range.
          *
-         *  (c) 2016 Highsoft AS
-         *  Authors: Øystein Moseng, Lars A. V. Cabrera
+         * @private
+         * @function Highcharts.RangeSelector#setSelected
+         * @param {number} [selected]
+         * @return {void}
+         */
+        RangeSelector.prototype.setSelected = function (selected) {
+          this.selected = this.options.selected = selected;
+        };
+        /**
+         * Initialize the range selector
          *
-         *  License: www.highcharts.com/license
+         * @private
+         * @function Highcharts.RangeSelector#init
+         * @param {Highcharts.Chart} chart
+         * @return {void}
+         */
+        RangeSelector.prototype.init = function (chart) {
+          var rangeSelector = this,
+            options = chart.options.rangeSelector,
+            buttonOptions =
+              options.buttons || rangeSelector.defaultButtons.slice(),
+            selectedOption = options.selected,
+            blurInputs = function () {
+              var minInput = rangeSelector.minInput,
+                maxInput = rangeSelector.maxInput;
+              // #3274 in some case blur is not defined
+              if (minInput && minInput.blur) {
+                fireEvent(minInput, "blur");
+              }
+              if (maxInput && maxInput.blur) {
+                fireEvent(maxInput, "blur");
+              }
+            };
+          rangeSelector.chart = chart;
+          rangeSelector.options = options;
+          rangeSelector.buttons = [];
+          rangeSelector.buttonOptions = buttonOptions;
+          this.unMouseDown = addEvent(chart.container, "mousedown", blurInputs);
+          this.unResize = addEvent(chart, "resize", blurInputs);
+          // Extend the buttonOptions with actual range
+          buttonOptions.forEach(rangeSelector.computeButtonRange);
+          // zoomed range based on a pre-selected button index
+          if (
+            typeof selectedOption !== "undefined" &&
+            buttonOptions[selectedOption]
+          ) {
+            this.clickButton(selectedOption, false);
+          }
+          addEvent(chart, "load", function () {
+            // If a data grouping is applied to the current button, release it
+            // when extremes change
+            if (chart.xAxis && chart.xAxis[0]) {
+              addEvent(chart.xAxis[0], "setExtremes", function (e) {
+                if (
+                  this.max - this.min !== chart.fixedRange &&
+                  e.trigger !== "rangeSelectorButton" &&
+                  e.trigger !== "updatedData" &&
+                  rangeSelector.forcedDataGrouping &&
+                  !rangeSelector.frozenStates
+                ) {
+                  this.setDataGrouping(false, false);
+                }
+              });
+            }
+          });
+        };
+        /**
+         * Dynamically update the range selector buttons after a new range has been
+         * set
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @private
+         * @function Highcharts.RangeSelector#updateButtonStates
+         * @return {void}
+         */
+        RangeSelector.prototype.updateButtonStates = function () {
+          var rangeSelector = this,
+            chart = this.chart,
+            baseAxis = chart.xAxis[0],
+            actualRange = Math.round(baseAxis.max - baseAxis.min),
+            hasNoData = !baseAxis.hasVisibleSeries,
+            day = 24 * 36e5, // A single day in milliseconds
+            unionExtremes =
+              (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis,
+            dataMin = unionExtremes.dataMin,
+            dataMax = unionExtremes.dataMax,
+            ytdExtremes = rangeSelector.getYTDExtremes(
+              dataMax,
+              dataMin,
+              chart.time.useUTC
+            ),
+            ytdMin = ytdExtremes.min,
+            ytdMax = ytdExtremes.max,
+            selected = rangeSelector.selected,
+            selectedExists = isNumber(selected),
+            allButtonsEnabled = rangeSelector.options.allButtonsEnabled,
+            buttons = rangeSelector.buttons;
+          rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
+            var range = rangeOptions._range,
+              type = rangeOptions.type,
+              count = rangeOptions.count || 1,
+              button = buttons[i],
+              state = 0,
+              disable,
+              select,
+              offsetRange = rangeOptions._offsetMax - rangeOptions._offsetMin,
+              isSelected = i === selected,
+              // Disable buttons where the range exceeds what is allowed in
+              // the current view
+              isTooGreatRange = range > dataMax - dataMin,
+              // Disable buttons where the range is smaller than the minimum
+              // range
+              isTooSmallRange = range < baseAxis.minRange,
+              // Do not select the YTD button if not explicitly told so
+              isYTDButNotSelected = false,
+              // Disable the All button if we're already showing all
+              isAllButAlreadyShowingAll = false,
+              isSameRange = range === actualRange;
+            // Months and years have a variable range so we check the extremes
+            if (
+              (type === "month" || type === "year") &&
+              actualRange + 36e5 >=
+                { month: 28, year: 365 }[type] * day * count - offsetRange &&
+              actualRange - 36e5 <=
+                { month: 31, year: 366 }[type] * day * count + offsetRange
+            ) {
+              isSameRange = true;
+            } else if (type === "ytd") {
+              isSameRange = ytdMax - ytdMin + offsetRange === actualRange;
+              isYTDButNotSelected = !isSelected;
+            } else if (type === "all") {
+              isSameRange = baseAxis.max - baseAxis.min >= dataMax - dataMin;
+              isAllButAlreadyShowingAll =
+                !isSelected && selectedExists && isSameRange;
+            }
+            // The new zoom area happens to match the range for a button - mark
+            // it selected. This happens when scrolling across an ordinal gap.
+            // It can be seen in the intraday demos when selecting 1h and scroll
+            // across the night gap.
+            disable =
+              !allButtonsEnabled &&
+              (isTooGreatRange ||
+                isTooSmallRange ||
+                isAllButAlreadyShowingAll ||
+                hasNoData);
+            select =
+              (isSelected && isSameRange) ||
+              (isSameRange && !selectedExists && !isYTDButNotSelected) ||
+              (isSelected && rangeSelector.frozenStates);
+            if (disable) {
+              state = 3;
+            } else if (select) {
+              selectedExists = true; // Only one button can be selected
+              state = 2;
+            }
+            // If state has changed, update the button
+            if (button.state !== state) {
+              button.setState(state);
+              // Reset (#9209)
+              if (state === 0 && selected === i) {
+                rangeSelector.setSelected(null);
+              }
+            }
+          });
+        };
+        /**
+         * Compute and cache the range for an individual button
          *
-         * */
+         * @private
+         * @function Highcharts.RangeSelector#computeButtonRange
+         * @param {Highcharts.RangeSelectorButtonsOptions} rangeOptions
+         * @return {void}
+         */
+        RangeSelector.prototype.computeButtonRange = function (rangeOptions) {
+          var type = rangeOptions.type,
+            count = rangeOptions.count || 1,
+            // these time intervals have a fixed number of milliseconds, as
+            // opposed to month, ytd and year
+            fixedTimes = {
+              millisecond: 1,
+              second: 1000,
+              minute: 60 * 1000,
+              hour: 3600 * 1000,
+              day: 24 * 3600 * 1000,
+              week: 7 * 24 * 3600 * 1000,
+            };
+          // Store the range on the button object
+          if (fixedTimes[type]) {
+            rangeOptions._range = fixedTimes[type] * count;
+          } else if (type === "month" || type === "year") {
+            rangeOptions._range =
+              {
+                month: 30,
+                year: 365,
+              }[type] *
+              24 *
+              36e5 *
+              count;
+          }
+          rangeOptions._offsetMin = pick(rangeOptions.offsetMin, 0);
+          rangeOptions._offsetMax = pick(rangeOptions.offsetMax, 0);
+          rangeOptions._range +=
+            rangeOptions._offsetMax - rangeOptions._offsetMin;
+        };
         /**
-         * The default pathfinder algorithm to use for a chart. It is possible to define
-         * your own algorithms by adding them to the
-         * `Highcharts.Pathfinder.prototype.algorithms`
-         * object before the chart has been created.
+         * Set the internal and displayed value of a HTML input for the dates
          *
-         * The default algorithms are as follows:
-         *
-         * `straight`:      Draws a straight line between the connecting
-         *                  points. Does not avoid other points when drawing.
-         *
-         * `simpleConnect`: Finds a path between the points using right angles
-         *                  only. Takes only starting/ending points into
-         *                  account, and will not avoid other points.
-         *
-         * `fastAvoid`:     Finds a path between the points using right angles
-         *                  only. Will attempt to avoid other points, but its
-         *                  focus is performance over accuracy. Works well with
-         *                  less dense datasets.
+         * @private
+         * @function Highcharts.RangeSelector#setInputValue
+         * @param {string} name
+         * @param {number} [inputTime]
+         * @return {void}
+         */
+        RangeSelector.prototype.setInputValue = function (name, inputTime) {
+          var options = this.chart.options.rangeSelector,
+            time = this.chart.time,
+            input = this[name + "Input"];
+          if (defined(inputTime)) {
+            input.previousValue = input.HCTime;
+            input.HCTime = inputTime;
+          }
+          input.value = time.dateFormat(
+            options.inputEditDateFormat || "%Y-%m-%d",
+            input.HCTime
+          );
+          this[name + "DateBox"].attr({
+            text: time.dateFormat(
+              options.inputDateFormat || "%b %e, %Y",
+              input.HCTime
+            ),
+          });
+        };
+        /**
+         * @private
+         * @function Highcharts.RangeSelector#showInput
+         * @param {string} name
+         * @return {void}
+         */
+        RangeSelector.prototype.showInput = function (name) {
+          var inputGroup = this.inputGroup,
+            dateBox = this[name + "DateBox"];
+          css(this[name + "Input"], {
+            left: inputGroup.translateX + dateBox.x + "px",
+            top: inputGroup.translateY + "px",
+            width: dateBox.width - 2 + "px",
+            height: dateBox.height - 2 + "px",
+            border: "2px solid silver",
+          });
+        };
+        /**
+         * @private
+         * @function Highcharts.RangeSelector#hideInput
+         * @param {string} name
+         * @return {void}
+         */
+        RangeSelector.prototype.hideInput = function (name) {
+          css(this[name + "Input"], {
+            border: 0,
+            width: "1px",
+            height: "1px",
+          });
+          this.setInputValue(name);
+        };
+        /**
+         * @private
+         * @function Highcharts.RangeSelector#defaultInputDateParser
+         */
+        RangeSelector.prototype.defaultInputDateParser = function (
+          inputDate,
+          useUTC
+        ) {
+          var date = new Date();
+          if (H.isSafari) {
+            return Date.parse(inputDate.split(" ").join("T"));
+          }
+          if (useUTC) {
+            return Date.parse(inputDate + "Z");
+          }
+          return Date.parse(inputDate) - date.getTimezoneOffset() * 60 * 1000;
+        };
+        /**
+         * Draw either the 'from' or the 'to' HTML input box of the range selector
          *
-         * @typedef {"fastAvoid"|"simpleConnect"|"straight"|string} Highcharts.PathfinderTypeValue
+         * @private
+         * @function Highcharts.RangeSelector#drawInput
+         * @param {string} name
+         * @return {void}
          */
-        ''; // detach doclets above
-        var defaultOptions = O.defaultOptions;
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            error = U.error,
-            extend = U.extend,
-            merge = U.merge,
-            objectEach = U.objectEach,
-            pick = U.pick,
-            splat = U.splat;
-        var deg2rad = H.deg2rad,
-            max = Math.max,
-            min = Math.min;
-        /*
-         @todo:
-             - Document how to write your own algorithms
-             - Consider adding a Point.pathTo method that wraps creating a connection
-               and rendering it
-        */
-        // Set default Pathfinder options
-        extend(defaultOptions, {
-            /**
-             * The Pathfinder module allows you to define connections between any two
-             * points, represented as lines - optionally with markers for the start
-             * and/or end points. Multiple algorithms are available for calculating how
-             * the connecting lines are drawn.
-             *
-             * Connector functionality requires Highcharts Gantt to be loaded. In Gantt
-             * charts, the connectors are used to draw dependencies between tasks.
-             *
-             * @see [dependency](series.gantt.data.dependency)
-             *
-             * @sample gantt/pathfinder/demo
-             *         Pathfinder connections
-             *
-             * @declare      Highcharts.ConnectorsOptions
-             * @product      gantt
-             * @optionparent connectors
-             */
-            connectors: {
-                /**
-                 * Enable connectors for this chart. Requires Highcharts Gantt.
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @since     6.2.0
-                 * @apioption connectors.enabled
-                 */
-                /**
-                 * Set the default dash style for this chart's connecting lines.
-                 *
-                 * @type      {string}
-                 * @default   solid
-                 * @since     6.2.0
-                 * @apioption connectors.dashStyle
-                 */
-                /**
-                 * Set the default color for this chart's Pathfinder connecting lines.
-                 * Defaults to the color of the point being connected.
-                 *
-                 * @type      {Highcharts.ColorString}
-                 * @since     6.2.0
-                 * @apioption connectors.lineColor
-                 */
-                /**
-                 * Set the default pathfinder margin to use, in pixels. Some Pathfinder
-                 * algorithms attempt to avoid obstacles, such as other points in the
-                 * chart. These algorithms use this margin to determine how close lines
-                 * can be to an obstacle. The default is to compute this automatically
-                 * from the size of the obstacles in the chart.
-                 *
-                 * To draw connecting lines close to existing points, set this to a low
-                 * number. For more space around existing points, set this number
-                 * higher.
-                 *
-                 * @sample gantt/pathfinder/algorithm-margin
-                 *         Small algorithmMargin
-                 *
-                 * @type      {number}
-                 * @since     6.2.0
-                 * @apioption connectors.algorithmMargin
-                 */
-                /**
-                 * Set the default pathfinder algorithm to use for this chart. It is
-                 * possible to define your own algorithms by adding them to the
-                 * Highcharts.Pathfinder.prototype.algorithms object before the chart
-                 * has been created.
-                 *
-                 * The default algorithms are as follows:
-                 *
-                 * `straight`:      Draws a straight line between the connecting
-                 *                  points. Does not avoid other points when drawing.
-                 *
-                 * `simpleConnect`: Finds a path between the points using right angles
-                 *                  only. Takes only starting/ending points into
-                 *                  account, and will not avoid other points.
-                 *
-                 * `fastAvoid`:     Finds a path between the points using right angles
-                 *                  only. Will attempt to avoid other points, but its
-                 *                  focus is performance over accuracy. Works well with
-                 *                  less dense datasets.
-                 *
-                 * Default value: `straight` is used as default for most series types,
-                 * while `simpleConnect` is used as default for Gantt series, to show
-                 * dependencies between points.
-                 *
-                 * @sample gantt/pathfinder/demo
-                 *         Different types used
-                 *
-                 * @type    {Highcharts.PathfinderTypeValue}
-                 * @default undefined
-                 * @since   6.2.0
-                 */
-                type: 'straight',
-                /**
-                 * Set the default pixel width for this chart's Pathfinder connecting
-                 * lines.
-                 *
-                 * @since 6.2.0
-                 */
-                lineWidth: 1,
-                /**
-                 * Marker options for this chart's Pathfinder connectors. Note that
-                 * this option is overridden by the `startMarker` and `endMarker`
-                 * options.
-                 *
-                 * @declare Highcharts.ConnectorsMarkerOptions
-                 * @since   6.2.0
-                 */
-                marker: {
-                    /**
-                     * Set the radius of the connector markers. The default is
-                     * automatically computed based on the algorithmMargin setting.
-                     *
-                     * Setting marker.width and marker.height will override this
-                     * setting.
-                     *
-                     * @type      {number}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.radius
-                     */
-                    /**
-                     * Set the width of the connector markers. If not supplied, this
-                     * is inferred from the marker radius.
-                     *
-                     * @type      {number}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.width
-                     */
-                    /**
-                     * Set the height of the connector markers. If not supplied, this
-                     * is inferred from the marker radius.
-                     *
-                     * @type      {number}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.height
-                     */
-                    /**
-                     * Set the color of the connector markers. By default this is the
-                     * same as the connector color.
-                     *
-                     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.color
-                     */
-                    /**
-                     * Set the line/border color of the connector markers. By default
-                     * this is the same as the marker color.
-                     *
-                     * @type      {Highcharts.ColorString}
-                     * @since     6.2.0
-                     * @apioption connectors.marker.lineColor
-                     */
-                    /**
-                     * Enable markers for the connectors.
-                     */
-                    enabled: false,
-                    /**
-                     * Horizontal alignment of the markers relative to the points.
-                     *
-                     * @type {Highcharts.AlignValue}
-                     */
-                    align: 'center',
-                    /**
-                     * Vertical alignment of the markers relative to the points.
-                     *
-                     * @type {Highcharts.VerticalAlignValue}
-                     */
-                    verticalAlign: 'middle',
-                    /**
-                     * Whether or not to draw the markers inside the points.
-                     */
-                    inside: false,
-                    /**
-                     * Set the line/border width of the pathfinder markers.
-                     */
-                    lineWidth: 1
+        RangeSelector.prototype.drawInput = function (name) {
+          var rangeSelector = this,
+            chart = rangeSelector.chart,
+            chartStyle = chart.renderer.style || {},
+            renderer = chart.renderer,
+            options = chart.options.rangeSelector,
+            lang = defaultOptions.lang,
+            div = rangeSelector.div,
+            isMin = name === "min",
+            input,
+            label,
+            dateBox,
+            inputGroup = this.inputGroup,
+            defaultInputDateParser = this.defaultInputDateParser;
+          /**
+           * @private
+           */
+          function updateExtremes() {
+            var inputValue = input.value,
+              value,
+              chartAxis = chart.xAxis[0],
+              dataAxis =
+                chart.scroller && chart.scroller.xAxis
+                  ? chart.scroller.xAxis
+                  : chartAxis,
+              dataMin = dataAxis.dataMin,
+              dataMax = dataAxis.dataMax;
+            value = (options.inputDateParser || defaultInputDateParser)(
+              inputValue,
+              chart.time.useUTC
+            );
+            if (value !== input.previousValue) {
+              input.previousValue = value;
+              // If the value isn't parsed directly to a value by the
+              // browser's Date.parse method, like YYYY-MM-DD in IE, try
+              // parsing it a different way
+              if (!isNumber(value)) {
+                value = inputValue.split("-");
+                value = Date.UTC(
+                  pInt(value[0]),
+                  pInt(value[1]) - 1,
+                  pInt(value[2])
+                );
+              }
+              if (isNumber(value)) {
+                // Correct for timezone offset (#433)
+                if (!chart.time.useUTC) {
+                  value = value + new Date().getTimezoneOffset() * 60 * 1000;
+                }
+                // Validate the extremes. If it goes beyound the data min or
+                // max, use the actual data extreme (#2438).
+                if (isMin) {
+                  if (value > rangeSelector.maxInput.HCTime) {
+                    value = void 0;
+                  } else if (value < dataMin) {
+                    value = dataMin;
+                  }
+                } else {
+                  if (value < rangeSelector.minInput.HCTime) {
+                    value = void 0;
+                  } else if (value > dataMax) {
+                    value = dataMax;
+                  }
+                }
+                // Set the extremes
+                if (typeof value !== "undefined") {
+                  // @todo typof undefined
+                  chartAxis.setExtremes(
+                    isMin ? value : chartAxis.min,
+                    isMin ? chartAxis.max : value,
+                    void 0,
+                    void 0,
+                    { trigger: "rangeSelectorInput" }
+                  );
+                }
+              }
+            }
+          }
+          // Create the text label
+          this[name + "Label"] = label = renderer
+            .label(
+              lang[isMin ? "rangeSelectorFrom" : "rangeSelectorTo"],
+              this.inputGroup.offset
+            )
+            .addClass("highcharts-range-label")
+            .attr({
+              padding: 2,
+            })
+            .add(inputGroup);
+          inputGroup.offset += label.width + 5;
+          // Create an SVG label that shows updated date ranges and and records
+          // click events that bring in the HTML input.
+          this[name + "DateBox"] = dateBox = renderer
+            .label("", inputGroup.offset)
+            .addClass("highcharts-range-input")
+            .attr({
+              padding: 2,
+              width: options.inputBoxWidth || 90,
+              height: options.inputBoxHeight || 17,
+              "text-align": "center",
+            })
+            .on("click", function () {
+              // If it is already focused, the onfocus event doesn't fire
+              // (#3713)
+              rangeSelector.showInput(name);
+              rangeSelector[name + "Input"].focus();
+            });
+          if (!chart.styledMode) {
+            dateBox.attr({
+              stroke: options.inputBoxBorderColor || "#cccccc",
+              "stroke-width": 1,
+            });
+          }
+          dateBox.add(inputGroup);
+          inputGroup.offset += dateBox.width + (isMin ? 10 : 0);
+          // Create the HTML input element. This is rendered as 1x1 pixel then set
+          // to the right size when focused.
+          this[name + "Input"] = input = createElement(
+            "input",
+            {
+              name: name,
+              className: "highcharts-range-selector",
+              type: "text",
+            },
+            {
+              top: chart.plotTop + "px", // prevent jump on focus in Firefox
+            },
+            div
+          );
+          if (!chart.styledMode) {
+            // Styles
+            label.css(merge(chartStyle, options.labelStyle));
+            dateBox.css(
+              merge(
+                {
+                  color: "#333333",
                 },
-                /**
-                 * Marker options specific to the start markers for this chart's
-                 * Pathfinder connectors. Overrides the generic marker options.
-                 *
-                 * @declare Highcharts.ConnectorsStartMarkerOptions
-                 * @extends connectors.marker
-                 * @since   6.2.0
-                 */
-                startMarker: {
-                    /**
-                     * Set the symbol of the connector start markers.
-                     */
-                    symbol: 'diamond'
+                chartStyle,
+                options.inputStyle
+              )
+            );
+            css(
+              input,
+              extend(
+                {
+                  position: "absolute",
+                  border: 0,
+                  width: "1px",
+                  height: "1px",
+                  padding: 0,
+                  textAlign: "center",
+                  fontSize: chartStyle.fontSize,
+                  fontFamily: chartStyle.fontFamily,
+                  top: "-9999em", // #4798
                 },
-                /**
-                 * Marker options specific to the end markers for this chart's
-                 * Pathfinder connectors. Overrides the generic marker options.
-                 *
-                 * @declare Highcharts.ConnectorsEndMarkerOptions
-                 * @extends connectors.marker
-                 * @since   6.2.0
-                 */
-                endMarker: {
-                    /**
-                     * Set the symbol of the connector end markers.
-                     */
-                    symbol: 'arrow-filled'
-                }
+                options.inputStyle
+              )
+            );
+          }
+          // Blow up the input box
+          input.onfocus = function () {
+            rangeSelector.showInput(name);
+          };
+          // Hide away the input box
+          input.onblur = function () {
+            // update extermes only when inputs are active
+            if (input === H.doc.activeElement) {
+              // Only when focused
+              // Update also when no `change` event is triggered, like when
+              // clicking inside the SVG (#4710)
+              updateExtremes();
             }
-        });
+            // #10404 - move hide and blur outside focus
+            rangeSelector.hideInput(name);
+            input.blur(); // #4606
+          };
+          // handle changes in the input boxes
+          input.onchange = updateExtremes;
+          input.onkeypress = function (event) {
+            // IE does not fire onchange on enter
+            if (event.keyCode === 13) {
+              updateExtremes();
+            }
+          };
+        };
         /**
-         * Override Pathfinder connector options for a series. Requires Highcharts Gantt
-         * to be loaded.
+         * Get the position of the range selector buttons and inputs. This can be
+         * overridden from outside for custom positioning.
          *
-         * @declare   Highcharts.SeriesConnectorsOptionsObject
-         * @extends   connectors
-         * @since     6.2.0
-         * @excluding enabled, algorithmMargin
-         * @product   gantt
-         * @apioption plotOptions.series.connectors
+         * @private
+         * @function Highcharts.RangeSelector#getPosition
+         *
+         * @return {Highcharts.Dictionary<number>}
          */
+        RangeSelector.prototype.getPosition = function () {
+          var chart = this.chart,
+            options = chart.options.rangeSelector,
+            top =
+              options.verticalAlign === "top"
+                ? chart.plotTop - chart.axisOffset[0]
+                : 0; // set offset only for varticalAlign top
+          return {
+            buttonTop: top + options.buttonPosition.y,
+            inputTop: top + options.inputPosition.y - 10,
+          };
+        };
         /**
-         * Connect to a point. This option can be either a string, referring to the ID
-         * of another point, or an object, or an array of either. If the option is an
-         * array, each element defines a connection.
+         * Get the extremes of YTD. Will choose dataMax if its value is lower than
+         * the current timestamp. Will choose dataMin if its value is higher than
+         * the timestamp for the start of current year.
          *
-         * @sample gantt/pathfinder/demo
-         *         Different connection types
+         * @private
+         * @function Highcharts.RangeSelector#getYTDExtremes
          *
-         * @declare   Highcharts.XrangePointConnectorsOptionsObject
-         * @type      {string|Array<string|*>|*}
-         * @extends   plotOptions.series.connectors
-         * @since     6.2.0
-         * @excluding enabled
-         * @product   gantt
-         * @requires  highcharts-gantt
-         * @apioption series.xrange.data.connect
+         * @param {number} dataMax
+         *
+         * @param {number} dataMin
+         *
+         * @return {*}
+         *         Returns min and max for the YTD
          */
+        RangeSelector.prototype.getYTDExtremes = function (
+          dataMax,
+          dataMin,
+          useUTC
+        ) {
+          var time = this.chart.time,
+            min,
+            now = new time.Date(dataMax),
+            year = time.get("FullYear", now),
+            startOfYear = useUTC
+              ? time.Date.UTC(year, 0, 1) // eslint-disable-line new-cap
+              : +new time.Date(year, 0, 1);
+          min = Math.max(dataMin || 0, startOfYear);
+          now = now.getTime();
+          return {
+            max: Math.min(dataMax || now, now),
+            min: min,
+          };
+        };
         /**
-         * The ID of the point to connect to.
+         * Render the range selector including the buttons and the inputs. The first
+         * time render is called, the elements are created and positioned. On
+         * subsequent calls, they are moved and updated.
          *
-         * @type      {string}
-         * @since     6.2.0
-         * @product   gantt
-         * @apioption series.xrange.data.connect.to
+         * @private
+         * @function Highcharts.RangeSelector#render
+         * @param {number} [min]
+         *        X axis minimum
+         * @param {number} [max]
+         *        X axis maximum
+         * @return {void}
+         */
+        RangeSelector.prototype.render = function (min, max) {
+          var rangeSelector = this,
+            chart = rangeSelector.chart,
+            renderer = chart.renderer,
+            container = chart.container,
+            chartOptions = chart.options,
+            navButtonOptions =
+              chartOptions.exporting &&
+              chartOptions.exporting.enabled !== false &&
+              chartOptions.navigation &&
+              chartOptions.navigation.buttonOptions,
+            lang = defaultOptions.lang,
+            div = rangeSelector.div,
+            options = chartOptions.rangeSelector,
+            // Place inputs above the container
+            inputsZIndex =
+              pick(
+                chartOptions.chart.style && chartOptions.chart.style.zIndex,
+                0
+              ) + 1,
+            floating = options.floating,
+            buttons = rangeSelector.buttons,
+            inputGroup = rangeSelector.inputGroup,
+            buttonTheme = options.buttonTheme,
+            buttonPosition = options.buttonPosition,
+            inputPosition = options.inputPosition,
+            inputEnabled = options.inputEnabled,
+            states = buttonTheme && buttonTheme.states,
+            plotLeft = chart.plotLeft,
+            buttonLeft,
+            buttonGroup = rangeSelector.buttonGroup,
+            group,
+            groupHeight,
+            rendered = rangeSelector.rendered,
+            verticalAlign = rangeSelector.options.verticalAlign,
+            legend = chart.legend,
+            legendOptions = legend && legend.options,
+            buttonPositionY = buttonPosition.y,
+            inputPositionY = inputPosition.y,
+            animate = chart.hasLoaded,
+            verb = animate ? "animate" : "attr",
+            exportingX = 0,
+            alignTranslateY,
+            legendHeight,
+            minPosition,
+            translateY = 0,
+            translateX;
+          if (options.enabled === false) {
+            return;
+          }
+          // create the elements
+          if (!rendered) {
+            rangeSelector.group = group = renderer
+              .g("range-selector-group")
+              .attr({
+                zIndex: 7,
+              })
+              .add();
+            rangeSelector.buttonGroup = buttonGroup = renderer
+              .g("range-selector-buttons")
+              .add(group);
+            rangeSelector.zoomText = renderer
+              .text(lang.rangeSelectorZoom, 0, 15)
+              .add(buttonGroup);
+            if (!chart.styledMode) {
+              rangeSelector.zoomText.css(options.labelStyle);
+              buttonTheme["stroke-width"] = pick(
+                buttonTheme["stroke-width"],
+                0
+              );
+            }
+            rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
+              buttons[i] = renderer
+                .button(
+                  rangeOptions.text,
+                  0,
+                  0,
+                  function (e) {
+                    // extract events from button object and call
+                    var buttonEvents =
+                        rangeOptions.events && rangeOptions.events.click,
+                      callDefaultEvent;
+                    if (buttonEvents) {
+                      callDefaultEvent = buttonEvents.call(rangeOptions, e);
+                    }
+                    if (callDefaultEvent !== false) {
+                      rangeSelector.clickButton(i);
+                    }
+                    rangeSelector.isActive = true;
+                  },
+                  buttonTheme,
+                  states && states.hover,
+                  states && states.select,
+                  states && states.disabled
+                )
+                .attr({
+                  "text-align": "center",
+                })
+                .add(buttonGroup);
+            });
+            // first create a wrapper outside the container in order to make
+            // the inputs work and make export correct
+            if (inputEnabled !== false) {
+              rangeSelector.div = div = createElement("div", null, {
+                position: "relative",
+                height: 0,
+                zIndex: inputsZIndex,
+              });
+              container.parentNode.insertBefore(div, container);
+              // Create the group to keep the inputs
+              rangeSelector.inputGroup = inputGroup = renderer
+                .g("input-group")
+                .add(group);
+              inputGroup.offset = 0;
+              rangeSelector.drawInput("min");
+              rangeSelector.drawInput("max");
+            }
+          }
+          // #8769, allow dynamically updating margins
+          rangeSelector.zoomText[verb]({
+            x: pick(plotLeft + buttonPosition.x, plotLeft),
+          });
+          // button start position
+          buttonLeft =
+            pick(plotLeft + buttonPosition.x, plotLeft) +
+            rangeSelector.zoomText.getBBox().width +
+            5;
+          rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
+            buttons[i][verb]({ x: buttonLeft });
+            // increase button position for the next button
+            buttonLeft += buttons[i].width + pick(options.buttonSpacing, 5);
+          });
+          plotLeft = chart.plotLeft - chart.spacing[3];
+          rangeSelector.updateButtonStates();
+          // detect collisiton with exporting
+          if (
+            navButtonOptions &&
+            this.titleCollision(chart) &&
+            verticalAlign === "top" &&
+            buttonPosition.align === "right" &&
+            buttonPosition.y + buttonGroup.getBBox().height - 12 <
+              (navButtonOptions.y || 0) + navButtonOptions.height
+          ) {
+            exportingX = -40;
+          }
+          translateX = buttonPosition.x - chart.spacing[3];
+          if (buttonPosition.align === "right") {
+            translateX += exportingX - plotLeft; // (#13014)
+          } else if (buttonPosition.align === "center") {
+            translateX -= plotLeft / 2;
+          }
+          // align button group
+          buttonGroup.align(
+            {
+              y: buttonPosition.y,
+              width: buttonGroup.getBBox().width,
+              align: buttonPosition.align,
+              x: translateX,
+            },
+            true,
+            chart.spacingBox
+          );
+          // skip animation
+          rangeSelector.group.placed = animate;
+          rangeSelector.buttonGroup.placed = animate;
+          if (inputEnabled !== false) {
+            var inputGroupX, inputGroupWidth, buttonGroupX, buttonGroupWidth;
+            // detect collision with exporting
+            if (
+              navButtonOptions &&
+              this.titleCollision(chart) &&
+              verticalAlign === "top" &&
+              inputPosition.align === "right" &&
+              inputPosition.y - inputGroup.getBBox().height - 12 <
+                (navButtonOptions.y || 0) +
+                  navButtonOptions.height +
+                  chart.spacing[0]
+            ) {
+              exportingX = -40;
+            } else {
+              exportingX = 0;
+            }
+            if (inputPosition.align === "left") {
+              translateX = plotLeft;
+            } else if (inputPosition.align === "right") {
+              translateX = -Math.max(chart.axisOffset[1], -exportingX);
+            }
+            // Update the alignment to the updated spacing box
+            inputGroup.align(
+              {
+                y: inputPosition.y,
+                width: inputGroup.getBBox().width,
+                align: inputPosition.align,
+                // fix wrong getBBox() value on right align
+                x: inputPosition.x + translateX - 2,
+              },
+              true,
+              chart.spacingBox
+            );
+            // detect collision
+            inputGroupX =
+              inputGroup.alignAttr.translateX +
+              inputGroup.alignOptions.x -
+              exportingX +
+              // getBBox for detecing left margin
+              inputGroup.getBBox().x +
+              // 2px padding to not overlap input and label
+              2;
+            inputGroupWidth = inputGroup.alignOptions.width;
+            buttonGroupX =
+              buttonGroup.alignAttr.translateX + buttonGroup.getBBox().x;
+            // 20 is minimal spacing between elements
+            buttonGroupWidth = buttonGroup.getBBox().width + 20;
+            if (
+              inputPosition.align === buttonPosition.align ||
+              (buttonGroupX + buttonGroupWidth > inputGroupX &&
+                inputGroupX + inputGroupWidth > buttonGroupX &&
+                buttonPositionY < inputPositionY + inputGroup.getBBox().height)
+            ) {
+              inputGroup.attr({
+                translateX:
+                  inputGroup.alignAttr.translateX +
+                  (chart.axisOffset[1] >= -exportingX ? 0 : -exportingX),
+                translateY:
+                  inputGroup.alignAttr.translateY +
+                  buttonGroup.getBBox().height +
+                  10,
+              });
+            }
+            // Set or reset the input values
+            rangeSelector.setInputValue("min", min);
+            rangeSelector.setInputValue("max", max);
+            // skip animation
+            rangeSelector.inputGroup.placed = animate;
+          }
+          // vertical align
+          rangeSelector.group.align(
+            {
+              verticalAlign: verticalAlign,
+            },
+            true,
+            chart.spacingBox
+          );
+          // set position
+          groupHeight = rangeSelector.group.getBBox().height + 20; // # 20 padding
+          alignTranslateY = rangeSelector.group.alignAttr.translateY;
+          // calculate bottom position
+          if (verticalAlign === "bottom") {
+            legendHeight =
+              legendOptions &&
+              legendOptions.verticalAlign === "bottom" &&
+              legendOptions.enabled &&
+              !legendOptions.floating
+                ? legend.legendHeight + pick(legendOptions.margin, 10)
+                : 0;
+            groupHeight = groupHeight + legendHeight - 20;
+            translateY =
+              alignTranslateY -
+              groupHeight -
+              (floating ? 0 : options.y) -
+              (chart.titleOffset ? chart.titleOffset[2] : 0) -
+              10; // 10 spacing
+          }
+          if (verticalAlign === "top") {
+            if (floating) {
+              translateY = 0;
+            }
+            if (chart.titleOffset && chart.titleOffset[0]) {
+              translateY = chart.titleOffset[0];
+            }
+            translateY += chart.margin[0] - chart.spacing[0] || 0;
+          } else if (verticalAlign === "middle") {
+            if (inputPositionY === buttonPositionY) {
+              if (inputPositionY < 0) {
+                translateY = alignTranslateY + minPosition;
+              } else {
+                translateY = alignTranslateY;
+              }
+            } else if (inputPositionY || buttonPositionY) {
+              if (inputPositionY < 0 || buttonPositionY < 0) {
+                translateY -= Math.min(inputPositionY, buttonPositionY);
+              } else {
+                translateY = alignTranslateY - groupHeight + minPosition;
+              }
+            }
+          }
+          rangeSelector.group.translate(
+            options.x,
+            options.y + Math.floor(translateY)
+          );
+          // translate HTML inputs
+          if (inputEnabled !== false) {
+            rangeSelector.minInput.style.marginTop =
+              rangeSelector.group.translateY + "px";
+            rangeSelector.maxInput.style.marginTop =
+              rangeSelector.group.translateY + "px";
+          }
+          rangeSelector.rendered = true;
+        };
+        /**
+         * Extracts height of range selector
+         *
+         * @private
+         * @function Highcharts.RangeSelector#getHeight
+         * @return {number}
+         *         Returns rangeSelector height
          */
+        RangeSelector.prototype.getHeight = function () {
+          var rangeSelector = this,
+            options = rangeSelector.options,
+            rangeSelectorGroup = rangeSelector.group,
+            inputPosition = options.inputPosition,
+            buttonPosition = options.buttonPosition,
+            yPosition = options.y,
+            buttonPositionY = buttonPosition.y,
+            inputPositionY = inputPosition.y,
+            rangeSelectorHeight = 0,
+            minPosition;
+          if (options.height) {
+            return options.height;
+          }
+          rangeSelectorHeight = rangeSelectorGroup
+            ? // 13px to keep back compatibility
+              rangeSelectorGroup.getBBox(true).height + 13 + yPosition
+            : 0;
+          minPosition = Math.min(inputPositionY, buttonPositionY);
+          if (
+            (inputPositionY < 0 && buttonPositionY < 0) ||
+            (inputPositionY > 0 && buttonPositionY > 0)
+          ) {
+            rangeSelectorHeight += Math.abs(minPosition);
+          }
+          return rangeSelectorHeight;
+        };
         /**
-         * Get point bounding box using plotX/plotY and shapeArgs. If using
-         * graphic.getBBox() directly, the bbox will be affected by animation.
+         * Detect collision with title or subtitle
          *
          * @private
-         * @function
+         * @function Highcharts.RangeSelector#titleCollision
          *
-         * @param {Highcharts.Point} point
-         *        The point to get BB of.
+         * @param {Highcharts.Chart} chart
          *
-         * @return {Highcharts.Dictionary<number>|null}
-         *         Result xMax, xMin, yMax, yMin.
+         * @return {boolean}
+         *         Returns collision status
          */
-        function getPointBB(point) {
-            var shapeArgs = point.shapeArgs,
-                bb;
-            // Prefer using shapeArgs (columns)
-            if (shapeArgs) {
-                return {
-                    xMin: shapeArgs.x,
-                    xMax: shapeArgs.x + shapeArgs.width,
-                    yMin: shapeArgs.y,
-                    yMax: shapeArgs.y + shapeArgs.height
-                };
-            }
-            // Otherwise use plotX/plotY and bb
-            bb = point.graphic && point.graphic.getBBox();
-            return bb ? {
-                xMin: point.plotX - bb.width / 2,
-                xMax: point.plotX + bb.width / 2,
-                yMin: point.plotY - bb.height / 2,
-                yMax: point.plotY + bb.height / 2
-            } : null;
-        }
+        RangeSelector.prototype.titleCollision = function (chart) {
+          return !(chart.options.title.text || chart.options.subtitle.text);
+        };
         /**
-         * Calculate margin to place around obstacles for the pathfinder in pixels.
-         * Returns a minimum of 1 pixel margin.
+         * Update the range selector with new options
          *
          * @private
-         * @function
-         *
-         * @param {Array<object>} obstacles
-         *        Obstacles to calculate margin from.
+         * @function Highcharts.RangeSelector#update
+         * @param {Highcharts.RangeSelectorOptions} options
+         * @return {void}
+         */
+        RangeSelector.prototype.update = function (options) {
+          var chart = this.chart;
+          merge(true, chart.options.rangeSelector, options);
+          this.destroy();
+          this.init(chart);
+          chart.rangeSelector.render();
+        };
+        /**
+         * Destroys allocated elements.
          *
-         * @return {number}
-         *         The calculated margin in pixels. At least 1.
+         * @private
+         * @function Highcharts.RangeSelector#destroy
          */
-        function calculateObstacleMargin(obstacles) {
-            var len = obstacles.length,
-                i = 0,
-                j,
-                obstacleDistance,
-                distances = [], 
-                // Compute smallest distance between two rectangles
-                distance = function (a,
-                b,
-                bbMargin) {
-                    // Count the distance even if we are slightly off
-                    var margin = pick(bbMargin, 10),
-                yOverlap = a.yMax + margin > b.yMin - margin &&
-                        a.yMin - margin < b.yMax + margin,
-                xOverlap = a.xMax + margin > b.xMin - margin &&
-                        a.xMin - margin < b.xMax + margin,
-                xDistance = yOverlap ? (a.xMin > b.xMax ? a.xMin - b.xMax : b.xMin - a.xMax) : Infinity,
-                yDistance = xOverlap ? (a.yMin > b.yMax ? a.yMin - b.yMax : b.yMin - a.yMax) : Infinity;
-                // If the rectangles collide, try recomputing with smaller margin.
-                // If they collide anyway, discard the obstacle.
-                if (xOverlap && yOverlap) {
-                    return (margin ?
-                        distance(a, b, Math.floor(margin / 2)) :
-                        Infinity);
-                }
-                return min(xDistance, yDistance);
-            };
-            // Go over all obstacles and compare them to the others.
-            for (; i < len; ++i) {
-                // Compare to all obstacles ahead. We will already have compared this
-                // obstacle to the ones before.
-                for (j = i + 1; j < len; ++j) {
-                    obstacleDistance = distance(obstacles[i], obstacles[j]);
-                    // TODO: Magic number 80
-                    if (obstacleDistance < 80) { // Ignore large distances
-                        distances.push(obstacleDistance);
-                    }
-                }
+        RangeSelector.prototype.destroy = function () {
+          var rSelector = this,
+            minInput = rSelector.minInput,
+            maxInput = rSelector.maxInput;
+          rSelector.unMouseDown();
+          rSelector.unResize();
+          // Destroy elements in collections
+          destroyObjectProperties(rSelector.buttons);
+          // Clear input element events
+          if (minInput) {
+            minInput.onfocus = minInput.onblur = minInput.onchange = null;
+          }
+          if (maxInput) {
+            maxInput.onfocus = maxInput.onblur = maxInput.onchange = null;
+          }
+          // Destroy HTML and SVG elements
+          objectEach(
+            rSelector,
+            function (val, key) {
+              if (val && key !== "chart") {
+                if (val instanceof SVGElement) {
+                  // SVGElement
+                  val.destroy();
+                } else if (val instanceof window.HTMLElement) {
+                  // HTML element
+                  discardElement(val);
+                }
+              }
+              if (val !== RangeSelector.prototype[key]) {
+                rSelector[key] = null;
+              }
+            },
+            this
+          );
+        };
+        return RangeSelector;
+      })();
+      /**
+       * The default buttons for pre-selecting time frames
+       */
+      RangeSelector.prototype.defaultButtons = [
+        {
+          type: "month",
+          count: 1,
+          text: "1m",
+        },
+        {
+          type: "month",
+          count: 3,
+          text: "3m",
+        },
+        {
+          type: "month",
+          count: 6,
+          text: "6m",
+        },
+        {
+          type: "ytd",
+          text: "YTD",
+        },
+        {
+          type: "year",
+          count: 1,
+          text: "1y",
+        },
+        {
+          type: "all",
+          text: "All",
+        },
+      ];
+      /**
+       * Get the axis min value based on the range option and the current max. For
+       * stock charts this is extended via the {@link RangeSelector} so that if the
+       * selected range is a multiple of months or years, it is compensated for
+       * various month lengths.
+       *
+       * @private
+       * @function Highcharts.Axis#minFromRange
+       * @return {number|undefined}
+       *         The new minimum value.
+       */
+      Axis.prototype.minFromRange = function () {
+        var rangeOptions = this.range,
+          type = rangeOptions.type,
+          min,
+          max = this.max,
+          dataMin,
+          range,
+          time = this.chart.time,
+          // Get the true range from a start date
+          getTrueRange = function (base, count) {
+            var timeName = type === "year" ? "FullYear" : "Month";
+            var date = new time.Date(base);
+            var basePeriod = time.get(timeName, date);
+            time.set(timeName, date, basePeriod + count);
+            if (basePeriod === time.get(timeName, date)) {
+              time.set("Date", date, 0); // #6537
             }
-            // Ensure we always have at least one value, even in very spaceous charts
-            distances.push(80);
-            return max(Math.floor(distances.sort(function (a, b) {
-                return (a - b);
-            })[
-            // Discard first 10% of the relevant distances, and then grab
-            // the smallest one.
-            Math.floor(distances.length / 10)] / 2 - 1 // Divide the distance by 2 and subtract 1.
-            ), 1 // 1 is the minimum margin
+            return date.getTime() - base;
+          };
+        if (isNumber(rangeOptions)) {
+          min = max - rangeOptions;
+          range = rangeOptions;
+        } else {
+          min = max + getTrueRange(max, -rangeOptions.count);
+          // Let the fixedRange reflect initial settings (#5930)
+          if (this.chart) {
+            this.chart.fixedRange = max - min;
+          }
+        }
+        dataMin = pick(this.dataMin, Number.MIN_VALUE);
+        if (!isNumber(min)) {
+          min = dataMin;
+        }
+        if (min <= dataMin) {
+          min = dataMin;
+          if (typeof range === "undefined") {
+            // #4501
+            range = getTrueRange(min, rangeOptions.count);
+          }
+          this.newMax = Math.min(min + range, this.dataMax);
+        }
+        if (!isNumber(max)) {
+          min = void 0;
+        }
+        return min;
+      };
+      if (!H.RangeSelector) {
+        // Initialize rangeselector for stock charts
+        addEvent(Chart, "afterGetContainer", function () {
+          if (this.options.rangeSelector.enabled) {
+            this.rangeSelector = new RangeSelector(this);
+          }
+        });
+        addEvent(Chart, "beforeRender", function () {
+          var chart = this,
+            axes = chart.axes,
+            rangeSelector = chart.rangeSelector,
+            verticalAlign;
+          if (rangeSelector) {
+            if (isNumber(rangeSelector.deferredYTDClick)) {
+              rangeSelector.clickButton(rangeSelector.deferredYTDClick);
+              delete rangeSelector.deferredYTDClick;
+            }
+            axes.forEach(function (axis) {
+              axis.updateNames();
+              axis.setScale();
+            });
+            chart.getAxisMargins();
+            rangeSelector.render();
+            verticalAlign = rangeSelector.options.verticalAlign;
+            if (!rangeSelector.options.floating) {
+              if (verticalAlign === "bottom") {
+                this.extraBottomMargin = true;
+              } else if (verticalAlign !== "middle") {
+                this.extraTopMargin = true;
+              }
+            }
+          }
+        });
+        addEvent(Chart, "update", function (e) {
+          var chart = this,
+            options = e.options,
+            optionsRangeSelector = options.rangeSelector,
+            rangeSelector = chart.rangeSelector,
+            verticalAlign,
+            extraBottomMarginWas = this.extraBottomMargin,
+            extraTopMarginWas = this.extraTopMargin;
+          if (
+            optionsRangeSelector &&
+            optionsRangeSelector.enabled &&
+            !defined(rangeSelector)
+          ) {
+            this.options.rangeSelector.enabled = true;
+            this.rangeSelector = new RangeSelector(this);
+          }
+          this.extraBottomMargin = false;
+          this.extraTopMargin = false;
+          if (rangeSelector) {
+            rangeSelector.render();
+            verticalAlign =
+              (optionsRangeSelector && optionsRangeSelector.verticalAlign) ||
+              (rangeSelector.options && rangeSelector.options.verticalAlign);
+            if (!rangeSelector.options.floating) {
+              if (verticalAlign === "bottom") {
+                this.extraBottomMargin = true;
+              } else if (verticalAlign !== "middle") {
+                this.extraTopMargin = true;
+              }
+            }
+            if (
+              this.extraBottomMargin !== extraBottomMarginWas ||
+              this.extraTopMargin !== extraTopMarginWas
+            ) {
+              this.isDirtyBox = true;
+            }
+          }
+        });
+        addEvent(Chart, "render", function () {
+          var chart = this,
+            rangeSelector = chart.rangeSelector,
+            verticalAlign;
+          if (rangeSelector && !rangeSelector.options.floating) {
+            rangeSelector.render();
+            verticalAlign = rangeSelector.options.verticalAlign;
+            if (verticalAlign === "bottom") {
+              this.extraBottomMargin = true;
+            } else if (verticalAlign !== "middle") {
+              this.extraTopMargin = true;
+            }
+          }
+        });
+        addEvent(Chart, "getMargins", function () {
+          var rangeSelector = this.rangeSelector,
+            rangeSelectorHeight;
+          if (rangeSelector) {
+            rangeSelectorHeight = rangeSelector.getHeight();
+            if (this.extraTopMargin) {
+              this.plotTop += rangeSelectorHeight;
+            }
+            if (this.extraBottomMargin) {
+              this.marginBottom += rangeSelectorHeight;
+            }
+          }
+        });
+        Chart.prototype.callbacks.push(function (chart) {
+          var extremes,
+            rangeSelector = chart.rangeSelector,
+            unbindRender,
+            unbindSetExtremes,
+            legend,
+            alignTo,
+            verticalAlign;
+          /**
+           * @private
+           */
+          function renderRangeSelector() {
+            extremes = chart.xAxis[0].getExtremes();
+            legend = chart.legend;
+            verticalAlign =
+              rangeSelector === null || rangeSelector === void 0
+                ? void 0
+                : rangeSelector.options.verticalAlign;
+            if (isNumber(extremes.min)) {
+              rangeSelector.render(extremes.min, extremes.max);
+            }
+            // Re-align the legend so that it's below the rangeselector
+            if (
+              rangeSelector &&
+              legend.display &&
+              verticalAlign === "top" &&
+              verticalAlign === legend.options.verticalAlign
+            ) {
+              // Create a new alignment box for the legend.
+              alignTo = merge(chart.spacingBox);
+              if (legend.options.layout === "vertical") {
+                alignTo.y = chart.plotTop;
+              } else {
+                alignTo.y += rangeSelector.getHeight();
+              }
+              legend.group.placed = false; // Don't animate the alignment.
+              legend.align(alignTo);
+            }
+          }
+          if (rangeSelector) {
+            // redraw the scroller on setExtremes
+            unbindSetExtremes = addEvent(
+              chart.xAxis[0],
+              "afterSetExtremes",
+              function (e) {
+                rangeSelector.render(e.min, e.max);
+              }
             );
+            // redraw the scroller chart resize
+            unbindRender = addEvent(chart, "redraw", renderRangeSelector);
+            // do it now
+            renderRangeSelector();
+          }
+          // Remove resize/afterSetExtremes at chart destroy
+          addEvent(chart, "destroy", function destroyEvents() {
+            if (rangeSelector) {
+              unbindRender();
+              unbindSetExtremes();
+            }
+          });
+        });
+        H.RangeSelector = RangeSelector;
+      }
+
+      return H.RangeSelector;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/NavigatorAxis.js",
+    [_modules["Core/Globals.js"], _modules["Core/Utilities.js"]],
+    function (H, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var isTouchDevice = H.isTouchDevice;
+      var addEvent = U.addEvent,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        isNumber = U.isNumber,
+        pick = U.pick;
+      /* eslint-disable valid-jsdoc */
+      /**
+       * @private
+       * @class
+       */
+      var NavigatorAxisAdditions = /** @class */ (function () {
+        /* *
+         *
+         *  Constructors
+         *
+         * */
+        function NavigatorAxisAdditions(axis) {
+          this.axis = axis;
         }
-        /* eslint-disable no-invalid-this, valid-jsdoc */
+        /* *
+         *
+         *  Functions
+         *
+         * */
+        /**
+         * @private
+         */
+        NavigatorAxisAdditions.prototype.destroy = function () {
+          this.axis = void 0;
+        };
         /**
-         * The Pathfinder class.
+         * Add logic to normalize the zoomed range in order to preserve the pressed
+         * state of range selector buttons
          *
          * @private
-         * @class
-         * @name Highcharts.Pathfinder
+         * @function Highcharts.Axis#toFixedRange
+         * @param {number} [pxMin]
+         * @param {number} [pxMax]
+         * @param {number} [fixedMin]
+         * @param {number} [fixedMax]
+         * @return {*}
+         */
+        NavigatorAxisAdditions.prototype.toFixedRange = function (
+          pxMin,
+          pxMax,
+          fixedMin,
+          fixedMax
+        ) {
+          var navigator = this;
+          var axis = navigator.axis;
+          var chart = axis.chart;
+          var fixedRange = chart && chart.fixedRange,
+            halfPointRange = (axis.pointRange || 0) / 2,
+            newMin = pick(fixedMin, axis.translate(pxMin, true, !axis.horiz)),
+            newMax = pick(fixedMax, axis.translate(pxMax, true, !axis.horiz)),
+            changeRatio = fixedRange && (newMax - newMin) / fixedRange;
+          // Add/remove half point range to/from the extremes (#1172)
+          if (!defined(fixedMin)) {
+            newMin = correctFloat(newMin + halfPointRange);
+          }
+          if (!defined(fixedMax)) {
+            newMax = correctFloat(newMax - halfPointRange);
+          }
+          // If the difference between the fixed range and the actual requested
+          // range is too great, the user is dragging across an ordinal gap, and
+          // we need to release the range selector button.
+          if (changeRatio > 0.7 && changeRatio < 1.3) {
+            if (fixedMax) {
+              newMin = newMax - fixedRange;
+            } else {
+              newMax = newMin + fixedRange;
+            }
+          }
+          if (!isNumber(newMin) || !isNumber(newMax)) {
+            // #1195, #7411
+            newMin = newMax = void 0;
+          }
+          return {
+            min: newMin,
+            max: newMax,
+          };
+        };
+        return NavigatorAxisAdditions;
+      })();
+      /**
+       * @private
+       * @class
+       */
+      var NavigatorAxis = /** @class */ (function () {
+        function NavigatorAxis() {}
+        /* *
          *
-         * @param {Highcharts.Chart} chart
-         *        The chart to operate on.
+         *  Static Functions
+         *
+         * */
+        /**
+         * @private
          */
-        var Pathfinder = /** @class */ (function () {
-                function Pathfinder(chart) {
-                    /* *
-                     *
-                     * Properties
-                     *
-                     * */
-                    this.chart = void 0;
-                this.chartObstacles = void 0;
-                this.chartObstacleMetrics = void 0;
-                this.connections = void 0;
-                this.group = void 0;
-                this.lineObstacles = void 0;
-                this.init(chart);
+        NavigatorAxis.compose = function (AxisClass) {
+          AxisClass.keepProps.push("navigatorAxis");
+          /* eslint-disable no-invalid-this */
+          addEvent(AxisClass, "init", function () {
+            var axis = this;
+            if (!axis.navigatorAxis) {
+              axis.navigatorAxis = new NavigatorAxisAdditions(axis);
+            }
+          });
+          // For Stock charts, override selection zooming with some special
+          // features because X axis zooming is already allowed by the Navigator
+          // and Range selector.
+          addEvent(AxisClass, "zoom", function (e) {
+            var axis = this;
+            var chart = axis.chart;
+            var chartOptions = chart.options;
+            var navigator = chartOptions.navigator;
+            var navigatorAxis = axis.navigatorAxis;
+            var pinchType = chartOptions.chart.pinchType;
+            var rangeSelector = chartOptions.rangeSelector;
+            var zoomType = chartOptions.chart.zoomType;
+            var previousZoom;
+            if (
+              axis.isXAxis &&
+              ((navigator && navigator.enabled) ||
+                (rangeSelector && rangeSelector.enabled))
+            ) {
+              // For y only zooming, ignore the X axis completely
+              if (zoomType === "y") {
+                e.zoomed = false;
+                // For xy zooming, record the state of the zoom before zoom
+                // selection, then when the reset button is pressed, revert to
+                // this state. This should apply only if the chart is
+                // initialized with a range (#6612), otherwise zoom all the way
+                // out.
+              } else if (
+                ((!isTouchDevice && zoomType === "xy") ||
+                  (isTouchDevice && pinchType === "xy")) &&
+                axis.options.range
+              ) {
+                previousZoom = navigatorAxis.previousZoom;
+                if (defined(e.newMin)) {
+                  navigatorAxis.previousZoom = [axis.min, axis.max];
+                } else if (previousZoom) {
+                  e.newMin = previousZoom[0];
+                  e.newMax = previousZoom[1];
+                  navigatorAxis.previousZoom = void 0;
+                }
+              }
+            }
+            if (typeof e.zoomed !== "undefined") {
+              e.preventDefault();
             }
+          });
+          /* eslint-enable no-invalid-this */
+        };
+        /* *
+         *
+         *  Static Properties
+         *
+         * */
+        /**
+         * @private
+         */
+        NavigatorAxis.AdditionsClass = NavigatorAxisAdditions;
+        return NavigatorAxis;
+      })();
+
+      return NavigatorAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Navigator.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Series/Series.js"],
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Color/Color.js"],
+      _modules["Core/Globals.js"],
+      _modules["Series/LineSeries.js"],
+      _modules["Core/Axis/NavigatorAxis.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Scrollbar.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (
+      Axis,
+      BaseSeries,
+      Chart,
+      Color,
+      H,
+      LineSeries,
+      NavigatorAxis,
+      O,
+      Scrollbar,
+      U
+    ) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var seriesTypes = BaseSeries.seriesTypes;
+      var color = Color.parse;
+      var hasTouch = H.hasTouch,
+        isTouchDevice = H.isTouchDevice;
+      var defaultOptions = O.defaultOptions;
+      var addEvent = U.addEvent,
+        clamp = U.clamp,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        destroyObjectProperties = U.destroyObjectProperties,
+        erase = U.erase,
+        extend = U.extend,
+        find = U.find,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        pick = U.pick,
+        removeEvent = U.removeEvent,
+        splat = U.splat;
+      var defaultSeriesType,
+        // Finding the min or max of a set of variables where we don't know if they
+        // are defined, is a pattern that is repeated several places in Highcharts.
+        // Consider making this a global utility method.
+        numExt = function (extreme) {
+          var args = [];
+          for (var _i = 1; _i < arguments.length; _i++) {
+            args[_i - 1] = arguments[_i];
+          }
+          var numbers = [].filter.call(args, isNumber);
+          if (numbers.length) {
+            return Math[extreme].apply(0, numbers);
+          }
+        };
+      defaultSeriesType =
+        typeof seriesTypes.areaspline === "undefined" ? "line" : "areaspline";
+      extend(defaultOptions, {
+        /**
+         * Maximum range which can be set using the navigator's handles.
+         * Opposite of [xAxis.minRange](#xAxis.minRange).
+         *
+         * @sample {highstock} stock/navigator/maxrange/
+         *         Defined max and min range
+         *
+         * @type      {number}
+         * @since     6.0.0
+         * @product   highstock gantt
+         * @apioption xAxis.maxRange
+         */
+        /**
+         * The navigator is a small series below the main series, displaying
+         * a view of the entire data set. It provides tools to zoom in and
+         * out on parts of the data as well as panning across the dataset.
+         *
+         * @product      highstock gantt
+         * @optionparent navigator
+         */
+        navigator: {
+          /**
+           * Whether the navigator and scrollbar should adapt to updated data
+           * in the base X axis. When loading data async, as in the demo below,
+           * this should be `false`. Otherwise new data will trigger navigator
+           * redraw, which will cause unwanted looping. In the demo below, the
+           * data in the navigator is set only once. On navigating, only the main
+           * chart content is updated.
+           *
+           * @sample {highstock} stock/demo/lazy-loading/
+           *         Set to false with async data loading
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption navigator.adaptToUpdatedData
+           */
+          /**
+           * An integer identifying the index to use for the base series, or a
+           * string representing the id of the series.
+           *
+           * **Note**: As of Highcharts 5.0, this is now a deprecated option.
+           * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).
+           *
+           * @see [series.showInNavigator](#plotOptions.series.showInNavigator)
+           *
+           * @deprecated
+           * @type      {number|string}
+           * @default   0
+           * @apioption navigator.baseSeries
+           */
+          /**
+           * Enable or disable the navigator.
+           *
+           * @sample {highstock} stock/navigator/enabled/
+           *         Disable the navigator
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption navigator.enabled
+           */
+          /**
+           * When the chart is inverted, whether to draw the navigator on the
+           * opposite side.
+           *
+           * @type      {boolean}
+           * @default   false
+           * @since     5.0.8
+           * @apioption navigator.opposite
+           */
+          /**
+           * The height of the navigator.
+           *
+           * @sample {highstock} stock/navigator/height/
+           *         A higher navigator
+           */
+          height: 40,
+          /**
+           * The distance from the nearest element, the X axis or X axis labels.
+           *
+           * @sample {highstock} stock/navigator/margin/
+           *         A margin of 2 draws the navigator closer to the X axis labels
+           */
+          margin: 25,
+          /**
+           * Whether the mask should be inside the range marking the zoomed
+           * range, or outside. In Highstock 1.x it was always `false`.
+           *
+           * @sample {highstock} stock/navigator/maskinside-false/
+           *         False, mask outside
+           *
+           * @since   2.0
+           */
+          maskInside: true,
+          /**
+           * Options for the handles for dragging the zoomed area.
+           *
+           * @sample {highstock} stock/navigator/handles/
+           *         Colored handles
+           */
+          handles: {
+            /**
+             * Width for handles.
+             *
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
+             *
+             * @since   6.0.0
+             */
+            width: 7,
+            /**
+             * Height for handles.
+             *
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
+             *
+             * @since   6.0.0
+             */
+            height: 15,
+            /**
+             * Array to define shapes of handles. 0-index for left, 1-index for
+             * right.
+             *
+             * Additionally, the URL to a graphic can be given on this form:
+             * `url(graphic.png)`. Note that for the image to be applied to
+             * exported charts, its URL needs to be accessible by the export
+             * server.
+             *
+             * Custom callbacks for symbol path generation can also be added to
+             * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then
+             * used by its method name, as shown in the demo.
+             *
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
+             *
+             * @type    {Array<string>}
+             * @default ["navigator-handle", "navigator-handle"]
+             * @since   6.0.0
+             */
+            symbols: ["navigator-handle", "navigator-handle"],
+            /**
+             * Allows to enable/disable handles.
+             *
+             * @since   6.0.0
+             */
+            enabled: true,
+            /**
+             * The width for the handle border and the stripes inside.
+             *
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
+             *
+             * @since     6.0.0
+             * @apioption navigator.handles.lineWidth
+             */
+            lineWidth: 1,
+            /**
+             * The fill for the handle.
+             *
+             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+             */
+            backgroundColor: "#f2f2f2",
+            /**
+             * The stroke for the handle border and the stripes inside.
+             *
+             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+             */
+            borderColor: "#999999",
+          },
+          /**
+           * The color of the mask covering the areas of the navigator series
+           * that are currently not visible in the main series. The default
+           * color is bluish with an opacity of 0.3 to see the series below.
+           *
+           * @see In styled mode, the mask is styled with the
+           *      `.highcharts-navigator-mask` and
+           *      `.highcharts-navigator-mask-inside` classes.
+           *
+           * @sample {highstock} stock/navigator/maskfill/
+           *         Blue, semi transparent mask
+           *
+           * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @default rgba(102,133,194,0.3)
+           */
+          maskFill: color("#6685c2").setOpacity(0.3).get(),
+          /**
+           * The color of the line marking the currently zoomed area in the
+           * navigator.
+           *
+           * @sample {highstock} stock/navigator/outline/
+           *         2px blue outline
+           *
+           * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @default #cccccc
+           */
+          outlineColor: "#cccccc",
+          /**
+           * The width of the line marking the currently zoomed area in the
+           * navigator.
+           *
+           * @see In styled mode, the outline stroke width is set with the
+           *      `.highcharts-navigator-outline` class.
+           *
+           * @sample {highstock} stock/navigator/outline/
+           *         2px blue outline
+           *
+           * @type    {number}
+           */
+          outlineWidth: 1,
+          /**
+           * Options for the navigator series. Available options are the same
+           * as any series, documented at [plotOptions](#plotOptions.series)
+           * and [series](#series).
+           *
+           * Unless data is explicitly defined on navigator.series, the data
+           * is borrowed from the first series in the chart.
+           *
+           * Default series options for the navigator series are:
+           * ```js
+           * series: {
+           *     type: 'areaspline',
+           *     fillOpacity: 0.05,
+           *     dataGrouping: {
+           *         smoothed: true
+           *     },
+           *     lineWidth: 1,
+           *     marker: {
+           *         enabled: false
+           *     }
+           * }
+           * ```
+           *
+           * @see In styled mode, the navigator series is styled with the
+           *      `.highcharts-navigator-series` class.
+           *
+           * @sample {highstock} stock/navigator/series-data/
+           *         Using a separate data set for the navigator
+           * @sample {highstock} stock/navigator/series/
+           *         A green navigator series
+           *
+           * @type {*|Array<*>|Highcharts.SeriesOptionsType|Array<Highcharts.SeriesOptionsType>}
+           */
+          series: {
+            /**
+             * The type of the navigator series.
+             *
+             * Heads up:
+             * In column-type navigator, zooming is limited to at least one
+             * point with its `pointRange`.
+             *
+             * @sample {highstock} stock/navigator/column/
+             *         Column type navigator
+             *
+             * @type    {string}
+             * @default {highstock} `areaspline` if defined, otherwise `line`
+             * @default {gantt} gantt
+             */
+            type: defaultSeriesType,
+            /**
+             * The fill opacity of the navigator series.
+             */
+            fillOpacity: 0.05,
+            /**
+             * The pixel line width of the navigator series.
+             */
+            lineWidth: 1,
+            /**
+             * @ignore-option
+             */
+            compare: null,
+            /**
+             * Unless data is explicitly defined, the data is borrowed from the
+             * first series in the chart.
+             *
+             * @type      {Array<number|Array<number|string|null>|object|null>}
+             * @product   highstock
+             * @apioption navigator.series.data
+             */
+            /**
+             * Data grouping options for the navigator series.
+             *
+             * @extends plotOptions.series.dataGrouping
+             */
+            dataGrouping: {
+              approximation: "average",
+              enabled: true,
+              groupPixelWidth: 2,
+              smoothed: true,
+              // Day and week differs from plotOptions.series.dataGrouping
+              units: [
+                ["millisecond", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
+                ["second", [1, 2, 5, 10, 15, 30]],
+                ["minute", [1, 2, 5, 10, 15, 30]],
+                ["hour", [1, 2, 3, 4, 6, 8, 12]],
+                ["day", [1, 2, 3, 4]],
+                ["week", [1, 2, 3]],
+                ["month", [1, 3, 6]],
+                ["year", null],
+              ],
+            },
             /**
-             * @name Highcharts.Pathfinder#algorithms
-             * @type {Highcharts.Dictionary<Function>}
+             * Data label options for the navigator series. Data labels are
+             * disabled by default on the navigator series.
+             *
+             * @extends plotOptions.series.dataLabels
              */
+            dataLabels: {
+              enabled: false,
+              zIndex: 2, // #1839
+            },
+            id: "highcharts-navigator-series",
+            className: "highcharts-navigator-series",
             /**
-             * Initialize the Pathfinder object.
+             * Sets the fill color of the navigator series.
              *
-             * @function Highcharts.Pathfinder#init
-             *
-             * @param {Highcharts.Chart} chart
-             *        The chart context.
+             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+             * @apioption navigator.series.color
              */
-            Pathfinder.prototype.init = function (chart) {
-                // Initialize pathfinder with chart context
-                this.chart = chart;
-                // Init connection reference list
-                this.connections = [];
-                // Recalculate paths/obstacles on chart redraw
-                addEvent(chart, 'redraw', function () {
-                    this.pathfinder.update();
-                });
-            };
             /**
-             * Update Pathfinder connections from scratch.
+             * Line color for the navigator series. Allows setting the color
+             * while disallowing the default candlestick setting.
              *
-             * @function Highcharts.Pathfinder#update
-             *
-             * @param {boolean} [deferRender]
-             *        Whether or not to defer rendering of connections until
-             *        series.afterAnimate event has fired. Used on first render.
+             * @type {Highcharts.ColorString|null}
              */
-            Pathfinder.prototype.update = function (deferRender) {
-                var chart = this.chart,
-                    pathfinder = this,
-                    oldConnections = pathfinder.connections;
-                // Rebuild pathfinder connections from options
-                pathfinder.connections = [];
-                chart.series.forEach(function (series) {
-                    if (series.visible && !series.options.isInternal) {
-                        series.points.forEach(function (point) {
-                            var ganttPointOptions = point.options;
-                            // For Gantt series the connect could be
-                            // defined as a dependency
-                            if (ganttPointOptions && ganttPointOptions.dependency) {
-                                ganttPointOptions.connect = ganttPointOptions.dependency;
-                            }
-                            var to,
-                                connects = (point.options &&
-                                    point.options.connect &&
-                                    splat(point.options.connect));
-                            if (point.visible && point.isInside !== false && connects) {
-                                connects.forEach(function (connect) {
-                                    to = chart.get(typeof connect === 'string' ?
-                                        connect : connect.to);
-                                    if (to instanceof Point &&
-                                        to.series.visible &&
-                                        to.visible &&
-                                        to.isInside !== false) {
-                                        // Add new connection
-                                        pathfinder.connections.push(new Connection(point, // from
-                                        to, typeof connect === 'string' ?
-                                            {} :
-                                            connect));
-                                    }
-                                });
-                            }
-                        });
-                    }
-                });
-                // Clear connections that should not be updated, and move old info over
-                // to new connections.
-                for (var j = 0, k, found, lenOld = oldConnections.length, lenNew = pathfinder.connections.length; j < lenOld; ++j) {
-                    found = false;
-                    for (k = 0; k < lenNew; ++k) {
-                        if (oldConnections[j].fromPoint ===
-                            pathfinder.connections[k].fromPoint &&
-                            oldConnections[j].toPoint ===
-                                pathfinder.connections[k].toPoint) {
-                            pathfinder.connections[k].graphics =
-                                oldConnections[j].graphics;
-                            found = true;
-                            break;
-                        }
-                    }
-                    if (!found) {
-                        oldConnections[j].destroy();
-                    }
-                }
-                // Clear obstacles to force recalculation. This must be done on every
-                // redraw in case positions have changed. Recalculation is handled in
-                // Connection.getPath on demand.
-                delete this.chartObstacles;
-                delete this.lineObstacles;
-                // Draw the pending connections
-                pathfinder.renderConnections(deferRender);
-            };
-            /**
-             * Draw the chart's connecting paths.
-             *
-             * @function Highcharts.Pathfinder#renderConnections
-             *
-             * @param {boolean} [deferRender]
-             *        Whether or not to defer render until series animation is finished.
-             *        Used on first render.
-             */
-            Pathfinder.prototype.renderConnections = function (deferRender) {
-                if (deferRender) {
-                    // Render after series are done animating
-                    this.chart.series.forEach(function (series) {
-                        var render = function () {
-                                // Find pathfinder connections belonging to this series
-                                // that haven't rendered, and render them now.
-                                var pathfinder = series.chart.pathfinder,
-                            conns = pathfinder && pathfinder.connections || [];
-                            conns.forEach(function (connection) {
-                                if (connection.fromPoint &&
-                                    connection.fromPoint.series === series) {
-                                    connection.render();
-                                }
-                            });
-                            if (series.pathfinderRemoveRenderEvent) {
-                                series.pathfinderRemoveRenderEvent();
-                                delete series.pathfinderRemoveRenderEvent;
-                            }
-                        };
-                        if (series.options.animation === false) {
-                            render();
-                        }
-                        else {
-                            series.pathfinderRemoveRenderEvent = addEvent(series, 'afterAnimate', render);
-                        }
-                    });
-                }
-                else {
-                    // Go through connections and render them
-                    this.connections.forEach(function (connection) {
-                        connection.render();
-                    });
-                }
-            };
-            /**
-             * Get obstacles for the points in the chart. Does not include connecting
-             * lines from Pathfinder. Applies algorithmMargin to the obstacles.
-             *
-             * @function Highcharts.Pathfinder#getChartObstacles
-             *
-             * @param {object} options
-             *        Options for the calculation. Currenlty only
-             *        options.algorithmMargin.
-             *
-             * @return {Array<object>}
-             *         An array of calculated obstacles. Each obstacle is defined as an
-             *         object with xMin, xMax, yMin and yMax properties.
-             */
-            Pathfinder.prototype.getChartObstacles = function (options) {
-                var obstacles = [],
-                    series = this.chart.series,
-                    margin = pick(options.algorithmMargin, 0),
-                    calculatedMargin;
-                for (var i = 0, sLen = series.length; i < sLen; ++i) {
-                    if (series[i].visible && !series[i].options.isInternal) {
-                        for (var j = 0, pLen = series[i].points.length, bb, point; j < pLen; ++j) {
-                            point = series[i].points[j];
-                            if (point.visible) {
-                                bb = getPointBB(point);
-                                if (bb) {
-                                    obstacles.push({
-                                        xMin: bb.xMin - margin,
-                                        xMax: bb.xMax + margin,
-                                        yMin: bb.yMin - margin,
-                                        yMax: bb.yMax + margin
-                                    });
-                                }
-                            }
-                        }
-                    }
-                }
-                // Sort obstacles by xMin for optimization
-                obstacles = obstacles.sort(function (a, b) {
-                    return a.xMin - b.xMin;
-                });
-                // Add auto-calculated margin if the option is not defined
-                if (!defined(options.algorithmMargin)) {
-                    calculatedMargin =
-                        options.algorithmMargin =
-                            calculateObstacleMargin(obstacles);
-                    obstacles.forEach(function (obstacle) {
-                        obstacle.xMin -= calculatedMargin;
-                        obstacle.xMax += calculatedMargin;
-                        obstacle.yMin -= calculatedMargin;
-                        obstacle.yMax += calculatedMargin;
-                    });
-                }
-                return obstacles;
-            };
-            /**
-             * Utility function to get metrics for obstacles:
-             * - Widest obstacle width
-             * - Tallest obstacle height
-             *
-             * @function Highcharts.Pathfinder#getObstacleMetrics
-             *
-             * @param {Array<object>} obstacles
-             *        An array of obstacles to inspect.
-             *
-             * @return {object}
-             *         The calculated metrics, as an object with maxHeight and maxWidth
-             *         properties.
-             */
-            Pathfinder.prototype.getObstacleMetrics = function (obstacles) {
-                var maxWidth = 0,
-                    maxHeight = 0,
-                    width,
-                    height,
-                    i = obstacles.length;
-                while (i--) {
-                    width = obstacles[i].xMax - obstacles[i].xMin;
-                    height = obstacles[i].yMax - obstacles[i].yMin;
-                    if (maxWidth < width) {
-                        maxWidth = width;
-                    }
-                    if (maxHeight < height) {
-                        maxHeight = height;
-                    }
-                }
-                return {
-                    maxHeight: maxHeight,
-                    maxWidth: maxWidth
-                };
-            };
-            /**
-             * Utility to get which direction to start the pathfinding algorithm
-             * (X vs Y), calculated from a set of marker options.
-             *
-             * @function Highcharts.Pathfinder#getAlgorithmStartDirection
-             *
-             * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
-             *        Marker options to calculate from.
-             *
-             * @return {boolean}
-             *         Returns true for X, false for Y, and undefined for autocalculate.
-             */
-            Pathfinder.prototype.getAlgorithmStartDirection = function (markerOptions) {
-                var xCenter = markerOptions.align !== 'left' &&
-                        markerOptions.align !== 'right', yCenter = markerOptions.verticalAlign !== 'top' &&
-                        markerOptions.verticalAlign !== 'bottom', undef;
-                return xCenter ?
-                    (yCenter ? undef : false) : // x is centered
-                    (yCenter ? true : undef); // x is off-center
-            };
-            return Pathfinder;
-        }());
-        Pathfinder.prototype.algorithms = pathfinderAlgorithms;
-        // Add to Highcharts namespace
-        H.Pathfinder = Pathfinder;
-        // Add pathfinding capabilities to Points
-        extend(Point.prototype, /** @lends Point.prototype */ {
-            /**
-             * Get coordinates of anchor point for pathfinder connection.
-             *
-             * @private
-             * @function Highcharts.Point#getPathfinderAnchorPoint
-             *
-             * @param {Highcharts.ConnectorsMarkerOptions} markerOptions
-             *        Connection options for position on point.
-             *
-             * @return {Highcharts.PositionObject}
-             *         An object with x/y properties for the position. Coordinates are
-             *         in plot values, not relative to point.
-             */
-            getPathfinderAnchorPoint: function (markerOptions) {
-                var bb = getPointBB(this),
-                    x,
-                    y;
-                switch (markerOptions.align) { // eslint-disable-line default-case
-                    case 'right':
-                        x = 'xMax';
-                        break;
-                    case 'left':
-                        x = 'xMin';
-                }
-                switch (markerOptions.verticalAlign) { // eslint-disable-line default-case
-                    case 'top':
-                        y = 'yMin';
-                        break;
-                    case 'bottom':
-                        y = 'yMax';
-                }
-                return {
-                    x: x ? bb[x] : (bb.xMin + bb.xMax) / 2,
-                    y: y ? bb[y] : (bb.yMin + bb.yMax) / 2
-                };
+            lineColor: null,
+            marker: {
+              enabled: false,
             },
             /**
-             * Utility to get the angle from one point to another.
-             *
-             * @private
-             * @function Highcharts.Point#getRadiansToVector
-             *
-             * @param {Highcharts.PositionObject} v1
-             *        The first vector, as an object with x/y properties.
-             *
-             * @param {Highcharts.PositionObject} v2
-             *        The second vector, as an object with x/y properties.
-             *
-             * @return {number}
-             *         The angle in degrees
-             */
-            getRadiansToVector: function (v1, v2) {
-                var box;
-                if (!defined(v2)) {
-                    box = getPointBB(this);
-                    if (box) {
-                        v2 = {
-                            x: (box.xMin + box.xMax) / 2,
-                            y: (box.yMin + box.yMax) / 2
-                        };
-                    }
-                }
-                return Math.atan2(v2.y - v1.y, v1.x - v2.x);
+             * Since Highstock v8, default value is the same as default
+             * `pointRange` defined for a specific type (e.g. `null` for
+             * column type).
+             *
+             * In Highstock version < 8, defaults to 0.
+             *
+             * @extends plotOptions.series.pointRange
+             * @type {number|null}
+             * @apioption navigator.series.pointRange
+             */
+            /**
+             * The threshold option. Setting it to 0 will make the default
+             * navigator area series draw its area from the 0 value and up.
+             *
+             * @type {number|null}
+             */
+            threshold: null,
+          },
+          /**
+           * Options for the navigator X axis. Default series options for the
+           * navigator xAxis are:
+           * ```js
+           * xAxis: {
+           *     tickWidth: 0,
+           *     lineWidth: 0,
+           *     gridLineWidth: 1,
+           *     tickPixelInterval: 200,
+           *     labels: {
+           *            align: 'left',
+           *         style: {
+           *             color: '#888'
+           *         },
+           *         x: 3,
+           *         y: -4
+           *     }
+           * }
+           * ```
+           *
+           * @extends   xAxis
+           * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,
+           *            showEmpty, maxRange
+           */
+          xAxis: {
+            /**
+             * Additional range on the right side of the xAxis. Works similar to
+             * xAxis.maxPadding, but value is set in milliseconds.
+             * Can be set for both, main xAxis and navigator's xAxis.
+             *
+             * @since   6.0.0
+             */
+            overscroll: 0,
+            className: "highcharts-navigator-xaxis",
+            tickLength: 0,
+            lineWidth: 0,
+            gridLineColor: "#e6e6e6",
+            gridLineWidth: 1,
+            tickPixelInterval: 200,
+            labels: {
+              align: "left",
+              /**
+               * @type {Highcharts.CSSObject}
+               */
+              style: {
+                /** @ignore */
+                color: "#999999",
+              },
+              x: 3,
+              y: -4,
             },
-            /**
-             * Utility to get the position of the marker, based on the path angle and
-             * the marker's radius.
-             *
-             * @private
-             * @function Highcharts.Point#getMarkerVector
-             *
-             * @param {number} radians
-             *        The angle in radians from the point center to another vector.
-             *
-             * @param {number} markerRadius
-             *        The radius of the marker, to calculate the additional distance to
-             *        the center of the marker.
-             *
-             * @param {object} anchor
-             *        The anchor point of the path and marker as an object with x/y
-             *        properties.
-             *
-             * @return {object}
-             *         The marker vector as an object with x/y properties.
-             */
-            getMarkerVector: function (radians, markerRadius, anchor) {
-                var twoPI = Math.PI * 2.0,
-                    theta = radians,
-                    bb = getPointBB(this),
-                    rectWidth = bb.xMax - bb.xMin,
-                    rectHeight = bb.yMax - bb.yMin,
-                    rAtan = Math.atan2(rectHeight,
-                    rectWidth),
-                    tanTheta = 1,
-                    leftOrRightRegion = false,
-                    rectHalfWidth = rectWidth / 2.0,
-                    rectHalfHeight = rectHeight / 2.0,
-                    rectHorizontalCenter = bb.xMin + rectHalfWidth,
-                    rectVerticalCenter = bb.yMin + rectHalfHeight,
-                    edgePoint = {
-                        x: rectHorizontalCenter,
-                        y: rectVerticalCenter
-                    },
-                    markerPoint = {},
-                    xFactor = 1,
-                    yFactor = 1;
-                while (theta < -Math.PI) {
-                    theta += twoPI;
-                }
-                while (theta > Math.PI) {
-                    theta -= twoPI;
-                }
-                tanTheta = Math.tan(theta);
-                if ((theta > -rAtan) && (theta <= rAtan)) {
-                    // Right side
-                    yFactor = -1;
-                    leftOrRightRegion = true;
-                }
-                else if (theta > rAtan && theta <= (Math.PI - rAtan)) {
-                    // Top side
-                    yFactor = -1;
-                }
-                else if (theta > (Math.PI - rAtan) || theta <= -(Math.PI - rAtan)) {
-                    // Left side
-                    xFactor = -1;
-                    leftOrRightRegion = true;
-                }
-                else {
-                    // Bottom side
-                    xFactor = -1;
-                }
-                // Correct the edgePoint according to the placement of the marker
-                if (leftOrRightRegion) {
-                    edgePoint.x += xFactor * (rectHalfWidth);
-                    edgePoint.y += yFactor * (rectHalfWidth) * tanTheta;
-                }
-                else {
-                    edgePoint.x += xFactor * (rectHeight / (2.0 * tanTheta));
-                    edgePoint.y += yFactor * (rectHalfHeight);
-                }
-                if (anchor.x !== rectHorizontalCenter) {
-                    edgePoint.x = anchor.x;
-                }
-                if (anchor.y !== rectVerticalCenter) {
-                    edgePoint.y = anchor.y;
-                }
-                markerPoint.x = edgePoint.x + (markerRadius * Math.cos(theta));
-                markerPoint.y = edgePoint.y - (markerRadius * Math.sin(theta));
-                return markerPoint;
-            }
-        });
+            crosshair: false,
+          },
+          /**
+           * Options for the navigator Y axis. Default series options for the
+           * navigator yAxis are:
+           * ```js
+           * yAxis: {
+           *     gridLineWidth: 0,
+           *     startOnTick: false,
+           *     endOnTick: false,
+           *     minPadding: 0.1,
+           *     maxPadding: 0.1,
+           *     labels: {
+           *         enabled: false
+           *     },
+           *     title: {
+           *         text: null
+           *     },
+           *     tickWidth: 0
+           * }
+           * ```
+           *
+           * @extends   yAxis
+           * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,
+           *            showEmpty, scrollbar, top, units, maxRange, minLength,
+           *            maxLength, resize
+           */
+          yAxis: {
+            className: "highcharts-navigator-yaxis",
+            gridLineWidth: 0,
+            startOnTick: false,
+            endOnTick: false,
+            minPadding: 0.1,
+            maxPadding: 0.1,
+            labels: {
+              enabled: false,
+            },
+            crosshair: false,
+            title: {
+              text: null,
+            },
+            tickLength: 0,
+            tickWidth: 0,
+          },
+        },
+      });
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * Draw one of the handles on the side of the zoomed range in the navigator
+       *
+       * @private
+       * @function Highcharts.Renderer#symbols.navigator-handle
+       * @param {number} x
+       * @param {number} y
+       * @param {number} w
+       * @param {number} h
+       * @param {Highcharts.NavigatorHandlesOptions} options
+       * @return {Highcharts.SVGPathArray}
+       *         Path to be used in a handle
+       */
+      H.Renderer.prototype.symbols["navigator-handle"] = function (
+        x,
+        y,
+        w,
+        h,
+        options
+      ) {
+        var halfWidth = ((options && options.width) || 0) / 2,
+          markerPosition = Math.round(halfWidth / 3) + 0.5,
+          height = (options && options.height) || 0;
+        return [
+          ["M", -halfWidth - 1, 0.5],
+          ["L", halfWidth, 0.5],
+          ["L", halfWidth, height + 0.5],
+          ["L", -halfWidth - 1, height + 0.5],
+          ["L", -halfWidth - 1, 0.5],
+          ["M", -markerPosition, 4],
+          ["L", -markerPosition, height - 3],
+          ["M", markerPosition - 1, 4],
+          ["L", markerPosition - 1, height - 3],
+        ];
+      };
+      /**
+       * The Navigator class
+       *
+       * @private
+       * @class
+       * @name Highcharts.Navigator
+       *
+       * @param {Highcharts.Chart} chart
+       *        Chart object
+       */
+      var Navigator = /** @class */ (function () {
+        function Navigator(chart) {
+          this.baseSeries = void 0;
+          this.chart = void 0;
+          this.handles = void 0;
+          this.height = void 0;
+          this.left = void 0;
+          this.navigatorEnabled = void 0;
+          this.navigatorGroup = void 0;
+          this.navigatorOptions = void 0;
+          this.navigatorSeries = void 0;
+          this.navigatorSize = void 0;
+          this.opposite = void 0;
+          this.outline = void 0;
+          this.outlineHeight = void 0;
+          this.range = void 0;
+          this.rendered = void 0;
+          this.shades = void 0;
+          this.size = void 0;
+          this.top = void 0;
+          this.xAxis = void 0;
+          this.yAxis = void 0;
+          this.zoomedMax = void 0;
+          this.zoomedMin = void 0;
+          this.init(chart);
+        }
         /**
-         * Warn if using legacy options. Copy the options over. Note that this will
-         * still break if using the legacy options in chart.update, addSeries etc.
+         * Draw one of the handles on the side of the zoomed range in the navigator
+         *
          * @private
+         * @function Highcharts.Navigator#drawHandle
+         *
+         * @param {number} x
+         *        The x center for the handle
+         *
+         * @param {number} index
+         *        0 for left and 1 for right
+         *
+         * @param {boolean|undefined} inverted
+         *        flag for chart.inverted
+         *
+         * @param {string} verb
+         *        use 'animate' or 'attr'
          */
-        function warnLegacy(chart) {
-            if (chart.options.pathfinder ||
-                chart.series.reduce(function (acc, series) {
-                    if (series.options) {
-                        merge(true, (series.options.connectors = series.options.connectors ||
-                            {}), series.options.pathfinder);
-                    }
-                    return acc || series.options && series.options.pathfinder;
-                }, false)) {
-                merge(true, (chart.options.connectors = chart.options.connectors || {}), chart.options.pathfinder);
-                error('WARNING: Pathfinder options have been renamed. ' +
-                    'Use "chart.connectors" or "series.connectors" instead.');
+        Navigator.prototype.drawHandle = function (x, index, inverted, verb) {
+          var navigator = this,
+            height = navigator.navigatorOptions.handles.height;
+          // Place it
+          navigator.handles[index][verb](
+            inverted
+              ? {
+                  translateX: Math.round(navigator.left + navigator.height / 2),
+                  translateY: Math.round(
+                    navigator.top + parseInt(x, 10) + 0.5 - height
+                  ),
+                }
+              : {
+                  translateX: Math.round(navigator.left + parseInt(x, 10)),
+                  translateY: Math.round(
+                    navigator.top + navigator.height / 2 - height / 2 - 1
+                  ),
+                }
+          );
+        };
+        /**
+         * Render outline around the zoomed range
+         *
+         * @private
+         * @function Highcharts.Navigator#drawOutline
+         *
+         * @param {number} zoomedMin
+         *        in pixels position where zoomed range starts
+         *
+         * @param {number} zoomedMax
+         *        in pixels position where zoomed range ends
+         *
+         * @param {boolean|undefined} inverted
+         *        flag if chart is inverted
+         *
+         * @param {string} verb
+         *        use 'animate' or 'attr'
+         */
+        Navigator.prototype.drawOutline = function (
+          zoomedMin,
+          zoomedMax,
+          inverted,
+          verb
+        ) {
+          var navigator = this,
+            maskInside = navigator.navigatorOptions.maskInside,
+            outlineWidth = navigator.outline.strokeWidth(),
+            halfOutline = outlineWidth / 2,
+            outlineCorrection = (outlineWidth % 2) / 2, // #5800
+            outlineHeight = navigator.outlineHeight,
+            scrollbarHeight = navigator.scrollbarHeight || 0,
+            navigatorSize = navigator.size,
+            left = navigator.left - scrollbarHeight,
+            navigatorTop = navigator.top,
+            verticalMin,
+            path;
+          if (inverted) {
+            left -= halfOutline;
+            verticalMin = navigatorTop + zoomedMax + outlineCorrection;
+            zoomedMax = navigatorTop + zoomedMin + outlineCorrection;
+            path = [
+              [
+                "M",
+                left + outlineHeight,
+                navigatorTop - scrollbarHeight - outlineCorrection,
+              ],
+              ["L", left + outlineHeight, verticalMin],
+              ["L", left, verticalMin],
+              ["L", left, zoomedMax],
+              ["L", left + outlineHeight, zoomedMax],
+              [
+                "L",
+                left + outlineHeight,
+                navigatorTop + navigatorSize + scrollbarHeight,
+              ],
+            ];
+            if (maskInside) {
+              path.push(
+                ["M", left + outlineHeight, verticalMin - halfOutline], // upper left of zoomed range
+                ["L", left + outlineHeight, zoomedMax + halfOutline] // upper right of z.r.
+              );
             }
-        }
-        // Initialize Pathfinder for charts
-        Chart.prototype.callbacks.push(function (chart) {
-            var options = chart.options;
-            if (options.connectors.enabled !== false) {
-                warnLegacy(chart);
-                this.pathfinder = new Pathfinder(this);
-                this.pathfinder.update(true); // First draw, defer render
+          } else {
+            zoomedMin += left + scrollbarHeight - outlineCorrection;
+            zoomedMax += left + scrollbarHeight - outlineCorrection;
+            navigatorTop += halfOutline;
+            path = [
+              ["M", left, navigatorTop],
+              ["L", zoomedMin, navigatorTop],
+              ["L", zoomedMin, navigatorTop + outlineHeight],
+              ["L", zoomedMax, navigatorTop + outlineHeight],
+              ["L", zoomedMax, navigatorTop],
+              ["L", left + navigatorSize + scrollbarHeight * 2, navigatorTop], // right
+            ];
+            if (maskInside) {
+              path.push(
+                ["M", zoomedMin - halfOutline, navigatorTop], // upper left of zoomed range
+                ["L", zoomedMax + halfOutline, navigatorTop] // upper right of z.r.
+              );
             }
-        });
-
-        return Pathfinder;
-    });
-    _registerModule(_modules, 'Series/XRangeSeries.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Series/Series.js'], _modules['Core/Globals.js'], _modules['Core/Color/Color.js'], _modules['Core/Series/Point.js'], _modules['Core/Utilities.js']], function (Axis, BaseSeries, H, Color, Point, U) {
-        /* *
+          }
+          navigator.outline[verb]({
+            d: path,
+          });
+        };
+        /**
+         * Render outline around the zoomed range
          *
-         *  X-range series module
+         * @private
+         * @function Highcharts.Navigator#drawMasks
          *
-         *  (c) 2010-2020 Torstein Honsi, Lars A. V. Cabrera
+         * @param {number} zoomedMin
+         *        in pixels position where zoomed range starts
          *
-         *  License: www.highcharts.com/license
+         * @param {number} zoomedMax
+         *        in pixels position where zoomed range ends
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @param {boolean|undefined} inverted
+         *        flag if chart is inverted
          *
-         * */
-        var color = Color.parse;
-        var addEvent = U.addEvent,
-            clamp = U.clamp,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            find = U.find,
-            isNumber = U.isNumber,
-            isObject = U.isObject,
-            merge = U.merge,
-            pick = U.pick;
-        /* *
-         * @interface Highcharts.PointOptionsObject in parts/Point.ts
-         */ /**
-        * The ending X value of the range point.
-        * @name Highcharts.PointOptionsObject#x2
-        * @type {number|undefined}
-        * @requires modules/xrange
-        */
-        var Series = H.Series,
-            seriesTypes = BaseSeries.seriesTypes,
-            columnType = seriesTypes.column;
+         * @param {string} verb
+         *        use 'animate' or 'attr'
+         */
+        Navigator.prototype.drawMasks = function (
+          zoomedMin,
+          zoomedMax,
+          inverted,
+          verb
+        ) {
+          var navigator = this,
+            left = navigator.left,
+            top = navigator.top,
+            navigatorHeight = navigator.height,
+            height,
+            width,
+            x,
+            y;
+          // Determine rectangle position & size
+          // According to (non)inverted position:
+          if (inverted) {
+            x = [left, left, left];
+            y = [top, top + zoomedMin, top + zoomedMax];
+            width = [navigatorHeight, navigatorHeight, navigatorHeight];
+            height = [
+              zoomedMin,
+              zoomedMax - zoomedMin,
+              navigator.size - zoomedMax,
+            ];
+          } else {
+            x = [left, left + zoomedMin, left + zoomedMax];
+            y = [top, top, top];
+            width = [
+              zoomedMin,
+              zoomedMax - zoomedMin,
+              navigator.size - zoomedMax,
+            ];
+            height = [navigatorHeight, navigatorHeight, navigatorHeight];
+          }
+          navigator.shades.forEach(function (shade, i) {
+            shade[verb]({
+              x: x[i],
+              y: y[i],
+              width: width[i],
+              height: height[i],
+            });
+          });
+        };
         /**
-         * Return color of a point based on its category.
+         * Generate DOM elements for a navigator:
          *
-         * @private
-         * @function getColorByCategory
+         * - main navigator group
          *
-         * @param {object} series
-         *        The series which the point belongs to.
+         * - all shades
          *
-         * @param {object} point
-         *        The point to calculate its color for.
+         * - outline
          *
-         * @return {object}
-         *         Returns an object containing the properties color and colorIndex.
+         * - handles
+         *
+         * @private
+         * @function Highcharts.Navigator#renderElements
          */
-        function getColorByCategory(series, point) {
-            var colors = series.options.colors || series.chart.options.colors,
-                colorCount = colors ?
-                    colors.length :
-                    series.chart.options.chart.colorCount,
-                colorIndex = point.y % colorCount,
-                color = colors && colors[colorIndex];
-            return {
-                colorIndex: colorIndex,
-                color: color
+        Navigator.prototype.renderElements = function () {
+          var navigator = this,
+            navigatorOptions = navigator.navigatorOptions,
+            maskInside = navigatorOptions.maskInside,
+            chart = navigator.chart,
+            inverted = chart.inverted,
+            renderer = chart.renderer,
+            navigatorGroup,
+            mouseCursor = {
+              cursor: inverted ? "ns-resize" : "ew-resize",
             };
-        }
+          // Create the main navigator group
+          navigator.navigatorGroup = navigatorGroup = renderer
+            .g("navigator")
+            .attr({
+              zIndex: 8,
+              visibility: "hidden",
+            })
+            .add();
+          // Create masks, each mask will get events and fill:
+          [!maskInside, maskInside, !maskInside].forEach(function (
+            hasMask,
+            index
+          ) {
+            navigator.shades[index] = renderer
+              .rect()
+              .addClass(
+                "highcharts-navigator-mask" +
+                  (index === 1 ? "-inside" : "-outside")
+              )
+              .add(navigatorGroup);
+            if (!chart.styledMode) {
+              navigator.shades[index]
+                .attr({
+                  fill: hasMask ? navigatorOptions.maskFill : "rgba(0,0,0,0)",
+                })
+                .css(index === 1 && mouseCursor);
+            }
+          });
+          // Create the outline:
+          navigator.outline = renderer
+            .path()
+            .addClass("highcharts-navigator-outline")
+            .add(navigatorGroup);
+          if (!chart.styledMode) {
+            navigator.outline.attr({
+              "stroke-width": navigatorOptions.outlineWidth,
+              stroke: navigatorOptions.outlineColor,
+            });
+          }
+          // Create the handlers:
+          if (navigatorOptions.handles.enabled) {
+            [0, 1].forEach(function (index) {
+              navigatorOptions.handles.inverted = chart.inverted;
+              navigator.handles[index] = renderer.symbol(
+                navigatorOptions.handles.symbols[index],
+                -navigatorOptions.handles.width / 2 - 1,
+                0,
+                navigatorOptions.handles.width,
+                navigatorOptions.handles.height,
+                navigatorOptions.handles
+              );
+              // zIndex = 6 for right handle, 7 for left.
+              // Can't be 10, because of the tooltip in inverted chart #2908
+              navigator.handles[index]
+                .attr({ zIndex: 7 - index })
+                .addClass(
+                  "highcharts-navigator-handle " +
+                    "highcharts-navigator-handle-" +
+                    ["left", "right"][index]
+                )
+                .add(navigatorGroup);
+              if (!chart.styledMode) {
+                var handlesOptions = navigatorOptions.handles;
+                navigator.handles[index]
+                  .attr({
+                    fill: handlesOptions.backgroundColor,
+                    stroke: handlesOptions.borderColor,
+                    "stroke-width": handlesOptions.lineWidth,
+                  })
+                  .css(mouseCursor);
+              }
+            });
+          }
+        };
         /**
+         * Update navigator
+         *
          * @private
-         * @class
-         * @name Highcharts.seriesTypes.xrange
+         * @function Highcharts.Navigator#update
          *
-         * @augments Highcharts.Series
+         * @param {Highcharts.NavigatorOptions} options
+         *        Options to merge in when updating navigator
          */
-        BaseSeries.seriesType('xrange', 'column'
+        Navigator.prototype.update = function (options) {
+          // Remove references to old navigator series in base series
+          (this.series || []).forEach(function (series) {
+            if (series.baseSeries) {
+              delete series.baseSeries.navigatorSeries;
+            }
+          });
+          // Destroy and rebuild navigator
+          this.destroy();
+          var chartOptions = this.chart.options;
+          merge(true, chartOptions.navigator, this.options, options);
+          this.init(this.chart);
+        };
         /**
-         * The X-range series displays ranges on the X axis, typically time
-         * intervals with a start and end date.
+         * Render the navigator
          *
-         * @sample {highcharts} highcharts/demo/x-range/
-         *         X-range
-         * @sample {highcharts} highcharts/css/x-range/
-         *         Styled mode X-range
-         * @sample {highcharts} highcharts/chart/inverted-xrange/
-         *         Inverted X-range
+         * @private
+         * @function Highcharts.Navigator#render
+         * @param {number} min
+         *        X axis value minimum
+         * @param {number} max
+         *        X axis value maximum
+         * @param {number} [pxMin]
+         *        Pixel value minimum
+         * @param {number} [pxMax]
+         *        Pixel value maximum
+         * @return {void}
+         */
+        Navigator.prototype.render = function (min, max, pxMin, pxMax) {
+          var navigator = this,
+            chart = navigator.chart,
+            navigatorWidth,
+            scrollbarLeft,
+            scrollbarTop,
+            scrollbarHeight = navigator.scrollbarHeight,
+            navigatorSize,
+            xAxis = navigator.xAxis,
+            pointRange = xAxis.pointRange || 0,
+            scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis,
+            navigatorEnabled = navigator.navigatorEnabled,
+            zoomedMin,
+            zoomedMax,
+            rendered = navigator.rendered,
+            inverted = chart.inverted,
+            verb,
+            newMin,
+            newMax,
+            currentRange,
+            minRange = chart.xAxis[0].minRange,
+            maxRange = chart.xAxis[0].options.maxRange;
+          // Don't redraw while moving the handles (#4703).
+          if (this.hasDragged && !defined(pxMin)) {
+            return;
+          }
+          min = correctFloat(min - pointRange / 2);
+          max = correctFloat(max + pointRange / 2);
+          // Don't render the navigator until we have data (#486, #4202, #5172).
+          if (!isNumber(min) || !isNumber(max)) {
+            // However, if navigator was already rendered, we may need to resize
+            // it. For example hidden series, but visible navigator (#6022).
+            if (rendered) {
+              pxMin = 0;
+              pxMax = pick(xAxis.width, scrollbarXAxis.width);
+            } else {
+              return;
+            }
+          }
+          navigator.left = pick(
+            xAxis.left,
+            // in case of scrollbar only, without navigator
+            chart.plotLeft + scrollbarHeight + (inverted ? chart.plotWidth : 0)
+          );
+          navigator.size =
+            zoomedMax =
+            navigatorSize =
+              pick(
+                xAxis.len,
+                (inverted ? chart.plotHeight : chart.plotWidth) -
+                  2 * scrollbarHeight
+              );
+          if (inverted) {
+            navigatorWidth = scrollbarHeight;
+          } else {
+            navigatorWidth = navigatorSize + 2 * scrollbarHeight;
+          }
+          // Get the pixel position of the handles
+          pxMin = pick(pxMin, xAxis.toPixels(min, true));
+          pxMax = pick(pxMax, xAxis.toPixels(max, true));
+          // Verify (#1851, #2238)
+          if (!isNumber(pxMin) || Math.abs(pxMin) === Infinity) {
+            pxMin = 0;
+            pxMax = navigatorWidth;
+          }
+          // Are we below the minRange? (#2618, #6191)
+          newMin = xAxis.toValue(pxMin, true);
+          newMax = xAxis.toValue(pxMax, true);
+          currentRange = Math.abs(correctFloat(newMax - newMin));
+          if (currentRange < minRange) {
+            if (this.grabbedLeft) {
+              pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);
+            } else if (this.grabbedRight) {
+              pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);
+            }
+          } else if (
+            defined(maxRange) &&
+            correctFloat(currentRange - pointRange) > maxRange
+          ) {
+            if (this.grabbedLeft) {
+              pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);
+            } else if (this.grabbedRight) {
+              pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);
+            }
+          }
+          // Handles are allowed to cross, but never exceed the plot area
+          navigator.zoomedMax = clamp(Math.max(pxMin, pxMax), 0, zoomedMax);
+          navigator.zoomedMin = clamp(
+            navigator.fixedWidth
+              ? navigator.zoomedMax - navigator.fixedWidth
+              : Math.min(pxMin, pxMax),
+            0,
+            zoomedMax
+          );
+          navigator.range = navigator.zoomedMax - navigator.zoomedMin;
+          zoomedMax = Math.round(navigator.zoomedMax);
+          zoomedMin = Math.round(navigator.zoomedMin);
+          if (navigatorEnabled) {
+            navigator.navigatorGroup.attr({
+              visibility: "visible",
+            });
+            // Place elements
+            verb = rendered && !navigator.hasDragged ? "animate" : "attr";
+            navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
+            navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
+            if (navigator.navigatorOptions.handles.enabled) {
+              navigator.drawHandle(zoomedMin, 0, inverted, verb);
+              navigator.drawHandle(zoomedMax, 1, inverted, verb);
+            }
+          }
+          if (navigator.scrollbar) {
+            if (inverted) {
+              scrollbarTop = navigator.top - scrollbarHeight;
+              scrollbarLeft =
+                navigator.left -
+                scrollbarHeight +
+                (navigatorEnabled || !scrollbarXAxis.opposite
+                  ? 0
+                  : // Multiple axes has offsets:
+                    (scrollbarXAxis.titleOffset || 0) +
+                    // Self margin from the axis.title
+                    scrollbarXAxis.axisTitleMargin);
+              scrollbarHeight = navigatorSize + 2 * scrollbarHeight;
+            } else {
+              scrollbarTop =
+                navigator.top +
+                (navigatorEnabled ? navigator.height : -scrollbarHeight);
+              scrollbarLeft = navigator.left - scrollbarHeight;
+            }
+            // Reposition scrollbar
+            navigator.scrollbar.position(
+              scrollbarLeft,
+              scrollbarTop,
+              navigatorWidth,
+              scrollbarHeight
+            );
+            // Keep scale 0-1
+            navigator.scrollbar.setRange(
+              // Use real value, not rounded because range can be very small
+              // (#1716)
+              navigator.zoomedMin / (navigatorSize || 1),
+              navigator.zoomedMax / (navigatorSize || 1)
+            );
+          }
+          navigator.rendered = true;
+        };
+        /**
+         * Set up the mouse and touch events for the navigator
          *
-         * @extends      plotOptions.column
-         * @since        6.0.0
-         * @product      highcharts highstock gantt
-         * @excluding    boostThreshold, crisp, cropThreshold, depth, edgeColor,
-         *               edgeWidth, findNearestPointBy, getExtremesFromAll,
-         *               negativeColor, pointInterval, pointIntervalUnit,
-         *               pointPlacement, pointRange, pointStart, softThreshold,
-         *               stacking, threshold, data, dataSorting, boostBlending
-         * @requires     modules/xrange
-         * @optionparent plotOptions.xrange
+         * @private
+         * @function Highcharts.Navigator#addMouseEvents
          */
-        , {
-            /**
-             * A partial fill for each point, typically used to visualize how much
-             * of a task is performed. The partial fill object can be set either on
-             * series or point level.
-             *
-             * @sample {highcharts} highcharts/demo/x-range
-             *         X-range with partial fill
-             *
-             * @product   highcharts highstock gantt
-             * @apioption plotOptions.xrange.partialFill
-             */
-            /**
-             * The fill color to be used for partial fills. Defaults to a darker
-             * shade of the point color.
-             *
-             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-             * @product   highcharts highstock gantt
-             * @apioption plotOptions.xrange.partialFill.fill
-             */
-            /**
-             * A partial fill for each point, typically used to visualize how much
-             * of a task is performed. See [completed](series.gantt.data.completed).
-             *
-             * @sample gantt/demo/progress-indicator
-             *         Gantt with progress indicator
-             *
-             * @product   gantt
-             * @apioption plotOptions.gantt.partialFill
-             */
-            /**
-             * In an X-range series, this option makes all points of the same Y-axis
-             * category the same color.
-             */
-            colorByPoint: true,
-            dataLabels: {
-                formatter: function () {
-                    var point = this.point,
-                        amount = point.partialFill;
-                    if (isObject(amount)) {
-                        amount = amount.amount;
-                    }
-                    if (isNumber(amount) && amount > 0) {
-                        return correctFloat(amount * 100) + '%';
-                    }
-                },
-                inside: true,
-                verticalAlign: 'middle'
-            },
-            tooltip: {
-                headerFormat: '<span style="font-size: 10px">{point.x} - {point.x2}</span><br/>',
-                pointFormat: '<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'
-            },
-            borderRadius: 3,
-            pointRange: 0
-        }, {
-            type: 'xrange',
-            parallelArrays: ['x', 'x2', 'y'],
-            requireSorting: false,
-            animate: seriesTypes.line.prototype.animate,
-            cropShoulder: 1,
-            getExtremesFromAll: true,
-            autoIncrement: H.noop,
-            buildKDTree: H.noop,
-            /* eslint-disable valid-jsdoc */
-            /**
-             * @private
-             * @function Highcarts.seriesTypes.xrange#init
-             * @return {void}
-             */
-            init: function () {
-                seriesTypes.column.prototype.init.apply(this, arguments);
-                this.options.stacking = void 0; // #13161
-            },
-            /**
-             * Borrow the column series metrics, but with swapped axes. This gives
-             * free access to features like groupPadding, grouping, pointWidth etc.
-             *
-             * @private
-             * @function Highcharts.Series#getColumnMetrics
-             *
-             * @return {Highcharts.ColumnMetricsObject}
-             */
-            getColumnMetrics: function () {
-                var metrics,
-                    chart = this.chart;
-                /**
-                 * @private
-                 */
-                function swapAxes() {
-                    chart.series.forEach(function (s) {
-                        var xAxis = s.xAxis;
-                        s.xAxis = s.yAxis;
-                        s.yAxis = xAxis;
-                    });
+        Navigator.prototype.addMouseEvents = function () {
+          var navigator = this,
+            chart = navigator.chart,
+            container = chart.container,
+            eventsToUnbind = [],
+            mouseMoveHandler,
+            mouseUpHandler;
+          /**
+           * Create mouse events' handlers.
+           * Make them as separate functions to enable wrapping them:
+           */
+          navigator.mouseMoveHandler = mouseMoveHandler = function (e) {
+            navigator.onMouseMove(e);
+          };
+          navigator.mouseUpHandler = mouseUpHandler = function (e) {
+            navigator.onMouseUp(e);
+          };
+          // Add shades and handles mousedown events
+          eventsToUnbind = navigator.getPartsEvents("mousedown");
+          // Add mouse move and mouseup events. These are bind to doc/container,
+          // because Navigator.grabbedSomething flags are stored in mousedown
+          // events
+          eventsToUnbind.push(
+            addEvent(chart.renderTo, "mousemove", mouseMoveHandler),
+            addEvent(container.ownerDocument, "mouseup", mouseUpHandler)
+          );
+          // Touch events
+          if (hasTouch) {
+            eventsToUnbind.push(
+              addEvent(chart.renderTo, "touchmove", mouseMoveHandler),
+              addEvent(container.ownerDocument, "touchend", mouseUpHandler)
+            );
+            eventsToUnbind.concat(navigator.getPartsEvents("touchstart"));
+          }
+          navigator.eventsToUnbind = eventsToUnbind;
+          // Data events
+          if (navigator.series && navigator.series[0]) {
+            eventsToUnbind.push(
+              addEvent(navigator.series[0].xAxis, "foundExtremes", function () {
+                chart.navigator.modifyNavigatorAxisExtremes();
+              })
+            );
+          }
+        };
+        /**
+         * Generate events for handles and masks
+         *
+         * @private
+         * @function Highcharts.Navigator#getPartsEvents
+         *
+         * @param {string} eventName
+         *        Event name handler, 'mousedown' or 'touchstart'
+         *
+         * @return {Array<Function>}
+         *         An array of functions to remove navigator functions from the
+         *         events again.
+         */
+        Navigator.prototype.getPartsEvents = function (eventName) {
+          var navigator = this,
+            events = [];
+          ["shades", "handles"].forEach(function (name) {
+            navigator[name].forEach(function (navigatorItem, index) {
+              events.push(
+                addEvent(navigatorItem.element, eventName, function (e) {
+                  navigator[name + "Mousedown"](e, index);
+                })
+              );
+            });
+          });
+          return events;
+        };
+        /**
+         * Mousedown on a shaded mask, either:
+         *
+         * - will be stored for future drag&drop
+         *
+         * - will directly shift to a new range
+         *
+         * @private
+         * @function Highcharts.Navigator#shadesMousedown
+         *
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
+         *
+         * @param {number} index
+         *        Index of a mask in Navigator.shades array
+         */
+        Navigator.prototype.shadesMousedown = function (e, index) {
+          e = this.chart.pointer.normalize(e);
+          var navigator = this,
+            chart = navigator.chart,
+            xAxis = navigator.xAxis,
+            zoomedMin = navigator.zoomedMin,
+            navigatorPosition = navigator.left,
+            navigatorSize = navigator.size,
+            range = navigator.range,
+            chartX = e.chartX,
+            fixedMax,
+            fixedMin,
+            ext,
+            left;
+          // For inverted chart, swap some options:
+          if (chart.inverted) {
+            chartX = e.chartY;
+            navigatorPosition = navigator.top;
+          }
+          if (index === 1) {
+            // Store information for drag&drop
+            navigator.grabbedCenter = chartX;
+            navigator.fixedWidth = range;
+            navigator.dragOffset = chartX - zoomedMin;
+          } else {
+            // Shift the range by clicking on shaded areas
+            left = chartX - navigatorPosition - range / 2;
+            if (index === 0) {
+              left = Math.max(0, left);
+            } else if (index === 2 && left + range >= navigatorSize) {
+              left = navigatorSize - range;
+              if (navigator.reversedExtremes) {
+                // #7713
+                left -= range;
+                fixedMin = navigator.getUnionExtremes().dataMin;
+              } else {
+                // #2293, #3543
+                fixedMax = navigator.getUnionExtremes().dataMax;
+              }
+            }
+            if (left !== zoomedMin) {
+              // it has actually moved
+              navigator.fixedWidth = range; // #1370
+              ext = xAxis.navigatorAxis.toFixedRange(
+                left,
+                left + range,
+                fixedMin,
+                fixedMax
+              );
+              if (defined(ext.min)) {
+                // #7411
+                chart.xAxis[0].setExtremes(
+                  Math.min(ext.min, ext.max),
+                  Math.max(ext.min, ext.max),
+                  true,
+                  null, // auto animation
+                  { trigger: "navigator" }
+                );
+              }
+            }
+          }
+        };
+        /**
+         * Mousedown on a handle mask.
+         * Will store necessary information for drag&drop.
+         *
+         * @private
+         * @function Highcharts.Navigator#handlesMousedown
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
+         * @param {number} index
+         *        Index of a handle in Navigator.handles array
+         * @return {void}
+         */
+        Navigator.prototype.handlesMousedown = function (e, index) {
+          e = this.chart.pointer.normalize(e);
+          var navigator = this,
+            chart = navigator.chart,
+            baseXAxis = chart.xAxis[0],
+            // For reversed axes, min and max are changed,
+            // so the other extreme should be stored
+            reverse = navigator.reversedExtremes;
+          if (index === 0) {
+            // Grab the left handle
+            navigator.grabbedLeft = true;
+            navigator.otherHandlePos = navigator.zoomedMax;
+            navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;
+          } else {
+            // Grab the right handle
+            navigator.grabbedRight = true;
+            navigator.otherHandlePos = navigator.zoomedMin;
+            navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;
+          }
+          chart.fixedRange = null;
+        };
+        /**
+         * Mouse move event based on x/y mouse position.
+         *
+         * @private
+         * @function Highcharts.Navigator#onMouseMove
+         *
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
+         */
+        Navigator.prototype.onMouseMove = function (e) {
+          var navigator = this,
+            chart = navigator.chart,
+            left = navigator.left,
+            navigatorSize = navigator.navigatorSize,
+            range = navigator.range,
+            dragOffset = navigator.dragOffset,
+            inverted = chart.inverted,
+            chartX;
+          // In iOS, a mousemove event with e.pageX === 0 is fired when holding
+          // the finger down in the center of the scrollbar. This should be
+          // ignored.
+          if (!e.touches || e.touches[0].pageX !== 0) {
+            // #4696
+            e = chart.pointer.normalize(e);
+            chartX = e.chartX;
+            // Swap some options for inverted chart
+            if (inverted) {
+              left = navigator.top;
+              chartX = e.chartY;
+            }
+            // Drag left handle or top handle
+            if (navigator.grabbedLeft) {
+              navigator.hasDragged = true;
+              navigator.render(0, 0, chartX - left, navigator.otherHandlePos);
+              // Drag right handle or bottom handle
+            } else if (navigator.grabbedRight) {
+              navigator.hasDragged = true;
+              navigator.render(0, 0, navigator.otherHandlePos, chartX - left);
+              // Drag scrollbar or open area in navigator
+            } else if (navigator.grabbedCenter) {
+              navigator.hasDragged = true;
+              if (chartX < dragOffset) {
+                // outside left
+                chartX = dragOffset;
+                // outside right
+              } else if (chartX > navigatorSize + dragOffset - range) {
+                chartX = navigatorSize + dragOffset - range;
+              }
+              navigator.render(
+                0,
+                0,
+                chartX - dragOffset,
+                chartX - dragOffset + range
+              );
+            }
+            if (
+              navigator.hasDragged &&
+              navigator.scrollbar &&
+              pick(
+                navigator.scrollbar.options.liveRedraw,
+                // By default, don't run live redraw on VML, on touch
+                // devices or if the chart is in boost.
+                H.svg && !isTouchDevice && !this.chart.isBoosting
+              )
+            ) {
+              e.DOMType = e.type; // DOMType is for IE8
+              setTimeout(function () {
+                navigator.onMouseUp(e);
+              }, 0);
+            }
+          }
+        };
+        /**
+         * Mouse up event based on x/y mouse position.
+         *
+         * @private
+         * @function Highcharts.Navigator#onMouseUp
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
+         * @return {void}
+         */
+        Navigator.prototype.onMouseUp = function (e) {
+          var navigator = this,
+            chart = navigator.chart,
+            xAxis = navigator.xAxis,
+            scrollbar = navigator.scrollbar,
+            DOMEvent = e.DOMEvent || e,
+            inverted = chart.inverted,
+            verb =
+              navigator.rendered && !navigator.hasDragged ? "animate" : "attr",
+            zoomedMax,
+            zoomedMin,
+            unionExtremes,
+            fixedMin,
+            fixedMax,
+            ext;
+          if (
+            // MouseUp is called for both, navigator and scrollbar (that order),
+            // which causes calling afterSetExtremes twice. Prevent first call
+            // by checking if scrollbar is going to set new extremes (#6334)
+            (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||
+            e.trigger === "scrollbar"
+          ) {
+            unionExtremes = navigator.getUnionExtremes();
+            // When dragging one handle, make sure the other one doesn't change
+            if (navigator.zoomedMin === navigator.otherHandlePos) {
+              fixedMin = navigator.fixedExtreme;
+            } else if (navigator.zoomedMax === navigator.otherHandlePos) {
+              fixedMax = navigator.fixedExtreme;
+            }
+            // Snap to right edge (#4076)
+            if (navigator.zoomedMax === navigator.size) {
+              fixedMax = navigator.reversedExtremes
+                ? unionExtremes.dataMin
+                : unionExtremes.dataMax;
+            }
+            // Snap to left edge (#7576)
+            if (navigator.zoomedMin === 0) {
+              fixedMin = navigator.reversedExtremes
+                ? unionExtremes.dataMax
+                : unionExtremes.dataMin;
+            }
+            ext = xAxis.navigatorAxis.toFixedRange(
+              navigator.zoomedMin,
+              navigator.zoomedMax,
+              fixedMin,
+              fixedMax
+            );
+            if (defined(ext.min)) {
+              chart.xAxis[0].setExtremes(
+                Math.min(ext.min, ext.max),
+                Math.max(ext.min, ext.max),
+                true,
+                // Run animation when clicking buttons, scrollbar track etc,
+                // but not when dragging handles or scrollbar
+                navigator.hasDragged ? false : null,
+                {
+                  trigger: "navigator",
+                  triggerOp: "navigator-drag",
+                  DOMEvent: DOMEvent, // #1838
                 }
-                swapAxes();
-                metrics = columnType.prototype.getColumnMetrics.call(this);
-                swapAxes();
-                return metrics;
-            },
-            /**
-             * Override cropData to show a point where x or x2 is outside visible
-             * range, but one of them is inside.
-             *
-             * @private
-             * @function Highcharts.Series#cropData
-             *
-             * @param {Array<number>} xData
-             *
-             * @param {Array<number>} yData
-             *
-             * @param {number} min
-             *
-             * @param {number} max
-             *
-             * @param {number} [cropShoulder]
-             *
-             * @return {*}
-             */
-            cropData: function (xData, yData, min, max) {
-                // Replace xData with x2Data to find the appropriate cropStart
-                var cropData = Series.prototype.cropData,
-                    crop = cropData.call(this,
-                    this.x2Data,
-                    yData,
-                    min,
-                    max);
-                // Re-insert the cropped xData
-                crop.xData = xData.slice(crop.start, crop.end);
-                return crop;
-            },
-            /**
-             * Finds the index of an existing point that matches the given point
-             * options.
-             *
-             * @private
-             * @function Highcharts.Series#findPointIndex
-             * @param {object} options The options of the point.
-             * @returns {number|undefined} Returns index of a matching point,
-             * returns undefined if no match is found.
-             */
-            findPointIndex: function (options) {
-                var _a = this,
-                    cropped = _a.cropped,
-                    cropStart = _a.cropStart,
-                    points = _a.points;
-                var id = options.id;
-                var pointIndex;
-                if (id) {
-                    var point = find(points,
-                        function (point) {
-                            return point.id === id;
-                    });
-                    pointIndex = point ? point.index : void 0;
-                }
-                if (typeof pointIndex === 'undefined') {
-                    var point = find(points,
-                        function (point) {
-                            return (point.x === options.x &&
-                                point.x2 === options.x2 &&
-                                !point.touched);
-                    });
-                    pointIndex = point ? point.index : void 0;
-                }
-                // Reduce pointIndex if data is cropped
-                if (cropped &&
-                    isNumber(pointIndex) &&
-                    isNumber(cropStart) &&
-                    pointIndex >= cropStart) {
-                    pointIndex -= cropStart;
-                }
-                return pointIndex;
-            },
-            /**
-             * @private
-             * @function Highcharts.Series#translatePoint
-             *
-             * @param {Highcharts.Point} point
-             */
-            translatePoint: function (point) {
-                var series = this,
-                    xAxis = series.xAxis,
-                    yAxis = series.yAxis,
-                    metrics = series.columnMetrics,
-                    options = series.options,
-                    minPointLength = options.minPointLength || 0,
-                    plotX = point.plotX,
-                    posX = pick(point.x2,
-                    point.x + (point.len || 0)),
-                    plotX2 = xAxis.translate(posX, 0, 0, 0, 1),
-                    length = Math.abs(plotX2 - plotX),
-                    widthDifference,
-                    shapeArgs,
-                    partialFill,
-                    inverted = this.chart.inverted,
-                    borderWidth = pick(options.borderWidth, 1),
-                    crisper = borderWidth % 2 / 2,
-                    yOffset = metrics.offset,
-                    pointHeight = Math.round(metrics.width),
-                    dlLeft,
-                    dlRight,
-                    dlWidth,
-                    clipRectWidth,
-                    tooltipYOffset;
-                if (minPointLength) {
-                    widthDifference = minPointLength - length;
-                    if (widthDifference < 0) {
-                        widthDifference = 0;
-                    }
-                    plotX -= widthDifference / 2;
-                    plotX2 += widthDifference / 2;
-                }
-                plotX = Math.max(plotX, -10);
-                plotX2 = clamp(plotX2, -10, xAxis.len + 10);
-                // Handle individual pointWidth
-                if (defined(point.options.pointWidth)) {
-                    yOffset -= ((Math.ceil(point.options.pointWidth) - pointHeight) / 2);
-                    pointHeight = Math.ceil(point.options.pointWidth);
-                }
-                // Apply pointPlacement to the Y axis
-                if (options.pointPlacement &&
-                    isNumber(point.plotY) &&
-                    yAxis.categories) {
-                    point.plotY = yAxis.translate(point.y, 0, 1, 0, 1, options.pointPlacement);
-                }
-                point.shapeArgs = {
-                    x: Math.floor(Math.min(plotX, plotX2)) + crisper,
-                    y: Math.floor(point.plotY + yOffset) + crisper,
-                    width: Math.round(Math.abs(plotX2 - plotX)),
-                    height: pointHeight,
-                    r: series.options.borderRadius
-                };
-                // Align data labels inside the shape and inside the plot area
-                dlLeft = point.shapeArgs.x;
-                dlRight = dlLeft + point.shapeArgs.width;
-                if (dlLeft < 0 || dlRight > xAxis.len) {
-                    dlLeft = clamp(dlLeft, 0, xAxis.len);
-                    dlRight = clamp(dlRight, 0, xAxis.len);
-                    dlWidth = dlRight - dlLeft;
-                    point.dlBox = merge(point.shapeArgs, {
-                        x: dlLeft,
-                        width: dlRight - dlLeft,
-                        centerX: dlWidth ? dlWidth / 2 : null
-                    });
-                }
-                else {
-                    point.dlBox = null;
-                }
-                // Tooltip position
-                var tooltipPos = point.tooltipPos;
-                var xIndex = !inverted ? 0 : 1;
-                var yIndex = !inverted ? 1 : 0;
-                tooltipYOffset = series.columnMetrics ?
-                    series.columnMetrics.offset : -metrics.width / 2;
-                // Limit position by the correct axis size (#9727)
-                tooltipPos[xIndex] = clamp(tooltipPos[xIndex] + ((!inverted ? 1 : -1) * (xAxis.reversed ? -1 : 1) *
-                    (length / 2)), 0, xAxis.len - 1);
-                tooltipPos[yIndex] = clamp(tooltipPos[yIndex] + ((inverted ? -1 : 1) * tooltipYOffset), 0, yAxis.len - 1);
-                // Add a partShapeArgs to the point, based on the shapeArgs property
-                partialFill = point.partialFill;
-                if (partialFill) {
-                    // Get the partial fill amount
-                    if (isObject(partialFill)) {
-                        partialFill = partialFill.amount;
-                    }
-                    // If it was not a number, assume 0
-                    if (!isNumber(partialFill)) {
-                        partialFill = 0;
-                    }
-                    shapeArgs = point.shapeArgs;
-                    point.partShapeArgs = {
-                        x: shapeArgs.x,
-                        y: shapeArgs.y,
-                        width: shapeArgs.width,
-                        height: shapeArgs.height,
-                        r: series.options.borderRadius
-                    };
-                    clipRectWidth = Math.max(Math.round(length * partialFill + point.plotX -
-                        plotX), 0);
-                    point.clipRectArgs = {
-                        x: xAxis.reversed ? // #10717
-                            shapeArgs.x + length - clipRectWidth :
-                            shapeArgs.x,
-                        y: shapeArgs.y,
-                        width: clipRectWidth,
-                        height: shapeArgs.height
-                    };
-                }
-            },
-            /**
-             * @private
-             * @function Highcharts.Series#translate
-             */
-            translate: function () {
-                columnType.prototype.translate.apply(this, arguments);
-                this.points.forEach(function (point) {
-                    this.translatePoint(point);
-                }, this);
-            },
-            /**
-             * Draws a single point in the series. Needed for partial fill.
-             *
-             * This override turns point.graphic into a group containing the
-             * original graphic and an overlay displaying the partial fill.
-             *
-             * @private
-             * @function Highcharts.Series#drawPoint
-             *
-             * @param {Highcharts.Point} point
-             *        An instance of Point in the series.
-             *
-             * @param {"animate"|"attr"} verb
-             *        'animate' (animates changes) or 'attr' (sets options)
-             */
-            drawPoint: function (point, verb) {
-                var series = this,
-                    seriesOpts = series.options,
-                    renderer = series.chart.renderer,
-                    graphic = point.graphic,
-                    type = point.shapeType,
-                    shapeArgs = point.shapeArgs,
-                    partShapeArgs = point.partShapeArgs,
-                    clipRectArgs = point.clipRectArgs,
-                    pfOptions = point.partialFill,
-                    cutOff = seriesOpts.stacking && !seriesOpts.borderRadius,
-                    pointState = point.state,
-                    stateOpts = (seriesOpts.states[pointState || 'normal'] ||
-                        {}),
-                    pointStateVerb = typeof pointState === 'undefined' ?
-                        'attr' : verb,
-                    pointAttr = series.pointAttribs(point,
-                    pointState),
-                    animation = pick(series.chart.options.chart.animation,
-                    stateOpts.animation),
-                    fill;
-                if (!point.isNull && point.visible !== false) {
-                    // Original graphic
-                    if (graphic) { // update
-                        graphic.rect[verb](shapeArgs);
-                    }
-                    else {
-                        point.graphic = graphic = renderer.g('point')
-                            .addClass(point.getClassName())
-                            .add(point.group || series.group);
-                        graphic.rect = renderer[type](merge(shapeArgs))
-                            .addClass(point.getClassName())
-                            .addClass('highcharts-partfill-original')
-                            .add(graphic);
-                    }
-                    // Partial fill graphic
-                    if (partShapeArgs) {
-                        if (graphic.partRect) {
-                            graphic.partRect[verb](merge(partShapeArgs));
-                            graphic.partialClipRect[verb](merge(clipRectArgs));
-                        }
-                        else {
-                            graphic.partialClipRect = renderer.clipRect(clipRectArgs.x, clipRectArgs.y, clipRectArgs.width, clipRectArgs.height);
-                            graphic.partRect =
-                                renderer[type](partShapeArgs)
-                                    .addClass('highcharts-partfill-overlay')
-                                    .add(graphic)
-                                    .clip(graphic.partialClipRect);
-                        }
-                    }
-                    // Presentational
-                    if (!series.chart.styledMode) {
-                        graphic
-                            .rect[verb](pointAttr, animation)
-                            .shadow(seriesOpts.shadow, null, cutOff);
-                        if (partShapeArgs) {
-                            // Ensure pfOptions is an object
-                            if (!isObject(pfOptions)) {
-                                pfOptions = {};
-                            }
-                            if (isObject(seriesOpts.partialFill)) {
-                                pfOptions = merge(seriesOpts.partialFill, pfOptions);
-                            }
-                            fill = (pfOptions.fill ||
-                                color(pointAttr.fill).brighten(-0.3).get() ||
-                                color(point.color || series.color)
-                                    .brighten(-0.3).get());
-                            pointAttr.fill = fill;
-                            graphic
-                                .partRect[pointStateVerb](pointAttr, animation)
-                                .shadow(seriesOpts.shadow, null, cutOff);
-                        }
-                    }
-                }
-                else if (graphic) {
-                    point.graphic = graphic.destroy(); // #1269
-                }
-            },
-            /**
-             * @private
-             * @function Highcharts.Series#drawPoints
-             */
-            drawPoints: function () {
-                var series = this,
-                    verb = series.getAnimationVerb();
-                // Draw the columns
-                series.points.forEach(function (point) {
-                    series.drawPoint(point, verb);
-                });
-            },
-            /**
-             * Returns "animate", or "attr" if the number of points is above the
-             * animation limit.
-             *
-             * @private
-             * @function Highcharts.Series#getAnimationVerb
-             *
-             * @return {string}
-             */
-            getAnimationVerb: function () {
-                return (this.chart.pointCount < (this.options.animationLimit || 250) ?
-                    'animate' :
-                    'attr');
+              );
             }
-            /*
-            // Override to remove stroke from points. For partial fill.
-            pointAttribs: function () {
-                var series = this,
-                        retVal = columnType.prototype.pointAttribs
-                            .apply(series,
-                    arguments);
-
-                //retVal['stroke-width'] = 0;
-                return retVal;
+          }
+          if (e.DOMType !== "mousemove" && e.DOMType !== "touchmove") {
+            navigator.grabbedLeft =
+              navigator.grabbedRight =
+              navigator.grabbedCenter =
+              navigator.fixedWidth =
+              navigator.fixedExtreme =
+              navigator.otherHandlePos =
+              navigator.hasDragged =
+              navigator.dragOffset =
+                null;
+          }
+          // Update position of navigator shades, outline and handles (#12573)
+          if (
+            navigator.navigatorEnabled &&
+            isNumber(navigator.zoomedMin) &&
+            isNumber(navigator.zoomedMax)
+          ) {
+            zoomedMin = Math.round(navigator.zoomedMin);
+            zoomedMax = Math.round(navigator.zoomedMax);
+            if (navigator.shades) {
+              navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
             }
-            //*/
-            /* eslint-enable valid-jsdoc */
-        }, {
-            /**
-             * The ending X value of the range point.
-             * @name Highcharts.Point#x2
-             * @type {number|undefined}
-             * @requires modules/xrange
-             */
-            /**
-             * Extend applyOptions so that `colorByPoint` for x-range means that one
-             * color is applied per Y axis category.
-             *
-             * @private
-             * @function Highcharts.Point#applyOptions
-             *
-             * @return {Highcharts.Series}
-             */
-            /* eslint-disable valid-jsdoc */
-            /**
-             * @private
-             */
-            resolveColor: function () {
-                var series = this.series,
-                    colorByPoint;
-                if (series.options.colorByPoint && !this.options.color) {
-                    colorByPoint = getColorByCategory(series, this);
-                    if (!series.chart.styledMode) {
-                        this.color = colorByPoint.color;
-                    }
-                    if (!this.options.colorIndex) {
-                        this.colorIndex = colorByPoint.colorIndex;
-                    }
-                }
-                else if (!this.color) {
-                    this.color = series.color;
-                }
-            },
-            /**
-             * Extend init to have y default to 0.
-             *
-             * @private
-             * @function Highcharts.Point#init
-             *
-             * @return {Highcharts.Point}
-             */
-            init: function () {
-                Point.prototype.init.apply(this, arguments);
-                if (!this.y) {
-                    this.y = 0;
-                }
-                return this;
-            },
-            /**
-             * @private
-             * @function Highcharts.Point#setState
-             */
-            setState: function () {
-                Point.prototype.setState.apply(this, arguments);
-                this.series.drawPoint(this, this.series.getAnimationVerb());
-            },
-            /**
-             * @private
-             * @function Highcharts.Point#getLabelConfig
-             *
-             * @return {Highcharts.PointLabelObject}
-             */
-            // Add x2 and yCategory to the available properties for tooltip formats
-            getLabelConfig: function () {
-                var point = this,
-                    cfg = Point.prototype.getLabelConfig.call(point),
-                    yCats = point.series.yAxis.categories;
-                cfg.x2 = point.x2;
-                cfg.yCategory = point.yCategory = yCats && yCats[point.y];
-                return cfg;
-            },
-            tooltipDateKeys: ['x', 'x2'],
-            /**
-             * @private
-             * @function Highcharts.Point#isValid
-             *
-             * @return {boolean}
-             */
-            isValid: function () {
-                return typeof this.x === 'number' &&
-                    typeof this.x2 === 'number';
+            if (navigator.outline) {
+              navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
             }
-            /* eslint-enable valid-jsdoc */
-        });
-        /**
-         * Max x2 should be considered in xAxis extremes
-         */
-        addEvent(Axis, 'afterGetSeriesExtremes', function () {
-            var axis = this, // eslint-disable-line no-invalid-this
-                axisSeries = axis.series,
-                dataMax,
-                modMax;
-            if (axis.isXAxis) {
-                dataMax = pick(axis.dataMax, -Number.MAX_VALUE);
-                axisSeries.forEach(function (series) {
-                    if (series.x2Data) {
-                        series.x2Data
-                            .forEach(function (val) {
-                            if (val > dataMax) {
-                                dataMax = val;
-                                modMax = true;
-                            }
-                        });
-                    }
-                });
-                if (modMax) {
-                    axis.dataMax = dataMax;
-                }
+            if (
+              navigator.navigatorOptions.handles.enabled &&
+              Object.keys(navigator.handles).length === navigator.handles.length
+            ) {
+              navigator.drawHandle(zoomedMin, 0, inverted, verb);
+              navigator.drawHandle(zoomedMax, 1, inverted, verb);
             }
-        });
+          }
+        };
         /**
-         * An `xrange` series. If the [type](#series.xrange.type) option is not
-         * specified, it is inherited from [chart.type](#chart.type).
-         *
-         * @extends   series,plotOptions.xrange
-         * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,
-         *            findNearestPointBy, getExtremesFromAll, negativeColor,
-         *            pointInterval, pointIntervalUnit, pointPlacement, pointRange,
-         *            pointStart, softThreshold, stacking, threshold, dataSorting,
-         *            boostBlending
-         * @product   highcharts highstock gantt
-         * @requires  modules/xrange
-         * @apioption series.xrange
+         * Removes the event handlers attached previously with addEvents.
+         *
+         * @private
+         * @function Highcharts.Navigator#removeEvents
+         * @return {void}
          */
+        Navigator.prototype.removeEvents = function () {
+          if (this.eventsToUnbind) {
+            this.eventsToUnbind.forEach(function (unbind) {
+              unbind();
+            });
+            this.eventsToUnbind = void 0;
+          }
+          this.removeBaseSeriesEvents();
+        };
         /**
-         * An array of data points for the series. For the `xrange` series type,
-         * points can be given in the following ways:
-         *
-         * 1. An array of objects with named values. The objects are point configuration
-         *    objects as seen below.
-         *    ```js
-         *    data: [{
-         *        x: Date.UTC(2017, 0, 1),
-         *        x2: Date.UTC(2017, 0, 3),
-         *        name: "Test",
-         *        y: 0,
-         *        color: "#00FF00"
-         *    }, {
-         *        x: Date.UTC(2017, 0, 4),
-         *        x2: Date.UTC(2017, 0, 5),
-         *        name: "Deploy",
-         *        y: 1,
-         *        color: "#FF0000"
-         *    }]
-         *    ```
-         *
-         * @sample {highcharts} highcharts/series/data-array-of-objects/
-         *         Config objects
-         *
-         * @declare   Highcharts.XrangePointOptionsObject
-         * @type      {Array<*>}
-         * @extends   series.line.data
-         * @product   highcharts highstock gantt
-         * @apioption series.xrange.data
+         * Remove data events.
+         *
+         * @private
+         * @function Highcharts.Navigator#removeBaseSeriesEvents
+         * @return {void}
          */
+        Navigator.prototype.removeBaseSeriesEvents = function () {
+          var baseSeries = this.baseSeries || [];
+          if (this.navigatorEnabled && baseSeries[0]) {
+            if (this.navigatorOptions.adaptToUpdatedData !== false) {
+              baseSeries.forEach(function (series) {
+                removeEvent(series, "updatedData", this.updatedDataHandler);
+              }, this);
+            }
+            // We only listen for extremes-events on the first baseSeries
+            if (baseSeries[0].xAxis) {
+              removeEvent(
+                baseSeries[0].xAxis,
+                "foundExtremes",
+                this.modifyBaseAxisExtremes
+              );
+            }
+          }
+        };
         /**
-         * The starting X value of the range point.
+         * Initialize the Navigator object
          *
-         * @sample {highcharts} highcharts/demo/x-range
-         *         X-range
+         * @private
+         * @function Highcharts.Navigator#init
          *
-         * @type      {number}
-         * @product   highcharts highstock gantt
-         * @apioption series.xrange.data.x
+         * @param {Highcharts.Chart} chart
          */
+        Navigator.prototype.init = function (chart) {
+          var chartOptions = chart.options,
+            navigatorOptions = chartOptions.navigator,
+            navigatorEnabled = navigatorOptions.enabled,
+            scrollbarOptions = chartOptions.scrollbar,
+            scrollbarEnabled = scrollbarOptions.enabled,
+            height = navigatorEnabled ? navigatorOptions.height : 0,
+            scrollbarHeight = scrollbarEnabled ? scrollbarOptions.height : 0;
+          this.handles = [];
+          this.shades = [];
+          this.chart = chart;
+          this.setBaseSeries();
+          this.height = height;
+          this.scrollbarHeight = scrollbarHeight;
+          this.scrollbarEnabled = scrollbarEnabled;
+          this.navigatorEnabled = navigatorEnabled;
+          this.navigatorOptions = navigatorOptions;
+          this.scrollbarOptions = scrollbarOptions;
+          this.outlineHeight = height + scrollbarHeight;
+          this.opposite = pick(
+            navigatorOptions.opposite,
+            Boolean(!navigatorEnabled && chart.inverted)
+          ); // #6262
+          var navigator = this,
+            baseSeries = navigator.baseSeries,
+            xAxisIndex = chart.xAxis.length,
+            yAxisIndex = chart.yAxis.length,
+            baseXaxis = (baseSeries && baseSeries[0] && baseSeries[0].xAxis) ||
+              chart.xAxis[0] || { options: {} };
+          chart.isDirtyBox = true;
+          if (navigator.navigatorEnabled) {
+            // an x axis is required for scrollbar also
+            navigator.xAxis = new Axis(
+              chart,
+              merge(
+                {
+                  // inherit base xAxis' break and ordinal options
+                  breaks: baseXaxis.options.breaks,
+                  ordinal: baseXaxis.options.ordinal,
+                },
+                navigatorOptions.xAxis,
+                {
+                  id: "navigator-x-axis",
+                  yAxis: "navigator-y-axis",
+                  isX: true,
+                  type: "datetime",
+                  index: xAxisIndex,
+                  isInternal: true,
+                  offset: 0,
+                  keepOrdinalPadding: true,
+                  startOnTick: false,
+                  endOnTick: false,
+                  minPadding: 0,
+                  maxPadding: 0,
+                  zoomEnabled: false,
+                },
+                chart.inverted
+                  ? {
+                      offsets: [scrollbarHeight, 0, -scrollbarHeight, 0],
+                      width: height,
+                    }
+                  : {
+                      offsets: [0, -scrollbarHeight, 0, scrollbarHeight],
+                      height: height,
+                    }
+              )
+            );
+            navigator.yAxis = new Axis(
+              chart,
+              merge(
+                navigatorOptions.yAxis,
+                {
+                  id: "navigator-y-axis",
+                  alignTicks: false,
+                  offset: 0,
+                  index: yAxisIndex,
+                  isInternal: true,
+                  reversed: pick(
+                    navigatorOptions.yAxis && navigatorOptions.yAxis.reversed,
+                    chart.yAxis[0] && chart.yAxis[0].reversed,
+                    false
+                  ),
+                  zoomEnabled: false,
+                },
+                chart.inverted
+                  ? {
+                      width: height,
+                    }
+                  : {
+                      height: height,
+                    }
+              )
+            );
+            // If we have a base series, initialize the navigator series
+            if (baseSeries || navigatorOptions.series.data) {
+              navigator.updateNavigatorSeries(false);
+              // If not, set up an event to listen for added series
+            } else if (chart.series.length === 0) {
+              navigator.unbindRedraw = addEvent(
+                chart,
+                "beforeRedraw",
+                function () {
+                  // We've got one, now add it as base
+                  if (chart.series.length > 0 && !navigator.series) {
+                    navigator.setBaseSeries();
+                    navigator.unbindRedraw(); // reset
+                  }
+                }
+              );
+            }
+            navigator.reversedExtremes =
+              (chart.inverted && !navigator.xAxis.reversed) ||
+              (!chart.inverted && navigator.xAxis.reversed);
+            // Render items, so we can bind events to them:
+            navigator.renderElements();
+            // Add mouse events
+            navigator.addMouseEvents();
+            // in case of scrollbar only, fake an x axis to get translation
+          } else {
+            navigator.xAxis = {
+              chart: chart,
+              navigatorAxis: {
+                fake: true,
+              },
+              translate: function (value, reverse) {
+                var axis = chart.xAxis[0],
+                  ext = axis.getExtremes(),
+                  scrollTrackWidth = axis.len - 2 * scrollbarHeight,
+                  min = numExt("min", axis.options.min, ext.dataMin),
+                  valueRange =
+                    numExt("max", axis.options.max, ext.dataMax) - min;
+                return reverse
+                  ? // from pixel to value
+                    (value * valueRange) / scrollTrackWidth + min
+                  : // from value to pixel
+                    (scrollTrackWidth * (value - min)) / valueRange;
+              },
+              toPixels: function (value) {
+                return this.translate(value);
+              },
+              toValue: function (value) {
+                return this.translate(value, true);
+              },
+            };
+            navigator.xAxis.navigatorAxis.axis = navigator.xAxis;
+            navigator.xAxis.navigatorAxis.toFixedRange =
+              NavigatorAxis.AdditionsClass.prototype.toFixedRange.bind(
+                navigator.xAxis.navigatorAxis
+              );
+          }
+          // Initialize the scrollbar
+          if (chart.options.scrollbar.enabled) {
+            chart.scrollbar = navigator.scrollbar = new Scrollbar(
+              chart.renderer,
+              merge(chart.options.scrollbar, {
+                margin: navigator.navigatorEnabled ? 0 : 10,
+                vertical: chart.inverted,
+              }),
+              chart
+            );
+            addEvent(navigator.scrollbar, "changed", function (e) {
+              var range = navigator.size,
+                to = range * this.to,
+                from = range * this.from;
+              navigator.hasDragged = navigator.scrollbar.hasDragged;
+              navigator.render(0, 0, from, to);
+              if (
+                chart.options.scrollbar.liveRedraw ||
+                (e.DOMType !== "mousemove" && e.DOMType !== "touchmove")
+              ) {
+                setTimeout(function () {
+                  navigator.onMouseUp(e);
+                });
+              }
+            });
+          }
+          // Add data events
+          navigator.addBaseSeriesEvents();
+          // Add redraw events
+          navigator.addChartEvents();
+        };
         /**
-         * The ending X value of the range point.
+         * Get the union data extremes of the chart - the outer data extremes of the
+         * base X axis and the navigator axis.
          *
-         * @sample {highcharts} highcharts/demo/x-range
-         *         X-range
-         *
-         * @type      {number}
-         * @product   highcharts highstock gantt
-         * @apioption series.xrange.data.x2
+         * @private
+         * @function Highcharts.Navigator#getUnionExtremes
+         * @param {boolean} [returnFalseOnNoBaseSeries]
+         *        as the param says.
+         * @return {Highcharts.Dictionary<(number|undefined)>|undefined}
          */
+        Navigator.prototype.getUnionExtremes = function (
+          returnFalseOnNoBaseSeries
+        ) {
+          var baseAxis = this.chart.xAxis[0],
+            navAxis = this.xAxis,
+            navAxisOptions = navAxis.options,
+            baseAxisOptions = baseAxis.options,
+            ret;
+          if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {
+            ret = {
+              dataMin: pick(
+                // #4053
+                navAxisOptions && navAxisOptions.min,
+                numExt(
+                  "min",
+                  baseAxisOptions.min,
+                  baseAxis.dataMin,
+                  navAxis.dataMin,
+                  navAxis.min
+                )
+              ),
+              dataMax: pick(
+                navAxisOptions && navAxisOptions.max,
+                numExt(
+                  "max",
+                  baseAxisOptions.max,
+                  baseAxis.dataMax,
+                  navAxis.dataMax,
+                  navAxis.max
+                )
+              ),
+            };
+          }
+          return ret;
+        };
         /**
-         * The Y value of the range point.
-         *
-         * @sample {highcharts} highcharts/demo/x-range
-         *         X-range
+         * Set the base series and update the navigator series from this. With a bit
+         * of modification we should be able to make this an API method to be called
+         * from the outside
          *
-         * @type      {number}
-         * @product   highcharts highstock gantt
-         * @apioption series.xrange.data.y
+         * @private
+         * @function Highcharts.Navigator#setBaseSeries
+         * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]
+         *        Additional series options for a navigator
+         * @param {boolean} [redraw]
+         *        Whether to redraw after update.
+         * @return {void}
          */
+        Navigator.prototype.setBaseSeries = function (
+          baseSeriesOptions,
+          redraw
+        ) {
+          var chart = this.chart,
+            baseSeries = (this.baseSeries = []);
+          baseSeriesOptions =
+            baseSeriesOptions ||
+            (chart.options && chart.options.navigator.baseSeries) ||
+            (chart.series.length
+              ? // Find the first non-navigator series (#8430)
+                find(chart.series, function (s) {
+                  return !s.options.isInternal;
+                }).index
+              : 0);
+          // Iterate through series and add the ones that should be shown in
+          // navigator.
+          (chart.series || []).forEach(function (series, i) {
+            if (
+              // Don't include existing nav series
+              !series.options.isInternal &&
+              (series.options.showInNavigator ||
+                ((i === baseSeriesOptions ||
+                  series.options.id === baseSeriesOptions) &&
+                  series.options.showInNavigator !== false))
+            ) {
+              baseSeries.push(series);
+            }
+          });
+          // When run after render, this.xAxis already exists
+          if (this.xAxis && !this.xAxis.navigatorAxis.fake) {
+            this.updateNavigatorSeries(true, redraw);
+          }
+        };
         /**
-         * A partial fill for each point, typically used to visualize how much of
-         * a task is performed. The partial fill object can be set either on series
-         * or point level.
-         *
-         * @sample {highcharts} highcharts/demo/x-range
-         *         X-range with partial fill
+         * Update series in the navigator from baseSeries, adding new if does not
+         * exist.
          *
-         * @declare   Highcharts.XrangePointPartialFillOptionsObject
-         * @product   highcharts highstock gantt
-         * @apioption series.xrange.data.partialFill
+         * @private
+         * @function Highcharts.Navigator.updateNavigatorSeries
+         * @param {boolean} addEvents
+         * @param {boolean} [redraw]
+         * @return {void}
          */
+        Navigator.prototype.updateNavigatorSeries = function (
+          addEvents,
+          redraw
+        ) {
+          var navigator = this,
+            chart = navigator.chart,
+            baseSeries = navigator.baseSeries,
+            baseOptions,
+            mergedNavSeriesOptions,
+            chartNavigatorSeriesOptions = navigator.navigatorOptions.series,
+            baseNavigatorOptions,
+            navSeriesMixin = {
+              enableMouseTracking: false,
+              index: null,
+              linkedTo: null,
+              group: "nav",
+              padXAxis: false,
+              xAxis: "navigator-x-axis",
+              yAxis: "navigator-y-axis",
+              showInLegend: false,
+              stacking: void 0,
+              isInternal: true,
+              states: {
+                inactive: {
+                  opacity: 1,
+                },
+              },
+            },
+            // Remove navigator series that are no longer in the baseSeries
+            navigatorSeries = (navigator.series = (
+              navigator.series || []
+            ).filter(function (navSeries) {
+              var base = navSeries.baseSeries;
+              if (baseSeries.indexOf(base) < 0) {
+                // Not in array
+                // If there is still a base series connected to this
+                // series, remove event handler and reference.
+                if (base) {
+                  removeEvent(
+                    base,
+                    "updatedData",
+                    navigator.updatedDataHandler
+                  );
+                  delete base.navigatorSeries;
+                }
+                // Kill the nav series. It may already have been
+                // destroyed (#8715).
+                if (navSeries.chart) {
+                  navSeries.destroy();
+                }
+                return false;
+              }
+              return true;
+            }));
+          // Go through each base series and merge the options to create new
+          // series
+          if (baseSeries && baseSeries.length) {
+            baseSeries.forEach(function eachBaseSeries(base) {
+              var linkedNavSeries = base.navigatorSeries,
+                userNavOptions = extend(
+                  // Grab color and visibility from base as default
+                  {
+                    color: base.color,
+                    visible: base.visible,
+                  },
+                  !isArray(chartNavigatorSeriesOptions)
+                    ? chartNavigatorSeriesOptions
+                    : defaultOptions.navigator.series
+                );
+              // Don't update if the series exists in nav and we have disabled
+              // adaptToUpdatedData.
+              if (
+                linkedNavSeries &&
+                navigator.navigatorOptions.adaptToUpdatedData === false
+              ) {
+                return;
+              }
+              navSeriesMixin.name = "Navigator " + baseSeries.length;
+              baseOptions = base.options || {};
+              baseNavigatorOptions = baseOptions.navigatorOptions || {};
+              mergedNavSeriesOptions = merge(
+                baseOptions,
+                navSeriesMixin,
+                userNavOptions,
+                baseNavigatorOptions
+              );
+              // Once nav series type is resolved, pick correct pointRange
+              mergedNavSeriesOptions.pointRange = pick(
+                // Stricte set pointRange in options
+                userNavOptions.pointRange,
+                baseNavigatorOptions.pointRange,
+                // Fallback to default values, e.g. `null` for column
+                defaultOptions.plotOptions[
+                  mergedNavSeriesOptions.type || "line"
+                ].pointRange
+              );
+              // Merge data separately. Do a slice to avoid mutating the
+              // navigator options from base series (#4923).
+              var navigatorSeriesData =
+                baseNavigatorOptions.data || userNavOptions.data;
+              navigator.hasNavigatorData =
+                navigator.hasNavigatorData || !!navigatorSeriesData;
+              mergedNavSeriesOptions.data =
+                navigatorSeriesData ||
+                (baseOptions.data && baseOptions.data.slice(0));
+              // Update or add the series
+              if (linkedNavSeries && linkedNavSeries.options) {
+                linkedNavSeries.update(mergedNavSeriesOptions, redraw);
+              } else {
+                base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);
+                base.navigatorSeries.baseSeries = base; // Store ref
+                navigatorSeries.push(base.navigatorSeries);
+              }
+            });
+          }
+          // If user has defined data (and no base series) or explicitly defined
+          // navigator.series as an array, we create these series on top of any
+          // base series.
+          if (
+            (chartNavigatorSeriesOptions.data &&
+              !(baseSeries && baseSeries.length)) ||
+            isArray(chartNavigatorSeriesOptions)
+          ) {
+            navigator.hasNavigatorData = false;
+            // Allow navigator.series to be an array
+            chartNavigatorSeriesOptions = splat(chartNavigatorSeriesOptions);
+            chartNavigatorSeriesOptions.forEach(function (
+              userSeriesOptions,
+              i
+            ) {
+              navSeriesMixin.name = "Navigator " + (navigatorSeries.length + 1);
+              mergedNavSeriesOptions = merge(
+                defaultOptions.navigator.series,
+                {
+                  // Since we don't have a base series to pull color from,
+                  // try to fake it by using color from series with same
+                  // index. Otherwise pull from the colors array. We need
+                  // an explicit color as otherwise updates will increment
+                  // color counter and we'll get a new color for each
+                  // update of the nav series.
+                  color:
+                    (chart.series[i] &&
+                      !chart.series[i].options.isInternal &&
+                      chart.series[i].color) ||
+                    chart.options.colors[i] ||
+                    chart.options.colors[0],
+                },
+                navSeriesMixin,
+                userSeriesOptions
+              );
+              mergedNavSeriesOptions.data = userSeriesOptions.data;
+              if (mergedNavSeriesOptions.data) {
+                navigator.hasNavigatorData = true;
+                navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));
+              }
+            });
+          }
+          if (addEvents) {
+            this.addBaseSeriesEvents();
+          }
+        };
         /**
-         * The amount of the X-range point to be filled. Values can be 0-1 and are
-         * converted to percentages in the default data label formatter.
+         * Add data events.
+         * For example when main series is updated we need to recalculate extremes
          *
-         * @type      {number}
-         * @product   highcharts highstock gantt
-         * @apioption series.xrange.data.partialFill.amount
+         * @private
+         * @function Highcharts.Navigator#addBaseSeriesEvent
+         * @return {void}
          */
+        Navigator.prototype.addBaseSeriesEvents = function () {
+          var navigator = this,
+            baseSeries = navigator.baseSeries || [];
+          // Bind modified extremes event to first base's xAxis only.
+          // In event of > 1 base-xAxes, the navigator will ignore those.
+          // Adding this multiple times to the same axis is no problem, as
+          // duplicates should be discarded by the browser.
+          if (baseSeries[0] && baseSeries[0].xAxis) {
+            addEvent(
+              baseSeries[0].xAxis,
+              "foundExtremes",
+              this.modifyBaseAxisExtremes
+            );
+          }
+          baseSeries.forEach(function (base) {
+            // Link base series show/hide to navigator series visibility
+            addEvent(base, "show", function () {
+              if (this.navigatorSeries) {
+                this.navigatorSeries.setVisible(true, false);
+              }
+            });
+            addEvent(base, "hide", function () {
+              if (this.navigatorSeries) {
+                this.navigatorSeries.setVisible(false, false);
+              }
+            });
+            // Respond to updated data in the base series, unless explicitily
+            // not adapting to data changes.
+            if (this.navigatorOptions.adaptToUpdatedData !== false) {
+              if (base.xAxis) {
+                addEvent(base, "updatedData", this.updatedDataHandler);
+              }
+            }
+            // Handle series removal
+            addEvent(base, "remove", function () {
+              if (this.navigatorSeries) {
+                erase(navigator.series, this.navigatorSeries);
+                if (defined(this.navigatorSeries.options)) {
+                  this.navigatorSeries.remove(false);
+                }
+                delete this.navigatorSeries;
+              }
+            });
+          }, this);
+        };
         /**
-         * The fill color to be used for partial fills. Defaults to a darker shade
-         * of the point color.
-         *
-         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-         * @product   highcharts highstock gantt
-         * @apioption series.xrange.data.partialFill.fill
+         * Get minimum from all base series connected to the navigator
+         * @private
+         * @param  {number} currentSeriesMin
+         *         Minium from the current series
+         * @return {number} Minimum from all series
          */
-        ''; // adds doclets above to transpiled file
-
-    });
-    _registerModule(_modules, 'Series/GanttSeries.js', [_modules['Core/Series/Series.js'], _modules['Core/Globals.js'], _modules['Core/Options.js'], _modules['Core/Utilities.js']], function (BaseSeries, H, O, U) {
-        /* *
-         *
-         *  (c) 2016-2020 Highsoft AS
-         *
-         *  Author: Lars A. V. Cabrera
-         *
-         *  License: www.highcharts.com/license
+        Navigator.prototype.getBaseSeriesMin = function (currentSeriesMin) {
+          return this.baseSeries.reduce(function (min, series) {
+            // (#10193)
+            return Math.min(min, series.xData ? series.xData[0] : min);
+          }, currentSeriesMin);
+        };
+        /**
+         * Set the navigator x axis extremes to reflect the total. The navigator
+         * extremes should always be the extremes of the union of all series in the
+         * chart as well as the navigator series.
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @private
+         * @function Highcharts.Navigator#modifyNavigatorAxisExtremes
+         */
+        Navigator.prototype.modifyNavigatorAxisExtremes = function () {
+          var xAxis = this.xAxis,
+            unionExtremes;
+          if (typeof xAxis.getExtremes !== "undefined") {
+            unionExtremes = this.getUnionExtremes(true);
+            if (
+              unionExtremes &&
+              (unionExtremes.dataMin !== xAxis.min ||
+                unionExtremes.dataMax !== xAxis.max)
+            ) {
+              xAxis.min = unionExtremes.dataMin;
+              xAxis.max = unionExtremes.dataMax;
+            }
+          }
+        };
+        /**
+         * Hook to modify the base axis extremes with information from the Navigator
          *
-         * */
-        var dateFormat = O.dateFormat;
-        var isNumber = U.isNumber,
-            merge = U.merge,
-            pick = U.pick,
-            splat = U.splat;
-        var Series = H.Series,
-            seriesTypes = BaseSeries.seriesTypes,
-            parent = seriesTypes.xrange;
+         * @private
+         * @function Highcharts.Navigator#modifyBaseAxisExtremes
+         */
+        Navigator.prototype.modifyBaseAxisExtremes = function () {
+          var baseXAxis = this,
+            navigator = baseXAxis.chart.navigator,
+            baseExtremes = baseXAxis.getExtremes(),
+            baseMin = baseExtremes.min,
+            baseMax = baseExtremes.max,
+            baseDataMin = baseExtremes.dataMin,
+            baseDataMax = baseExtremes.dataMax,
+            range = baseMax - baseMin,
+            stickToMin = navigator.stickToMin,
+            stickToMax = navigator.stickToMax,
+            overscroll = pick(baseXAxis.options.overscroll, 0),
+            newMax,
+            newMin,
+            navigatorSeries = navigator.series && navigator.series[0],
+            hasSetExtremes = !!baseXAxis.setExtremes,
+            // When the extremes have been set by range selector button, don't
+            // stick to min or max. The range selector buttons will handle the
+            // extremes. (#5489)
+            unmutable =
+              baseXAxis.eventArgs &&
+              baseXAxis.eventArgs.trigger === "rangeSelectorButton";
+          if (!unmutable) {
+            // If the zoomed range is already at the min, move it to the right
+            // as new data comes in
+            if (stickToMin) {
+              newMin = baseDataMin;
+              newMax = newMin + range;
+            }
+            // If the zoomed range is already at the max, move it to the right
+            // as new data comes in
+            if (stickToMax) {
+              newMax = baseDataMax + overscroll;
+              // If stickToMin is true, the new min value is set above
+              if (!stickToMin) {
+                newMin = Math.max(
+                  baseDataMin, // don't go below data extremes (#13184)
+                  newMax - range,
+                  navigator.getBaseSeriesMin(
+                    navigatorSeries && navigatorSeries.xData
+                      ? navigatorSeries.xData[0]
+                      : -Number.MAX_VALUE
+                  )
+                );
+              }
+            }
+            // Update the extremes
+            if (hasSetExtremes && (stickToMin || stickToMax)) {
+              if (isNumber(newMin)) {
+                baseXAxis.min = baseXAxis.userMin = newMin;
+                baseXAxis.max = baseXAxis.userMax = newMax;
+              }
+            }
+          }
+          // Reset
+          navigator.stickToMin = navigator.stickToMax = null;
+        };
         /**
+         * Handler for updated data on the base series. When data is modified, the
+         * navigator series must reflect it. This is called from the Chart.redraw
+         * function before axis and series extremes are computed.
+         *
          * @private
-         * @class
-         * @name Highcharts.seriesTypes.gantt
+         * @function Highcharts.Navigator#updateDataHandler
+         */
+        Navigator.prototype.updatedDataHandler = function () {
+          var navigator = this.chart.navigator,
+            baseSeries = this,
+            navigatorSeries = this.navigatorSeries,
+            xDataMin = navigator.getBaseSeriesMin(baseSeries.xData[0]);
+          // If the scrollbar is scrolled all the way to the right, keep right as
+          // new data  comes in.
+          navigator.stickToMax = navigator.reversedExtremes
+            ? Math.round(navigator.zoomedMin) === 0
+            : Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
+          // Detect whether the zoomed area should stick to the minimum or
+          // maximum. If the current axis minimum falls outside the new updated
+          // dataset, we must adjust.
+          navigator.stickToMin =
+            isNumber(baseSeries.xAxis.min) &&
+            baseSeries.xAxis.min <= xDataMin &&
+            (!this.chart.fixedRange || !navigator.stickToMax);
+          // Set the navigator series data to the new data of the base series
+          if (navigatorSeries && !navigator.hasNavigatorData) {
+            navigatorSeries.options.pointStart = baseSeries.xData[0];
+            navigatorSeries.setData(
+              baseSeries.options.data,
+              false,
+              null,
+              false
+            ); // #5414
+          }
+        };
+        /**
+         * Add chart events, like redrawing navigator, when chart requires that.
          *
-         * @augments Highcharts.Series
+         * @private
+         * @function Highcharts.Navigator#addChartEvents
+         * @return {void}
          */
-        BaseSeries.seriesType('gantt', 'xrange'
+        Navigator.prototype.addChartEvents = function () {
+          if (!this.eventsToUnbind) {
+            this.eventsToUnbind = [];
+          }
+          this.eventsToUnbind.push(
+            // Move the scrollbar after redraw, like after data updata even if
+            // axes don't redraw
+            addEvent(this.chart, "redraw", function () {
+              var navigator = this.navigator,
+                xAxis =
+                  navigator &&
+                  ((navigator.baseSeries &&
+                    navigator.baseSeries[0] &&
+                    navigator.baseSeries[0].xAxis) ||
+                    this.xAxis[0]); // #5709, #13114
+              if (xAxis) {
+                navigator.render(xAxis.min, xAxis.max);
+              }
+            }),
+            // Make room for the navigator, can be placed around the chart:
+            addEvent(this.chart, "getMargins", function () {
+              var chart = this,
+                navigator = chart.navigator,
+                marginName = navigator.opposite ? "plotTop" : "marginBottom";
+              if (chart.inverted) {
+                marginName = navigator.opposite ? "marginRight" : "plotLeft";
+              }
+              chart[marginName] =
+                (chart[marginName] || 0) +
+                (navigator.navigatorEnabled || !chart.inverted
+                  ? navigator.outlineHeight
+                  : 0) +
+                navigator.navigatorOptions.margin;
+            })
+          );
+        };
         /**
-         * A `gantt` series. If the [type](#series.gantt.type) option is not specified,
-         * it is inherited from [chart.type](#chart.type).
+         * Destroys allocated elements.
          *
-         * @extends      plotOptions.xrange
-         * @product      gantt
-         * @requires     highcharts-gantt
-         * @optionparent plotOptions.gantt
+         * @private
+         * @function Highcharts.Navigator#destroy
          */
-        , {
-            // options - default options merged with parent
-            grouping: false,
-            dataLabels: {
-                enabled: true
-            },
-            tooltip: {
-                headerFormat: '<span style="font-size: 10px">{series.name}</span><br/>',
-                pointFormat: null,
-                pointFormatter: function () {
-                    var point = this,
-                        series = point.series,
-                        tooltip = series.chart.tooltip,
-                        xAxis = series.xAxis,
-                        formats = series.tooltipOptions.dateTimeLabelFormats,
-                        startOfWeek = xAxis.options.startOfWeek,
-                        ttOptions = series.tooltipOptions,
-                        format = ttOptions.xDateFormat,
-                        start,
-                        end,
-                        milestone = point.options.milestone,
-                        retVal = '<b>' + (point.name || point.yCategory) + '</b>';
-                    if (ttOptions.pointFormat) {
-                        return point.tooltipFormatter(ttOptions.pointFormat);
-                    }
-                    if (!format) {
-                        format = splat(tooltip.getDateFormat(xAxis.closestPointRange, point.start, startOfWeek, formats))[0];
-                    }
-                    start = series.chart.time.dateFormat(format, point.start);
-                    end = series.chart.time.dateFormat(format, point.end);
-                    retVal += '<br/>';
-                    if (!milestone) {
-                        retVal += 'Start: ' + start + '<br/>';
-                        retVal += 'End: ' + end + '<br/>';
-                    }
-                    else {
-                        retVal += start + '<br/>';
-                    }
-                    return retVal;
-                }
-            },
-            connectors: {
-                type: 'simpleConnect',
-                /**
-                 * @declare Highcharts.ConnectorsAnimationOptionsObject
-                 */
-                animation: {
-                    reversed: true // Dependencies go from child to parent
-                },
-                startMarker: {
-                    enabled: true,
-                    symbol: 'arrow-filled',
-                    radius: 4,
-                    fill: '#fa0',
-                    align: 'left'
-                },
-                endMarker: {
-                    enabled: false,
-                    align: 'right'
-                }
+        Navigator.prototype.destroy = function () {
+          // Disconnect events added in addEvents
+          this.removeEvents();
+          if (this.xAxis) {
+            erase(this.chart.xAxis, this.xAxis);
+            erase(this.chart.axes, this.xAxis);
+          }
+          if (this.yAxis) {
+            erase(this.chart.yAxis, this.yAxis);
+            erase(this.chart.axes, this.yAxis);
+          }
+          // Destroy series
+          (this.series || []).forEach(function (s) {
+            if (s.destroy) {
+              s.destroy();
             }
-        }, {
-            pointArrayMap: ['start', 'end', 'y'],
-            // Keyboard navigation, don't use nearest vertical mode
-            keyboardMoveVertical: false,
-            /* eslint-disable valid-jsdoc */
-            /**
-             * Handle milestones, as they have no x2.
-             * @private
-             */
-            translatePoint: function (point) {
-                var series = this,
-                    shapeArgs,
-                    size;
-                parent.prototype.translatePoint.call(series, point);
-                if (point.options.milestone) {
-                    shapeArgs = point.shapeArgs;
-                    size = shapeArgs.height;
-                    point.shapeArgs = {
-                        x: shapeArgs.x - (size / 2),
-                        y: shapeArgs.y,
-                        width: size,
-                        height: size
-                    };
-                }
-            },
-            /**
-             * Draws a single point in the series.
-             *
-             * This override draws the point as a diamond if point.options.milestone
-             * is true, and uses the original drawPoint() if it is false or not set.
-             *
-             * @requires highcharts-gantt
-             *
-             * @private
-             * @function Highcharts.seriesTypes.gantt#drawPoint
-             *
-             * @param {Highcharts.Point} point
-             *        An instance of Point in the series
-             *
-             * @param {"animate"|"attr"} verb
-             *        'animate' (animates changes) or 'attr' (sets options)
-             *
-             * @return {void}
-             */
-            drawPoint: function (point, verb) {
-                var series = this,
-                    seriesOpts = series.options,
-                    renderer = series.chart.renderer,
-                    shapeArgs = point.shapeArgs,
-                    plotY = point.plotY,
-                    graphic = point.graphic,
-                    state = point.selected && 'select',
-                    cutOff = seriesOpts.stacking && !seriesOpts.borderRadius,
-                    diamondShape;
-                if (point.options.milestone) {
-                    if (isNumber(plotY) && point.y !== null && point.visible !== false) {
-                        diamondShape = renderer.symbols.diamond(shapeArgs.x, shapeArgs.y, shapeArgs.width, shapeArgs.height);
-                        if (graphic) {
-                            graphic[verb]({
-                                d: diamondShape
-                            });
-                        }
-                        else {
-                            point.graphic = graphic = renderer.path(diamondShape)
-                                .addClass(point.getClassName(), true)
-                                .add(point.group || series.group);
-                        }
-                        // Presentational
-                        if (!series.chart.styledMode) {
-                            point.graphic
-                                .attr(series.pointAttribs(point, state))
-                                .shadow(seriesOpts.shadow, null, cutOff);
-                        }
-                    }
-                    else if (graphic) {
-                        point.graphic = graphic.destroy(); // #1269
-                    }
-                }
-                else {
-                    parent.prototype.drawPoint.call(series, point, verb);
-                }
-            },
-            setData: Series.prototype.setData,
-            /**
-             * @private
-             */
-            setGanttPointAliases: function (options) {
-                /**
-                 * Add a value to options if the value exists.
-                 * @private
-                 */
-                function addIfExists(prop, val) {
-                    if (typeof val !== 'undefined') {
-                        options[prop] = val;
-                    }
-                }
-                addIfExists('x', pick(options.start, options.x));
-                addIfExists('x2', pick(options.end, options.x2));
-                addIfExists('partialFill', pick(options.completed, options.partialFill));
-            }
-            /* eslint-enable valid-jsdoc */
-        }, merge(parent.prototype.pointClass.prototype, {
-            // pointProps - point member overrides. We inherit from parent as well.
-            /* eslint-disable valid-jsdoc */
-            /**
-             * Applies the options containing the x and y data and possible some
-             * extra properties. This is called on point init or from point.update.
-             *
-             * @private
-             * @function Highcharts.Point#applyOptions
-             *
-             * @param {object} options
-             *        The point options
-             *
-             * @param {number} x
-             *        The x value
-             *
-             * @return {Highcharts.Point}
-             *         The Point instance
-             */
-            applyOptions: function (options, x) {
-                var point = this,
-                    ganttPoint;
-                ganttPoint = parent.prototype.pointClass.prototype.applyOptions
-                    .call(point, options, x);
-                H.seriesTypes.gantt.prototype.setGanttPointAliases(ganttPoint);
-                return ganttPoint;
-            },
-            isValid: function () {
-                return ((typeof this.start === 'number' ||
-                    typeof this.x === 'number') &&
-                    (typeof this.end === 'number' ||
-                        typeof this.x2 === 'number' ||
-                        this.milestone));
-            }
-            /* eslint-enable valid-jsdoc */
-        }));
-        /**
-         * A `gantt` series.
-         *
-         * @extends   series,plotOptions.gantt
-         * @excluding boostThreshold, connectors, dashStyle, findNearestPointBy,
-         *            getExtremesFromAll, marker, negativeColor, pointInterval,
-         *            pointIntervalUnit, pointPlacement, pointStart
-         * @product   gantt
-         * @requires  highcharts-gantt
-         * @apioption series.gantt
-         */
-        /**
-         * Data for a Gantt series.
-         *
-         * @declare   Highcharts.GanttPointOptionsObject
-         * @type      {Array<*>}
-         * @extends   series.xrange.data
-         * @excluding className, color, colorIndex, connect, dataLabels, events,
-         *            partialFill, selected, x, x2
-         * @product   gantt
-         * @apioption series.gantt.data
-         */
-        /**
-         * Whether the grid node belonging to this point should start as collapsed. Used
-         * in axes of type treegrid.
-         *
-         * @sample {gantt} gantt/treegrid-axis/collapsed/
-         *         Start as collapsed
-         *
-         * @type      {boolean}
-         * @default   false
-         * @product   gantt
-         * @apioption series.gantt.data.collapsed
-         */
-        /**
-         * The start time of a task.
-         *
-         * @type      {number}
-         * @product   gantt
-         * @apioption series.gantt.data.start
-         */
-        /**
-         * The end time of a task.
-         *
-         * @type      {number}
-         * @product   gantt
-         * @apioption series.gantt.data.end
-         */
-        /**
-         * The Y value of a task.
-         *
-         * @type      {number}
-         * @product   gantt
-         * @apioption series.gantt.data.y
-         */
-        /**
-         * The name of a task. If a `treegrid` y-axis is used (default in Gantt charts),
-         * this will be picked up automatically, and used to calculate the y-value.
-         *
-         * @type      {string}
-         * @product   gantt
-         * @apioption series.gantt.data.name
-         */
-        /**
-         * Progress indicator, how much of the task completed. If it is a number, the
-         * `fill` will be applied automatically.
-         *
-         * @sample {gantt} gantt/demo/progress-indicator
-         *         Progress indicator
-         *
-         * @type      {number|*}
-         * @extends   series.xrange.data.partialFill
-         * @product   gantt
-         * @apioption series.gantt.data.completed
-         */
-        /**
-         * The amount of the progress indicator, ranging from 0 (not started) to 1
-         * (finished).
-         *
-         * @type      {number}
-         * @default   0
-         * @apioption series.gantt.data.completed.amount
-         */
-        /**
-         * The fill of the progress indicator. Defaults to a darkened variety of the
-         * main color.
-         *
-         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-         * @apioption series.gantt.data.completed.fill
-         */
-        /**
-         * The ID of the point (task) that this point depends on in Gantt charts.
-         * Aliases [connect](series.xrange.data.connect). Can also be an object,
-         * specifying further connecting [options](series.gantt.connectors) between the
-         * points. Multiple connections can be specified by providing an array.
-         *
-         * @sample gantt/demo/project-management
-         *         Dependencies
-         * @sample gantt/pathfinder/demo
-         *         Different connection types
-         *
-         * @type      {string|Array<string|*>|*}
-         * @extends   series.xrange.data.connect
-         * @since     6.2.0
-         * @product   gantt
-         * @apioption series.gantt.data.dependency
-         */
-        /**
-         * Whether this point is a milestone. If so, only the `start` option is handled,
-         * while `end` is ignored.
-         *
-         * @sample gantt/gantt/milestones
-         *         Milestones
-         *
-         * @type      {boolean}
-         * @since     6.2.0
-         * @product   gantt
-         * @apioption series.gantt.data.milestone
-         */
-        /**
-         * The ID of the parent point (task) of this point in Gantt charts.
-         *
-         * @sample gantt/demo/subtasks
-         *         Gantt chart with subtasks
-         *
-         * @type      {string}
-         * @since     6.2.0
-         * @product   gantt
-         * @apioption series.gantt.data.parent
-         */
-        /**
-         * @excluding afterAnimate
-         * @apioption series.gantt.events
-         */
-        ''; // adds doclets above to the transpiled file
-
-    });
-    _registerModule(_modules, 'Core/Chart/GanttChart.js', [_modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (Chart, H, U) {
-        /* *
-         *
-         *  (c) 2016-2020 Highsoft AS
-         *
-         *  Author: Lars A. V. Cabrera
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var getOptions = U.getOptions,
-            isArray = U.isArray,
-            merge = U.merge,
-            splat = U.splat;
-        /**
-         * Factory function for Gantt charts.
-         *
-         * @example
-         * // Render a chart in to div#container
-         * var chart = Highcharts.ganttChart('container', {
-         *     title: {
-         *         text: 'My chart'
-         *     },
-         *     series: [{
-         *         data: ...
-         *     }]
-         * });
-         *
-         * @function Highcharts.ganttChart
-         *
-         * @param {string|Highcharts.HTMLDOMElement} renderTo
-         *        The DOM element to render to, or its id.
-         *
-         * @param {Highcharts.Options} options
-         *        The chart options structure.
-         *
-         * @param {Highcharts.ChartCallbackFunction} [callback]
-         *        Function to run when the chart has loaded and and all external images
-         *        are loaded. Defining a
-         *        [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)
-         *        handler is equivalent.
-         *
-         * @return {Highcharts.Chart}
-         *         Returns the Chart object.
-         */
-        H.ganttChart = function (renderTo, options, callback) {
-            var hasRenderToArg = typeof renderTo === 'string' || renderTo.nodeName,
-                seriesOptions = options.series,
-                defaultOptions = getOptions(),
-                defaultLinkedTo,
-                userOptions = options;
-            options = arguments[hasRenderToArg ? 1 : 0];
-            // If user hasn't defined axes as array, make it into an array and add a
-            // second axis by default.
-            if (!isArray(options.xAxis)) {
-                options.xAxis = [options.xAxis || {}, {}];
-            }
-            // apply X axis options to both single and multi x axes
-            options.xAxis = options.xAxis.map(function (xAxisOptions, i) {
-                if (i === 1) { // Second xAxis
-                    defaultLinkedTo = 0;
-                }
-                return merge(defaultOptions.xAxis, {
-                    grid: {
-                        enabled: true
-                    },
-                    opposite: true,
-                    linkedTo: defaultLinkedTo
-                }, xAxisOptions, // user options
-                {
-                    type: 'datetime'
-                });
-            });
-            // apply Y axis options to both single and multi y axes
-            options.yAxis = (splat(options.yAxis || {})).map(function (yAxisOptions) {
-                return merge(defaultOptions.yAxis, // #3802
-                {
-                    grid: {
-                        enabled: true
-                    },
-                    staticScale: 50,
-                    reversed: true,
-                    // Set default type treegrid, but only if 'categories' is
-                    // undefined
-                    type: yAxisOptions.categories ? yAxisOptions.type : 'treegrid'
-                }, yAxisOptions // user options
-                );
-            });
-            options.series = null;
-            options = merge(true, {
-                chart: {
-                    type: 'gantt'
-                },
-                title: {
-                    text: null
-                },
-                legend: {
-                    enabled: false
-                },
-                navigator: {
-                    series: { type: 'gantt' },
-                    // Bars were clipped, #14060.
-                    yAxis: {
-                        type: 'category'
-                    }
-                }
-            }, options, // user's options
-            // forced options
-            {
-                isGantt: true
-            });
-            options.series = userOptions.series = seriesOptions;
-            return hasRenderToArg ?
-                new Chart(renderTo, options, callback) :
-                new Chart(options, options); // @todo does not look correct
-        };
-
-    });
-    _registerModule(_modules, 'Core/Axis/ScrollbarAxis.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (H, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            pick = U.pick;
-        /* eslint-disable no-invalid-this, valid-jsdoc */
-        /**
-         * Creates scrollbars if enabled.
-         *
-         * @private
-         */
-        var ScrollbarAxis = /** @class */ (function () {
-                function ScrollbarAxis() {
-                }
-                /**
-                 * Attaches to axis events to create scrollbars if enabled.
-                 *
-                 * @private
-                 *
-                 * @param AxisClass
-                 * Axis class to extend.
-                 *
-                 * @param ScrollbarClass
-                 * Scrollbar class to use.
-                 */
-                ScrollbarAxis.compose = function (AxisClass, ScrollbarClass) {
-                    // Wrap axis initialization and create scrollbar if enabled:
-                    addEvent(AxisClass, 'afterInit', function () {
-                        var axis = this;
-                    if (axis.options &&
-                        axis.options.scrollbar &&
-                        axis.options.scrollbar.enabled) {
-                        // Predefined options:
-                        axis.options.scrollbar.vertical = !axis.horiz;
-                        axis.options.startOnTick = axis.options.endOnTick = false;
-                        axis.scrollbar = new ScrollbarClass(axis.chart.renderer, axis.options.scrollbar, axis.chart);
-                        addEvent(axis.scrollbar, 'changed', function (e) {
-                            var axisMin = pick(axis.options && axis.options.min,
-                                axis.min),
-                                axisMax = pick(axis.options && axis.options.max,
-                                axis.max),
-                                unitedMin = defined(axis.dataMin) ?
-                                    Math.min(axisMin,
-                                axis.min,
-                                axis.dataMin) : axisMin,
-                                unitedMax = defined(axis.dataMax) ?
-                                    Math.max(axisMax,
-                                axis.max,
-                                axis.dataMax) : axisMax,
-                                range = unitedMax - unitedMin,
-                                to,
-                                from;
-                            // #12834, scroll when show/hide series, wrong extremes
-                            if (!defined(axisMin) || !defined(axisMax)) {
-                                return;
-                            }
-                            if ((axis.horiz && !axis.reversed) ||
-                                (!axis.horiz && axis.reversed)) {
-                                to = unitedMin + range * this.to;
-                                from = unitedMin + range * this.from;
-                            }
-                            else {
-                                // y-values in browser are reversed, but this also
-                                // applies for reversed horizontal axis:
-                                to = unitedMin + range * (1 - this.from);
-                                from = unitedMin + range * (1 - this.to);
-                            }
-                            if (pick(this.options.liveRedraw, H.svg && !H.isTouchDevice && !this.chart.isBoosting) ||
-                                // Mouseup always should change extremes
-                                e.DOMType === 'mouseup' ||
-                                // Internal events
-                                !defined(e.DOMType)) {
-                                axis.setExtremes(from, to, true, e.DOMType !== 'mousemove', e);
-                            }
-                            else {
-                                // When live redraw is disabled, don't change extremes
-                                // Only change the position of the scollbar thumb
-                                this.setRange(this.from, this.to);
-                            }
-                        });
-                    }
-                });
-                // Wrap rendering axis, and update scrollbar if one is created:
-                addEvent(AxisClass, 'afterRender', function () {
-                    var axis = this,
-                        scrollMin = Math.min(pick(axis.options.min,
-                        axis.min),
-                        axis.min,
-                        pick(axis.dataMin,
-                        axis.min) // #6930
-                        ),
-                        scrollMax = Math.max(pick(axis.options.max,
-                        axis.max),
-                        axis.max,
-                        pick(axis.dataMax,
-                        axis.max) // #6930
-                        ),
-                        scrollbar = axis.scrollbar,
-                        offset = axis.axisTitleMargin + (axis.titleOffset || 0),
-                        scrollbarsOffsets = axis.chart.scrollbarsOffsets,
-                        axisMargin = axis.options.margin || 0,
-                        offsetsIndex,
-                        from,
-                        to;
-                    if (scrollbar) {
-                        if (axis.horiz) {
-                            // Reserve space for labels/title
-                            if (!axis.opposite) {
-                                scrollbarsOffsets[1] += offset;
-                            }
-                            scrollbar.position(axis.left, axis.top + axis.height + 2 + scrollbarsOffsets[1] -
-                                (axis.opposite ? axisMargin : 0), axis.width, axis.height);
-                            // Next scrollbar should reserve space for margin (if set)
-                            if (!axis.opposite) {
-                                scrollbarsOffsets[1] += axisMargin;
-                            }
-                            offsetsIndex = 1;
-                        }
-                        else {
-                            // Reserve space for labels/title
-                            if (axis.opposite) {
-                                scrollbarsOffsets[0] += offset;
-                            }
-                            scrollbar.position(axis.left + axis.width + 2 + scrollbarsOffsets[0] -
-                                (axis.opposite ? 0 : axisMargin), axis.top, axis.width, axis.height);
-                            // Next scrollbar should reserve space for margin (if set)
-                            if (axis.opposite) {
-                                scrollbarsOffsets[0] += axisMargin;
-                            }
-                            offsetsIndex = 0;
-                        }
-                        scrollbarsOffsets[offsetsIndex] += scrollbar.size +
-                            scrollbar.options.margin;
-                        if (isNaN(scrollMin) ||
-                            isNaN(scrollMax) ||
-                            !defined(axis.min) ||
-                            !defined(axis.max) ||
-                            axis.min === axis.max // #10733
-                        ) {
-                            // default action: when extremes are the same or there is
-                            // not extremes on the axis, but scrollbar exists, make it
-                            // full size
-                            scrollbar.setRange(0, 1);
-                        }
-                        else {
-                            from =
-                                (axis.min - scrollMin) / (scrollMax - scrollMin);
-                            to =
-                                (axis.max - scrollMin) / (scrollMax - scrollMin);
-                            if ((axis.horiz && !axis.reversed) ||
-                                (!axis.horiz && axis.reversed)) {
-                                scrollbar.setRange(from, to);
-                            }
-                            else {
-                                // inverse vertical axis
-                                scrollbar.setRange(1 - to, 1 - from);
-                            }
-                        }
-                    }
-                });
-                // Make space for a scrollbar:
-                addEvent(AxisClass, 'afterGetOffset', function () {
-                    var axis = this,
-                        index = axis.horiz ? 2 : 1,
-                        scrollbar = axis.scrollbar;
-                    if (scrollbar) {
-                        axis.chart.scrollbarsOffsets = [0, 0]; // reset scrollbars offsets
-                        axis.chart.axisOffset[index] +=
-                            scrollbar.size + scrollbar.options.margin;
-                    }
-                });
-            };
-            return ScrollbarAxis;
-        }());
-
-        return ScrollbarAxis;
-    });
-    _registerModule(_modules, 'Core/Scrollbar.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Globals.js'], _modules['Core/Axis/ScrollbarAxis.js'], _modules['Core/Utilities.js'], _modules['Core/Options.js']], function (Axis, H, ScrollbarAxis, U, O) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var addEvent = U.addEvent,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            destroyObjectProperties = U.destroyObjectProperties,
-            fireEvent = U.fireEvent,
-            merge = U.merge,
-            pick = U.pick,
-            removeEvent = U.removeEvent;
-        var defaultOptions = O.defaultOptions;
-        var hasTouch = H.hasTouch,
-            isTouchDevice = H.isTouchDevice;
-        /**
-         * When we have vertical scrollbar, rifles and arrow in buttons should be
-         * rotated. The same method is used in Navigator's handles, to rotate them.
-         *
-         * @function Highcharts.swapXY
-         *
-         * @param {Highcharts.SVGPathArray} path
-         * Path to be rotated.
-         *
-         * @param {boolean} [vertical]
-         * If vertical scrollbar, swap x-y values.
-         *
-         * @return {Highcharts.SVGPathArray}
-         * Rotated path.
-         *
-         * @requires modules/stock
-         */
-        var swapXY = H.swapXY = function (path,
-            vertical) {
-                if (vertical) {
-                    path.forEach(function (seg) {
-                        var len = seg.length;
-                    var temp;
-                    for (var i = 0; i < len; i += 2) {
-                        temp = seg[i + 1];
-                        if (typeof temp === 'number') {
-                            seg[i + 1] = seg[i + 2];
-                            seg[i + 2] = temp;
-                        }
-                    }
-                });
-            }
-            return path;
-        };
-        /* eslint-disable no-invalid-this, valid-jsdoc */
-        /**
-         * A reusable scrollbar, internally used in Highstock's navigator and optionally
-         * on individual axes.
-         *
-         * @private
-         * @class
-         * @name Highcharts.Scrollbar
-         * @param {Highcharts.SVGRenderer} renderer
-         * @param {Highcharts.ScrollbarOptions} options
-         * @param {Highcharts.Chart} chart
-         */
-        var Scrollbar = /** @class */ (function () {
-                /* *
-                 *
-                 *  Constructors
-                 *
-                 * */
-                function Scrollbar(renderer, options, chart) {
-                    /* *
-                     *
-                     *  Properties
-                     *
-                     * */
-                    this._events = [];
-                this.chartX = 0;
-                this.chartY = 0;
-                this.from = 0;
-                this.group = void 0;
-                this.scrollbar = void 0;
-                this.scrollbarButtons = [];
-                this.scrollbarGroup = void 0;
-                this.scrollbarLeft = 0;
-                this.scrollbarRifles = void 0;
-                this.scrollbarStrokeWidth = 1;
-                this.scrollbarTop = 0;
-                this.size = 0;
-                this.to = 0;
-                this.track = void 0;
-                this.trackBorderWidth = 1;
-                this.userOptions = {};
-                this.x = 0;
-                this.y = 0;
-                this.chart = chart;
-                this.options = options;
-                this.renderer = chart.renderer;
-                this.init(renderer, options, chart);
-            }
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * Set up the mouse and touch events for the Scrollbar
-             *
-             * @private
-             * @function Highcharts.Scrollbar#addEvents
-             * @return {void}
-             */
-            Scrollbar.prototype.addEvents = function () {
-                var buttonsOrder = this.options.inverted ? [1, 0] : [0, 1],
-                    buttons = this.scrollbarButtons,
-                    bar = this.scrollbarGroup.element,
-                    track = this.track.element,
-                    mouseDownHandler = this.mouseDownHandler.bind(this),
-                    mouseMoveHandler = this.mouseMoveHandler.bind(this),
-                    mouseUpHandler = this.mouseUpHandler.bind(this),
-                    _events;
-                // Mouse events
-                _events = [
-                    [buttons[buttonsOrder[0]].element, 'click', this.buttonToMinClick.bind(this)],
-                    [buttons[buttonsOrder[1]].element, 'click', this.buttonToMaxClick.bind(this)],
-                    [track, 'click', this.trackClick.bind(this)],
-                    [bar, 'mousedown', mouseDownHandler],
-                    [bar.ownerDocument, 'mousemove', mouseMoveHandler],
-                    [bar.ownerDocument, 'mouseup', mouseUpHandler]
-                ];
-                // Touch events
-                if (hasTouch) {
-                    _events.push([bar, 'touchstart', mouseDownHandler], [bar.ownerDocument, 'touchmove', mouseMoveHandler], [bar.ownerDocument, 'touchend', mouseUpHandler]);
-                }
-                // Add them all
-                _events.forEach(function (args) {
-                    addEvent.apply(null, args);
-                });
-                this._events = _events;
-            };
-            Scrollbar.prototype.buttonToMaxClick = function (e) {
-                var scroller = this;
-                var range = (scroller.to - scroller.from) * pick(scroller.options.step, 0.2);
-                scroller.updatePosition(scroller.from + range, scroller.to + range);
-                fireEvent(scroller, 'changed', {
-                    from: scroller.from,
-                    to: scroller.to,
-                    trigger: 'scrollbar',
-                    DOMEvent: e
-                });
-            };
-            Scrollbar.prototype.buttonToMinClick = function (e) {
-                var scroller = this;
-                var range = correctFloat(scroller.to - scroller.from) *
-                        pick(scroller.options.step, 0.2);
-                scroller.updatePosition(correctFloat(scroller.from - range), correctFloat(scroller.to - range));
-                fireEvent(scroller, 'changed', {
-                    from: scroller.from,
-                    to: scroller.to,
-                    trigger: 'scrollbar',
-                    DOMEvent: e
-                });
-            };
-            /**
-             * Get normalized (0-1) cursor position over the scrollbar
-             *
-             * @private
-             * @function Highcharts.Scrollbar#cursorToScrollbarPosition
-             *
-             * @param  {*} normalizedEvent
-             *         normalized event, with chartX and chartY values
-             *
-             * @return {Highcharts.Dictionary<number>}
-             *         Local position {chartX, chartY}
-             */
-            Scrollbar.prototype.cursorToScrollbarPosition = function (normalizedEvent) {
-                var scroller = this,
-                    options = scroller.options,
-                    minWidthDifference = options.minWidth > scroller.calculatedWidth ?
-                        options.minWidth :
-                        0; // minWidth distorts translation
-                    return {
-                        chartX: (normalizedEvent.chartX - scroller.x -
-                            scroller.xOffset) /
-                            (scroller.barWidth - minWidthDifference),
-                        chartY: (normalizedEvent.chartY - scroller.y -
-                            scroller.yOffset) /
-                            (scroller.barWidth - minWidthDifference)
-                    };
-            };
-            /**
-             * Destroys allocated elements.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#destroy
-             * @return {void}
-             */
-            Scrollbar.prototype.destroy = function () {
-                var scroller = this.chart.scroller;
-                // Disconnect events added in addEvents
-                this.removeEvents();
-                // Destroy properties
-                [
-                    'track',
-                    'scrollbarRifles',
-                    'scrollbar',
-                    'scrollbarGroup',
-                    'group'
-                ].forEach(function (prop) {
-                    if (this[prop] && this[prop].destroy) {
-                        this[prop] = this[prop].destroy();
-                    }
-                }, this);
-                // #6421, chart may have more scrollbars
-                if (scroller && this === scroller.scrollbar) {
-                    scroller.scrollbar = null;
-                    // Destroy elements in collection
-                    destroyObjectProperties(scroller.scrollbarButtons);
-                }
-            };
-            /**
-             * Draw the scrollbar buttons with arrows
-             *
-             * @private
-             * @function Highcharts.Scrollbar#drawScrollbarButton
-             * @param {number} index
-             *        0 is left, 1 is right
-             * @return {void}
-             */
-            Scrollbar.prototype.drawScrollbarButton = function (index) {
-                var scroller = this,
-                    renderer = scroller.renderer,
-                    scrollbarButtons = scroller.scrollbarButtons,
-                    options = scroller.options,
-                    size = scroller.size,
-                    group,
-                    tempElem;
-                group = renderer.g().add(scroller.group);
-                scrollbarButtons.push(group);
-                // Create a rectangle for the scrollbar button
-                tempElem = renderer.rect()
-                    .addClass('highcharts-scrollbar-button')
-                    .add(group);
-                // Presentational attributes
-                if (!this.chart.styledMode) {
-                    tempElem.attr({
-                        stroke: options.buttonBorderColor,
-                        'stroke-width': options.buttonBorderWidth,
-                        fill: options.buttonBackgroundColor
-                    });
-                }
-                // Place the rectangle based on the rendered stroke width
-                tempElem.attr(tempElem.crisp({
-                    x: -0.5,
-                    y: -0.5,
-                    width: size + 1,
-                    height: size + 1,
-                    r: options.buttonBorderRadius
-                }, tempElem.strokeWidth()));
-                // Button arrow
-                tempElem = renderer
-                    .path(swapXY([[
-                        'M',
-                        size / 2 + (index ? -1 : 1),
-                        size / 2 - 3
-                    ], [
-                        'L',
-                        size / 2 + (index ? -1 : 1),
-                        size / 2 + 3
-                    ], [
-                        'L',
-                        size / 2 + (index ? 2 : -2),
-                        size / 2
-                    ]], options.vertical))
-                    .addClass('highcharts-scrollbar-arrow')
-                    .add(scrollbarButtons[index]);
-                if (!this.chart.styledMode) {
-                    tempElem.attr({
-                        fill: options.buttonArrowColor
-                    });
-                }
-            };
-            /**
-             * @private
-             * @function Highcharts.Scrollbar#init
-             * @param {Highcharts.SVGRenderer} renderer
-             * @param {Highcharts.ScrollbarOptions} options
-             * @param {Highcharts.Chart} chart
-             */
-            Scrollbar.prototype.init = function (renderer, options, chart) {
-                this.scrollbarButtons = [];
-                this.renderer = renderer;
-                this.userOptions = options;
-                this.options = merge(Scrollbar.defaultOptions, options);
-                this.chart = chart;
-                // backward compatibility
-                this.size = pick(this.options.size, this.options.height);
-                // Init
-                if (options.enabled) {
-                    this.render();
-                    this.addEvents();
-                }
-            };
-            Scrollbar.prototype.mouseDownHandler = function (e) {
-                var scroller = this;
-                var normalizedEvent = scroller.chart.pointer.normalize(e),
-                    mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);
-                scroller.chartX = mousePosition.chartX;
-                scroller.chartY = mousePosition.chartY;
-                scroller.initPositions = [scroller.from, scroller.to];
-                scroller.grabbedCenter = true;
-            };
-            /**
-             * Event handler for the mouse move event.
-             * @private
-             */
-            Scrollbar.prototype.mouseMoveHandler = function (e) {
-                var scroller = this;
-                var normalizedEvent = scroller.chart.pointer.normalize(e),
-                    options = scroller.options,
-                    direction = options.vertical ? 'chartY' : 'chartX',
-                    initPositions = scroller.initPositions || [],
-                    scrollPosition,
-                    chartPosition,
-                    change;
-                // In iOS, a mousemove event with e.pageX === 0 is fired when
-                // holding the finger down in the center of the scrollbar. This
-                // should be ignored.
-                if (scroller.grabbedCenter &&
-                    // #4696, scrollbar failed on Android
-                    (!e.touches || e.touches[0][direction] !== 0)) {
-                    chartPosition = scroller.cursorToScrollbarPosition(normalizedEvent)[direction];
-                    scrollPosition = scroller[direction];
-                    change = chartPosition - scrollPosition;
-                    scroller.hasDragged = true;
-                    scroller.updatePosition(initPositions[0] + change, initPositions[1] + change);
-                    if (scroller.hasDragged) {
-                        fireEvent(scroller, 'changed', {
-                            from: scroller.from,
-                            to: scroller.to,
-                            trigger: 'scrollbar',
-                            DOMType: e.type,
-                            DOMEvent: e
-                        });
-                    }
-                }
-            };
-            /**
-             * Event handler for the mouse up event.
-             * @private
-             */
-            Scrollbar.prototype.mouseUpHandler = function (e) {
-                var scroller = this;
-                if (scroller.hasDragged) {
-                    fireEvent(scroller, 'changed', {
-                        from: scroller.from,
-                        to: scroller.to,
-                        trigger: 'scrollbar',
-                        DOMType: e.type,
-                        DOMEvent: e
-                    });
-                }
-                scroller.grabbedCenter =
-                    scroller.hasDragged =
-                        scroller.chartX =
-                            scroller.chartY = null;
-            };
-            /**
-             * Position the scrollbar, method called from a parent with defined
-             * dimensions.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#position
-             * @param {number} x
-             *        x-position on the chart
-             * @param {number} y
-             *        y-position on the chart
-             * @param {number} width
-             *        width of the scrollbar
-             * @param {number} height
-             *        height of the scorllbar
-             * @return {void}
-             */
-            Scrollbar.prototype.position = function (x, y, width, height) {
-                var scroller = this,
-                    options = scroller.options,
-                    vertical = options.vertical,
-                    xOffset = height,
-                    yOffset = 0,
-                    method = scroller.rendered ? 'animate' : 'attr';
-                scroller.x = x;
-                scroller.y = y + this.trackBorderWidth;
-                scroller.width = width; // width with buttons
-                scroller.height = height;
-                scroller.xOffset = xOffset;
-                scroller.yOffset = yOffset;
-                // If Scrollbar is a vertical type, swap options:
-                if (vertical) {
-                    scroller.width = scroller.yOffset = width = yOffset = scroller.size;
-                    scroller.xOffset = xOffset = 0;
-                    scroller.barWidth = height - width * 2; // width without buttons
-                    scroller.x = x = x + scroller.options.margin;
-                }
-                else {
-                    scroller.height = scroller.xOffset = height = xOffset =
-                        scroller.size;
-                    scroller.barWidth = width - height * 2; // width without buttons
-                    scroller.y = scroller.y + scroller.options.margin;
-                }
-                // Set general position for a group:
-                scroller.group[method]({
-                    translateX: x,
-                    translateY: scroller.y
-                });
-                // Resize background/track:
-                scroller.track[method]({
-                    width: width,
-                    height: height
-                });
-                // Move right/bottom button ot it's place:
-                scroller.scrollbarButtons[1][method]({
-                    translateX: vertical ? 0 : width - xOffset,
-                    translateY: vertical ? height - yOffset : 0
-                });
-            };
-            /**
-             * Removes the event handlers attached previously with addEvents.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#removeEvents
-             * @return {void}
-             */
-            Scrollbar.prototype.removeEvents = function () {
-                this._events.forEach(function (args) {
-                    removeEvent.apply(null, args);
-                });
-                this._events.length = 0;
-            };
-            /**
-             * Render scrollbar with all required items.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#render
-             */
-            Scrollbar.prototype.render = function () {
-                var scroller = this,
-                    renderer = scroller.renderer,
-                    options = scroller.options,
-                    size = scroller.size,
-                    styledMode = this.chart.styledMode,
-                    group;
-                // Draw the scrollbar group
-                scroller.group = group = renderer.g('scrollbar').attr({
-                    zIndex: options.zIndex,
-                    translateY: -99999
-                }).add();
-                // Draw the scrollbar track:
-                scroller.track = renderer.rect()
-                    .addClass('highcharts-scrollbar-track')
-                    .attr({
-                    x: 0,
-                    r: options.trackBorderRadius || 0,
-                    height: size,
-                    width: size
-                }).add(group);
-                if (!styledMode) {
-                    scroller.track.attr({
-                        fill: options.trackBackgroundColor,
-                        stroke: options.trackBorderColor,
-                        'stroke-width': options.trackBorderWidth
-                    });
-                }
-                this.trackBorderWidth = scroller.track.strokeWidth();
-                scroller.track.attr({
-                    y: -this.trackBorderWidth % 2 / 2
-                });
-                // Draw the scrollbar itself
-                scroller.scrollbarGroup = renderer.g().add(group);
-                scroller.scrollbar = renderer.rect()
-                    .addClass('highcharts-scrollbar-thumb')
-                    .attr({
-                    height: size,
-                    width: size,
-                    r: options.barBorderRadius || 0
-                }).add(scroller.scrollbarGroup);
-                scroller.scrollbarRifles = renderer
-                    .path(swapXY([
-                    ['M', -3, size / 4],
-                    ['L', -3, 2 * size / 3],
-                    ['M', 0, size / 4],
-                    ['L', 0, 2 * size / 3],
-                    ['M', 3, size / 4],
-                    ['L', 3, 2 * size / 3]
-                ], options.vertical))
-                    .addClass('highcharts-scrollbar-rifles')
-                    .add(scroller.scrollbarGroup);
-                if (!styledMode) {
-                    scroller.scrollbar.attr({
-                        fill: options.barBackgroundColor,
-                        stroke: options.barBorderColor,
-                        'stroke-width': options.barBorderWidth
-                    });
-                    scroller.scrollbarRifles.attr({
-                        stroke: options.rifleColor,
-                        'stroke-width': 1
-                    });
-                }
-                scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();
-                scroller.scrollbarGroup.translate(-scroller.scrollbarStrokeWidth % 2 / 2, -scroller.scrollbarStrokeWidth % 2 / 2);
-                // Draw the buttons:
-                scroller.drawScrollbarButton(0);
-                scroller.drawScrollbarButton(1);
-            };
-            /**
-             * Set scrollbar size, with a given scale.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#setRange
-             * @param {number} from
-             *        scale (0-1) where bar should start
-             * @param {number} to
-             *        scale (0-1) where bar should end
-             * @return {void}
-             */
-            Scrollbar.prototype.setRange = function (from, to) {
-                var scroller = this,
-                    options = scroller.options,
-                    vertical = options.vertical,
-                    minWidth = options.minWidth,
-                    fullWidth = scroller.barWidth,
-                    fromPX,
-                    toPX,
-                    newPos,
-                    newSize,
-                    newRiflesPos,
-                    method = (this.rendered &&
-                        !this.hasDragged &&
-                        !(this.chart.navigator && this.chart.navigator.hasDragged)) ? 'animate' : 'attr';
-                if (!defined(fullWidth)) {
-                    return;
-                }
-                from = Math.max(from, 0);
-                fromPX = Math.ceil(fullWidth * from);
-                toPX = fullWidth * Math.min(to, 1);
-                scroller.calculatedWidth = newSize = correctFloat(toPX - fromPX);
-                // We need to recalculate position, if minWidth is used
-                if (newSize < minWidth) {
-                    fromPX = (fullWidth - minWidth + newSize) * from;
-                    newSize = minWidth;
-                }
-                newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);
-                newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2
-                // Store current position:
-                scroller.from = from;
-                scroller.to = to;
-                if (!vertical) {
-                    scroller.scrollbarGroup[method]({
-                        translateX: newPos
-                    });
-                    scroller.scrollbar[method]({
-                        width: newSize
-                    });
-                    scroller.scrollbarRifles[method]({
-                        translateX: newRiflesPos
-                    });
-                    scroller.scrollbarLeft = newPos;
-                    scroller.scrollbarTop = 0;
-                }
-                else {
-                    scroller.scrollbarGroup[method]({
-                        translateY: newPos
-                    });
-                    scroller.scrollbar[method]({
-                        height: newSize
-                    });
-                    scroller.scrollbarRifles[method]({
-                        translateY: newRiflesPos
-                    });
-                    scroller.scrollbarTop = newPos;
-                    scroller.scrollbarLeft = 0;
-                }
-                if (newSize <= 12) {
-                    scroller.scrollbarRifles.hide();
-                }
-                else {
-                    scroller.scrollbarRifles.show(true);
-                }
-                // Show or hide the scrollbar based on the showFull setting
-                if (options.showFull === false) {
-                    if (from <= 0 && to >= 1) {
-                        scroller.group.hide();
-                    }
-                    else {
-                        scroller.group.show();
-                    }
-                }
-                scroller.rendered = true;
-            };
-            Scrollbar.prototype.trackClick = function (e) {
-                var scroller = this;
-                var normalizedEvent = scroller.chart.pointer.normalize(e),
-                    range = scroller.to - scroller.from,
-                    top = scroller.y + scroller.scrollbarTop,
-                    left = scroller.x + scroller.scrollbarLeft;
-                if ((scroller.options.vertical && normalizedEvent.chartY > top) ||
-                    (!scroller.options.vertical && normalizedEvent.chartX > left)) {
-                    // On the top or on the left side of the track:
-                    scroller.updatePosition(scroller.from + range, scroller.to + range);
-                }
-                else {
-                    // On the bottom or the right side of the track:
-                    scroller.updatePosition(scroller.from - range, scroller.to - range);
-                }
-                fireEvent(scroller, 'changed', {
-                    from: scroller.from,
-                    to: scroller.to,
-                    trigger: 'scrollbar',
-                    DOMEvent: e
-                });
-            };
-            /**
-             * Update the scrollbar with new options
-             *
-             * @private
-             * @function Highcharts.Scrollbar#update
-             * @param  {Highcharts.ScrollbarOptions} options
-             * @return {void}
-             */
-            Scrollbar.prototype.update = function (options) {
-                this.destroy();
-                this.init(this.chart.renderer, merge(true, this.options, options), this.chart);
-            };
-            /**
-             * Update position option in the Scrollbar, with normalized 0-1 scale
-             *
-             * @private
-             * @function Highcharts.Scrollbar#updatePosition
-             * @param  {number} from
-             * @param  {number} to
-             * @return {void}
-             */
-            Scrollbar.prototype.updatePosition = function (from, to) {
-                if (to > 1) {
-                    from = correctFloat(1 - correctFloat(to - from));
-                    to = 1;
-                }
-                if (from < 0) {
-                    to = correctFloat(to - from);
-                    from = 0;
-                }
-                this.from = from;
-                this.to = to;
-            };
-            /* *
-             *
-             *  Static Properties
-             *
-             * */
-            /**
-             *
-             * The scrollbar is a means of panning over the X axis of a stock chart.
-             * Scrollbars can  also be applied to other types of axes.
-             *
-             * Another approach to scrollable charts is the [chart.scrollablePlotArea](
-             * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that
-             * is especially suitable for simpler cartesian charts on mobile.
-             *
-             * In styled mode, all the presentational options for the
-             * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,
-             * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,
-             * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.
-             *
-             * @sample stock/yaxis/inverted-bar-scrollbar/
-             *         A scrollbar on a simple bar chart
-             *
-             * @product highstock gantt
-             * @optionparent scrollbar
-             *
-             * @private
-             */
-            Scrollbar.defaultOptions = {
-                /**
-                 * The height of the scrollbar. The height also applies to the width
-                 * of the scroll arrows so that they are always squares. Defaults to
-                 * 20 for touch devices and 14 for mouse devices.
-                 *
-                 * @sample stock/scrollbar/height/
-                 *         A 30px scrollbar
-                 *
-                 * @type    {number}
-                 * @default 20/14
-                 */
-                height: isTouchDevice ? 20 : 14,
-                /**
-                 * The border rounding radius of the bar.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                barBorderRadius: 0,
-                /**
-                 * The corner radius of the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                buttonBorderRadius: 0,
-                /**
-                 * Enable or disable the scrollbar.
-                 *
-                 * @sample stock/scrollbar/enabled/
-                 *         Disable the scrollbar, only use navigator
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption scrollbar.enabled
-                 */
-                /**
-                 * Whether to redraw the main chart as the scrollbar or the navigator
-                 * zoomed window is moved. Defaults to `true` for modern browsers and
-                 * `false` for legacy IE browsers as well as mobile devices.
-                 *
-                 * @sample stock/scrollbar/liveredraw
-                 *         Setting live redraw to false
-                 *
-                 * @type  {boolean}
-                 * @since 1.3
-                 */
-                liveRedraw: void 0,
-                /**
-                 * The margin between the scrollbar and its axis when the scrollbar is
-                 * applied directly to an axis.
-                 */
-                margin: 10,
-                /**
-                 * The minimum width of the scrollbar.
-                 *
-                 * @since 1.2.5
-                 */
-                minWidth: 6,
-                /**
-                 * Whether to show or hide the scrollbar when the scrolled content is
-                 * zoomed out to it full extent.
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption scrollbar.showFull
-                 */
-                step: 0.2,
-                /**
-                 * The z index of the scrollbar group.
-                 */
-                zIndex: 3,
-                /**
-                 * The background color of the scrollbar itself.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                barBackgroundColor: '#cccccc',
-                /**
-                 * The width of the bar's border.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                barBorderWidth: 1,
-                /**
-                 * The color of the scrollbar's border.
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                barBorderColor: '#cccccc',
-                /**
-                 * The color of the small arrow inside the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                buttonArrowColor: '#333333',
-                /**
-                 * The color of scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                buttonBackgroundColor: '#e6e6e6',
-                /**
-                 * The color of the border of the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                buttonBorderColor: '#cccccc',
-                /**
-                 * The border width of the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                buttonBorderWidth: 1,
-                /**
-                 * The color of the small rifles in the middle of the scrollbar.
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                rifleColor: '#333333',
-                /**
-                 * The color of the track background.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                trackBackgroundColor: '#f2f2f2',
-                /**
-                 * The color of the border of the scrollbar track.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                trackBorderColor: '#f2f2f2',
-                /**
-                 * The corner radius of the border of the scrollbar track.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @apioption scrollbar.trackBorderRadius
-                 */
-                /**
-                 * The width of the border of the scrollbar track.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                trackBorderWidth: 1
-            };
-            return Scrollbar;
-        }());
-        if (!H.Scrollbar) {
-            defaultOptions.scrollbar = merge(true, Scrollbar.defaultOptions, defaultOptions.scrollbar);
-            H.Scrollbar = Scrollbar;
-            ScrollbarAxis.compose(Axis, Scrollbar);
-        }
-
-        return H.Scrollbar;
-    });
-    _registerModule(_modules, 'Extensions/RangeSelector.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Core/Options.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Utilities.js']], function (Axis, Chart, H, O, SVGElement, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var defaultOptions = O.defaultOptions;
-        var addEvent = U.addEvent,
-            createElement = U.createElement,
-            css = U.css,
-            defined = U.defined,
-            destroyObjectProperties = U.destroyObjectProperties,
-            discardElement = U.discardElement,
-            extend = U.extend,
-            fireEvent = U.fireEvent,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            objectEach = U.objectEach,
-            pick = U.pick,
-            pInt = U.pInt,
-            splat = U.splat;
-        /**
-         * Define the time span for the button
-         *
-         * @typedef {"all"|"day"|"hour"|"millisecond"|"minute"|"month"|"second"|"week"|"year"|"ytd"} Highcharts.RangeSelectorButtonTypeValue
-         */
-        /**
-         * Callback function to react on button clicks.
-         *
-         * @callback Highcharts.RangeSelectorClickCallbackFunction
-         *
-         * @param {global.Event} e
-         *        Event arguments.
-         *
-         * @param {boolean|undefined}
-         *        Return false to cancel the default button event.
-         */
-        /**
-         * Callback function to parse values entered in the input boxes and return a
-         * valid JavaScript time as milliseconds since 1970.
-         *
-         * @callback Highcharts.RangeSelectorParseCallbackFunction
-         *
-         * @param {string} value
-         *        Input value to parse.
-         *
-         * @return {number}
-         *         Parsed JavaScript time value.
-         */
-        /* ************************************************************************** *
-         * Start Range Selector code                                                  *
-         * ************************************************************************** */
-        extend(defaultOptions, {
-            /**
-             * The range selector is a tool for selecting ranges to display within
-             * the chart. It provides buttons to select preconfigured ranges in
-             * the chart, like 1 day, 1 week, 1 month etc. It also provides input
-             * boxes where min and max dates can be manually input.
-             *
-             * @product      highstock gantt
-             * @optionparent rangeSelector
-             */
-            rangeSelector: {
-                /**
-                 * Whether to enable all buttons from the start. By default buttons are
-                 * only enabled if the corresponding time range exists on the X axis,
-                 * but enabling all buttons allows for dynamically loading different
-                 * time ranges.
-                 *
-                 * @sample {highstock} stock/rangeselector/allbuttonsenabled-true/
-                 *         All buttons enabled
-                 *
-                 * @type      {boolean}
-                 * @default   false
-                 * @since     2.0.3
-                 * @apioption rangeSelector.allButtonsEnabled
-                 */
-                /**
-                 * An array of configuration objects for the buttons.
-                 *
-                 * Defaults to:
-                 * ```js
-                 * buttons: [{
-                 *     type: 'month',
-                 *     count: 1,
-                 *     text: '1m'
-                 * }, {
-                 *     type: 'month',
-                 *     count: 3,
-                 *     text: '3m'
-                 * }, {
-                 *     type: 'month',
-                 *     count: 6,
-                 *     text: '6m'
-                 * }, {
-                 *     type: 'ytd',
-                 *     text: 'YTD'
-                 * }, {
-                 *     type: 'year',
-                 *     count: 1,
-                 *     text: '1y'
-                 * }, {
-                 *     type: 'all',
-                 *     text: 'All'
-                 * }]
-                 * ```
-                 *
-                 * @sample {highstock} stock/rangeselector/datagrouping/
-                 *         Data grouping by buttons
-                 *
-                 * @type      {Array<*>}
-                 * @apioption rangeSelector.buttons
-                 */
-                /**
-                 * How many units of the defined type the button should span. If `type`
-                 * is "month" and `count` is 3, the button spans three months.
-                 *
-                 * @type      {number}
-                 * @default   1
-                 * @apioption rangeSelector.buttons.count
-                 */
-                /**
-                 * Fires when clicking on the rangeSelector button. One parameter,
-                 * event, is passed to the function, containing common event
-                 * information.
-                 *
-                 * ```js
-                 * click: function(e) {
-                 *   console.log(this);
-                 * }
-                 * ```
-                 *
-                 * Return false to stop default button's click action.
-                 *
-                 * @sample {highstock} stock/rangeselector/button-click/
-                 *         Click event on the button
-                 *
-                 * @type      {Highcharts.RangeSelectorClickCallbackFunction}
-                 * @apioption rangeSelector.buttons.events.click
-                 */
-                /**
-                 * Additional range (in milliseconds) added to the end of the calculated
-                 * time span.
-                 *
-                 * @sample {highstock} stock/rangeselector/min-max-offsets/
-                 *         Button offsets
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @since     6.0.0
-                 * @apioption rangeSelector.buttons.offsetMax
-                 */
-                /**
-                 * Additional range (in milliseconds) added to the start of the
-                 * calculated time span.
-                 *
-                 * @sample {highstock} stock/rangeselector/min-max-offsets/
-                 *         Button offsets
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @since     6.0.0
-                 * @apioption rangeSelector.buttons.offsetMin
-                 */
-                /**
-                 * When buttons apply dataGrouping on a series, by default zooming
-                 * in/out will deselect buttons and unset dataGrouping. Enable this
-                 * option to keep buttons selected when extremes change.
-                 *
-                 * @sample {highstock} stock/rangeselector/preserve-datagrouping/
-                 *         Different preserveDataGrouping settings
-                 *
-                 * @type      {boolean}
-                 * @default   false
-                 * @since     6.1.2
-                 * @apioption rangeSelector.buttons.preserveDataGrouping
-                 */
-                /**
-                 * A custom data grouping object for each button.
-                 *
-                 * @see [series.dataGrouping](#plotOptions.series.dataGrouping)
-                 *
-                 * @sample {highstock} stock/rangeselector/datagrouping/
-                 *         Data grouping by range selector buttons
-                 *
-                 * @type      {*}
-                 * @extends   plotOptions.series.dataGrouping
-                 * @apioption rangeSelector.buttons.dataGrouping
-                 */
-                /**
-                 * The text for the button itself.
-                 *
-                 * @type      {string}
-                 * @apioption rangeSelector.buttons.text
-                 */
-                /**
-                 * Defined the time span for the button. Can be one of `millisecond`,
-                 * `second`, `minute`, `hour`, `day`, `week`, `month`, `year`, `ytd`,
-                 * and `all`.
-                 *
-                 * @type       {Highcharts.RangeSelectorButtonTypeValue}
-                 * @apioption  rangeSelector.buttons.type
-                 */
-                /**
-                 * The space in pixels between the buttons in the range selector.
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @apioption rangeSelector.buttonSpacing
-                 */
-                /**
-                 * Enable or disable the range selector.
-                 *
-                 * @sample {highstock} stock/rangeselector/enabled/
-                 *         Disable the range selector
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption rangeSelector.enabled
-                 */
-                /**
-                 * The vertical alignment of the rangeselector box. Allowed properties
-                 * are `top`, `middle`, `bottom`.
-                 *
-                 * @sample {highstock} stock/rangeselector/vertical-align-middle/
-                 *         Middle
-                 * @sample {highstock} stock/rangeselector/vertical-align-bottom/
-                 *         Bottom
-                 *
-                 * @type  {Highcharts.VerticalAlignValue}
-                 * @since 6.0.0
-                 */
-                verticalAlign: 'top',
-                /**
-                 * A collection of attributes for the buttons. The object takes SVG
-                 * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,
-                 * a collection of CSS properties for the text.
-                 *
-                 * The object can also be extended with states, so you can set
-                 * presentational options for `hover`, `select` or `disabled` button
-                 * states.
-                 *
-                 * CSS styles for the text label.
-                 *
-                 * In styled mode, the buttons are styled by the
-                 * `.highcharts-range-selector-buttons .highcharts-button` rule with its
-                 * different states.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type {Highcharts.SVGAttributes}
-                 */
-                buttonTheme: {
-                    /** @ignore */
-                    width: 28,
-                    /** @ignore */
-                    height: 18,
-                    /** @ignore */
-                    padding: 2,
-                    /** @ignore */
-                    zIndex: 7 // #484, #852
-                },
-                /**
-                 * When the rangeselector is floating, the plot area does not reserve
-                 * space for it. This opens for positioning anywhere on the chart.
-                 *
-                 * @sample {highstock} stock/rangeselector/floating/
-                 *         Placing the range selector between the plot area and the
-                 *         navigator
-                 *
-                 * @since 6.0.0
-                 */
-                floating: false,
-                /**
-                 * The x offset of the range selector relative to its horizontal
-                 * alignment within `chart.spacingLeft` and `chart.spacingRight`.
-                 *
-                 * @since 6.0.0
-                 */
-                x: 0,
-                /**
-                 * The y offset of the range selector relative to its horizontal
-                 * alignment within `chart.spacingLeft` and `chart.spacingRight`.
-                 *
-                 * @since 6.0.0
-                 */
-                y: 0,
-                /**
-                 * Deprecated. The height of the range selector. Currently it is
-                 * calculated dynamically.
-                 *
-                 * @deprecated
-                 * @type  {number|undefined}
-                 * @since 2.1.9
-                 */
-                height: void 0,
-                /**
-                 * The border color of the date input boxes.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {Highcharts.ColorString}
-                 * @default   #cccccc
-                 * @since     1.3.7
-                 * @apioption rangeSelector.inputBoxBorderColor
-                 */
-                /**
-                 * The pixel height of the date input boxes.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {number}
-                 * @default   17
-                 * @since     1.3.7
-                 * @apioption rangeSelector.inputBoxHeight
-                 */
-                /**
-                 * CSS for the container DIV holding the input boxes. Deprecated as
-                 * of 1.2.5\. Use [inputPosition](#rangeSelector.inputPosition) instead.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @deprecated
-                 * @type      {Highcharts.CSSObject}
-                 * @apioption rangeSelector.inputBoxStyle
-                 */
-                /**
-                 * The pixel width of the date input boxes.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {number}
-                 * @default   90
-                 * @since     1.3.7
-                 * @apioption rangeSelector.inputBoxWidth
-                 */
-                /**
-                 * The date format in the input boxes when not selected for editing.
-                 * Defaults to `%b %e, %Y`.
-                 *
-                 * @sample {highstock} stock/rangeselector/input-format/
-                 *         Milliseconds in the range selector
-                 *
-                 * @type      {string}
-                 * @default   %b %e, %Y
-                 * @apioption rangeSelector.inputDateFormat
-                 */
-                /**
-                 * A custom callback function to parse values entered in the input boxes
-                 * and return a valid JavaScript time as milliseconds since 1970.
-                 * The first argument passed is a value to parse,
-                 * second is a boolean indicating use of the UTC time.
-                 *
-                 * @sample {highstock} stock/rangeselector/input-format/
-                 *         Milliseconds in the range selector
-                 *
-                 * @type      {Highcharts.RangeSelectorParseCallbackFunction}
-                 * @since     1.3.3
-                 * @apioption rangeSelector.inputDateParser
-                 */
-                /**
-                 * The date format in the input boxes when they are selected for
-                 * editing. This must be a format that is recognized by JavaScript
-                 * Date.parse.
-                 *
-                 * @sample {highstock} stock/rangeselector/input-format/
-                 *         Milliseconds in the range selector
-                 *
-                 * @type      {string}
-                 * @default   %Y-%m-%d
-                 * @apioption rangeSelector.inputEditDateFormat
-                 */
-                /**
-                 * Enable or disable the date input boxes. Defaults to enabled when
-                 * there is enough space, disabled if not (typically mobile).
-                 *
-                 * @sample {highstock} stock/rangeselector/input-datepicker/
-                 *         Extending the input with a jQuery UI datepicker
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption rangeSelector.inputEnabled
-                 */
-                /**
-                 * Positioning for the input boxes. Allowed properties are `align`,
-                 *  `x` and `y`.
-                 *
-                 * @since 1.2.4
-                 */
-                inputPosition: {
-                    /**
-                     * The alignment of the input box. Allowed properties are `left`,
-                     * `center`, `right`.
-                     *
-                     * @sample {highstock} stock/rangeselector/input-button-position/
-                     *         Alignment
-                     *
-                     * @type  {Highcharts.AlignValue}
-                     * @since 6.0.0
-                     */
-                    align: 'right',
-                    /**
-                     * X offset of the input row.
-                     */
-                    x: 0,
-                    /**
-                     * Y offset of the input row.
-                     */
-                    y: 0
-                },
-                /**
-                 * The index of the button to appear pre-selected.
-                 *
-                 * @type      {number}
-                 * @apioption rangeSelector.selected
-                 */
-                /**
-                 * Positioning for the button row.
-                 *
-                 * @since 1.2.4
-                 */
-                buttonPosition: {
-                    /**
-                     * The alignment of the input box. Allowed properties are `left`,
-                     * `center`, `right`.
-                     *
-                     * @sample {highstock} stock/rangeselector/input-button-position/
-                     *         Alignment
-                     *
-                     * @type  {Highcharts.AlignValue}
-                     * @since 6.0.0
-                     */
-                    align: 'left',
-                    /**
-                     * X offset of the button row.
-                     */
-                    x: 0,
-                    /**
-                     * Y offset of the button row.
-                     */
-                    y: 0
-                },
-                /**
-                 * CSS for the HTML inputs in the range selector.
-                 *
-                 * In styled mode, the inputs are styled by the
-                 * `.highcharts-range-input text` rule in SVG mode, and
-                 * `input.highcharts-range-selector` when active.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {Highcharts.CSSObject}
-                 * @apioption rangeSelector.inputStyle
-                 */
-                /**
-                 * CSS styles for the labels - the Zoom, From and To texts.
-                 *
-                 * In styled mode, the labels are styled by the
-                 * `.highcharts-range-label` class.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type {Highcharts.CSSObject}
-                 */
-                labelStyle: {
-                    /** @ignore */
-                    color: '#666666'
-                }
-            }
-        });
-        defaultOptions.lang = merge(defaultOptions.lang, 
-        /**
-         * Language object. The language object is global and it can't be set
-         * on each chart initialization. Instead, use `Highcharts.setOptions` to
-         * set it before any chart is initialized.
-         *
-         * ```js
-         * Highcharts.setOptions({
-         *     lang: {
-         *         months: [
-         *             'Janvier', 'Février', 'Mars', 'Avril',
-         *             'Mai', 'Juin', 'Juillet', 'Août',
-         *             'Septembre', 'Octobre', 'Novembre', 'Décembre'
-         *         ],
-         *         weekdays: [
-         *             'Dimanche', 'Lundi', 'Mardi', 'Mercredi',
-         *             'Jeudi', 'Vendredi', 'Samedi'
-         *         ]
-         *     }
-         * });
-         * ```
-         *
-         * @optionparent lang
-         */
-        {
-            /**
-             * The text for the label for the range selector buttons.
-             *
-             * @product highstock gantt
-             */
-            rangeSelectorZoom: 'Zoom',
-            /**
-             * The text for the label for the "from" input box in the range
-             * selector.
-             *
-             * @product highstock gantt
-             */
-            rangeSelectorFrom: 'From',
-            /**
-             * The text for the label for the "to" input box in the range selector.
-             *
-             * @product highstock gantt
-             */
-            rangeSelectorTo: 'To'
-        });
-        /* eslint-disable no-invalid-this, valid-jsdoc */
-        /**
-         * The range selector.
-         *
-         * @private
-         * @class
-         * @name Highcharts.RangeSelector
-         * @param {Highcharts.Chart} chart
-         */
-        var RangeSelector = /** @class */ (function () {
-                function RangeSelector(chart) {
-                    /* *
-                     *
-                     * Properties
-                     *
-                     * */
-                    this.buttons = void 0;
-                this.buttonOptions = RangeSelector.prototype.defaultButtons;
-                this.options = void 0;
-                this.chart = chart;
-                // Run RangeSelector
-                this.init(chart);
-            }
-            /**
-             * The method to run when one of the buttons in the range selectors is
-             * clicked
-             *
-             * @private
-             * @function Highcharts.RangeSelector#clickButton
-             * @param {number} i
-             *        The index of the button
-             * @param {boolean} [redraw]
-             * @return {void}
-             */
-            RangeSelector.prototype.clickButton = function (i, redraw) {
-                var rangeSelector = this,
-                    chart = rangeSelector.chart,
-                    rangeOptions = rangeSelector.buttonOptions[i],
-                    baseAxis = chart.xAxis[0],
-                    unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {},
-                    dataMin = unionExtremes.dataMin,
-                    dataMax = unionExtremes.dataMax,
-                    newMin,
-                    newMax = baseAxis && Math.round(Math.min(baseAxis.max,
-                    pick(dataMax,
-                    baseAxis.max))), // #1568
-                    type = rangeOptions.type,
-                    baseXAxisOptions,
-                    range = rangeOptions._range,
-                    rangeMin,
-                    minSetting,
-                    rangeSetting,
-                    ctx,
-                    ytdExtremes,
-                    dataGrouping = rangeOptions.dataGrouping;
-                // chart has no data, base series is removed
-                if (dataMin === null || dataMax === null) {
-                    return;
-                }
-                // Set the fixed range before range is altered
-                chart.fixedRange = range;
-                // Apply dataGrouping associated to button
-                if (dataGrouping) {
-                    this.forcedDataGrouping = true;
-                    Axis.prototype.setDataGrouping.call(baseAxis || { chart: this.chart }, dataGrouping, false);
-                    this.frozenStates = rangeOptions.preserveDataGrouping;
-                }
-                // Apply range
-                if (type === 'month' || type === 'year') {
-                    if (!baseAxis) {
-                        // This is set to the user options and picked up later when the
-                        // axis is instantiated so that we know the min and max.
-                        range = rangeOptions;
-                    }
-                    else {
-                        ctx = {
-                            range: rangeOptions,
-                            max: newMax,
-                            chart: chart,
-                            dataMin: dataMin,
-                            dataMax: dataMax
-                        };
-                        newMin = baseAxis.minFromRange.call(ctx);
-                        if (isNumber(ctx.newMax)) {
-                            newMax = ctx.newMax;
-                        }
-                    }
-                    // Fixed times like minutes, hours, days
-                }
-                else if (range) {
-                    newMin = Math.max(newMax - range, dataMin);
-                    newMax = Math.min(newMin + range, dataMax);
-                }
-                else if (type === 'ytd') {
-                    // On user clicks on the buttons, or a delayed action running from
-                    // the beforeRender event (below), the baseAxis is defined.
-                    if (baseAxis) {
-                        // When "ytd" is the pre-selected button for the initial view,
-                        // its calculation is delayed and rerun in the beforeRender
-                        // event (below). When the series are initialized, but before
-                        // the chart is rendered, we have access to the xData array
-                        // (#942).
-                        if (typeof dataMax === 'undefined') {
-                            dataMin = Number.MAX_VALUE;
-                            dataMax = Number.MIN_VALUE;
-                            chart.series.forEach(function (series) {
-                                // reassign it to the last item
-                                var xData = series.xData;
-                                dataMin = Math.min(xData[0], dataMin);
-                                dataMax = Math.max(xData[xData.length - 1], dataMax);
-                            });
-                            redraw = false;
-                        }
-                        ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin, chart.time.useUTC);
-                        newMin = rangeMin = ytdExtremes.min;
-                        newMax = ytdExtremes.max;
-                        // "ytd" is pre-selected. We don't yet have access to processed
-                        // point and extremes data (things like pointStart and pointInterval
-                        // are missing), so we delay the process (#942)
-                    }
-                    else {
-                        rangeSelector.deferredYTDClick = i;
-                        return;
-                    }
-                }
-                else if (type === 'all' && baseAxis) {
-                    newMin = dataMin;
-                    newMax = dataMax;
-                }
-                if (defined(newMin)) {
-                    newMin += rangeOptions._offsetMin;
-                }
-                if (defined(newMax)) {
-                    newMax += rangeOptions._offsetMax;
-                }
-                rangeSelector.setSelected(i);
-                // Update the chart
-                if (!baseAxis) {
-                    // Axis not yet instanciated. Temporarily set min and range
-                    // options and remove them on chart load (#4317).
-                    baseXAxisOptions = splat(chart.options.xAxis)[0];
-                    rangeSetting = baseXAxisOptions.range;
-                    baseXAxisOptions.range = range;
-                    minSetting = baseXAxisOptions.min;
-                    baseXAxisOptions.min = rangeMin;
-                    addEvent(chart, 'load', function resetMinAndRange() {
-                        baseXAxisOptions.range = rangeSetting;
-                        baseXAxisOptions.min = minSetting;
-                    });
-                }
-                else {
-                    // Existing axis object. Set extremes after render time.
-                    baseAxis.setExtremes(newMin, newMax, pick(redraw, 1), null, // auto animation
-                    {
-                        trigger: 'rangeSelectorButton',
-                        rangeSelectorButton: rangeOptions
-                    });
-                }
-            };
-            /**
-             * Set the selected option. This method only sets the internal flag, it
-             * doesn't update the buttons or the actual zoomed range.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#setSelected
-             * @param {number} [selected]
-             * @return {void}
-             */
-            RangeSelector.prototype.setSelected = function (selected) {
-                this.selected = this.options.selected = selected;
-            };
-            /**
-             * Initialize the range selector
-             *
-             * @private
-             * @function Highcharts.RangeSelector#init
-             * @param {Highcharts.Chart} chart
-             * @return {void}
-             */
-            RangeSelector.prototype.init = function (chart) {
-                var rangeSelector = this,
-                    options = chart.options.rangeSelector,
-                    buttonOptions = options.buttons || rangeSelector.defaultButtons.slice(),
-                    selectedOption = options.selected,
-                    blurInputs = function () {
-                        var minInput = rangeSelector.minInput,
-                    maxInput = rangeSelector.maxInput;
-                    // #3274 in some case blur is not defined
-                    if (minInput && minInput.blur) {
-                        fireEvent(minInput, 'blur');
-                    }
-                    if (maxInput && maxInput.blur) {
-                        fireEvent(maxInput, 'blur');
-                    }
-                };
-                rangeSelector.chart = chart;
-                rangeSelector.options = options;
-                rangeSelector.buttons = [];
-                rangeSelector.buttonOptions = buttonOptions;
-                this.unMouseDown = addEvent(chart.container, 'mousedown', blurInputs);
-                this.unResize = addEvent(chart, 'resize', blurInputs);
-                // Extend the buttonOptions with actual range
-                buttonOptions.forEach(rangeSelector.computeButtonRange);
-                // zoomed range based on a pre-selected button index
-                if (typeof selectedOption !== 'undefined' &&
-                    buttonOptions[selectedOption]) {
-                    this.clickButton(selectedOption, false);
-                }
-                addEvent(chart, 'load', function () {
-                    // If a data grouping is applied to the current button, release it
-                    // when extremes change
-                    if (chart.xAxis && chart.xAxis[0]) {
-                        addEvent(chart.xAxis[0], 'setExtremes', function (e) {
-                            if (this.max - this.min !==
-                                chart.fixedRange &&
-                                e.trigger !== 'rangeSelectorButton' &&
-                                e.trigger !== 'updatedData' &&
-                                rangeSelector.forcedDataGrouping &&
-                                !rangeSelector.frozenStates) {
-                                this.setDataGrouping(false, false);
-                            }
-                        });
-                    }
-                });
-            };
-            /**
-             * Dynamically update the range selector buttons after a new range has been
-             * set
-             *
-             * @private
-             * @function Highcharts.RangeSelector#updateButtonStates
-             * @return {void}
-             */
-            RangeSelector.prototype.updateButtonStates = function () {
-                var rangeSelector = this,
-                    chart = this.chart,
-                    baseAxis = chart.xAxis[0],
-                    actualRange = Math.round(baseAxis.max - baseAxis.min),
-                    hasNoData = !baseAxis.hasVisibleSeries,
-                    day = 24 * 36e5, // A single day in milliseconds
-                    unionExtremes = (chart.scroller &&
-                        chart.scroller.getUnionExtremes()) || baseAxis,
-                    dataMin = unionExtremes.dataMin,
-                    dataMax = unionExtremes.dataMax,
-                    ytdExtremes = rangeSelector.getYTDExtremes(dataMax,
-                    dataMin,
-                    chart.time.useUTC),
-                    ytdMin = ytdExtremes.min,
-                    ytdMax = ytdExtremes.max,
-                    selected = rangeSelector.selected,
-                    selectedExists = isNumber(selected),
-                    allButtonsEnabled = rangeSelector.options.allButtonsEnabled,
-                    buttons = rangeSelector.buttons;
-                rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
-                    var range = rangeOptions._range,
-                        type = rangeOptions.type,
-                        count = rangeOptions.count || 1,
-                        button = buttons[i],
-                        state = 0,
-                        disable,
-                        select,
-                        offsetRange = rangeOptions._offsetMax -
-                            rangeOptions._offsetMin,
-                        isSelected = i === selected, 
-                        // Disable buttons where the range exceeds what is allowed in
-                        // the current view
-                        isTooGreatRange = range >
-                            dataMax - dataMin, 
-                        // Disable buttons where the range is smaller than the minimum
-                        // range
-                        isTooSmallRange = range < baseAxis.minRange, 
-                        // Do not select the YTD button if not explicitly told so
-                        isYTDButNotSelected = false, 
-                        // Disable the All button if we're already showing all
-                        isAllButAlreadyShowingAll = false,
-                        isSameRange = range === actualRange;
-                    // Months and years have a variable range so we check the extremes
-                    if ((type === 'month' || type === 'year') &&
-                        (actualRange + 36e5 >=
-                            { month: 28, year: 365 }[type] * day * count - offsetRange) &&
-                        (actualRange - 36e5 <=
-                            { month: 31, year: 366 }[type] * day * count + offsetRange)) {
-                        isSameRange = true;
-                    }
-                    else if (type === 'ytd') {
-                        isSameRange = (ytdMax - ytdMin + offsetRange) === actualRange;
-                        isYTDButNotSelected = !isSelected;
-                    }
-                    else if (type === 'all') {
-                        isSameRange = (baseAxis.max - baseAxis.min >=
-                            dataMax - dataMin);
-                        isAllButAlreadyShowingAll = (!isSelected &&
-                            selectedExists &&
-                            isSameRange);
-                    }
-                    // The new zoom area happens to match the range for a button - mark
-                    // it selected. This happens when scrolling across an ordinal gap.
-                    // It can be seen in the intraday demos when selecting 1h and scroll
-                    // across the night gap.
-                    disable = (!allButtonsEnabled &&
-                        (isTooGreatRange ||
-                            isTooSmallRange ||
-                            isAllButAlreadyShowingAll ||
-                            hasNoData));
-                    select = ((isSelected && isSameRange) ||
-                        (isSameRange && !selectedExists && !isYTDButNotSelected) ||
-                        (isSelected && rangeSelector.frozenStates));
-                    if (disable) {
-                        state = 3;
-                    }
-                    else if (select) {
-                        selectedExists = true; // Only one button can be selected
-                        state = 2;
-                    }
-                    // If state has changed, update the button
-                    if (button.state !== state) {
-                        button.setState(state);
-                        // Reset (#9209)
-                        if (state === 0 && selected === i) {
-                            rangeSelector.setSelected(null);
-                        }
-                    }
-                });
-            };
-            /**
-             * Compute and cache the range for an individual button
-             *
-             * @private
-             * @function Highcharts.RangeSelector#computeButtonRange
-             * @param {Highcharts.RangeSelectorButtonsOptions} rangeOptions
-             * @return {void}
-             */
-            RangeSelector.prototype.computeButtonRange = function (rangeOptions) {
-                var type = rangeOptions.type,
-                    count = rangeOptions.count || 1, 
-                    // these time intervals have a fixed number of milliseconds, as
-                    // opposed to month, ytd and year
-                    fixedTimes = {
-                        millisecond: 1,
-                        second: 1000,
-                        minute: 60 * 1000,
-                        hour: 3600 * 1000,
-                        day: 24 * 3600 * 1000,
-                        week: 7 * 24 * 3600 * 1000
-                    };
-                // Store the range on the button object
-                if (fixedTimes[type]) {
-                    rangeOptions._range = fixedTimes[type] * count;
-                }
-                else if (type === 'month' || type === 'year') {
-                    rangeOptions._range = {
-                        month: 30,
-                        year: 365
-                    }[type] * 24 * 36e5 * count;
-                }
-                rangeOptions._offsetMin = pick(rangeOptions.offsetMin, 0);
-                rangeOptions._offsetMax = pick(rangeOptions.offsetMax, 0);
-                rangeOptions._range +=
-                    rangeOptions._offsetMax - rangeOptions._offsetMin;
-            };
-            /**
-             * Set the internal and displayed value of a HTML input for the dates
-             *
-             * @private
-             * @function Highcharts.RangeSelector#setInputValue
-             * @param {string} name
-             * @param {number} [inputTime]
-             * @return {void}
-             */
-            RangeSelector.prototype.setInputValue = function (name, inputTime) {
-                var options = this.chart.options.rangeSelector,
-                    time = this.chart.time,
-                    input = this[name + 'Input'];
-                if (defined(inputTime)) {
-                    input.previousValue = input.HCTime;
-                    input.HCTime = inputTime;
-                }
-                input.value = time.dateFormat(options.inputEditDateFormat || '%Y-%m-%d', input.HCTime);
-                this[name + 'DateBox'].attr({
-                    text: time.dateFormat(options.inputDateFormat || '%b %e, %Y', input.HCTime)
-                });
-            };
-            /**
-             * @private
-             * @function Highcharts.RangeSelector#showInput
-             * @param {string} name
-             * @return {void}
-             */
-            RangeSelector.prototype.showInput = function (name) {
-                var inputGroup = this.inputGroup,
-                    dateBox = this[name + 'DateBox'];
-                css(this[name + 'Input'], {
-                    left: (inputGroup.translateX + dateBox.x) + 'px',
-                    top: inputGroup.translateY + 'px',
-                    width: (dateBox.width - 2) + 'px',
-                    height: (dateBox.height - 2) + 'px',
-                    border: '2px solid silver'
-                });
-            };
-            /**
-             * @private
-             * @function Highcharts.RangeSelector#hideInput
-             * @param {string} name
-             * @return {void}
-             */
-            RangeSelector.prototype.hideInput = function (name) {
-                css(this[name + 'Input'], {
-                    border: 0,
-                    width: '1px',
-                    height: '1px'
-                });
-                this.setInputValue(name);
-            };
-            /**
-             * @private
-             * @function Highcharts.RangeSelector#defaultInputDateParser
-             */
-            RangeSelector.prototype.defaultInputDateParser = function (inputDate, useUTC) {
-                var date = new Date();
-                if (H.isSafari) {
-                    return Date.parse(inputDate.split(' ').join('T'));
-                }
-                if (useUTC) {
-                    return Date.parse(inputDate + 'Z');
-                }
-                return Date.parse(inputDate) - date.getTimezoneOffset() * 60 * 1000;
-            };
-            /**
-             * Draw either the 'from' or the 'to' HTML input box of the range selector
-             *
-             * @private
-             * @function Highcharts.RangeSelector#drawInput
-             * @param {string} name
-             * @return {void}
-             */
-            RangeSelector.prototype.drawInput = function (name) {
-                var rangeSelector = this,
-                    chart = rangeSelector.chart,
-                    chartStyle = chart.renderer.style || {},
-                    renderer = chart.renderer,
-                    options = chart.options.rangeSelector,
-                    lang = defaultOptions.lang,
-                    div = rangeSelector.div,
-                    isMin = name === 'min',
-                    input,
-                    label,
-                    dateBox,
-                    inputGroup = this.inputGroup,
-                    defaultInputDateParser = this.defaultInputDateParser;
-                /**
-                 * @private
-                 */
-                function updateExtremes() {
-                    var inputValue = input.value,
-                        value,
-                        chartAxis = chart.xAxis[0],
-                        dataAxis = chart.scroller && chart.scroller.xAxis ?
-                            chart.scroller.xAxis :
-                            chartAxis,
-                        dataMin = dataAxis.dataMin,
-                        dataMax = dataAxis.dataMax;
-                    value = (options.inputDateParser || defaultInputDateParser)(inputValue, chart.time.useUTC);
-                    if (value !== input.previousValue) {
-                        input.previousValue = value;
-                        // If the value isn't parsed directly to a value by the
-                        // browser's Date.parse method, like YYYY-MM-DD in IE, try
-                        // parsing it a different way
-                        if (!isNumber(value)) {
-                            value = inputValue.split('-');
-                            value = Date.UTC(pInt(value[0]), pInt(value[1]) - 1, pInt(value[2]));
-                        }
-                        if (isNumber(value)) {
-                            // Correct for timezone offset (#433)
-                            if (!chart.time.useUTC) {
-                                value =
-                                    value + new Date().getTimezoneOffset() * 60 * 1000;
-                            }
-                            // Validate the extremes. If it goes beyound the data min or
-                            // max, use the actual data extreme (#2438).
-                            if (isMin) {
-                                if (value > rangeSelector.maxInput.HCTime) {
-                                    value = void 0;
-                                }
-                                else if (value < dataMin) {
-                                    value = dataMin;
-                                }
-                            }
-                            else {
-                                if (value < rangeSelector.minInput.HCTime) {
-                                    value = void 0;
-                                }
-                                else if (value > dataMax) {
-                                    value = dataMax;
-                                }
-                            }
-                            // Set the extremes
-                            if (typeof value !== 'undefined') { // @todo typof undefined
-                                chartAxis.setExtremes(isMin ? value : chartAxis.min, isMin ? chartAxis.max : value, void 0, void 0, { trigger: 'rangeSelectorInput' });
-                            }
-                        }
-                    }
-                }
-                // Create the text label
-                this[name + 'Label'] = label = renderer
-                    .label(lang[isMin ? 'rangeSelectorFrom' : 'rangeSelectorTo'], this.inputGroup.offset)
-                    .addClass('highcharts-range-label')
-                    .attr({
-                    padding: 2
-                })
-                    .add(inputGroup);
-                inputGroup.offset += label.width + 5;
-                // Create an SVG label that shows updated date ranges and and records
-                // click events that bring in the HTML input.
-                this[name + 'DateBox'] = dateBox = renderer
-                    .label('', inputGroup.offset)
-                    .addClass('highcharts-range-input')
-                    .attr({
-                    padding: 2,
-                    width: options.inputBoxWidth || 90,
-                    height: options.inputBoxHeight || 17,
-                    'text-align': 'center'
-                })
-                    .on('click', function () {
-                    // If it is already focused, the onfocus event doesn't fire
-                    // (#3713)
-                    rangeSelector.showInput(name);
-                    rangeSelector[name + 'Input'].focus();
-                });
-                if (!chart.styledMode) {
-                    dateBox.attr({
-                        stroke: options.inputBoxBorderColor || '#cccccc',
-                        'stroke-width': 1
-                    });
-                }
-                dateBox.add(inputGroup);
-                inputGroup.offset += dateBox.width + (isMin ? 10 : 0);
-                // Create the HTML input element. This is rendered as 1x1 pixel then set
-                // to the right size when focused.
-                this[name + 'Input'] = input = createElement('input', {
-                    name: name,
-                    className: 'highcharts-range-selector',
-                    type: 'text'
-                }, {
-                    top: chart.plotTop + 'px' // prevent jump on focus in Firefox
-                }, div);
-                if (!chart.styledMode) {
-                    // Styles
-                    label.css(merge(chartStyle, options.labelStyle));
-                    dateBox.css(merge({
-                        color: '#333333'
-                    }, chartStyle, options.inputStyle));
-                    css(input, extend({
-                        position: 'absolute',
-                        border: 0,
-                        width: '1px',
-                        height: '1px',
-                        padding: 0,
-                        textAlign: 'center',
-                        fontSize: chartStyle.fontSize,
-                        fontFamily: chartStyle.fontFamily,
-                        top: '-9999em' // #4798
-                    }, options.inputStyle));
-                }
-                // Blow up the input box
-                input.onfocus = function () {
-                    rangeSelector.showInput(name);
-                };
-                // Hide away the input box
-                input.onblur = function () {
-                    // update extermes only when inputs are active
-                    if (input === H.doc.activeElement) { // Only when focused
-                        // Update also when no `change` event is triggered, like when
-                        // clicking inside the SVG (#4710)
-                        updateExtremes();
-                    }
-                    // #10404 - move hide and blur outside focus
-                    rangeSelector.hideInput(name);
-                    input.blur(); // #4606
-                };
-                // handle changes in the input boxes
-                input.onchange = updateExtremes;
-                input.onkeypress = function (event) {
-                    // IE does not fire onchange on enter
-                    if (event.keyCode === 13) {
-                        updateExtremes();
-                    }
-                };
-            };
-            /**
-             * Get the position of the range selector buttons and inputs. This can be
-             * overridden from outside for custom positioning.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#getPosition
-             *
-             * @return {Highcharts.Dictionary<number>}
-             */
-            RangeSelector.prototype.getPosition = function () {
-                var chart = this.chart,
-                    options = chart.options.rangeSelector,
-                    top = options.verticalAlign === 'top' ?
-                        chart.plotTop - chart.axisOffset[0] :
-                        0; // set offset only for varticalAlign top
-                    return {
-                        buttonTop: top + options.buttonPosition.y,
-                        inputTop: top + options.inputPosition.y - 10
-                    };
-            };
-            /**
-             * Get the extremes of YTD. Will choose dataMax if its value is lower than
-             * the current timestamp. Will choose dataMin if its value is higher than
-             * the timestamp for the start of current year.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#getYTDExtremes
-             *
-             * @param {number} dataMax
-             *
-             * @param {number} dataMin
-             *
-             * @return {*}
-             *         Returns min and max for the YTD
-             */
-            RangeSelector.prototype.getYTDExtremes = function (dataMax, dataMin, useUTC) {
-                var time = this.chart.time,
-                    min,
-                    now = new time.Date(dataMax),
-                    year = time.get('FullYear',
-                    now),
-                    startOfYear = useUTC ?
-                        time.Date.UTC(year, 0, 1) : // eslint-disable-line new-cap
-                        +new time.Date(year, 0, 1);
-                min = Math.max(dataMin || 0, startOfYear);
-                now = now.getTime();
-                return {
-                    max: Math.min(dataMax || now, now),
-                    min: min
-                };
-            };
-            /**
-             * Render the range selector including the buttons and the inputs. The first
-             * time render is called, the elements are created and positioned. On
-             * subsequent calls, they are moved and updated.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#render
-             * @param {number} [min]
-             *        X axis minimum
-             * @param {number} [max]
-             *        X axis maximum
-             * @return {void}
-             */
-            RangeSelector.prototype.render = function (min, max) {
-                var rangeSelector = this,
-                    chart = rangeSelector.chart,
-                    renderer = chart.renderer,
-                    container = chart.container,
-                    chartOptions = chart.options,
-                    navButtonOptions = (chartOptions.exporting &&
-                        chartOptions.exporting.enabled !== false &&
-                        chartOptions.navigation &&
-                        chartOptions.navigation.buttonOptions),
-                    lang = defaultOptions.lang,
-                    div = rangeSelector.div,
-                    options = chartOptions.rangeSelector, 
-                    // Place inputs above the container
-                    inputsZIndex = pick(chartOptions.chart.style &&
-                        chartOptions.chart.style.zIndex, 0) + 1,
-                    floating = options.floating,
-                    buttons = rangeSelector.buttons,
-                    inputGroup = rangeSelector.inputGroup,
-                    buttonTheme = options.buttonTheme,
-                    buttonPosition = options.buttonPosition,
-                    inputPosition = options.inputPosition,
-                    inputEnabled = options.inputEnabled,
-                    states = buttonTheme && buttonTheme.states,
-                    plotLeft = chart.plotLeft,
-                    buttonLeft,
-                    buttonGroup = rangeSelector.buttonGroup,
-                    group,
-                    groupHeight,
-                    rendered = rangeSelector.rendered,
-                    verticalAlign = rangeSelector.options.verticalAlign,
-                    legend = chart.legend,
-                    legendOptions = legend && legend.options,
-                    buttonPositionY = buttonPosition.y,
-                    inputPositionY = inputPosition.y,
-                    animate = chart.hasLoaded,
-                    verb = animate ? 'animate' : 'attr',
-                    exportingX = 0,
-                    alignTranslateY,
-                    legendHeight,
-                    minPosition,
-                    translateY = 0,
-                    translateX;
-                if (options.enabled === false) {
-                    return;
-                }
-                // create the elements
-                if (!rendered) {
-                    rangeSelector.group = group = renderer.g('range-selector-group')
-                        .attr({
-                        zIndex: 7
-                    })
-                        .add();
-                    rangeSelector.buttonGroup = buttonGroup =
-                        renderer.g('range-selector-buttons').add(group);
-                    rangeSelector.zoomText = renderer
-                        .text(lang.rangeSelectorZoom, 0, 15)
-                        .add(buttonGroup);
-                    if (!chart.styledMode) {
-                        rangeSelector.zoomText.css(options.labelStyle);
-                        buttonTheme['stroke-width'] =
-                            pick(buttonTheme['stroke-width'], 0);
-                    }
-                    rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
-                        buttons[i] = renderer
-                            .button(rangeOptions.text, 0, 0, function (e) {
-                            // extract events from button object and call
-                            var buttonEvents = (rangeOptions.events &&
-                                    rangeOptions.events.click),
-                                callDefaultEvent;
-                            if (buttonEvents) {
-                                callDefaultEvent =
-                                    buttonEvents.call(rangeOptions, e);
-                            }
-                            if (callDefaultEvent !== false) {
-                                rangeSelector.clickButton(i);
-                            }
-                            rangeSelector.isActive = true;
-                        }, buttonTheme, states && states.hover, states && states.select, states && states.disabled)
-                            .attr({
-                            'text-align': 'center'
-                        })
-                            .add(buttonGroup);
-                    });
-                    // first create a wrapper outside the container in order to make
-                    // the inputs work and make export correct
-                    if (inputEnabled !== false) {
-                        rangeSelector.div = div = createElement('div', null, {
-                            position: 'relative',
-                            height: 0,
-                            zIndex: inputsZIndex
-                        });
-                        container.parentNode.insertBefore(div, container);
-                        // Create the group to keep the inputs
-                        rangeSelector.inputGroup = inputGroup =
-                            renderer.g('input-group').add(group);
-                        inputGroup.offset = 0;
-                        rangeSelector.drawInput('min');
-                        rangeSelector.drawInput('max');
-                    }
-                }
-                // #8769, allow dynamically updating margins
-                rangeSelector.zoomText[verb]({
-                    x: pick(plotLeft + buttonPosition.x, plotLeft)
-                });
-                // button start position
-                buttonLeft = pick(plotLeft + buttonPosition.x, plotLeft) +
-                    rangeSelector.zoomText.getBBox().width + 5;
-                rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
-                    buttons[i][verb]({ x: buttonLeft });
-                    // increase button position for the next button
-                    buttonLeft += buttons[i].width + pick(options.buttonSpacing, 5);
-                });
-                plotLeft = chart.plotLeft - chart.spacing[3];
-                rangeSelector.updateButtonStates();
-                // detect collisiton with exporting
-                if (navButtonOptions &&
-                    this.titleCollision(chart) &&
-                    verticalAlign === 'top' &&
-                    buttonPosition.align === 'right' && ((buttonPosition.y +
-                    buttonGroup.getBBox().height - 12) <
-                    ((navButtonOptions.y || 0) +
-                        navButtonOptions.height))) {
-                    exportingX = -40;
-                }
-                translateX = buttonPosition.x - chart.spacing[3];
-                if (buttonPosition.align === 'right') {
-                    translateX += exportingX - plotLeft; // (#13014)
-                }
-                else if (buttonPosition.align === 'center') {
-                    translateX -= plotLeft / 2;
-                }
-                // align button group
-                buttonGroup.align({
-                    y: buttonPosition.y,
-                    width: buttonGroup.getBBox().width,
-                    align: buttonPosition.align,
-                    x: translateX
-                }, true, chart.spacingBox);
-                // skip animation
-                rangeSelector.group.placed = animate;
-                rangeSelector.buttonGroup.placed = animate;
-                if (inputEnabled !== false) {
-                    var inputGroupX,
-                        inputGroupWidth,
-                        buttonGroupX,
-                        buttonGroupWidth;
-                    // detect collision with exporting
-                    if (navButtonOptions &&
-                        this.titleCollision(chart) &&
-                        verticalAlign === 'top' &&
-                        inputPosition.align === 'right' && ((inputPosition.y -
-                        inputGroup.getBBox().height - 12) <
-                        ((navButtonOptions.y || 0) +
-                            navButtonOptions.height +
-                            chart.spacing[0]))) {
-                        exportingX = -40;
-                    }
-                    else {
-                        exportingX = 0;
-                    }
-                    if (inputPosition.align === 'left') {
-                        translateX = plotLeft;
-                    }
-                    else if (inputPosition.align === 'right') {
-                        translateX = -Math.max(chart.axisOffset[1], -exportingX);
-                    }
-                    // Update the alignment to the updated spacing box
-                    inputGroup.align({
-                        y: inputPosition.y,
-                        width: inputGroup.getBBox().width,
-                        align: inputPosition.align,
-                        // fix wrong getBBox() value on right align
-                        x: inputPosition.x + translateX - 2
-                    }, true, chart.spacingBox);
-                    // detect collision
-                    inputGroupX = (inputGroup.alignAttr.translateX +
-                        inputGroup.alignOptions.x -
-                        exportingX +
-                        // getBBox for detecing left margin
-                        inputGroup.getBBox().x +
-                        // 2px padding to not overlap input and label
-                        2);
-                    inputGroupWidth = inputGroup.alignOptions.width;
-                    buttonGroupX = buttonGroup.alignAttr.translateX +
-                        buttonGroup.getBBox().x;
-                    // 20 is minimal spacing between elements
-                    buttonGroupWidth = buttonGroup.getBBox().width + 20;
-                    if ((inputPosition.align ===
-                        buttonPosition.align) || ((buttonGroupX + buttonGroupWidth > inputGroupX) &&
-                        (inputGroupX + inputGroupWidth > buttonGroupX) &&
-                        (buttonPositionY <
-                            (inputPositionY +
-                                inputGroup.getBBox().height)))) {
-                        inputGroup.attr({
-                            translateX: inputGroup.alignAttr.translateX +
-                                (chart.axisOffset[1] >= -exportingX ? 0 : -exportingX),
-                            translateY: inputGroup.alignAttr.translateY +
-                                buttonGroup.getBBox().height + 10
-                        });
-                    }
-                    // Set or reset the input values
-                    rangeSelector.setInputValue('min', min);
-                    rangeSelector.setInputValue('max', max);
-                    // skip animation
-                    rangeSelector.inputGroup.placed = animate;
-                }
-                // vertical align
-                rangeSelector.group.align({
-                    verticalAlign: verticalAlign
-                }, true, chart.spacingBox);
-                // set position
-                groupHeight =
-                    rangeSelector.group.getBBox().height + 20; // # 20 padding
-                alignTranslateY =
-                    rangeSelector.group.alignAttr.translateY;
-                // calculate bottom position
-                if (verticalAlign === 'bottom') {
-                    legendHeight = (legendOptions &&
-                        legendOptions.verticalAlign === 'bottom' &&
-                        legendOptions.enabled &&
-                        !legendOptions.floating ?
-                        legend.legendHeight + pick(legendOptions.margin, 10) :
-                        0);
-                    groupHeight = groupHeight + legendHeight - 20;
-                    translateY = (alignTranslateY -
-                        groupHeight -
-                        (floating ? 0 : options.y) -
-                        (chart.titleOffset ? chart.titleOffset[2] : 0) -
-                        10 // 10 spacing
-                    );
-                }
-                if (verticalAlign === 'top') {
-                    if (floating) {
-                        translateY = 0;
-                    }
-                    if (chart.titleOffset && chart.titleOffset[0]) {
-                        translateY = chart.titleOffset[0];
-                    }
-                    translateY += ((chart.margin[0] - chart.spacing[0]) || 0);
-                }
-                else if (verticalAlign === 'middle') {
-                    if (inputPositionY === buttonPositionY) {
-                        if (inputPositionY < 0) {
-                            translateY = alignTranslateY + minPosition;
-                        }
-                        else {
-                            translateY = alignTranslateY;
-                        }
-                    }
-                    else if (inputPositionY || buttonPositionY) {
-                        if (inputPositionY < 0 ||
-                            buttonPositionY < 0) {
-                            translateY -= Math.min(inputPositionY, buttonPositionY);
-                        }
-                        else {
-                            translateY =
-                                alignTranslateY - groupHeight + minPosition;
-                        }
-                    }
-                }
-                rangeSelector.group.translate(options.x, options.y + Math.floor(translateY));
-                // translate HTML inputs
-                if (inputEnabled !== false) {
-                    rangeSelector.minInput.style.marginTop =
-                        rangeSelector.group.translateY + 'px';
-                    rangeSelector.maxInput.style.marginTop =
-                        rangeSelector.group.translateY + 'px';
-                }
-                rangeSelector.rendered = true;
-            };
-            /**
-             * Extracts height of range selector
-             *
-             * @private
-             * @function Highcharts.RangeSelector#getHeight
-             * @return {number}
-             *         Returns rangeSelector height
-             */
-            RangeSelector.prototype.getHeight = function () {
-                var rangeSelector = this,
-                    options = rangeSelector.options,
-                    rangeSelectorGroup = rangeSelector.group,
-                    inputPosition = options.inputPosition,
-                    buttonPosition = options.buttonPosition,
-                    yPosition = options.y,
-                    buttonPositionY = buttonPosition.y,
-                    inputPositionY = inputPosition.y,
-                    rangeSelectorHeight = 0,
-                    minPosition;
-                if (options.height) {
-                    return options.height;
-                }
-                rangeSelectorHeight = rangeSelectorGroup ?
-                    // 13px to keep back compatibility
-                    (rangeSelectorGroup.getBBox(true).height) + 13 +
-                        yPosition :
-                    0;
-                minPosition = Math.min(inputPositionY, buttonPositionY);
-                if ((inputPositionY < 0 && buttonPositionY < 0) ||
-                    (inputPositionY > 0 && buttonPositionY > 0)) {
-                    rangeSelectorHeight += Math.abs(minPosition);
-                }
-                return rangeSelectorHeight;
-            };
-            /**
-             * Detect collision with title or subtitle
-             *
-             * @private
-             * @function Highcharts.RangeSelector#titleCollision
-             *
-             * @param {Highcharts.Chart} chart
-             *
-             * @return {boolean}
-             *         Returns collision status
-             */
-            RangeSelector.prototype.titleCollision = function (chart) {
-                return !(chart.options.title.text ||
-                    chart.options.subtitle.text);
-            };
-            /**
-             * Update the range selector with new options
-             *
-             * @private
-             * @function Highcharts.RangeSelector#update
-             * @param {Highcharts.RangeSelectorOptions} options
-             * @return {void}
-             */
-            RangeSelector.prototype.update = function (options) {
-                var chart = this.chart;
-                merge(true, chart.options.rangeSelector, options);
-                this.destroy();
-                this.init(chart);
-                chart.rangeSelector.render();
-            };
-            /**
-             * Destroys allocated elements.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#destroy
-             */
-            RangeSelector.prototype.destroy = function () {
-                var rSelector = this,
-                    minInput = rSelector.minInput,
-                    maxInput = rSelector.maxInput;
-                rSelector.unMouseDown();
-                rSelector.unResize();
-                // Destroy elements in collections
-                destroyObjectProperties(rSelector.buttons);
-                // Clear input element events
-                if (minInput) {
-                    minInput.onfocus = minInput.onblur = minInput.onchange = null;
-                }
-                if (maxInput) {
-                    maxInput.onfocus = maxInput.onblur = maxInput.onchange = null;
-                }
-                // Destroy HTML and SVG elements
-                objectEach(rSelector, function (val, key) {
-                    if (val && key !== 'chart') {
-                        if (val instanceof SVGElement) {
-                            // SVGElement
-                            val.destroy();
-                        }
-                        else if (val instanceof window.HTMLElement) {
-                            // HTML element
-                            discardElement(val);
-                        }
-                    }
-                    if (val !== RangeSelector.prototype[key]) {
-                        rSelector[key] = null;
-                    }
-                }, this);
-            };
-            return RangeSelector;
-        }());
-        /**
-         * The default buttons for pre-selecting time frames
-         */
-        RangeSelector.prototype.defaultButtons = [{
-                type: 'month',
-                count: 1,
-                text: '1m'
-            }, {
-                type: 'month',
-                count: 3,
-                text: '3m'
-            }, {
-                type: 'month',
-                count: 6,
-                text: '6m'
-            }, {
-                type: 'ytd',
-                text: 'YTD'
-            }, {
-                type: 'year',
-                count: 1,
-                text: '1y'
-            }, {
-                type: 'all',
-                text: 'All'
-            }];
-        /**
-         * Get the axis min value based on the range option and the current max. For
-         * stock charts this is extended via the {@link RangeSelector} so that if the
-         * selected range is a multiple of months or years, it is compensated for
-         * various month lengths.
-         *
-         * @private
-         * @function Highcharts.Axis#minFromRange
-         * @return {number|undefined}
-         *         The new minimum value.
-         */
-        Axis.prototype.minFromRange = function () {
-            var rangeOptions = this.range,
-                type = rangeOptions.type,
-                min,
-                max = this.max,
-                dataMin,
-                range,
-                time = this.chart.time, 
-                // Get the true range from a start date
-                getTrueRange = function (base,
-                count) {
-                    var timeName = type === 'year' ? 'FullYear' : 'Month';
-                var date = new time.Date(base);
-                var basePeriod = time.get(timeName,
-                    date);
-                time.set(timeName, date, basePeriod + count);
-                if (basePeriod === time.get(timeName, date)) {
-                    time.set('Date', date, 0); // #6537
-                }
-                return date.getTime() - base;
-            };
-            if (isNumber(rangeOptions)) {
-                min = max - rangeOptions;
-                range = rangeOptions;
-            }
-            else {
-                min = max + getTrueRange(max, -rangeOptions.count);
-                // Let the fixedRange reflect initial settings (#5930)
-                if (this.chart) {
-                    this.chart.fixedRange = max - min;
-                }
-            }
-            dataMin = pick(this.dataMin, Number.MIN_VALUE);
-            if (!isNumber(min)) {
-                min = dataMin;
-            }
-            if (min <= dataMin) {
-                min = dataMin;
-                if (typeof range === 'undefined') { // #4501
-                    range = getTrueRange(min, rangeOptions.count);
-                }
-                this.newMax = Math.min(min + range, this.dataMax);
-            }
-            if (!isNumber(max)) {
-                min = void 0;
-            }
-            return min;
-        };
-        if (!H.RangeSelector) {
-            // Initialize rangeselector for stock charts
-            addEvent(Chart, 'afterGetContainer', function () {
-                if (this.options.rangeSelector.enabled) {
-                    this.rangeSelector = new RangeSelector(this);
-                }
-            });
-            addEvent(Chart, 'beforeRender', function () {
-                var chart = this,
-                    axes = chart.axes,
-                    rangeSelector = chart.rangeSelector,
-                    verticalAlign;
-                if (rangeSelector) {
-                    if (isNumber(rangeSelector.deferredYTDClick)) {
-                        rangeSelector.clickButton(rangeSelector.deferredYTDClick);
-                        delete rangeSelector.deferredYTDClick;
-                    }
-                    axes.forEach(function (axis) {
-                        axis.updateNames();
-                        axis.setScale();
-                    });
-                    chart.getAxisMargins();
-                    rangeSelector.render();
-                    verticalAlign = rangeSelector.options.verticalAlign;
-                    if (!rangeSelector.options.floating) {
-                        if (verticalAlign === 'bottom') {
-                            this.extraBottomMargin = true;
-                        }
-                        else if (verticalAlign !== 'middle') {
-                            this.extraTopMargin = true;
-                        }
-                    }
-                }
-            });
-            addEvent(Chart, 'update', function (e) {
-                var chart = this,
-                    options = e.options,
-                    optionsRangeSelector = options.rangeSelector,
-                    rangeSelector = chart.rangeSelector,
-                    verticalAlign,
-                    extraBottomMarginWas = this.extraBottomMargin,
-                    extraTopMarginWas = this.extraTopMargin;
-                if (optionsRangeSelector &&
-                    optionsRangeSelector.enabled &&
-                    !defined(rangeSelector)) {
-                    this.options.rangeSelector.enabled = true;
-                    this.rangeSelector = new RangeSelector(this);
-                }
-                this.extraBottomMargin = false;
-                this.extraTopMargin = false;
-                if (rangeSelector) {
-                    rangeSelector.render();
-                    verticalAlign = (optionsRangeSelector &&
-                        optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);
-                    if (!rangeSelector.options.floating) {
-                        if (verticalAlign === 'bottom') {
-                            this.extraBottomMargin = true;
-                        }
-                        else if (verticalAlign !== 'middle') {
-                            this.extraTopMargin = true;
-                        }
-                    }
-                    if (this.extraBottomMargin !== extraBottomMarginWas ||
-                        this.extraTopMargin !== extraTopMarginWas) {
-                        this.isDirtyBox = true;
-                    }
-                }
-            });
-            addEvent(Chart, 'render', function () {
-                var chart = this,
-                    rangeSelector = chart.rangeSelector,
-                    verticalAlign;
-                if (rangeSelector && !rangeSelector.options.floating) {
-                    rangeSelector.render();
-                    verticalAlign = rangeSelector.options.verticalAlign;
-                    if (verticalAlign === 'bottom') {
-                        this.extraBottomMargin = true;
-                    }
-                    else if (verticalAlign !== 'middle') {
-                        this.extraTopMargin = true;
-                    }
-                }
-            });
-            addEvent(Chart, 'getMargins', function () {
-                var rangeSelector = this.rangeSelector,
-                    rangeSelectorHeight;
-                if (rangeSelector) {
-                    rangeSelectorHeight = rangeSelector.getHeight();
-                    if (this.extraTopMargin) {
-                        this.plotTop += rangeSelectorHeight;
-                    }
-                    if (this.extraBottomMargin) {
-                        this.marginBottom += rangeSelectorHeight;
-                    }
-                }
-            });
-            Chart.prototype.callbacks.push(function (chart) {
-                var extremes,
-                    rangeSelector = chart.rangeSelector,
-                    unbindRender,
-                    unbindSetExtremes,
-                    legend,
-                    alignTo,
-                    verticalAlign;
-                /**
-                 * @private
-                 */
-                function renderRangeSelector() {
-                    extremes = chart.xAxis[0].getExtremes();
-                    legend = chart.legend;
-                    verticalAlign = rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.options.verticalAlign;
-                    if (isNumber(extremes.min)) {
-                        rangeSelector.render(extremes.min, extremes.max);
-                    }
-                    // Re-align the legend so that it's below the rangeselector
-                    if (rangeSelector && legend.display &&
-                        verticalAlign === 'top' &&
-                        verticalAlign === legend.options.verticalAlign) {
-                        // Create a new alignment box for the legend.
-                        alignTo = merge(chart.spacingBox);
-                        if (legend.options.layout === 'vertical') {
-                            alignTo.y = chart.plotTop;
-                        }
-                        else {
-                            alignTo.y += rangeSelector.getHeight();
-                        }
-                        legend.group.placed = false; // Don't animate the alignment.
-                        legend.align(alignTo);
-                    }
-                }
-                if (rangeSelector) {
-                    // redraw the scroller on setExtremes
-                    unbindSetExtremes = addEvent(chart.xAxis[0], 'afterSetExtremes', function (e) {
-                        rangeSelector.render(e.min, e.max);
-                    });
-                    // redraw the scroller chart resize
-                    unbindRender = addEvent(chart, 'redraw', renderRangeSelector);
-                    // do it now
-                    renderRangeSelector();
-                }
-                // Remove resize/afterSetExtremes at chart destroy
-                addEvent(chart, 'destroy', function destroyEvents() {
-                    if (rangeSelector) {
-                        unbindRender();
-                        unbindSetExtremes();
-                    }
-                });
-            });
-            H.RangeSelector = RangeSelector;
-        }
-
-        return H.RangeSelector;
-    });
-    _registerModule(_modules, 'Core/Axis/NavigatorAxis.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (H, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var isTouchDevice = H.isTouchDevice;
-        var addEvent = U.addEvent,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            isNumber = U.isNumber,
-            pick = U.pick;
-        /* eslint-disable valid-jsdoc */
-        /**
-         * @private
-         * @class
-         */
-        var NavigatorAxisAdditions = /** @class */ (function () {
-                /* *
-                 *
-                 *  Constructors
-                 *
-                 * */
-                function NavigatorAxisAdditions(axis) {
-                    this.axis = axis;
-            }
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * @private
-             */
-            NavigatorAxisAdditions.prototype.destroy = function () {
-                this.axis = void 0;
-            };
-            /**
-             * Add logic to normalize the zoomed range in order to preserve the pressed
-             * state of range selector buttons
-             *
-             * @private
-             * @function Highcharts.Axis#toFixedRange
-             * @param {number} [pxMin]
-             * @param {number} [pxMax]
-             * @param {number} [fixedMin]
-             * @param {number} [fixedMax]
-             * @return {*}
-             */
-            NavigatorAxisAdditions.prototype.toFixedRange = function (pxMin, pxMax, fixedMin, fixedMax) {
-                var navigator = this;
-                var axis = navigator.axis;
-                var chart = axis.chart;
-                var fixedRange = chart && chart.fixedRange,
-                    halfPointRange = (axis.pointRange || 0) / 2,
-                    newMin = pick(fixedMin,
-                    axis.translate(pxMin,
-                    true, !axis.horiz)),
-                    newMax = pick(fixedMax,
-                    axis.translate(pxMax,
-                    true, !axis.horiz)),
-                    changeRatio = fixedRange && (newMax - newMin) / fixedRange;
-                // Add/remove half point range to/from the extremes (#1172)
-                if (!defined(fixedMin)) {
-                    newMin = correctFloat(newMin + halfPointRange);
-                }
-                if (!defined(fixedMax)) {
-                    newMax = correctFloat(newMax - halfPointRange);
-                }
-                // If the difference between the fixed range and the actual requested
-                // range is too great, the user is dragging across an ordinal gap, and
-                // we need to release the range selector button.
-                if (changeRatio > 0.7 && changeRatio < 1.3) {
-                    if (fixedMax) {
-                        newMin = newMax - fixedRange;
-                    }
-                    else {
-                        newMax = newMin + fixedRange;
-                    }
-                }
-                if (!isNumber(newMin) || !isNumber(newMax)) { // #1195, #7411
-                    newMin = newMax = void 0;
-                }
-                return {
-                    min: newMin,
-                    max: newMax
-                };
-            };
-            return NavigatorAxisAdditions;
-        }());
-        /**
-         * @private
-         * @class
-         */
-        var NavigatorAxis = /** @class */ (function () {
-                function NavigatorAxis() {
-                }
-                /* *
-                 *
-                 *  Static Functions
-                 *
-                 * */
-                /**
-                 * @private
-                 */
-                NavigatorAxis.compose = function (AxisClass) {
-                    AxisClass.keepProps.push('navigatorAxis');
-                /* eslint-disable no-invalid-this */
-                addEvent(AxisClass, 'init', function () {
-                    var axis = this;
-                    if (!axis.navigatorAxis) {
-                        axis.navigatorAxis = new NavigatorAxisAdditions(axis);
-                    }
-                });
-                // For Stock charts, override selection zooming with some special
-                // features because X axis zooming is already allowed by the Navigator
-                // and Range selector.
-                addEvent(AxisClass, 'zoom', function (e) {
-                    var axis = this;
-                    var chart = axis.chart;
-                    var chartOptions = chart.options;
-                    var navigator = chartOptions.navigator;
-                    var navigatorAxis = axis.navigatorAxis;
-                    var pinchType = chartOptions.chart.pinchType;
-                    var rangeSelector = chartOptions.rangeSelector;
-                    var zoomType = chartOptions.chart.zoomType;
-                    var previousZoom;
-                    if (axis.isXAxis && ((navigator && navigator.enabled) ||
-                        (rangeSelector && rangeSelector.enabled))) {
-                        // For y only zooming, ignore the X axis completely
-                        if (zoomType === 'y') {
-                            e.zoomed = false;
-                            // For xy zooming, record the state of the zoom before zoom
-                            // selection, then when the reset button is pressed, revert to
-                            // this state. This should apply only if the chart is
-                            // initialized with a range (#6612), otherwise zoom all the way
-                            // out.
-                        }
-                        else if (((!isTouchDevice && zoomType === 'xy') ||
-                            (isTouchDevice && pinchType === 'xy')) &&
-                            axis.options.range) {
-                            previousZoom = navigatorAxis.previousZoom;
-                            if (defined(e.newMin)) {
-                                navigatorAxis.previousZoom = [axis.min, axis.max];
-                            }
-                            else if (previousZoom) {
-                                e.newMin = previousZoom[0];
-                                e.newMax = previousZoom[1];
-                                navigatorAxis.previousZoom = void 0;
-                            }
-                        }
-                    }
-                    if (typeof e.zoomed !== 'undefined') {
-                        e.preventDefault();
-                    }
-                });
-                /* eslint-enable no-invalid-this */
-            };
-            /* *
-             *
-             *  Static Properties
-             *
-             * */
-            /**
-             * @private
-             */
-            NavigatorAxis.AdditionsClass = NavigatorAxisAdditions;
-            return NavigatorAxis;
-        }());
-
-        return NavigatorAxis;
-    });
-    _registerModule(_modules, 'Core/Navigator.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Series/Series.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Series/LineSeries.js'], _modules['Core/Axis/NavigatorAxis.js'], _modules['Core/Options.js'], _modules['Core/Scrollbar.js'], _modules['Core/Utilities.js']], function (Axis, BaseSeries, Chart, Color, H, LineSeries, NavigatorAxis, O, Scrollbar, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var seriesTypes = BaseSeries.seriesTypes;
-        var color = Color.parse;
-        var hasTouch = H.hasTouch,
-            isTouchDevice = H.isTouchDevice;
-        var defaultOptions = O.defaultOptions;
-        var addEvent = U.addEvent,
-            clamp = U.clamp,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            destroyObjectProperties = U.destroyObjectProperties,
-            erase = U.erase,
-            extend = U.extend,
-            find = U.find,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            pick = U.pick,
-            removeEvent = U.removeEvent,
-            splat = U.splat;
-        var defaultSeriesType, 
-            // Finding the min or max of a set of variables where we don't know if they
-            // are defined, is a pattern that is repeated several places in Highcharts.
-            // Consider making this a global utility method.
-            numExt = function (extreme) {
-                var args = [];
-            for (var _i = 1; _i < arguments.length; _i++) {
-                args[_i - 1] = arguments[_i];
-            }
-            var numbers = [].filter.call(args,
-                isNumber);
-            if (numbers.length) {
-                return Math[extreme].apply(0, numbers);
-            }
-        };
-        defaultSeriesType = typeof seriesTypes.areaspline === 'undefined' ?
-            'line' :
-            'areaspline';
-        extend(defaultOptions, {
-            /**
-             * Maximum range which can be set using the navigator's handles.
-             * Opposite of [xAxis.minRange](#xAxis.minRange).
-             *
-             * @sample {highstock} stock/navigator/maxrange/
-             *         Defined max and min range
-             *
-             * @type      {number}
-             * @since     6.0.0
-             * @product   highstock gantt
-             * @apioption xAxis.maxRange
-             */
-            /**
-             * The navigator is a small series below the main series, displaying
-             * a view of the entire data set. It provides tools to zoom in and
-             * out on parts of the data as well as panning across the dataset.
-             *
-             * @product      highstock gantt
-             * @optionparent navigator
-             */
-            navigator: {
-                /**
-                 * Whether the navigator and scrollbar should adapt to updated data
-                 * in the base X axis. When loading data async, as in the demo below,
-                 * this should be `false`. Otherwise new data will trigger navigator
-                 * redraw, which will cause unwanted looping. In the demo below, the
-                 * data in the navigator is set only once. On navigating, only the main
-                 * chart content is updated.
-                 *
-                 * @sample {highstock} stock/demo/lazy-loading/
-                 *         Set to false with async data loading
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption navigator.adaptToUpdatedData
-                 */
-                /**
-                 * An integer identifying the index to use for the base series, or a
-                 * string representing the id of the series.
-                 *
-                 * **Note**: As of Highcharts 5.0, this is now a deprecated option.
-                 * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).
-                 *
-                 * @see [series.showInNavigator](#plotOptions.series.showInNavigator)
-                 *
-                 * @deprecated
-                 * @type      {number|string}
-                 * @default   0
-                 * @apioption navigator.baseSeries
-                 */
-                /**
-                 * Enable or disable the navigator.
-                 *
-                 * @sample {highstock} stock/navigator/enabled/
-                 *         Disable the navigator
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption navigator.enabled
-                 */
-                /**
-                 * When the chart is inverted, whether to draw the navigator on the
-                 * opposite side.
-                 *
-                 * @type      {boolean}
-                 * @default   false
-                 * @since     5.0.8
-                 * @apioption navigator.opposite
-                 */
-                /**
-                 * The height of the navigator.
-                 *
-                 * @sample {highstock} stock/navigator/height/
-                 *         A higher navigator
-                 */
-                height: 40,
-                /**
-                 * The distance from the nearest element, the X axis or X axis labels.
-                 *
-                 * @sample {highstock} stock/navigator/margin/
-                 *         A margin of 2 draws the navigator closer to the X axis labels
-                 */
-                margin: 25,
-                /**
-                 * Whether the mask should be inside the range marking the zoomed
-                 * range, or outside. In Highstock 1.x it was always `false`.
-                 *
-                 * @sample {highstock} stock/navigator/maskinside-false/
-                 *         False, mask outside
-                 *
-                 * @since   2.0
-                 */
-                maskInside: true,
-                /**
-                 * Options for the handles for dragging the zoomed area.
-                 *
-                 * @sample {highstock} stock/navigator/handles/
-                 *         Colored handles
-                 */
-                handles: {
-                    /**
-                     * Width for handles.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @since   6.0.0
-                     */
-                    width: 7,
-                    /**
-                     * Height for handles.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @since   6.0.0
-                     */
-                    height: 15,
-                    /**
-                     * Array to define shapes of handles. 0-index for left, 1-index for
-                     * right.
-                     *
-                     * Additionally, the URL to a graphic can be given on this form:
-                     * `url(graphic.png)`. Note that for the image to be applied to
-                     * exported charts, its URL needs to be accessible by the export
-                     * server.
-                     *
-                     * Custom callbacks for symbol path generation can also be added to
-                     * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then
-                     * used by its method name, as shown in the demo.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @type    {Array<string>}
-                     * @default ["navigator-handle", "navigator-handle"]
-                     * @since   6.0.0
-                     */
-                    symbols: ['navigator-handle', 'navigator-handle'],
-                    /**
-                     * Allows to enable/disable handles.
-                     *
-                     * @since   6.0.0
-                     */
-                    enabled: true,
-                    /**
-                     * The width for the handle border and the stripes inside.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @since     6.0.0
-                     * @apioption navigator.handles.lineWidth
-                     */
-                    lineWidth: 1,
-                    /**
-                     * The fill for the handle.
-                     *
-                     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     */
-                    backgroundColor: '#f2f2f2',
-                    /**
-                     * The stroke for the handle border and the stripes inside.
-                     *
-                     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     */
-                    borderColor: '#999999'
-                },
-                /**
-                 * The color of the mask covering the areas of the navigator series
-                 * that are currently not visible in the main series. The default
-                 * color is bluish with an opacity of 0.3 to see the series below.
-                 *
-                 * @see In styled mode, the mask is styled with the
-                 *      `.highcharts-navigator-mask` and
-                 *      `.highcharts-navigator-mask-inside` classes.
-                 *
-                 * @sample {highstock} stock/navigator/maskfill/
-                 *         Blue, semi transparent mask
-                 *
-                 * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 * @default rgba(102,133,194,0.3)
-                 */
-                maskFill: color('#6685c2').setOpacity(0.3).get(),
-                /**
-                 * The color of the line marking the currently zoomed area in the
-                 * navigator.
-                 *
-                 * @sample {highstock} stock/navigator/outline/
-                 *         2px blue outline
-                 *
-                 * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 * @default #cccccc
-                 */
-                outlineColor: '#cccccc',
-                /**
-                 * The width of the line marking the currently zoomed area in the
-                 * navigator.
-                 *
-                 * @see In styled mode, the outline stroke width is set with the
-                 *      `.highcharts-navigator-outline` class.
-                 *
-                 * @sample {highstock} stock/navigator/outline/
-                 *         2px blue outline
-                 *
-                 * @type    {number}
-                 */
-                outlineWidth: 1,
-                /**
-                 * Options for the navigator series. Available options are the same
-                 * as any series, documented at [plotOptions](#plotOptions.series)
-                 * and [series](#series).
-                 *
-                 * Unless data is explicitly defined on navigator.series, the data
-                 * is borrowed from the first series in the chart.
-                 *
-                 * Default series options for the navigator series are:
-                 * ```js
-                 * series: {
-                 *     type: 'areaspline',
-                 *     fillOpacity: 0.05,
-                 *     dataGrouping: {
-                 *         smoothed: true
-                 *     },
-                 *     lineWidth: 1,
-                 *     marker: {
-                 *         enabled: false
-                 *     }
-                 * }
-                 * ```
-                 *
-                 * @see In styled mode, the navigator series is styled with the
-                 *      `.highcharts-navigator-series` class.
-                 *
-                 * @sample {highstock} stock/navigator/series-data/
-                 *         Using a separate data set for the navigator
-                 * @sample {highstock} stock/navigator/series/
-                 *         A green navigator series
-                 *
-                 * @type {*|Array<*>|Highcharts.SeriesOptionsType|Array<Highcharts.SeriesOptionsType>}
-                 */
-                series: {
-                    /**
-                     * The type of the navigator series.
-                     *
-                     * Heads up:
-                     * In column-type navigator, zooming is limited to at least one
-                     * point with its `pointRange`.
-                     *
-                     * @sample {highstock} stock/navigator/column/
-                     *         Column type navigator
-                     *
-                     * @type    {string}
-                     * @default {highstock} `areaspline` if defined, otherwise `line`
-                     * @default {gantt} gantt
-                     */
-                    type: defaultSeriesType,
-                    /**
-                     * The fill opacity of the navigator series.
-                     */
-                    fillOpacity: 0.05,
-                    /**
-                     * The pixel line width of the navigator series.
-                     */
-                    lineWidth: 1,
-                    /**
-                     * @ignore-option
-                     */
-                    compare: null,
-                    /**
-                     * Unless data is explicitly defined, the data is borrowed from the
-                     * first series in the chart.
-                     *
-                     * @type      {Array<number|Array<number|string|null>|object|null>}
-                     * @product   highstock
-                     * @apioption navigator.series.data
-                     */
-                    /**
-                     * Data grouping options for the navigator series.
-                     *
-                     * @extends plotOptions.series.dataGrouping
-                     */
-                    dataGrouping: {
-                        approximation: 'average',
-                        enabled: true,
-                        groupPixelWidth: 2,
-                        smoothed: true,
-                        // Day and week differs from plotOptions.series.dataGrouping
-                        units: [
-                            ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
-                            ['second', [1, 2, 5, 10, 15, 30]],
-                            ['minute', [1, 2, 5, 10, 15, 30]],
-                            ['hour', [1, 2, 3, 4, 6, 8, 12]],
-                            ['day', [1, 2, 3, 4]],
-                            ['week', [1, 2, 3]],
-                            ['month', [1, 3, 6]],
-                            ['year', null]
-                        ]
-                    },
-                    /**
-                     * Data label options for the navigator series. Data labels are
-                     * disabled by default on the navigator series.
-                     *
-                     * @extends plotOptions.series.dataLabels
-                     */
-                    dataLabels: {
-                        enabled: false,
-                        zIndex: 2 // #1839
-                    },
-                    id: 'highcharts-navigator-series',
-                    className: 'highcharts-navigator-series',
-                    /**
-                     * Sets the fill color of the navigator series.
-                     *
-                     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     * @apioption navigator.series.color
-                     */
-                    /**
-                     * Line color for the navigator series. Allows setting the color
-                     * while disallowing the default candlestick setting.
-                     *
-                     * @type {Highcharts.ColorString|null}
-                     */
-                    lineColor: null,
-                    marker: {
-                        enabled: false
-                    },
-                    /**
-                     * Since Highstock v8, default value is the same as default
-                     * `pointRange` defined for a specific type (e.g. `null` for
-                     * column type).
-                     *
-                     * In Highstock version < 8, defaults to 0.
-                     *
-                     * @extends plotOptions.series.pointRange
-                     * @type {number|null}
-                     * @apioption navigator.series.pointRange
-                     */
-                    /**
-                     * The threshold option. Setting it to 0 will make the default
-                     * navigator area series draw its area from the 0 value and up.
-                     *
-                     * @type {number|null}
-                     */
-                    threshold: null
-                },
-                /**
-                 * Options for the navigator X axis. Default series options for the
-                 * navigator xAxis are:
-                 * ```js
-                 * xAxis: {
-                 *     tickWidth: 0,
-                 *     lineWidth: 0,
-                 *     gridLineWidth: 1,
-                 *     tickPixelInterval: 200,
-                 *     labels: {
-                 *            align: 'left',
-                 *         style: {
-                 *             color: '#888'
-                 *         },
-                 *         x: 3,
-                 *         y: -4
-                 *     }
-                 * }
-                 * ```
-                 *
-                 * @extends   xAxis
-                 * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,
-                 *            showEmpty, maxRange
-                 */
-                xAxis: {
-                    /**
-                     * Additional range on the right side of the xAxis. Works similar to
-                     * xAxis.maxPadding, but value is set in milliseconds.
-                     * Can be set for both, main xAxis and navigator's xAxis.
-                     *
-                     * @since   6.0.0
-                     */
-                    overscroll: 0,
-                    className: 'highcharts-navigator-xaxis',
-                    tickLength: 0,
-                    lineWidth: 0,
-                    gridLineColor: '#e6e6e6',
-                    gridLineWidth: 1,
-                    tickPixelInterval: 200,
-                    labels: {
-                        align: 'left',
-                        /**
-                         * @type {Highcharts.CSSObject}
-                         */
-                        style: {
-                            /** @ignore */
-                            color: '#999999'
-                        },
-                        x: 3,
-                        y: -4
-                    },
-                    crosshair: false
-                },
-                /**
-                 * Options for the navigator Y axis. Default series options for the
-                 * navigator yAxis are:
-                 * ```js
-                 * yAxis: {
-                 *     gridLineWidth: 0,
-                 *     startOnTick: false,
-                 *     endOnTick: false,
-                 *     minPadding: 0.1,
-                 *     maxPadding: 0.1,
-                 *     labels: {
-                 *         enabled: false
-                 *     },
-                 *     title: {
-                 *         text: null
-                 *     },
-                 *     tickWidth: 0
-                 * }
-                 * ```
-                 *
-                 * @extends   yAxis
-                 * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,
-                 *            showEmpty, scrollbar, top, units, maxRange, minLength,
-                 *            maxLength, resize
-                 */
-                yAxis: {
-                    className: 'highcharts-navigator-yaxis',
-                    gridLineWidth: 0,
-                    startOnTick: false,
-                    endOnTick: false,
-                    minPadding: 0.1,
-                    maxPadding: 0.1,
-                    labels: {
-                        enabled: false
-                    },
-                    crosshair: false,
-                    title: {
-                        text: null
-                    },
-                    tickLength: 0,
-                    tickWidth: 0
-                }
-            }
-        });
-        /* eslint-disable no-invalid-this, valid-jsdoc */
-        /**
-         * Draw one of the handles on the side of the zoomed range in the navigator
-         *
-         * @private
-         * @function Highcharts.Renderer#symbols.navigator-handle
-         * @param {number} x
-         * @param {number} y
-         * @param {number} w
-         * @param {number} h
-         * @param {Highcharts.NavigatorHandlesOptions} options
-         * @return {Highcharts.SVGPathArray}
-         *         Path to be used in a handle
-         */
-        H.Renderer.prototype.symbols['navigator-handle'] = function (x, y, w, h, options) {
-            var halfWidth = (options && options.width || 0) / 2,
-                markerPosition = Math.round(halfWidth / 3) + 0.5,
-                height = options && options.height || 0;
-            return [
-                ['M', -halfWidth - 1, 0.5],
-                ['L', halfWidth, 0.5],
-                ['L', halfWidth, height + 0.5],
-                ['L', -halfWidth - 1, height + 0.5],
-                ['L', -halfWidth - 1, 0.5],
-                ['M', -markerPosition, 4],
-                ['L', -markerPosition, height - 3],
-                ['M', markerPosition - 1, 4],
-                ['L', markerPosition - 1, height - 3]
-            ];
-        };
-        /**
-         * The Navigator class
-         *
-         * @private
-         * @class
-         * @name Highcharts.Navigator
-         *
-         * @param {Highcharts.Chart} chart
-         *        Chart object
-         */
-        var Navigator = /** @class */ (function () {
-                function Navigator(chart) {
-                    this.baseSeries = void 0;
-                this.chart = void 0;
-                this.handles = void 0;
-                this.height = void 0;
-                this.left = void 0;
-                this.navigatorEnabled = void 0;
-                this.navigatorGroup = void 0;
-                this.navigatorOptions = void 0;
-                this.navigatorSeries = void 0;
-                this.navigatorSize = void 0;
-                this.opposite = void 0;
-                this.outline = void 0;
-                this.outlineHeight = void 0;
-                this.range = void 0;
-                this.rendered = void 0;
-                this.shades = void 0;
-                this.size = void 0;
-                this.top = void 0;
-                this.xAxis = void 0;
-                this.yAxis = void 0;
-                this.zoomedMax = void 0;
-                this.zoomedMin = void 0;
-                this.init(chart);
-            }
-            /**
-             * Draw one of the handles on the side of the zoomed range in the navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#drawHandle
-             *
-             * @param {number} x
-             *        The x center for the handle
-             *
-             * @param {number} index
-             *        0 for left and 1 for right
-             *
-             * @param {boolean|undefined} inverted
-             *        flag for chart.inverted
-             *
-             * @param {string} verb
-             *        use 'animate' or 'attr'
-             */
-            Navigator.prototype.drawHandle = function (x, index, inverted, verb) {
-                var navigator = this,
-                    height = navigator.navigatorOptions.handles.height;
-                // Place it
-                navigator.handles[index][verb](inverted ? {
-                    translateX: Math.round(navigator.left + navigator.height / 2),
-                    translateY: Math.round(navigator.top + parseInt(x, 10) + 0.5 - height)
-                } : {
-                    translateX: Math.round(navigator.left + parseInt(x, 10)),
-                    translateY: Math.round(navigator.top + navigator.height / 2 - height / 2 - 1)
-                });
-            };
-            /**
-             * Render outline around the zoomed range
-             *
-             * @private
-             * @function Highcharts.Navigator#drawOutline
-             *
-             * @param {number} zoomedMin
-             *        in pixels position where zoomed range starts
-             *
-             * @param {number} zoomedMax
-             *        in pixels position where zoomed range ends
-             *
-             * @param {boolean|undefined} inverted
-             *        flag if chart is inverted
-             *
-             * @param {string} verb
-             *        use 'animate' or 'attr'
-             */
-            Navigator.prototype.drawOutline = function (zoomedMin, zoomedMax, inverted, verb) {
-                var navigator = this,
-                    maskInside = navigator.navigatorOptions.maskInside,
-                    outlineWidth = navigator.outline.strokeWidth(),
-                    halfOutline = outlineWidth / 2,
-                    outlineCorrection = (outlineWidth % 2) / 2, // #5800
-                    outlineHeight = navigator.outlineHeight,
-                    scrollbarHeight = navigator.scrollbarHeight || 0,
-                    navigatorSize = navigator.size,
-                    left = navigator.left - scrollbarHeight,
-                    navigatorTop = navigator.top,
-                    verticalMin,
-                    path;
-                if (inverted) {
-                    left -= halfOutline;
-                    verticalMin = navigatorTop + zoomedMax + outlineCorrection;
-                    zoomedMax = navigatorTop + zoomedMin + outlineCorrection;
-                    path = [
-                        ['M', left + outlineHeight, navigatorTop - scrollbarHeight - outlineCorrection],
-                        ['L', left + outlineHeight, verticalMin],
-                        ['L', left, verticalMin],
-                        ['L', left, zoomedMax],
-                        ['L', left + outlineHeight, zoomedMax],
-                        ['L', left + outlineHeight, navigatorTop + navigatorSize + scrollbarHeight]
-                    ];
-                    if (maskInside) {
-                        path.push(['M', left + outlineHeight, verticalMin - halfOutline], // upper left of zoomed range
-                        ['L', left + outlineHeight, zoomedMax + halfOutline] // upper right of z.r.
-                        );
-                    }
-                }
-                else {
-                    zoomedMin += left + scrollbarHeight - outlineCorrection;
-                    zoomedMax += left + scrollbarHeight - outlineCorrection;
-                    navigatorTop += halfOutline;
-                    path = [
-                        ['M', left, navigatorTop],
-                        ['L', zoomedMin, navigatorTop],
-                        ['L', zoomedMin, navigatorTop + outlineHeight],
-                        ['L', zoomedMax, navigatorTop + outlineHeight],
-                        ['L', zoomedMax, navigatorTop],
-                        ['L', left + navigatorSize + scrollbarHeight * 2, navigatorTop] // right
-                    ];
-                    if (maskInside) {
-                        path.push(['M', zoomedMin - halfOutline, navigatorTop], // upper left of zoomed range
-                        ['L', zoomedMax + halfOutline, navigatorTop] // upper right of z.r.
-                        );
-                    }
-                }
-                navigator.outline[verb]({
-                    d: path
-                });
-            };
-            /**
-             * Render outline around the zoomed range
-             *
-             * @private
-             * @function Highcharts.Navigator#drawMasks
-             *
-             * @param {number} zoomedMin
-             *        in pixels position where zoomed range starts
-             *
-             * @param {number} zoomedMax
-             *        in pixels position where zoomed range ends
-             *
-             * @param {boolean|undefined} inverted
-             *        flag if chart is inverted
-             *
-             * @param {string} verb
-             *        use 'animate' or 'attr'
-             */
-            Navigator.prototype.drawMasks = function (zoomedMin, zoomedMax, inverted, verb) {
-                var navigator = this,
-                    left = navigator.left,
-                    top = navigator.top,
-                    navigatorHeight = navigator.height,
-                    height,
-                    width,
-                    x,
-                    y;
-                // Determine rectangle position & size
-                // According to (non)inverted position:
-                if (inverted) {
-                    x = [left, left, left];
-                    y = [top, top + zoomedMin, top + zoomedMax];
-                    width = [navigatorHeight, navigatorHeight, navigatorHeight];
-                    height = [
-                        zoomedMin,
-                        zoomedMax - zoomedMin,
-                        navigator.size - zoomedMax
-                    ];
-                }
-                else {
-                    x = [left, left + zoomedMin, left + zoomedMax];
-                    y = [top, top, top];
-                    width = [
-                        zoomedMin,
-                        zoomedMax - zoomedMin,
-                        navigator.size - zoomedMax
-                    ];
-                    height = [navigatorHeight, navigatorHeight, navigatorHeight];
-                }
-                navigator.shades.forEach(function (shade, i) {
-                    shade[verb]({
-                        x: x[i],
-                        y: y[i],
-                        width: width[i],
-                        height: height[i]
-                    });
-                });
-            };
-            /**
-             * Generate DOM elements for a navigator:
-             *
-             * - main navigator group
-             *
-             * - all shades
-             *
-             * - outline
-             *
-             * - handles
-             *
-             * @private
-             * @function Highcharts.Navigator#renderElements
-             */
-            Navigator.prototype.renderElements = function () {
-                var navigator = this,
-                    navigatorOptions = navigator.navigatorOptions,
-                    maskInside = navigatorOptions.maskInside,
-                    chart = navigator.chart,
-                    inverted = chart.inverted,
-                    renderer = chart.renderer,
-                    navigatorGroup,
-                    mouseCursor = {
-                        cursor: inverted ? 'ns-resize' : 'ew-resize'
-                    };
-                // Create the main navigator group
-                navigator.navigatorGroup = navigatorGroup = renderer.g('navigator')
-                    .attr({
-                    zIndex: 8,
-                    visibility: 'hidden'
-                })
-                    .add();
-                // Create masks, each mask will get events and fill:
-                [
-                    !maskInside,
-                    maskInside,
-                    !maskInside
-                ].forEach(function (hasMask, index) {
-                    navigator.shades[index] = renderer.rect()
-                        .addClass('highcharts-navigator-mask' +
-                        (index === 1 ? '-inside' : '-outside'))
-                        .add(navigatorGroup);
-                    if (!chart.styledMode) {
-                        navigator.shades[index]
-                            .attr({
-                            fill: hasMask ?
-                                navigatorOptions.maskFill :
-                                'rgba(0,0,0,0)'
-                        })
-                            .css((index === 1) && mouseCursor);
-                    }
-                });
-                // Create the outline:
-                navigator.outline = renderer.path()
-                    .addClass('highcharts-navigator-outline')
-                    .add(navigatorGroup);
-                if (!chart.styledMode) {
-                    navigator.outline.attr({
-                        'stroke-width': navigatorOptions.outlineWidth,
-                        stroke: navigatorOptions.outlineColor
-                    });
-                }
-                // Create the handlers:
-                if (navigatorOptions.handles.enabled) {
-                    [0, 1].forEach(function (index) {
-                        navigatorOptions.handles.inverted = chart.inverted;
-                        navigator.handles[index] = renderer.symbol(navigatorOptions.handles.symbols[index], -navigatorOptions.handles.width / 2 - 1, 0, navigatorOptions.handles.width, navigatorOptions.handles.height, navigatorOptions.handles);
-                        // zIndex = 6 for right handle, 7 for left.
-                        // Can't be 10, because of the tooltip in inverted chart #2908
-                        navigator.handles[index].attr({ zIndex: 7 - index })
-                            .addClass('highcharts-navigator-handle ' +
-                            'highcharts-navigator-handle-' +
-                            ['left', 'right'][index]).add(navigatorGroup);
-                        if (!chart.styledMode) {
-                            var handlesOptions = navigatorOptions.handles;
-                            navigator.handles[index]
-                                .attr({
-                                fill: handlesOptions.backgroundColor,
-                                stroke: handlesOptions.borderColor,
-                                'stroke-width': handlesOptions.lineWidth
-                            })
-                                .css(mouseCursor);
-                        }
-                    });
-                }
-            };
-            /**
-             * Update navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#update
-             *
-             * @param {Highcharts.NavigatorOptions} options
-             *        Options to merge in when updating navigator
-             */
-            Navigator.prototype.update = function (options) {
-                // Remove references to old navigator series in base series
-                (this.series || []).forEach(function (series) {
-                    if (series.baseSeries) {
-                        delete series.baseSeries.navigatorSeries;
-                    }
-                });
-                // Destroy and rebuild navigator
-                this.destroy();
-                var chartOptions = this.chart.options;
-                merge(true, chartOptions.navigator, this.options, options);
-                this.init(this.chart);
-            };
-            /**
-             * Render the navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#render
-             * @param {number} min
-             *        X axis value minimum
-             * @param {number} max
-             *        X axis value maximum
-             * @param {number} [pxMin]
-             *        Pixel value minimum
-             * @param {number} [pxMax]
-             *        Pixel value maximum
-             * @return {void}
-             */
-            Navigator.prototype.render = function (min, max, pxMin, pxMax) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    navigatorWidth,
-                    scrollbarLeft,
-                    scrollbarTop,
-                    scrollbarHeight = navigator.scrollbarHeight,
-                    navigatorSize,
-                    xAxis = navigator.xAxis,
-                    pointRange = xAxis.pointRange || 0,
-                    scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis,
-                    navigatorEnabled = navigator.navigatorEnabled,
-                    zoomedMin,
-                    zoomedMax,
-                    rendered = navigator.rendered,
-                    inverted = chart.inverted,
-                    verb,
-                    newMin,
-                    newMax,
-                    currentRange,
-                    minRange = chart.xAxis[0].minRange,
-                    maxRange = chart.xAxis[0].options.maxRange;
-                // Don't redraw while moving the handles (#4703).
-                if (this.hasDragged && !defined(pxMin)) {
-                    return;
-                }
-                min = correctFloat(min - pointRange / 2);
-                max = correctFloat(max + pointRange / 2);
-                // Don't render the navigator until we have data (#486, #4202, #5172).
-                if (!isNumber(min) || !isNumber(max)) {
-                    // However, if navigator was already rendered, we may need to resize
-                    // it. For example hidden series, but visible navigator (#6022).
-                    if (rendered) {
-                        pxMin = 0;
-                        pxMax = pick(xAxis.width, scrollbarXAxis.width);
-                    }
-                    else {
-                        return;
-                    }
-                }
-                navigator.left = pick(xAxis.left, 
-                // in case of scrollbar only, without navigator
-                chart.plotLeft + scrollbarHeight +
-                    (inverted ? chart.plotWidth : 0));
-                navigator.size = zoomedMax = navigatorSize = pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -
-                    2 * scrollbarHeight);
-                if (inverted) {
-                    navigatorWidth = scrollbarHeight;
-                }
-                else {
-                    navigatorWidth = navigatorSize + 2 * scrollbarHeight;
-                }
-                // Get the pixel position of the handles
-                pxMin = pick(pxMin, xAxis.toPixels(min, true));
-                pxMax = pick(pxMax, xAxis.toPixels(max, true));
-                // Verify (#1851, #2238)
-                if (!isNumber(pxMin) || Math.abs(pxMin) === Infinity) {
-                    pxMin = 0;
-                    pxMax = navigatorWidth;
-                }
-                // Are we below the minRange? (#2618, #6191)
-                newMin = xAxis.toValue(pxMin, true);
-                newMax = xAxis.toValue(pxMax, true);
-                currentRange = Math.abs(correctFloat(newMax - newMin));
-                if (currentRange < minRange) {
-                    if (this.grabbedLeft) {
-                        pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);
-                    }
-                    else if (this.grabbedRight) {
-                        pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);
-                    }
-                }
-                else if (defined(maxRange) &&
-                    correctFloat(currentRange - pointRange) > maxRange) {
-                    if (this.grabbedLeft) {
-                        pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);
-                    }
-                    else if (this.grabbedRight) {
-                        pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);
-                    }
-                }
-                // Handles are allowed to cross, but never exceed the plot area
-                navigator.zoomedMax = clamp(Math.max(pxMin, pxMax), 0, zoomedMax);
-                navigator.zoomedMin = clamp(navigator.fixedWidth ?
-                    navigator.zoomedMax - navigator.fixedWidth :
-                    Math.min(pxMin, pxMax), 0, zoomedMax);
-                navigator.range = navigator.zoomedMax - navigator.zoomedMin;
-                zoomedMax = Math.round(navigator.zoomedMax);
-                zoomedMin = Math.round(navigator.zoomedMin);
-                if (navigatorEnabled) {
-                    navigator.navigatorGroup.attr({
-                        visibility: 'visible'
-                    });
-                    // Place elements
-                    verb = rendered && !navigator.hasDragged ? 'animate' : 'attr';
-                    navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
-                    navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
-                    if (navigator.navigatorOptions.handles.enabled) {
-                        navigator.drawHandle(zoomedMin, 0, inverted, verb);
-                        navigator.drawHandle(zoomedMax, 1, inverted, verb);
-                    }
-                }
-                if (navigator.scrollbar) {
-                    if (inverted) {
-                        scrollbarTop = navigator.top - scrollbarHeight;
-                        scrollbarLeft = navigator.left - scrollbarHeight +
-                            (navigatorEnabled || !scrollbarXAxis.opposite ? 0 :
-                                // Multiple axes has offsets:
-                                (scrollbarXAxis.titleOffset || 0) +
-                                    // Self margin from the axis.title
-                                    scrollbarXAxis.axisTitleMargin);
-                        scrollbarHeight = navigatorSize + 2 * scrollbarHeight;
-                    }
-                    else {
-                        scrollbarTop = navigator.top + (navigatorEnabled ?
-                            navigator.height :
-                            -scrollbarHeight);
-                        scrollbarLeft = navigator.left - scrollbarHeight;
-                    }
-                    // Reposition scrollbar
-                    navigator.scrollbar.position(scrollbarLeft, scrollbarTop, navigatorWidth, scrollbarHeight);
-                    // Keep scale 0-1
-                    navigator.scrollbar.setRange(
-                    // Use real value, not rounded because range can be very small
-                    // (#1716)
-                    navigator.zoomedMin / (navigatorSize || 1), navigator.zoomedMax / (navigatorSize || 1));
-                }
-                navigator.rendered = true;
-            };
-            /**
-             * Set up the mouse and touch events for the navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#addMouseEvents
-             */
-            Navigator.prototype.addMouseEvents = function () {
-                var navigator = this,
-                    chart = navigator.chart,
-                    container = chart.container,
-                    eventsToUnbind = [],
-                    mouseMoveHandler,
-                    mouseUpHandler;
-                /**
-                 * Create mouse events' handlers.
-                 * Make them as separate functions to enable wrapping them:
-                 */
-                navigator.mouseMoveHandler = mouseMoveHandler = function (e) {
-                    navigator.onMouseMove(e);
-                };
-                navigator.mouseUpHandler = mouseUpHandler = function (e) {
-                    navigator.onMouseUp(e);
-                };
-                // Add shades and handles mousedown events
-                eventsToUnbind = navigator.getPartsEvents('mousedown');
-                // Add mouse move and mouseup events. These are bind to doc/container,
-                // because Navigator.grabbedSomething flags are stored in mousedown
-                // events
-                eventsToUnbind.push(addEvent(chart.renderTo, 'mousemove', mouseMoveHandler), addEvent(container.ownerDocument, 'mouseup', mouseUpHandler));
-                // Touch events
-                if (hasTouch) {
-                    eventsToUnbind.push(addEvent(chart.renderTo, 'touchmove', mouseMoveHandler), addEvent(container.ownerDocument, 'touchend', mouseUpHandler));
-                    eventsToUnbind.concat(navigator.getPartsEvents('touchstart'));
-                }
-                navigator.eventsToUnbind = eventsToUnbind;
-                // Data events
-                if (navigator.series && navigator.series[0]) {
-                    eventsToUnbind.push(addEvent(navigator.series[0].xAxis, 'foundExtremes', function () {
-                        chart.navigator.modifyNavigatorAxisExtremes();
-                    }));
-                }
-            };
-            /**
-             * Generate events for handles and masks
-             *
-             * @private
-             * @function Highcharts.Navigator#getPartsEvents
-             *
-             * @param {string} eventName
-             *        Event name handler, 'mousedown' or 'touchstart'
-             *
-             * @return {Array<Function>}
-             *         An array of functions to remove navigator functions from the
-             *         events again.
-             */
-            Navigator.prototype.getPartsEvents = function (eventName) {
-                var navigator = this,
-                    events = [];
-                ['shades', 'handles'].forEach(function (name) {
-                    navigator[name].forEach(function (navigatorItem, index) {
-                        events.push(addEvent(navigatorItem.element, eventName, function (e) {
-                            navigator[name + 'Mousedown'](e, index);
-                        }));
-                    });
-                });
-                return events;
-            };
-            /**
-             * Mousedown on a shaded mask, either:
-             *
-             * - will be stored for future drag&drop
-             *
-             * - will directly shift to a new range
-             *
-             * @private
-             * @function Highcharts.Navigator#shadesMousedown
-             *
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             *
-             * @param {number} index
-             *        Index of a mask in Navigator.shades array
-             */
-            Navigator.prototype.shadesMousedown = function (e, index) {
-                e = this.chart.pointer.normalize(e);
-                var navigator = this,
-                    chart = navigator.chart,
-                    xAxis = navigator.xAxis,
-                    zoomedMin = navigator.zoomedMin,
-                    navigatorPosition = navigator.left,
-                    navigatorSize = navigator.size,
-                    range = navigator.range,
-                    chartX = e.chartX,
-                    fixedMax,
-                    fixedMin,
-                    ext,
-                    left;
-                // For inverted chart, swap some options:
-                if (chart.inverted) {
-                    chartX = e.chartY;
-                    navigatorPosition = navigator.top;
-                }
-                if (index === 1) {
-                    // Store information for drag&drop
-                    navigator.grabbedCenter = chartX;
-                    navigator.fixedWidth = range;
-                    navigator.dragOffset = chartX - zoomedMin;
-                }
-                else {
-                    // Shift the range by clicking on shaded areas
-                    left = chartX - navigatorPosition - range / 2;
-                    if (index === 0) {
-                        left = Math.max(0, left);
-                    }
-                    else if (index === 2 && left + range >= navigatorSize) {
-                        left = navigatorSize - range;
-                        if (navigator.reversedExtremes) {
-                            // #7713
-                            left -= range;
-                            fixedMin = navigator.getUnionExtremes().dataMin;
-                        }
-                        else {
-                            // #2293, #3543
-                            fixedMax = navigator.getUnionExtremes().dataMax;
-                        }
-                    }
-                    if (left !== zoomedMin) { // it has actually moved
-                        navigator.fixedWidth = range; // #1370
-                        ext = xAxis.navigatorAxis.toFixedRange(left, left + range, fixedMin, fixedMax);
-                        if (defined(ext.min)) { // #7411
-                            chart.xAxis[0].setExtremes(Math.min(ext.min, ext.max), Math.max(ext.min, ext.max), true, null, // auto animation
-                            { trigger: 'navigator' });
-                        }
-                    }
-                }
-            };
-            /**
-             * Mousedown on a handle mask.
-             * Will store necessary information for drag&drop.
-             *
-             * @private
-             * @function Highcharts.Navigator#handlesMousedown
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             * @param {number} index
-             *        Index of a handle in Navigator.handles array
-             * @return {void}
-             */
-            Navigator.prototype.handlesMousedown = function (e, index) {
-                e = this.chart.pointer.normalize(e);
-                var navigator = this,
-                    chart = navigator.chart,
-                    baseXAxis = chart.xAxis[0], 
-                    // For reversed axes, min and max are changed,
-                    // so the other extreme should be stored
-                    reverse = navigator.reversedExtremes;
-                if (index === 0) {
-                    // Grab the left handle
-                    navigator.grabbedLeft = true;
-                    navigator.otherHandlePos = navigator.zoomedMax;
-                    navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;
-                }
-                else {
-                    // Grab the right handle
-                    navigator.grabbedRight = true;
-                    navigator.otherHandlePos = navigator.zoomedMin;
-                    navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;
-                }
-                chart.fixedRange = null;
-            };
-            /**
-             * Mouse move event based on x/y mouse position.
-             *
-             * @private
-             * @function Highcharts.Navigator#onMouseMove
-             *
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             */
-            Navigator.prototype.onMouseMove = function (e) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    left = navigator.left,
-                    navigatorSize = navigator.navigatorSize,
-                    range = navigator.range,
-                    dragOffset = navigator.dragOffset,
-                    inverted = chart.inverted,
-                    chartX;
-                // In iOS, a mousemove event with e.pageX === 0 is fired when holding
-                // the finger down in the center of the scrollbar. This should be
-                // ignored.
-                if (!e.touches || e.touches[0].pageX !== 0) { // #4696
-                    e = chart.pointer.normalize(e);
-                    chartX = e.chartX;
-                    // Swap some options for inverted chart
-                    if (inverted) {
-                        left = navigator.top;
-                        chartX = e.chartY;
-                    }
-                    // Drag left handle or top handle
-                    if (navigator.grabbedLeft) {
-                        navigator.hasDragged = true;
-                        navigator.render(0, 0, chartX - left, navigator.otherHandlePos);
-                        // Drag right handle or bottom handle
-                    }
-                    else if (navigator.grabbedRight) {
-                        navigator.hasDragged = true;
-                        navigator.render(0, 0, navigator.otherHandlePos, chartX - left);
-                        // Drag scrollbar or open area in navigator
-                    }
-                    else if (navigator.grabbedCenter) {
-                        navigator.hasDragged = true;
-                        if (chartX < dragOffset) { // outside left
-                            chartX = dragOffset;
-                            // outside right
-                        }
-                        else if (chartX >
-                            navigatorSize + dragOffset - range) {
-                            chartX = navigatorSize + dragOffset - range;
-                        }
-                        navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);
-                    }
-                    if (navigator.hasDragged &&
-                        navigator.scrollbar &&
-                        pick(navigator.scrollbar.options.liveRedraw, 
-                        // By default, don't run live redraw on VML, on touch
-                        // devices or if the chart is in boost.
-                        H.svg && !isTouchDevice && !this.chart.isBoosting)) {
-                        e.DOMType = e.type; // DOMType is for IE8
-                        setTimeout(function () {
-                            navigator.onMouseUp(e);
-                        }, 0);
-                    }
-                }
-            };
-            /**
-             * Mouse up event based on x/y mouse position.
-             *
-             * @private
-             * @function Highcharts.Navigator#onMouseUp
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             * @return {void}
-             */
-            Navigator.prototype.onMouseUp = function (e) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    xAxis = navigator.xAxis,
-                    scrollbar = navigator.scrollbar,
-                    DOMEvent = e.DOMEvent || e,
-                    inverted = chart.inverted,
-                    verb = navigator.rendered && !navigator.hasDragged ?
-                        'animate' : 'attr',
-                    zoomedMax,
-                    zoomedMin,
-                    unionExtremes,
-                    fixedMin,
-                    fixedMax,
-                    ext;
-                if (
-                // MouseUp is called for both, navigator and scrollbar (that order),
-                // which causes calling afterSetExtremes twice. Prevent first call
-                // by checking if scrollbar is going to set new extremes (#6334)
-                (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||
-                    e.trigger === 'scrollbar') {
-                    unionExtremes = navigator.getUnionExtremes();
-                    // When dragging one handle, make sure the other one doesn't change
-                    if (navigator.zoomedMin === navigator.otherHandlePos) {
-                        fixedMin = navigator.fixedExtreme;
-                    }
-                    else if (navigator.zoomedMax === navigator.otherHandlePos) {
-                        fixedMax = navigator.fixedExtreme;
-                    }
-                    // Snap to right edge (#4076)
-                    if (navigator.zoomedMax === navigator.size) {
-                        fixedMax = navigator.reversedExtremes ?
-                            unionExtremes.dataMin :
-                            unionExtremes.dataMax;
-                    }
-                    // Snap to left edge (#7576)
-                    if (navigator.zoomedMin === 0) {
-                        fixedMin = navigator.reversedExtremes ?
-                            unionExtremes.dataMax :
-                            unionExtremes.dataMin;
-                    }
-                    ext = xAxis.navigatorAxis.toFixedRange(navigator.zoomedMin, navigator.zoomedMax, fixedMin, fixedMax);
-                    if (defined(ext.min)) {
-                        chart.xAxis[0].setExtremes(Math.min(ext.min, ext.max), Math.max(ext.min, ext.max), true, 
-                        // Run animation when clicking buttons, scrollbar track etc,
-                        // but not when dragging handles or scrollbar
-                        navigator.hasDragged ? false : null, {
-                            trigger: 'navigator',
-                            triggerOp: 'navigator-drag',
-                            DOMEvent: DOMEvent // #1838
-                        });
-                    }
-                }
-                if (e.DOMType !== 'mousemove' &&
-                    e.DOMType !== 'touchmove') {
-                    navigator.grabbedLeft = navigator.grabbedRight =
-                        navigator.grabbedCenter = navigator.fixedWidth =
-                            navigator.fixedExtreme = navigator.otherHandlePos =
-                                navigator.hasDragged = navigator.dragOffset = null;
-                }
-                // Update position of navigator shades, outline and handles (#12573)
-                if (navigator.navigatorEnabled &&
-                    isNumber(navigator.zoomedMin) &&
-                    isNumber(navigator.zoomedMax)) {
-                    zoomedMin = Math.round(navigator.zoomedMin);
-                    zoomedMax = Math.round(navigator.zoomedMax);
-                    if (navigator.shades) {
-                        navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
-                    }
-                    if (navigator.outline) {
-                        navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
-                    }
-                    if (navigator.navigatorOptions.handles.enabled &&
-                        Object.keys(navigator.handles).length ===
-                            navigator.handles.length) {
-                        navigator.drawHandle(zoomedMin, 0, inverted, verb);
-                        navigator.drawHandle(zoomedMax, 1, inverted, verb);
-                    }
-                }
-            };
-            /**
-             * Removes the event handlers attached previously with addEvents.
-             *
-             * @private
-             * @function Highcharts.Navigator#removeEvents
-             * @return {void}
-             */
-            Navigator.prototype.removeEvents = function () {
-                if (this.eventsToUnbind) {
-                    this.eventsToUnbind.forEach(function (unbind) {
-                        unbind();
-                    });
-                    this.eventsToUnbind = void 0;
-                }
-                this.removeBaseSeriesEvents();
-            };
-            /**
-             * Remove data events.
-             *
-             * @private
-             * @function Highcharts.Navigator#removeBaseSeriesEvents
-             * @return {void}
-             */
-            Navigator.prototype.removeBaseSeriesEvents = function () {
-                var baseSeries = this.baseSeries || [];
-                if (this.navigatorEnabled && baseSeries[0]) {
-                    if (this.navigatorOptions.adaptToUpdatedData !== false) {
-                        baseSeries.forEach(function (series) {
-                            removeEvent(series, 'updatedData', this.updatedDataHandler);
-                        }, this);
-                    }
-                    // We only listen for extremes-events on the first baseSeries
-                    if (baseSeries[0].xAxis) {
-                        removeEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);
-                    }
-                }
-            };
-            /**
-             * Initialize the Navigator object
-             *
-             * @private
-             * @function Highcharts.Navigator#init
-             *
-             * @param {Highcharts.Chart} chart
-             */
-            Navigator.prototype.init = function (chart) {
-                var chartOptions = chart.options,
-                    navigatorOptions = chartOptions.navigator,
-                    navigatorEnabled = navigatorOptions.enabled,
-                    scrollbarOptions = chartOptions.scrollbar,
-                    scrollbarEnabled = scrollbarOptions.enabled,
-                    height = navigatorEnabled ? navigatorOptions.height : 0,
-                    scrollbarHeight = scrollbarEnabled ?
-                        scrollbarOptions.height :
-                        0;
-                this.handles = [];
-                this.shades = [];
-                this.chart = chart;
-                this.setBaseSeries();
-                this.height = height;
-                this.scrollbarHeight = scrollbarHeight;
-                this.scrollbarEnabled = scrollbarEnabled;
-                this.navigatorEnabled = navigatorEnabled;
-                this.navigatorOptions = navigatorOptions;
-                this.scrollbarOptions = scrollbarOptions;
-                this.outlineHeight = height + scrollbarHeight;
-                this.opposite = pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262
-                var navigator = this,
-                    baseSeries = navigator.baseSeries,
-                    xAxisIndex = chart.xAxis.length,
-                    yAxisIndex = chart.yAxis.length,
-                    baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||
-                        chart.xAxis[0] || { options: {} };
-                chart.isDirtyBox = true;
-                if (navigator.navigatorEnabled) {
-                    // an x axis is required for scrollbar also
-                    navigator.xAxis = new Axis(chart, merge({
-                        // inherit base xAxis' break and ordinal options
-                        breaks: baseXaxis.options.breaks,
-                        ordinal: baseXaxis.options.ordinal
-                    }, navigatorOptions.xAxis, {
-                        id: 'navigator-x-axis',
-                        yAxis: 'navigator-y-axis',
-                        isX: true,
-                        type: 'datetime',
-                        index: xAxisIndex,
-                        isInternal: true,
-                        offset: 0,
-                        keepOrdinalPadding: true,
-                        startOnTick: false,
-                        endOnTick: false,
-                        minPadding: 0,
-                        maxPadding: 0,
-                        zoomEnabled: false
-                    }, chart.inverted ? {
-                        offsets: [scrollbarHeight, 0, -scrollbarHeight, 0],
-                        width: height
-                    } : {
-                        offsets: [0, -scrollbarHeight, 0, scrollbarHeight],
-                        height: height
-                    }));
-                    navigator.yAxis = new Axis(chart, merge(navigatorOptions.yAxis, {
-                        id: 'navigator-y-axis',
-                        alignTicks: false,
-                        offset: 0,
-                        index: yAxisIndex,
-                        isInternal: true,
-                        reversed: pick((navigatorOptions.yAxis && navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false),
-                        zoomEnabled: false
-                    }, chart.inverted ? {
-                        width: height
-                    } : {
-                        height: height
-                    }));
-                    // If we have a base series, initialize the navigator series
-                    if (baseSeries || navigatorOptions.series.data) {
-                        navigator.updateNavigatorSeries(false);
-                        // If not, set up an event to listen for added series
-                    }
-                    else if (chart.series.length === 0) {
-                        navigator.unbindRedraw = addEvent(chart, 'beforeRedraw', function () {
-                            // We've got one, now add it as base
-                            if (chart.series.length > 0 && !navigator.series) {
-                                navigator.setBaseSeries();
-                                navigator.unbindRedraw(); // reset
-                            }
-                        });
-                    }
-                    navigator.reversedExtremes = (chart.inverted && !navigator.xAxis.reversed) || (!chart.inverted && navigator.xAxis.reversed);
-                    // Render items, so we can bind events to them:
-                    navigator.renderElements();
-                    // Add mouse events
-                    navigator.addMouseEvents();
-                    // in case of scrollbar only, fake an x axis to get translation
-                }
-                else {
-                    navigator.xAxis = {
-                        chart: chart,
-                        navigatorAxis: {
-                            fake: true
-                        },
-                        translate: function (value, reverse) {
-                            var axis = chart.xAxis[0], ext = axis.getExtremes(), scrollTrackWidth = axis.len - 2 * scrollbarHeight, min = numExt('min', axis.options.min, ext.dataMin), valueRange = numExt('max', axis.options.max, ext.dataMax) - min;
-                            return reverse ?
-                                // from pixel to value
-                                (value * valueRange / scrollTrackWidth) + min :
-                                // from value to pixel
-                                scrollTrackWidth * (value - min) / valueRange;
-                        },
-                        toPixels: function (value) {
-                            return this.translate(value);
-                        },
-                        toValue: function (value) {
-                            return this.translate(value, true);
-                        }
-                    };
-                    navigator.xAxis.navigatorAxis.axis = navigator.xAxis;
-                    navigator.xAxis.navigatorAxis.toFixedRange = (NavigatorAxis.AdditionsClass.prototype.toFixedRange.bind(navigator.xAxis.navigatorAxis));
-                }
-                // Initialize the scrollbar
-                if (chart.options.scrollbar.enabled) {
-                    chart.scrollbar = navigator.scrollbar = new Scrollbar(chart.renderer, merge(chart.options.scrollbar, {
-                        margin: navigator.navigatorEnabled ? 0 : 10,
-                        vertical: chart.inverted
-                    }), chart);
-                    addEvent(navigator.scrollbar, 'changed', function (e) {
-                        var range = navigator.size,
-                            to = range * this.to,
-                            from = range * this.from;
-                        navigator.hasDragged = navigator.scrollbar.hasDragged;
-                        navigator.render(0, 0, from, to);
-                        if (chart.options.scrollbar.liveRedraw ||
-                            (e.DOMType !== 'mousemove' &&
-                                e.DOMType !== 'touchmove')) {
-                            setTimeout(function () {
-                                navigator.onMouseUp(e);
-                            });
-                        }
-                    });
-                }
-                // Add data events
-                navigator.addBaseSeriesEvents();
-                // Add redraw events
-                navigator.addChartEvents();
-            };
-            /**
-             * Get the union data extremes of the chart - the outer data extremes of the
-             * base X axis and the navigator axis.
-             *
-             * @private
-             * @function Highcharts.Navigator#getUnionExtremes
-             * @param {boolean} [returnFalseOnNoBaseSeries]
-             *        as the param says.
-             * @return {Highcharts.Dictionary<(number|undefined)>|undefined}
-             */
-            Navigator.prototype.getUnionExtremes = function (returnFalseOnNoBaseSeries) {
-                var baseAxis = this.chart.xAxis[0],
-                    navAxis = this.xAxis,
-                    navAxisOptions = navAxis.options,
-                    baseAxisOptions = baseAxis.options,
-                    ret;
-                if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {
-                    ret = {
-                        dataMin: pick(// #4053
-                        navAxisOptions && navAxisOptions.min, numExt('min', baseAxisOptions.min, baseAxis.dataMin, navAxis.dataMin, navAxis.min)),
-                        dataMax: pick(navAxisOptions && navAxisOptions.max, numExt('max', baseAxisOptions.max, baseAxis.dataMax, navAxis.dataMax, navAxis.max))
-                    };
-                }
-                return ret;
-            };
-            /**
-             * Set the base series and update the navigator series from this. With a bit
-             * of modification we should be able to make this an API method to be called
-             * from the outside
-             *
-             * @private
-             * @function Highcharts.Navigator#setBaseSeries
-             * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]
-             *        Additional series options for a navigator
-             * @param {boolean} [redraw]
-             *        Whether to redraw after update.
-             * @return {void}
-             */
-            Navigator.prototype.setBaseSeries = function (baseSeriesOptions, redraw) {
-                var chart = this.chart,
-                    baseSeries = this.baseSeries = [];
-                baseSeriesOptions = (baseSeriesOptions ||
-                    chart.options && chart.options.navigator.baseSeries ||
-                    (chart.series.length ?
-                        // Find the first non-navigator series (#8430)
-                        find(chart.series, function (s) {
-                            return !s.options.isInternal;
-                        }).index :
-                        0));
-                // Iterate through series and add the ones that should be shown in
-                // navigator.
-                (chart.series || []).forEach(function (series, i) {
-                    if (
-                    // Don't include existing nav series
-                    !series.options.isInternal &&
-                        (series.options.showInNavigator ||
-                            (i === baseSeriesOptions ||
-                                series.options.id === baseSeriesOptions) &&
-                                series.options.showInNavigator !== false)) {
-                        baseSeries.push(series);
-                    }
-                });
-                // When run after render, this.xAxis already exists
-                if (this.xAxis && !this.xAxis.navigatorAxis.fake) {
-                    this.updateNavigatorSeries(true, redraw);
-                }
-            };
-            /**
-             * Update series in the navigator from baseSeries, adding new if does not
-             * exist.
-             *
-             * @private
-             * @function Highcharts.Navigator.updateNavigatorSeries
-             * @param {boolean} addEvents
-             * @param {boolean} [redraw]
-             * @return {void}
-             */
-            Navigator.prototype.updateNavigatorSeries = function (addEvents, redraw) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    baseSeries = navigator.baseSeries,
-                    baseOptions,
-                    mergedNavSeriesOptions,
-                    chartNavigatorSeriesOptions = navigator.navigatorOptions.series,
-                    baseNavigatorOptions,
-                    navSeriesMixin = {
-                        enableMouseTracking: false,
-                        index: null,
-                        linkedTo: null,
-                        group: 'nav',
-                        padXAxis: false,
-                        xAxis: 'navigator-x-axis',
-                        yAxis: 'navigator-y-axis',
-                        showInLegend: false,
-                        stacking: void 0,
-                        isInternal: true,
-                        states: {
-                            inactive: {
-                                opacity: 1
-                            }
-                        }
-                    }, 
-                    // Remove navigator series that are no longer in the baseSeries
-                    navigatorSeries = navigator.series =
-                        (navigator.series || []).filter(function (navSeries) {
-                            var base = navSeries.baseSeries;
-                        if (baseSeries.indexOf(base) < 0) { // Not in array
-                            // If there is still a base series connected to this
-                            // series, remove event handler and reference.
-                            if (base) {
-                                removeEvent(base, 'updatedData', navigator.updatedDataHandler);
-                                delete base.navigatorSeries;
-                            }
-                            // Kill the nav series. It may already have been
-                            // destroyed (#8715).
-                            if (navSeries.chart) {
-                                navSeries.destroy();
-                            }
-                            return false;
-                        }
-                        return true;
-                    });
-                // Go through each base series and merge the options to create new
-                // series
-                if (baseSeries && baseSeries.length) {
-                    baseSeries.forEach(function eachBaseSeries(base) {
-                        var linkedNavSeries = base.navigatorSeries,
-                            userNavOptions = extend(
-                            // Grab color and visibility from base as default
-                            {
-                                color: base.color,
-                                visible: base.visible
-                            }, !isArray(chartNavigatorSeriesOptions) ?
-                                chartNavigatorSeriesOptions :
-                                defaultOptions.navigator.series);
-                        // Don't update if the series exists in nav and we have disabled
-                        // adaptToUpdatedData.
-                        if (linkedNavSeries &&
-                            navigator.navigatorOptions.adaptToUpdatedData === false) {
-                            return;
-                        }
-                        navSeriesMixin.name = 'Navigator ' + baseSeries.length;
-                        baseOptions = base.options || {};
-                        baseNavigatorOptions = baseOptions.navigatorOptions || {};
-                        mergedNavSeriesOptions = merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);
-                        // Once nav series type is resolved, pick correct pointRange
-                        mergedNavSeriesOptions.pointRange = pick(
-                        // Stricte set pointRange in options
-                        userNavOptions.pointRange, baseNavigatorOptions.pointRange, 
-                        // Fallback to default values, e.g. `null` for column
-                        defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line'].pointRange);
-                        // Merge data separately. Do a slice to avoid mutating the
-                        // navigator options from base series (#4923).
-                        var navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;
-                        navigator.hasNavigatorData =
-                            navigator.hasNavigatorData || !!navigatorSeriesData;
-                        mergedNavSeriesOptions.data =
-                            navigatorSeriesData ||
-                                baseOptions.data && baseOptions.data.slice(0);
-                        // Update or add the series
-                        if (linkedNavSeries && linkedNavSeries.options) {
-                            linkedNavSeries.update(mergedNavSeriesOptions, redraw);
-                        }
-                        else {
-                            base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);
-                            base.navigatorSeries.baseSeries = base; // Store ref
-                            navigatorSeries.push(base.navigatorSeries);
-                        }
-                    });
-                }
-                // If user has defined data (and no base series) or explicitly defined
-                // navigator.series as an array, we create these series on top of any
-                // base series.
-                if (chartNavigatorSeriesOptions.data &&
-                    !(baseSeries && baseSeries.length) ||
-                    isArray(chartNavigatorSeriesOptions)) {
-                    navigator.hasNavigatorData = false;
-                    // Allow navigator.series to be an array
-                    chartNavigatorSeriesOptions =
-                        splat(chartNavigatorSeriesOptions);
-                    chartNavigatorSeriesOptions.forEach(function (userSeriesOptions, i) {
-                        navSeriesMixin.name =
-                            'Navigator ' + (navigatorSeries.length + 1);
-                        mergedNavSeriesOptions = merge(defaultOptions.navigator.series, {
-                            // Since we don't have a base series to pull color from,
-                            // try to fake it by using color from series with same
-                            // index. Otherwise pull from the colors array. We need
-                            // an explicit color as otherwise updates will increment
-                            // color counter and we'll get a new color for each
-                            // update of the nav series.
-                            color: chart.series[i] &&
-                                !chart.series[i].options.isInternal &&
-                                chart.series[i].color ||
-                                chart.options.colors[i] ||
-                                chart.options.colors[0]
-                        }, navSeriesMixin, userSeriesOptions);
-                        mergedNavSeriesOptions.data = userSeriesOptions.data;
-                        if (mergedNavSeriesOptions.data) {
-                            navigator.hasNavigatorData = true;
-                            navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));
-                        }
-                    });
-                }
-                if (addEvents) {
-                    this.addBaseSeriesEvents();
-                }
-            };
-            /**
-             * Add data events.
-             * For example when main series is updated we need to recalculate extremes
-             *
-             * @private
-             * @function Highcharts.Navigator#addBaseSeriesEvent
-             * @return {void}
-             */
-            Navigator.prototype.addBaseSeriesEvents = function () {
-                var navigator = this,
-                    baseSeries = navigator.baseSeries || [];
-                // Bind modified extremes event to first base's xAxis only.
-                // In event of > 1 base-xAxes, the navigator will ignore those.
-                // Adding this multiple times to the same axis is no problem, as
-                // duplicates should be discarded by the browser.
-                if (baseSeries[0] && baseSeries[0].xAxis) {
-                    addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);
-                }
-                baseSeries.forEach(function (base) {
-                    // Link base series show/hide to navigator series visibility
-                    addEvent(base, 'show', function () {
-                        if (this.navigatorSeries) {
-                            this.navigatorSeries.setVisible(true, false);
-                        }
-                    });
-                    addEvent(base, 'hide', function () {
-                        if (this.navigatorSeries) {
-                            this.navigatorSeries.setVisible(false, false);
-                        }
-                    });
-                    // Respond to updated data in the base series, unless explicitily
-                    // not adapting to data changes.
-                    if (this.navigatorOptions.adaptToUpdatedData !== false) {
-                        if (base.xAxis) {
-                            addEvent(base, 'updatedData', this.updatedDataHandler);
-                        }
-                    }
-                    // Handle series removal
-                    addEvent(base, 'remove', function () {
-                        if (this.navigatorSeries) {
-                            erase(navigator.series, this.navigatorSeries);
-                            if (defined(this.navigatorSeries.options)) {
-                                this.navigatorSeries.remove(false);
-                            }
-                            delete this.navigatorSeries;
-                        }
-                    });
-                }, this);
-            };
-            /**
-             * Get minimum from all base series connected to the navigator
-             * @private
-             * @param  {number} currentSeriesMin
-             *         Minium from the current series
-             * @return {number} Minimum from all series
-             */
-            Navigator.prototype.getBaseSeriesMin = function (currentSeriesMin) {
-                return this.baseSeries.reduce(function (min, series) {
-                    // (#10193)
-                    return Math.min(min, series.xData ? series.xData[0] : min);
-                }, currentSeriesMin);
-            };
-            /**
-             * Set the navigator x axis extremes to reflect the total. The navigator
-             * extremes should always be the extremes of the union of all series in the
-             * chart as well as the navigator series.
-             *
-             * @private
-             * @function Highcharts.Navigator#modifyNavigatorAxisExtremes
-             */
-            Navigator.prototype.modifyNavigatorAxisExtremes = function () {
-                var xAxis = this.xAxis,
-                    unionExtremes;
-                if (typeof xAxis.getExtremes !== 'undefined') {
-                    unionExtremes = this.getUnionExtremes(true);
-                    if (unionExtremes &&
-                        (unionExtremes.dataMin !== xAxis.min ||
-                            unionExtremes.dataMax !== xAxis.max)) {
-                        xAxis.min = unionExtremes.dataMin;
-                        xAxis.max = unionExtremes.dataMax;
-                    }
-                }
-            };
-            /**
-             * Hook to modify the base axis extremes with information from the Navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#modifyBaseAxisExtremes
-             */
-            Navigator.prototype.modifyBaseAxisExtremes = function () {
-                var baseXAxis = this,
-                    navigator = baseXAxis.chart.navigator,
-                    baseExtremes = baseXAxis.getExtremes(),
-                    baseMin = baseExtremes.min,
-                    baseMax = baseExtremes.max,
-                    baseDataMin = baseExtremes.dataMin,
-                    baseDataMax = baseExtremes.dataMax,
-                    range = baseMax - baseMin,
-                    stickToMin = navigator.stickToMin,
-                    stickToMax = navigator.stickToMax,
-                    overscroll = pick(baseXAxis.options.overscroll, 0),
-                    newMax,
-                    newMin,
-                    navigatorSeries = navigator.series && navigator.series[0],
-                    hasSetExtremes = !!baseXAxis.setExtremes, 
-                    // When the extremes have been set by range selector button, don't
-                    // stick to min or max. The range selector buttons will handle the
-                    // extremes. (#5489)
-                    unmutable = baseXAxis.eventArgs &&
-                        baseXAxis.eventArgs.trigger === 'rangeSelectorButton';
-                if (!unmutable) {
-                    // If the zoomed range is already at the min, move it to the right
-                    // as new data comes in
-                    if (stickToMin) {
-                        newMin = baseDataMin;
-                        newMax = newMin + range;
-                    }
-                    // If the zoomed range is already at the max, move it to the right
-                    // as new data comes in
-                    if (stickToMax) {
-                        newMax = baseDataMax + overscroll;
-                        // If stickToMin is true, the new min value is set above
-                        if (!stickToMin) {
-                            newMin = Math.max(baseDataMin, // don't go below data extremes (#13184)
-                            newMax - range, navigator.getBaseSeriesMin(navigatorSeries && navigatorSeries.xData ?
-                                navigatorSeries.xData[0] :
-                                -Number.MAX_VALUE));
-                        }
-                    }
-                    // Update the extremes
-                    if (hasSetExtremes && (stickToMin || stickToMax)) {
-                        if (isNumber(newMin)) {
-                            baseXAxis.min = baseXAxis.userMin = newMin;
-                            baseXAxis.max = baseXAxis.userMax = newMax;
-                        }
-                    }
-                }
-                // Reset
-                navigator.stickToMin =
-                    navigator.stickToMax = null;
-            };
-            /**
-             * Handler for updated data on the base series. When data is modified, the
-             * navigator series must reflect it. This is called from the Chart.redraw
-             * function before axis and series extremes are computed.
-             *
-             * @private
-             * @function Highcharts.Navigator#updateDataHandler
-             */
-            Navigator.prototype.updatedDataHandler = function () {
-                var navigator = this.chart.navigator,
-                    baseSeries = this,
-                    navigatorSeries = this.navigatorSeries,
-                    xDataMin = navigator.getBaseSeriesMin(baseSeries.xData[0]);
-                // If the scrollbar is scrolled all the way to the right, keep right as
-                // new data  comes in.
-                navigator.stickToMax = navigator.reversedExtremes ?
-                    Math.round(navigator.zoomedMin) === 0 :
-                    Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
-                // Detect whether the zoomed area should stick to the minimum or
-                // maximum. If the current axis minimum falls outside the new updated
-                // dataset, we must adjust.
-                navigator.stickToMin = isNumber(baseSeries.xAxis.min) &&
-                    (baseSeries.xAxis.min <= xDataMin) &&
-                    (!this.chart.fixedRange || !navigator.stickToMax);
-                // Set the navigator series data to the new data of the base series
-                if (navigatorSeries && !navigator.hasNavigatorData) {
-                    navigatorSeries.options.pointStart = baseSeries.xData[0];
-                    navigatorSeries.setData(baseSeries.options.data, false, null, false); // #5414
-                }
-            };
-            /**
-             * Add chart events, like redrawing navigator, when chart requires that.
-             *
-             * @private
-             * @function Highcharts.Navigator#addChartEvents
-             * @return {void}
-             */
-            Navigator.prototype.addChartEvents = function () {
-                if (!this.eventsToUnbind) {
-                    this.eventsToUnbind = [];
-                }
-                this.eventsToUnbind.push(
-                // Move the scrollbar after redraw, like after data updata even if
-                // axes don't redraw
-                addEvent(this.chart, 'redraw', function () {
-                    var navigator = this.navigator,
-                        xAxis = navigator && (navigator.baseSeries &&
-                            navigator.baseSeries[0] &&
-                            navigator.baseSeries[0].xAxis ||
-                            this.xAxis[0]); // #5709, #13114
-                        if (xAxis) {
-                            navigator.render(xAxis.min,
-                        xAxis.max);
-                    }
-                }), 
-                // Make room for the navigator, can be placed around the chart:
-                addEvent(this.chart, 'getMargins', function () {
-                    var chart = this,
-                        navigator = chart.navigator,
-                        marginName = navigator.opposite ?
-                            'plotTop' : 'marginBottom';
-                    if (chart.inverted) {
-                        marginName = navigator.opposite ?
-                            'marginRight' : 'plotLeft';
-                    }
-                    chart[marginName] =
-                        (chart[marginName] || 0) + (navigator.navigatorEnabled || !chart.inverted ?
-                            navigator.outlineHeight :
-                            0) + navigator.navigatorOptions.margin;
-                }));
-            };
-            /**
-             * Destroys allocated elements.
-             *
-             * @private
-             * @function Highcharts.Navigator#destroy
-             */
-            Navigator.prototype.destroy = function () {
-                // Disconnect events added in addEvents
-                this.removeEvents();
-                if (this.xAxis) {
-                    erase(this.chart.xAxis, this.xAxis);
-                    erase(this.chart.axes, this.xAxis);
-                }
-                if (this.yAxis) {
-                    erase(this.chart.yAxis, this.yAxis);
-                    erase(this.chart.axes, this.yAxis);
-                }
-                // Destroy series
-                (this.series || []).forEach(function (s) {
-                    if (s.destroy) {
-                        s.destroy();
-                    }
-                });
-                // Destroy properties
-                [
-                    'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
-                    'scrollbarRifles', 'scrollbarGroup', 'scrollbar', 'navigatorGroup',
-                    'rendered'
-                ].forEach(function (prop) {
-                    if (this[prop] && this[prop].destroy) {
-                        this[prop].destroy();
-                    }
-                    this[prop] = null;
-                }, this);
-                // Destroy elements in collection
-                [this.handles].forEach(function (coll) {
-                    destroyObjectProperties(coll);
-                }, this);
-            };
-            return Navigator;
-        }());
-        // End of prototype
-        if (!H.Navigator) {
-            H.Navigator = Navigator;
-            NavigatorAxis.compose(Axis);
-            // For Stock charts. For x only zooming, do not to create the zoom button
-            // because X axis zooming is already allowed by the Navigator and Range
-            // selector. (#9285)
-            addEvent(Chart, 'beforeShowResetZoom', function () {
-                var chartOptions = this.options,
-                    navigator = chartOptions.navigator,
-                    rangeSelector = chartOptions.rangeSelector;
-                if (((navigator && navigator.enabled) ||
-                    (rangeSelector && rangeSelector.enabled)) &&
-                    ((!isTouchDevice && chartOptions.chart.zoomType === 'x') ||
-                        (isTouchDevice && chartOptions.chart.pinchType === 'x'))) {
-                    return false;
-                }
-            });
-            // Initialize navigator for stock charts
-            addEvent(Chart, 'beforeRender', function () {
-                var options = this.options;
-                if (options.navigator.enabled ||
-                    options.scrollbar.enabled) {
-                    this.scroller = this.navigator = new Navigator(this);
-                }
-            });
-            // For stock charts, extend the Chart.setChartSize method so that we can set
-            // the final top position of the navigator once the height of the chart,
-            // including the legend, is determined. #367. We can't use Chart.getMargins,
-            // because labels offsets are not calculated yet.
-            addEvent(Chart, 'afterSetChartSize', function () {
-                var legend = this.legend,
-                    navigator = this.navigator,
-                    scrollbarHeight,
-                    legendOptions,
-                    xAxis,
-                    yAxis;
-                if (navigator) {
-                    legendOptions = legend && legend.options;
-                    xAxis = navigator.xAxis;
-                    yAxis = navigator.yAxis;
-                    scrollbarHeight = navigator.scrollbarHeight;
-                    // Compute the top position
-                    if (this.inverted) {
-                        navigator.left = navigator.opposite ?
-                            this.chartWidth - scrollbarHeight -
-                                navigator.height :
-                            this.spacing[3] + scrollbarHeight;
-                        navigator.top = this.plotTop + scrollbarHeight;
-                    }
-                    else {
-                        navigator.left = this.plotLeft + scrollbarHeight;
-                        navigator.top = navigator.navigatorOptions.top ||
-                            this.chartHeight -
-                                navigator.height -
-                                scrollbarHeight -
-                                this.spacing[2] -
-                                (this.rangeSelector && this.extraBottomMargin ?
-                                    this.rangeSelector.getHeight() :
-                                    0) -
-                                ((legendOptions &&
-                                    legendOptions.verticalAlign === 'bottom' &&
-                                    legendOptions.layout !== 'proximate' && // #13392
-                                    legendOptions.enabled &&
-                                    !legendOptions.floating) ?
-                                    legend.legendHeight +
-                                        pick(legendOptions.margin, 10) :
-                                    0) -
-                                (this.titleOffset ? this.titleOffset[2] : 0);
-                    }
-                    if (xAxis && yAxis) { // false if navigator is disabled (#904)
-                        if (this.inverted) {
-                            xAxis.options.left = yAxis.options.left = navigator.left;
-                        }
-                        else {
-                            xAxis.options.top = yAxis.options.top = navigator.top;
-                        }
-                        xAxis.setAxisSize();
-                        yAxis.setAxisSize();
-                    }
-                }
-            });
-            // Merge options, if no scrolling exists yet
-            addEvent(Chart, 'update', function (e) {
-                var navigatorOptions = (e.options.navigator || {}),
-                    scrollbarOptions = (e.options.scrollbar || {});
-                if (!this.navigator && !this.scroller &&
-                    (navigatorOptions.enabled || scrollbarOptions.enabled)) {
-                    merge(true, this.options.navigator, navigatorOptions);
-                    merge(true, this.options.scrollbar, scrollbarOptions);
-                    delete e.options.navigator;
-                    delete e.options.scrollbar;
-                }
-            });
-            // Initialize navigator, if no scrolling exists yet
-            addEvent(Chart, 'afterUpdate', function (event) {
-                if (!this.navigator && !this.scroller &&
-                    (this.options.navigator.enabled ||
-                        this.options.scrollbar.enabled)) {
-                    this.scroller = this.navigator = new Navigator(this);
-                    if (pick(event.redraw, true)) {
-                        this.redraw(event.animation); // #7067
-                    }
-                }
-            });
-            // Handle adding new series
-            addEvent(Chart, 'afterAddSeries', function () {
-                if (this.navigator) {
-                    // Recompute which series should be shown in navigator, and add them
-                    this.navigator.setBaseSeries(null, false);
-                }
-            });
-            // Handle updating series
-            addEvent(LineSeries, 'afterUpdate', function () {
-                if (this.chart.navigator && !this.options.isInternal) {
-                    this.chart.navigator.setBaseSeries(null, false);
-                }
-            });
-            Chart.prototype.callbacks.push(function (chart) {
-                var extremes,
-                    navigator = chart.navigator;
-                // Initialize the navigator
-                if (navigator && chart.xAxis[0]) {
-                    extremes = chart.xAxis[0].getExtremes();
-                    navigator.render(extremes.min, extremes.max);
-                }
-            });
-        }
+          });
+          // Destroy properties
+          [
+            "series",
+            "xAxis",
+            "yAxis",
+            "shades",
+            "outline",
+            "scrollbarTrack",
+            "scrollbarRifles",
+            "scrollbarGroup",
+            "scrollbar",
+            "navigatorGroup",
+            "rendered",
+          ].forEach(function (prop) {
+            if (this[prop] && this[prop].destroy) {
+              this[prop].destroy();
+            }
+            this[prop] = null;
+          }, this);
+          // Destroy elements in collection
+          [this.handles].forEach(function (coll) {
+            destroyObjectProperties(coll);
+          }, this);
+        };
+        return Navigator;
+      })();
+      // End of prototype
+      if (!H.Navigator) {
         H.Navigator = Navigator;
+        NavigatorAxis.compose(Axis);
+        // For Stock charts. For x only zooming, do not to create the zoom button
+        // because X axis zooming is already allowed by the Navigator and Range
+        // selector. (#9285)
+        addEvent(Chart, "beforeShowResetZoom", function () {
+          var chartOptions = this.options,
+            navigator = chartOptions.navigator,
+            rangeSelector = chartOptions.rangeSelector;
+          if (
+            ((navigator && navigator.enabled) ||
+              (rangeSelector && rangeSelector.enabled)) &&
+            ((!isTouchDevice && chartOptions.chart.zoomType === "x") ||
+              (isTouchDevice && chartOptions.chart.pinchType === "x"))
+          ) {
+            return false;
+          }
+        });
+        // Initialize navigator for stock charts
+        addEvent(Chart, "beforeRender", function () {
+          var options = this.options;
+          if (options.navigator.enabled || options.scrollbar.enabled) {
+            this.scroller = this.navigator = new Navigator(this);
+          }
+        });
+        // For stock charts, extend the Chart.setChartSize method so that we can set
+        // the final top position of the navigator once the height of the chart,
+        // including the legend, is determined. #367. We can't use Chart.getMargins,
+        // because labels offsets are not calculated yet.
+        addEvent(Chart, "afterSetChartSize", function () {
+          var legend = this.legend,
+            navigator = this.navigator,
+            scrollbarHeight,
+            legendOptions,
+            xAxis,
+            yAxis;
+          if (navigator) {
+            legendOptions = legend && legend.options;
+            xAxis = navigator.xAxis;
+            yAxis = navigator.yAxis;
+            scrollbarHeight = navigator.scrollbarHeight;
+            // Compute the top position
+            if (this.inverted) {
+              navigator.left = navigator.opposite
+                ? this.chartWidth - scrollbarHeight - navigator.height
+                : this.spacing[3] + scrollbarHeight;
+              navigator.top = this.plotTop + scrollbarHeight;
+            } else {
+              navigator.left = this.plotLeft + scrollbarHeight;
+              navigator.top =
+                navigator.navigatorOptions.top ||
+                this.chartHeight -
+                  navigator.height -
+                  scrollbarHeight -
+                  this.spacing[2] -
+                  (this.rangeSelector && this.extraBottomMargin
+                    ? this.rangeSelector.getHeight()
+                    : 0) -
+                  (legendOptions &&
+                  legendOptions.verticalAlign === "bottom" &&
+                  legendOptions.layout !== "proximate" && // #13392
+                  legendOptions.enabled &&
+                  !legendOptions.floating
+                    ? legend.legendHeight + pick(legendOptions.margin, 10)
+                    : 0) -
+                  (this.titleOffset ? this.titleOffset[2] : 0);
+            }
+            if (xAxis && yAxis) {
+              // false if navigator is disabled (#904)
+              if (this.inverted) {
+                xAxis.options.left = yAxis.options.left = navigator.left;
+              } else {
+                xAxis.options.top = yAxis.options.top = navigator.top;
+              }
+              xAxis.setAxisSize();
+              yAxis.setAxisSize();
+            }
+          }
+        });
+        // Merge options, if no scrolling exists yet
+        addEvent(Chart, "update", function (e) {
+          var navigatorOptions = e.options.navigator || {},
+            scrollbarOptions = e.options.scrollbar || {};
+          if (
+            !this.navigator &&
+            !this.scroller &&
+            (navigatorOptions.enabled || scrollbarOptions.enabled)
+          ) {
+            merge(true, this.options.navigator, navigatorOptions);
+            merge(true, this.options.scrollbar, scrollbarOptions);
+            delete e.options.navigator;
+            delete e.options.scrollbar;
+          }
+        });
+        // Initialize navigator, if no scrolling exists yet
+        addEvent(Chart, "afterUpdate", function (event) {
+          if (
+            !this.navigator &&
+            !this.scroller &&
+            (this.options.navigator.enabled || this.options.scrollbar.enabled)
+          ) {
+            this.scroller = this.navigator = new Navigator(this);
+            if (pick(event.redraw, true)) {
+              this.redraw(event.animation); // #7067
+            }
+          }
+        });
+        // Handle adding new series
+        addEvent(Chart, "afterAddSeries", function () {
+          if (this.navigator) {
+            // Recompute which series should be shown in navigator, and add them
+            this.navigator.setBaseSeries(null, false);
+          }
+        });
+        // Handle updating series
+        addEvent(LineSeries, "afterUpdate", function () {
+          if (this.chart.navigator && !this.options.isInternal) {
+            this.chart.navigator.setBaseSeries(null, false);
+          }
+        });
+        Chart.prototype.callbacks.push(function (chart) {
+          var extremes,
+            navigator = chart.navigator;
+          // Initialize the navigator
+          if (navigator && chart.xAxis[0]) {
+            extremes = chart.xAxis[0].getExtremes();
+            navigator.render(extremes.min, extremes.max);
+          }
+        });
+      }
+      H.Navigator = Navigator;
 
-        return H.Navigator;
-    });
-    _registerModule(_modules, 'masters/modules/gantt.src.js', [], function () {
-
-
-    });
-}));
\ No newline at end of file
+      return H.Navigator;
+    }
+  );
+  _registerModule(_modules, "masters/modules/gantt.src.js", [], function () {});
+});
diff --git a/notemyprogress/js/highcharts/modules/stock.src.js b/notemyprogress/js/highcharts/modules/stock.src.js
index 835d5d1ba8568b01493a54e129ae4a41df5a434b..4fa28119b6f1dd9e2a66cbf3f0841a393b01167f 100644
--- a/notemyprogress/js/highcharts/modules/stock.src.js
+++ b/notemyprogress/js/highcharts/modules/stock.src.js
@@ -7,5783 +7,6284 @@
  *
  * License: www.highcharts.com/license
  */
-'use strict';
+"use strict";
 (function (factory) {
-    if (typeof module === 'object' && module.exports) {
-        factory['default'] = factory;
-        module.exports = factory;
-    } else if (typeof define === 'function' && define.amd) {
-        define('highcharts/modules/stock', ['highcharts'], function (Highcharts) {
-            factory(Highcharts);
-            factory.Highcharts = Highcharts;
-            return factory;
-        });
-    } else {
-        factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);
-    }
-}(function (Highcharts) {
-    var _modules = Highcharts ? Highcharts._modules : {};
-    function _registerModule(obj, path, args, fn) {
-        if (!obj.hasOwnProperty(path)) {
-            obj[path] = fn.apply(null, args);
-        }
+  if (typeof module === "object" && module.exports) {
+    factory["default"] = factory;
+    module.exports = factory;
+  } else if (typeof define === "function" && define.amd) {
+    define("highcharts/modules/stock", ["highcharts"], function (Highcharts) {
+      factory(Highcharts);
+      factory.Highcharts = Highcharts;
+      return factory;
+    });
+  } else {
+    factory(typeof Highcharts !== "undefined" ? Highcharts : undefined);
+  }
+})(function (Highcharts) {
+  var _modules = Highcharts ? Highcharts._modules : {};
+  function _registerModule(obj, path, args, fn) {
+    if (!obj.hasOwnProperty(path)) {
+      obj[path] = fn.apply(null, args);
     }
-    _registerModule(_modules, 'Core/Axis/NavigatorAxis.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (H, U) {
+  }
+  _registerModule(
+    _modules,
+    "Core/Axis/NavigatorAxis.js",
+    [_modules["Core/Globals.js"], _modules["Core/Utilities.js"]],
+    function (H, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var isTouchDevice = H.isTouchDevice;
+      var addEvent = U.addEvent,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        isNumber = U.isNumber,
+        pick = U.pick;
+      /* eslint-disable valid-jsdoc */
+      /**
+       * @private
+       * @class
+       */
+      var NavigatorAxisAdditions = /** @class */ (function () {
         /* *
          *
-         *  (c) 2010-2020 Torstein Honsi
+         *  Constructors
          *
-         *  License: www.highcharts.com/license
+         * */
+        function NavigatorAxisAdditions(axis) {
+          this.axis = axis;
+        }
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Functions
          *
          * */
-        var isTouchDevice = H.isTouchDevice;
-        var addEvent = U.addEvent,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            isNumber = U.isNumber,
-            pick = U.pick;
-        /* eslint-disable valid-jsdoc */
         /**
          * @private
-         * @class
          */
-        var NavigatorAxisAdditions = /** @class */ (function () {
-                /* *
-                 *
-                 *  Constructors
-                 *
-                 * */
-                function NavigatorAxisAdditions(axis) {
-                    this.axis = axis;
-            }
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * @private
-             */
-            NavigatorAxisAdditions.prototype.destroy = function () {
-                this.axis = void 0;
-            };
-            /**
-             * Add logic to normalize the zoomed range in order to preserve the pressed
-             * state of range selector buttons
-             *
-             * @private
-             * @function Highcharts.Axis#toFixedRange
-             * @param {number} [pxMin]
-             * @param {number} [pxMax]
-             * @param {number} [fixedMin]
-             * @param {number} [fixedMax]
-             * @return {*}
-             */
-            NavigatorAxisAdditions.prototype.toFixedRange = function (pxMin, pxMax, fixedMin, fixedMax) {
-                var navigator = this;
-                var axis = navigator.axis;
-                var chart = axis.chart;
-                var fixedRange = chart && chart.fixedRange,
-                    halfPointRange = (axis.pointRange || 0) / 2,
-                    newMin = pick(fixedMin,
-                    axis.translate(pxMin,
-                    true, !axis.horiz)),
-                    newMax = pick(fixedMax,
-                    axis.translate(pxMax,
-                    true, !axis.horiz)),
-                    changeRatio = fixedRange && (newMax - newMin) / fixedRange;
-                // Add/remove half point range to/from the extremes (#1172)
-                if (!defined(fixedMin)) {
-                    newMin = correctFloat(newMin + halfPointRange);
-                }
-                if (!defined(fixedMax)) {
-                    newMax = correctFloat(newMax - halfPointRange);
-                }
-                // If the difference between the fixed range and the actual requested
-                // range is too great, the user is dragging across an ordinal gap, and
-                // we need to release the range selector button.
-                if (changeRatio > 0.7 && changeRatio < 1.3) {
-                    if (fixedMax) {
-                        newMin = newMax - fixedRange;
-                    }
-                    else {
-                        newMax = newMin + fixedRange;
-                    }
-                }
-                if (!isNumber(newMin) || !isNumber(newMax)) { // #1195, #7411
-                    newMin = newMax = void 0;
-                }
-                return {
-                    min: newMin,
-                    max: newMax
-                };
-            };
-            return NavigatorAxisAdditions;
-        }());
+        NavigatorAxisAdditions.prototype.destroy = function () {
+          this.axis = void 0;
+        };
         /**
+         * Add logic to normalize the zoomed range in order to preserve the pressed
+         * state of range selector buttons
+         *
          * @private
-         * @class
+         * @function Highcharts.Axis#toFixedRange
+         * @param {number} [pxMin]
+         * @param {number} [pxMax]
+         * @param {number} [fixedMin]
+         * @param {number} [fixedMax]
+         * @return {*}
          */
-        var NavigatorAxis = /** @class */ (function () {
-                function NavigatorAxis() {
-                }
-                /* *
-                 *
-                 *  Static Functions
-                 *
-                 * */
-                /**
-                 * @private
-                 */
-                NavigatorAxis.compose = function (AxisClass) {
-                    AxisClass.keepProps.push('navigatorAxis');
-                /* eslint-disable no-invalid-this */
-                addEvent(AxisClass, 'init', function () {
-                    var axis = this;
-                    if (!axis.navigatorAxis) {
-                        axis.navigatorAxis = new NavigatorAxisAdditions(axis);
-                    }
-                });
-                // For Stock charts, override selection zooming with some special
-                // features because X axis zooming is already allowed by the Navigator
-                // and Range selector.
-                addEvent(AxisClass, 'zoom', function (e) {
-                    var axis = this;
-                    var chart = axis.chart;
-                    var chartOptions = chart.options;
-                    var navigator = chartOptions.navigator;
-                    var navigatorAxis = axis.navigatorAxis;
-                    var pinchType = chartOptions.chart.pinchType;
-                    var rangeSelector = chartOptions.rangeSelector;
-                    var zoomType = chartOptions.chart.zoomType;
-                    var previousZoom;
-                    if (axis.isXAxis && ((navigator && navigator.enabled) ||
-                        (rangeSelector && rangeSelector.enabled))) {
-                        // For y only zooming, ignore the X axis completely
-                        if (zoomType === 'y') {
-                            e.zoomed = false;
-                            // For xy zooming, record the state of the zoom before zoom
-                            // selection, then when the reset button is pressed, revert to
-                            // this state. This should apply only if the chart is
-                            // initialized with a range (#6612), otherwise zoom all the way
-                            // out.
-                        }
-                        else if (((!isTouchDevice && zoomType === 'xy') ||
-                            (isTouchDevice && pinchType === 'xy')) &&
-                            axis.options.range) {
-                            previousZoom = navigatorAxis.previousZoom;
-                            if (defined(e.newMin)) {
-                                navigatorAxis.previousZoom = [axis.min, axis.max];
-                            }
-                            else if (previousZoom) {
-                                e.newMin = previousZoom[0];
-                                e.newMax = previousZoom[1];
-                                navigatorAxis.previousZoom = void 0;
-                            }
-                        }
-                    }
-                    if (typeof e.zoomed !== 'undefined') {
-                        e.preventDefault();
-                    }
-                });
-                /* eslint-enable no-invalid-this */
-            };
-            /* *
-             *
-             *  Static Properties
-             *
-             * */
-            /**
-             * @private
-             */
-            NavigatorAxis.AdditionsClass = NavigatorAxisAdditions;
-            return NavigatorAxis;
-        }());
-
-        return NavigatorAxis;
-    });
-    _registerModule(_modules, 'Core/Axis/ScrollbarAxis.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (H, U) {
+        NavigatorAxisAdditions.prototype.toFixedRange = function (
+          pxMin,
+          pxMax,
+          fixedMin,
+          fixedMax
+        ) {
+          var navigator = this;
+          var axis = navigator.axis;
+          var chart = axis.chart;
+          var fixedRange = chart && chart.fixedRange,
+            halfPointRange = (axis.pointRange || 0) / 2,
+            newMin = pick(fixedMin, axis.translate(pxMin, true, !axis.horiz)),
+            newMax = pick(fixedMax, axis.translate(pxMax, true, !axis.horiz)),
+            changeRatio = fixedRange && (newMax - newMin) / fixedRange;
+          // Add/remove half point range to/from the extremes (#1172)
+          if (!defined(fixedMin)) {
+            newMin = correctFloat(newMin + halfPointRange);
+          }
+          if (!defined(fixedMax)) {
+            newMax = correctFloat(newMax - halfPointRange);
+          }
+          // If the difference between the fixed range and the actual requested
+          // range is too great, the user is dragging across an ordinal gap, and
+          // we need to release the range selector button.
+          if (changeRatio > 0.7 && changeRatio < 1.3) {
+            if (fixedMax) {
+              newMin = newMax - fixedRange;
+            } else {
+              newMax = newMin + fixedRange;
+            }
+          }
+          if (!isNumber(newMin) || !isNumber(newMax)) {
+            // #1195, #7411
+            newMin = newMax = void 0;
+          }
+          return {
+            min: newMin,
+            max: newMax,
+          };
+        };
+        return NavigatorAxisAdditions;
+      })();
+      /**
+       * @private
+       * @class
+       */
+      var NavigatorAxis = /** @class */ (function () {
+        function NavigatorAxis() {}
         /* *
          *
-         *  (c) 2010-2020 Torstein Honsi
+         *  Static Functions
          *
-         *  License: www.highcharts.com/license
+         * */
+        /**
+         * @private
+         */
+        NavigatorAxis.compose = function (AxisClass) {
+          AxisClass.keepProps.push("navigatorAxis");
+          /* eslint-disable no-invalid-this */
+          addEvent(AxisClass, "init", function () {
+            var axis = this;
+            if (!axis.navigatorAxis) {
+              axis.navigatorAxis = new NavigatorAxisAdditions(axis);
+            }
+          });
+          // For Stock charts, override selection zooming with some special
+          // features because X axis zooming is already allowed by the Navigator
+          // and Range selector.
+          addEvent(AxisClass, "zoom", function (e) {
+            var axis = this;
+            var chart = axis.chart;
+            var chartOptions = chart.options;
+            var navigator = chartOptions.navigator;
+            var navigatorAxis = axis.navigatorAxis;
+            var pinchType = chartOptions.chart.pinchType;
+            var rangeSelector = chartOptions.rangeSelector;
+            var zoomType = chartOptions.chart.zoomType;
+            var previousZoom;
+            if (
+              axis.isXAxis &&
+              ((navigator && navigator.enabled) ||
+                (rangeSelector && rangeSelector.enabled))
+            ) {
+              // For y only zooming, ignore the X axis completely
+              if (zoomType === "y") {
+                e.zoomed = false;
+                // For xy zooming, record the state of the zoom before zoom
+                // selection, then when the reset button is pressed, revert to
+                // this state. This should apply only if the chart is
+                // initialized with a range (#6612), otherwise zoom all the way
+                // out.
+              } else if (
+                ((!isTouchDevice && zoomType === "xy") ||
+                  (isTouchDevice && pinchType === "xy")) &&
+                axis.options.range
+              ) {
+                previousZoom = navigatorAxis.previousZoom;
+                if (defined(e.newMin)) {
+                  navigatorAxis.previousZoom = [axis.min, axis.max];
+                } else if (previousZoom) {
+                  e.newMin = previousZoom[0];
+                  e.newMax = previousZoom[1];
+                  navigatorAxis.previousZoom = void 0;
+                }
+              }
+            }
+            if (typeof e.zoomed !== "undefined") {
+              e.preventDefault();
+            }
+          });
+          /* eslint-enable no-invalid-this */
+        };
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Static Properties
          *
          * */
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            pick = U.pick;
-        /* eslint-disable no-invalid-this, valid-jsdoc */
         /**
-         * Creates scrollbars if enabled.
+         * @private
+         */
+        NavigatorAxis.AdditionsClass = NavigatorAxisAdditions;
+        return NavigatorAxis;
+      })();
+
+      return NavigatorAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/ScrollbarAxis.js",
+    [_modules["Core/Globals.js"], _modules["Core/Utilities.js"]],
+    function (H, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        pick = U.pick;
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * Creates scrollbars if enabled.
+       *
+       * @private
+       */
+      var ScrollbarAxis = /** @class */ (function () {
+        function ScrollbarAxis() {}
+        /**
+         * Attaches to axis events to create scrollbars if enabled.
          *
          * @private
+         *
+         * @param AxisClass
+         * Axis class to extend.
+         *
+         * @param ScrollbarClass
+         * Scrollbar class to use.
          */
-        var ScrollbarAxis = /** @class */ (function () {
-                function ScrollbarAxis() {
+        ScrollbarAxis.compose = function (AxisClass, ScrollbarClass) {
+          // Wrap axis initialization and create scrollbar if enabled:
+          addEvent(AxisClass, "afterInit", function () {
+            var axis = this;
+            if (
+              axis.options &&
+              axis.options.scrollbar &&
+              axis.options.scrollbar.enabled
+            ) {
+              // Predefined options:
+              axis.options.scrollbar.vertical = !axis.horiz;
+              axis.options.startOnTick = axis.options.endOnTick = false;
+              axis.scrollbar = new ScrollbarClass(
+                axis.chart.renderer,
+                axis.options.scrollbar,
+                axis.chart
+              );
+              addEvent(axis.scrollbar, "changed", function (e) {
+                var axisMin = pick(axis.options && axis.options.min, axis.min),
+                  axisMax = pick(axis.options && axis.options.max, axis.max),
+                  unitedMin = defined(axis.dataMin)
+                    ? Math.min(axisMin, axis.min, axis.dataMin)
+                    : axisMin,
+                  unitedMax = defined(axis.dataMax)
+                    ? Math.max(axisMax, axis.max, axis.dataMax)
+                    : axisMax,
+                  range = unitedMax - unitedMin,
+                  to,
+                  from;
+                // #12834, scroll when show/hide series, wrong extremes
+                if (!defined(axisMin) || !defined(axisMax)) {
+                  return;
                 }
-                /**
-                 * Attaches to axis events to create scrollbars if enabled.
-                 *
-                 * @private
-                 *
-                 * @param AxisClass
-                 * Axis class to extend.
-                 *
-                 * @param ScrollbarClass
-                 * Scrollbar class to use.
-                 */
-                ScrollbarAxis.compose = function (AxisClass, ScrollbarClass) {
-                    // Wrap axis initialization and create scrollbar if enabled:
-                    addEvent(AxisClass, 'afterInit', function () {
-                        var axis = this;
-                    if (axis.options &&
-                        axis.options.scrollbar &&
-                        axis.options.scrollbar.enabled) {
-                        // Predefined options:
-                        axis.options.scrollbar.vertical = !axis.horiz;
-                        axis.options.startOnTick = axis.options.endOnTick = false;
-                        axis.scrollbar = new ScrollbarClass(axis.chart.renderer, axis.options.scrollbar, axis.chart);
-                        addEvent(axis.scrollbar, 'changed', function (e) {
-                            var axisMin = pick(axis.options && axis.options.min,
-                                axis.min),
-                                axisMax = pick(axis.options && axis.options.max,
-                                axis.max),
-                                unitedMin = defined(axis.dataMin) ?
-                                    Math.min(axisMin,
-                                axis.min,
-                                axis.dataMin) : axisMin,
-                                unitedMax = defined(axis.dataMax) ?
-                                    Math.max(axisMax,
-                                axis.max,
-                                axis.dataMax) : axisMax,
-                                range = unitedMax - unitedMin,
-                                to,
-                                from;
-                            // #12834, scroll when show/hide series, wrong extremes
-                            if (!defined(axisMin) || !defined(axisMax)) {
-                                return;
-                            }
-                            if ((axis.horiz && !axis.reversed) ||
-                                (!axis.horiz && axis.reversed)) {
-                                to = unitedMin + range * this.to;
-                                from = unitedMin + range * this.from;
-                            }
-                            else {
-                                // y-values in browser are reversed, but this also
-                                // applies for reversed horizontal axis:
-                                to = unitedMin + range * (1 - this.from);
-                                from = unitedMin + range * (1 - this.to);
-                            }
-                            if (pick(this.options.liveRedraw, H.svg && !H.isTouchDevice && !this.chart.isBoosting) ||
-                                // Mouseup always should change extremes
-                                e.DOMType === 'mouseup' ||
-                                // Internal events
-                                !defined(e.DOMType)) {
-                                axis.setExtremes(from, to, true, e.DOMType !== 'mousemove', e);
-                            }
-                            else {
-                                // When live redraw is disabled, don't change extremes
-                                // Only change the position of the scollbar thumb
-                                this.setRange(this.from, this.to);
-                            }
-                        });
-                    }
-                });
-                // Wrap rendering axis, and update scrollbar if one is created:
-                addEvent(AxisClass, 'afterRender', function () {
-                    var axis = this,
-                        scrollMin = Math.min(pick(axis.options.min,
-                        axis.min),
-                        axis.min,
-                        pick(axis.dataMin,
-                        axis.min) // #6930
-                        ),
-                        scrollMax = Math.max(pick(axis.options.max,
-                        axis.max),
-                        axis.max,
-                        pick(axis.dataMax,
-                        axis.max) // #6930
-                        ),
-                        scrollbar = axis.scrollbar,
-                        offset = axis.axisTitleMargin + (axis.titleOffset || 0),
-                        scrollbarsOffsets = axis.chart.scrollbarsOffsets,
-                        axisMargin = axis.options.margin || 0,
-                        offsetsIndex,
-                        from,
-                        to;
-                    if (scrollbar) {
-                        if (axis.horiz) {
-                            // Reserve space for labels/title
-                            if (!axis.opposite) {
-                                scrollbarsOffsets[1] += offset;
-                            }
-                            scrollbar.position(axis.left, axis.top + axis.height + 2 + scrollbarsOffsets[1] -
-                                (axis.opposite ? axisMargin : 0), axis.width, axis.height);
-                            // Next scrollbar should reserve space for margin (if set)
-                            if (!axis.opposite) {
-                                scrollbarsOffsets[1] += axisMargin;
-                            }
-                            offsetsIndex = 1;
-                        }
-                        else {
-                            // Reserve space for labels/title
-                            if (axis.opposite) {
-                                scrollbarsOffsets[0] += offset;
-                            }
-                            scrollbar.position(axis.left + axis.width + 2 + scrollbarsOffsets[0] -
-                                (axis.opposite ? 0 : axisMargin), axis.top, axis.width, axis.height);
-                            // Next scrollbar should reserve space for margin (if set)
-                            if (axis.opposite) {
-                                scrollbarsOffsets[0] += axisMargin;
-                            }
-                            offsetsIndex = 0;
-                        }
-                        scrollbarsOffsets[offsetsIndex] += scrollbar.size +
-                            scrollbar.options.margin;
-                        if (isNaN(scrollMin) ||
-                            isNaN(scrollMax) ||
-                            !defined(axis.min) ||
-                            !defined(axis.max) ||
-                            axis.min === axis.max // #10733
-                        ) {
-                            // default action: when extremes are the same or there is
-                            // not extremes on the axis, but scrollbar exists, make it
-                            // full size
-                            scrollbar.setRange(0, 1);
-                        }
-                        else {
-                            from =
-                                (axis.min - scrollMin) / (scrollMax - scrollMin);
-                            to =
-                                (axis.max - scrollMin) / (scrollMax - scrollMin);
-                            if ((axis.horiz && !axis.reversed) ||
-                                (!axis.horiz && axis.reversed)) {
-                                scrollbar.setRange(from, to);
-                            }
-                            else {
-                                // inverse vertical axis
-                                scrollbar.setRange(1 - to, 1 - from);
-                            }
-                        }
-                    }
-                });
-                // Make space for a scrollbar:
-                addEvent(AxisClass, 'afterGetOffset', function () {
-                    var axis = this,
-                        index = axis.horiz ? 2 : 1,
-                        scrollbar = axis.scrollbar;
-                    if (scrollbar) {
-                        axis.chart.scrollbarsOffsets = [0, 0]; // reset scrollbars offsets
-                        axis.chart.axisOffset[index] +=
-                            scrollbar.size + scrollbar.options.margin;
-                    }
-                });
-            };
-            return ScrollbarAxis;
-        }());
-
+                if (
+                  (axis.horiz && !axis.reversed) ||
+                  (!axis.horiz && axis.reversed)
+                ) {
+                  to = unitedMin + range * this.to;
+                  from = unitedMin + range * this.from;
+                } else {
+                  // y-values in browser are reversed, but this also
+                  // applies for reversed horizontal axis:
+                  to = unitedMin + range * (1 - this.from);
+                  from = unitedMin + range * (1 - this.to);
+                }
+                if (
+                  pick(
+                    this.options.liveRedraw,
+                    H.svg && !H.isTouchDevice && !this.chart.isBoosting
+                  ) ||
+                  // Mouseup always should change extremes
+                  e.DOMType === "mouseup" ||
+                  // Internal events
+                  !defined(e.DOMType)
+                ) {
+                  axis.setExtremes(
+                    from,
+                    to,
+                    true,
+                    e.DOMType !== "mousemove",
+                    e
+                  );
+                } else {
+                  // When live redraw is disabled, don't change extremes
+                  // Only change the position of the scollbar thumb
+                  this.setRange(this.from, this.to);
+                }
+              });
+            }
+          });
+          // Wrap rendering axis, and update scrollbar if one is created:
+          addEvent(AxisClass, "afterRender", function () {
+            var axis = this,
+              scrollMin = Math.min(
+                pick(axis.options.min, axis.min),
+                axis.min,
+                pick(axis.dataMin, axis.min) // #6930
+              ),
+              scrollMax = Math.max(
+                pick(axis.options.max, axis.max),
+                axis.max,
+                pick(axis.dataMax, axis.max) // #6930
+              ),
+              scrollbar = axis.scrollbar,
+              offset = axis.axisTitleMargin + (axis.titleOffset || 0),
+              scrollbarsOffsets = axis.chart.scrollbarsOffsets,
+              axisMargin = axis.options.margin || 0,
+              offsetsIndex,
+              from,
+              to;
+            if (scrollbar) {
+              if (axis.horiz) {
+                // Reserve space for labels/title
+                if (!axis.opposite) {
+                  scrollbarsOffsets[1] += offset;
+                }
+                scrollbar.position(
+                  axis.left,
+                  axis.top +
+                    axis.height +
+                    2 +
+                    scrollbarsOffsets[1] -
+                    (axis.opposite ? axisMargin : 0),
+                  axis.width,
+                  axis.height
+                );
+                // Next scrollbar should reserve space for margin (if set)
+                if (!axis.opposite) {
+                  scrollbarsOffsets[1] += axisMargin;
+                }
+                offsetsIndex = 1;
+              } else {
+                // Reserve space for labels/title
+                if (axis.opposite) {
+                  scrollbarsOffsets[0] += offset;
+                }
+                scrollbar.position(
+                  axis.left +
+                    axis.width +
+                    2 +
+                    scrollbarsOffsets[0] -
+                    (axis.opposite ? 0 : axisMargin),
+                  axis.top,
+                  axis.width,
+                  axis.height
+                );
+                // Next scrollbar should reserve space for margin (if set)
+                if (axis.opposite) {
+                  scrollbarsOffsets[0] += axisMargin;
+                }
+                offsetsIndex = 0;
+              }
+              scrollbarsOffsets[offsetsIndex] +=
+                scrollbar.size + scrollbar.options.margin;
+              if (
+                isNaN(scrollMin) ||
+                isNaN(scrollMax) ||
+                !defined(axis.min) ||
+                !defined(axis.max) ||
+                axis.min === axis.max // #10733
+              ) {
+                // default action: when extremes are the same or there is
+                // not extremes on the axis, but scrollbar exists, make it
+                // full size
+                scrollbar.setRange(0, 1);
+              } else {
+                from = (axis.min - scrollMin) / (scrollMax - scrollMin);
+                to = (axis.max - scrollMin) / (scrollMax - scrollMin);
+                if (
+                  (axis.horiz && !axis.reversed) ||
+                  (!axis.horiz && axis.reversed)
+                ) {
+                  scrollbar.setRange(from, to);
+                } else {
+                  // inverse vertical axis
+                  scrollbar.setRange(1 - to, 1 - from);
+                }
+              }
+            }
+          });
+          // Make space for a scrollbar:
+          addEvent(AxisClass, "afterGetOffset", function () {
+            var axis = this,
+              index = axis.horiz ? 2 : 1,
+              scrollbar = axis.scrollbar;
+            if (scrollbar) {
+              axis.chart.scrollbarsOffsets = [0, 0]; // reset scrollbars offsets
+              axis.chart.axisOffset[index] +=
+                scrollbar.size + scrollbar.options.margin;
+            }
+          });
+        };
         return ScrollbarAxis;
-    });
-    _registerModule(_modules, 'Core/Scrollbar.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Globals.js'], _modules['Core/Axis/ScrollbarAxis.js'], _modules['Core/Utilities.js'], _modules['Core/Options.js']], function (Axis, H, ScrollbarAxis, U, O) {
+      })();
+
+      return ScrollbarAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Scrollbar.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Axis/ScrollbarAxis.js"],
+      _modules["Core/Utilities.js"],
+      _modules["Core/Options.js"],
+    ],
+    function (Axis, H, ScrollbarAxis, U, O) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        destroyObjectProperties = U.destroyObjectProperties,
+        fireEvent = U.fireEvent,
+        merge = U.merge,
+        pick = U.pick,
+        removeEvent = U.removeEvent;
+      var defaultOptions = O.defaultOptions;
+      var hasTouch = H.hasTouch,
+        isTouchDevice = H.isTouchDevice;
+      /**
+       * When we have vertical scrollbar, rifles and arrow in buttons should be
+       * rotated. The same method is used in Navigator's handles, to rotate them.
+       *
+       * @function Highcharts.swapXY
+       *
+       * @param {Highcharts.SVGPathArray} path
+       * Path to be rotated.
+       *
+       * @param {boolean} [vertical]
+       * If vertical scrollbar, swap x-y values.
+       *
+       * @return {Highcharts.SVGPathArray}
+       * Rotated path.
+       *
+       * @requires modules/stock
+       */
+      var swapXY = (H.swapXY = function (path, vertical) {
+        if (vertical) {
+          path.forEach(function (seg) {
+            var len = seg.length;
+            var temp;
+            for (var i = 0; i < len; i += 2) {
+              temp = seg[i + 1];
+              if (typeof temp === "number") {
+                seg[i + 1] = seg[i + 2];
+                seg[i + 2] = temp;
+              }
+            }
+          });
+        }
+        return path;
+      });
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * A reusable scrollbar, internally used in Highstock's navigator and optionally
+       * on individual axes.
+       *
+       * @private
+       * @class
+       * @name Highcharts.Scrollbar
+       * @param {Highcharts.SVGRenderer} renderer
+       * @param {Highcharts.ScrollbarOptions} options
+       * @param {Highcharts.Chart} chart
+       */
+      var Scrollbar = /** @class */ (function () {
         /* *
          *
-         *  (c) 2010-2020 Torstein Honsi
+         *  Constructors
          *
-         *  License: www.highcharts.com/license
+         * */
+        function Scrollbar(renderer, options, chart) {
+          /* *
+           *
+           *  Properties
+           *
+           * */
+          this._events = [];
+          this.chartX = 0;
+          this.chartY = 0;
+          this.from = 0;
+          this.group = void 0;
+          this.scrollbar = void 0;
+          this.scrollbarButtons = [];
+          this.scrollbarGroup = void 0;
+          this.scrollbarLeft = 0;
+          this.scrollbarRifles = void 0;
+          this.scrollbarStrokeWidth = 1;
+          this.scrollbarTop = 0;
+          this.size = 0;
+          this.to = 0;
+          this.track = void 0;
+          this.trackBorderWidth = 1;
+          this.userOptions = {};
+          this.x = 0;
+          this.y = 0;
+          this.chart = chart;
+          this.options = options;
+          this.renderer = chart.renderer;
+          this.init(renderer, options, chart);
+        }
+        /* *
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         *  Functions
          *
          * */
-        var addEvent = U.addEvent,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            destroyObjectProperties = U.destroyObjectProperties,
-            fireEvent = U.fireEvent,
-            merge = U.merge,
-            pick = U.pick,
-            removeEvent = U.removeEvent;
-        var defaultOptions = O.defaultOptions;
-        var hasTouch = H.hasTouch,
-            isTouchDevice = H.isTouchDevice;
         /**
-         * When we have vertical scrollbar, rifles and arrow in buttons should be
-         * rotated. The same method is used in Navigator's handles, to rotate them.
+         * Set up the mouse and touch events for the Scrollbar
          *
-         * @function Highcharts.swapXY
+         * @private
+         * @function Highcharts.Scrollbar#addEvents
+         * @return {void}
+         */
+        Scrollbar.prototype.addEvents = function () {
+          var buttonsOrder = this.options.inverted ? [1, 0] : [0, 1],
+            buttons = this.scrollbarButtons,
+            bar = this.scrollbarGroup.element,
+            track = this.track.element,
+            mouseDownHandler = this.mouseDownHandler.bind(this),
+            mouseMoveHandler = this.mouseMoveHandler.bind(this),
+            mouseUpHandler = this.mouseUpHandler.bind(this),
+            _events;
+          // Mouse events
+          _events = [
+            [
+              buttons[buttonsOrder[0]].element,
+              "click",
+              this.buttonToMinClick.bind(this),
+            ],
+            [
+              buttons[buttonsOrder[1]].element,
+              "click",
+              this.buttonToMaxClick.bind(this),
+            ],
+            [track, "click", this.trackClick.bind(this)],
+            [bar, "mousedown", mouseDownHandler],
+            [bar.ownerDocument, "mousemove", mouseMoveHandler],
+            [bar.ownerDocument, "mouseup", mouseUpHandler],
+          ];
+          // Touch events
+          if (hasTouch) {
+            _events.push(
+              [bar, "touchstart", mouseDownHandler],
+              [bar.ownerDocument, "touchmove", mouseMoveHandler],
+              [bar.ownerDocument, "touchend", mouseUpHandler]
+            );
+          }
+          // Add them all
+          _events.forEach(function (args) {
+            addEvent.apply(null, args);
+          });
+          this._events = _events;
+        };
+        Scrollbar.prototype.buttonToMaxClick = function (e) {
+          var scroller = this;
+          var range =
+            (scroller.to - scroller.from) * pick(scroller.options.step, 0.2);
+          scroller.updatePosition(scroller.from + range, scroller.to + range);
+          fireEvent(scroller, "changed", {
+            from: scroller.from,
+            to: scroller.to,
+            trigger: "scrollbar",
+            DOMEvent: e,
+          });
+        };
+        Scrollbar.prototype.buttonToMinClick = function (e) {
+          var scroller = this;
+          var range =
+            correctFloat(scroller.to - scroller.from) *
+            pick(scroller.options.step, 0.2);
+          scroller.updatePosition(
+            correctFloat(scroller.from - range),
+            correctFloat(scroller.to - range)
+          );
+          fireEvent(scroller, "changed", {
+            from: scroller.from,
+            to: scroller.to,
+            trigger: "scrollbar",
+            DOMEvent: e,
+          });
+        };
+        /**
+         * Get normalized (0-1) cursor position over the scrollbar
          *
-         * @param {Highcharts.SVGPathArray} path
-         * Path to be rotated.
+         * @private
+         * @function Highcharts.Scrollbar#cursorToScrollbarPosition
          *
-         * @param {boolean} [vertical]
-         * If vertical scrollbar, swap x-y values.
+         * @param  {*} normalizedEvent
+         *         normalized event, with chartX and chartY values
          *
-         * @return {Highcharts.SVGPathArray}
-         * Rotated path.
+         * @return {Highcharts.Dictionary<number>}
+         *         Local position {chartX, chartY}
+         */
+        Scrollbar.prototype.cursorToScrollbarPosition = function (
+          normalizedEvent
+        ) {
+          var scroller = this,
+            options = scroller.options,
+            minWidthDifference =
+              options.minWidth > scroller.calculatedWidth
+                ? options.minWidth
+                : 0; // minWidth distorts translation
+          return {
+            chartX:
+              (normalizedEvent.chartX - scroller.x - scroller.xOffset) /
+              (scroller.barWidth - minWidthDifference),
+            chartY:
+              (normalizedEvent.chartY - scroller.y - scroller.yOffset) /
+              (scroller.barWidth - minWidthDifference),
+          };
+        };
+        /**
+         * Destroys allocated elements.
          *
-         * @requires modules/stock
+         * @private
+         * @function Highcharts.Scrollbar#destroy
+         * @return {void}
          */
-        var swapXY = H.swapXY = function (path,
-            vertical) {
-                if (vertical) {
-                    path.forEach(function (seg) {
-                        var len = seg.length;
-                    var temp;
-                    for (var i = 0; i < len; i += 2) {
-                        temp = seg[i + 1];
-                        if (typeof temp === 'number') {
-                            seg[i + 1] = seg[i + 2];
-                            seg[i + 2] = temp;
-                        }
-                    }
-                });
+        Scrollbar.prototype.destroy = function () {
+          var scroller = this.chart.scroller;
+          // Disconnect events added in addEvents
+          this.removeEvents();
+          // Destroy properties
+          [
+            "track",
+            "scrollbarRifles",
+            "scrollbar",
+            "scrollbarGroup",
+            "group",
+          ].forEach(function (prop) {
+            if (this[prop] && this[prop].destroy) {
+              this[prop] = this[prop].destroy();
             }
-            return path;
+          }, this);
+          // #6421, chart may have more scrollbars
+          if (scroller && this === scroller.scrollbar) {
+            scroller.scrollbar = null;
+            // Destroy elements in collection
+            destroyObjectProperties(scroller.scrollbarButtons);
+          }
         };
-        /* eslint-disable no-invalid-this, valid-jsdoc */
         /**
-         * A reusable scrollbar, internally used in Highstock's navigator and optionally
-         * on individual axes.
+         * Draw the scrollbar buttons with arrows
          *
          * @private
-         * @class
-         * @name Highcharts.Scrollbar
+         * @function Highcharts.Scrollbar#drawScrollbarButton
+         * @param {number} index
+         *        0 is left, 1 is right
+         * @return {void}
+         */
+        Scrollbar.prototype.drawScrollbarButton = function (index) {
+          var scroller = this,
+            renderer = scroller.renderer,
+            scrollbarButtons = scroller.scrollbarButtons,
+            options = scroller.options,
+            size = scroller.size,
+            group,
+            tempElem;
+          group = renderer.g().add(scroller.group);
+          scrollbarButtons.push(group);
+          // Create a rectangle for the scrollbar button
+          tempElem = renderer
+            .rect()
+            .addClass("highcharts-scrollbar-button")
+            .add(group);
+          // Presentational attributes
+          if (!this.chart.styledMode) {
+            tempElem.attr({
+              stroke: options.buttonBorderColor,
+              "stroke-width": options.buttonBorderWidth,
+              fill: options.buttonBackgroundColor,
+            });
+          }
+          // Place the rectangle based on the rendered stroke width
+          tempElem.attr(
+            tempElem.crisp(
+              {
+                x: -0.5,
+                y: -0.5,
+                width: size + 1,
+                height: size + 1,
+                r: options.buttonBorderRadius,
+              },
+              tempElem.strokeWidth()
+            )
+          );
+          // Button arrow
+          tempElem = renderer
+            .path(
+              swapXY(
+                [
+                  ["M", size / 2 + (index ? -1 : 1), size / 2 - 3],
+                  ["L", size / 2 + (index ? -1 : 1), size / 2 + 3],
+                  ["L", size / 2 + (index ? 2 : -2), size / 2],
+                ],
+                options.vertical
+              )
+            )
+            .addClass("highcharts-scrollbar-arrow")
+            .add(scrollbarButtons[index]);
+          if (!this.chart.styledMode) {
+            tempElem.attr({
+              fill: options.buttonArrowColor,
+            });
+          }
+        };
+        /**
+         * @private
+         * @function Highcharts.Scrollbar#init
          * @param {Highcharts.SVGRenderer} renderer
          * @param {Highcharts.ScrollbarOptions} options
          * @param {Highcharts.Chart} chart
          */
-        var Scrollbar = /** @class */ (function () {
-                /* *
-                 *
-                 *  Constructors
-                 *
-                 * */
-                function Scrollbar(renderer, options, chart) {
-                    /* *
-                     *
-                     *  Properties
-                     *
-                     * */
-                    this._events = [];
-                this.chartX = 0;
-                this.chartY = 0;
-                this.from = 0;
-                this.group = void 0;
-                this.scrollbar = void 0;
-                this.scrollbarButtons = [];
-                this.scrollbarGroup = void 0;
-                this.scrollbarLeft = 0;
-                this.scrollbarRifles = void 0;
-                this.scrollbarStrokeWidth = 1;
-                this.scrollbarTop = 0;
-                this.size = 0;
-                this.to = 0;
-                this.track = void 0;
-                this.trackBorderWidth = 1;
-                this.userOptions = {};
-                this.x = 0;
-                this.y = 0;
-                this.chart = chart;
-                this.options = options;
-                this.renderer = chart.renderer;
-                this.init(renderer, options, chart);
+        Scrollbar.prototype.init = function (renderer, options, chart) {
+          this.scrollbarButtons = [];
+          this.renderer = renderer;
+          this.userOptions = options;
+          this.options = merge(Scrollbar.defaultOptions, options);
+          this.chart = chart;
+          // backward compatibility
+          this.size = pick(this.options.size, this.options.height);
+          // Init
+          if (options.enabled) {
+            this.render();
+            this.addEvents();
+          }
+        };
+        Scrollbar.prototype.mouseDownHandler = function (e) {
+          var scroller = this;
+          var normalizedEvent = scroller.chart.pointer.normalize(e),
+            mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);
+          scroller.chartX = mousePosition.chartX;
+          scroller.chartY = mousePosition.chartY;
+          scroller.initPositions = [scroller.from, scroller.to];
+          scroller.grabbedCenter = true;
+        };
+        /**
+         * Event handler for the mouse move event.
+         * @private
+         */
+        Scrollbar.prototype.mouseMoveHandler = function (e) {
+          var scroller = this;
+          var normalizedEvent = scroller.chart.pointer.normalize(e),
+            options = scroller.options,
+            direction = options.vertical ? "chartY" : "chartX",
+            initPositions = scroller.initPositions || [],
+            scrollPosition,
+            chartPosition,
+            change;
+          // In iOS, a mousemove event with e.pageX === 0 is fired when
+          // holding the finger down in the center of the scrollbar. This
+          // should be ignored.
+          if (
+            scroller.grabbedCenter &&
+            // #4696, scrollbar failed on Android
+            (!e.touches || e.touches[0][direction] !== 0)
+          ) {
+            chartPosition =
+              scroller.cursorToScrollbarPosition(normalizedEvent)[direction];
+            scrollPosition = scroller[direction];
+            change = chartPosition - scrollPosition;
+            scroller.hasDragged = true;
+            scroller.updatePosition(
+              initPositions[0] + change,
+              initPositions[1] + change
+            );
+            if (scroller.hasDragged) {
+              fireEvent(scroller, "changed", {
+                from: scroller.from,
+                to: scroller.to,
+                trigger: "scrollbar",
+                DOMType: e.type,
+                DOMEvent: e,
+              });
             }
-            /* *
+          }
+        };
+        /**
+         * Event handler for the mouse up event.
+         * @private
+         */
+        Scrollbar.prototype.mouseUpHandler = function (e) {
+          var scroller = this;
+          if (scroller.hasDragged) {
+            fireEvent(scroller, "changed", {
+              from: scroller.from,
+              to: scroller.to,
+              trigger: "scrollbar",
+              DOMType: e.type,
+              DOMEvent: e,
+            });
+          }
+          scroller.grabbedCenter =
+            scroller.hasDragged =
+            scroller.chartX =
+            scroller.chartY =
+              null;
+        };
+        /**
+         * Position the scrollbar, method called from a parent with defined
+         * dimensions.
+         *
+         * @private
+         * @function Highcharts.Scrollbar#position
+         * @param {number} x
+         *        x-position on the chart
+         * @param {number} y
+         *        y-position on the chart
+         * @param {number} width
+         *        width of the scrollbar
+         * @param {number} height
+         *        height of the scorllbar
+         * @return {void}
+         */
+        Scrollbar.prototype.position = function (x, y, width, height) {
+          var scroller = this,
+            options = scroller.options,
+            vertical = options.vertical,
+            xOffset = height,
+            yOffset = 0,
+            method = scroller.rendered ? "animate" : "attr";
+          scroller.x = x;
+          scroller.y = y + this.trackBorderWidth;
+          scroller.width = width; // width with buttons
+          scroller.height = height;
+          scroller.xOffset = xOffset;
+          scroller.yOffset = yOffset;
+          // If Scrollbar is a vertical type, swap options:
+          if (vertical) {
+            scroller.width = scroller.yOffset = width = yOffset = scroller.size;
+            scroller.xOffset = xOffset = 0;
+            scroller.barWidth = height - width * 2; // width without buttons
+            scroller.x = x = x + scroller.options.margin;
+          } else {
+            scroller.height =
+              scroller.xOffset =
+              height =
+              xOffset =
+                scroller.size;
+            scroller.barWidth = width - height * 2; // width without buttons
+            scroller.y = scroller.y + scroller.options.margin;
+          }
+          // Set general position for a group:
+          scroller.group[method]({
+            translateX: x,
+            translateY: scroller.y,
+          });
+          // Resize background/track:
+          scroller.track[method]({
+            width: width,
+            height: height,
+          });
+          // Move right/bottom button ot it's place:
+          scroller.scrollbarButtons[1][method]({
+            translateX: vertical ? 0 : width - xOffset,
+            translateY: vertical ? height - yOffset : 0,
+          });
+        };
+        /**
+         * Removes the event handlers attached previously with addEvents.
+         *
+         * @private
+         * @function Highcharts.Scrollbar#removeEvents
+         * @return {void}
+         */
+        Scrollbar.prototype.removeEvents = function () {
+          this._events.forEach(function (args) {
+            removeEvent.apply(null, args);
+          });
+          this._events.length = 0;
+        };
+        /**
+         * Render scrollbar with all required items.
+         *
+         * @private
+         * @function Highcharts.Scrollbar#render
+         */
+        Scrollbar.prototype.render = function () {
+          var scroller = this,
+            renderer = scroller.renderer,
+            options = scroller.options,
+            size = scroller.size,
+            styledMode = this.chart.styledMode,
+            group;
+          // Draw the scrollbar group
+          scroller.group = group = renderer
+            .g("scrollbar")
+            .attr({
+              zIndex: options.zIndex,
+              translateY: -99999,
+            })
+            .add();
+          // Draw the scrollbar track:
+          scroller.track = renderer
+            .rect()
+            .addClass("highcharts-scrollbar-track")
+            .attr({
+              x: 0,
+              r: options.trackBorderRadius || 0,
+              height: size,
+              width: size,
+            })
+            .add(group);
+          if (!styledMode) {
+            scroller.track.attr({
+              fill: options.trackBackgroundColor,
+              stroke: options.trackBorderColor,
+              "stroke-width": options.trackBorderWidth,
+            });
+          }
+          this.trackBorderWidth = scroller.track.strokeWidth();
+          scroller.track.attr({
+            y: (-this.trackBorderWidth % 2) / 2,
+          });
+          // Draw the scrollbar itself
+          scroller.scrollbarGroup = renderer.g().add(group);
+          scroller.scrollbar = renderer
+            .rect()
+            .addClass("highcharts-scrollbar-thumb")
+            .attr({
+              height: size,
+              width: size,
+              r: options.barBorderRadius || 0,
+            })
+            .add(scroller.scrollbarGroup);
+          scroller.scrollbarRifles = renderer
+            .path(
+              swapXY(
+                [
+                  ["M", -3, size / 4],
+                  ["L", -3, (2 * size) / 3],
+                  ["M", 0, size / 4],
+                  ["L", 0, (2 * size) / 3],
+                  ["M", 3, size / 4],
+                  ["L", 3, (2 * size) / 3],
+                ],
+                options.vertical
+              )
+            )
+            .addClass("highcharts-scrollbar-rifles")
+            .add(scroller.scrollbarGroup);
+          if (!styledMode) {
+            scroller.scrollbar.attr({
+              fill: options.barBackgroundColor,
+              stroke: options.barBorderColor,
+              "stroke-width": options.barBorderWidth,
+            });
+            scroller.scrollbarRifles.attr({
+              stroke: options.rifleColor,
+              "stroke-width": 1,
+            });
+          }
+          scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();
+          scroller.scrollbarGroup.translate(
+            (-scroller.scrollbarStrokeWidth % 2) / 2,
+            (-scroller.scrollbarStrokeWidth % 2) / 2
+          );
+          // Draw the buttons:
+          scroller.drawScrollbarButton(0);
+          scroller.drawScrollbarButton(1);
+        };
+        /**
+         * Set scrollbar size, with a given scale.
+         *
+         * @private
+         * @function Highcharts.Scrollbar#setRange
+         * @param {number} from
+         *        scale (0-1) where bar should start
+         * @param {number} to
+         *        scale (0-1) where bar should end
+         * @return {void}
+         */
+        Scrollbar.prototype.setRange = function (from, to) {
+          var scroller = this,
+            options = scroller.options,
+            vertical = options.vertical,
+            minWidth = options.minWidth,
+            fullWidth = scroller.barWidth,
+            fromPX,
+            toPX,
+            newPos,
+            newSize,
+            newRiflesPos,
+            method =
+              this.rendered &&
+              !this.hasDragged &&
+              !(this.chart.navigator && this.chart.navigator.hasDragged)
+                ? "animate"
+                : "attr";
+          if (!defined(fullWidth)) {
+            return;
+          }
+          from = Math.max(from, 0);
+          fromPX = Math.ceil(fullWidth * from);
+          toPX = fullWidth * Math.min(to, 1);
+          scroller.calculatedWidth = newSize = correctFloat(toPX - fromPX);
+          // We need to recalculate position, if minWidth is used
+          if (newSize < minWidth) {
+            fromPX = (fullWidth - minWidth + newSize) * from;
+            newSize = minWidth;
+          }
+          newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);
+          newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2
+          // Store current position:
+          scroller.from = from;
+          scroller.to = to;
+          if (!vertical) {
+            scroller.scrollbarGroup[method]({
+              translateX: newPos,
+            });
+            scroller.scrollbar[method]({
+              width: newSize,
+            });
+            scroller.scrollbarRifles[method]({
+              translateX: newRiflesPos,
+            });
+            scroller.scrollbarLeft = newPos;
+            scroller.scrollbarTop = 0;
+          } else {
+            scroller.scrollbarGroup[method]({
+              translateY: newPos,
+            });
+            scroller.scrollbar[method]({
+              height: newSize,
+            });
+            scroller.scrollbarRifles[method]({
+              translateY: newRiflesPos,
+            });
+            scroller.scrollbarTop = newPos;
+            scroller.scrollbarLeft = 0;
+          }
+          if (newSize <= 12) {
+            scroller.scrollbarRifles.hide();
+          } else {
+            scroller.scrollbarRifles.show(true);
+          }
+          // Show or hide the scrollbar based on the showFull setting
+          if (options.showFull === false) {
+            if (from <= 0 && to >= 1) {
+              scroller.group.hide();
+            } else {
+              scroller.group.show();
+            }
+          }
+          scroller.rendered = true;
+        };
+        Scrollbar.prototype.trackClick = function (e) {
+          var scroller = this;
+          var normalizedEvent = scroller.chart.pointer.normalize(e),
+            range = scroller.to - scroller.from,
+            top = scroller.y + scroller.scrollbarTop,
+            left = scroller.x + scroller.scrollbarLeft;
+          if (
+            (scroller.options.vertical && normalizedEvent.chartY > top) ||
+            (!scroller.options.vertical && normalizedEvent.chartX > left)
+          ) {
+            // On the top or on the left side of the track:
+            scroller.updatePosition(scroller.from + range, scroller.to + range);
+          } else {
+            // On the bottom or the right side of the track:
+            scroller.updatePosition(scroller.from - range, scroller.to - range);
+          }
+          fireEvent(scroller, "changed", {
+            from: scroller.from,
+            to: scroller.to,
+            trigger: "scrollbar",
+            DOMEvent: e,
+          });
+        };
+        /**
+         * Update the scrollbar with new options
+         *
+         * @private
+         * @function Highcharts.Scrollbar#update
+         * @param  {Highcharts.ScrollbarOptions} options
+         * @return {void}
+         */
+        Scrollbar.prototype.update = function (options) {
+          this.destroy();
+          this.init(
+            this.chart.renderer,
+            merge(true, this.options, options),
+            this.chart
+          );
+        };
+        /**
+         * Update position option in the Scrollbar, with normalized 0-1 scale
+         *
+         * @private
+         * @function Highcharts.Scrollbar#updatePosition
+         * @param  {number} from
+         * @param  {number} to
+         * @return {void}
+         */
+        Scrollbar.prototype.updatePosition = function (from, to) {
+          if (to > 1) {
+            from = correctFloat(1 - correctFloat(to - from));
+            to = 1;
+          }
+          if (from < 0) {
+            to = correctFloat(to - from);
+            from = 0;
+          }
+          this.from = from;
+          this.to = to;
+        };
+        /* *
+         *
+         *  Static Properties
+         *
+         * */
+        /**
+         *
+         * The scrollbar is a means of panning over the X axis of a stock chart.
+         * Scrollbars can  also be applied to other types of axes.
+         *
+         * Another approach to scrollable charts is the [chart.scrollablePlotArea](
+         * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that
+         * is especially suitable for simpler cartesian charts on mobile.
+         *
+         * In styled mode, all the presentational options for the
+         * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,
+         * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,
+         * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.
+         *
+         * @sample stock/yaxis/inverted-bar-scrollbar/
+         *         A scrollbar on a simple bar chart
+         *
+         * @product highstock gantt
+         * @optionparent scrollbar
+         *
+         * @private
+         */
+        Scrollbar.defaultOptions = {
+          /**
+           * The height of the scrollbar. The height also applies to the width
+           * of the scroll arrows so that they are always squares. Defaults to
+           * 20 for touch devices and 14 for mouse devices.
+           *
+           * @sample stock/scrollbar/height/
+           *         A 30px scrollbar
+           *
+           * @type    {number}
+           * @default 20/14
+           */
+          height: isTouchDevice ? 20 : 14,
+          /**
+           * The border rounding radius of the bar.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          barBorderRadius: 0,
+          /**
+           * The corner radius of the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          buttonBorderRadius: 0,
+          /**
+           * Enable or disable the scrollbar.
+           *
+           * @sample stock/scrollbar/enabled/
+           *         Disable the scrollbar, only use navigator
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption scrollbar.enabled
+           */
+          /**
+           * Whether to redraw the main chart as the scrollbar or the navigator
+           * zoomed window is moved. Defaults to `true` for modern browsers and
+           * `false` for legacy IE browsers as well as mobile devices.
+           *
+           * @sample stock/scrollbar/liveredraw
+           *         Setting live redraw to false
+           *
+           * @type  {boolean}
+           * @since 1.3
+           */
+          liveRedraw: void 0,
+          /**
+           * The margin between the scrollbar and its axis when the scrollbar is
+           * applied directly to an axis.
+           */
+          margin: 10,
+          /**
+           * The minimum width of the scrollbar.
+           *
+           * @since 1.2.5
+           */
+          minWidth: 6,
+          /**
+           * Whether to show or hide the scrollbar when the scrolled content is
+           * zoomed out to it full extent.
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption scrollbar.showFull
+           */
+          step: 0.2,
+          /**
+           * The z index of the scrollbar group.
+           */
+          zIndex: 3,
+          /**
+           * The background color of the scrollbar itself.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          barBackgroundColor: "#cccccc",
+          /**
+           * The width of the bar's border.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          barBorderWidth: 1,
+          /**
+           * The color of the scrollbar's border.
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          barBorderColor: "#cccccc",
+          /**
+           * The color of the small arrow inside the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          buttonArrowColor: "#333333",
+          /**
+           * The color of scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          buttonBackgroundColor: "#e6e6e6",
+          /**
+           * The color of the border of the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          buttonBorderColor: "#cccccc",
+          /**
+           * The border width of the scrollbar buttons.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          buttonBorderWidth: 1,
+          /**
+           * The color of the small rifles in the middle of the scrollbar.
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          rifleColor: "#333333",
+          /**
+           * The color of the track background.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          trackBackgroundColor: "#f2f2f2",
+          /**
+           * The color of the border of the scrollbar track.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           */
+          trackBorderColor: "#f2f2f2",
+          /**
+           * The corner radius of the border of the scrollbar track.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           *
+           * @type      {number}
+           * @default   0
+           * @apioption scrollbar.trackBorderRadius
+           */
+          /**
+           * The width of the border of the scrollbar track.
+           *
+           * @sample stock/scrollbar/style/
+           *         Scrollbar styling
+           */
+          trackBorderWidth: 1,
+        };
+        return Scrollbar;
+      })();
+      if (!H.Scrollbar) {
+        defaultOptions.scrollbar = merge(
+          true,
+          Scrollbar.defaultOptions,
+          defaultOptions.scrollbar
+        );
+        H.Scrollbar = Scrollbar;
+        ScrollbarAxis.compose(Axis, Scrollbar);
+      }
+
+      return H.Scrollbar;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Navigator.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Series/Series.js"],
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Color/Color.js"],
+      _modules["Core/Globals.js"],
+      _modules["Series/LineSeries.js"],
+      _modules["Core/Axis/NavigatorAxis.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Scrollbar.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (
+      Axis,
+      BaseSeries,
+      Chart,
+      Color,
+      H,
+      LineSeries,
+      NavigatorAxis,
+      O,
+      Scrollbar,
+      U
+    ) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var seriesTypes = BaseSeries.seriesTypes;
+      var color = Color.parse;
+      var hasTouch = H.hasTouch,
+        isTouchDevice = H.isTouchDevice;
+      var defaultOptions = O.defaultOptions;
+      var addEvent = U.addEvent,
+        clamp = U.clamp,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        destroyObjectProperties = U.destroyObjectProperties,
+        erase = U.erase,
+        extend = U.extend,
+        find = U.find,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        pick = U.pick,
+        removeEvent = U.removeEvent,
+        splat = U.splat;
+      var defaultSeriesType,
+        // Finding the min or max of a set of variables where we don't know if they
+        // are defined, is a pattern that is repeated several places in Highcharts.
+        // Consider making this a global utility method.
+        numExt = function (extreme) {
+          var args = [];
+          for (var _i = 1; _i < arguments.length; _i++) {
+            args[_i - 1] = arguments[_i];
+          }
+          var numbers = [].filter.call(args, isNumber);
+          if (numbers.length) {
+            return Math[extreme].apply(0, numbers);
+          }
+        };
+      defaultSeriesType =
+        typeof seriesTypes.areaspline === "undefined" ? "line" : "areaspline";
+      extend(defaultOptions, {
+        /**
+         * Maximum range which can be set using the navigator's handles.
+         * Opposite of [xAxis.minRange](#xAxis.minRange).
+         *
+         * @sample {highstock} stock/navigator/maxrange/
+         *         Defined max and min range
+         *
+         * @type      {number}
+         * @since     6.0.0
+         * @product   highstock gantt
+         * @apioption xAxis.maxRange
+         */
+        /**
+         * The navigator is a small series below the main series, displaying
+         * a view of the entire data set. It provides tools to zoom in and
+         * out on parts of the data as well as panning across the dataset.
+         *
+         * @product      highstock gantt
+         * @optionparent navigator
+         */
+        navigator: {
+          /**
+           * Whether the navigator and scrollbar should adapt to updated data
+           * in the base X axis. When loading data async, as in the demo below,
+           * this should be `false`. Otherwise new data will trigger navigator
+           * redraw, which will cause unwanted looping. In the demo below, the
+           * data in the navigator is set only once. On navigating, only the main
+           * chart content is updated.
+           *
+           * @sample {highstock} stock/demo/lazy-loading/
+           *         Set to false with async data loading
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption navigator.adaptToUpdatedData
+           */
+          /**
+           * An integer identifying the index to use for the base series, or a
+           * string representing the id of the series.
+           *
+           * **Note**: As of Highcharts 5.0, this is now a deprecated option.
+           * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).
+           *
+           * @see [series.showInNavigator](#plotOptions.series.showInNavigator)
+           *
+           * @deprecated
+           * @type      {number|string}
+           * @default   0
+           * @apioption navigator.baseSeries
+           */
+          /**
+           * Enable or disable the navigator.
+           *
+           * @sample {highstock} stock/navigator/enabled/
+           *         Disable the navigator
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption navigator.enabled
+           */
+          /**
+           * When the chart is inverted, whether to draw the navigator on the
+           * opposite side.
+           *
+           * @type      {boolean}
+           * @default   false
+           * @since     5.0.8
+           * @apioption navigator.opposite
+           */
+          /**
+           * The height of the navigator.
+           *
+           * @sample {highstock} stock/navigator/height/
+           *         A higher navigator
+           */
+          height: 40,
+          /**
+           * The distance from the nearest element, the X axis or X axis labels.
+           *
+           * @sample {highstock} stock/navigator/margin/
+           *         A margin of 2 draws the navigator closer to the X axis labels
+           */
+          margin: 25,
+          /**
+           * Whether the mask should be inside the range marking the zoomed
+           * range, or outside. In Highstock 1.x it was always `false`.
+           *
+           * @sample {highstock} stock/navigator/maskinside-false/
+           *         False, mask outside
+           *
+           * @since   2.0
+           */
+          maskInside: true,
+          /**
+           * Options for the handles for dragging the zoomed area.
+           *
+           * @sample {highstock} stock/navigator/handles/
+           *         Colored handles
+           */
+          handles: {
+            /**
+             * Width for handles.
              *
-             *  Functions
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
              *
-             * */
+             * @since   6.0.0
+             */
+            width: 7,
             /**
-             * Set up the mouse and touch events for the Scrollbar
+             * Height for handles.
              *
-             * @private
-             * @function Highcharts.Scrollbar#addEvents
-             * @return {void}
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
+             *
+             * @since   6.0.0
              */
-            Scrollbar.prototype.addEvents = function () {
-                var buttonsOrder = this.options.inverted ? [1, 0] : [0, 1],
-                    buttons = this.scrollbarButtons,
-                    bar = this.scrollbarGroup.element,
-                    track = this.track.element,
-                    mouseDownHandler = this.mouseDownHandler.bind(this),
-                    mouseMoveHandler = this.mouseMoveHandler.bind(this),
-                    mouseUpHandler = this.mouseUpHandler.bind(this),
-                    _events;
-                // Mouse events
-                _events = [
-                    [buttons[buttonsOrder[0]].element, 'click', this.buttonToMinClick.bind(this)],
-                    [buttons[buttonsOrder[1]].element, 'click', this.buttonToMaxClick.bind(this)],
-                    [track, 'click', this.trackClick.bind(this)],
-                    [bar, 'mousedown', mouseDownHandler],
-                    [bar.ownerDocument, 'mousemove', mouseMoveHandler],
-                    [bar.ownerDocument, 'mouseup', mouseUpHandler]
-                ];
-                // Touch events
-                if (hasTouch) {
-                    _events.push([bar, 'touchstart', mouseDownHandler], [bar.ownerDocument, 'touchmove', mouseMoveHandler], [bar.ownerDocument, 'touchend', mouseUpHandler]);
-                }
-                // Add them all
-                _events.forEach(function (args) {
-                    addEvent.apply(null, args);
-                });
-                this._events = _events;
-            };
-            Scrollbar.prototype.buttonToMaxClick = function (e) {
-                var scroller = this;
-                var range = (scroller.to - scroller.from) * pick(scroller.options.step, 0.2);
-                scroller.updatePosition(scroller.from + range, scroller.to + range);
-                fireEvent(scroller, 'changed', {
-                    from: scroller.from,
-                    to: scroller.to,
-                    trigger: 'scrollbar',
-                    DOMEvent: e
-                });
-            };
-            Scrollbar.prototype.buttonToMinClick = function (e) {
-                var scroller = this;
-                var range = correctFloat(scroller.to - scroller.from) *
-                        pick(scroller.options.step, 0.2);
-                scroller.updatePosition(correctFloat(scroller.from - range), correctFloat(scroller.to - range));
-                fireEvent(scroller, 'changed', {
-                    from: scroller.from,
-                    to: scroller.to,
-                    trigger: 'scrollbar',
-                    DOMEvent: e
-                });
-            };
+            height: 15,
             /**
-             * Get normalized (0-1) cursor position over the scrollbar
+             * Array to define shapes of handles. 0-index for left, 1-index for
+             * right.
+             *
+             * Additionally, the URL to a graphic can be given on this form:
+             * `url(graphic.png)`. Note that for the image to be applied to
+             * exported charts, its URL needs to be accessible by the export
+             * server.
              *
-             * @private
-             * @function Highcharts.Scrollbar#cursorToScrollbarPosition
+             * Custom callbacks for symbol path generation can also be added to
+             * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then
+             * used by its method name, as shown in the demo.
              *
-             * @param  {*} normalizedEvent
-             *         normalized event, with chartX and chartY values
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
              *
-             * @return {Highcharts.Dictionary<number>}
-             *         Local position {chartX, chartY}
+             * @type    {Array<string>}
+             * @default ["navigator-handle", "navigator-handle"]
+             * @since   6.0.0
              */
-            Scrollbar.prototype.cursorToScrollbarPosition = function (normalizedEvent) {
-                var scroller = this,
-                    options = scroller.options,
-                    minWidthDifference = options.minWidth > scroller.calculatedWidth ?
-                        options.minWidth :
-                        0; // minWidth distorts translation
-                    return {
-                        chartX: (normalizedEvent.chartX - scroller.x -
-                            scroller.xOffset) /
-                            (scroller.barWidth - minWidthDifference),
-                        chartY: (normalizedEvent.chartY - scroller.y -
-                            scroller.yOffset) /
-                            (scroller.barWidth - minWidthDifference)
-                    };
-            };
+            symbols: ["navigator-handle", "navigator-handle"],
             /**
-             * Destroys allocated elements.
+             * Allows to enable/disable handles.
              *
-             * @private
-             * @function Highcharts.Scrollbar#destroy
-             * @return {void}
+             * @since   6.0.0
              */
-            Scrollbar.prototype.destroy = function () {
-                var scroller = this.chart.scroller;
-                // Disconnect events added in addEvents
-                this.removeEvents();
-                // Destroy properties
-                [
-                    'track',
-                    'scrollbarRifles',
-                    'scrollbar',
-                    'scrollbarGroup',
-                    'group'
-                ].forEach(function (prop) {
-                    if (this[prop] && this[prop].destroy) {
-                        this[prop] = this[prop].destroy();
-                    }
-                }, this);
-                // #6421, chart may have more scrollbars
-                if (scroller && this === scroller.scrollbar) {
-                    scroller.scrollbar = null;
-                    // Destroy elements in collection
-                    destroyObjectProperties(scroller.scrollbarButtons);
-                }
-            };
+            enabled: true,
             /**
-             * Draw the scrollbar buttons with arrows
+             * The width for the handle border and the stripes inside.
              *
-             * @private
-             * @function Highcharts.Scrollbar#drawScrollbarButton
-             * @param {number} index
-             *        0 is left, 1 is right
-             * @return {void}
+             * @sample {highstock} stock/navigator/styled-handles/
+             *         Styled handles
+             *
+             * @since     6.0.0
+             * @apioption navigator.handles.lineWidth
              */
-            Scrollbar.prototype.drawScrollbarButton = function (index) {
-                var scroller = this,
-                    renderer = scroller.renderer,
-                    scrollbarButtons = scroller.scrollbarButtons,
-                    options = scroller.options,
-                    size = scroller.size,
-                    group,
-                    tempElem;
-                group = renderer.g().add(scroller.group);
-                scrollbarButtons.push(group);
-                // Create a rectangle for the scrollbar button
-                tempElem = renderer.rect()
-                    .addClass('highcharts-scrollbar-button')
-                    .add(group);
-                // Presentational attributes
-                if (!this.chart.styledMode) {
-                    tempElem.attr({
-                        stroke: options.buttonBorderColor,
-                        'stroke-width': options.buttonBorderWidth,
-                        fill: options.buttonBackgroundColor
-                    });
-                }
-                // Place the rectangle based on the rendered stroke width
-                tempElem.attr(tempElem.crisp({
-                    x: -0.5,
-                    y: -0.5,
-                    width: size + 1,
-                    height: size + 1,
-                    r: options.buttonBorderRadius
-                }, tempElem.strokeWidth()));
-                // Button arrow
-                tempElem = renderer
-                    .path(swapXY([[
-                        'M',
-                        size / 2 + (index ? -1 : 1),
-                        size / 2 - 3
-                    ], [
-                        'L',
-                        size / 2 + (index ? -1 : 1),
-                        size / 2 + 3
-                    ], [
-                        'L',
-                        size / 2 + (index ? 2 : -2),
-                        size / 2
-                    ]], options.vertical))
-                    .addClass('highcharts-scrollbar-arrow')
-                    .add(scrollbarButtons[index]);
-                if (!this.chart.styledMode) {
-                    tempElem.attr({
-                        fill: options.buttonArrowColor
-                    });
-                }
-            };
+            lineWidth: 1,
             /**
-             * @private
-             * @function Highcharts.Scrollbar#init
-             * @param {Highcharts.SVGRenderer} renderer
-             * @param {Highcharts.ScrollbarOptions} options
-             * @param {Highcharts.Chart} chart
+             * The fill for the handle.
+             *
+             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
              */
-            Scrollbar.prototype.init = function (renderer, options, chart) {
-                this.scrollbarButtons = [];
-                this.renderer = renderer;
-                this.userOptions = options;
-                this.options = merge(Scrollbar.defaultOptions, options);
-                this.chart = chart;
-                // backward compatibility
-                this.size = pick(this.options.size, this.options.height);
-                // Init
-                if (options.enabled) {
-                    this.render();
-                    this.addEvents();
-                }
-            };
-            Scrollbar.prototype.mouseDownHandler = function (e) {
-                var scroller = this;
-                var normalizedEvent = scroller.chart.pointer.normalize(e),
-                    mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);
-                scroller.chartX = mousePosition.chartX;
-                scroller.chartY = mousePosition.chartY;
-                scroller.initPositions = [scroller.from, scroller.to];
-                scroller.grabbedCenter = true;
-            };
+            backgroundColor: "#f2f2f2",
             /**
-             * Event handler for the mouse move event.
-             * @private
+             * The stroke for the handle border and the stripes inside.
+             *
+             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
              */
-            Scrollbar.prototype.mouseMoveHandler = function (e) {
-                var scroller = this;
-                var normalizedEvent = scroller.chart.pointer.normalize(e),
-                    options = scroller.options,
-                    direction = options.vertical ? 'chartY' : 'chartX',
-                    initPositions = scroller.initPositions || [],
-                    scrollPosition,
-                    chartPosition,
-                    change;
-                // In iOS, a mousemove event with e.pageX === 0 is fired when
-                // holding the finger down in the center of the scrollbar. This
-                // should be ignored.
-                if (scroller.grabbedCenter &&
-                    // #4696, scrollbar failed on Android
-                    (!e.touches || e.touches[0][direction] !== 0)) {
-                    chartPosition = scroller.cursorToScrollbarPosition(normalizedEvent)[direction];
-                    scrollPosition = scroller[direction];
-                    change = chartPosition - scrollPosition;
-                    scroller.hasDragged = true;
-                    scroller.updatePosition(initPositions[0] + change, initPositions[1] + change);
-                    if (scroller.hasDragged) {
-                        fireEvent(scroller, 'changed', {
-                            from: scroller.from,
-                            to: scroller.to,
-                            trigger: 'scrollbar',
-                            DOMType: e.type,
-                            DOMEvent: e
-                        });
-                    }
-                }
-            };
+            borderColor: "#999999",
+          },
+          /**
+           * The color of the mask covering the areas of the navigator series
+           * that are currently not visible in the main series. The default
+           * color is bluish with an opacity of 0.3 to see the series below.
+           *
+           * @see In styled mode, the mask is styled with the
+           *      `.highcharts-navigator-mask` and
+           *      `.highcharts-navigator-mask-inside` classes.
+           *
+           * @sample {highstock} stock/navigator/maskfill/
+           *         Blue, semi transparent mask
+           *
+           * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @default rgba(102,133,194,0.3)
+           */
+          maskFill: color("#6685c2").setOpacity(0.3).get(),
+          /**
+           * The color of the line marking the currently zoomed area in the
+           * navigator.
+           *
+           * @sample {highstock} stock/navigator/outline/
+           *         2px blue outline
+           *
+           * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @default #cccccc
+           */
+          outlineColor: "#cccccc",
+          /**
+           * The width of the line marking the currently zoomed area in the
+           * navigator.
+           *
+           * @see In styled mode, the outline stroke width is set with the
+           *      `.highcharts-navigator-outline` class.
+           *
+           * @sample {highstock} stock/navigator/outline/
+           *         2px blue outline
+           *
+           * @type    {number}
+           */
+          outlineWidth: 1,
+          /**
+           * Options for the navigator series. Available options are the same
+           * as any series, documented at [plotOptions](#plotOptions.series)
+           * and [series](#series).
+           *
+           * Unless data is explicitly defined on navigator.series, the data
+           * is borrowed from the first series in the chart.
+           *
+           * Default series options for the navigator series are:
+           * ```js
+           * series: {
+           *     type: 'areaspline',
+           *     fillOpacity: 0.05,
+           *     dataGrouping: {
+           *         smoothed: true
+           *     },
+           *     lineWidth: 1,
+           *     marker: {
+           *         enabled: false
+           *     }
+           * }
+           * ```
+           *
+           * @see In styled mode, the navigator series is styled with the
+           *      `.highcharts-navigator-series` class.
+           *
+           * @sample {highstock} stock/navigator/series-data/
+           *         Using a separate data set for the navigator
+           * @sample {highstock} stock/navigator/series/
+           *         A green navigator series
+           *
+           * @type {*|Array<*>|Highcharts.SeriesOptionsType|Array<Highcharts.SeriesOptionsType>}
+           */
+          series: {
             /**
-             * Event handler for the mouse up event.
-             * @private
+             * The type of the navigator series.
+             *
+             * Heads up:
+             * In column-type navigator, zooming is limited to at least one
+             * point with its `pointRange`.
+             *
+             * @sample {highstock} stock/navigator/column/
+             *         Column type navigator
+             *
+             * @type    {string}
+             * @default {highstock} `areaspline` if defined, otherwise `line`
+             * @default {gantt} gantt
              */
-            Scrollbar.prototype.mouseUpHandler = function (e) {
-                var scroller = this;
-                if (scroller.hasDragged) {
-                    fireEvent(scroller, 'changed', {
-                        from: scroller.from,
-                        to: scroller.to,
-                        trigger: 'scrollbar',
-                        DOMType: e.type,
-                        DOMEvent: e
-                    });
-                }
-                scroller.grabbedCenter =
-                    scroller.hasDragged =
-                        scroller.chartX =
-                            scroller.chartY = null;
-            };
+            type: defaultSeriesType,
             /**
-             * Position the scrollbar, method called from a parent with defined
-             * dimensions.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#position
-             * @param {number} x
-             *        x-position on the chart
-             * @param {number} y
-             *        y-position on the chart
-             * @param {number} width
-             *        width of the scrollbar
-             * @param {number} height
-             *        height of the scorllbar
-             * @return {void}
+             * The fill opacity of the navigator series.
              */
-            Scrollbar.prototype.position = function (x, y, width, height) {
-                var scroller = this,
-                    options = scroller.options,
-                    vertical = options.vertical,
-                    xOffset = height,
-                    yOffset = 0,
-                    method = scroller.rendered ? 'animate' : 'attr';
-                scroller.x = x;
-                scroller.y = y + this.trackBorderWidth;
-                scroller.width = width; // width with buttons
-                scroller.height = height;
-                scroller.xOffset = xOffset;
-                scroller.yOffset = yOffset;
-                // If Scrollbar is a vertical type, swap options:
-                if (vertical) {
-                    scroller.width = scroller.yOffset = width = yOffset = scroller.size;
-                    scroller.xOffset = xOffset = 0;
-                    scroller.barWidth = height - width * 2; // width without buttons
-                    scroller.x = x = x + scroller.options.margin;
-                }
-                else {
-                    scroller.height = scroller.xOffset = height = xOffset =
-                        scroller.size;
-                    scroller.barWidth = width - height * 2; // width without buttons
-                    scroller.y = scroller.y + scroller.options.margin;
-                }
-                // Set general position for a group:
-                scroller.group[method]({
-                    translateX: x,
-                    translateY: scroller.y
-                });
-                // Resize background/track:
-                scroller.track[method]({
-                    width: width,
-                    height: height
-                });
-                // Move right/bottom button ot it's place:
-                scroller.scrollbarButtons[1][method]({
-                    translateX: vertical ? 0 : width - xOffset,
-                    translateY: vertical ? height - yOffset : 0
-                });
-            };
+            fillOpacity: 0.05,
             /**
-             * Removes the event handlers attached previously with addEvents.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#removeEvents
-             * @return {void}
+             * The pixel line width of the navigator series.
              */
-            Scrollbar.prototype.removeEvents = function () {
-                this._events.forEach(function (args) {
-                    removeEvent.apply(null, args);
-                });
-                this._events.length = 0;
-            };
+            lineWidth: 1,
             /**
-             * Render scrollbar with all required items.
-             *
-             * @private
-             * @function Highcharts.Scrollbar#render
+             * @ignore-option
              */
-            Scrollbar.prototype.render = function () {
-                var scroller = this,
-                    renderer = scroller.renderer,
-                    options = scroller.options,
-                    size = scroller.size,
-                    styledMode = this.chart.styledMode,
-                    group;
-                // Draw the scrollbar group
-                scroller.group = group = renderer.g('scrollbar').attr({
-                    zIndex: options.zIndex,
-                    translateY: -99999
-                }).add();
-                // Draw the scrollbar track:
-                scroller.track = renderer.rect()
-                    .addClass('highcharts-scrollbar-track')
-                    .attr({
-                    x: 0,
-                    r: options.trackBorderRadius || 0,
-                    height: size,
-                    width: size
-                }).add(group);
-                if (!styledMode) {
-                    scroller.track.attr({
-                        fill: options.trackBackgroundColor,
-                        stroke: options.trackBorderColor,
-                        'stroke-width': options.trackBorderWidth
-                    });
-                }
-                this.trackBorderWidth = scroller.track.strokeWidth();
-                scroller.track.attr({
-                    y: -this.trackBorderWidth % 2 / 2
-                });
-                // Draw the scrollbar itself
-                scroller.scrollbarGroup = renderer.g().add(group);
-                scroller.scrollbar = renderer.rect()
-                    .addClass('highcharts-scrollbar-thumb')
-                    .attr({
-                    height: size,
-                    width: size,
-                    r: options.barBorderRadius || 0
-                }).add(scroller.scrollbarGroup);
-                scroller.scrollbarRifles = renderer
-                    .path(swapXY([
-                    ['M', -3, size / 4],
-                    ['L', -3, 2 * size / 3],
-                    ['M', 0, size / 4],
-                    ['L', 0, 2 * size / 3],
-                    ['M', 3, size / 4],
-                    ['L', 3, 2 * size / 3]
-                ], options.vertical))
-                    .addClass('highcharts-scrollbar-rifles')
-                    .add(scroller.scrollbarGroup);
-                if (!styledMode) {
-                    scroller.scrollbar.attr({
-                        fill: options.barBackgroundColor,
-                        stroke: options.barBorderColor,
-                        'stroke-width': options.barBorderWidth
-                    });
-                    scroller.scrollbarRifles.attr({
-                        stroke: options.rifleColor,
-                        'stroke-width': 1
-                    });
-                }
-                scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();
-                scroller.scrollbarGroup.translate(-scroller.scrollbarStrokeWidth % 2 / 2, -scroller.scrollbarStrokeWidth % 2 / 2);
-                // Draw the buttons:
-                scroller.drawScrollbarButton(0);
-                scroller.drawScrollbarButton(1);
-            };
+            compare: null,
             /**
-             * Set scrollbar size, with a given scale.
+             * Unless data is explicitly defined, the data is borrowed from the
+             * first series in the chart.
              *
-             * @private
-             * @function Highcharts.Scrollbar#setRange
-             * @param {number} from
-             *        scale (0-1) where bar should start
-             * @param {number} to
-             *        scale (0-1) where bar should end
-             * @return {void}
+             * @type      {Array<number|Array<number|string|null>|object|null>}
+             * @product   highstock
+             * @apioption navigator.series.data
              */
-            Scrollbar.prototype.setRange = function (from, to) {
-                var scroller = this,
-                    options = scroller.options,
-                    vertical = options.vertical,
-                    minWidth = options.minWidth,
-                    fullWidth = scroller.barWidth,
-                    fromPX,
-                    toPX,
-                    newPos,
-                    newSize,
-                    newRiflesPos,
-                    method = (this.rendered &&
-                        !this.hasDragged &&
-                        !(this.chart.navigator && this.chart.navigator.hasDragged)) ? 'animate' : 'attr';
-                if (!defined(fullWidth)) {
-                    return;
-                }
-                from = Math.max(from, 0);
-                fromPX = Math.ceil(fullWidth * from);
-                toPX = fullWidth * Math.min(to, 1);
-                scroller.calculatedWidth = newSize = correctFloat(toPX - fromPX);
-                // We need to recalculate position, if minWidth is used
-                if (newSize < minWidth) {
-                    fromPX = (fullWidth - minWidth + newSize) * from;
-                    newSize = minWidth;
-                }
-                newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);
-                newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2
-                // Store current position:
-                scroller.from = from;
-                scroller.to = to;
-                if (!vertical) {
-                    scroller.scrollbarGroup[method]({
-                        translateX: newPos
-                    });
-                    scroller.scrollbar[method]({
-                        width: newSize
-                    });
-                    scroller.scrollbarRifles[method]({
-                        translateX: newRiflesPos
-                    });
-                    scroller.scrollbarLeft = newPos;
-                    scroller.scrollbarTop = 0;
-                }
-                else {
-                    scroller.scrollbarGroup[method]({
-                        translateY: newPos
-                    });
-                    scroller.scrollbar[method]({
-                        height: newSize
-                    });
-                    scroller.scrollbarRifles[method]({
-                        translateY: newRiflesPos
-                    });
-                    scroller.scrollbarTop = newPos;
-                    scroller.scrollbarLeft = 0;
-                }
-                if (newSize <= 12) {
-                    scroller.scrollbarRifles.hide();
-                }
-                else {
-                    scroller.scrollbarRifles.show(true);
-                }
-                // Show or hide the scrollbar based on the showFull setting
-                if (options.showFull === false) {
-                    if (from <= 0 && to >= 1) {
-                        scroller.group.hide();
-                    }
-                    else {
-                        scroller.group.show();
-                    }
-                }
-                scroller.rendered = true;
-            };
-            Scrollbar.prototype.trackClick = function (e) {
-                var scroller = this;
-                var normalizedEvent = scroller.chart.pointer.normalize(e),
-                    range = scroller.to - scroller.from,
-                    top = scroller.y + scroller.scrollbarTop,
-                    left = scroller.x + scroller.scrollbarLeft;
-                if ((scroller.options.vertical && normalizedEvent.chartY > top) ||
-                    (!scroller.options.vertical && normalizedEvent.chartX > left)) {
-                    // On the top or on the left side of the track:
-                    scroller.updatePosition(scroller.from + range, scroller.to + range);
-                }
-                else {
-                    // On the bottom or the right side of the track:
-                    scroller.updatePosition(scroller.from - range, scroller.to - range);
-                }
-                fireEvent(scroller, 'changed', {
-                    from: scroller.from,
-                    to: scroller.to,
-                    trigger: 'scrollbar',
-                    DOMEvent: e
-                });
-            };
             /**
-             * Update the scrollbar with new options
+             * Data grouping options for the navigator series.
              *
-             * @private
-             * @function Highcharts.Scrollbar#update
-             * @param  {Highcharts.ScrollbarOptions} options
-             * @return {void}
+             * @extends plotOptions.series.dataGrouping
              */
-            Scrollbar.prototype.update = function (options) {
-                this.destroy();
-                this.init(this.chart.renderer, merge(true, this.options, options), this.chart);
-            };
+            dataGrouping: {
+              approximation: "average",
+              enabled: true,
+              groupPixelWidth: 2,
+              smoothed: true,
+              // Day and week differs from plotOptions.series.dataGrouping
+              units: [
+                ["millisecond", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
+                ["second", [1, 2, 5, 10, 15, 30]],
+                ["minute", [1, 2, 5, 10, 15, 30]],
+                ["hour", [1, 2, 3, 4, 6, 8, 12]],
+                ["day", [1, 2, 3, 4]],
+                ["week", [1, 2, 3]],
+                ["month", [1, 3, 6]],
+                ["year", null],
+              ],
+            },
             /**
-             * Update position option in the Scrollbar, with normalized 0-1 scale
+             * Data label options for the navigator series. Data labels are
+             * disabled by default on the navigator series.
              *
-             * @private
-             * @function Highcharts.Scrollbar#updatePosition
-             * @param  {number} from
-             * @param  {number} to
-             * @return {void}
+             * @extends plotOptions.series.dataLabels
              */
-            Scrollbar.prototype.updatePosition = function (from, to) {
-                if (to > 1) {
-                    from = correctFloat(1 - correctFloat(to - from));
-                    to = 1;
-                }
-                if (from < 0) {
-                    to = correctFloat(to - from);
-                    from = 0;
-                }
-                this.from = from;
-                this.to = to;
-            };
-            /* *
-             *
-             *  Static Properties
-             *
-             * */
+            dataLabels: {
+              enabled: false,
+              zIndex: 2, // #1839
+            },
+            id: "highcharts-navigator-series",
+            className: "highcharts-navigator-series",
             /**
+             * Sets the fill color of the navigator series.
              *
-             * The scrollbar is a means of panning over the X axis of a stock chart.
-             * Scrollbars can  also be applied to other types of axes.
-             *
-             * Another approach to scrollable charts is the [chart.scrollablePlotArea](
-             * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that
-             * is especially suitable for simpler cartesian charts on mobile.
-             *
-             * In styled mode, all the presentational options for the
-             * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,
-             * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,
-             * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.
+             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+             * @apioption navigator.series.color
+             */
+            /**
+             * Line color for the navigator series. Allows setting the color
+             * while disallowing the default candlestick setting.
              *
-             * @sample stock/yaxis/inverted-bar-scrollbar/
-             *         A scrollbar on a simple bar chart
+             * @type {Highcharts.ColorString|null}
+             */
+            lineColor: null,
+            marker: {
+              enabled: false,
+            },
+            /**
+             * Since Highstock v8, default value is the same as default
+             * `pointRange` defined for a specific type (e.g. `null` for
+             * column type).
              *
-             * @product highstock gantt
-             * @optionparent scrollbar
+             * In Highstock version < 8, defaults to 0.
              *
-             * @private
+             * @extends plotOptions.series.pointRange
+             * @type {number|null}
+             * @apioption navigator.series.pointRange
              */
-            Scrollbar.defaultOptions = {
-                /**
-                 * The height of the scrollbar. The height also applies to the width
-                 * of the scroll arrows so that they are always squares. Defaults to
-                 * 20 for touch devices and 14 for mouse devices.
-                 *
-                 * @sample stock/scrollbar/height/
-                 *         A 30px scrollbar
-                 *
-                 * @type    {number}
-                 * @default 20/14
-                 */
-                height: isTouchDevice ? 20 : 14,
-                /**
-                 * The border rounding radius of the bar.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                barBorderRadius: 0,
-                /**
-                 * The corner radius of the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                buttonBorderRadius: 0,
-                /**
-                 * Enable or disable the scrollbar.
-                 *
-                 * @sample stock/scrollbar/enabled/
-                 *         Disable the scrollbar, only use navigator
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption scrollbar.enabled
-                 */
-                /**
-                 * Whether to redraw the main chart as the scrollbar or the navigator
-                 * zoomed window is moved. Defaults to `true` for modern browsers and
-                 * `false` for legacy IE browsers as well as mobile devices.
-                 *
-                 * @sample stock/scrollbar/liveredraw
-                 *         Setting live redraw to false
-                 *
-                 * @type  {boolean}
-                 * @since 1.3
-                 */
-                liveRedraw: void 0,
-                /**
-                 * The margin between the scrollbar and its axis when the scrollbar is
-                 * applied directly to an axis.
-                 */
-                margin: 10,
-                /**
-                 * The minimum width of the scrollbar.
-                 *
-                 * @since 1.2.5
-                 */
-                minWidth: 6,
-                /**
-                 * Whether to show or hide the scrollbar when the scrolled content is
-                 * zoomed out to it full extent.
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption scrollbar.showFull
-                 */
-                step: 0.2,
-                /**
-                 * The z index of the scrollbar group.
-                 */
-                zIndex: 3,
-                /**
-                 * The background color of the scrollbar itself.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                barBackgroundColor: '#cccccc',
-                /**
-                 * The width of the bar's border.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                barBorderWidth: 1,
-                /**
-                 * The color of the scrollbar's border.
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                barBorderColor: '#cccccc',
-                /**
-                 * The color of the small arrow inside the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                buttonArrowColor: '#333333',
-                /**
-                 * The color of scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                buttonBackgroundColor: '#e6e6e6',
-                /**
-                 * The color of the border of the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                buttonBorderColor: '#cccccc',
-                /**
-                 * The border width of the scrollbar buttons.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                buttonBorderWidth: 1,
-                /**
-                 * The color of the small rifles in the middle of the scrollbar.
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                rifleColor: '#333333',
-                /**
-                 * The color of the track background.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                trackBackgroundColor: '#f2f2f2',
-                /**
-                 * The color of the border of the scrollbar track.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 */
-                trackBorderColor: '#f2f2f2',
-                /**
-                 * The corner radius of the border of the scrollbar track.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @apioption scrollbar.trackBorderRadius
-                 */
-                /**
-                 * The width of the border of the scrollbar track.
-                 *
-                 * @sample stock/scrollbar/style/
-                 *         Scrollbar styling
-                 */
-                trackBorderWidth: 1
-            };
-            return Scrollbar;
-        }());
-        if (!H.Scrollbar) {
-            defaultOptions.scrollbar = merge(true, Scrollbar.defaultOptions, defaultOptions.scrollbar);
-            H.Scrollbar = Scrollbar;
-            ScrollbarAxis.compose(Axis, Scrollbar);
-        }
-
-        return H.Scrollbar;
-    });
-    _registerModule(_modules, 'Core/Navigator.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Series/Series.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Series/LineSeries.js'], _modules['Core/Axis/NavigatorAxis.js'], _modules['Core/Options.js'], _modules['Core/Scrollbar.js'], _modules['Core/Utilities.js']], function (Axis, BaseSeries, Chart, Color, H, LineSeries, NavigatorAxis, O, Scrollbar, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var seriesTypes = BaseSeries.seriesTypes;
-        var color = Color.parse;
-        var hasTouch = H.hasTouch,
-            isTouchDevice = H.isTouchDevice;
-        var defaultOptions = O.defaultOptions;
-        var addEvent = U.addEvent,
-            clamp = U.clamp,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            destroyObjectProperties = U.destroyObjectProperties,
-            erase = U.erase,
-            extend = U.extend,
-            find = U.find,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            pick = U.pick,
-            removeEvent = U.removeEvent,
-            splat = U.splat;
-        var defaultSeriesType, 
-            // Finding the min or max of a set of variables where we don't know if they
-            // are defined, is a pattern that is repeated several places in Highcharts.
-            // Consider making this a global utility method.
-            numExt = function (extreme) {
-                var args = [];
-            for (var _i = 1; _i < arguments.length; _i++) {
-                args[_i - 1] = arguments[_i];
-            }
-            var numbers = [].filter.call(args,
-                isNumber);
-            if (numbers.length) {
-                return Math[extreme].apply(0, numbers);
-            }
-        };
-        defaultSeriesType = typeof seriesTypes.areaspline === 'undefined' ?
-            'line' :
-            'areaspline';
-        extend(defaultOptions, {
             /**
-             * Maximum range which can be set using the navigator's handles.
-             * Opposite of [xAxis.minRange](#xAxis.minRange).
+             * The threshold option. Setting it to 0 will make the default
+             * navigator area series draw its area from the 0 value and up.
              *
-             * @sample {highstock} stock/navigator/maxrange/
-             *         Defined max and min range
-             *
-             * @type      {number}
-             * @since     6.0.0
-             * @product   highstock gantt
-             * @apioption xAxis.maxRange
+             * @type {number|null}
              */
+            threshold: null,
+          },
+          /**
+           * Options for the navigator X axis. Default series options for the
+           * navigator xAxis are:
+           * ```js
+           * xAxis: {
+           *     tickWidth: 0,
+           *     lineWidth: 0,
+           *     gridLineWidth: 1,
+           *     tickPixelInterval: 200,
+           *     labels: {
+           *            align: 'left',
+           *         style: {
+           *             color: '#888'
+           *         },
+           *         x: 3,
+           *         y: -4
+           *     }
+           * }
+           * ```
+           *
+           * @extends   xAxis
+           * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,
+           *            showEmpty, maxRange
+           */
+          xAxis: {
             /**
-             * The navigator is a small series below the main series, displaying
-             * a view of the entire data set. It provides tools to zoom in and
-             * out on parts of the data as well as panning across the dataset.
+             * Additional range on the right side of the xAxis. Works similar to
+             * xAxis.maxPadding, but value is set in milliseconds.
+             * Can be set for both, main xAxis and navigator's xAxis.
              *
-             * @product      highstock gantt
-             * @optionparent navigator
+             * @since   6.0.0
              */
-            navigator: {
-                /**
-                 * Whether the navigator and scrollbar should adapt to updated data
-                 * in the base X axis. When loading data async, as in the demo below,
-                 * this should be `false`. Otherwise new data will trigger navigator
-                 * redraw, which will cause unwanted looping. In the demo below, the
-                 * data in the navigator is set only once. On navigating, only the main
-                 * chart content is updated.
-                 *
-                 * @sample {highstock} stock/demo/lazy-loading/
-                 *         Set to false with async data loading
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption navigator.adaptToUpdatedData
-                 */
-                /**
-                 * An integer identifying the index to use for the base series, or a
-                 * string representing the id of the series.
-                 *
-                 * **Note**: As of Highcharts 5.0, this is now a deprecated option.
-                 * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).
-                 *
-                 * @see [series.showInNavigator](#plotOptions.series.showInNavigator)
-                 *
-                 * @deprecated
-                 * @type      {number|string}
-                 * @default   0
-                 * @apioption navigator.baseSeries
-                 */
-                /**
-                 * Enable or disable the navigator.
-                 *
-                 * @sample {highstock} stock/navigator/enabled/
-                 *         Disable the navigator
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption navigator.enabled
-                 */
-                /**
-                 * When the chart is inverted, whether to draw the navigator on the
-                 * opposite side.
-                 *
-                 * @type      {boolean}
-                 * @default   false
-                 * @since     5.0.8
-                 * @apioption navigator.opposite
-                 */
-                /**
-                 * The height of the navigator.
-                 *
-                 * @sample {highstock} stock/navigator/height/
-                 *         A higher navigator
-                 */
-                height: 40,
-                /**
-                 * The distance from the nearest element, the X axis or X axis labels.
-                 *
-                 * @sample {highstock} stock/navigator/margin/
-                 *         A margin of 2 draws the navigator closer to the X axis labels
-                 */
-                margin: 25,
-                /**
-                 * Whether the mask should be inside the range marking the zoomed
-                 * range, or outside. In Highstock 1.x it was always `false`.
-                 *
-                 * @sample {highstock} stock/navigator/maskinside-false/
-                 *         False, mask outside
-                 *
-                 * @since   2.0
-                 */
-                maskInside: true,
-                /**
-                 * Options for the handles for dragging the zoomed area.
-                 *
-                 * @sample {highstock} stock/navigator/handles/
-                 *         Colored handles
-                 */
-                handles: {
-                    /**
-                     * Width for handles.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @since   6.0.0
-                     */
-                    width: 7,
-                    /**
-                     * Height for handles.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @since   6.0.0
-                     */
-                    height: 15,
-                    /**
-                     * Array to define shapes of handles. 0-index for left, 1-index for
-                     * right.
-                     *
-                     * Additionally, the URL to a graphic can be given on this form:
-                     * `url(graphic.png)`. Note that for the image to be applied to
-                     * exported charts, its URL needs to be accessible by the export
-                     * server.
-                     *
-                     * Custom callbacks for symbol path generation can also be added to
-                     * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then
-                     * used by its method name, as shown in the demo.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @type    {Array<string>}
-                     * @default ["navigator-handle", "navigator-handle"]
-                     * @since   6.0.0
-                     */
-                    symbols: ['navigator-handle', 'navigator-handle'],
-                    /**
-                     * Allows to enable/disable handles.
-                     *
-                     * @since   6.0.0
-                     */
-                    enabled: true,
-                    /**
-                     * The width for the handle border and the stripes inside.
-                     *
-                     * @sample {highstock} stock/navigator/styled-handles/
-                     *         Styled handles
-                     *
-                     * @since     6.0.0
-                     * @apioption navigator.handles.lineWidth
-                     */
-                    lineWidth: 1,
-                    /**
-                     * The fill for the handle.
-                     *
-                     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     */
-                    backgroundColor: '#f2f2f2',
-                    /**
-                     * The stroke for the handle border and the stripes inside.
-                     *
-                     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     */
-                    borderColor: '#999999'
-                },
-                /**
-                 * The color of the mask covering the areas of the navigator series
-                 * that are currently not visible in the main series. The default
-                 * color is bluish with an opacity of 0.3 to see the series below.
-                 *
-                 * @see In styled mode, the mask is styled with the
-                 *      `.highcharts-navigator-mask` and
-                 *      `.highcharts-navigator-mask-inside` classes.
-                 *
-                 * @sample {highstock} stock/navigator/maskfill/
-                 *         Blue, semi transparent mask
-                 *
-                 * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 * @default rgba(102,133,194,0.3)
-                 */
-                maskFill: color('#6685c2').setOpacity(0.3).get(),
-                /**
-                 * The color of the line marking the currently zoomed area in the
-                 * navigator.
-                 *
-                 * @sample {highstock} stock/navigator/outline/
-                 *         2px blue outline
-                 *
-                 * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 * @default #cccccc
-                 */
-                outlineColor: '#cccccc',
-                /**
-                 * The width of the line marking the currently zoomed area in the
-                 * navigator.
-                 *
-                 * @see In styled mode, the outline stroke width is set with the
-                 *      `.highcharts-navigator-outline` class.
-                 *
-                 * @sample {highstock} stock/navigator/outline/
-                 *         2px blue outline
-                 *
-                 * @type    {number}
-                 */
-                outlineWidth: 1,
-                /**
-                 * Options for the navigator series. Available options are the same
-                 * as any series, documented at [plotOptions](#plotOptions.series)
-                 * and [series](#series).
-                 *
-                 * Unless data is explicitly defined on navigator.series, the data
-                 * is borrowed from the first series in the chart.
-                 *
-                 * Default series options for the navigator series are:
-                 * ```js
-                 * series: {
-                 *     type: 'areaspline',
-                 *     fillOpacity: 0.05,
-                 *     dataGrouping: {
-                 *         smoothed: true
-                 *     },
-                 *     lineWidth: 1,
-                 *     marker: {
-                 *         enabled: false
-                 *     }
-                 * }
-                 * ```
-                 *
-                 * @see In styled mode, the navigator series is styled with the
-                 *      `.highcharts-navigator-series` class.
-                 *
-                 * @sample {highstock} stock/navigator/series-data/
-                 *         Using a separate data set for the navigator
-                 * @sample {highstock} stock/navigator/series/
-                 *         A green navigator series
-                 *
-                 * @type {*|Array<*>|Highcharts.SeriesOptionsType|Array<Highcharts.SeriesOptionsType>}
-                 */
-                series: {
-                    /**
-                     * The type of the navigator series.
-                     *
-                     * Heads up:
-                     * In column-type navigator, zooming is limited to at least one
-                     * point with its `pointRange`.
-                     *
-                     * @sample {highstock} stock/navigator/column/
-                     *         Column type navigator
-                     *
-                     * @type    {string}
-                     * @default {highstock} `areaspline` if defined, otherwise `line`
-                     * @default {gantt} gantt
-                     */
-                    type: defaultSeriesType,
-                    /**
-                     * The fill opacity of the navigator series.
-                     */
-                    fillOpacity: 0.05,
-                    /**
-                     * The pixel line width of the navigator series.
-                     */
-                    lineWidth: 1,
-                    /**
-                     * @ignore-option
-                     */
-                    compare: null,
-                    /**
-                     * Unless data is explicitly defined, the data is borrowed from the
-                     * first series in the chart.
-                     *
-                     * @type      {Array<number|Array<number|string|null>|object|null>}
-                     * @product   highstock
-                     * @apioption navigator.series.data
-                     */
-                    /**
-                     * Data grouping options for the navigator series.
-                     *
-                     * @extends plotOptions.series.dataGrouping
-                     */
-                    dataGrouping: {
-                        approximation: 'average',
-                        enabled: true,
-                        groupPixelWidth: 2,
-                        smoothed: true,
-                        // Day and week differs from plotOptions.series.dataGrouping
-                        units: [
-                            ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],
-                            ['second', [1, 2, 5, 10, 15, 30]],
-                            ['minute', [1, 2, 5, 10, 15, 30]],
-                            ['hour', [1, 2, 3, 4, 6, 8, 12]],
-                            ['day', [1, 2, 3, 4]],
-                            ['week', [1, 2, 3]],
-                            ['month', [1, 3, 6]],
-                            ['year', null]
-                        ]
-                    },
-                    /**
-                     * Data label options for the navigator series. Data labels are
-                     * disabled by default on the navigator series.
-                     *
-                     * @extends plotOptions.series.dataLabels
-                     */
-                    dataLabels: {
-                        enabled: false,
-                        zIndex: 2 // #1839
-                    },
-                    id: 'highcharts-navigator-series',
-                    className: 'highcharts-navigator-series',
-                    /**
-                     * Sets the fill color of the navigator series.
-                     *
-                     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     * @apioption navigator.series.color
-                     */
-                    /**
-                     * Line color for the navigator series. Allows setting the color
-                     * while disallowing the default candlestick setting.
-                     *
-                     * @type {Highcharts.ColorString|null}
-                     */
-                    lineColor: null,
-                    marker: {
-                        enabled: false
-                    },
-                    /**
-                     * Since Highstock v8, default value is the same as default
-                     * `pointRange` defined for a specific type (e.g. `null` for
-                     * column type).
-                     *
-                     * In Highstock version < 8, defaults to 0.
-                     *
-                     * @extends plotOptions.series.pointRange
-                     * @type {number|null}
-                     * @apioption navigator.series.pointRange
-                     */
-                    /**
-                     * The threshold option. Setting it to 0 will make the default
-                     * navigator area series draw its area from the 0 value and up.
-                     *
-                     * @type {number|null}
-                     */
-                    threshold: null
-                },
-                /**
-                 * Options for the navigator X axis. Default series options for the
-                 * navigator xAxis are:
-                 * ```js
-                 * xAxis: {
-                 *     tickWidth: 0,
-                 *     lineWidth: 0,
-                 *     gridLineWidth: 1,
-                 *     tickPixelInterval: 200,
-                 *     labels: {
-                 *            align: 'left',
-                 *         style: {
-                 *             color: '#888'
-                 *         },
-                 *         x: 3,
-                 *         y: -4
-                 *     }
-                 * }
-                 * ```
-                 *
-                 * @extends   xAxis
-                 * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,
-                 *            showEmpty, maxRange
-                 */
-                xAxis: {
-                    /**
-                     * Additional range on the right side of the xAxis. Works similar to
-                     * xAxis.maxPadding, but value is set in milliseconds.
-                     * Can be set for both, main xAxis and navigator's xAxis.
-                     *
-                     * @since   6.0.0
-                     */
-                    overscroll: 0,
-                    className: 'highcharts-navigator-xaxis',
-                    tickLength: 0,
-                    lineWidth: 0,
-                    gridLineColor: '#e6e6e6',
-                    gridLineWidth: 1,
-                    tickPixelInterval: 200,
-                    labels: {
-                        align: 'left',
-                        /**
-                         * @type {Highcharts.CSSObject}
-                         */
-                        style: {
-                            /** @ignore */
-                            color: '#999999'
-                        },
-                        x: 3,
-                        y: -4
-                    },
-                    crosshair: false
-                },
-                /**
-                 * Options for the navigator Y axis. Default series options for the
-                 * navigator yAxis are:
-                 * ```js
-                 * yAxis: {
-                 *     gridLineWidth: 0,
-                 *     startOnTick: false,
-                 *     endOnTick: false,
-                 *     minPadding: 0.1,
-                 *     maxPadding: 0.1,
-                 *     labels: {
-                 *         enabled: false
-                 *     },
-                 *     title: {
-                 *         text: null
-                 *     },
-                 *     tickWidth: 0
-                 * }
-                 * ```
-                 *
-                 * @extends   yAxis
-                 * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,
-                 *            showEmpty, scrollbar, top, units, maxRange, minLength,
-                 *            maxLength, resize
-                 */
-                yAxis: {
-                    className: 'highcharts-navigator-yaxis',
-                    gridLineWidth: 0,
-                    startOnTick: false,
-                    endOnTick: false,
-                    minPadding: 0.1,
-                    maxPadding: 0.1,
-                    labels: {
-                        enabled: false
-                    },
-                    crosshair: false,
-                    title: {
-                        text: null
-                    },
-                    tickLength: 0,
-                    tickWidth: 0
-                }
-            }
-        });
-        /* eslint-disable no-invalid-this, valid-jsdoc */
+            overscroll: 0,
+            className: "highcharts-navigator-xaxis",
+            tickLength: 0,
+            lineWidth: 0,
+            gridLineColor: "#e6e6e6",
+            gridLineWidth: 1,
+            tickPixelInterval: 200,
+            labels: {
+              align: "left",
+              /**
+               * @type {Highcharts.CSSObject}
+               */
+              style: {
+                /** @ignore */
+                color: "#999999",
+              },
+              x: 3,
+              y: -4,
+            },
+            crosshair: false,
+          },
+          /**
+           * Options for the navigator Y axis. Default series options for the
+           * navigator yAxis are:
+           * ```js
+           * yAxis: {
+           *     gridLineWidth: 0,
+           *     startOnTick: false,
+           *     endOnTick: false,
+           *     minPadding: 0.1,
+           *     maxPadding: 0.1,
+           *     labels: {
+           *         enabled: false
+           *     },
+           *     title: {
+           *         text: null
+           *     },
+           *     tickWidth: 0
+           * }
+           * ```
+           *
+           * @extends   yAxis
+           * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,
+           *            showEmpty, scrollbar, top, units, maxRange, minLength,
+           *            maxLength, resize
+           */
+          yAxis: {
+            className: "highcharts-navigator-yaxis",
+            gridLineWidth: 0,
+            startOnTick: false,
+            endOnTick: false,
+            minPadding: 0.1,
+            maxPadding: 0.1,
+            labels: {
+              enabled: false,
+            },
+            crosshair: false,
+            title: {
+              text: null,
+            },
+            tickLength: 0,
+            tickWidth: 0,
+          },
+        },
+      });
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * Draw one of the handles on the side of the zoomed range in the navigator
+       *
+       * @private
+       * @function Highcharts.Renderer#symbols.navigator-handle
+       * @param {number} x
+       * @param {number} y
+       * @param {number} w
+       * @param {number} h
+       * @param {Highcharts.NavigatorHandlesOptions} options
+       * @return {Highcharts.SVGPathArray}
+       *         Path to be used in a handle
+       */
+      H.Renderer.prototype.symbols["navigator-handle"] = function (
+        x,
+        y,
+        w,
+        h,
+        options
+      ) {
+        var halfWidth = ((options && options.width) || 0) / 2,
+          markerPosition = Math.round(halfWidth / 3) + 0.5,
+          height = (options && options.height) || 0;
+        return [
+          ["M", -halfWidth - 1, 0.5],
+          ["L", halfWidth, 0.5],
+          ["L", halfWidth, height + 0.5],
+          ["L", -halfWidth - 1, height + 0.5],
+          ["L", -halfWidth - 1, 0.5],
+          ["M", -markerPosition, 4],
+          ["L", -markerPosition, height - 3],
+          ["M", markerPosition - 1, 4],
+          ["L", markerPosition - 1, height - 3],
+        ];
+      };
+      /**
+       * The Navigator class
+       *
+       * @private
+       * @class
+       * @name Highcharts.Navigator
+       *
+       * @param {Highcharts.Chart} chart
+       *        Chart object
+       */
+      var Navigator = /** @class */ (function () {
+        function Navigator(chart) {
+          this.baseSeries = void 0;
+          this.chart = void 0;
+          this.handles = void 0;
+          this.height = void 0;
+          this.left = void 0;
+          this.navigatorEnabled = void 0;
+          this.navigatorGroup = void 0;
+          this.navigatorOptions = void 0;
+          this.navigatorSeries = void 0;
+          this.navigatorSize = void 0;
+          this.opposite = void 0;
+          this.outline = void 0;
+          this.outlineHeight = void 0;
+          this.range = void 0;
+          this.rendered = void 0;
+          this.shades = void 0;
+          this.size = void 0;
+          this.top = void 0;
+          this.xAxis = void 0;
+          this.yAxis = void 0;
+          this.zoomedMax = void 0;
+          this.zoomedMin = void 0;
+          this.init(chart);
+        }
         /**
          * Draw one of the handles on the side of the zoomed range in the navigator
          *
          * @private
-         * @function Highcharts.Renderer#symbols.navigator-handle
+         * @function Highcharts.Navigator#drawHandle
+         *
          * @param {number} x
-         * @param {number} y
-         * @param {number} w
-         * @param {number} h
-         * @param {Highcharts.NavigatorHandlesOptions} options
-         * @return {Highcharts.SVGPathArray}
-         *         Path to be used in a handle
+         *        The x center for the handle
+         *
+         * @param {number} index
+         *        0 for left and 1 for right
+         *
+         * @param {boolean|undefined} inverted
+         *        flag for chart.inverted
+         *
+         * @param {string} verb
+         *        use 'animate' or 'attr'
          */
-        H.Renderer.prototype.symbols['navigator-handle'] = function (x, y, w, h, options) {
-            var halfWidth = (options && options.width || 0) / 2,
-                markerPosition = Math.round(halfWidth / 3) + 0.5,
-                height = options && options.height || 0;
-            return [
-                ['M', -halfWidth - 1, 0.5],
-                ['L', halfWidth, 0.5],
-                ['L', halfWidth, height + 0.5],
-                ['L', -halfWidth - 1, height + 0.5],
-                ['L', -halfWidth - 1, 0.5],
-                ['M', -markerPosition, 4],
-                ['L', -markerPosition, height - 3],
-                ['M', markerPosition - 1, 4],
-                ['L', markerPosition - 1, height - 3]
-            ];
+        Navigator.prototype.drawHandle = function (x, index, inverted, verb) {
+          var navigator = this,
+            height = navigator.navigatorOptions.handles.height;
+          // Place it
+          navigator.handles[index][verb](
+            inverted
+              ? {
+                  translateX: Math.round(navigator.left + navigator.height / 2),
+                  translateY: Math.round(
+                    navigator.top + parseInt(x, 10) + 0.5 - height
+                  ),
+                }
+              : {
+                  translateX: Math.round(navigator.left + parseInt(x, 10)),
+                  translateY: Math.round(
+                    navigator.top + navigator.height / 2 - height / 2 - 1
+                  ),
+                }
+          );
         };
         /**
-         * The Navigator class
+         * Render outline around the zoomed range
          *
          * @private
-         * @class
-         * @name Highcharts.Navigator
+         * @function Highcharts.Navigator#drawOutline
          *
-         * @param {Highcharts.Chart} chart
-         *        Chart object
+         * @param {number} zoomedMin
+         *        in pixels position where zoomed range starts
+         *
+         * @param {number} zoomedMax
+         *        in pixels position where zoomed range ends
+         *
+         * @param {boolean|undefined} inverted
+         *        flag if chart is inverted
+         *
+         * @param {string} verb
+         *        use 'animate' or 'attr'
          */
-        var Navigator = /** @class */ (function () {
-                function Navigator(chart) {
-                    this.baseSeries = void 0;
-                this.chart = void 0;
-                this.handles = void 0;
-                this.height = void 0;
-                this.left = void 0;
-                this.navigatorEnabled = void 0;
-                this.navigatorGroup = void 0;
-                this.navigatorOptions = void 0;
-                this.navigatorSeries = void 0;
-                this.navigatorSize = void 0;
-                this.opposite = void 0;
-                this.outline = void 0;
-                this.outlineHeight = void 0;
-                this.range = void 0;
-                this.rendered = void 0;
-                this.shades = void 0;
-                this.size = void 0;
-                this.top = void 0;
-                this.xAxis = void 0;
-                this.yAxis = void 0;
-                this.zoomedMax = void 0;
-                this.zoomedMin = void 0;
-                this.init(chart);
+        Navigator.prototype.drawOutline = function (
+          zoomedMin,
+          zoomedMax,
+          inverted,
+          verb
+        ) {
+          var navigator = this,
+            maskInside = navigator.navigatorOptions.maskInside,
+            outlineWidth = navigator.outline.strokeWidth(),
+            halfOutline = outlineWidth / 2,
+            outlineCorrection = (outlineWidth % 2) / 2, // #5800
+            outlineHeight = navigator.outlineHeight,
+            scrollbarHeight = navigator.scrollbarHeight || 0,
+            navigatorSize = navigator.size,
+            left = navigator.left - scrollbarHeight,
+            navigatorTop = navigator.top,
+            verticalMin,
+            path;
+          if (inverted) {
+            left -= halfOutline;
+            verticalMin = navigatorTop + zoomedMax + outlineCorrection;
+            zoomedMax = navigatorTop + zoomedMin + outlineCorrection;
+            path = [
+              [
+                "M",
+                left + outlineHeight,
+                navigatorTop - scrollbarHeight - outlineCorrection,
+              ],
+              ["L", left + outlineHeight, verticalMin],
+              ["L", left, verticalMin],
+              ["L", left, zoomedMax],
+              ["L", left + outlineHeight, zoomedMax],
+              [
+                "L",
+                left + outlineHeight,
+                navigatorTop + navigatorSize + scrollbarHeight,
+              ],
+            ];
+            if (maskInside) {
+              path.push(
+                ["M", left + outlineHeight, verticalMin - halfOutline], // upper left of zoomed range
+                ["L", left + outlineHeight, zoomedMax + halfOutline] // upper right of z.r.
+              );
             }
-            /**
-             * Draw one of the handles on the side of the zoomed range in the navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#drawHandle
-             *
-             * @param {number} x
-             *        The x center for the handle
-             *
-             * @param {number} index
-             *        0 for left and 1 for right
-             *
-             * @param {boolean|undefined} inverted
-             *        flag for chart.inverted
-             *
-             * @param {string} verb
-             *        use 'animate' or 'attr'
-             */
-            Navigator.prototype.drawHandle = function (x, index, inverted, verb) {
-                var navigator = this,
-                    height = navigator.navigatorOptions.handles.height;
-                // Place it
-                navigator.handles[index][verb](inverted ? {
-                    translateX: Math.round(navigator.left + navigator.height / 2),
-                    translateY: Math.round(navigator.top + parseInt(x, 10) + 0.5 - height)
-                } : {
-                    translateX: Math.round(navigator.left + parseInt(x, 10)),
-                    translateY: Math.round(navigator.top + navigator.height / 2 - height / 2 - 1)
-                });
-            };
-            /**
-             * Render outline around the zoomed range
-             *
-             * @private
-             * @function Highcharts.Navigator#drawOutline
-             *
-             * @param {number} zoomedMin
-             *        in pixels position where zoomed range starts
-             *
-             * @param {number} zoomedMax
-             *        in pixels position where zoomed range ends
-             *
-             * @param {boolean|undefined} inverted
-             *        flag if chart is inverted
-             *
-             * @param {string} verb
-             *        use 'animate' or 'attr'
-             */
-            Navigator.prototype.drawOutline = function (zoomedMin, zoomedMax, inverted, verb) {
-                var navigator = this,
-                    maskInside = navigator.navigatorOptions.maskInside,
-                    outlineWidth = navigator.outline.strokeWidth(),
-                    halfOutline = outlineWidth / 2,
-                    outlineCorrection = (outlineWidth % 2) / 2, // #5800
-                    outlineHeight = navigator.outlineHeight,
-                    scrollbarHeight = navigator.scrollbarHeight || 0,
-                    navigatorSize = navigator.size,
-                    left = navigator.left - scrollbarHeight,
-                    navigatorTop = navigator.top,
-                    verticalMin,
-                    path;
-                if (inverted) {
-                    left -= halfOutline;
-                    verticalMin = navigatorTop + zoomedMax + outlineCorrection;
-                    zoomedMax = navigatorTop + zoomedMin + outlineCorrection;
-                    path = [
-                        ['M', left + outlineHeight, navigatorTop - scrollbarHeight - outlineCorrection],
-                        ['L', left + outlineHeight, verticalMin],
-                        ['L', left, verticalMin],
-                        ['L', left, zoomedMax],
-                        ['L', left + outlineHeight, zoomedMax],
-                        ['L', left + outlineHeight, navigatorTop + navigatorSize + scrollbarHeight]
-                    ];
-                    if (maskInside) {
-                        path.push(['M', left + outlineHeight, verticalMin - halfOutline], // upper left of zoomed range
-                        ['L', left + outlineHeight, zoomedMax + halfOutline] // upper right of z.r.
-                        );
-                    }
-                }
-                else {
-                    zoomedMin += left + scrollbarHeight - outlineCorrection;
-                    zoomedMax += left + scrollbarHeight - outlineCorrection;
-                    navigatorTop += halfOutline;
-                    path = [
-                        ['M', left, navigatorTop],
-                        ['L', zoomedMin, navigatorTop],
-                        ['L', zoomedMin, navigatorTop + outlineHeight],
-                        ['L', zoomedMax, navigatorTop + outlineHeight],
-                        ['L', zoomedMax, navigatorTop],
-                        ['L', left + navigatorSize + scrollbarHeight * 2, navigatorTop] // right
-                    ];
-                    if (maskInside) {
-                        path.push(['M', zoomedMin - halfOutline, navigatorTop], // upper left of zoomed range
-                        ['L', zoomedMax + halfOutline, navigatorTop] // upper right of z.r.
-                        );
-                    }
-                }
-                navigator.outline[verb]({
-                    d: path
-                });
-            };
-            /**
-             * Render outline around the zoomed range
-             *
-             * @private
-             * @function Highcharts.Navigator#drawMasks
-             *
-             * @param {number} zoomedMin
-             *        in pixels position where zoomed range starts
-             *
-             * @param {number} zoomedMax
-             *        in pixels position where zoomed range ends
-             *
-             * @param {boolean|undefined} inverted
-             *        flag if chart is inverted
-             *
-             * @param {string} verb
-             *        use 'animate' or 'attr'
-             */
-            Navigator.prototype.drawMasks = function (zoomedMin, zoomedMax, inverted, verb) {
-                var navigator = this,
-                    left = navigator.left,
-                    top = navigator.top,
-                    navigatorHeight = navigator.height,
-                    height,
-                    width,
-                    x,
-                    y;
-                // Determine rectangle position & size
-                // According to (non)inverted position:
-                if (inverted) {
-                    x = [left, left, left];
-                    y = [top, top + zoomedMin, top + zoomedMax];
-                    width = [navigatorHeight, navigatorHeight, navigatorHeight];
-                    height = [
-                        zoomedMin,
-                        zoomedMax - zoomedMin,
-                        navigator.size - zoomedMax
-                    ];
-                }
-                else {
-                    x = [left, left + zoomedMin, left + zoomedMax];
-                    y = [top, top, top];
-                    width = [
-                        zoomedMin,
-                        zoomedMax - zoomedMin,
-                        navigator.size - zoomedMax
-                    ];
-                    height = [navigatorHeight, navigatorHeight, navigatorHeight];
-                }
-                navigator.shades.forEach(function (shade, i) {
-                    shade[verb]({
-                        x: x[i],
-                        y: y[i],
-                        width: width[i],
-                        height: height[i]
-                    });
-                });
+          } else {
+            zoomedMin += left + scrollbarHeight - outlineCorrection;
+            zoomedMax += left + scrollbarHeight - outlineCorrection;
+            navigatorTop += halfOutline;
+            path = [
+              ["M", left, navigatorTop],
+              ["L", zoomedMin, navigatorTop],
+              ["L", zoomedMin, navigatorTop + outlineHeight],
+              ["L", zoomedMax, navigatorTop + outlineHeight],
+              ["L", zoomedMax, navigatorTop],
+              ["L", left + navigatorSize + scrollbarHeight * 2, navigatorTop], // right
+            ];
+            if (maskInside) {
+              path.push(
+                ["M", zoomedMin - halfOutline, navigatorTop], // upper left of zoomed range
+                ["L", zoomedMax + halfOutline, navigatorTop] // upper right of z.r.
+              );
+            }
+          }
+          navigator.outline[verb]({
+            d: path,
+          });
+        };
+        /**
+         * Render outline around the zoomed range
+         *
+         * @private
+         * @function Highcharts.Navigator#drawMasks
+         *
+         * @param {number} zoomedMin
+         *        in pixels position where zoomed range starts
+         *
+         * @param {number} zoomedMax
+         *        in pixels position where zoomed range ends
+         *
+         * @param {boolean|undefined} inverted
+         *        flag if chart is inverted
+         *
+         * @param {string} verb
+         *        use 'animate' or 'attr'
+         */
+        Navigator.prototype.drawMasks = function (
+          zoomedMin,
+          zoomedMax,
+          inverted,
+          verb
+        ) {
+          var navigator = this,
+            left = navigator.left,
+            top = navigator.top,
+            navigatorHeight = navigator.height,
+            height,
+            width,
+            x,
+            y;
+          // Determine rectangle position & size
+          // According to (non)inverted position:
+          if (inverted) {
+            x = [left, left, left];
+            y = [top, top + zoomedMin, top + zoomedMax];
+            width = [navigatorHeight, navigatorHeight, navigatorHeight];
+            height = [
+              zoomedMin,
+              zoomedMax - zoomedMin,
+              navigator.size - zoomedMax,
+            ];
+          } else {
+            x = [left, left + zoomedMin, left + zoomedMax];
+            y = [top, top, top];
+            width = [
+              zoomedMin,
+              zoomedMax - zoomedMin,
+              navigator.size - zoomedMax,
+            ];
+            height = [navigatorHeight, navigatorHeight, navigatorHeight];
+          }
+          navigator.shades.forEach(function (shade, i) {
+            shade[verb]({
+              x: x[i],
+              y: y[i],
+              width: width[i],
+              height: height[i],
+            });
+          });
+        };
+        /**
+         * Generate DOM elements for a navigator:
+         *
+         * - main navigator group
+         *
+         * - all shades
+         *
+         * - outline
+         *
+         * - handles
+         *
+         * @private
+         * @function Highcharts.Navigator#renderElements
+         */
+        Navigator.prototype.renderElements = function () {
+          var navigator = this,
+            navigatorOptions = navigator.navigatorOptions,
+            maskInside = navigatorOptions.maskInside,
+            chart = navigator.chart,
+            inverted = chart.inverted,
+            renderer = chart.renderer,
+            navigatorGroup,
+            mouseCursor = {
+              cursor: inverted ? "ns-resize" : "ew-resize",
             };
-            /**
-             * Generate DOM elements for a navigator:
-             *
-             * - main navigator group
-             *
-             * - all shades
-             *
-             * - outline
-             *
-             * - handles
-             *
-             * @private
-             * @function Highcharts.Navigator#renderElements
-             */
-            Navigator.prototype.renderElements = function () {
-                var navigator = this,
-                    navigatorOptions = navigator.navigatorOptions,
-                    maskInside = navigatorOptions.maskInside,
-                    chart = navigator.chart,
-                    inverted = chart.inverted,
-                    renderer = chart.renderer,
-                    navigatorGroup,
-                    mouseCursor = {
-                        cursor: inverted ? 'ns-resize' : 'ew-resize'
-                    };
-                // Create the main navigator group
-                navigator.navigatorGroup = navigatorGroup = renderer.g('navigator')
-                    .attr({
-                    zIndex: 8,
-                    visibility: 'hidden'
+          // Create the main navigator group
+          navigator.navigatorGroup = navigatorGroup = renderer
+            .g("navigator")
+            .attr({
+              zIndex: 8,
+              visibility: "hidden",
+            })
+            .add();
+          // Create masks, each mask will get events and fill:
+          [!maskInside, maskInside, !maskInside].forEach(function (
+            hasMask,
+            index
+          ) {
+            navigator.shades[index] = renderer
+              .rect()
+              .addClass(
+                "highcharts-navigator-mask" +
+                  (index === 1 ? "-inside" : "-outside")
+              )
+              .add(navigatorGroup);
+            if (!chart.styledMode) {
+              navigator.shades[index]
+                .attr({
+                  fill: hasMask ? navigatorOptions.maskFill : "rgba(0,0,0,0)",
                 })
-                    .add();
-                // Create masks, each mask will get events and fill:
-                [
-                    !maskInside,
-                    maskInside,
-                    !maskInside
-                ].forEach(function (hasMask, index) {
-                    navigator.shades[index] = renderer.rect()
-                        .addClass('highcharts-navigator-mask' +
-                        (index === 1 ? '-inside' : '-outside'))
-                        .add(navigatorGroup);
-                    if (!chart.styledMode) {
-                        navigator.shades[index]
-                            .attr({
-                            fill: hasMask ?
-                                navigatorOptions.maskFill :
-                                'rgba(0,0,0,0)'
-                        })
-                            .css((index === 1) && mouseCursor);
-                    }
-                });
-                // Create the outline:
-                navigator.outline = renderer.path()
-                    .addClass('highcharts-navigator-outline')
-                    .add(navigatorGroup);
-                if (!chart.styledMode) {
-                    navigator.outline.attr({
-                        'stroke-width': navigatorOptions.outlineWidth,
-                        stroke: navigatorOptions.outlineColor
-                    });
-                }
-                // Create the handlers:
-                if (navigatorOptions.handles.enabled) {
-                    [0, 1].forEach(function (index) {
-                        navigatorOptions.handles.inverted = chart.inverted;
-                        navigator.handles[index] = renderer.symbol(navigatorOptions.handles.symbols[index], -navigatorOptions.handles.width / 2 - 1, 0, navigatorOptions.handles.width, navigatorOptions.handles.height, navigatorOptions.handles);
-                        // zIndex = 6 for right handle, 7 for left.
-                        // Can't be 10, because of the tooltip in inverted chart #2908
-                        navigator.handles[index].attr({ zIndex: 7 - index })
-                            .addClass('highcharts-navigator-handle ' +
-                            'highcharts-navigator-handle-' +
-                            ['left', 'right'][index]).add(navigatorGroup);
-                        if (!chart.styledMode) {
-                            var handlesOptions = navigatorOptions.handles;
-                            navigator.handles[index]
-                                .attr({
-                                fill: handlesOptions.backgroundColor,
-                                stroke: handlesOptions.borderColor,
-                                'stroke-width': handlesOptions.lineWidth
-                            })
-                                .css(mouseCursor);
-                        }
-                    });
-                }
-            };
-            /**
-             * Update navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#update
-             *
-             * @param {Highcharts.NavigatorOptions} options
-             *        Options to merge in when updating navigator
-             */
-            Navigator.prototype.update = function (options) {
-                // Remove references to old navigator series in base series
-                (this.series || []).forEach(function (series) {
-                    if (series.baseSeries) {
-                        delete series.baseSeries.navigatorSeries;
-                    }
-                });
-                // Destroy and rebuild navigator
-                this.destroy();
-                var chartOptions = this.chart.options;
-                merge(true, chartOptions.navigator, this.options, options);
-                this.init(this.chart);
-            };
-            /**
-             * Render the navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#render
-             * @param {number} min
-             *        X axis value minimum
-             * @param {number} max
-             *        X axis value maximum
-             * @param {number} [pxMin]
-             *        Pixel value minimum
-             * @param {number} [pxMax]
-             *        Pixel value maximum
-             * @return {void}
-             */
-            Navigator.prototype.render = function (min, max, pxMin, pxMax) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    navigatorWidth,
-                    scrollbarLeft,
-                    scrollbarTop,
-                    scrollbarHeight = navigator.scrollbarHeight,
-                    navigatorSize,
-                    xAxis = navigator.xAxis,
-                    pointRange = xAxis.pointRange || 0,
-                    scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis,
-                    navigatorEnabled = navigator.navigatorEnabled,
-                    zoomedMin,
-                    zoomedMax,
-                    rendered = navigator.rendered,
-                    inverted = chart.inverted,
-                    verb,
-                    newMin,
-                    newMax,
-                    currentRange,
-                    minRange = chart.xAxis[0].minRange,
-                    maxRange = chart.xAxis[0].options.maxRange;
-                // Don't redraw while moving the handles (#4703).
-                if (this.hasDragged && !defined(pxMin)) {
-                    return;
-                }
-                min = correctFloat(min - pointRange / 2);
-                max = correctFloat(max + pointRange / 2);
-                // Don't render the navigator until we have data (#486, #4202, #5172).
-                if (!isNumber(min) || !isNumber(max)) {
-                    // However, if navigator was already rendered, we may need to resize
-                    // it. For example hidden series, but visible navigator (#6022).
-                    if (rendered) {
-                        pxMin = 0;
-                        pxMax = pick(xAxis.width, scrollbarXAxis.width);
-                    }
-                    else {
-                        return;
-                    }
-                }
-                navigator.left = pick(xAxis.left, 
-                // in case of scrollbar only, without navigator
-                chart.plotLeft + scrollbarHeight +
-                    (inverted ? chart.plotWidth : 0));
-                navigator.size = zoomedMax = navigatorSize = pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -
-                    2 * scrollbarHeight);
-                if (inverted) {
-                    navigatorWidth = scrollbarHeight;
-                }
-                else {
-                    navigatorWidth = navigatorSize + 2 * scrollbarHeight;
-                }
-                // Get the pixel position of the handles
-                pxMin = pick(pxMin, xAxis.toPixels(min, true));
-                pxMax = pick(pxMax, xAxis.toPixels(max, true));
-                // Verify (#1851, #2238)
-                if (!isNumber(pxMin) || Math.abs(pxMin) === Infinity) {
-                    pxMin = 0;
-                    pxMax = navigatorWidth;
-                }
-                // Are we below the minRange? (#2618, #6191)
-                newMin = xAxis.toValue(pxMin, true);
-                newMax = xAxis.toValue(pxMax, true);
-                currentRange = Math.abs(correctFloat(newMax - newMin));
-                if (currentRange < minRange) {
-                    if (this.grabbedLeft) {
-                        pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);
-                    }
-                    else if (this.grabbedRight) {
-                        pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);
-                    }
-                }
-                else if (defined(maxRange) &&
-                    correctFloat(currentRange - pointRange) > maxRange) {
-                    if (this.grabbedLeft) {
-                        pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);
-                    }
-                    else if (this.grabbedRight) {
-                        pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);
-                    }
-                }
-                // Handles are allowed to cross, but never exceed the plot area
-                navigator.zoomedMax = clamp(Math.max(pxMin, pxMax), 0, zoomedMax);
-                navigator.zoomedMin = clamp(navigator.fixedWidth ?
-                    navigator.zoomedMax - navigator.fixedWidth :
-                    Math.min(pxMin, pxMax), 0, zoomedMax);
-                navigator.range = navigator.zoomedMax - navigator.zoomedMin;
-                zoomedMax = Math.round(navigator.zoomedMax);
-                zoomedMin = Math.round(navigator.zoomedMin);
-                if (navigatorEnabled) {
-                    navigator.navigatorGroup.attr({
-                        visibility: 'visible'
-                    });
-                    // Place elements
-                    verb = rendered && !navigator.hasDragged ? 'animate' : 'attr';
-                    navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
-                    navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
-                    if (navigator.navigatorOptions.handles.enabled) {
-                        navigator.drawHandle(zoomedMin, 0, inverted, verb);
-                        navigator.drawHandle(zoomedMax, 1, inverted, verb);
-                    }
-                }
-                if (navigator.scrollbar) {
-                    if (inverted) {
-                        scrollbarTop = navigator.top - scrollbarHeight;
-                        scrollbarLeft = navigator.left - scrollbarHeight +
-                            (navigatorEnabled || !scrollbarXAxis.opposite ? 0 :
-                                // Multiple axes has offsets:
-                                (scrollbarXAxis.titleOffset || 0) +
-                                    // Self margin from the axis.title
-                                    scrollbarXAxis.axisTitleMargin);
-                        scrollbarHeight = navigatorSize + 2 * scrollbarHeight;
-                    }
-                    else {
-                        scrollbarTop = navigator.top + (navigatorEnabled ?
-                            navigator.height :
-                            -scrollbarHeight);
-                        scrollbarLeft = navigator.left - scrollbarHeight;
-                    }
-                    // Reposition scrollbar
-                    navigator.scrollbar.position(scrollbarLeft, scrollbarTop, navigatorWidth, scrollbarHeight);
-                    // Keep scale 0-1
-                    navigator.scrollbar.setRange(
-                    // Use real value, not rounded because range can be very small
-                    // (#1716)
-                    navigator.zoomedMin / (navigatorSize || 1), navigator.zoomedMax / (navigatorSize || 1));
-                }
-                navigator.rendered = true;
-            };
-            /**
-             * Set up the mouse and touch events for the navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#addMouseEvents
-             */
-            Navigator.prototype.addMouseEvents = function () {
-                var navigator = this,
-                    chart = navigator.chart,
-                    container = chart.container,
-                    eventsToUnbind = [],
-                    mouseMoveHandler,
-                    mouseUpHandler;
-                /**
-                 * Create mouse events' handlers.
-                 * Make them as separate functions to enable wrapping them:
-                 */
-                navigator.mouseMoveHandler = mouseMoveHandler = function (e) {
-                    navigator.onMouseMove(e);
-                };
-                navigator.mouseUpHandler = mouseUpHandler = function (e) {
-                    navigator.onMouseUp(e);
-                };
-                // Add shades and handles mousedown events
-                eventsToUnbind = navigator.getPartsEvents('mousedown');
-                // Add mouse move and mouseup events. These are bind to doc/container,
-                // because Navigator.grabbedSomething flags are stored in mousedown
-                // events
-                eventsToUnbind.push(addEvent(chart.renderTo, 'mousemove', mouseMoveHandler), addEvent(container.ownerDocument, 'mouseup', mouseUpHandler));
-                // Touch events
-                if (hasTouch) {
-                    eventsToUnbind.push(addEvent(chart.renderTo, 'touchmove', mouseMoveHandler), addEvent(container.ownerDocument, 'touchend', mouseUpHandler));
-                    eventsToUnbind.concat(navigator.getPartsEvents('touchstart'));
-                }
-                navigator.eventsToUnbind = eventsToUnbind;
-                // Data events
-                if (navigator.series && navigator.series[0]) {
-                    eventsToUnbind.push(addEvent(navigator.series[0].xAxis, 'foundExtremes', function () {
-                        chart.navigator.modifyNavigatorAxisExtremes();
-                    }));
-                }
-            };
-            /**
-             * Generate events for handles and masks
-             *
-             * @private
-             * @function Highcharts.Navigator#getPartsEvents
-             *
-             * @param {string} eventName
-             *        Event name handler, 'mousedown' or 'touchstart'
-             *
-             * @return {Array<Function>}
-             *         An array of functions to remove navigator functions from the
-             *         events again.
-             */
-            Navigator.prototype.getPartsEvents = function (eventName) {
-                var navigator = this,
-                    events = [];
-                ['shades', 'handles'].forEach(function (name) {
-                    navigator[name].forEach(function (navigatorItem, index) {
-                        events.push(addEvent(navigatorItem.element, eventName, function (e) {
-                            navigator[name + 'Mousedown'](e, index);
-                        }));
-                    });
-                });
-                return events;
-            };
-            /**
-             * Mousedown on a shaded mask, either:
-             *
-             * - will be stored for future drag&drop
-             *
-             * - will directly shift to a new range
-             *
-             * @private
-             * @function Highcharts.Navigator#shadesMousedown
-             *
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             *
-             * @param {number} index
-             *        Index of a mask in Navigator.shades array
-             */
-            Navigator.prototype.shadesMousedown = function (e, index) {
-                e = this.chart.pointer.normalize(e);
-                var navigator = this,
-                    chart = navigator.chart,
-                    xAxis = navigator.xAxis,
-                    zoomedMin = navigator.zoomedMin,
-                    navigatorPosition = navigator.left,
-                    navigatorSize = navigator.size,
-                    range = navigator.range,
-                    chartX = e.chartX,
-                    fixedMax,
-                    fixedMin,
-                    ext,
-                    left;
-                // For inverted chart, swap some options:
-                if (chart.inverted) {
-                    chartX = e.chartY;
-                    navigatorPosition = navigator.top;
-                }
-                if (index === 1) {
-                    // Store information for drag&drop
-                    navigator.grabbedCenter = chartX;
-                    navigator.fixedWidth = range;
-                    navigator.dragOffset = chartX - zoomedMin;
-                }
-                else {
-                    // Shift the range by clicking on shaded areas
-                    left = chartX - navigatorPosition - range / 2;
-                    if (index === 0) {
-                        left = Math.max(0, left);
-                    }
-                    else if (index === 2 && left + range >= navigatorSize) {
-                        left = navigatorSize - range;
-                        if (navigator.reversedExtremes) {
-                            // #7713
-                            left -= range;
-                            fixedMin = navigator.getUnionExtremes().dataMin;
-                        }
-                        else {
-                            // #2293, #3543
-                            fixedMax = navigator.getUnionExtremes().dataMax;
-                        }
-                    }
-                    if (left !== zoomedMin) { // it has actually moved
-                        navigator.fixedWidth = range; // #1370
-                        ext = xAxis.navigatorAxis.toFixedRange(left, left + range, fixedMin, fixedMax);
-                        if (defined(ext.min)) { // #7411
-                            chart.xAxis[0].setExtremes(Math.min(ext.min, ext.max), Math.max(ext.min, ext.max), true, null, // auto animation
-                            { trigger: 'navigator' });
-                        }
-                    }
-                }
-            };
-            /**
-             * Mousedown on a handle mask.
-             * Will store necessary information for drag&drop.
-             *
-             * @private
-             * @function Highcharts.Navigator#handlesMousedown
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             * @param {number} index
-             *        Index of a handle in Navigator.handles array
-             * @return {void}
-             */
-            Navigator.prototype.handlesMousedown = function (e, index) {
-                e = this.chart.pointer.normalize(e);
-                var navigator = this,
-                    chart = navigator.chart,
-                    baseXAxis = chart.xAxis[0], 
-                    // For reversed axes, min and max are changed,
-                    // so the other extreme should be stored
-                    reverse = navigator.reversedExtremes;
-                if (index === 0) {
-                    // Grab the left handle
-                    navigator.grabbedLeft = true;
-                    navigator.otherHandlePos = navigator.zoomedMax;
-                    navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;
-                }
-                else {
-                    // Grab the right handle
-                    navigator.grabbedRight = true;
-                    navigator.otherHandlePos = navigator.zoomedMin;
-                    navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;
-                }
-                chart.fixedRange = null;
-            };
-            /**
-             * Mouse move event based on x/y mouse position.
-             *
-             * @private
-             * @function Highcharts.Navigator#onMouseMove
-             *
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             */
-            Navigator.prototype.onMouseMove = function (e) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    left = navigator.left,
-                    navigatorSize = navigator.navigatorSize,
-                    range = navigator.range,
-                    dragOffset = navigator.dragOffset,
-                    inverted = chart.inverted,
-                    chartX;
-                // In iOS, a mousemove event with e.pageX === 0 is fired when holding
-                // the finger down in the center of the scrollbar. This should be
-                // ignored.
-                if (!e.touches || e.touches[0].pageX !== 0) { // #4696
-                    e = chart.pointer.normalize(e);
-                    chartX = e.chartX;
-                    // Swap some options for inverted chart
-                    if (inverted) {
-                        left = navigator.top;
-                        chartX = e.chartY;
-                    }
-                    // Drag left handle or top handle
-                    if (navigator.grabbedLeft) {
-                        navigator.hasDragged = true;
-                        navigator.render(0, 0, chartX - left, navigator.otherHandlePos);
-                        // Drag right handle or bottom handle
-                    }
-                    else if (navigator.grabbedRight) {
-                        navigator.hasDragged = true;
-                        navigator.render(0, 0, navigator.otherHandlePos, chartX - left);
-                        // Drag scrollbar or open area in navigator
-                    }
-                    else if (navigator.grabbedCenter) {
-                        navigator.hasDragged = true;
-                        if (chartX < dragOffset) { // outside left
-                            chartX = dragOffset;
-                            // outside right
-                        }
-                        else if (chartX >
-                            navigatorSize + dragOffset - range) {
-                            chartX = navigatorSize + dragOffset - range;
-                        }
-                        navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);
-                    }
-                    if (navigator.hasDragged &&
-                        navigator.scrollbar &&
-                        pick(navigator.scrollbar.options.liveRedraw, 
-                        // By default, don't run live redraw on VML, on touch
-                        // devices or if the chart is in boost.
-                        H.svg && !isTouchDevice && !this.chart.isBoosting)) {
-                        e.DOMType = e.type; // DOMType is for IE8
-                        setTimeout(function () {
-                            navigator.onMouseUp(e);
-                        }, 0);
-                    }
-                }
-            };
-            /**
-             * Mouse up event based on x/y mouse position.
-             *
-             * @private
-             * @function Highcharts.Navigator#onMouseUp
-             * @param {Highcharts.PointerEventObject} e
-             *        Mouse event
-             * @return {void}
-             */
-            Navigator.prototype.onMouseUp = function (e) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    xAxis = navigator.xAxis,
-                    scrollbar = navigator.scrollbar,
-                    DOMEvent = e.DOMEvent || e,
-                    inverted = chart.inverted,
-                    verb = navigator.rendered && !navigator.hasDragged ?
-                        'animate' : 'attr',
-                    zoomedMax,
-                    zoomedMin,
-                    unionExtremes,
-                    fixedMin,
-                    fixedMax,
-                    ext;
-                if (
-                // MouseUp is called for both, navigator and scrollbar (that order),
-                // which causes calling afterSetExtremes twice. Prevent first call
-                // by checking if scrollbar is going to set new extremes (#6334)
-                (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||
-                    e.trigger === 'scrollbar') {
-                    unionExtremes = navigator.getUnionExtremes();
-                    // When dragging one handle, make sure the other one doesn't change
-                    if (navigator.zoomedMin === navigator.otherHandlePos) {
-                        fixedMin = navigator.fixedExtreme;
-                    }
-                    else if (navigator.zoomedMax === navigator.otherHandlePos) {
-                        fixedMax = navigator.fixedExtreme;
-                    }
-                    // Snap to right edge (#4076)
-                    if (navigator.zoomedMax === navigator.size) {
-                        fixedMax = navigator.reversedExtremes ?
-                            unionExtremes.dataMin :
-                            unionExtremes.dataMax;
-                    }
-                    // Snap to left edge (#7576)
-                    if (navigator.zoomedMin === 0) {
-                        fixedMin = navigator.reversedExtremes ?
-                            unionExtremes.dataMax :
-                            unionExtremes.dataMin;
-                    }
-                    ext = xAxis.navigatorAxis.toFixedRange(navigator.zoomedMin, navigator.zoomedMax, fixedMin, fixedMax);
-                    if (defined(ext.min)) {
-                        chart.xAxis[0].setExtremes(Math.min(ext.min, ext.max), Math.max(ext.min, ext.max), true, 
-                        // Run animation when clicking buttons, scrollbar track etc,
-                        // but not when dragging handles or scrollbar
-                        navigator.hasDragged ? false : null, {
-                            trigger: 'navigator',
-                            triggerOp: 'navigator-drag',
-                            DOMEvent: DOMEvent // #1838
-                        });
-                    }
-                }
-                if (e.DOMType !== 'mousemove' &&
-                    e.DOMType !== 'touchmove') {
-                    navigator.grabbedLeft = navigator.grabbedRight =
-                        navigator.grabbedCenter = navigator.fixedWidth =
-                            navigator.fixedExtreme = navigator.otherHandlePos =
-                                navigator.hasDragged = navigator.dragOffset = null;
-                }
-                // Update position of navigator shades, outline and handles (#12573)
-                if (navigator.navigatorEnabled &&
-                    isNumber(navigator.zoomedMin) &&
-                    isNumber(navigator.zoomedMax)) {
-                    zoomedMin = Math.round(navigator.zoomedMin);
-                    zoomedMax = Math.round(navigator.zoomedMax);
-                    if (navigator.shades) {
-                        navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
-                    }
-                    if (navigator.outline) {
-                        navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
-                    }
-                    if (navigator.navigatorOptions.handles.enabled &&
-                        Object.keys(navigator.handles).length ===
-                            navigator.handles.length) {
-                        navigator.drawHandle(zoomedMin, 0, inverted, verb);
-                        navigator.drawHandle(zoomedMax, 1, inverted, verb);
-                    }
-                }
-            };
-            /**
-             * Removes the event handlers attached previously with addEvents.
-             *
-             * @private
-             * @function Highcharts.Navigator#removeEvents
-             * @return {void}
-             */
-            Navigator.prototype.removeEvents = function () {
-                if (this.eventsToUnbind) {
-                    this.eventsToUnbind.forEach(function (unbind) {
-                        unbind();
-                    });
-                    this.eventsToUnbind = void 0;
-                }
-                this.removeBaseSeriesEvents();
-            };
-            /**
-             * Remove data events.
-             *
-             * @private
-             * @function Highcharts.Navigator#removeBaseSeriesEvents
-             * @return {void}
-             */
-            Navigator.prototype.removeBaseSeriesEvents = function () {
-                var baseSeries = this.baseSeries || [];
-                if (this.navigatorEnabled && baseSeries[0]) {
-                    if (this.navigatorOptions.adaptToUpdatedData !== false) {
-                        baseSeries.forEach(function (series) {
-                            removeEvent(series, 'updatedData', this.updatedDataHandler);
-                        }, this);
-                    }
-                    // We only listen for extremes-events on the first baseSeries
-                    if (baseSeries[0].xAxis) {
-                        removeEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);
-                    }
-                }
-            };
-            /**
-             * Initialize the Navigator object
-             *
-             * @private
-             * @function Highcharts.Navigator#init
-             *
-             * @param {Highcharts.Chart} chart
-             */
-            Navigator.prototype.init = function (chart) {
-                var chartOptions = chart.options,
-                    navigatorOptions = chartOptions.navigator,
-                    navigatorEnabled = navigatorOptions.enabled,
-                    scrollbarOptions = chartOptions.scrollbar,
-                    scrollbarEnabled = scrollbarOptions.enabled,
-                    height = navigatorEnabled ? navigatorOptions.height : 0,
-                    scrollbarHeight = scrollbarEnabled ?
-                        scrollbarOptions.height :
-                        0;
-                this.handles = [];
-                this.shades = [];
-                this.chart = chart;
-                this.setBaseSeries();
-                this.height = height;
-                this.scrollbarHeight = scrollbarHeight;
-                this.scrollbarEnabled = scrollbarEnabled;
-                this.navigatorEnabled = navigatorEnabled;
-                this.navigatorOptions = navigatorOptions;
-                this.scrollbarOptions = scrollbarOptions;
-                this.outlineHeight = height + scrollbarHeight;
-                this.opposite = pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262
-                var navigator = this,
-                    baseSeries = navigator.baseSeries,
-                    xAxisIndex = chart.xAxis.length,
-                    yAxisIndex = chart.yAxis.length,
-                    baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||
-                        chart.xAxis[0] || { options: {} };
-                chart.isDirtyBox = true;
-                if (navigator.navigatorEnabled) {
-                    // an x axis is required for scrollbar also
-                    navigator.xAxis = new Axis(chart, merge({
-                        // inherit base xAxis' break and ordinal options
-                        breaks: baseXaxis.options.breaks,
-                        ordinal: baseXaxis.options.ordinal
-                    }, navigatorOptions.xAxis, {
-                        id: 'navigator-x-axis',
-                        yAxis: 'navigator-y-axis',
-                        isX: true,
-                        type: 'datetime',
-                        index: xAxisIndex,
-                        isInternal: true,
-                        offset: 0,
-                        keepOrdinalPadding: true,
-                        startOnTick: false,
-                        endOnTick: false,
-                        minPadding: 0,
-                        maxPadding: 0,
-                        zoomEnabled: false
-                    }, chart.inverted ? {
-                        offsets: [scrollbarHeight, 0, -scrollbarHeight, 0],
-                        width: height
-                    } : {
-                        offsets: [0, -scrollbarHeight, 0, scrollbarHeight],
-                        height: height
-                    }));
-                    navigator.yAxis = new Axis(chart, merge(navigatorOptions.yAxis, {
-                        id: 'navigator-y-axis',
-                        alignTicks: false,
-                        offset: 0,
-                        index: yAxisIndex,
-                        isInternal: true,
-                        reversed: pick((navigatorOptions.yAxis && navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false),
-                        zoomEnabled: false
-                    }, chart.inverted ? {
-                        width: height
-                    } : {
-                        height: height
-                    }));
-                    // If we have a base series, initialize the navigator series
-                    if (baseSeries || navigatorOptions.series.data) {
-                        navigator.updateNavigatorSeries(false);
-                        // If not, set up an event to listen for added series
-                    }
-                    else if (chart.series.length === 0) {
-                        navigator.unbindRedraw = addEvent(chart, 'beforeRedraw', function () {
-                            // We've got one, now add it as base
-                            if (chart.series.length > 0 && !navigator.series) {
-                                navigator.setBaseSeries();
-                                navigator.unbindRedraw(); // reset
-                            }
-                        });
-                    }
-                    navigator.reversedExtremes = (chart.inverted && !navigator.xAxis.reversed) || (!chart.inverted && navigator.xAxis.reversed);
-                    // Render items, so we can bind events to them:
-                    navigator.renderElements();
-                    // Add mouse events
-                    navigator.addMouseEvents();
-                    // in case of scrollbar only, fake an x axis to get translation
-                }
-                else {
-                    navigator.xAxis = {
-                        chart: chart,
-                        navigatorAxis: {
-                            fake: true
-                        },
-                        translate: function (value, reverse) {
-                            var axis = chart.xAxis[0], ext = axis.getExtremes(), scrollTrackWidth = axis.len - 2 * scrollbarHeight, min = numExt('min', axis.options.min, ext.dataMin), valueRange = numExt('max', axis.options.max, ext.dataMax) - min;
-                            return reverse ?
-                                // from pixel to value
-                                (value * valueRange / scrollTrackWidth) + min :
-                                // from value to pixel
-                                scrollTrackWidth * (value - min) / valueRange;
-                        },
-                        toPixels: function (value) {
-                            return this.translate(value);
-                        },
-                        toValue: function (value) {
-                            return this.translate(value, true);
-                        }
-                    };
-                    navigator.xAxis.navigatorAxis.axis = navigator.xAxis;
-                    navigator.xAxis.navigatorAxis.toFixedRange = (NavigatorAxis.AdditionsClass.prototype.toFixedRange.bind(navigator.xAxis.navigatorAxis));
-                }
-                // Initialize the scrollbar
-                if (chart.options.scrollbar.enabled) {
-                    chart.scrollbar = navigator.scrollbar = new Scrollbar(chart.renderer, merge(chart.options.scrollbar, {
-                        margin: navigator.navigatorEnabled ? 0 : 10,
-                        vertical: chart.inverted
-                    }), chart);
-                    addEvent(navigator.scrollbar, 'changed', function (e) {
-                        var range = navigator.size,
-                            to = range * this.to,
-                            from = range * this.from;
-                        navigator.hasDragged = navigator.scrollbar.hasDragged;
-                        navigator.render(0, 0, from, to);
-                        if (chart.options.scrollbar.liveRedraw ||
-                            (e.DOMType !== 'mousemove' &&
-                                e.DOMType !== 'touchmove')) {
-                            setTimeout(function () {
-                                navigator.onMouseUp(e);
-                            });
-                        }
-                    });
-                }
-                // Add data events
-                navigator.addBaseSeriesEvents();
-                // Add redraw events
-                navigator.addChartEvents();
-            };
-            /**
-             * Get the union data extremes of the chart - the outer data extremes of the
-             * base X axis and the navigator axis.
-             *
-             * @private
-             * @function Highcharts.Navigator#getUnionExtremes
-             * @param {boolean} [returnFalseOnNoBaseSeries]
-             *        as the param says.
-             * @return {Highcharts.Dictionary<(number|undefined)>|undefined}
-             */
-            Navigator.prototype.getUnionExtremes = function (returnFalseOnNoBaseSeries) {
-                var baseAxis = this.chart.xAxis[0],
-                    navAxis = this.xAxis,
-                    navAxisOptions = navAxis.options,
-                    baseAxisOptions = baseAxis.options,
-                    ret;
-                if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {
-                    ret = {
-                        dataMin: pick(// #4053
-                        navAxisOptions && navAxisOptions.min, numExt('min', baseAxisOptions.min, baseAxis.dataMin, navAxis.dataMin, navAxis.min)),
-                        dataMax: pick(navAxisOptions && navAxisOptions.max, numExt('max', baseAxisOptions.max, baseAxis.dataMax, navAxis.dataMax, navAxis.max))
-                    };
-                }
-                return ret;
-            };
-            /**
-             * Set the base series and update the navigator series from this. With a bit
-             * of modification we should be able to make this an API method to be called
-             * from the outside
-             *
-             * @private
-             * @function Highcharts.Navigator#setBaseSeries
-             * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]
-             *        Additional series options for a navigator
-             * @param {boolean} [redraw]
-             *        Whether to redraw after update.
-             * @return {void}
-             */
-            Navigator.prototype.setBaseSeries = function (baseSeriesOptions, redraw) {
-                var chart = this.chart,
-                    baseSeries = this.baseSeries = [];
-                baseSeriesOptions = (baseSeriesOptions ||
-                    chart.options && chart.options.navigator.baseSeries ||
-                    (chart.series.length ?
-                        // Find the first non-navigator series (#8430)
-                        find(chart.series, function (s) {
-                            return !s.options.isInternal;
-                        }).index :
-                        0));
-                // Iterate through series and add the ones that should be shown in
-                // navigator.
-                (chart.series || []).forEach(function (series, i) {
-                    if (
-                    // Don't include existing nav series
-                    !series.options.isInternal &&
-                        (series.options.showInNavigator ||
-                            (i === baseSeriesOptions ||
-                                series.options.id === baseSeriesOptions) &&
-                                series.options.showInNavigator !== false)) {
-                        baseSeries.push(series);
-                    }
-                });
-                // When run after render, this.xAxis already exists
-                if (this.xAxis && !this.xAxis.navigatorAxis.fake) {
-                    this.updateNavigatorSeries(true, redraw);
-                }
-            };
-            /**
-             * Update series in the navigator from baseSeries, adding new if does not
-             * exist.
-             *
-             * @private
-             * @function Highcharts.Navigator.updateNavigatorSeries
-             * @param {boolean} addEvents
-             * @param {boolean} [redraw]
-             * @return {void}
-             */
-            Navigator.prototype.updateNavigatorSeries = function (addEvents, redraw) {
-                var navigator = this,
-                    chart = navigator.chart,
-                    baseSeries = navigator.baseSeries,
-                    baseOptions,
-                    mergedNavSeriesOptions,
-                    chartNavigatorSeriesOptions = navigator.navigatorOptions.series,
-                    baseNavigatorOptions,
-                    navSeriesMixin = {
-                        enableMouseTracking: false,
-                        index: null,
-                        linkedTo: null,
-                        group: 'nav',
-                        padXAxis: false,
-                        xAxis: 'navigator-x-axis',
-                        yAxis: 'navigator-y-axis',
-                        showInLegend: false,
-                        stacking: void 0,
-                        isInternal: true,
-                        states: {
-                            inactive: {
-                                opacity: 1
-                            }
-                        }
-                    }, 
-                    // Remove navigator series that are no longer in the baseSeries
-                    navigatorSeries = navigator.series =
-                        (navigator.series || []).filter(function (navSeries) {
-                            var base = navSeries.baseSeries;
-                        if (baseSeries.indexOf(base) < 0) { // Not in array
-                            // If there is still a base series connected to this
-                            // series, remove event handler and reference.
-                            if (base) {
-                                removeEvent(base, 'updatedData', navigator.updatedDataHandler);
-                                delete base.navigatorSeries;
-                            }
-                            // Kill the nav series. It may already have been
-                            // destroyed (#8715).
-                            if (navSeries.chart) {
-                                navSeries.destroy();
-                            }
-                            return false;
-                        }
-                        return true;
-                    });
-                // Go through each base series and merge the options to create new
-                // series
-                if (baseSeries && baseSeries.length) {
-                    baseSeries.forEach(function eachBaseSeries(base) {
-                        var linkedNavSeries = base.navigatorSeries,
-                            userNavOptions = extend(
-                            // Grab color and visibility from base as default
-                            {
-                                color: base.color,
-                                visible: base.visible
-                            }, !isArray(chartNavigatorSeriesOptions) ?
-                                chartNavigatorSeriesOptions :
-                                defaultOptions.navigator.series);
-                        // Don't update if the series exists in nav and we have disabled
-                        // adaptToUpdatedData.
-                        if (linkedNavSeries &&
-                            navigator.navigatorOptions.adaptToUpdatedData === false) {
-                            return;
-                        }
-                        navSeriesMixin.name = 'Navigator ' + baseSeries.length;
-                        baseOptions = base.options || {};
-                        baseNavigatorOptions = baseOptions.navigatorOptions || {};
-                        mergedNavSeriesOptions = merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);
-                        // Once nav series type is resolved, pick correct pointRange
-                        mergedNavSeriesOptions.pointRange = pick(
-                        // Stricte set pointRange in options
-                        userNavOptions.pointRange, baseNavigatorOptions.pointRange, 
-                        // Fallback to default values, e.g. `null` for column
-                        defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line'].pointRange);
-                        // Merge data separately. Do a slice to avoid mutating the
-                        // navigator options from base series (#4923).
-                        var navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;
-                        navigator.hasNavigatorData =
-                            navigator.hasNavigatorData || !!navigatorSeriesData;
-                        mergedNavSeriesOptions.data =
-                            navigatorSeriesData ||
-                                baseOptions.data && baseOptions.data.slice(0);
-                        // Update or add the series
-                        if (linkedNavSeries && linkedNavSeries.options) {
-                            linkedNavSeries.update(mergedNavSeriesOptions, redraw);
-                        }
-                        else {
-                            base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);
-                            base.navigatorSeries.baseSeries = base; // Store ref
-                            navigatorSeries.push(base.navigatorSeries);
-                        }
-                    });
-                }
-                // If user has defined data (and no base series) or explicitly defined
-                // navigator.series as an array, we create these series on top of any
-                // base series.
-                if (chartNavigatorSeriesOptions.data &&
-                    !(baseSeries && baseSeries.length) ||
-                    isArray(chartNavigatorSeriesOptions)) {
-                    navigator.hasNavigatorData = false;
-                    // Allow navigator.series to be an array
-                    chartNavigatorSeriesOptions =
-                        splat(chartNavigatorSeriesOptions);
-                    chartNavigatorSeriesOptions.forEach(function (userSeriesOptions, i) {
-                        navSeriesMixin.name =
-                            'Navigator ' + (navigatorSeries.length + 1);
-                        mergedNavSeriesOptions = merge(defaultOptions.navigator.series, {
-                            // Since we don't have a base series to pull color from,
-                            // try to fake it by using color from series with same
-                            // index. Otherwise pull from the colors array. We need
-                            // an explicit color as otherwise updates will increment
-                            // color counter and we'll get a new color for each
-                            // update of the nav series.
-                            color: chart.series[i] &&
-                                !chart.series[i].options.isInternal &&
-                                chart.series[i].color ||
-                                chart.options.colors[i] ||
-                                chart.options.colors[0]
-                        }, navSeriesMixin, userSeriesOptions);
-                        mergedNavSeriesOptions.data = userSeriesOptions.data;
-                        if (mergedNavSeriesOptions.data) {
-                            navigator.hasNavigatorData = true;
-                            navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));
-                        }
-                    });
-                }
-                if (addEvents) {
-                    this.addBaseSeriesEvents();
-                }
-            };
-            /**
-             * Add data events.
-             * For example when main series is updated we need to recalculate extremes
-             *
-             * @private
-             * @function Highcharts.Navigator#addBaseSeriesEvent
-             * @return {void}
-             */
-            Navigator.prototype.addBaseSeriesEvents = function () {
-                var navigator = this,
-                    baseSeries = navigator.baseSeries || [];
-                // Bind modified extremes event to first base's xAxis only.
-                // In event of > 1 base-xAxes, the navigator will ignore those.
-                // Adding this multiple times to the same axis is no problem, as
-                // duplicates should be discarded by the browser.
-                if (baseSeries[0] && baseSeries[0].xAxis) {
-                    addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);
-                }
-                baseSeries.forEach(function (base) {
-                    // Link base series show/hide to navigator series visibility
-                    addEvent(base, 'show', function () {
-                        if (this.navigatorSeries) {
-                            this.navigatorSeries.setVisible(true, false);
-                        }
-                    });
-                    addEvent(base, 'hide', function () {
-                        if (this.navigatorSeries) {
-                            this.navigatorSeries.setVisible(false, false);
-                        }
-                    });
-                    // Respond to updated data in the base series, unless explicitily
-                    // not adapting to data changes.
-                    if (this.navigatorOptions.adaptToUpdatedData !== false) {
-                        if (base.xAxis) {
-                            addEvent(base, 'updatedData', this.updatedDataHandler);
-                        }
-                    }
-                    // Handle series removal
-                    addEvent(base, 'remove', function () {
-                        if (this.navigatorSeries) {
-                            erase(navigator.series, this.navigatorSeries);
-                            if (defined(this.navigatorSeries.options)) {
-                                this.navigatorSeries.remove(false);
-                            }
-                            delete this.navigatorSeries;
-                        }
-                    });
-                }, this);
-            };
-            /**
-             * Get minimum from all base series connected to the navigator
-             * @private
-             * @param  {number} currentSeriesMin
-             *         Minium from the current series
-             * @return {number} Minimum from all series
-             */
-            Navigator.prototype.getBaseSeriesMin = function (currentSeriesMin) {
-                return this.baseSeries.reduce(function (min, series) {
-                    // (#10193)
-                    return Math.min(min, series.xData ? series.xData[0] : min);
-                }, currentSeriesMin);
-            };
-            /**
-             * Set the navigator x axis extremes to reflect the total. The navigator
-             * extremes should always be the extremes of the union of all series in the
-             * chart as well as the navigator series.
-             *
-             * @private
-             * @function Highcharts.Navigator#modifyNavigatorAxisExtremes
-             */
-            Navigator.prototype.modifyNavigatorAxisExtremes = function () {
-                var xAxis = this.xAxis,
-                    unionExtremes;
-                if (typeof xAxis.getExtremes !== 'undefined') {
-                    unionExtremes = this.getUnionExtremes(true);
-                    if (unionExtremes &&
-                        (unionExtremes.dataMin !== xAxis.min ||
-                            unionExtremes.dataMax !== xAxis.max)) {
-                        xAxis.min = unionExtremes.dataMin;
-                        xAxis.max = unionExtremes.dataMax;
-                    }
-                }
-            };
-            /**
-             * Hook to modify the base axis extremes with information from the Navigator
-             *
-             * @private
-             * @function Highcharts.Navigator#modifyBaseAxisExtremes
-             */
-            Navigator.prototype.modifyBaseAxisExtremes = function () {
-                var baseXAxis = this,
-                    navigator = baseXAxis.chart.navigator,
-                    baseExtremes = baseXAxis.getExtremes(),
-                    baseMin = baseExtremes.min,
-                    baseMax = baseExtremes.max,
-                    baseDataMin = baseExtremes.dataMin,
-                    baseDataMax = baseExtremes.dataMax,
-                    range = baseMax - baseMin,
-                    stickToMin = navigator.stickToMin,
-                    stickToMax = navigator.stickToMax,
-                    overscroll = pick(baseXAxis.options.overscroll, 0),
-                    newMax,
-                    newMin,
-                    navigatorSeries = navigator.series && navigator.series[0],
-                    hasSetExtremes = !!baseXAxis.setExtremes, 
-                    // When the extremes have been set by range selector button, don't
-                    // stick to min or max. The range selector buttons will handle the
-                    // extremes. (#5489)
-                    unmutable = baseXAxis.eventArgs &&
-                        baseXAxis.eventArgs.trigger === 'rangeSelectorButton';
-                if (!unmutable) {
-                    // If the zoomed range is already at the min, move it to the right
-                    // as new data comes in
-                    if (stickToMin) {
-                        newMin = baseDataMin;
-                        newMax = newMin + range;
-                    }
-                    // If the zoomed range is already at the max, move it to the right
-                    // as new data comes in
-                    if (stickToMax) {
-                        newMax = baseDataMax + overscroll;
-                        // If stickToMin is true, the new min value is set above
-                        if (!stickToMin) {
-                            newMin = Math.max(baseDataMin, // don't go below data extremes (#13184)
-                            newMax - range, navigator.getBaseSeriesMin(navigatorSeries && navigatorSeries.xData ?
-                                navigatorSeries.xData[0] :
-                                -Number.MAX_VALUE));
-                        }
-                    }
-                    // Update the extremes
-                    if (hasSetExtremes && (stickToMin || stickToMax)) {
-                        if (isNumber(newMin)) {
-                            baseXAxis.min = baseXAxis.userMin = newMin;
-                            baseXAxis.max = baseXAxis.userMax = newMax;
-                        }
-                    }
-                }
-                // Reset
-                navigator.stickToMin =
-                    navigator.stickToMax = null;
-            };
-            /**
-             * Handler for updated data on the base series. When data is modified, the
-             * navigator series must reflect it. This is called from the Chart.redraw
-             * function before axis and series extremes are computed.
-             *
-             * @private
-             * @function Highcharts.Navigator#updateDataHandler
-             */
-            Navigator.prototype.updatedDataHandler = function () {
-                var navigator = this.chart.navigator,
-                    baseSeries = this,
-                    navigatorSeries = this.navigatorSeries,
-                    xDataMin = navigator.getBaseSeriesMin(baseSeries.xData[0]);
-                // If the scrollbar is scrolled all the way to the right, keep right as
-                // new data  comes in.
-                navigator.stickToMax = navigator.reversedExtremes ?
-                    Math.round(navigator.zoomedMin) === 0 :
-                    Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
-                // Detect whether the zoomed area should stick to the minimum or
-                // maximum. If the current axis minimum falls outside the new updated
-                // dataset, we must adjust.
-                navigator.stickToMin = isNumber(baseSeries.xAxis.min) &&
-                    (baseSeries.xAxis.min <= xDataMin) &&
-                    (!this.chart.fixedRange || !navigator.stickToMax);
-                // Set the navigator series data to the new data of the base series
-                if (navigatorSeries && !navigator.hasNavigatorData) {
-                    navigatorSeries.options.pointStart = baseSeries.xData[0];
-                    navigatorSeries.setData(baseSeries.options.data, false, null, false); // #5414
-                }
-            };
-            /**
-             * Add chart events, like redrawing navigator, when chart requires that.
-             *
-             * @private
-             * @function Highcharts.Navigator#addChartEvents
-             * @return {void}
-             */
-            Navigator.prototype.addChartEvents = function () {
-                if (!this.eventsToUnbind) {
-                    this.eventsToUnbind = [];
-                }
-                this.eventsToUnbind.push(
-                // Move the scrollbar after redraw, like after data updata even if
-                // axes don't redraw
-                addEvent(this.chart, 'redraw', function () {
-                    var navigator = this.navigator,
-                        xAxis = navigator && (navigator.baseSeries &&
-                            navigator.baseSeries[0] &&
-                            navigator.baseSeries[0].xAxis ||
-                            this.xAxis[0]); // #5709, #13114
-                        if (xAxis) {
-                            navigator.render(xAxis.min,
-                        xAxis.max);
-                    }
-                }), 
-                // Make room for the navigator, can be placed around the chart:
-                addEvent(this.chart, 'getMargins', function () {
-                    var chart = this,
-                        navigator = chart.navigator,
-                        marginName = navigator.opposite ?
-                            'plotTop' : 'marginBottom';
-                    if (chart.inverted) {
-                        marginName = navigator.opposite ?
-                            'marginRight' : 'plotLeft';
-                    }
-                    chart[marginName] =
-                        (chart[marginName] || 0) + (navigator.navigatorEnabled || !chart.inverted ?
-                            navigator.outlineHeight :
-                            0) + navigator.navigatorOptions.margin;
-                }));
-            };
-            /**
-             * Destroys allocated elements.
-             *
-             * @private
-             * @function Highcharts.Navigator#destroy
-             */
-            Navigator.prototype.destroy = function () {
-                // Disconnect events added in addEvents
-                this.removeEvents();
-                if (this.xAxis) {
-                    erase(this.chart.xAxis, this.xAxis);
-                    erase(this.chart.axes, this.xAxis);
-                }
-                if (this.yAxis) {
-                    erase(this.chart.yAxis, this.yAxis);
-                    erase(this.chart.axes, this.yAxis);
-                }
-                // Destroy series
-                (this.series || []).forEach(function (s) {
-                    if (s.destroy) {
-                        s.destroy();
-                    }
-                });
-                // Destroy properties
-                [
-                    'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',
-                    'scrollbarRifles', 'scrollbarGroup', 'scrollbar', 'navigatorGroup',
-                    'rendered'
-                ].forEach(function (prop) {
-                    if (this[prop] && this[prop].destroy) {
-                        this[prop].destroy();
-                    }
-                    this[prop] = null;
-                }, this);
-                // Destroy elements in collection
-                [this.handles].forEach(function (coll) {
-                    destroyObjectProperties(coll);
-                }, this);
-            };
-            return Navigator;
-        }());
-        // End of prototype
-        if (!H.Navigator) {
-            H.Navigator = Navigator;
-            NavigatorAxis.compose(Axis);
-            // For Stock charts. For x only zooming, do not to create the zoom button
-            // because X axis zooming is already allowed by the Navigator and Range
-            // selector. (#9285)
-            addEvent(Chart, 'beforeShowResetZoom', function () {
-                var chartOptions = this.options,
-                    navigator = chartOptions.navigator,
-                    rangeSelector = chartOptions.rangeSelector;
-                if (((navigator && navigator.enabled) ||
-                    (rangeSelector && rangeSelector.enabled)) &&
-                    ((!isTouchDevice && chartOptions.chart.zoomType === 'x') ||
-                        (isTouchDevice && chartOptions.chart.pinchType === 'x'))) {
-                    return false;
-                }
-            });
-            // Initialize navigator for stock charts
-            addEvent(Chart, 'beforeRender', function () {
-                var options = this.options;
-                if (options.navigator.enabled ||
-                    options.scrollbar.enabled) {
-                    this.scroller = this.navigator = new Navigator(this);
-                }
-            });
-            // For stock charts, extend the Chart.setChartSize method so that we can set
-            // the final top position of the navigator once the height of the chart,
-            // including the legend, is determined. #367. We can't use Chart.getMargins,
-            // because labels offsets are not calculated yet.
-            addEvent(Chart, 'afterSetChartSize', function () {
-                var legend = this.legend,
-                    navigator = this.navigator,
-                    scrollbarHeight,
-                    legendOptions,
-                    xAxis,
-                    yAxis;
-                if (navigator) {
-                    legendOptions = legend && legend.options;
-                    xAxis = navigator.xAxis;
-                    yAxis = navigator.yAxis;
-                    scrollbarHeight = navigator.scrollbarHeight;
-                    // Compute the top position
-                    if (this.inverted) {
-                        navigator.left = navigator.opposite ?
-                            this.chartWidth - scrollbarHeight -
-                                navigator.height :
-                            this.spacing[3] + scrollbarHeight;
-                        navigator.top = this.plotTop + scrollbarHeight;
-                    }
-                    else {
-                        navigator.left = this.plotLeft + scrollbarHeight;
-                        navigator.top = navigator.navigatorOptions.top ||
-                            this.chartHeight -
-                                navigator.height -
-                                scrollbarHeight -
-                                this.spacing[2] -
-                                (this.rangeSelector && this.extraBottomMargin ?
-                                    this.rangeSelector.getHeight() :
-                                    0) -
-                                ((legendOptions &&
-                                    legendOptions.verticalAlign === 'bottom' &&
-                                    legendOptions.layout !== 'proximate' && // #13392
-                                    legendOptions.enabled &&
-                                    !legendOptions.floating) ?
-                                    legend.legendHeight +
-                                        pick(legendOptions.margin, 10) :
-                                    0) -
-                                (this.titleOffset ? this.titleOffset[2] : 0);
-                    }
-                    if (xAxis && yAxis) { // false if navigator is disabled (#904)
-                        if (this.inverted) {
-                            xAxis.options.left = yAxis.options.left = navigator.left;
-                        }
-                        else {
-                            xAxis.options.top = yAxis.options.top = navigator.top;
-                        }
-                        xAxis.setAxisSize();
-                        yAxis.setAxisSize();
-                    }
-                }
-            });
-            // Merge options, if no scrolling exists yet
-            addEvent(Chart, 'update', function (e) {
-                var navigatorOptions = (e.options.navigator || {}),
-                    scrollbarOptions = (e.options.scrollbar || {});
-                if (!this.navigator && !this.scroller &&
-                    (navigatorOptions.enabled || scrollbarOptions.enabled)) {
-                    merge(true, this.options.navigator, navigatorOptions);
-                    merge(true, this.options.scrollbar, scrollbarOptions);
-                    delete e.options.navigator;
-                    delete e.options.scrollbar;
-                }
-            });
-            // Initialize navigator, if no scrolling exists yet
-            addEvent(Chart, 'afterUpdate', function (event) {
-                if (!this.navigator && !this.scroller &&
-                    (this.options.navigator.enabled ||
-                        this.options.scrollbar.enabled)) {
-                    this.scroller = this.navigator = new Navigator(this);
-                    if (pick(event.redraw, true)) {
-                        this.redraw(event.animation); // #7067
-                    }
-                }
-            });
-            // Handle adding new series
-            addEvent(Chart, 'afterAddSeries', function () {
-                if (this.navigator) {
-                    // Recompute which series should be shown in navigator, and add them
-                    this.navigator.setBaseSeries(null, false);
-                }
-            });
-            // Handle updating series
-            addEvent(LineSeries, 'afterUpdate', function () {
-                if (this.chart.navigator && !this.options.isInternal) {
-                    this.chart.navigator.setBaseSeries(null, false);
-                }
+                .css(index === 1 && mouseCursor);
+            }
+          });
+          // Create the outline:
+          navigator.outline = renderer
+            .path()
+            .addClass("highcharts-navigator-outline")
+            .add(navigatorGroup);
+          if (!chart.styledMode) {
+            navigator.outline.attr({
+              "stroke-width": navigatorOptions.outlineWidth,
+              stroke: navigatorOptions.outlineColor,
             });
-            Chart.prototype.callbacks.push(function (chart) {
-                var extremes,
-                    navigator = chart.navigator;
-                // Initialize the navigator
-                if (navigator && chart.xAxis[0]) {
-                    extremes = chart.xAxis[0].getExtremes();
-                    navigator.render(extremes.min, extremes.max);
-                }
+          }
+          // Create the handlers:
+          if (navigatorOptions.handles.enabled) {
+            [0, 1].forEach(function (index) {
+              navigatorOptions.handles.inverted = chart.inverted;
+              navigator.handles[index] = renderer.symbol(
+                navigatorOptions.handles.symbols[index],
+                -navigatorOptions.handles.width / 2 - 1,
+                0,
+                navigatorOptions.handles.width,
+                navigatorOptions.handles.height,
+                navigatorOptions.handles
+              );
+              // zIndex = 6 for right handle, 7 for left.
+              // Can't be 10, because of the tooltip in inverted chart #2908
+              navigator.handles[index]
+                .attr({ zIndex: 7 - index })
+                .addClass(
+                  "highcharts-navigator-handle " +
+                    "highcharts-navigator-handle-" +
+                    ["left", "right"][index]
+                )
+                .add(navigatorGroup);
+              if (!chart.styledMode) {
+                var handlesOptions = navigatorOptions.handles;
+                navigator.handles[index]
+                  .attr({
+                    fill: handlesOptions.backgroundColor,
+                    stroke: handlesOptions.borderColor,
+                    "stroke-width": handlesOptions.lineWidth,
+                  })
+                  .css(mouseCursor);
+              }
             });
-        }
-        H.Navigator = Navigator;
-
-        return H.Navigator;
-    });
-    _registerModule(_modules, 'Core/Axis/OrdinalAxis.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Globals.js'], _modules['Core/Series/CartesianSeries.js'], _modules['Core/Utilities.js'], _modules['Core/Chart/Chart.js']], function (Axis, H, CartesianSeries, U, Chart) {
-        /* *
+          }
+        };
+        /**
+         * Update navigator
          *
-         *  (c) 2010-2020 Torstein Honsi
+         * @private
+         * @function Highcharts.Navigator#update
          *
-         *  License: www.highcharts.com/license
+         * @param {Highcharts.NavigatorOptions} options
+         *        Options to merge in when updating navigator
+         */
+        Navigator.prototype.update = function (options) {
+          // Remove references to old navigator series in base series
+          (this.series || []).forEach(function (series) {
+            if (series.baseSeries) {
+              delete series.baseSeries.navigatorSeries;
+            }
+          });
+          // Destroy and rebuild navigator
+          this.destroy();
+          var chartOptions = this.chart.options;
+          merge(true, chartOptions.navigator, this.options, options);
+          this.init(this.chart);
+        };
+        /**
+         * Render the navigator
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @private
+         * @function Highcharts.Navigator#render
+         * @param {number} min
+         *        X axis value minimum
+         * @param {number} max
+         *        X axis value maximum
+         * @param {number} [pxMin]
+         *        Pixel value minimum
+         * @param {number} [pxMax]
+         *        Pixel value maximum
+         * @return {void}
+         */
+        Navigator.prototype.render = function (min, max, pxMin, pxMax) {
+          var navigator = this,
+            chart = navigator.chart,
+            navigatorWidth,
+            scrollbarLeft,
+            scrollbarTop,
+            scrollbarHeight = navigator.scrollbarHeight,
+            navigatorSize,
+            xAxis = navigator.xAxis,
+            pointRange = xAxis.pointRange || 0,
+            scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis,
+            navigatorEnabled = navigator.navigatorEnabled,
+            zoomedMin,
+            zoomedMax,
+            rendered = navigator.rendered,
+            inverted = chart.inverted,
+            verb,
+            newMin,
+            newMax,
+            currentRange,
+            minRange = chart.xAxis[0].minRange,
+            maxRange = chart.xAxis[0].options.maxRange;
+          // Don't redraw while moving the handles (#4703).
+          if (this.hasDragged && !defined(pxMin)) {
+            return;
+          }
+          min = correctFloat(min - pointRange / 2);
+          max = correctFloat(max + pointRange / 2);
+          // Don't render the navigator until we have data (#486, #4202, #5172).
+          if (!isNumber(min) || !isNumber(max)) {
+            // However, if navigator was already rendered, we may need to resize
+            // it. For example hidden series, but visible navigator (#6022).
+            if (rendered) {
+              pxMin = 0;
+              pxMax = pick(xAxis.width, scrollbarXAxis.width);
+            } else {
+              return;
+            }
+          }
+          navigator.left = pick(
+            xAxis.left,
+            // in case of scrollbar only, without navigator
+            chart.plotLeft + scrollbarHeight + (inverted ? chart.plotWidth : 0)
+          );
+          navigator.size =
+            zoomedMax =
+            navigatorSize =
+              pick(
+                xAxis.len,
+                (inverted ? chart.plotHeight : chart.plotWidth) -
+                  2 * scrollbarHeight
+              );
+          if (inverted) {
+            navigatorWidth = scrollbarHeight;
+          } else {
+            navigatorWidth = navigatorSize + 2 * scrollbarHeight;
+          }
+          // Get the pixel position of the handles
+          pxMin = pick(pxMin, xAxis.toPixels(min, true));
+          pxMax = pick(pxMax, xAxis.toPixels(max, true));
+          // Verify (#1851, #2238)
+          if (!isNumber(pxMin) || Math.abs(pxMin) === Infinity) {
+            pxMin = 0;
+            pxMax = navigatorWidth;
+          }
+          // Are we below the minRange? (#2618, #6191)
+          newMin = xAxis.toValue(pxMin, true);
+          newMax = xAxis.toValue(pxMax, true);
+          currentRange = Math.abs(correctFloat(newMax - newMin));
+          if (currentRange < minRange) {
+            if (this.grabbedLeft) {
+              pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);
+            } else if (this.grabbedRight) {
+              pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);
+            }
+          } else if (
+            defined(maxRange) &&
+            correctFloat(currentRange - pointRange) > maxRange
+          ) {
+            if (this.grabbedLeft) {
+              pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);
+            } else if (this.grabbedRight) {
+              pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);
+            }
+          }
+          // Handles are allowed to cross, but never exceed the plot area
+          navigator.zoomedMax = clamp(Math.max(pxMin, pxMax), 0, zoomedMax);
+          navigator.zoomedMin = clamp(
+            navigator.fixedWidth
+              ? navigator.zoomedMax - navigator.fixedWidth
+              : Math.min(pxMin, pxMax),
+            0,
+            zoomedMax
+          );
+          navigator.range = navigator.zoomedMax - navigator.zoomedMin;
+          zoomedMax = Math.round(navigator.zoomedMax);
+          zoomedMin = Math.round(navigator.zoomedMin);
+          if (navigatorEnabled) {
+            navigator.navigatorGroup.attr({
+              visibility: "visible",
+            });
+            // Place elements
+            verb = rendered && !navigator.hasDragged ? "animate" : "attr";
+            navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
+            navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
+            if (navigator.navigatorOptions.handles.enabled) {
+              navigator.drawHandle(zoomedMin, 0, inverted, verb);
+              navigator.drawHandle(zoomedMax, 1, inverted, verb);
+            }
+          }
+          if (navigator.scrollbar) {
+            if (inverted) {
+              scrollbarTop = navigator.top - scrollbarHeight;
+              scrollbarLeft =
+                navigator.left -
+                scrollbarHeight +
+                (navigatorEnabled || !scrollbarXAxis.opposite
+                  ? 0
+                  : // Multiple axes has offsets:
+                    (scrollbarXAxis.titleOffset || 0) +
+                    // Self margin from the axis.title
+                    scrollbarXAxis.axisTitleMargin);
+              scrollbarHeight = navigatorSize + 2 * scrollbarHeight;
+            } else {
+              scrollbarTop =
+                navigator.top +
+                (navigatorEnabled ? navigator.height : -scrollbarHeight);
+              scrollbarLeft = navigator.left - scrollbarHeight;
+            }
+            // Reposition scrollbar
+            navigator.scrollbar.position(
+              scrollbarLeft,
+              scrollbarTop,
+              navigatorWidth,
+              scrollbarHeight
+            );
+            // Keep scale 0-1
+            navigator.scrollbar.setRange(
+              // Use real value, not rounded because range can be very small
+              // (#1716)
+              navigator.zoomedMin / (navigatorSize || 1),
+              navigator.zoomedMax / (navigatorSize || 1)
+            );
+          }
+          navigator.rendered = true;
+        };
+        /**
+         * Set up the mouse and touch events for the navigator
          *
-         * */
-        var addEvent = U.addEvent,
-            css = U.css,
-            defined = U.defined,
-            pick = U.pick,
-            timeUnits = U.timeUnits;
-        // Has a dependency on Navigator due to the use of Axis.toFixedRange
+         * @private
+         * @function Highcharts.Navigator#addMouseEvents
+         */
+        Navigator.prototype.addMouseEvents = function () {
+          var navigator = this,
+            chart = navigator.chart,
+            container = chart.container,
+            eventsToUnbind = [],
+            mouseMoveHandler,
+            mouseUpHandler;
+          /**
+           * Create mouse events' handlers.
+           * Make them as separate functions to enable wrapping them:
+           */
+          navigator.mouseMoveHandler = mouseMoveHandler = function (e) {
+            navigator.onMouseMove(e);
+          };
+          navigator.mouseUpHandler = mouseUpHandler = function (e) {
+            navigator.onMouseUp(e);
+          };
+          // Add shades and handles mousedown events
+          eventsToUnbind = navigator.getPartsEvents("mousedown");
+          // Add mouse move and mouseup events. These are bind to doc/container,
+          // because Navigator.grabbedSomething flags are stored in mousedown
+          // events
+          eventsToUnbind.push(
+            addEvent(chart.renderTo, "mousemove", mouseMoveHandler),
+            addEvent(container.ownerDocument, "mouseup", mouseUpHandler)
+          );
+          // Touch events
+          if (hasTouch) {
+            eventsToUnbind.push(
+              addEvent(chart.renderTo, "touchmove", mouseMoveHandler),
+              addEvent(container.ownerDocument, "touchend", mouseUpHandler)
+            );
+            eventsToUnbind.concat(navigator.getPartsEvents("touchstart"));
+          }
+          navigator.eventsToUnbind = eventsToUnbind;
+          // Data events
+          if (navigator.series && navigator.series[0]) {
+            eventsToUnbind.push(
+              addEvent(navigator.series[0].xAxis, "foundExtremes", function () {
+                chart.navigator.modifyNavigatorAxisExtremes();
+              })
+            );
+          }
+        };
         /**
-         * Extends the axis with ordinal support.
+         * Generate events for handles and masks
+         *
          * @private
+         * @function Highcharts.Navigator#getPartsEvents
+         *
+         * @param {string} eventName
+         *        Event name handler, 'mousedown' or 'touchstart'
+         *
+         * @return {Array<Function>}
+         *         An array of functions to remove navigator functions from the
+         *         events again.
          */
-        var OrdinalAxis;
-        (function (OrdinalAxis) {
-            /* *
-             *
-             *  Classes
-             *
-             * */
-            /**
-             * @private
-             */
-            var Composition = /** @class */ (function () {
-                    /* *
-                     *
-                     *  Constructors
-                     *
-                     * */
-                    /**
-                     * @private
-                     */
-                    function Composition(axis) {
-                        this.index = {};
-                    this.axis = axis;
-                }
-                /* *
-                *
-                *  Functions
-                *
-                * */
-                /**
-                 * Calculate the ordinal positions before tick positions are calculated.
-                 *
-                 * @private
-                 */
-                Composition.prototype.beforeSetTickPositions = function () {
-                    var axis = this.axis,
-                        ordinal = axis.ordinal,
-                        len,
-                        ordinalPositions = [],
-                        uniqueOrdinalPositions,
-                        useOrdinal = false,
-                        dist,
-                        extremes = axis.getExtremes(),
-                        min = extremes.min,
-                        max = extremes.max,
-                        minIndex,
-                        maxIndex,
-                        slope,
-                        hasBreaks = axis.isXAxis && !!axis.options.breaks,
-                        isOrdinal = axis.options.ordinal,
-                        overscrollPointsRange = Number.MAX_VALUE,
-                        ignoreHiddenSeries = axis.chart.options.chart.ignoreHiddenSeries,
-                        i,
-                        hasBoostedSeries;
-                    // Apply the ordinal logic
-                    if (isOrdinal || hasBreaks) { // #4167 YAxis is never ordinal ?
-                        axis.series.forEach(function (series, i) {
-                            uniqueOrdinalPositions = [];
-                            if ((!ignoreHiddenSeries || series.visible !== false) &&
-                                (series.takeOrdinalPosition !== false || hasBreaks)) {
-                                // concatenate the processed X data into the existing
-                                // positions, or the empty array
-                                ordinalPositions = ordinalPositions.concat(series.processedXData);
-                                len = ordinalPositions.length;
-                                // remove duplicates (#1588)
-                                ordinalPositions.sort(function (a, b) {
-                                    // without a custom function it is sorted as strings
-                                    return a - b;
-                                });
-                                overscrollPointsRange = Math.min(overscrollPointsRange, pick(
-                                // Check for a single-point series:
-                                series.closestPointRange, overscrollPointsRange));
-                                if (len) {
-                                    i = 0;
-                                    while (i < len - 1) {
-                                        if (ordinalPositions[i] !== ordinalPositions[i + 1]) {
-                                            uniqueOrdinalPositions.push(ordinalPositions[i + 1]);
-                                        }
-                                        i++;
-                                    }
-                                    // Check first item:
-                                    if (uniqueOrdinalPositions[0] !== ordinalPositions[0]) {
-                                        uniqueOrdinalPositions.unshift(ordinalPositions[0]);
-                                    }
-                                    ordinalPositions = uniqueOrdinalPositions;
-                                }
-                            }
-                            if (series.isSeriesBoosting) {
-                                hasBoostedSeries = true;
-                            }
-                        });
-                        if (hasBoostedSeries) {
-                            ordinalPositions.length = 0;
-                        }
-                        // cache the length
-                        len = ordinalPositions.length;
-                        // Check if we really need the overhead of mapping axis data
-                        // against the ordinal positions. If the series consist of
-                        // evenly spaced data any way, we don't need any ordinal logic.
-                        if (len > 2) { // two points have equal distance by default
-                            dist = ordinalPositions[1] - ordinalPositions[0];
-                            i = len - 1;
-                            while (i-- && !useOrdinal) {
-                                if (ordinalPositions[i + 1] - ordinalPositions[i] !== dist) {
-                                    useOrdinal = true;
-                                }
-                            }
-                            // When zooming in on a week, prevent axis padding for
-                            // weekends even though the data within the week is evenly
-                            // spaced.
-                            if (!axis.options.keepOrdinalPadding &&
-                                (ordinalPositions[0] - min > dist ||
-                                    max - ordinalPositions[ordinalPositions.length - 1] >
-                                        dist)) {
-                                useOrdinal = true;
-                            }
-                        }
-                        else if (axis.options.overscroll) {
-                            if (len === 2) {
-                                // Exactly two points, distance for overscroll is fixed:
-                                overscrollPointsRange =
-                                    ordinalPositions[1] - ordinalPositions[0];
-                            }
-                            else if (len === 1) {
-                                // We have just one point, closest distance is unknown.
-                                // Assume then it is last point and overscrolled range:
-                                overscrollPointsRange = axis.options.overscroll;
-                                ordinalPositions = [
-                                    ordinalPositions[0],
-                                    ordinalPositions[0] + overscrollPointsRange
-                                ];
-                            }
-                            else {
-                                // In case of zooming in on overscrolled range, stick to
-                                // the old range:
-                                overscrollPointsRange = ordinal.overscrollPointsRange;
-                            }
-                        }
-                        // Record the slope and offset to compute the linear values from
-                        // the array index. Since the ordinal positions may exceed the
-                        // current range, get the start and end positions within it
-                        // (#719, #665b)
-                        if (useOrdinal) {
-                            if (axis.options.overscroll) {
-                                ordinal.overscrollPointsRange = overscrollPointsRange;
-                                ordinalPositions = ordinalPositions.concat(ordinal.getOverscrollPositions());
-                            }
-                            // Register
-                            ordinal.positions = ordinalPositions;
-                            // This relies on the ordinalPositions being set. Use
-                            // Math.max and Math.min to prevent padding on either sides
-                            // of the data.
-                            minIndex = axis.ordinal2lin(// #5979
-                            Math.max(min, ordinalPositions[0]), true);
-                            maxIndex = Math.max(axis.ordinal2lin(Math.min(max, ordinalPositions[ordinalPositions.length - 1]), true), 1); // #3339
-                            // Set the slope and offset of the values compared to the
-                            // indices in the ordinal positions
-                            ordinal.slope = slope = (max - min) / (maxIndex - minIndex);
-                            ordinal.offset = min - (minIndex * slope);
-                        }
-                        else {
-                            ordinal.overscrollPointsRange = pick(axis.closestPointRange, ordinal.overscrollPointsRange);
-                            ordinal.positions = axis.ordinal.slope = ordinal.offset =
-                                void 0;
-                        }
-                    }
-                    axis.isOrdinal = isOrdinal && useOrdinal; // #3818, #4196, #4926
-                    ordinal.groupIntervalFactor = null; // reset for next run
-                };
-                /**
-                 * Get the ordinal positions for the entire data set. This is necessary
-                 * in chart panning because we need to find out what points or data
-                 * groups are available outside the visible range. When a panning
-                 * operation starts, if an index for the given grouping does not exists,
-                 * it is created and cached. This index is deleted on updated data, so
-                 * it will be regenerated the next time a panning operation starts.
-                 *
-                 * @private
-                 */
-                Composition.prototype.getExtendedPositions = function () {
-                    var ordinal = this,
-                        axis = ordinal.axis,
-                        axisProto = axis.constructor.prototype,
-                        chart = axis.chart,
-                        grouping = axis.series[0].currentDataGrouping,
-                        ordinalIndex = ordinal.index,
-                        key = grouping ?
-                            grouping.count + grouping.unitName :
-                            'raw',
-                        overscroll = axis.options.overscroll,
-                        extremes = axis.getExtremes(),
-                        fakeAxis,
-                        fakeSeries;
-                    // If this is the first time, or the ordinal index is deleted by
-                    // updatedData,
-                    // create it.
-                    if (!ordinalIndex) {
-                        ordinalIndex = ordinal.index = {};
-                    }
-                    if (!ordinalIndex[key]) {
-                        // Create a fake axis object where the extended ordinal
-                        // positions are emulated
-                        fakeAxis = {
-                            series: [],
-                            chart: chart,
-                            getExtremes: function () {
-                                return {
-                                    min: extremes.dataMin,
-                                    max: extremes.dataMax + overscroll
-                                };
-                            },
-                            options: {
-                                ordinal: true
-                            },
-                            ordinal: {},
-                            ordinal2lin: axisProto.ordinal2lin,
-                            val2lin: axisProto.val2lin // #2590
-                        };
-                        fakeAxis.ordinal.axis = fakeAxis;
-                        // Add the fake series to hold the full data, then apply
-                        // processData to it
-                        axis.series.forEach(function (series) {
-                            fakeSeries = {
-                                xAxis: fakeAxis,
-                                xData: series.xData.slice(),
-                                chart: chart,
-                                destroyGroupedData: H.noop,
-                                getProcessedData: CartesianSeries.prototype.getProcessedData
-                            };
-                            fakeSeries.xData = fakeSeries.xData.concat(ordinal.getOverscrollPositions());
-                            fakeSeries.options = {
-                                dataGrouping: grouping ? {
-                                    enabled: true,
-                                    forced: true,
-                                    // doesn't matter which, use the fastest
-                                    approximation: 'open',
-                                    units: [[
-                                            grouping.unitName,
-                                            [grouping.count]
-                                        ]]
-                                } : {
-                                    enabled: false
-                                }
-                            };
-                            series.processData.apply(fakeSeries);
-                            fakeAxis.series.push(fakeSeries);
-                        });
-                        // Run beforeSetTickPositions to compute the ordinalPositions
-                        axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });
-                        // Cache it
-                        ordinalIndex[key] = fakeAxis.ordinal.positions;
-                    }
-                    return ordinalIndex[key];
-                };
-                /**
-                 * Find the factor to estimate how wide the plot area would have been if
-                 * ordinal gaps were included. This value is used to compute an imagined
-                 * plot width in order to establish the data grouping interval.
-                 *
-                 * A real world case is the intraday-candlestick example. Without this
-                 * logic, it would show the correct data grouping when viewing a range
-                 * within each day, but once moving the range to include the gap between
-                 * two days, the interval would include the cut-away night hours and the
-                 * data grouping would be wrong. So the below method tries to compensate
-                 * by identifying the most common point interval, in this case days.
-                 *
-                 * An opposite case is presented in issue #718. We have a long array of
-                 * daily data, then one point is appended one hour after the last point.
-                 * We expect the data grouping not to change.
-                 *
-                 * In the future, if we find cases where this estimation doesn't work
-                 * optimally, we might need to add a second pass to the data grouping
-                 * logic, where we do another run with a greater interval if the number
-                 * of data groups is more than a certain fraction of the desired group
-                 * count.
-                 *
-                 * @private
-                 */
-                Composition.prototype.getGroupIntervalFactor = function (xMin, xMax, series) {
-                    var ordinal = this,
-                        axis = ordinal.axis,
-                        i,
-                        processedXData = series.processedXData,
-                        len = processedXData.length,
-                        distances = [],
-                        median,
-                        groupIntervalFactor = ordinal.groupIntervalFactor;
-                    // Only do this computation for the first series, let the other
-                    // inherit it (#2416)
-                    if (!groupIntervalFactor) {
-                        // Register all the distances in an array
-                        for (i = 0; i < len - 1; i++) {
-                            distances[i] =
-                                processedXData[i + 1] - processedXData[i];
-                        }
-                        // Sort them and find the median
-                        distances.sort(function (a, b) {
-                            return a - b;
-                        });
-                        median = distances[Math.floor(len / 2)];
-                        // Compensate for series that don't extend through the entire
-                        // axis extent. #1675.
-                        xMin = Math.max(xMin, processedXData[0]);
-                        xMax = Math.min(xMax, processedXData[len - 1]);
-                        ordinal.groupIntervalFactor = groupIntervalFactor =
-                            (len * median) / (xMax - xMin);
-                    }
-                    // Return the factor needed for data grouping
-                    return groupIntervalFactor;
-                };
-                /**
-                 * Get ticks for an ordinal axis within a range where points don't
-                 * exist. It is required when overscroll is enabled. We can't base on
-                 * points, because we may not have any, so we use approximated
-                 * pointRange and generate these ticks between Axis.dataMax,
-                 * Axis.dataMax + Axis.overscroll evenly spaced. Used in panning and
-                 * navigator scrolling.
-                 *
-                 * @private
-                 */
-                Composition.prototype.getOverscrollPositions = function () {
-                    var ordinal = this,
-                        axis = ordinal.axis,
-                        extraRange = axis.options.overscroll,
-                        distance = ordinal.overscrollPointsRange,
-                        positions = [],
-                        max = axis.dataMax;
-                    if (defined(distance)) {
-                        // Max + pointRange because we need to scroll to the last
-                        positions.push(max);
-                        while (max <= axis.dataMax + extraRange) {
-                            max += distance;
-                            positions.push(max);
-                        }
-                    }
-                    return positions;
-                };
-                /**
-                 * Make the tick intervals closer because the ordinal gaps make the
-                 * ticks spread out or cluster.
-                 *
-                 * @private
-                 */
-                Composition.prototype.postProcessTickInterval = function (tickInterval) {
-                    // Problem: https://jsfiddle.net/highcharts/FQm4E/1/
-                    // This is a case where this algorithm doesn't work optimally. In
-                    // this case, the tick labels are spread out per week, but all the
-                    // gaps reside within weeks. So we have a situation where the labels
-                    // are courser than the ordinal gaps, and thus the tick interval
-                    // should not be altered.
-                    var ordinal = this,
-                        axis = ordinal.axis,
-                        ordinalSlope = ordinal.slope,
-                        ret;
-                    if (ordinalSlope) {
-                        if (!axis.options.breaks) {
-                            ret = tickInterval / (ordinalSlope / axis.closestPointRange);
-                        }
-                        else {
-                            ret = axis.closestPointRange || tickInterval; // #7275
-                        }
-                    }
-                    else {
-                        ret = tickInterval;
-                    }
-                    return ret;
-                };
-                return Composition;
-            }());
-            OrdinalAxis.Composition = Composition;
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * Extends the axis with ordinal support.
-             *
-             * @private
-             *
-             * @param AxisClass
-             * Axis class to extend.
-             *
-             * @param ChartClass
-             * Chart class to use.
-             *
-             * @param SeriesClass
-             * Series class to use.
-             */
-            function compose(AxisClass, ChartClass, SeriesClass) {
-                AxisClass.keepProps.push('ordinal');
-                var axisProto = AxisClass.prototype;
-                /**
-                 * In an ordinal axis, there might be areas with dense consentrations of
-                 * points, then large gaps between some. Creating equally distributed
-                 * ticks over this entire range may lead to a huge number of ticks that
-                 * will later be removed. So instead, break the positions up in
-                 * segments, find the tick positions for each segment then concatenize
-                 * them. This method is used from both data grouping logic and X axis
-                 * tick position logic.
-                 *
-                 * @private
-                 */
-                AxisClass.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek, positions, closestDistance, findHigherRanks) {
-                    if (positions === void 0) { positions = []; }
-                    if (closestDistance === void 0) { closestDistance = 0; }
-                    var start = 0,
-                        end,
-                        segmentPositions,
-                        higherRanks = {},
-                        hasCrossedHigherRank,
-                        info,
-                        posLength,
-                        outsideMax,
-                        groupPositions = [],
-                        lastGroupPosition = -Number.MAX_VALUE,
-                        tickPixelIntervalOption = this.options.tickPixelInterval,
-                        time = this.chart.time, 
-                        // Record all the start positions of a segment, to use when
-                        // deciding what's a gap in the data.
-                        segmentStarts = [];
-                    // The positions are not always defined, for example for ordinal
-                    // positions when data has regular interval (#1557, #2090)
-                    if ((!this.options.ordinal && !this.options.breaks) ||
-                        !positions ||
-                        positions.length < 3 ||
-                        typeof min === 'undefined') {
-                        return time.getTimeTicks.apply(time, arguments);
-                    }
-                    // Analyze the positions array to split it into segments on gaps
-                    // larger than 5 times the closest distance. The closest distance is
-                    // already found at this point, so we reuse that instead of
-                    // computing it again.
-                    posLength = positions.length;
-                    for (end = 0; end < posLength; end++) {
-                        outsideMax = end && positions[end - 1] > max;
-                        if (positions[end] < min) { // Set the last position before min
-                            start = end;
-                        }
-                        if (end === posLength - 1 ||
-                            positions[end + 1] - positions[end] > closestDistance * 5 ||
-                            outsideMax) {
-                            // For each segment, calculate the tick positions from the
-                            // getTimeTicks utility function. The interval will be the
-                            // same regardless of how long the segment is.
-                            if (positions[end] > lastGroupPosition) { // #1475
-                                segmentPositions = time.getTimeTicks(normalizedInterval, positions[start], positions[end], startOfWeek);
-                                // Prevent duplicate groups, for example for multiple
-                                // segments within one larger time frame (#1475)
-                                while (segmentPositions.length &&
-                                    segmentPositions[0] <= lastGroupPosition) {
-                                    segmentPositions.shift();
-                                }
-                                if (segmentPositions.length) {
-                                    lastGroupPosition =
-                                        segmentPositions[segmentPositions.length - 1];
-                                }
-                                segmentStarts.push(groupPositions.length);
-                                groupPositions = groupPositions.concat(segmentPositions);
-                            }
-                            // Set start of next segment
-                            start = end + 1;
-                        }
-                        if (outsideMax) {
-                            break;
-                        }
-                    }
-                    // Get the grouping info from the last of the segments. The info is
-                    // the same for all segments.
-                    info = segmentPositions.info;
-                    // Optionally identify ticks with higher rank, for example when the
-                    // ticks have crossed midnight.
-                    if (findHigherRanks && info.unitRange <= timeUnits.hour) {
-                        end = groupPositions.length - 1;
-                        // Compare points two by two
-                        for (start = 1; start < end; start++) {
-                            if (time.dateFormat('%d', groupPositions[start]) !==
-                                time.dateFormat('%d', groupPositions[start - 1])) {
-                                higherRanks[groupPositions[start]] = 'day';
-                                hasCrossedHigherRank = true;
-                            }
-                        }
-                        // If the complete array has crossed midnight, we want to mark
-                        // the first positions also as higher rank
-                        if (hasCrossedHigherRank) {
-                            higherRanks[groupPositions[0]] = 'day';
-                        }
-                        info.higherRanks = higherRanks;
-                    }
-                    // Save the info
-                    info.segmentStarts = segmentStarts;
-                    groupPositions.info = info;
-                    // Don't show ticks within a gap in the ordinal axis, where the
-                    // space between two points is greater than a portion of the tick
-                    // pixel interval
-                    if (findHigherRanks && defined(tickPixelIntervalOption)) {
-                        var length = groupPositions.length,
-                            i = length,
-                            itemToRemove,
-                            translated,
-                            translatedArr = [],
-                            lastTranslated,
-                            medianDistance,
-                            distance,
-                            distances = [];
-                        // Find median pixel distance in order to keep a reasonably even
-                        // distance between ticks (#748)
-                        while (i--) {
-                            translated = this.translate(groupPositions[i]);
-                            if (lastTranslated) {
-                                distances[i] = lastTranslated - translated;
-                            }
-                            translatedArr[i] = lastTranslated = translated;
-                        }
-                        distances.sort();
-                        medianDistance = distances[Math.floor(distances.length / 2)];
-                        if (medianDistance < tickPixelIntervalOption * 0.6) {
-                            medianDistance = null;
-                        }
-                        // Now loop over again and remove ticks where needed
-                        i = groupPositions[length - 1] > max ? length - 1 : length; // #817
-                        lastTranslated = void 0;
-                        while (i--) {
-                            translated = translatedArr[i];
-                            distance = Math.abs(lastTranslated - translated);
-                            // #4175 - when axis is reversed, the distance, is negative
-                            // but tickPixelIntervalOption positive, so we need to
-                            // compare the same values
-                            // Remove ticks that are closer than 0.6 times the pixel
-                            // interval from the one to the right, but not if it is
-                            // close to the median distance (#748).
-                            if (lastTranslated &&
-                                distance < tickPixelIntervalOption * 0.8 &&
-                                (medianDistance === null || distance < medianDistance * 0.8)) {
-                                // Is this a higher ranked position with a normal
-                                // position to the right?
-                                if (higherRanks[groupPositions[i]] &&
-                                    !higherRanks[groupPositions[i + 1]]) {
-                                    // Yes: remove the lower ranked neighbour to the
-                                    // right
-                                    itemToRemove = i + 1;
-                                    lastTranslated = translated; // #709
-                                }
-                                else {
-                                    // No: remove this one
-                                    itemToRemove = i;
-                                }
-                                groupPositions.splice(itemToRemove, 1);
-                            }
-                            else {
-                                lastTranslated = translated;
-                            }
-                        }
-                    }
-                    return groupPositions;
-                };
-                /**
-                 * Translate from linear (internal) to axis value.
-                 *
-                 * @private
-                 * @function Highcharts.Axis#lin2val
-                 *
-                 * @param {number} val
-                 *        The linear abstracted value.
-                 *
-                 * @param {boolean} [fromIndex]
-                 *        Translate from an index in the ordinal positions rather than a
-                 *        value.
-                 *
-                 * @return {number}
-                 */
-                axisProto.lin2val = function (val, fromIndex) {
-                    var axis = this,
-                        ordinal = axis.ordinal,
-                        ordinalPositions = ordinal.positions,
-                        ret;
-                    // the visible range contains only equally spaced values
-                    if (!ordinalPositions) {
-                        ret = val;
-                    }
-                    else {
-                        var ordinalSlope = ordinal.slope,
-                            ordinalOffset = ordinal.offset,
-                            i = ordinalPositions.length - 1,
-                            linearEquivalentLeft,
-                            linearEquivalentRight,
-                            distance;
-                        // Handle the case where we translate from the index directly,
-                        // used only when panning an ordinal axis
-                        if (fromIndex) {
-                            if (val < 0) { // out of range, in effect panning to the left
-                                val = ordinalPositions[0];
-                            }
-                            else if (val > i) { // out of range, panning to the right
-                                val = ordinalPositions[i];
-                            }
-                            else { // split it up
-                                i = Math.floor(val);
-                                distance = val - i; // the decimal
-                            }
-                            // Loop down along the ordinal positions. When the linear
-                            // equivalent of i matches an ordinal position, interpolate
-                            // between the left and right values.
-                        }
-                        else {
-                            while (i--) {
-                                linearEquivalentLeft =
-                                    (ordinalSlope * i) + ordinalOffset;
-                                if (val >= linearEquivalentLeft) {
-                                    linearEquivalentRight =
-                                        (ordinalSlope *
-                                            (i + 1)) +
-                                            ordinalOffset;
-                                    // something between 0 and 1
-                                    distance = (val - linearEquivalentLeft) /
-                                        (linearEquivalentRight - linearEquivalentLeft);
-                                    break;
-                                }
-                            }
-                        }
-                        // If the index is within the range of the ordinal positions,
-                        // return the associated or interpolated value. If not, just
-                        // return the value.
-                        return (typeof distance !== 'undefined' &&
-                            typeof ordinalPositions[i] !== 'undefined' ?
-                            ordinalPositions[i] + (distance ?
-                                distance *
-                                    (ordinalPositions[i + 1] - ordinalPositions[i]) :
-                                0) :
-                            val);
-                    }
-                    return ret;
-                };
-                /**
-                 * Translate from a linear axis value to the corresponding ordinal axis
-                 * position. If there are no gaps in the ordinal axis this will be the
-                 * same. The translated value is the value that the point would have if
-                 * the axis were linear, using the same min and max.
-                 *
-                 * @private
-                 * @function Highcharts.Axis#val2lin
-                 *
-                 * @param {number} val
-                 * The axis value.
-                 *
-                 * @param {boolean} [toIndex]
-                 * Whether to return the index in the ordinalPositions or the new value.
-                 *
-                 * @return {number}
-                 */
-                axisProto.val2lin = function (val, toIndex) {
-                    var axis = this,
-                        ordinal = axis.ordinal,
-                        ordinalPositions = ordinal.positions,
-                        ret;
-                    if (!ordinalPositions) {
-                        ret = val;
-                    }
-                    else {
-                        var ordinalLength = ordinalPositions.length,
-                            i,
-                            distance,
-                            ordinalIndex;
-                        // first look for an exact match in the ordinalpositions array
-                        i = ordinalLength;
-                        while (i--) {
-                            if (ordinalPositions[i] === val) {
-                                ordinalIndex = i;
-                                break;
-                            }
-                        }
-                        // if that failed, find the intermediate position between the
-                        // two nearest values
-                        i = ordinalLength - 1;
-                        while (i--) {
-                            if (val > ordinalPositions[i] || i === 0) { // interpolate
-                                // something between 0 and 1
-                                distance = (val - ordinalPositions[i]) /
-                                    (ordinalPositions[i + 1] - ordinalPositions[i]);
-                                ordinalIndex = i + distance;
-                                break;
-                            }
-                        }
-                        ret = toIndex ?
-                            ordinalIndex :
-                            ordinal.slope *
-                                (ordinalIndex || 0) +
-                                ordinal.offset;
-                    }
-                    return ret;
-                };
-                // Record this to prevent overwriting by broken-axis module (#5979)
-                axisProto.ordinal2lin = axisProto.val2lin;
-                /* eslint-disable no-invalid-this */
-                addEvent(AxisClass, 'afterInit', function () {
-                    var axis = this;
-                    if (!axis.ordinal) {
-                        axis.ordinal = new OrdinalAxis.Composition(axis);
-                    }
-                });
-                addEvent(AxisClass, 'foundExtremes', function () {
-                    var axis = this;
-                    if (axis.isXAxis &&
-                        defined(axis.options.overscroll) &&
-                        axis.max === axis.dataMax &&
-                        (
-                        // Panning is an execption. We don't want to apply
-                        // overscroll when panning over the dataMax
-                        !axis.chart.mouseIsDown ||
-                            axis.isInternal) && (
-                    // Scrollbar buttons are the other execption:
-                    !axis.eventArgs ||
-                        axis.eventArgs && axis.eventArgs.trigger !== 'navigator')) {
-                        axis.max += axis.options.overscroll;
-                        // Live data and buttons require translation for the min:
-                        if (!axis.isInternal && defined(axis.userMin)) {
-                            axis.min += axis.options.overscroll;
-                        }
-                    }
-                });
-                // For ordinal axis, that loads data async, redraw axis after data is
-                // loaded. If we don't do that, axis will have the same extremes as
-                // previously, but ordinal positions won't be calculated. See #10290
-                addEvent(AxisClass, 'afterSetScale', function () {
-                    var axis = this;
-                    if (axis.horiz && !axis.isDirty) {
-                        axis.isDirty = axis.isOrdinal &&
-                            axis.chart.navigator &&
-                            !axis.chart.navigator.adaptToUpdatedData;
-                    }
-                });
-                addEvent(AxisClass, 'initialAxisTranslation', function () {
-                    var axis = this;
-                    if (axis.ordinal) {
-                        axis.ordinal.beforeSetTickPositions();
-                        axis.tickInterval = axis.ordinal.postProcessTickInterval(axis.tickInterval);
-                    }
-                });
-                // Extending the Chart.pan method for ordinal axes
-                addEvent(ChartClass, 'pan', function (e) {
-                    var chart = this,
-                        xAxis = chart.xAxis[0],
-                        overscroll = xAxis.options.overscroll,
-                        chartX = e.originalEvent.chartX,
-                        panning = chart.options.chart &&
-                            chart.options.chart.panning,
-                        runBase = false;
-                    if (panning &&
-                        panning.type !== 'y' &&
-                        xAxis.options.ordinal &&
-                        xAxis.series.length) {
-                        var mouseDownX = chart.mouseDownX,
-                            extremes = xAxis.getExtremes(),
-                            dataMax = extremes.dataMax,
-                            min = extremes.min,
-                            max = extremes.max,
-                            trimmedRange,
-                            hoverPoints = chart.hoverPoints,
-                            closestPointRange = (xAxis.closestPointRange ||
-                                (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)),
-                            pointPixelWidth = (xAxis.translationSlope *
-                                (xAxis.ordinal.slope || closestPointRange)), 
-                            // how many ordinal units did we move?
-                            movedUnits = (mouseDownX - chartX) / pointPixelWidth, 
-                            // get index of all the chart's points
-                            extendedAxis = { ordinal: { positions: xAxis.ordinal.getExtendedPositions() } },
-                            ordinalPositions,
-                            searchAxisLeft,
-                            lin2val = xAxis.lin2val,
-                            val2lin = xAxis.val2lin,
-                            searchAxisRight;
-                        // we have an ordinal axis, but the data is equally spaced
-                        if (!extendedAxis.ordinal.positions) {
-                            runBase = true;
-                        }
-                        else if (Math.abs(movedUnits) > 1) {
-                            // Remove active points for shared tooltip
-                            if (hoverPoints) {
-                                hoverPoints.forEach(function (point) {
-                                    point.setState();
-                                });
-                            }
-                            if (movedUnits < 0) {
-                                searchAxisLeft = extendedAxis;
-                                searchAxisRight = xAxis.ordinal.positions ? xAxis : extendedAxis;
-                            }
-                            else {
-                                searchAxisLeft = xAxis.ordinal.positions ? xAxis : extendedAxis;
-                                searchAxisRight = extendedAxis;
-                            }
-                            // In grouped data series, the last ordinal position
-                            // represents the grouped data, which is to the left of the
-                            // real data max. If we don't compensate for this, we will
-                            // be allowed to pan grouped data series passed the right of
-                            // the plot area.
-                            ordinalPositions = searchAxisRight.ordinal.positions;
-                            if (dataMax >
-                                ordinalPositions[ordinalPositions.length - 1]) {
-                                ordinalPositions.push(dataMax);
-                            }
-                            // Get the new min and max values by getting the ordinal
-                            // index for the current extreme, then add the moved units
-                            // and translate back to values. This happens on the
-                            // extended ordinal positions if the new position is out of
-                            // range, else it happens on the current x axis which is
-                            // smaller and faster.
-                            chart.fixedRange = max - min;
-                            trimmedRange = xAxis.navigatorAxis.toFixedRange(null, null, lin2val.apply(searchAxisLeft, [
-                                val2lin.apply(searchAxisLeft, [min, true]) + movedUnits,
-                                true // translate from index
-                            ]), lin2val.apply(searchAxisRight, [
-                                val2lin.apply(searchAxisRight, [max, true]) + movedUnits,
-                                true // translate from index
-                            ]));
-                            // Apply it if it is within the available data range
-                            if (trimmedRange.min >= Math.min(extremes.dataMin, min) &&
-                                trimmedRange.max <= Math.max(dataMax, max) + overscroll) {
-                                xAxis.setExtremes(trimmedRange.min, trimmedRange.max, true, false, { trigger: 'pan' });
-                            }
-                            chart.mouseDownX = chartX; // set new reference for next run
-                            css(chart.container, { cursor: 'move' });
-                        }
-                    }
-                    else {
-                        runBase = true;
-                    }
-                    // revert to the linear chart.pan version
-                    if (runBase || (panning && /y/.test(panning.type))) {
-                        if (overscroll) {
-                            xAxis.max = xAxis.dataMax + overscroll;
-                        }
-                    }
-                    else {
-                        e.preventDefault();
-                    }
-                });
-                addEvent(SeriesClass, 'updatedData', function () {
-                    var xAxis = this.xAxis;
-                    // Destroy the extended ordinal index on updated data
-                    if (xAxis && xAxis.options.ordinal) {
-                        delete xAxis.ordinal.index;
-                    }
-                });
-                /* eslint-enable no-invalid-this */
-            }
-            OrdinalAxis.compose = compose;
-        })(OrdinalAxis || (OrdinalAxis = {}));
-        OrdinalAxis.compose(Axis, Chart, CartesianSeries); // @todo move to StockChart, remove from master
-
-        return OrdinalAxis;
-    });
-    _registerModule(_modules, 'Core/Axis/BrokenAxis.js', [_modules['Core/Axis/Axis.js'], _modules['Series/LineSeries.js'], _modules['Extensions/Stacking.js'], _modules['Core/Utilities.js']], function (Axis, LineSeries, StackItem, U) {
-        /* *
+        Navigator.prototype.getPartsEvents = function (eventName) {
+          var navigator = this,
+            events = [];
+          ["shades", "handles"].forEach(function (name) {
+            navigator[name].forEach(function (navigatorItem, index) {
+              events.push(
+                addEvent(navigatorItem.element, eventName, function (e) {
+                  navigator[name + "Mousedown"](e, index);
+                })
+              );
+            });
+          });
+          return events;
+        };
+        /**
+         * Mousedown on a shaded mask, either:
+         *
+         * - will be stored for future drag&drop
          *
-         *  (c) 2009-2020 Torstein Honsi
+         * - will directly shift to a new range
          *
-         *  License: www.highcharts.com/license
+         * @private
+         * @function Highcharts.Navigator#shadesMousedown
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
          *
-         * */
-        var addEvent = U.addEvent,
-            find = U.find,
-            fireEvent = U.fireEvent,
-            isArray = U.isArray,
-            isNumber = U.isNumber,
-            pick = U.pick;
-        /* eslint-disable valid-jsdoc */
+         * @param {number} index
+         *        Index of a mask in Navigator.shades array
+         */
+        Navigator.prototype.shadesMousedown = function (e, index) {
+          e = this.chart.pointer.normalize(e);
+          var navigator = this,
+            chart = navigator.chart,
+            xAxis = navigator.xAxis,
+            zoomedMin = navigator.zoomedMin,
+            navigatorPosition = navigator.left,
+            navigatorSize = navigator.size,
+            range = navigator.range,
+            chartX = e.chartX,
+            fixedMax,
+            fixedMin,
+            ext,
+            left;
+          // For inverted chart, swap some options:
+          if (chart.inverted) {
+            chartX = e.chartY;
+            navigatorPosition = navigator.top;
+          }
+          if (index === 1) {
+            // Store information for drag&drop
+            navigator.grabbedCenter = chartX;
+            navigator.fixedWidth = range;
+            navigator.dragOffset = chartX - zoomedMin;
+          } else {
+            // Shift the range by clicking on shaded areas
+            left = chartX - navigatorPosition - range / 2;
+            if (index === 0) {
+              left = Math.max(0, left);
+            } else if (index === 2 && left + range >= navigatorSize) {
+              left = navigatorSize - range;
+              if (navigator.reversedExtremes) {
+                // #7713
+                left -= range;
+                fixedMin = navigator.getUnionExtremes().dataMin;
+              } else {
+                // #2293, #3543
+                fixedMax = navigator.getUnionExtremes().dataMax;
+              }
+            }
+            if (left !== zoomedMin) {
+              // it has actually moved
+              navigator.fixedWidth = range; // #1370
+              ext = xAxis.navigatorAxis.toFixedRange(
+                left,
+                left + range,
+                fixedMin,
+                fixedMax
+              );
+              if (defined(ext.min)) {
+                // #7411
+                chart.xAxis[0].setExtremes(
+                  Math.min(ext.min, ext.max),
+                  Math.max(ext.min, ext.max),
+                  true,
+                  null, // auto animation
+                  { trigger: "navigator" }
+                );
+              }
+            }
+          }
+        };
         /**
-         * Provides support for broken axes.
+         * Mousedown on a handle mask.
+         * Will store necessary information for drag&drop.
+         *
          * @private
-         * @class
+         * @function Highcharts.Navigator#handlesMousedown
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
+         * @param {number} index
+         *        Index of a handle in Navigator.handles array
+         * @return {void}
          */
-        var BrokenAxisAdditions = /** @class */ (function () {
-                /* *
-                 *
-                 *  Constructors
-                 *
-                 * */
-                function BrokenAxisAdditions(axis) {
-                    this.hasBreaks = false;
-                this.axis = axis;
+        Navigator.prototype.handlesMousedown = function (e, index) {
+          e = this.chart.pointer.normalize(e);
+          var navigator = this,
+            chart = navigator.chart,
+            baseXAxis = chart.xAxis[0],
+            // For reversed axes, min and max are changed,
+            // so the other extreme should be stored
+            reverse = navigator.reversedExtremes;
+          if (index === 0) {
+            // Grab the left handle
+            navigator.grabbedLeft = true;
+            navigator.otherHandlePos = navigator.zoomedMax;
+            navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;
+          } else {
+            // Grab the right handle
+            navigator.grabbedRight = true;
+            navigator.otherHandlePos = navigator.zoomedMin;
+            navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;
+          }
+          chart.fixedRange = null;
+        };
+        /**
+         * Mouse move event based on x/y mouse position.
+         *
+         * @private
+         * @function Highcharts.Navigator#onMouseMove
+         *
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
+         */
+        Navigator.prototype.onMouseMove = function (e) {
+          var navigator = this,
+            chart = navigator.chart,
+            left = navigator.left,
+            navigatorSize = navigator.navigatorSize,
+            range = navigator.range,
+            dragOffset = navigator.dragOffset,
+            inverted = chart.inverted,
+            chartX;
+          // In iOS, a mousemove event with e.pageX === 0 is fired when holding
+          // the finger down in the center of the scrollbar. This should be
+          // ignored.
+          if (!e.touches || e.touches[0].pageX !== 0) {
+            // #4696
+            e = chart.pointer.normalize(e);
+            chartX = e.chartX;
+            // Swap some options for inverted chart
+            if (inverted) {
+              left = navigator.top;
+              chartX = e.chartY;
             }
-            /* *
-             *
-             *  Static Functions
-             *
-             * */
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.isInBreak = function (brk, val) {
-                var ret,
-                    repeat = brk.repeat || Infinity,
-                    from = brk.from,
-                    length = brk.to - brk.from,
-                    test = (val >= from ?
-                        (val - from) % repeat :
-                        repeat - ((from - val) % repeat));
-                if (!brk.inclusive) {
-                    ret = test < length && test !== 0;
-                }
-                else {
-                    ret = test <= length;
-                }
-                return ret;
-            };
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.lin2Val = function (val) {
-                var axis = this;
-                var brokenAxis = axis.brokenAxis;
-                var breakArray = brokenAxis && brokenAxis.breakArray;
-                if (!breakArray) {
-                    return val;
-                }
-                var nval = val,
-                    brk,
-                    i;
-                for (i = 0; i < breakArray.length; i++) {
-                    brk = breakArray[i];
-                    if (brk.from >= nval) {
-                        break;
-                    }
-                    else if (brk.to < nval) {
-                        nval += brk.len;
-                    }
-                    else if (BrokenAxisAdditions.isInBreak(brk, nval)) {
-                        nval += brk.len;
-                    }
-                }
-                return nval;
-            };
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.val2Lin = function (val) {
-                var axis = this;
-                var brokenAxis = axis.brokenAxis;
-                var breakArray = brokenAxis && brokenAxis.breakArray;
-                if (!breakArray) {
-                    return val;
-                }
-                var nval = val,
-                    brk,
-                    i;
-                for (i = 0; i < breakArray.length; i++) {
-                    brk = breakArray[i];
-                    if (brk.to <= val) {
-                        nval -= brk.len;
-                    }
-                    else if (brk.from >= val) {
-                        break;
-                    }
-                    else if (BrokenAxisAdditions.isInBreak(brk, val)) {
-                        nval -= (val - brk.from);
-                        break;
-                    }
-                }
-                return nval;
-            };
-            /* *
-             *
-             *  Functions
-             *
-             * */
-            /**
-             * Returns the first break found where the x is larger then break.from and
-             * smaller then break.to.
-             *
-             * @param {number} x
-             * The number which should be within a break.
-             *
-             * @param {Array<Highcharts.XAxisBreaksOptions>} breaks
-             * The array of breaks to search within.
-             *
-             * @return {Highcharts.XAxisBreaksOptions|undefined}
-             * Returns the first break found that matches, returns false if no break is
-             * found.
-             */
-            BrokenAxisAdditions.prototype.findBreakAt = function (x, breaks) {
-                return find(breaks, function (b) {
-                    return b.from < x && x < b.to;
-                });
-            };
-            /**
-             * @private
-             */
-            BrokenAxisAdditions.prototype.isInAnyBreak = function (val, testKeep) {
-                var brokenAxis = this;
-                var axis = brokenAxis.axis;
-                var breaks = axis.options.breaks,
-                    i = breaks && breaks.length,
-                    inbrk,
-                    keep,
-                    ret;
-                if (i) {
-                    while (i--) {
-                        if (BrokenAxisAdditions.isInBreak(breaks[i], val)) {
-                            inbrk = true;
-                            if (!keep) {
-                                keep = pick(breaks[i].showPoints, !axis.isXAxis);
-                            }
-                        }
-                    }
-                    if (inbrk && testKeep) {
-                        ret = inbrk && !keep;
-                    }
-                    else {
-                        ret = inbrk;
-                    }
-                }
-                return ret;
-            };
-            /**
-             * Dynamically set or unset breaks in an axis. This function in lighter than
-             * usin Axis.update, and it also preserves animation.
-             *
-             * @private
-             * @function Highcharts.Axis#setBreaks
-             *
-             * @param {Array<Highcharts.XAxisBreaksOptions>} [breaks]
-             *        The breaks to add. When `undefined` it removes existing breaks.
-             *
-             * @param {boolean} [redraw=true]
-             *        Whether to redraw the chart immediately.
-             *
-             * @return {void}
-             */
-            BrokenAxisAdditions.prototype.setBreaks = function (breaks, redraw) {
-                var brokenAxis = this;
-                var axis = brokenAxis.axis;
-                var hasBreaks = (isArray(breaks) && !!breaks.length);
-                axis.isDirty = brokenAxis.hasBreaks !== hasBreaks;
-                brokenAxis.hasBreaks = hasBreaks;
-                axis.options.breaks = axis.userOptions.breaks = breaks;
-                axis.forceRedraw = true; // Force recalculation in setScale
-                // Recalculate series related to the axis.
-                axis.series.forEach(function (series) {
-                    series.isDirty = true;
-                });
-                if (!hasBreaks && axis.val2lin === BrokenAxisAdditions.val2Lin) {
-                    // Revert to prototype functions
-                    delete axis.val2lin;
-                    delete axis.lin2val;
-                }
-                if (hasBreaks) {
-                    axis.userOptions.ordinal = false;
-                    axis.lin2val = BrokenAxisAdditions.lin2Val;
-                    axis.val2lin = BrokenAxisAdditions.val2Lin;
-                    axis.setExtremes = function (newMin, newMax, redraw, animation, eventArguments) {
-                        // If trying to set extremes inside a break, extend min to
-                        // after, and max to before the break ( #3857 )
-                        if (brokenAxis.hasBreaks) {
-                            var axisBreak,
-                                breaks = this.options.breaks;
-                            while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks))) {
-                                newMin = axisBreak.to;
-                            }
-                            while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks))) {
-                                newMax = axisBreak.from;
-                            }
-                            // If both min and max is within the same break.
-                            if (newMax < newMin) {
-                                newMax = newMin;
-                            }
-                        }
-                        Axis.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments);
-                    };
-                    axis.setAxisTranslation = function (saveOld) {
-                        Axis.prototype.setAxisTranslation.call(this, saveOld);
-                        brokenAxis.unitLength = null;
-                        if (brokenAxis.hasBreaks) {
-                            var breaks = axis.options.breaks || [], 
-                                // Temporary one:
-                                breakArrayT = [],
-                                breakArray = [],
-                                length = 0,
-                                inBrk,
-                                repeat,
-                                min = axis.userMin || axis.min,
-                                max = axis.userMax || axis.max,
-                                pointRangePadding = pick(axis.pointRangePadding, 0),
-                                start,
-                                i;
-                            // Min & max check (#4247)
-                            breaks.forEach(function (brk) {
-                                repeat = brk.repeat || Infinity;
-                                if (BrokenAxisAdditions.isInBreak(brk, min)) {
-                                    min +=
-                                        (brk.to % repeat) -
-                                            (min % repeat);
-                                }
-                                if (BrokenAxisAdditions.isInBreak(brk, max)) {
-                                    max -=
-                                        (max % repeat) -
-                                            (brk.from % repeat);
-                                }
-                            });
-                            // Construct an array holding all breaks in the axis
-                            breaks.forEach(function (brk) {
-                                start = brk.from;
-                                repeat = brk.repeat || Infinity;
-                                while (start - repeat > min) {
-                                    start -= repeat;
-                                }
-                                while (start < min) {
-                                    start += repeat;
-                                }
-                                for (i = start; i < max; i += repeat) {
-                                    breakArrayT.push({
-                                        value: i,
-                                        move: 'in'
-                                    });
-                                    breakArrayT.push({
-                                        value: i + (brk.to - brk.from),
-                                        move: 'out',
-                                        size: brk.breakSize
-                                    });
-                                }
-                            });
-                            breakArrayT.sort(function (a, b) {
-                                return ((a.value === b.value) ?
-                                    ((a.move === 'in' ? 0 : 1) -
-                                        (b.move === 'in' ? 0 : 1)) :
-                                    a.value - b.value);
-                            });
-                            // Simplify the breaks
-                            inBrk = 0;
-                            start = min;
-                            breakArrayT.forEach(function (brk) {
-                                inBrk += (brk.move === 'in' ? 1 : -1);
-                                if (inBrk === 1 && brk.move === 'in') {
-                                    start = brk.value;
-                                }
-                                if (inBrk === 0) {
-                                    breakArray.push({
-                                        from: start,
-                                        to: brk.value,
-                                        len: brk.value - start - (brk.size || 0)
-                                    });
-                                    length += brk.value - start - (brk.size || 0);
-                                }
-                            });
-                            /**
-                             * HC <= 8 backwards compatibility, used by demo samples.
-                             * @deprecated
-                             * @private
-                             * @requires modules/broken-axis
-                             */
-                            axis.breakArray = brokenAxis.breakArray = breakArray;
-                            // Used with staticScale, and below the actual axis length,
-                            // when breaks are substracted.
-                            brokenAxis.unitLength = max - min - length + pointRangePadding;
-                            fireEvent(axis, 'afterBreaks');
-                            if (axis.staticScale) {
-                                axis.transA = axis.staticScale;
-                            }
-                            else if (brokenAxis.unitLength) {
-                                axis.transA *=
-                                    (max - axis.min + pointRangePadding) /
-                                        brokenAxis.unitLength;
-                            }
-                            if (pointRangePadding) {
-                                axis.minPixelPadding =
-                                    axis.transA * axis.minPointOffset;
-                            }
-                            axis.min = min;
-                            axis.max = max;
-                        }
-                    };
-                }
-                if (pick(redraw, true)) {
-                    axis.chart.redraw();
-                }
-            };
-            return BrokenAxisAdditions;
-        }());
+            // Drag left handle or top handle
+            if (navigator.grabbedLeft) {
+              navigator.hasDragged = true;
+              navigator.render(0, 0, chartX - left, navigator.otherHandlePos);
+              // Drag right handle or bottom handle
+            } else if (navigator.grabbedRight) {
+              navigator.hasDragged = true;
+              navigator.render(0, 0, navigator.otherHandlePos, chartX - left);
+              // Drag scrollbar or open area in navigator
+            } else if (navigator.grabbedCenter) {
+              navigator.hasDragged = true;
+              if (chartX < dragOffset) {
+                // outside left
+                chartX = dragOffset;
+                // outside right
+              } else if (chartX > navigatorSize + dragOffset - range) {
+                chartX = navigatorSize + dragOffset - range;
+              }
+              navigator.render(
+                0,
+                0,
+                chartX - dragOffset,
+                chartX - dragOffset + range
+              );
+            }
+            if (
+              navigator.hasDragged &&
+              navigator.scrollbar &&
+              pick(
+                navigator.scrollbar.options.liveRedraw,
+                // By default, don't run live redraw on VML, on touch
+                // devices or if the chart is in boost.
+                H.svg && !isTouchDevice && !this.chart.isBoosting
+              )
+            ) {
+              e.DOMType = e.type; // DOMType is for IE8
+              setTimeout(function () {
+                navigator.onMouseUp(e);
+              }, 0);
+            }
+          }
+        };
         /**
-         * Axis with support of broken data rows.
+         * Mouse up event based on x/y mouse position.
+         *
          * @private
-         * @class
+         * @function Highcharts.Navigator#onMouseUp
+         * @param {Highcharts.PointerEventObject} e
+         *        Mouse event
+         * @return {void}
          */
-        var BrokenAxis = /** @class */ (function () {
-                function BrokenAxis() {
+        Navigator.prototype.onMouseUp = function (e) {
+          var navigator = this,
+            chart = navigator.chart,
+            xAxis = navigator.xAxis,
+            scrollbar = navigator.scrollbar,
+            DOMEvent = e.DOMEvent || e,
+            inverted = chart.inverted,
+            verb =
+              navigator.rendered && !navigator.hasDragged ? "animate" : "attr",
+            zoomedMax,
+            zoomedMin,
+            unionExtremes,
+            fixedMin,
+            fixedMax,
+            ext;
+          if (
+            // MouseUp is called for both, navigator and scrollbar (that order),
+            // which causes calling afterSetExtremes twice. Prevent first call
+            // by checking if scrollbar is going to set new extremes (#6334)
+            (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||
+            e.trigger === "scrollbar"
+          ) {
+            unionExtremes = navigator.getUnionExtremes();
+            // When dragging one handle, make sure the other one doesn't change
+            if (navigator.zoomedMin === navigator.otherHandlePos) {
+              fixedMin = navigator.fixedExtreme;
+            } else if (navigator.zoomedMax === navigator.otherHandlePos) {
+              fixedMax = navigator.fixedExtreme;
+            }
+            // Snap to right edge (#4076)
+            if (navigator.zoomedMax === navigator.size) {
+              fixedMax = navigator.reversedExtremes
+                ? unionExtremes.dataMin
+                : unionExtremes.dataMax;
+            }
+            // Snap to left edge (#7576)
+            if (navigator.zoomedMin === 0) {
+              fixedMin = navigator.reversedExtremes
+                ? unionExtremes.dataMax
+                : unionExtremes.dataMin;
+            }
+            ext = xAxis.navigatorAxis.toFixedRange(
+              navigator.zoomedMin,
+              navigator.zoomedMax,
+              fixedMin,
+              fixedMax
+            );
+            if (defined(ext.min)) {
+              chart.xAxis[0].setExtremes(
+                Math.min(ext.min, ext.max),
+                Math.max(ext.min, ext.max),
+                true,
+                // Run animation when clicking buttons, scrollbar track etc,
+                // but not when dragging handles or scrollbar
+                navigator.hasDragged ? false : null,
+                {
+                  trigger: "navigator",
+                  triggerOp: "navigator-drag",
+                  DOMEvent: DOMEvent, // #1838
                 }
-                /**
-                 * Adds support for broken axes.
-                 * @private
-                 */
-                BrokenAxis.compose = function (AxisClass, SeriesClass) {
-                    AxisClass.keepProps.push('brokenAxis');
-                var seriesProto = LineSeries.prototype;
-                /**
-                 * @private
-                 */
-                seriesProto.drawBreaks = function (axis, keys) {
-                    var series = this,
-                        points = series.points,
-                        breaks,
-                        threshold,
-                        eventName,
-                        y;
-                    if (axis && // #5950
-                        axis.brokenAxis &&
-                        axis.brokenAxis.hasBreaks) {
-                        var brokenAxis_1 = axis.brokenAxis;
-                        keys.forEach(function (key) {
-                            breaks = brokenAxis_1 && brokenAxis_1.breakArray || [];
-                            threshold = axis.isXAxis ?
-                                axis.min :
-                                pick(series.options.threshold, axis.min);
-                            points.forEach(function (point) {
-                                y = pick(point['stack' + key.toUpperCase()], point[key]);
-                                breaks.forEach(function (brk) {
-                                    if (isNumber(threshold) && isNumber(y)) {
-                                        eventName = false;
-                                        if ((threshold < brk.from && y > brk.to) ||
-                                            (threshold > brk.from && y < brk.from)) {
-                                            eventName = 'pointBreak';
-                                        }
-                                        else if ((threshold < brk.from && y > brk.from && y < brk.to) ||
-                                            (threshold > brk.from && y > brk.to && y < brk.from)) {
-                                            eventName = 'pointInBreak';
-                                        }
-                                        if (eventName) {
-                                            fireEvent(axis, eventName, { point: point, brk: brk });
-                                        }
-                                    }
-                                });
-                            });
-                        });
-                    }
-                };
-                /**
-                 * Extend getGraphPath by identifying gaps in the data so that we can
-                 * draw a gap in the line or area. This was moved from ordinal axis
-                 * module to broken axis module as of #5045.
-                 *
-                 * @private
-                 * @function Highcharts.Series#gappedPath
-                 *
-                 * @return {Highcharts.SVGPathArray}
-                 * Gapped path
-                 */
-                seriesProto.gappedPath = function () {
-                    var currentDataGrouping = this.currentDataGrouping,
-                        groupingSize = currentDataGrouping && currentDataGrouping.gapSize,
-                        gapSize = this.options.gapSize,
-                        points = this.points.slice(),
-                        i = points.length - 1,
-                        yAxis = this.yAxis,
-                        stack;
-                    /**
-                     * Defines when to display a gap in the graph, together with the
-                     * [gapUnit](plotOptions.series.gapUnit) option.
-                     *
-                     * In case when `dataGrouping` is enabled, points can be grouped
-                     * into a larger time span. This can make the grouped points to have
-                     * a greater distance than the absolute value of `gapSize` property,
-                     * which will result in disappearing graph completely. To prevent
-                     * this situation the mentioned distance between grouped points is
-                     * used instead of previously defined `gapSize`.
-                     *
-                     * In practice, this option is most often used to visualize gaps in
-                     * time series. In a stock chart, intraday data is available for
-                     * daytime hours, while gaps will appear in nights and weekends.
-                     *
-                     * @see [gapUnit](plotOptions.series.gapUnit)
-                     * @see [xAxis.breaks](#xAxis.breaks)
-                     *
-                     * @sample {highstock} stock/plotoptions/series-gapsize/
-                     *         Setting the gap size to 2 introduces gaps for weekends
-                     *         in daily datasets.
-                     *
-                     * @type      {number}
-                     * @default   0
-                     * @product   highstock
-                     * @requires  modules/broken-axis
-                     * @apioption plotOptions.series.gapSize
-                     */
-                    /**
-                     * Together with [gapSize](plotOptions.series.gapSize), this option
-                     * defines where to draw gaps in the graph.
-                     *
-                     * When the `gapUnit` is `"relative"` (default), a gap size of 5
-                     * means that if the distance between two points is greater than
-                     * 5 times that of the two closest points, the graph will be broken.
-                     *
-                     * When the `gapUnit` is `"value"`, the gap is based on absolute
-                     * axis values, which on a datetime axis is milliseconds. This also
-                     * applies to the navigator series that inherits gap options from
-                     * the base series.
-                     *
-                     * @see [gapSize](plotOptions.series.gapSize)
-                     *
-                     * @type       {string}
-                     * @default    relative
-                     * @since      5.0.13
-                     * @product    highstock
-                     * @validvalue ["relative", "value"]
-                     * @requires   modules/broken-axis
-                     * @apioption  plotOptions.series.gapUnit
-                     */
-                    if (gapSize && i > 0) { // #5008
-                        // Gap unit is relative
-                        if (this.options.gapUnit !== 'value') {
-                            gapSize *= this.basePointRange;
-                        }
-                        // Setting a new gapSize in case dataGrouping is enabled (#7686)
-                        if (groupingSize &&
-                            groupingSize > gapSize &&
-                            // Except when DG is forced (e.g. from other series)
-                            // and has lower granularity than actual points (#11351)
-                            groupingSize >= this.basePointRange) {
-                            gapSize = groupingSize;
-                        }
-                        // extension for ordinal breaks
-                        var current = void 0,
-                            next = void 0;
-                        while (i--) {
-                            // Reassign next if it is not visible
-                            if (!(next && next.visible !== false)) {
-                                next = points[i + 1];
-                            }
-                            current = points[i];
-                            // Skip iteration if one of the points is not visible
-                            if (next.visible === false || current.visible === false) {
-                                continue;
-                            }
-                            if (next.x - current.x > gapSize) {
-                                var xRange = (current.x + next.x) / 2;
-                                points.splice(// insert after this one
-                                i + 1, 0, {
-                                    isNull: true,
-                                    x: xRange
-                                });
-                                // For stacked chart generate empty stack items, #6546
-                                if (yAxis.stacking && this.options.stacking) {
-                                    stack = yAxis.stacking.stacks[this.stackKey][xRange] =
-                                        new StackItem(yAxis, yAxis.options
-                                            .stackLabels, false, xRange, this.stack);
-                                    stack.total = 0;
-                                }
-                            }
-                            // Assign current to next for the upcoming iteration
-                            next = current;
-                        }
-                    }
-                    // Call base method
-                    return this.getGraphPath(points);
-                };
-                /* eslint-disable no-invalid-this */
-                addEvent(AxisClass, 'init', function () {
-                    var axis = this;
-                    if (!axis.brokenAxis) {
-                        axis.brokenAxis = new BrokenAxisAdditions(axis);
-                    }
-                });
-                addEvent(AxisClass, 'afterInit', function () {
-                    if (typeof this.brokenAxis !== 'undefined') {
-                        this.brokenAxis.setBreaks(this.options.breaks, false);
-                    }
-                });
-                addEvent(AxisClass, 'afterSetTickPositions', function () {
-                    var axis = this;
-                    var brokenAxis = axis.brokenAxis;
-                    if (brokenAxis &&
-                        brokenAxis.hasBreaks) {
-                        var tickPositions = this.tickPositions,
-                            info = this.tickPositions.info,
-                            newPositions = [],
-                            i;
-                        for (i = 0; i < tickPositions.length; i++) {
-                            if (!brokenAxis.isInAnyBreak(tickPositions[i])) {
-                                newPositions.push(tickPositions[i]);
-                            }
-                        }
-                        this.tickPositions = newPositions;
-                        this.tickPositions.info = info;
-                    }
-                });
-                // Force Axis to be not-ordinal when breaks are defined
-                addEvent(AxisClass, 'afterSetOptions', function () {
-                    if (this.brokenAxis && this.brokenAxis.hasBreaks) {
-                        this.options.ordinal = false;
-                    }
-                });
-                addEvent(SeriesClass, 'afterGeneratePoints', function () {
-                    var _a = this,
-                        isDirty = _a.isDirty,
-                        connectNulls = _a.options.connectNulls,
-                        points = _a.points,
-                        xAxis = _a.xAxis,
-                        yAxis = _a.yAxis;
-                    // Set, or reset visibility of the points. Axis.setBreaks marks the
-                    // series as isDirty
-                    if (isDirty) {
-                        var i = points.length;
-                        while (i--) {
-                            var point = points[i];
-                            // Respect nulls inside the break (#4275)
-                            var nullGap = point.y === null && connectNulls === false;
-                            var isPointInBreak = (!nullGap && ((xAxis &&
-                                    xAxis.brokenAxis &&
-                                    xAxis.brokenAxis.isInAnyBreak(point.x,
-                                true)) || (yAxis &&
-                                    yAxis.brokenAxis &&
-                                    yAxis.brokenAxis.isInAnyBreak(point.y,
-                                true))));
-                            // Set point.visible if in any break.
-                            // If not in break, reset visible to original value.
-                            point.visible = isPointInBreak ?
-                                false :
-                                point.options.visible !== false;
-                        }
-                    }
-                });
-                addEvent(SeriesClass, 'afterRender', function drawPointsWrapped() {
-                    this.drawBreaks(this.xAxis, ['x']);
-                    this.drawBreaks(this.yAxis, pick(this.pointArrayMap, ['y']));
-                });
-            };
-            return BrokenAxis;
-        }());
-        BrokenAxis.compose(Axis, LineSeries); // @todo remove automatism
-
-        return BrokenAxis;
-    });
-    _registerModule(_modules, 'masters/modules/broken-axis.src.js', [], function () {
-
-
-    });
-    _registerModule(_modules, 'Extensions/DataGrouping.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Axis/DateTimeAxis.js'], _modules['Core/Globals.js'], _modules['Core/Options.js'], _modules['Core/Series/Point.js'], _modules['Core/Tooltip.js'], _modules['Core/Utilities.js']], function (Axis, DateTimeAxis, H, O, Point, Tooltip, U) {
-        /* *
+              );
+            }
+          }
+          if (e.DOMType !== "mousemove" && e.DOMType !== "touchmove") {
+            navigator.grabbedLeft =
+              navigator.grabbedRight =
+              navigator.grabbedCenter =
+              navigator.fixedWidth =
+              navigator.fixedExtreme =
+              navigator.otherHandlePos =
+              navigator.hasDragged =
+              navigator.dragOffset =
+                null;
+          }
+          // Update position of navigator shades, outline and handles (#12573)
+          if (
+            navigator.navigatorEnabled &&
+            isNumber(navigator.zoomedMin) &&
+            isNumber(navigator.zoomedMax)
+          ) {
+            zoomedMin = Math.round(navigator.zoomedMin);
+            zoomedMax = Math.round(navigator.zoomedMax);
+            if (navigator.shades) {
+              navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);
+            }
+            if (navigator.outline) {
+              navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);
+            }
+            if (
+              navigator.navigatorOptions.handles.enabled &&
+              Object.keys(navigator.handles).length === navigator.handles.length
+            ) {
+              navigator.drawHandle(zoomedMin, 0, inverted, verb);
+              navigator.drawHandle(zoomedMax, 1, inverted, verb);
+            }
+          }
+        };
+        /**
+         * Removes the event handlers attached previously with addEvents.
          *
-         *  (c) 2010-2020 Torstein Honsi
+         * @private
+         * @function Highcharts.Navigator#removeEvents
+         * @return {void}
+         */
+        Navigator.prototype.removeEvents = function () {
+          if (this.eventsToUnbind) {
+            this.eventsToUnbind.forEach(function (unbind) {
+              unbind();
+            });
+            this.eventsToUnbind = void 0;
+          }
+          this.removeBaseSeriesEvents();
+        };
+        /**
+         * Remove data events.
          *
-         *  License: www.highcharts.com/license
+         * @private
+         * @function Highcharts.Navigator#removeBaseSeriesEvents
+         * @return {void}
+         */
+        Navigator.prototype.removeBaseSeriesEvents = function () {
+          var baseSeries = this.baseSeries || [];
+          if (this.navigatorEnabled && baseSeries[0]) {
+            if (this.navigatorOptions.adaptToUpdatedData !== false) {
+              baseSeries.forEach(function (series) {
+                removeEvent(series, "updatedData", this.updatedDataHandler);
+              }, this);
+            }
+            // We only listen for extremes-events on the first baseSeries
+            if (baseSeries[0].xAxis) {
+              removeEvent(
+                baseSeries[0].xAxis,
+                "foundExtremes",
+                this.modifyBaseAxisExtremes
+              );
+            }
+          }
+        };
+        /**
+         * Initialize the Navigator object
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @private
+         * @function Highcharts.Navigator#init
          *
-         * */
-        /**
-         * @typedef {"average"|"averages"|"open"|"high"|"low"|"close"|"sum"} Highcharts.DataGroupingApproximationValue
+         * @param {Highcharts.Chart} chart
          */
+        Navigator.prototype.init = function (chart) {
+          var chartOptions = chart.options,
+            navigatorOptions = chartOptions.navigator,
+            navigatorEnabled = navigatorOptions.enabled,
+            scrollbarOptions = chartOptions.scrollbar,
+            scrollbarEnabled = scrollbarOptions.enabled,
+            height = navigatorEnabled ? navigatorOptions.height : 0,
+            scrollbarHeight = scrollbarEnabled ? scrollbarOptions.height : 0;
+          this.handles = [];
+          this.shades = [];
+          this.chart = chart;
+          this.setBaseSeries();
+          this.height = height;
+          this.scrollbarHeight = scrollbarHeight;
+          this.scrollbarEnabled = scrollbarEnabled;
+          this.navigatorEnabled = navigatorEnabled;
+          this.navigatorOptions = navigatorOptions;
+          this.scrollbarOptions = scrollbarOptions;
+          this.outlineHeight = height + scrollbarHeight;
+          this.opposite = pick(
+            navigatorOptions.opposite,
+            Boolean(!navigatorEnabled && chart.inverted)
+          ); // #6262
+          var navigator = this,
+            baseSeries = navigator.baseSeries,
+            xAxisIndex = chart.xAxis.length,
+            yAxisIndex = chart.yAxis.length,
+            baseXaxis = (baseSeries && baseSeries[0] && baseSeries[0].xAxis) ||
+              chart.xAxis[0] || { options: {} };
+          chart.isDirtyBox = true;
+          if (navigator.navigatorEnabled) {
+            // an x axis is required for scrollbar also
+            navigator.xAxis = new Axis(
+              chart,
+              merge(
+                {
+                  // inherit base xAxis' break and ordinal options
+                  breaks: baseXaxis.options.breaks,
+                  ordinal: baseXaxis.options.ordinal,
+                },
+                navigatorOptions.xAxis,
+                {
+                  id: "navigator-x-axis",
+                  yAxis: "navigator-y-axis",
+                  isX: true,
+                  type: "datetime",
+                  index: xAxisIndex,
+                  isInternal: true,
+                  offset: 0,
+                  keepOrdinalPadding: true,
+                  startOnTick: false,
+                  endOnTick: false,
+                  minPadding: 0,
+                  maxPadding: 0,
+                  zoomEnabled: false,
+                },
+                chart.inverted
+                  ? {
+                      offsets: [scrollbarHeight, 0, -scrollbarHeight, 0],
+                      width: height,
+                    }
+                  : {
+                      offsets: [0, -scrollbarHeight, 0, scrollbarHeight],
+                      height: height,
+                    }
+              )
+            );
+            navigator.yAxis = new Axis(
+              chart,
+              merge(
+                navigatorOptions.yAxis,
+                {
+                  id: "navigator-y-axis",
+                  alignTicks: false,
+                  offset: 0,
+                  index: yAxisIndex,
+                  isInternal: true,
+                  reversed: pick(
+                    navigatorOptions.yAxis && navigatorOptions.yAxis.reversed,
+                    chart.yAxis[0] && chart.yAxis[0].reversed,
+                    false
+                  ),
+                  zoomEnabled: false,
+                },
+                chart.inverted
+                  ? {
+                      width: height,
+                    }
+                  : {
+                      height: height,
+                    }
+              )
+            );
+            // If we have a base series, initialize the navigator series
+            if (baseSeries || navigatorOptions.series.data) {
+              navigator.updateNavigatorSeries(false);
+              // If not, set up an event to listen for added series
+            } else if (chart.series.length === 0) {
+              navigator.unbindRedraw = addEvent(
+                chart,
+                "beforeRedraw",
+                function () {
+                  // We've got one, now add it as base
+                  if (chart.series.length > 0 && !navigator.series) {
+                    navigator.setBaseSeries();
+                    navigator.unbindRedraw(); // reset
+                  }
+                }
+              );
+            }
+            navigator.reversedExtremes =
+              (chart.inverted && !navigator.xAxis.reversed) ||
+              (!chart.inverted && navigator.xAxis.reversed);
+            // Render items, so we can bind events to them:
+            navigator.renderElements();
+            // Add mouse events
+            navigator.addMouseEvents();
+            // in case of scrollbar only, fake an x axis to get translation
+          } else {
+            navigator.xAxis = {
+              chart: chart,
+              navigatorAxis: {
+                fake: true,
+              },
+              translate: function (value, reverse) {
+                var axis = chart.xAxis[0],
+                  ext = axis.getExtremes(),
+                  scrollTrackWidth = axis.len - 2 * scrollbarHeight,
+                  min = numExt("min", axis.options.min, ext.dataMin),
+                  valueRange =
+                    numExt("max", axis.options.max, ext.dataMax) - min;
+                return reverse
+                  ? // from pixel to value
+                    (value * valueRange) / scrollTrackWidth + min
+                  : // from value to pixel
+                    (scrollTrackWidth * (value - min)) / valueRange;
+              },
+              toPixels: function (value) {
+                return this.translate(value);
+              },
+              toValue: function (value) {
+                return this.translate(value, true);
+              },
+            };
+            navigator.xAxis.navigatorAxis.axis = navigator.xAxis;
+            navigator.xAxis.navigatorAxis.toFixedRange =
+              NavigatorAxis.AdditionsClass.prototype.toFixedRange.bind(
+                navigator.xAxis.navigatorAxis
+              );
+          }
+          // Initialize the scrollbar
+          if (chart.options.scrollbar.enabled) {
+            chart.scrollbar = navigator.scrollbar = new Scrollbar(
+              chart.renderer,
+              merge(chart.options.scrollbar, {
+                margin: navigator.navigatorEnabled ? 0 : 10,
+                vertical: chart.inverted,
+              }),
+              chart
+            );
+            addEvent(navigator.scrollbar, "changed", function (e) {
+              var range = navigator.size,
+                to = range * this.to,
+                from = range * this.from;
+              navigator.hasDragged = navigator.scrollbar.hasDragged;
+              navigator.render(0, 0, from, to);
+              if (
+                chart.options.scrollbar.liveRedraw ||
+                (e.DOMType !== "mousemove" && e.DOMType !== "touchmove")
+              ) {
+                setTimeout(function () {
+                  navigator.onMouseUp(e);
+                });
+              }
+            });
+          }
+          // Add data events
+          navigator.addBaseSeriesEvents();
+          // Add redraw events
+          navigator.addChartEvents();
+        };
         /**
-         * @interface Highcharts.DataGroupingInfoObject
-         */ /**
-        * @name Highcharts.DataGroupingInfoObject#length
-        * @type {number}
-        */ /**
-        * @name Highcharts.DataGroupingInfoObject#options
-        * @type {Highcharts.SeriesOptionsType|undefined}
-        */ /**
-        * @name Highcharts.DataGroupingInfoObject#start
-        * @type {number}
-        */
-        ''; // detach doclets above
-        var defaultOptions = O.defaultOptions;
-        var addEvent = U.addEvent,
-            arrayMax = U.arrayMax,
-            arrayMin = U.arrayMin,
-            correctFloat = U.correctFloat,
-            defined = U.defined,
-            error = U.error,
-            extend = U.extend,
-            format = U.format,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            pick = U.pick;
-        var Series = H.Series;
-        /* ************************************************************************** *
-         *  Start data grouping module                                                *
-         * ************************************************************************** */
-        /* eslint-disable no-invalid-this, valid-jsdoc */
+         * Get the union data extremes of the chart - the outer data extremes of the
+         * base X axis and the navigator axis.
+         *
+         * @private
+         * @function Highcharts.Navigator#getUnionExtremes
+         * @param {boolean} [returnFalseOnNoBaseSeries]
+         *        as the param says.
+         * @return {Highcharts.Dictionary<(number|undefined)>|undefined}
+         */
+        Navigator.prototype.getUnionExtremes = function (
+          returnFalseOnNoBaseSeries
+        ) {
+          var baseAxis = this.chart.xAxis[0],
+            navAxis = this.xAxis,
+            navAxisOptions = navAxis.options,
+            baseAxisOptions = baseAxis.options,
+            ret;
+          if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {
+            ret = {
+              dataMin: pick(
+                // #4053
+                navAxisOptions && navAxisOptions.min,
+                numExt(
+                  "min",
+                  baseAxisOptions.min,
+                  baseAxis.dataMin,
+                  navAxis.dataMin,
+                  navAxis.min
+                )
+              ),
+              dataMax: pick(
+                navAxisOptions && navAxisOptions.max,
+                numExt(
+                  "max",
+                  baseAxisOptions.max,
+                  baseAxis.dataMax,
+                  navAxis.dataMax,
+                  navAxis.max
+                )
+              ),
+            };
+          }
+          return ret;
+        };
         /**
-         * Define the available approximation types. The data grouping
-         * approximations takes an array or numbers as the first parameter. In case
-         * of ohlc, four arrays are sent in as four parameters. Each array consists
-         * only of numbers. In case null values belong to the group, the property
-         * .hasNulls will be set to true on the array.
+         * Set the base series and update the navigator series from this. With a bit
+         * of modification we should be able to make this an API method to be called
+         * from the outside
          *
-         * @product highstock
+         * @private
+         * @function Highcharts.Navigator#setBaseSeries
+         * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]
+         *        Additional series options for a navigator
+         * @param {boolean} [redraw]
+         *        Whether to redraw after update.
+         * @return {void}
+         */
+        Navigator.prototype.setBaseSeries = function (
+          baseSeriesOptions,
+          redraw
+        ) {
+          var chart = this.chart,
+            baseSeries = (this.baseSeries = []);
+          baseSeriesOptions =
+            baseSeriesOptions ||
+            (chart.options && chart.options.navigator.baseSeries) ||
+            (chart.series.length
+              ? // Find the first non-navigator series (#8430)
+                find(chart.series, function (s) {
+                  return !s.options.isInternal;
+                }).index
+              : 0);
+          // Iterate through series and add the ones that should be shown in
+          // navigator.
+          (chart.series || []).forEach(function (series, i) {
+            if (
+              // Don't include existing nav series
+              !series.options.isInternal &&
+              (series.options.showInNavigator ||
+                ((i === baseSeriesOptions ||
+                  series.options.id === baseSeriesOptions) &&
+                  series.options.showInNavigator !== false))
+            ) {
+              baseSeries.push(series);
+            }
+          });
+          // When run after render, this.xAxis already exists
+          if (this.xAxis && !this.xAxis.navigatorAxis.fake) {
+            this.updateNavigatorSeries(true, redraw);
+          }
+        };
+        /**
+         * Update series in the navigator from baseSeries, adding new if does not
+         * exist.
          *
          * @private
-         * @name Highcharts.approximations
-         * @type {Highcharts.Dictionary<Function>}
+         * @function Highcharts.Navigator.updateNavigatorSeries
+         * @param {boolean} addEvents
+         * @param {boolean} [redraw]
+         * @return {void}
          */
-        var approximations = H.approximations = {
-                sum: function (arr) {
-                    var len = arr.length,
-            ret;
-                // 1. it consists of nulls exclusive
-                if (!len && arr.hasNulls) {
-                    ret = null;
-                    // 2. it has a length and real values
-                }
-                else if (len) {
-                    ret = 0;
-                    while (len--) {
-                        ret += arr[len];
-                    }
-                }
-                // 3. it has zero length, so just return undefined
-                // => doNothing()
-                return ret;
-            },
-            average: function (arr) {
-                var len = arr.length,
-                    ret = approximations.sum(arr);
-                // If we have a number, return it divided by the length. If not,
-                // return null or undefined based on what the sum method finds.
-                if (isNumber(ret) && len) {
-                    ret = correctFloat(ret / len);
-                }
-                return ret;
-            },
-            // The same as average, but for series with multiple values, like area
-            // ranges.
-            averages: function () {
-                var ret = [];
-                [].forEach.call(arguments, function (arr) {
-                    ret.push(approximations.average(arr));
-                });
-                // Return undefined when first elem. is undefined and let
-                // sum method handle null (#7377)
-                return typeof ret[0] === 'undefined' ? void 0 : ret;
-            },
-            open: function (arr) {
-                return arr.length ? arr[0] : (arr.hasNulls ? null : void 0);
-            },
-            high: function (arr) {
-                return arr.length ?
-                    arrayMax(arr) :
-                    (arr.hasNulls ? null : void 0);
-            },
-            low: function (arr) {
-                return arr.length ?
-                    arrayMin(arr) :
-                    (arr.hasNulls ? null : void 0);
-            },
-            close: function (arr) {
-                return arr.length ?
-                    arr[arr.length - 1] :
-                    (arr.hasNulls ? null : void 0);
-            },
-            // ohlc and range are special cases where a multidimensional array is
-            // input and an array is output
-            ohlc: function (open, high, low, close) {
-                open = approximations.open(open);
-                high = approximations.high(high);
-                low = approximations.low(low);
-                close = approximations.close(close);
-                if (isNumber(open) ||
-                    isNumber(high) ||
-                    isNumber(low) ||
-                    isNumber(close)) {
-                    return [open, high, low, close];
-                }
-                // else, return is undefined
+        Navigator.prototype.updateNavigatorSeries = function (
+          addEvents,
+          redraw
+        ) {
+          var navigator = this,
+            chart = navigator.chart,
+            baseSeries = navigator.baseSeries,
+            baseOptions,
+            mergedNavSeriesOptions,
+            chartNavigatorSeriesOptions = navigator.navigatorOptions.series,
+            baseNavigatorOptions,
+            navSeriesMixin = {
+              enableMouseTracking: false,
+              index: null,
+              linkedTo: null,
+              group: "nav",
+              padXAxis: false,
+              xAxis: "navigator-x-axis",
+              yAxis: "navigator-y-axis",
+              showInLegend: false,
+              stacking: void 0,
+              isInternal: true,
+              states: {
+                inactive: {
+                  opacity: 1,
+                },
+              },
             },
-            range: function (low, high) {
-                low = approximations.low(low);
-                high = approximations.high(high);
-                if (isNumber(low) || isNumber(high)) {
-                    return [low, high];
+            // Remove navigator series that are no longer in the baseSeries
+            navigatorSeries = (navigator.series = (
+              navigator.series || []
+            ).filter(function (navSeries) {
+              var base = navSeries.baseSeries;
+              if (baseSeries.indexOf(base) < 0) {
+                // Not in array
+                // If there is still a base series connected to this
+                // series, remove event handler and reference.
+                if (base) {
+                  removeEvent(
+                    base,
+                    "updatedData",
+                    navigator.updatedDataHandler
+                  );
+                  delete base.navigatorSeries;
+                }
+                // Kill the nav series. It may already have been
+                // destroyed (#8715).
+                if (navSeries.chart) {
+                  navSeries.destroy();
                 }
-                if (low === null && high === null) {
-                    return null;
-                }
-                // else, return is undefined
-            }
+                return false;
+              }
+              return true;
+            }));
+          // Go through each base series and merge the options to create new
+          // series
+          if (baseSeries && baseSeries.length) {
+            baseSeries.forEach(function eachBaseSeries(base) {
+              var linkedNavSeries = base.navigatorSeries,
+                userNavOptions = extend(
+                  // Grab color and visibility from base as default
+                  {
+                    color: base.color,
+                    visible: base.visible,
+                  },
+                  !isArray(chartNavigatorSeriesOptions)
+                    ? chartNavigatorSeriesOptions
+                    : defaultOptions.navigator.series
+                );
+              // Don't update if the series exists in nav and we have disabled
+              // adaptToUpdatedData.
+              if (
+                linkedNavSeries &&
+                navigator.navigatorOptions.adaptToUpdatedData === false
+              ) {
+                return;
+              }
+              navSeriesMixin.name = "Navigator " + baseSeries.length;
+              baseOptions = base.options || {};
+              baseNavigatorOptions = baseOptions.navigatorOptions || {};
+              mergedNavSeriesOptions = merge(
+                baseOptions,
+                navSeriesMixin,
+                userNavOptions,
+                baseNavigatorOptions
+              );
+              // Once nav series type is resolved, pick correct pointRange
+              mergedNavSeriesOptions.pointRange = pick(
+                // Stricte set pointRange in options
+                userNavOptions.pointRange,
+                baseNavigatorOptions.pointRange,
+                // Fallback to default values, e.g. `null` for column
+                defaultOptions.plotOptions[
+                  mergedNavSeriesOptions.type || "line"
+                ].pointRange
+              );
+              // Merge data separately. Do a slice to avoid mutating the
+              // navigator options from base series (#4923).
+              var navigatorSeriesData =
+                baseNavigatorOptions.data || userNavOptions.data;
+              navigator.hasNavigatorData =
+                navigator.hasNavigatorData || !!navigatorSeriesData;
+              mergedNavSeriesOptions.data =
+                navigatorSeriesData ||
+                (baseOptions.data && baseOptions.data.slice(0));
+              // Update or add the series
+              if (linkedNavSeries && linkedNavSeries.options) {
+                linkedNavSeries.update(mergedNavSeriesOptions, redraw);
+              } else {
+                base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);
+                base.navigatorSeries.baseSeries = base; // Store ref
+                navigatorSeries.push(base.navigatorSeries);
+              }
+            });
+          }
+          // If user has defined data (and no base series) or explicitly defined
+          // navigator.series as an array, we create these series on top of any
+          // base series.
+          if (
+            (chartNavigatorSeriesOptions.data &&
+              !(baseSeries && baseSeries.length)) ||
+            isArray(chartNavigatorSeriesOptions)
+          ) {
+            navigator.hasNavigatorData = false;
+            // Allow navigator.series to be an array
+            chartNavigatorSeriesOptions = splat(chartNavigatorSeriesOptions);
+            chartNavigatorSeriesOptions.forEach(function (
+              userSeriesOptions,
+              i
+            ) {
+              navSeriesMixin.name = "Navigator " + (navigatorSeries.length + 1);
+              mergedNavSeriesOptions = merge(
+                defaultOptions.navigator.series,
+                {
+                  // Since we don't have a base series to pull color from,
+                  // try to fake it by using color from series with same
+                  // index. Otherwise pull from the colors array. We need
+                  // an explicit color as otherwise updates will increment
+                  // color counter and we'll get a new color for each
+                  // update of the nav series.
+                  color:
+                    (chart.series[i] &&
+                      !chart.series[i].options.isInternal &&
+                      chart.series[i].color) ||
+                    chart.options.colors[i] ||
+                    chart.options.colors[0],
+                },
+                navSeriesMixin,
+                userSeriesOptions
+              );
+              mergedNavSeriesOptions.data = userSeriesOptions.data;
+              if (mergedNavSeriesOptions.data) {
+                navigator.hasNavigatorData = true;
+                navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));
+              }
+            });
+          }
+          if (addEvents) {
+            this.addBaseSeriesEvents();
+          }
         };
-        var groupData = function (xData,
-            yData,
-            groupPositions,
-            approximation) {
-                var series = this,
-            data = series.data,
-            dataOptions = series.options && series.options.data,
-            groupedXData = [],
-            groupedYData = [],
-            groupMap = [],
-            dataLength = xData.length,
-            pointX,
-            pointY,
-            groupedY, 
-                // when grouping the fake extended axis for panning,
-                // we don't need to consider y
-                handleYData = !!yData,
-            values = [],
-            approximationFn,
-            pointArrayMap = series.pointArrayMap,
-            pointArrayMapLength = pointArrayMap && pointArrayMap.length,
-            extendedPointArrayMap = ['x'].concat(pointArrayMap || ['y']),
-            pos = 0,
-            start = 0,
-            valuesLen,
-            i,
-            j;
-            /**
-             * @private
-             */
-            function getApproximation(approx) {
-                if (typeof approx === 'function') {
-                    return approx;
-                }
-                if (approximations[approx]) {
-                    return approximations[approx];
-                }
-                return approximations[(series.getDGApproximation && series.getDGApproximation()) ||
-                    'average'];
-            }
-            approximationFn = getApproximation(approximation);
-            // Calculate values array size from pointArrayMap length
-            if (pointArrayMapLength) {
-                pointArrayMap.forEach(function () {
-                    values.push([]);
-                });
-            }
-            else {
-                values.push([]);
-            }
-            valuesLen = pointArrayMapLength || 1;
-            // Start with the first point within the X axis range (#2696)
-            for (i = 0; i <= dataLength; i++) {
-                if (xData[i] >= groupPositions[0]) {
-                    break;
-                }
+        /**
+         * Add data events.
+         * For example when main series is updated we need to recalculate extremes
+         *
+         * @private
+         * @function Highcharts.Navigator#addBaseSeriesEvent
+         * @return {void}
+         */
+        Navigator.prototype.addBaseSeriesEvents = function () {
+          var navigator = this,
+            baseSeries = navigator.baseSeries || [];
+          // Bind modified extremes event to first base's xAxis only.
+          // In event of > 1 base-xAxes, the navigator will ignore those.
+          // Adding this multiple times to the same axis is no problem, as
+          // duplicates should be discarded by the browser.
+          if (baseSeries[0] && baseSeries[0].xAxis) {
+            addEvent(
+              baseSeries[0].xAxis,
+              "foundExtremes",
+              this.modifyBaseAxisExtremes
+            );
+          }
+          baseSeries.forEach(function (base) {
+            // Link base series show/hide to navigator series visibility
+            addEvent(base, "show", function () {
+              if (this.navigatorSeries) {
+                this.navigatorSeries.setVisible(true, false);
+              }
+            });
+            addEvent(base, "hide", function () {
+              if (this.navigatorSeries) {
+                this.navigatorSeries.setVisible(false, false);
+              }
+            });
+            // Respond to updated data in the base series, unless explicitily
+            // not adapting to data changes.
+            if (this.navigatorOptions.adaptToUpdatedData !== false) {
+              if (base.xAxis) {
+                addEvent(base, "updatedData", this.updatedDataHandler);
+              }
             }
-            for (i; i <= dataLength; i++) {
-                // when a new group is entered, summarize and initialize
-                // the previous group
-                while ((typeof groupPositions[pos + 1] !== 'undefined' &&
-                    xData[i] >= groupPositions[pos + 1]) ||
-                    i === dataLength) { // get the last group
-                    // get group x and y
-                    pointX = groupPositions[pos];
-                    series.dataGroupInfo = {
-                        start: series.cropStart + start,
-                        length: values[0].length
-                    };
-                    groupedY = approximationFn.apply(series, values);
-                    // By default, let options of the first grouped point be passed over
-                    // to the grouped point. This allows preserving properties like
-                    // `name` and `color` or custom properties. Implementers can
-                    // override this from the approximation function, where they can
-                    // write custom options to `this.dataGroupInfo.options`.
-                    if (series.pointClass && !defined(series.dataGroupInfo.options)) {
-                        // Convert numbers and arrays into objects
-                        series.dataGroupInfo.options = merge(series.pointClass.prototype
-                            .optionsToObject.call({ series: series }, series.options.data[series.cropStart + start]));
-                        // Make sure the raw data (x, y, open, high etc) is not copied
-                        // over and overwriting approximated data.
-                        extendedPointArrayMap.forEach(function (key) {
-                            delete series.dataGroupInfo.options[key];
-                        });
-                    }
-                    // push the grouped data
-                    if (typeof groupedY !== 'undefined') {
-                        groupedXData.push(pointX);
-                        groupedYData.push(groupedY);
-                        groupMap.push(series.dataGroupInfo);
-                    }
-                    // reset the aggregate arrays
-                    start = i;
-                    for (j = 0; j < valuesLen; j++) {
-                        values[j].length = 0; // faster than values[j] = []
-                        values[j].hasNulls = false;
-                    }
-                    // Advance on the group positions
-                    pos += 1;
-                    // don't loop beyond the last group
-                    if (i === dataLength) {
-                        break;
-                    }
-                }
-                // break out
-                if (i === dataLength) {
-                    break;
-                }
-                // for each raw data point, push it to an array that contains all values
-                // for this specific group
-                if (pointArrayMap) {
-                    var index = series.cropStart + i,
-                        point = (data && data[index]) ||
-                            series.pointClass.prototype.applyOptions.apply({
-                                series: series
-                            },
-                        [dataOptions[index]]),
-                        val;
-                    for (j = 0; j < pointArrayMapLength; j++) {
-                        val = point[pointArrayMap[j]];
-                        if (isNumber(val)) {
-                            values[j].push(val);
-                        }
-                        else if (val === null) {
-                            values[j].hasNulls = true;
-                        }
-                    }
-                }
-                else {
-                    pointY = handleYData ? yData[i] : null;
-                    if (isNumber(pointY)) {
-                        values[0].push(pointY);
-                    }
-                    else if (pointY === null) {
-                        values[0].hasNulls = true;
-                    }
-                }
+            // Handle series removal
+            addEvent(base, "remove", function () {
+              if (this.navigatorSeries) {
+                erase(navigator.series, this.navigatorSeries);
+                if (defined(this.navigatorSeries.options)) {
+                  this.navigatorSeries.remove(false);
+                }
+                delete this.navigatorSeries;
+              }
+            });
+          }, this);
+        };
+        /**
+         * Get minimum from all base series connected to the navigator
+         * @private
+         * @param  {number} currentSeriesMin
+         *         Minium from the current series
+         * @return {number} Minimum from all series
+         */
+        Navigator.prototype.getBaseSeriesMin = function (currentSeriesMin) {
+          return this.baseSeries.reduce(function (min, series) {
+            // (#10193)
+            return Math.min(min, series.xData ? series.xData[0] : min);
+          }, currentSeriesMin);
+        };
+        /**
+         * Set the navigator x axis extremes to reflect the total. The navigator
+         * extremes should always be the extremes of the union of all series in the
+         * chart as well as the navigator series.
+         *
+         * @private
+         * @function Highcharts.Navigator#modifyNavigatorAxisExtremes
+         */
+        Navigator.prototype.modifyNavigatorAxisExtremes = function () {
+          var xAxis = this.xAxis,
+            unionExtremes;
+          if (typeof xAxis.getExtremes !== "undefined") {
+            unionExtremes = this.getUnionExtremes(true);
+            if (
+              unionExtremes &&
+              (unionExtremes.dataMin !== xAxis.min ||
+                unionExtremes.dataMax !== xAxis.max)
+            ) {
+              xAxis.min = unionExtremes.dataMin;
+              xAxis.max = unionExtremes.dataMax;
             }
-            return {
-                groupedXData: groupedXData,
-                groupedYData: groupedYData,
-                groupMap: groupMap
-            };
+          }
         };
-        var dataGrouping = {
-                approximations: approximations,
-                groupData: groupData
-            };
-        // -----------------------------------------------------------------------------
-        // The following code applies to implementation of data grouping on a Series
-        var seriesProto = Series.prototype, baseProcessData = seriesProto.processData, baseGeneratePoints = seriesProto.generatePoints, 
-            /** @ignore */
-            commonOptions = {
-                // enabled: null, // (true for stock charts, false for basic),
-                // forced: undefined,
-                groupPixelWidth: 2,
-                // the first one is the point or start value, the second is the start
-                // value if we're dealing with range, the third one is the end value if
-                // dealing with a range
-                dateTimeLabelFormats: {
-                    millisecond: [
-                        '%A, %b %e, %H:%M:%S.%L',
-                        '%A, %b %e, %H:%M:%S.%L',
-                        '-%H:%M:%S.%L'
-                    ],
-                    second: [
-                        '%A, %b %e, %H:%M:%S',
-                        '%A, %b %e, %H:%M:%S',
-                        '-%H:%M:%S'
-                    ],
-                    minute: [
-                        '%A, %b %e, %H:%M',
-                        '%A, %b %e, %H:%M',
-                        '-%H:%M'
-                    ],
-                    hour: [
-                        '%A, %b %e, %H:%M',
-                        '%A, %b %e, %H:%M',
-                        '-%H:%M'
-                    ],
-                    day: [
-                        '%A, %b %e, %Y',
-                        '%A, %b %e',
-                        '-%A, %b %e, %Y'
-                    ],
-                    week: [
-                        'Week from %A, %b %e, %Y',
-                        '%A, %b %e',
-                        '-%A, %b %e, %Y'
-                    ],
-                    month: [
-                        '%B %Y',
-                        '%B',
-                        '-%B %Y'
-                    ],
-                    year: [
-                        '%Y',
-                        '%Y',
-                        '-%Y'
-                    ]
-                }
-                // smoothed = false, // enable this for navigator series only
-            }, specificOptions = {
-                line: {},
-                spline: {},
-                area: {},
-                areaspline: {},
-                arearange: {},
-                column: {
-                    groupPixelWidth: 10
-                },
-                columnrange: {
-                    groupPixelWidth: 10
-                },
-                candlestick: {
-                    groupPixelWidth: 10
-                },
-                ohlc: {
-                    groupPixelWidth: 5
-                }
-            }, 
-            // units are defined in a separate array to allow complete overriding in
-            // case of a user option
-            defaultDataGroupingUnits = H.defaultDataGroupingUnits = [
-                [
-                    'millisecond',
-                    [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples
-                ], [
-                    'second',
-                    [1, 2, 5, 10, 15, 30]
-                ], [
-                    'minute',
-                    [1, 2, 5, 10, 15, 30]
-                ], [
-                    'hour',
-                    [1, 2, 3, 4, 6, 8, 12]
-                ], [
-                    'day',
-                    [1]
-                ], [
-                    'week',
-                    [1]
-                ], [
-                    'month',
-                    [1, 3, 6]
-                ], [
-                    'year',
-                    null
-                ]
-            ];
-        // Set default approximations to the prototypes if present. Properties are
-        // inherited down. Can be overridden for individual series types.
-        seriesProto.getDGApproximation = function () {
-            if (this.is('arearange')) {
-                return 'range';
+        /**
+         * Hook to modify the base axis extremes with information from the Navigator
+         *
+         * @private
+         * @function Highcharts.Navigator#modifyBaseAxisExtremes
+         */
+        Navigator.prototype.modifyBaseAxisExtremes = function () {
+          var baseXAxis = this,
+            navigator = baseXAxis.chart.navigator,
+            baseExtremes = baseXAxis.getExtremes(),
+            baseMin = baseExtremes.min,
+            baseMax = baseExtremes.max,
+            baseDataMin = baseExtremes.dataMin,
+            baseDataMax = baseExtremes.dataMax,
+            range = baseMax - baseMin,
+            stickToMin = navigator.stickToMin,
+            stickToMax = navigator.stickToMax,
+            overscroll = pick(baseXAxis.options.overscroll, 0),
+            newMax,
+            newMin,
+            navigatorSeries = navigator.series && navigator.series[0],
+            hasSetExtremes = !!baseXAxis.setExtremes,
+            // When the extremes have been set by range selector button, don't
+            // stick to min or max. The range selector buttons will handle the
+            // extremes. (#5489)
+            unmutable =
+              baseXAxis.eventArgs &&
+              baseXAxis.eventArgs.trigger === "rangeSelectorButton";
+          if (!unmutable) {
+            // If the zoomed range is already at the min, move it to the right
+            // as new data comes in
+            if (stickToMin) {
+              newMin = baseDataMin;
+              newMax = newMin + range;
             }
-            if (this.is('ohlc')) {
-                return 'ohlc';
+            // If the zoomed range is already at the max, move it to the right
+            // as new data comes in
+            if (stickToMax) {
+              newMax = baseDataMax + overscroll;
+              // If stickToMin is true, the new min value is set above
+              if (!stickToMin) {
+                newMin = Math.max(
+                  baseDataMin, // don't go below data extremes (#13184)
+                  newMax - range,
+                  navigator.getBaseSeriesMin(
+                    navigatorSeries && navigatorSeries.xData
+                      ? navigatorSeries.xData[0]
+                      : -Number.MAX_VALUE
+                  )
+                );
+              }
             }
-            if (this.is('column')) {
-                return 'sum';
+            // Update the extremes
+            if (hasSetExtremes && (stickToMin || stickToMax)) {
+              if (isNumber(newMin)) {
+                baseXAxis.min = baseXAxis.userMin = newMin;
+                baseXAxis.max = baseXAxis.userMax = newMax;
+              }
             }
-            return 'average';
+          }
+          // Reset
+          navigator.stickToMin = navigator.stickToMax = null;
         };
         /**
-         * Takes parallel arrays of x and y data and groups the data into intervals
-         * defined by groupPositions, a collection of starting x values for each group.
+         * Handler for updated data on the base series. When data is modified, the
+         * navigator series must reflect it. This is called from the Chart.redraw
+         * function before axis and series extremes are computed.
          *
          * @private
-         * @function Highcharts.Series#groupData
-         *
-         * @param {Array<number>} xData
-         *
-         * @param {Array<number>|Array<Array<number>>} yData
-         *
-         * @param {boolean} groupPositions
-         *
-         * @param {string|Function} approximation
+         * @function Highcharts.Navigator#updateDataHandler
+         */
+        Navigator.prototype.updatedDataHandler = function () {
+          var navigator = this.chart.navigator,
+            baseSeries = this,
+            navigatorSeries = this.navigatorSeries,
+            xDataMin = navigator.getBaseSeriesMin(baseSeries.xData[0]);
+          // If the scrollbar is scrolled all the way to the right, keep right as
+          // new data  comes in.
+          navigator.stickToMax = navigator.reversedExtremes
+            ? Math.round(navigator.zoomedMin) === 0
+            : Math.round(navigator.zoomedMax) >= Math.round(navigator.size);
+          // Detect whether the zoomed area should stick to the minimum or
+          // maximum. If the current axis minimum falls outside the new updated
+          // dataset, we must adjust.
+          navigator.stickToMin =
+            isNumber(baseSeries.xAxis.min) &&
+            baseSeries.xAxis.min <= xDataMin &&
+            (!this.chart.fixedRange || !navigator.stickToMax);
+          // Set the navigator series data to the new data of the base series
+          if (navigatorSeries && !navigator.hasNavigatorData) {
+            navigatorSeries.options.pointStart = baseSeries.xData[0];
+            navigatorSeries.setData(
+              baseSeries.options.data,
+              false,
+              null,
+              false
+            ); // #5414
+          }
+        };
+        /**
+         * Add chart events, like redrawing navigator, when chart requires that.
          *
+         * @private
+         * @function Highcharts.Navigator#addChartEvents
          * @return {void}
          */
-        seriesProto.groupData = groupData;
-        // Extend the basic processData method, that crops the data to the current zoom
-        // range, with data grouping logic.
-        seriesProto.processData = function () {
-            var series = this,
-                chart = series.chart,
-                options = series.options,
-                dataGroupingOptions = options.dataGrouping,
-                groupingEnabled = series.allowDG !== false && dataGroupingOptions &&
-                    pick(dataGroupingOptions.enabled,
-                chart.options.isStock),
-                visible = (series.visible || !chart.options.chart.ignoreHiddenSeries),
-                hasGroupedData,
-                skip,
-                lastDataGrouping = this.currentDataGrouping,
-                currentDataGrouping,
-                croppedData,
-                revertRequireSorting = false;
-            // Run base method
-            series.forceCrop = groupingEnabled; // #334
-            series.groupPixelWidth = null; // #2110
-            series.hasProcessed = true; // #2692
-            // Data needs to be sorted for dataGrouping
-            if (groupingEnabled && !series.requireSorting) {
-                series.requireSorting = revertRequireSorting = true;
-            }
-            // Skip if processData returns false or if grouping is disabled (in that
-            // order)
-            skip = (baseProcessData.apply(series, arguments) === false ||
-                !groupingEnabled);
-            // Revert original requireSorting value if changed
-            if (revertRequireSorting) {
-                series.requireSorting = false;
-            }
-            if (!skip) {
-                series.destroyGroupedData();
-                var i,
-                    processedXData = dataGroupingOptions.groupAll ?
-                        series.xData :
-                        series.processedXData,
-                    processedYData = dataGroupingOptions.groupAll ?
-                        series.yData :
-                        series.processedYData,
-                    plotSizeX = chart.plotSizeX,
-                    xAxis = series.xAxis,
-                    ordinal = xAxis.options.ordinal,
-                    groupPixelWidth = series.groupPixelWidth =
-                        xAxis.getGroupPixelWidth && xAxis.getGroupPixelWidth();
-                // Execute grouping if the amount of points is greater than the limit
-                // defined in groupPixelWidth
-                if (groupPixelWidth) {
-                    hasGroupedData = true;
-                    // Force recreation of point instances in series.translate, #5699
-                    series.isDirty = true;
-                    series.points = null; // #6709
-                    var extremes = xAxis.getExtremes(),
-                        xMin = extremes.min,
-                        xMax = extremes.max,
-                        groupIntervalFactor = (ordinal &&
-                            xAxis.ordinal &&
-                            xAxis.ordinal.getGroupIntervalFactor(xMin,
-                        xMax,
-                        series)) || 1,
-                        interval = (groupPixelWidth * (xMax - xMin) / plotSizeX) *
-                            groupIntervalFactor,
-                        groupPositions = xAxis.getTimeTicks(DateTimeAxis.AdditionsClass.prototype.normalizeTimeTickInterval(interval,
-                        dataGroupingOptions.units ||
-                            defaultDataGroupingUnits), 
-                        // Processed data may extend beyond axis (#4907)
-                        Math.min(xMin,
-                        processedXData[0]),
-                        Math.max(xMax,
-                        processedXData[processedXData.length - 1]),
-                        xAxis.options.startOfWeek,
-                        processedXData,
-                        series.closestPointRange),
-                        groupedData = seriesProto.groupData.apply(series,
-                        [
-                            processedXData,
-                            processedYData,
-                            groupPositions,
-                            dataGroupingOptions.approximation
-                        ]),
-                        groupedXData = groupedData.groupedXData,
-                        groupedYData = groupedData.groupedYData,
-                        gapSize = 0;
-                    // Prevent the smoothed data to spill out left and right, and make
-                    // sure data is not shifted to the left
-                    if (dataGroupingOptions.smoothed && groupedXData.length) {
-                        i = groupedXData.length - 1;
-                        groupedXData[i] = Math.min(groupedXData[i], xMax);
-                        while (i-- && i > 0) {
-                            groupedXData[i] += interval / 2;
-                        }
-                        groupedXData[0] = Math.max(groupedXData[0], xMin);
-                    }
-                    // Record what data grouping values were used
-                    for (i = 1; i < groupPositions.length; i++) {
-                        // The grouped gapSize needs to be the largest distance between
-                        // the group to capture varying group sizes like months or DST
-                        // crossing (#10000). Also check that the gap is not at the
-                        // start of a segment.
-                        if (!groupPositions.info.segmentStarts ||
-                            groupPositions.info.segmentStarts.indexOf(i) === -1) {
-                            gapSize = Math.max(groupPositions[i] - groupPositions[i - 1], gapSize);
-                        }
-                    }
-                    currentDataGrouping = groupPositions.info;
-                    currentDataGrouping.gapSize = gapSize;
-                    series.closestPointRange = groupPositions.info.totalRange;
-                    series.groupMap = groupedData.groupMap;
-                    // Make sure the X axis extends to show the first group (#2533)
-                    // But only for visible series (#5493, #6393)
-                    if (defined(groupedXData[0]) &&
-                        groupedXData[0] < xAxis.min &&
-                        visible) {
-                        if ((!defined(xAxis.options.min) &&
-                            xAxis.min <= xAxis.dataMin) ||
-                            xAxis.min === xAxis.dataMin) {
-                            xAxis.min = Math.min(groupedXData[0], xAxis.min);
-                        }
-                        xAxis.dataMin = Math.min(groupedXData[0], xAxis.dataMin);
-                    }
-                    // We calculated all group positions but we should render
-                    // only the ones within the visible range
-                    if (dataGroupingOptions.groupAll) {
-                        croppedData = series.cropData(groupedXData, groupedYData, xAxis.min, xAxis.max, 1 // Ordinal xAxis will remove left-most points otherwise
-                        );
-                        groupedXData = croppedData.xData;
-                        groupedYData = croppedData.yData;
-                    }
-                    // Set series props
-                    series.processedXData = groupedXData;
-                    series.processedYData = groupedYData;
-                }
-                else {
-                    series.groupMap = null;
-                }
-                series.hasGroupedData = hasGroupedData;
-                series.currentDataGrouping = currentDataGrouping;
-                series.preventGraphAnimation =
-                    (lastDataGrouping && lastDataGrouping.totalRange) !==
-                        (currentDataGrouping && currentDataGrouping.totalRange);
-            }
+        Navigator.prototype.addChartEvents = function () {
+          if (!this.eventsToUnbind) {
+            this.eventsToUnbind = [];
+          }
+          this.eventsToUnbind.push(
+            // Move the scrollbar after redraw, like after data updata even if
+            // axes don't redraw
+            addEvent(this.chart, "redraw", function () {
+              var navigator = this.navigator,
+                xAxis =
+                  navigator &&
+                  ((navigator.baseSeries &&
+                    navigator.baseSeries[0] &&
+                    navigator.baseSeries[0].xAxis) ||
+                    this.xAxis[0]); // #5709, #13114
+              if (xAxis) {
+                navigator.render(xAxis.min, xAxis.max);
+              }
+            }),
+            // Make room for the navigator, can be placed around the chart:
+            addEvent(this.chart, "getMargins", function () {
+              var chart = this,
+                navigator = chart.navigator,
+                marginName = navigator.opposite ? "plotTop" : "marginBottom";
+              if (chart.inverted) {
+                marginName = navigator.opposite ? "marginRight" : "plotLeft";
+              }
+              chart[marginName] =
+                (chart[marginName] || 0) +
+                (navigator.navigatorEnabled || !chart.inverted
+                  ? navigator.outlineHeight
+                  : 0) +
+                navigator.navigatorOptions.margin;
+            })
+          );
         };
-        // Destroy the grouped data points. #622, #740
-        seriesProto.destroyGroupedData = function () {
-            // Clear previous groups
-            if (this.groupedData) {
-                this.groupedData.forEach(function (point, i) {
-                    if (point) {
-                        this.groupedData[i] = point.destroy ?
-                            point.destroy() : null;
-                    }
-                }, this);
-                // Clears all:
-                // - `this.groupedData`
-                // - `this.points`
-                // - `preserve` object in series.update()
-                this.groupedData.length = 0;
+        /**
+         * Destroys allocated elements.
+         *
+         * @private
+         * @function Highcharts.Navigator#destroy
+         */
+        Navigator.prototype.destroy = function () {
+          // Disconnect events added in addEvents
+          this.removeEvents();
+          if (this.xAxis) {
+            erase(this.chart.xAxis, this.xAxis);
+            erase(this.chart.axes, this.xAxis);
+          }
+          if (this.yAxis) {
+            erase(this.chart.yAxis, this.yAxis);
+            erase(this.chart.axes, this.yAxis);
+          }
+          // Destroy series
+          (this.series || []).forEach(function (s) {
+            if (s.destroy) {
+              s.destroy();
             }
-        };
-        // Override the generatePoints method by adding a reference to grouped data
-        seriesProto.generatePoints = function () {
-            baseGeneratePoints.apply(this);
-            // Record grouped data in order to let it be destroyed the next time
-            // processData runs
-            this.destroyGroupedData(); // #622
-            this.groupedData = this.hasGroupedData ? this.points : null;
-        };
-        // Override point prototype to throw a warning when trying to update grouped
-        // points.
-        addEvent(Point, 'update', function () {
-            if (this.dataGroup) {
-                error(24, false, this.series.chart);
-                return false;
+          });
+          // Destroy properties
+          [
+            "series",
+            "xAxis",
+            "yAxis",
+            "shades",
+            "outline",
+            "scrollbarTrack",
+            "scrollbarRifles",
+            "scrollbarGroup",
+            "scrollbar",
+            "navigatorGroup",
+            "rendered",
+          ].forEach(function (prop) {
+            if (this[prop] && this[prop].destroy) {
+              this[prop].destroy();
             }
+            this[prop] = null;
+          }, this);
+          // Destroy elements in collection
+          [this.handles].forEach(function (coll) {
+            destroyObjectProperties(coll);
+          }, this);
+        };
+        return Navigator;
+      })();
+      // End of prototype
+      if (!H.Navigator) {
+        H.Navigator = Navigator;
+        NavigatorAxis.compose(Axis);
+        // For Stock charts. For x only zooming, do not to create the zoom button
+        // because X axis zooming is already allowed by the Navigator and Range
+        // selector. (#9285)
+        addEvent(Chart, "beforeShowResetZoom", function () {
+          var chartOptions = this.options,
+            navigator = chartOptions.navigator,
+            rangeSelector = chartOptions.rangeSelector;
+          if (
+            ((navigator && navigator.enabled) ||
+              (rangeSelector && rangeSelector.enabled)) &&
+            ((!isTouchDevice && chartOptions.chart.zoomType === "x") ||
+              (isTouchDevice && chartOptions.chart.pinchType === "x"))
+          ) {
+            return false;
+          }
         });
-        // Extend the original method, make the tooltip's header reflect the grouped
-        // range.
-        addEvent(Tooltip, 'headerFormatter', function (e) {
-            var tooltip = this,
-                chart = this.chart,
-                time = chart.time,
-                labelConfig = e.labelConfig,
-                series = labelConfig.series,
-                options = series.options,
-                tooltipOptions = series.tooltipOptions,
-                dataGroupingOptions = options.dataGrouping,
-                xDateFormat = tooltipOptions.xDateFormat,
-                xDateFormatEnd,
-                xAxis = series.xAxis,
-                currentDataGrouping,
-                dateTimeLabelFormats,
-                labelFormats,
-                formattedKey,
-                formatString = tooltipOptions[(e.isFooter ? 'footer' : 'header') + 'Format'];
-            // apply only to grouped series
-            if (xAxis &&
-                xAxis.options.type === 'datetime' &&
-                dataGroupingOptions &&
-                isNumber(labelConfig.key)) {
-                // set variables
-                currentDataGrouping = series.currentDataGrouping;
-                dateTimeLabelFormats = dataGroupingOptions.dateTimeLabelFormats ||
-                    // Fallback to commonOptions (#9693)
-                    commonOptions.dateTimeLabelFormats;
-                // if we have grouped data, use the grouping information to get the
-                // right format
-                if (currentDataGrouping) {
-                    labelFormats =
-                        dateTimeLabelFormats[currentDataGrouping.unitName];
-                    if (currentDataGrouping.count === 1) {
-                        xDateFormat = labelFormats[0];
-                    }
-                    else {
-                        xDateFormat = labelFormats[1];
-                        xDateFormatEnd = labelFormats[2];
-                    }
-                    // if not grouped, and we don't have set the xDateFormat option, get the
-                    // best fit, so if the least distance between points is one minute, show
-                    // it, but if the least distance is one day, skip hours and minutes etc.
-                }
-                else if (!xDateFormat && dateTimeLabelFormats) {
-                    xDateFormat = tooltip.getXDateFormat(labelConfig, tooltipOptions, xAxis);
-                }
-                // now format the key
-                formattedKey = time.dateFormat(xDateFormat, labelConfig.key);
-                if (xDateFormatEnd) {
-                    formattedKey += time.dateFormat(xDateFormatEnd, labelConfig.key + currentDataGrouping.totalRange - 1);
-                }
-                // Replace default header style with class name
-                if (series.chart.styledMode) {
-                    formatString = this.styledModeFormat(formatString);
-                }
-                // return the replaced format
-                e.text = format(formatString, {
-                    point: extend(labelConfig.point, { key: formattedKey }),
-                    series: series
-                }, chart);
-                e.preventDefault();
+        // Initialize navigator for stock charts
+        addEvent(Chart, "beforeRender", function () {
+          var options = this.options;
+          if (options.navigator.enabled || options.scrollbar.enabled) {
+            this.scroller = this.navigator = new Navigator(this);
+          }
+        });
+        // For stock charts, extend the Chart.setChartSize method so that we can set
+        // the final top position of the navigator once the height of the chart,
+        // including the legend, is determined. #367. We can't use Chart.getMargins,
+        // because labels offsets are not calculated yet.
+        addEvent(Chart, "afterSetChartSize", function () {
+          var legend = this.legend,
+            navigator = this.navigator,
+            scrollbarHeight,
+            legendOptions,
+            xAxis,
+            yAxis;
+          if (navigator) {
+            legendOptions = legend && legend.options;
+            xAxis = navigator.xAxis;
+            yAxis = navigator.yAxis;
+            scrollbarHeight = navigator.scrollbarHeight;
+            // Compute the top position
+            if (this.inverted) {
+              navigator.left = navigator.opposite
+                ? this.chartWidth - scrollbarHeight - navigator.height
+                : this.spacing[3] + scrollbarHeight;
+              navigator.top = this.plotTop + scrollbarHeight;
+            } else {
+              navigator.left = this.plotLeft + scrollbarHeight;
+              navigator.top =
+                navigator.navigatorOptions.top ||
+                this.chartHeight -
+                  navigator.height -
+                  scrollbarHeight -
+                  this.spacing[2] -
+                  (this.rangeSelector && this.extraBottomMargin
+                    ? this.rangeSelector.getHeight()
+                    : 0) -
+                  (legendOptions &&
+                  legendOptions.verticalAlign === "bottom" &&
+                  legendOptions.layout !== "proximate" && // #13392
+                  legendOptions.enabled &&
+                  !legendOptions.floating
+                    ? legend.legendHeight + pick(legendOptions.margin, 10)
+                    : 0) -
+                  (this.titleOffset ? this.titleOffset[2] : 0);
+            }
+            if (xAxis && yAxis) {
+              // false if navigator is disabled (#904)
+              if (this.inverted) {
+                xAxis.options.left = yAxis.options.left = navigator.left;
+              } else {
+                xAxis.options.top = yAxis.options.top = navigator.top;
+              }
+              xAxis.setAxisSize();
+              yAxis.setAxisSize();
             }
+          }
         });
-        // Destroy grouped data on series destroy
-        addEvent(Series, 'destroy', seriesProto.destroyGroupedData);
-        // Handle default options for data grouping. This must be set at runtime because
-        // some series types are defined after this.
-        addEvent(Series, 'afterSetOptions', function (e) {
-            var options = e.options,
-                type = this.type,
-                plotOptions = this.chart.options.plotOptions,
-                defaultOptions = O.defaultOptions.plotOptions[type].dataGrouping, 
-                // External series, for example technical indicators should also
-                // inherit commonOptions which are not available outside this module
-                baseOptions = this.useCommonDataGrouping && commonOptions;
-            if (specificOptions[type] || baseOptions) { // #1284
-                if (!defaultOptions) {
-                    defaultOptions = merge(commonOptions, specificOptions[type]);
-                }
-                options.dataGrouping = merge(baseOptions, defaultOptions, plotOptions.series && plotOptions.series.dataGrouping, // #1228
-                // Set by the StockChart constructor:
-                plotOptions[type].dataGrouping, this.userOptions.dataGrouping);
+        // Merge options, if no scrolling exists yet
+        addEvent(Chart, "update", function (e) {
+          var navigatorOptions = e.options.navigator || {},
+            scrollbarOptions = e.options.scrollbar || {};
+          if (
+            !this.navigator &&
+            !this.scroller &&
+            (navigatorOptions.enabled || scrollbarOptions.enabled)
+          ) {
+            merge(true, this.options.navigator, navigatorOptions);
+            merge(true, this.options.scrollbar, scrollbarOptions);
+            delete e.options.navigator;
+            delete e.options.scrollbar;
+          }
+        });
+        // Initialize navigator, if no scrolling exists yet
+        addEvent(Chart, "afterUpdate", function (event) {
+          if (
+            !this.navigator &&
+            !this.scroller &&
+            (this.options.navigator.enabled || this.options.scrollbar.enabled)
+          ) {
+            this.scroller = this.navigator = new Navigator(this);
+            if (pick(event.redraw, true)) {
+              this.redraw(event.animation); // #7067
             }
+          }
         });
-        // When resetting the scale reset the hasProccessed flag to avoid taking
-        // previous data grouping of neighbour series into accound when determining
-        // group pixel width (#2692).
-        addEvent(Axis, 'afterSetScale', function () {
-            this.series.forEach(function (series) {
-                series.hasProcessed = false;
-            });
+        // Handle adding new series
+        addEvent(Chart, "afterAddSeries", function () {
+          if (this.navigator) {
+            // Recompute which series should be shown in navigator, and add them
+            this.navigator.setBaseSeries(null, false);
+          }
         });
-        // Get the data grouping pixel width based on the greatest defined individual
-        // width of the axis' series, and if whether one of the axes need grouping.
-        Axis.prototype.getGroupPixelWidth = function () {
-            var series = this.series,
-                len = series.length,
-                i,
-                groupPixelWidth = 0,
-                doGrouping = false,
-                dataLength,
-                dgOptions;
-            // If multiple series are compared on the same x axis, give them the same
-            // group pixel width (#334)
-            i = len;
-            while (i--) {
-                dgOptions = series[i].options.dataGrouping;
-                if (dgOptions) {
-                    groupPixelWidth = Math.max(groupPixelWidth, 
-                    // Fallback to commonOptions (#9693)
-                    pick(dgOptions.groupPixelWidth, commonOptions.groupPixelWidth));
-                }
+        // Handle updating series
+        addEvent(LineSeries, "afterUpdate", function () {
+          if (this.chart.navigator && !this.options.isInternal) {
+            this.chart.navigator.setBaseSeries(null, false);
+          }
+        });
+        Chart.prototype.callbacks.push(function (chart) {
+          var extremes,
+            navigator = chart.navigator;
+          // Initialize the navigator
+          if (navigator && chart.xAxis[0]) {
+            extremes = chart.xAxis[0].getExtremes();
+            navigator.render(extremes.min, extremes.max);
+          }
+        });
+      }
+      H.Navigator = Navigator;
+
+      return H.Navigator;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/OrdinalAxis.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Series/CartesianSeries.js"],
+      _modules["Core/Utilities.js"],
+      _modules["Core/Chart/Chart.js"],
+    ],
+    function (Axis, H, CartesianSeries, U, Chart) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        css = U.css,
+        defined = U.defined,
+        pick = U.pick,
+        timeUnits = U.timeUnits;
+      // Has a dependency on Navigator due to the use of Axis.toFixedRange
+      /**
+       * Extends the axis with ordinal support.
+       * @private
+       */
+      var OrdinalAxis;
+      (function (OrdinalAxis) {
+        /* *
+         *
+         *  Classes
+         *
+         * */
+        /**
+         * @private
+         */
+        var Composition = /** @class */ (function () {
+          /* *
+           *
+           *  Constructors
+           *
+           * */
+          /**
+           * @private
+           */
+          function Composition(axis) {
+            this.index = {};
+            this.axis = axis;
+          }
+          /* *
+           *
+           *  Functions
+           *
+           * */
+          /**
+           * Calculate the ordinal positions before tick positions are calculated.
+           *
+           * @private
+           */
+          Composition.prototype.beforeSetTickPositions = function () {
+            var axis = this.axis,
+              ordinal = axis.ordinal,
+              len,
+              ordinalPositions = [],
+              uniqueOrdinalPositions,
+              useOrdinal = false,
+              dist,
+              extremes = axis.getExtremes(),
+              min = extremes.min,
+              max = extremes.max,
+              minIndex,
+              maxIndex,
+              slope,
+              hasBreaks = axis.isXAxis && !!axis.options.breaks,
+              isOrdinal = axis.options.ordinal,
+              overscrollPointsRange = Number.MAX_VALUE,
+              ignoreHiddenSeries = axis.chart.options.chart.ignoreHiddenSeries,
+              i,
+              hasBoostedSeries;
+            // Apply the ordinal logic
+            if (isOrdinal || hasBreaks) {
+              // #4167 YAxis is never ordinal ?
+              axis.series.forEach(function (series, i) {
+                uniqueOrdinalPositions = [];
+                if (
+                  (!ignoreHiddenSeries || series.visible !== false) &&
+                  (series.takeOrdinalPosition !== false || hasBreaks)
+                ) {
+                  // concatenate the processed X data into the existing
+                  // positions, or the empty array
+                  ordinalPositions = ordinalPositions.concat(
+                    series.processedXData
+                  );
+                  len = ordinalPositions.length;
+                  // remove duplicates (#1588)
+                  ordinalPositions.sort(function (a, b) {
+                    // without a custom function it is sorted as strings
+                    return a - b;
+                  });
+                  overscrollPointsRange = Math.min(
+                    overscrollPointsRange,
+                    pick(
+                      // Check for a single-point series:
+                      series.closestPointRange,
+                      overscrollPointsRange
+                    )
+                  );
+                  if (len) {
+                    i = 0;
+                    while (i < len - 1) {
+                      if (ordinalPositions[i] !== ordinalPositions[i + 1]) {
+                        uniqueOrdinalPositions.push(ordinalPositions[i + 1]);
+                      }
+                      i++;
+                    }
+                    // Check first item:
+                    if (uniqueOrdinalPositions[0] !== ordinalPositions[0]) {
+                      uniqueOrdinalPositions.unshift(ordinalPositions[0]);
+                    }
+                    ordinalPositions = uniqueOrdinalPositions;
+                  }
+                }
+                if (series.isSeriesBoosting) {
+                  hasBoostedSeries = true;
+                }
+              });
+              if (hasBoostedSeries) {
+                ordinalPositions.length = 0;
+              }
+              // cache the length
+              len = ordinalPositions.length;
+              // Check if we really need the overhead of mapping axis data
+              // against the ordinal positions. If the series consist of
+              // evenly spaced data any way, we don't need any ordinal logic.
+              if (len > 2) {
+                // two points have equal distance by default
+                dist = ordinalPositions[1] - ordinalPositions[0];
+                i = len - 1;
+                while (i-- && !useOrdinal) {
+                  if (ordinalPositions[i + 1] - ordinalPositions[i] !== dist) {
+                    useOrdinal = true;
+                  }
+                }
+                // When zooming in on a week, prevent axis padding for
+                // weekends even though the data within the week is evenly
+                // spaced.
+                if (
+                  !axis.options.keepOrdinalPadding &&
+                  (ordinalPositions[0] - min > dist ||
+                    max - ordinalPositions[ordinalPositions.length - 1] > dist)
+                ) {
+                  useOrdinal = true;
+                }
+              } else if (axis.options.overscroll) {
+                if (len === 2) {
+                  // Exactly two points, distance for overscroll is fixed:
+                  overscrollPointsRange =
+                    ordinalPositions[1] - ordinalPositions[0];
+                } else if (len === 1) {
+                  // We have just one point, closest distance is unknown.
+                  // Assume then it is last point and overscrolled range:
+                  overscrollPointsRange = axis.options.overscroll;
+                  ordinalPositions = [
+                    ordinalPositions[0],
+                    ordinalPositions[0] + overscrollPointsRange,
+                  ];
+                } else {
+                  // In case of zooming in on overscrolled range, stick to
+                  // the old range:
+                  overscrollPointsRange = ordinal.overscrollPointsRange;
+                }
+              }
+              // Record the slope and offset to compute the linear values from
+              // the array index. Since the ordinal positions may exceed the
+              // current range, get the start and end positions within it
+              // (#719, #665b)
+              if (useOrdinal) {
+                if (axis.options.overscroll) {
+                  ordinal.overscrollPointsRange = overscrollPointsRange;
+                  ordinalPositions = ordinalPositions.concat(
+                    ordinal.getOverscrollPositions()
+                  );
+                }
+                // Register
+                ordinal.positions = ordinalPositions;
+                // This relies on the ordinalPositions being set. Use
+                // Math.max and Math.min to prevent padding on either sides
+                // of the data.
+                minIndex = axis.ordinal2lin(
+                  // #5979
+                  Math.max(min, ordinalPositions[0]),
+                  true
+                );
+                maxIndex = Math.max(
+                  axis.ordinal2lin(
+                    Math.min(
+                      max,
+                      ordinalPositions[ordinalPositions.length - 1]
+                    ),
+                    true
+                  ),
+                  1
+                ); // #3339
+                // Set the slope and offset of the values compared to the
+                // indices in the ordinal positions
+                ordinal.slope = slope = (max - min) / (maxIndex - minIndex);
+                ordinal.offset = min - minIndex * slope;
+              } else {
+                ordinal.overscrollPointsRange = pick(
+                  axis.closestPointRange,
+                  ordinal.overscrollPointsRange
+                );
+                ordinal.positions =
+                  axis.ordinal.slope =
+                  ordinal.offset =
+                    void 0;
+              }
             }
-            // If one of the series needs grouping, apply it to all (#1634)
-            i = len;
-            while (i--) {
-                dgOptions = series[i].options.dataGrouping;
-                if (dgOptions && series[i].hasProcessed) { // #2692
-                    dataLength = (series[i].processedXData || series[i].data).length;
-                    // Execute grouping if the amount of points is greater than the
-                    // limit defined in groupPixelWidth
-                    if (series[i].groupPixelWidth ||
-                        dataLength >
-                            (this.chart.plotSizeX / groupPixelWidth) ||
-                        (dataLength && dgOptions.forced)) {
-                        doGrouping = true;
-                    }
-                }
+            axis.isOrdinal = isOrdinal && useOrdinal; // #3818, #4196, #4926
+            ordinal.groupIntervalFactor = null; // reset for next run
+          };
+          /**
+           * Get the ordinal positions for the entire data set. This is necessary
+           * in chart panning because we need to find out what points or data
+           * groups are available outside the visible range. When a panning
+           * operation starts, if an index for the given grouping does not exists,
+           * it is created and cached. This index is deleted on updated data, so
+           * it will be regenerated the next time a panning operation starts.
+           *
+           * @private
+           */
+          Composition.prototype.getExtendedPositions = function () {
+            var ordinal = this,
+              axis = ordinal.axis,
+              axisProto = axis.constructor.prototype,
+              chart = axis.chart,
+              grouping = axis.series[0].currentDataGrouping,
+              ordinalIndex = ordinal.index,
+              key = grouping ? grouping.count + grouping.unitName : "raw",
+              overscroll = axis.options.overscroll,
+              extremes = axis.getExtremes(),
+              fakeAxis,
+              fakeSeries;
+            // If this is the first time, or the ordinal index is deleted by
+            // updatedData,
+            // create it.
+            if (!ordinalIndex) {
+              ordinalIndex = ordinal.index = {};
             }
-            return doGrouping ? groupPixelWidth : 0;
-        };
-        /**
-         * Highstock only. Force data grouping on all the axis' series.
+            if (!ordinalIndex[key]) {
+              // Create a fake axis object where the extended ordinal
+              // positions are emulated
+              fakeAxis = {
+                series: [],
+                chart: chart,
+                getExtremes: function () {
+                  return {
+                    min: extremes.dataMin,
+                    max: extremes.dataMax + overscroll,
+                  };
+                },
+                options: {
+                  ordinal: true,
+                },
+                ordinal: {},
+                ordinal2lin: axisProto.ordinal2lin,
+                val2lin: axisProto.val2lin, // #2590
+              };
+              fakeAxis.ordinal.axis = fakeAxis;
+              // Add the fake series to hold the full data, then apply
+              // processData to it
+              axis.series.forEach(function (series) {
+                fakeSeries = {
+                  xAxis: fakeAxis,
+                  xData: series.xData.slice(),
+                  chart: chart,
+                  destroyGroupedData: H.noop,
+                  getProcessedData: CartesianSeries.prototype.getProcessedData,
+                };
+                fakeSeries.xData = fakeSeries.xData.concat(
+                  ordinal.getOverscrollPositions()
+                );
+                fakeSeries.options = {
+                  dataGrouping: grouping
+                    ? {
+                        enabled: true,
+                        forced: true,
+                        // doesn't matter which, use the fastest
+                        approximation: "open",
+                        units: [[grouping.unitName, [grouping.count]]],
+                      }
+                    : {
+                        enabled: false,
+                      },
+                };
+                series.processData.apply(fakeSeries);
+                fakeAxis.series.push(fakeSeries);
+              });
+              // Run beforeSetTickPositions to compute the ordinalPositions
+              axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });
+              // Cache it
+              ordinalIndex[key] = fakeAxis.ordinal.positions;
+            }
+            return ordinalIndex[key];
+          };
+          /**
+           * Find the factor to estimate how wide the plot area would have been if
+           * ordinal gaps were included. This value is used to compute an imagined
+           * plot width in order to establish the data grouping interval.
+           *
+           * A real world case is the intraday-candlestick example. Without this
+           * logic, it would show the correct data grouping when viewing a range
+           * within each day, but once moving the range to include the gap between
+           * two days, the interval would include the cut-away night hours and the
+           * data grouping would be wrong. So the below method tries to compensate
+           * by identifying the most common point interval, in this case days.
+           *
+           * An opposite case is presented in issue #718. We have a long array of
+           * daily data, then one point is appended one hour after the last point.
+           * We expect the data grouping not to change.
+           *
+           * In the future, if we find cases where this estimation doesn't work
+           * optimally, we might need to add a second pass to the data grouping
+           * logic, where we do another run with a greater interval if the number
+           * of data groups is more than a certain fraction of the desired group
+           * count.
+           *
+           * @private
+           */
+          Composition.prototype.getGroupIntervalFactor = function (
+            xMin,
+            xMax,
+            series
+          ) {
+            var ordinal = this,
+              axis = ordinal.axis,
+              i,
+              processedXData = series.processedXData,
+              len = processedXData.length,
+              distances = [],
+              median,
+              groupIntervalFactor = ordinal.groupIntervalFactor;
+            // Only do this computation for the first series, let the other
+            // inherit it (#2416)
+            if (!groupIntervalFactor) {
+              // Register all the distances in an array
+              for (i = 0; i < len - 1; i++) {
+                distances[i] = processedXData[i + 1] - processedXData[i];
+              }
+              // Sort them and find the median
+              distances.sort(function (a, b) {
+                return a - b;
+              });
+              median = distances[Math.floor(len / 2)];
+              // Compensate for series that don't extend through the entire
+              // axis extent. #1675.
+              xMin = Math.max(xMin, processedXData[0]);
+              xMax = Math.min(xMax, processedXData[len - 1]);
+              ordinal.groupIntervalFactor = groupIntervalFactor =
+                (len * median) / (xMax - xMin);
+            }
+            // Return the factor needed for data grouping
+            return groupIntervalFactor;
+          };
+          /**
+           * Get ticks for an ordinal axis within a range where points don't
+           * exist. It is required when overscroll is enabled. We can't base on
+           * points, because we may not have any, so we use approximated
+           * pointRange and generate these ticks between Axis.dataMax,
+           * Axis.dataMax + Axis.overscroll evenly spaced. Used in panning and
+           * navigator scrolling.
+           *
+           * @private
+           */
+          Composition.prototype.getOverscrollPositions = function () {
+            var ordinal = this,
+              axis = ordinal.axis,
+              extraRange = axis.options.overscroll,
+              distance = ordinal.overscrollPointsRange,
+              positions = [],
+              max = axis.dataMax;
+            if (defined(distance)) {
+              // Max + pointRange because we need to scroll to the last
+              positions.push(max);
+              while (max <= axis.dataMax + extraRange) {
+                max += distance;
+                positions.push(max);
+              }
+            }
+            return positions;
+          };
+          /**
+           * Make the tick intervals closer because the ordinal gaps make the
+           * ticks spread out or cluster.
+           *
+           * @private
+           */
+          Composition.prototype.postProcessTickInterval = function (
+            tickInterval
+          ) {
+            // Problem: https://jsfiddle.net/highcharts/FQm4E/1/
+            // This is a case where this algorithm doesn't work optimally. In
+            // this case, the tick labels are spread out per week, but all the
+            // gaps reside within weeks. So we have a situation where the labels
+            // are courser than the ordinal gaps, and thus the tick interval
+            // should not be altered.
+            var ordinal = this,
+              axis = ordinal.axis,
+              ordinalSlope = ordinal.slope,
+              ret;
+            if (ordinalSlope) {
+              if (!axis.options.breaks) {
+                ret = tickInterval / (ordinalSlope / axis.closestPointRange);
+              } else {
+                ret = axis.closestPointRange || tickInterval; // #7275
+              }
+            } else {
+              ret = tickInterval;
+            }
+            return ret;
+          };
+          return Composition;
+        })();
+        OrdinalAxis.Composition = Composition;
+        /* *
          *
-         * @product highstock
+         *  Functions
+         *
+         * */
+        /**
+         * Extends the axis with ordinal support.
          *
-         * @function Highcharts.Axis#setDataGrouping
+         * @private
          *
-         * @param {boolean|Highcharts.DataGroupingOptionsObject} [dataGrouping]
-         *        A `dataGrouping` configuration. Use `false` to disable data grouping
-         *        dynamically.
+         * @param AxisClass
+         * Axis class to extend.
          *
-         * @param {boolean} [redraw=true]
-         *        Whether to redraw the chart or wait for a later call to
-         *        {@link Chart#redraw}.
+         * @param ChartClass
+         * Chart class to use.
          *
-         * @return {void}
+         * @param SeriesClass
+         * Series class to use.
          */
-        Axis.prototype.setDataGrouping = function (dataGrouping, redraw) {
-            var axis = this;
-            var i;
-            redraw = pick(redraw, true);
-            if (!dataGrouping) {
-                dataGrouping = {
-                    forced: false,
-                    units: null
-                };
+        function compose(AxisClass, ChartClass, SeriesClass) {
+          AxisClass.keepProps.push("ordinal");
+          var axisProto = AxisClass.prototype;
+          /**
+           * In an ordinal axis, there might be areas with dense consentrations of
+           * points, then large gaps between some. Creating equally distributed
+           * ticks over this entire range may lead to a huge number of ticks that
+           * will later be removed. So instead, break the positions up in
+           * segments, find the tick positions for each segment then concatenize
+           * them. This method is used from both data grouping logic and X axis
+           * tick position logic.
+           *
+           * @private
+           */
+          AxisClass.prototype.getTimeTicks = function (
+            normalizedInterval,
+            min,
+            max,
+            startOfWeek,
+            positions,
+            closestDistance,
+            findHigherRanks
+          ) {
+            if (positions === void 0) {
+              positions = [];
+            }
+            if (closestDistance === void 0) {
+              closestDistance = 0;
+            }
+            var start = 0,
+              end,
+              segmentPositions,
+              higherRanks = {},
+              hasCrossedHigherRank,
+              info,
+              posLength,
+              outsideMax,
+              groupPositions = [],
+              lastGroupPosition = -Number.MAX_VALUE,
+              tickPixelIntervalOption = this.options.tickPixelInterval,
+              time = this.chart.time,
+              // Record all the start positions of a segment, to use when
+              // deciding what's a gap in the data.
+              segmentStarts = [];
+            // The positions are not always defined, for example for ordinal
+            // positions when data has regular interval (#1557, #2090)
+            if (
+              (!this.options.ordinal && !this.options.breaks) ||
+              !positions ||
+              positions.length < 3 ||
+              typeof min === "undefined"
+            ) {
+              return time.getTimeTicks.apply(time, arguments);
+            }
+            // Analyze the positions array to split it into segments on gaps
+            // larger than 5 times the closest distance. The closest distance is
+            // already found at this point, so we reuse that instead of
+            // computing it again.
+            posLength = positions.length;
+            for (end = 0; end < posLength; end++) {
+              outsideMax = end && positions[end - 1] > max;
+              if (positions[end] < min) {
+                // Set the last position before min
+                start = end;
+              }
+              if (
+                end === posLength - 1 ||
+                positions[end + 1] - positions[end] > closestDistance * 5 ||
+                outsideMax
+              ) {
+                // For each segment, calculate the tick positions from the
+                // getTimeTicks utility function. The interval will be the
+                // same regardless of how long the segment is.
+                if (positions[end] > lastGroupPosition) {
+                  // #1475
+                  segmentPositions = time.getTimeTicks(
+                    normalizedInterval,
+                    positions[start],
+                    positions[end],
+                    startOfWeek
+                  );
+                  // Prevent duplicate groups, for example for multiple
+                  // segments within one larger time frame (#1475)
+                  while (
+                    segmentPositions.length &&
+                    segmentPositions[0] <= lastGroupPosition
+                  ) {
+                    segmentPositions.shift();
+                  }
+                  if (segmentPositions.length) {
+                    lastGroupPosition =
+                      segmentPositions[segmentPositions.length - 1];
+                  }
+                  segmentStarts.push(groupPositions.length);
+                  groupPositions = groupPositions.concat(segmentPositions);
+                }
+                // Set start of next segment
+                start = end + 1;
+              }
+              if (outsideMax) {
+                break;
+              }
+            }
+            // Get the grouping info from the last of the segments. The info is
+            // the same for all segments.
+            info = segmentPositions.info;
+            // Optionally identify ticks with higher rank, for example when the
+            // ticks have crossed midnight.
+            if (findHigherRanks && info.unitRange <= timeUnits.hour) {
+              end = groupPositions.length - 1;
+              // Compare points two by two
+              for (start = 1; start < end; start++) {
+                if (
+                  time.dateFormat("%d", groupPositions[start]) !==
+                  time.dateFormat("%d", groupPositions[start - 1])
+                ) {
+                  higherRanks[groupPositions[start]] = "day";
+                  hasCrossedHigherRank = true;
+                }
+              }
+              // If the complete array has crossed midnight, we want to mark
+              // the first positions also as higher rank
+              if (hasCrossedHigherRank) {
+                higherRanks[groupPositions[0]] = "day";
+              }
+              info.higherRanks = higherRanks;
             }
-            // Axis is instantiated, update all series
-            if (this instanceof Axis) {
-                i = this.series.length;
+            // Save the info
+            info.segmentStarts = segmentStarts;
+            groupPositions.info = info;
+            // Don't show ticks within a gap in the ordinal axis, where the
+            // space between two points is greater than a portion of the tick
+            // pixel interval
+            if (findHigherRanks && defined(tickPixelIntervalOption)) {
+              var length = groupPositions.length,
+                i = length,
+                itemToRemove,
+                translated,
+                translatedArr = [],
+                lastTranslated,
+                medianDistance,
+                distance,
+                distances = [];
+              // Find median pixel distance in order to keep a reasonably even
+              // distance between ticks (#748)
+              while (i--) {
+                translated = this.translate(groupPositions[i]);
+                if (lastTranslated) {
+                  distances[i] = lastTranslated - translated;
+                }
+                translatedArr[i] = lastTranslated = translated;
+              }
+              distances.sort();
+              medianDistance = distances[Math.floor(distances.length / 2)];
+              if (medianDistance < tickPixelIntervalOption * 0.6) {
+                medianDistance = null;
+              }
+              // Now loop over again and remove ticks where needed
+              i = groupPositions[length - 1] > max ? length - 1 : length; // #817
+              lastTranslated = void 0;
+              while (i--) {
+                translated = translatedArr[i];
+                distance = Math.abs(lastTranslated - translated);
+                // #4175 - when axis is reversed, the distance, is negative
+                // but tickPixelIntervalOption positive, so we need to
+                // compare the same values
+                // Remove ticks that are closer than 0.6 times the pixel
+                // interval from the one to the right, but not if it is
+                // close to the median distance (#748).
+                if (
+                  lastTranslated &&
+                  distance < tickPixelIntervalOption * 0.8 &&
+                  (medianDistance === null || distance < medianDistance * 0.8)
+                ) {
+                  // Is this a higher ranked position with a normal
+                  // position to the right?
+                  if (
+                    higherRanks[groupPositions[i]] &&
+                    !higherRanks[groupPositions[i + 1]]
+                  ) {
+                    // Yes: remove the lower ranked neighbour to the
+                    // right
+                    itemToRemove = i + 1;
+                    lastTranslated = translated; // #709
+                  } else {
+                    // No: remove this one
+                    itemToRemove = i;
+                  }
+                  groupPositions.splice(itemToRemove, 1);
+                } else {
+                  lastTranslated = translated;
+                }
+              }
+            }
+            return groupPositions;
+          };
+          /**
+           * Translate from linear (internal) to axis value.
+           *
+           * @private
+           * @function Highcharts.Axis#lin2val
+           *
+           * @param {number} val
+           *        The linear abstracted value.
+           *
+           * @param {boolean} [fromIndex]
+           *        Translate from an index in the ordinal positions rather than a
+           *        value.
+           *
+           * @return {number}
+           */
+          axisProto.lin2val = function (val, fromIndex) {
+            var axis = this,
+              ordinal = axis.ordinal,
+              ordinalPositions = ordinal.positions,
+              ret;
+            // the visible range contains only equally spaced values
+            if (!ordinalPositions) {
+              ret = val;
+            } else {
+              var ordinalSlope = ordinal.slope,
+                ordinalOffset = ordinal.offset,
+                i = ordinalPositions.length - 1,
+                linearEquivalentLeft,
+                linearEquivalentRight,
+                distance;
+              // Handle the case where we translate from the index directly,
+              // used only when panning an ordinal axis
+              if (fromIndex) {
+                if (val < 0) {
+                  // out of range, in effect panning to the left
+                  val = ordinalPositions[0];
+                } else if (val > i) {
+                  // out of range, panning to the right
+                  val = ordinalPositions[i];
+                } else {
+                  // split it up
+                  i = Math.floor(val);
+                  distance = val - i; // the decimal
+                }
+                // Loop down along the ordinal positions. When the linear
+                // equivalent of i matches an ordinal position, interpolate
+                // between the left and right values.
+              } else {
                 while (i--) {
-                    this.series[i].update({
-                        dataGrouping: dataGrouping
-                    }, false);
-                }
-                // Axis not yet instanciated, alter series options
+                  linearEquivalentLeft = ordinalSlope * i + ordinalOffset;
+                  if (val >= linearEquivalentLeft) {
+                    linearEquivalentRight =
+                      ordinalSlope * (i + 1) + ordinalOffset;
+                    // something between 0 and 1
+                    distance =
+                      (val - linearEquivalentLeft) /
+                      (linearEquivalentRight - linearEquivalentLeft);
+                    break;
+                  }
+                }
+              }
+              // If the index is within the range of the ordinal positions,
+              // return the associated or interpolated value. If not, just
+              // return the value.
+              return typeof distance !== "undefined" &&
+                typeof ordinalPositions[i] !== "undefined"
+                ? ordinalPositions[i] +
+                    (distance
+                      ? distance *
+                        (ordinalPositions[i + 1] - ordinalPositions[i])
+                      : 0)
+                : val;
+            }
+            return ret;
+          };
+          /**
+           * Translate from a linear axis value to the corresponding ordinal axis
+           * position. If there are no gaps in the ordinal axis this will be the
+           * same. The translated value is the value that the point would have if
+           * the axis were linear, using the same min and max.
+           *
+           * @private
+           * @function Highcharts.Axis#val2lin
+           *
+           * @param {number} val
+           * The axis value.
+           *
+           * @param {boolean} [toIndex]
+           * Whether to return the index in the ordinalPositions or the new value.
+           *
+           * @return {number}
+           */
+          axisProto.val2lin = function (val, toIndex) {
+            var axis = this,
+              ordinal = axis.ordinal,
+              ordinalPositions = ordinal.positions,
+              ret;
+            if (!ordinalPositions) {
+              ret = val;
+            } else {
+              var ordinalLength = ordinalPositions.length,
+                i,
+                distance,
+                ordinalIndex;
+              // first look for an exact match in the ordinalpositions array
+              i = ordinalLength;
+              while (i--) {
+                if (ordinalPositions[i] === val) {
+                  ordinalIndex = i;
+                  break;
+                }
+              }
+              // if that failed, find the intermediate position between the
+              // two nearest values
+              i = ordinalLength - 1;
+              while (i--) {
+                if (val > ordinalPositions[i] || i === 0) {
+                  // interpolate
+                  // something between 0 and 1
+                  distance =
+                    (val - ordinalPositions[i]) /
+                    (ordinalPositions[i + 1] - ordinalPositions[i]);
+                  ordinalIndex = i + distance;
+                  break;
+                }
+              }
+              ret = toIndex
+                ? ordinalIndex
+                : ordinal.slope * (ordinalIndex || 0) + ordinal.offset;
             }
-            else {
-                this.chart.options.series.forEach(function (seriesOptions) {
-                    seriesOptions.dataGrouping = dataGrouping;
-                }, false);
+            return ret;
+          };
+          // Record this to prevent overwriting by broken-axis module (#5979)
+          axisProto.ordinal2lin = axisProto.val2lin;
+          /* eslint-disable no-invalid-this */
+          addEvent(AxisClass, "afterInit", function () {
+            var axis = this;
+            if (!axis.ordinal) {
+              axis.ordinal = new OrdinalAxis.Composition(axis);
+            }
+          });
+          addEvent(AxisClass, "foundExtremes", function () {
+            var axis = this;
+            if (
+              axis.isXAxis &&
+              defined(axis.options.overscroll) &&
+              axis.max === axis.dataMax &&
+              // Panning is an execption. We don't want to apply
+              // overscroll when panning over the dataMax
+              (!axis.chart.mouseIsDown || axis.isInternal) &&
+              // Scrollbar buttons are the other execption:
+              (!axis.eventArgs ||
+                (axis.eventArgs && axis.eventArgs.trigger !== "navigator"))
+            ) {
+              axis.max += axis.options.overscroll;
+              // Live data and buttons require translation for the min:
+              if (!axis.isInternal && defined(axis.userMin)) {
+                axis.min += axis.options.overscroll;
+              }
             }
-            // Clear ordinal slope, so we won't accidentaly use the old one (#7827)
+          });
+          // For ordinal axis, that loads data async, redraw axis after data is
+          // loaded. If we don't do that, axis will have the same extremes as
+          // previously, but ordinal positions won't be calculated. See #10290
+          addEvent(AxisClass, "afterSetScale", function () {
+            var axis = this;
+            if (axis.horiz && !axis.isDirty) {
+              axis.isDirty =
+                axis.isOrdinal &&
+                axis.chart.navigator &&
+                !axis.chart.navigator.adaptToUpdatedData;
+            }
+          });
+          addEvent(AxisClass, "initialAxisTranslation", function () {
+            var axis = this;
             if (axis.ordinal) {
-                axis.ordinal.slope = void 0;
+              axis.ordinal.beforeSetTickPositions();
+              axis.tickInterval = axis.ordinal.postProcessTickInterval(
+                axis.tickInterval
+              );
+            }
+          });
+          // Extending the Chart.pan method for ordinal axes
+          addEvent(ChartClass, "pan", function (e) {
+            var chart = this,
+              xAxis = chart.xAxis[0],
+              overscroll = xAxis.options.overscroll,
+              chartX = e.originalEvent.chartX,
+              panning = chart.options.chart && chart.options.chart.panning,
+              runBase = false;
+            if (
+              panning &&
+              panning.type !== "y" &&
+              xAxis.options.ordinal &&
+              xAxis.series.length
+            ) {
+              var mouseDownX = chart.mouseDownX,
+                extremes = xAxis.getExtremes(),
+                dataMax = extremes.dataMax,
+                min = extremes.min,
+                max = extremes.max,
+                trimmedRange,
+                hoverPoints = chart.hoverPoints,
+                closestPointRange =
+                  xAxis.closestPointRange ||
+                  (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange),
+                pointPixelWidth =
+                  xAxis.translationSlope *
+                  (xAxis.ordinal.slope || closestPointRange),
+                // how many ordinal units did we move?
+                movedUnits = (mouseDownX - chartX) / pointPixelWidth,
+                // get index of all the chart's points
+                extendedAxis = {
+                  ordinal: { positions: xAxis.ordinal.getExtendedPositions() },
+                },
+                ordinalPositions,
+                searchAxisLeft,
+                lin2val = xAxis.lin2val,
+                val2lin = xAxis.val2lin,
+                searchAxisRight;
+              // we have an ordinal axis, but the data is equally spaced
+              if (!extendedAxis.ordinal.positions) {
+                runBase = true;
+              } else if (Math.abs(movedUnits) > 1) {
+                // Remove active points for shared tooltip
+                if (hoverPoints) {
+                  hoverPoints.forEach(function (point) {
+                    point.setState();
+                  });
+                }
+                if (movedUnits < 0) {
+                  searchAxisLeft = extendedAxis;
+                  searchAxisRight = xAxis.ordinal.positions
+                    ? xAxis
+                    : extendedAxis;
+                } else {
+                  searchAxisLeft = xAxis.ordinal.positions
+                    ? xAxis
+                    : extendedAxis;
+                  searchAxisRight = extendedAxis;
+                }
+                // In grouped data series, the last ordinal position
+                // represents the grouped data, which is to the left of the
+                // real data max. If we don't compensate for this, we will
+                // be allowed to pan grouped data series passed the right of
+                // the plot area.
+                ordinalPositions = searchAxisRight.ordinal.positions;
+                if (dataMax > ordinalPositions[ordinalPositions.length - 1]) {
+                  ordinalPositions.push(dataMax);
+                }
+                // Get the new min and max values by getting the ordinal
+                // index for the current extreme, then add the moved units
+                // and translate back to values. This happens on the
+                // extended ordinal positions if the new position is out of
+                // range, else it happens on the current x axis which is
+                // smaller and faster.
+                chart.fixedRange = max - min;
+                trimmedRange = xAxis.navigatorAxis.toFixedRange(
+                  null,
+                  null,
+                  lin2val.apply(searchAxisLeft, [
+                    val2lin.apply(searchAxisLeft, [min, true]) + movedUnits,
+                    true, // translate from index
+                  ]),
+                  lin2val.apply(searchAxisRight, [
+                    val2lin.apply(searchAxisRight, [max, true]) + movedUnits,
+                    true, // translate from index
+                  ])
+                );
+                // Apply it if it is within the available data range
+                if (
+                  trimmedRange.min >= Math.min(extremes.dataMin, min) &&
+                  trimmedRange.max <= Math.max(dataMax, max) + overscroll
+                ) {
+                  xAxis.setExtremes(
+                    trimmedRange.min,
+                    trimmedRange.max,
+                    true,
+                    false,
+                    { trigger: "pan" }
+                  );
+                }
+                chart.mouseDownX = chartX; // set new reference for next run
+                css(chart.container, { cursor: "move" });
+              }
+            } else {
+              runBase = true;
             }
-            if (redraw) {
-                this.chart.redraw();
+            // revert to the linear chart.pan version
+            if (runBase || (panning && /y/.test(panning.type))) {
+              if (overscroll) {
+                xAxis.max = xAxis.dataMax + overscroll;
+              }
+            } else {
+              e.preventDefault();
             }
+          });
+          addEvent(SeriesClass, "updatedData", function () {
+            var xAxis = this.xAxis;
+            // Destroy the extended ordinal index on updated data
+            if (xAxis && xAxis.options.ordinal) {
+              delete xAxis.ordinal.index;
+            }
+          });
+          /* eslint-enable no-invalid-this */
+        }
+        OrdinalAxis.compose = compose;
+      })(OrdinalAxis || (OrdinalAxis = {}));
+      OrdinalAxis.compose(Axis, Chart, CartesianSeries); // @todo move to StockChart, remove from master
+
+      return OrdinalAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Axis/BrokenAxis.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Series/LineSeries.js"],
+      _modules["Extensions/Stacking.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, LineSeries, StackItem, U) {
+      /* *
+       *
+       *  (c) 2009-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        find = U.find,
+        fireEvent = U.fireEvent,
+        isArray = U.isArray,
+        isNumber = U.isNumber,
+        pick = U.pick;
+      /* eslint-disable valid-jsdoc */
+      /**
+       * Provides support for broken axes.
+       * @private
+       * @class
+       */
+      var BrokenAxisAdditions = /** @class */ (function () {
+        /* *
+         *
+         *  Constructors
+         *
+         * */
+        function BrokenAxisAdditions(axis) {
+          this.hasBreaks = false;
+          this.axis = axis;
+        }
+        /* *
+         *
+         *  Static Functions
+         *
+         * */
+        /**
+         * @private
+         */
+        BrokenAxisAdditions.isInBreak = function (brk, val) {
+          var ret,
+            repeat = brk.repeat || Infinity,
+            from = brk.from,
+            length = brk.to - brk.from,
+            test =
+              val >= from
+                ? (val - from) % repeat
+                : repeat - ((from - val) % repeat);
+          if (!brk.inclusive) {
+            ret = test < length && test !== 0;
+          } else {
+            ret = test <= length;
+          }
+          return ret;
         };
-        H.dataGrouping = dataGrouping;
-        /* eslint-enable no-invalid-this, valid-jsdoc */
         /**
-         * Data grouping is the concept of sampling the data values into larger
-         * blocks in order to ease readability and increase performance of the
-         * JavaScript charts. Highstock by default applies data grouping when
-         * the points become closer than a certain pixel value, determined by
-         * the `groupPixelWidth` option.
-         *
-         * If data grouping is applied, the grouping information of grouped
-         * points can be read from the [Point.dataGroup](
-         * /class-reference/Highcharts.Point#dataGroup). If point options other than
-         * the data itself are set, for example `name` or `color` or custom properties,
-         * the grouping logic doesn't know how to group it. In this case the options of
-         * the first point instance are copied over to the group point. This can be
-         * altered through a custom `approximation` callback function.
-         *
-         * @declare   Highcharts.DataGroupingOptionsObject
-         * @product   highstock
-         * @requires  product:highstock
-         * @requires  module:modules/datagrouping
-         * @apioption plotOptions.series.dataGrouping
+         * @private
          */
+        BrokenAxisAdditions.lin2Val = function (val) {
+          var axis = this;
+          var brokenAxis = axis.brokenAxis;
+          var breakArray = brokenAxis && brokenAxis.breakArray;
+          if (!breakArray) {
+            return val;
+          }
+          var nval = val,
+            brk,
+            i;
+          for (i = 0; i < breakArray.length; i++) {
+            brk = breakArray[i];
+            if (brk.from >= nval) {
+              break;
+            } else if (brk.to < nval) {
+              nval += brk.len;
+            } else if (BrokenAxisAdditions.isInBreak(brk, nval)) {
+              nval += brk.len;
+            }
+          }
+          return nval;
+        };
         /**
-         * The method of approximation inside a group. When for example 30 days
-         * are grouped into one month, this determines what value should represent
-         * the group. Possible values are "average", "averages", "open", "high",
-         * "low", "close" and "sum". For OHLC and candlestick series the approximation
-         * is "ohlc" by default, which finds the open, high, low and close values
-         * within all the grouped data. For ranges, the approximation is "range",
-         * which finds the low and high values. For multi-dimensional data,
-         * like ranges and OHLC, "averages" will compute the average for each
-         * dimension.
-         *
-         * Custom aggregate methods can be added by assigning a callback function
-         * as the approximation. This function takes a numeric array as the
-         * argument and should return a single numeric value or `null`. Note
-         * that the numeric array will never contain null values, only true
-         * numbers. Instead, if null values are present in the raw data, the
-         * numeric array will have an `.hasNulls` property set to `true`. For
-         * single-value data sets the data is available in the first argument
-         * of the callback function. For OHLC data sets, all the open values
-         * are in the first argument, all high values in the second etc.
-         *
-         * Since v4.2.7, grouping meta data is available in the approximation
-         * callback from `this.dataGroupInfo`. It can be used to extract information
-         * from the raw data.
-         *
-         * Defaults to `average` for line-type series, `sum` for columns, `range`
-         * for range series and `ohlc` for OHLC and candlestick.
-         *
-         * @sample {highstock} stock/plotoptions/series-datagrouping-approximation
-         *         Approximation callback with custom data
-         *
-         * @type       {Highcharts.DataGroupingApproximationValue|Function}
-         * @apioption  plotOptions.series.dataGrouping.approximation
+         * @private
          */
-        /**
-         * Datetime formats for the header of the tooltip in a stock chart.
-         * The format can vary within a chart depending on the currently selected
-         * time range and the current data grouping.
-         *
-         * The default formats are:
-         * ```js
-         * {
-         *     millisecond: [
-         *         '%A, %b %e, %H:%M:%S.%L', '%A, %b %e, %H:%M:%S.%L', '-%H:%M:%S.%L'
-         *     ],
-         *     second: ['%A, %b %e, %H:%M:%S', '%A, %b %e, %H:%M:%S', '-%H:%M:%S'],
-         *     minute: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'],
-         *     hour: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'],
-         *     day: ['%A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'],
-         *     week: ['Week from %A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'],
-         *     month: ['%B %Y', '%B', '-%B %Y'],
-         *     year: ['%Y', '%Y', '-%Y']
-         * }
-         * ```
+        BrokenAxisAdditions.val2Lin = function (val) {
+          var axis = this;
+          var brokenAxis = axis.brokenAxis;
+          var breakArray = brokenAxis && brokenAxis.breakArray;
+          if (!breakArray) {
+            return val;
+          }
+          var nval = val,
+            brk,
+            i;
+          for (i = 0; i < breakArray.length; i++) {
+            brk = breakArray[i];
+            if (brk.to <= val) {
+              nval -= brk.len;
+            } else if (brk.from >= val) {
+              break;
+            } else if (BrokenAxisAdditions.isInBreak(brk, val)) {
+              nval -= val - brk.from;
+              break;
+            }
+          }
+          return nval;
+        };
+        /* *
          *
-         * For each of these array definitions, the first item is the format
-         * used when the active time span is one unit. For instance, if the
-         * current data applies to one week, the first item of the week array
-         * is used. The second and third items are used when the active time
-         * span is more than two units. For instance, if the current data applies
-         * to two weeks, the second and third item of the week array are used,
-         *  and applied to the start and end date of the time span.
+         *  Functions
          *
-         * @type      {object}
-         * @apioption plotOptions.series.dataGrouping.dateTimeLabelFormats
-         */
+         * */
         /**
-         * Enable or disable data grouping.
+         * Returns the first break found where the x is larger then break.from and
+         * smaller then break.to.
          *
-         * @type      {boolean}
-         * @default   true
-         * @apioption plotOptions.series.dataGrouping.enabled
-         */
-        /**
-         * When data grouping is forced, it runs no matter how small the intervals
-         * are. This can be handy for example when the sum should be calculated
-         * for values appearing at random times within each hour.
+         * @param {number} x
+         * The number which should be within a break.
          *
-         * @type      {boolean}
-         * @default   false
-         * @apioption plotOptions.series.dataGrouping.forced
-         */
-        /**
-         * The approximate pixel width of each group. If for example a series
-         * with 30 points is displayed over a 600 pixel wide plot area, no grouping
-         * is performed. If however the series contains so many points that
-         * the spacing is less than the groupPixelWidth, Highcharts will try
-         * to group it into appropriate groups so that each is more or less
-         * two pixels wide. If multiple series with different group pixel widths
-         * are drawn on the same x axis, all series will take the greatest width.
-         * For example, line series have 2px default group width, while column
-         * series have 10px. If combined, both the line and the column will
-         * have 10px by default.
+         * @param {Array<Highcharts.XAxisBreaksOptions>} breaks
+         * The array of breaks to search within.
          *
-         * @type      {number}
-         * @default   2
-         * @apioption plotOptions.series.dataGrouping.groupPixelWidth
-         */
-        /**
-         * By default only points within the visible range are grouped. Enabling this
-         * option will force data grouping to calculate all grouped points for a given
-         * dataset. That option prevents for example a column series from calculating
-         * a grouped point partially. The effect is similar to
-         * [Series.getExtremesFromAll](#plotOptions.series.getExtremesFromAll) but does
-         * not affect yAxis extremes.
-         *
-         * @sample {highstock} stock/plotoptions/series-datagrouping-groupall/
-         *         Two series with the same data but different groupAll setting
-         *
-         * @type      {boolean}
-         * @default   false
-         * @since     6.1.0
-         * @apioption plotOptions.series.dataGrouping.groupAll
+         * @return {Highcharts.XAxisBreaksOptions|undefined}
+         * Returns the first break found that matches, returns false if no break is
+         * found.
          */
+        BrokenAxisAdditions.prototype.findBreakAt = function (x, breaks) {
+          return find(breaks, function (b) {
+            return b.from < x && x < b.to;
+          });
+        };
         /**
-         * Normally, a group is indexed by the start of that group, so for example
-         * when 30 daily values are grouped into one month, that month's x value
-         * will be the 1st of the month. This apparently shifts the data to
-         * the left. When the smoothed option is true, this is compensated for.
-         * The data is shifted to the middle of the group, and min and max
-         * values are preserved. Internally, this is used in the Navigator series.
-         *
-         * @type      {boolean}
-         * @default   false
-         * @apioption plotOptions.series.dataGrouping.smoothed
+         * @private
          */
+        BrokenAxisAdditions.prototype.isInAnyBreak = function (val, testKeep) {
+          var brokenAxis = this;
+          var axis = brokenAxis.axis;
+          var breaks = axis.options.breaks,
+            i = breaks && breaks.length,
+            inbrk,
+            keep,
+            ret;
+          if (i) {
+            while (i--) {
+              if (BrokenAxisAdditions.isInBreak(breaks[i], val)) {
+                inbrk = true;
+                if (!keep) {
+                  keep = pick(breaks[i].showPoints, !axis.isXAxis);
+                }
+              }
+            }
+            if (inbrk && testKeep) {
+              ret = inbrk && !keep;
+            } else {
+              ret = inbrk;
+            }
+          }
+          return ret;
+        };
         /**
-         * An array determining what time intervals the data is allowed to be
-         * grouped to. Each array item is an array where the first value is
-         * the time unit and the second value another array of allowed multiples.
+         * Dynamically set or unset breaks in an axis. This function in lighter than
+         * usin Axis.update, and it also preserves animation.
          *
-         * Defaults to:
-         * ```js
-         * units: [[
-         *     'millisecond', // unit name
-         *     [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples
-         * ], [
-         *     'second',
-         *     [1, 2, 5, 10, 15, 30]
-         * ], [
-         *     'minute',
-         *     [1, 2, 5, 10, 15, 30]
-         * ], [
-         *     'hour',
-         *     [1, 2, 3, 4, 6, 8, 12]
-         * ], [
-         *     'day',
-         *     [1]
-         * ], [
-         *     'week',
-         *     [1]
-         * ], [
-         *     'month',
-         *     [1, 3, 6]
-         * ], [
-         *     'year',
-         *     null
-         * ]]
-         * ```
+         * @private
+         * @function Highcharts.Axis#setBreaks
          *
-         * @type      {Array<Array<string,(Array<number>|null)>>}
-         * @apioption plotOptions.series.dataGrouping.units
-         */
-        /**
-         * The approximate pixel width of each group. If for example a series
-         * with 30 points is displayed over a 600 pixel wide plot area, no grouping
-         * is performed. If however the series contains so many points that
-         * the spacing is less than the groupPixelWidth, Highcharts will try
-         * to group it into appropriate groups so that each is more or less
-         * two pixels wide. Defaults to `10`.
+         * @param {Array<Highcharts.XAxisBreaksOptions>} [breaks]
+         *        The breaks to add. When `undefined` it removes existing breaks.
          *
-         * @sample {highstock} stock/plotoptions/series-datagrouping-grouppixelwidth/
-         *         Two series with the same data density but different groupPixelWidth
+         * @param {boolean} [redraw=true]
+         *        Whether to redraw the chart immediately.
          *
-         * @type      {number}
-         * @default   10
-         * @apioption plotOptions.column.dataGrouping.groupPixelWidth
+         * @return {void}
+         */
+        BrokenAxisAdditions.prototype.setBreaks = function (breaks, redraw) {
+          var brokenAxis = this;
+          var axis = brokenAxis.axis;
+          var hasBreaks = isArray(breaks) && !!breaks.length;
+          axis.isDirty = brokenAxis.hasBreaks !== hasBreaks;
+          brokenAxis.hasBreaks = hasBreaks;
+          axis.options.breaks = axis.userOptions.breaks = breaks;
+          axis.forceRedraw = true; // Force recalculation in setScale
+          // Recalculate series related to the axis.
+          axis.series.forEach(function (series) {
+            series.isDirty = true;
+          });
+          if (!hasBreaks && axis.val2lin === BrokenAxisAdditions.val2Lin) {
+            // Revert to prototype functions
+            delete axis.val2lin;
+            delete axis.lin2val;
+          }
+          if (hasBreaks) {
+            axis.userOptions.ordinal = false;
+            axis.lin2val = BrokenAxisAdditions.lin2Val;
+            axis.val2lin = BrokenAxisAdditions.val2Lin;
+            axis.setExtremes = function (
+              newMin,
+              newMax,
+              redraw,
+              animation,
+              eventArguments
+            ) {
+              // If trying to set extremes inside a break, extend min to
+              // after, and max to before the break ( #3857 )
+              if (brokenAxis.hasBreaks) {
+                var axisBreak,
+                  breaks = this.options.breaks;
+                while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks))) {
+                  newMin = axisBreak.to;
+                }
+                while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks))) {
+                  newMax = axisBreak.from;
+                }
+                // If both min and max is within the same break.
+                if (newMax < newMin) {
+                  newMax = newMin;
+                }
+              }
+              Axis.prototype.setExtremes.call(
+                this,
+                newMin,
+                newMax,
+                redraw,
+                animation,
+                eventArguments
+              );
+            };
+            axis.setAxisTranslation = function (saveOld) {
+              Axis.prototype.setAxisTranslation.call(this, saveOld);
+              brokenAxis.unitLength = null;
+              if (brokenAxis.hasBreaks) {
+                var breaks = axis.options.breaks || [],
+                  // Temporary one:
+                  breakArrayT = [],
+                  breakArray = [],
+                  length = 0,
+                  inBrk,
+                  repeat,
+                  min = axis.userMin || axis.min,
+                  max = axis.userMax || axis.max,
+                  pointRangePadding = pick(axis.pointRangePadding, 0),
+                  start,
+                  i;
+                // Min & max check (#4247)
+                breaks.forEach(function (brk) {
+                  repeat = brk.repeat || Infinity;
+                  if (BrokenAxisAdditions.isInBreak(brk, min)) {
+                    min += (brk.to % repeat) - (min % repeat);
+                  }
+                  if (BrokenAxisAdditions.isInBreak(brk, max)) {
+                    max -= (max % repeat) - (brk.from % repeat);
+                  }
+                });
+                // Construct an array holding all breaks in the axis
+                breaks.forEach(function (brk) {
+                  start = brk.from;
+                  repeat = brk.repeat || Infinity;
+                  while (start - repeat > min) {
+                    start -= repeat;
+                  }
+                  while (start < min) {
+                    start += repeat;
+                  }
+                  for (i = start; i < max; i += repeat) {
+                    breakArrayT.push({
+                      value: i,
+                      move: "in",
+                    });
+                    breakArrayT.push({
+                      value: i + (brk.to - brk.from),
+                      move: "out",
+                      size: brk.breakSize,
+                    });
+                  }
+                });
+                breakArrayT.sort(function (a, b) {
+                  return a.value === b.value
+                    ? (a.move === "in" ? 0 : 1) - (b.move === "in" ? 0 : 1)
+                    : a.value - b.value;
+                });
+                // Simplify the breaks
+                inBrk = 0;
+                start = min;
+                breakArrayT.forEach(function (brk) {
+                  inBrk += brk.move === "in" ? 1 : -1;
+                  if (inBrk === 1 && brk.move === "in") {
+                    start = brk.value;
+                  }
+                  if (inBrk === 0) {
+                    breakArray.push({
+                      from: start,
+                      to: brk.value,
+                      len: brk.value - start - (brk.size || 0),
+                    });
+                    length += brk.value - start - (brk.size || 0);
+                  }
+                });
+                /**
+                 * HC <= 8 backwards compatibility, used by demo samples.
+                 * @deprecated
+                 * @private
+                 * @requires modules/broken-axis
+                 */
+                axis.breakArray = brokenAxis.breakArray = breakArray;
+                // Used with staticScale, and below the actual axis length,
+                // when breaks are substracted.
+                brokenAxis.unitLength = max - min - length + pointRangePadding;
+                fireEvent(axis, "afterBreaks");
+                if (axis.staticScale) {
+                  axis.transA = axis.staticScale;
+                } else if (brokenAxis.unitLength) {
+                  axis.transA *=
+                    (max - axis.min + pointRangePadding) /
+                    brokenAxis.unitLength;
+                }
+                if (pointRangePadding) {
+                  axis.minPixelPadding = axis.transA * axis.minPointOffset;
+                }
+                axis.min = min;
+                axis.max = max;
+              }
+            };
+          }
+          if (pick(redraw, true)) {
+            axis.chart.redraw();
+          }
+        };
+        return BrokenAxisAdditions;
+      })();
+      /**
+       * Axis with support of broken data rows.
+       * @private
+       * @class
+       */
+      var BrokenAxis = /** @class */ (function () {
+        function BrokenAxis() {}
+        /**
+         * Adds support for broken axes.
+         * @private
          */
-        ''; // required by JSDoc parsing
+        BrokenAxis.compose = function (AxisClass, SeriesClass) {
+          AxisClass.keepProps.push("brokenAxis");
+          var seriesProto = LineSeries.prototype;
+          /**
+           * @private
+           */
+          seriesProto.drawBreaks = function (axis, keys) {
+            var series = this,
+              points = series.points,
+              breaks,
+              threshold,
+              eventName,
+              y;
+            if (
+              axis && // #5950
+              axis.brokenAxis &&
+              axis.brokenAxis.hasBreaks
+            ) {
+              var brokenAxis_1 = axis.brokenAxis;
+              keys.forEach(function (key) {
+                breaks = (brokenAxis_1 && brokenAxis_1.breakArray) || [];
+                threshold = axis.isXAxis
+                  ? axis.min
+                  : pick(series.options.threshold, axis.min);
+                points.forEach(function (point) {
+                  y = pick(point["stack" + key.toUpperCase()], point[key]);
+                  breaks.forEach(function (brk) {
+                    if (isNumber(threshold) && isNumber(y)) {
+                      eventName = false;
+                      if (
+                        (threshold < brk.from && y > brk.to) ||
+                        (threshold > brk.from && y < brk.from)
+                      ) {
+                        eventName = "pointBreak";
+                      } else if (
+                        (threshold < brk.from && y > brk.from && y < brk.to) ||
+                        (threshold > brk.from && y > brk.to && y < brk.from)
+                      ) {
+                        eventName = "pointInBreak";
+                      }
+                      if (eventName) {
+                        fireEvent(axis, eventName, { point: point, brk: brk });
+                      }
+                    }
+                  });
+                });
+              });
+            }
+          };
+          /**
+           * Extend getGraphPath by identifying gaps in the data so that we can
+           * draw a gap in the line or area. This was moved from ordinal axis
+           * module to broken axis module as of #5045.
+           *
+           * @private
+           * @function Highcharts.Series#gappedPath
+           *
+           * @return {Highcharts.SVGPathArray}
+           * Gapped path
+           */
+          seriesProto.gappedPath = function () {
+            var currentDataGrouping = this.currentDataGrouping,
+              groupingSize = currentDataGrouping && currentDataGrouping.gapSize,
+              gapSize = this.options.gapSize,
+              points = this.points.slice(),
+              i = points.length - 1,
+              yAxis = this.yAxis,
+              stack;
+            /**
+             * Defines when to display a gap in the graph, together with the
+             * [gapUnit](plotOptions.series.gapUnit) option.
+             *
+             * In case when `dataGrouping` is enabled, points can be grouped
+             * into a larger time span. This can make the grouped points to have
+             * a greater distance than the absolute value of `gapSize` property,
+             * which will result in disappearing graph completely. To prevent
+             * this situation the mentioned distance between grouped points is
+             * used instead of previously defined `gapSize`.
+             *
+             * In practice, this option is most often used to visualize gaps in
+             * time series. In a stock chart, intraday data is available for
+             * daytime hours, while gaps will appear in nights and weekends.
+             *
+             * @see [gapUnit](plotOptions.series.gapUnit)
+             * @see [xAxis.breaks](#xAxis.breaks)
+             *
+             * @sample {highstock} stock/plotoptions/series-gapsize/
+             *         Setting the gap size to 2 introduces gaps for weekends
+             *         in daily datasets.
+             *
+             * @type      {number}
+             * @default   0
+             * @product   highstock
+             * @requires  modules/broken-axis
+             * @apioption plotOptions.series.gapSize
+             */
+            /**
+             * Together with [gapSize](plotOptions.series.gapSize), this option
+             * defines where to draw gaps in the graph.
+             *
+             * When the `gapUnit` is `"relative"` (default), a gap size of 5
+             * means that if the distance between two points is greater than
+             * 5 times that of the two closest points, the graph will be broken.
+             *
+             * When the `gapUnit` is `"value"`, the gap is based on absolute
+             * axis values, which on a datetime axis is milliseconds. This also
+             * applies to the navigator series that inherits gap options from
+             * the base series.
+             *
+             * @see [gapSize](plotOptions.series.gapSize)
+             *
+             * @type       {string}
+             * @default    relative
+             * @since      5.0.13
+             * @product    highstock
+             * @validvalue ["relative", "value"]
+             * @requires   modules/broken-axis
+             * @apioption  plotOptions.series.gapUnit
+             */
+            if (gapSize && i > 0) {
+              // #5008
+              // Gap unit is relative
+              if (this.options.gapUnit !== "value") {
+                gapSize *= this.basePointRange;
+              }
+              // Setting a new gapSize in case dataGrouping is enabled (#7686)
+              if (
+                groupingSize &&
+                groupingSize > gapSize &&
+                // Except when DG is forced (e.g. from other series)
+                // and has lower granularity than actual points (#11351)
+                groupingSize >= this.basePointRange
+              ) {
+                gapSize = groupingSize;
+              }
+              // extension for ordinal breaks
+              var current = void 0,
+                next = void 0;
+              while (i--) {
+                // Reassign next if it is not visible
+                if (!(next && next.visible !== false)) {
+                  next = points[i + 1];
+                }
+                current = points[i];
+                // Skip iteration if one of the points is not visible
+                if (next.visible === false || current.visible === false) {
+                  continue;
+                }
+                if (next.x - current.x > gapSize) {
+                  var xRange = (current.x + next.x) / 2;
+                  points.splice(
+                    // insert after this one
+                    i + 1,
+                    0,
+                    {
+                      isNull: true,
+                      x: xRange,
+                    }
+                  );
+                  // For stacked chart generate empty stack items, #6546
+                  if (yAxis.stacking && this.options.stacking) {
+                    stack = yAxis.stacking.stacks[this.stackKey][xRange] =
+                      new StackItem(
+                        yAxis,
+                        yAxis.options.stackLabels,
+                        false,
+                        xRange,
+                        this.stack
+                      );
+                    stack.total = 0;
+                  }
+                }
+                // Assign current to next for the upcoming iteration
+                next = current;
+              }
+            }
+            // Call base method
+            return this.getGraphPath(points);
+          };
+          /* eslint-disable no-invalid-this */
+          addEvent(AxisClass, "init", function () {
+            var axis = this;
+            if (!axis.brokenAxis) {
+              axis.brokenAxis = new BrokenAxisAdditions(axis);
+            }
+          });
+          addEvent(AxisClass, "afterInit", function () {
+            if (typeof this.brokenAxis !== "undefined") {
+              this.brokenAxis.setBreaks(this.options.breaks, false);
+            }
+          });
+          addEvent(AxisClass, "afterSetTickPositions", function () {
+            var axis = this;
+            var brokenAxis = axis.brokenAxis;
+            if (brokenAxis && brokenAxis.hasBreaks) {
+              var tickPositions = this.tickPositions,
+                info = this.tickPositions.info,
+                newPositions = [],
+                i;
+              for (i = 0; i < tickPositions.length; i++) {
+                if (!brokenAxis.isInAnyBreak(tickPositions[i])) {
+                  newPositions.push(tickPositions[i]);
+                }
+              }
+              this.tickPositions = newPositions;
+              this.tickPositions.info = info;
+            }
+          });
+          // Force Axis to be not-ordinal when breaks are defined
+          addEvent(AxisClass, "afterSetOptions", function () {
+            if (this.brokenAxis && this.brokenAxis.hasBreaks) {
+              this.options.ordinal = false;
+            }
+          });
+          addEvent(SeriesClass, "afterGeneratePoints", function () {
+            var _a = this,
+              isDirty = _a.isDirty,
+              connectNulls = _a.options.connectNulls,
+              points = _a.points,
+              xAxis = _a.xAxis,
+              yAxis = _a.yAxis;
+            // Set, or reset visibility of the points. Axis.setBreaks marks the
+            // series as isDirty
+            if (isDirty) {
+              var i = points.length;
+              while (i--) {
+                var point = points[i];
+                // Respect nulls inside the break (#4275)
+                var nullGap = point.y === null && connectNulls === false;
+                var isPointInBreak =
+                  !nullGap &&
+                  ((xAxis &&
+                    xAxis.brokenAxis &&
+                    xAxis.brokenAxis.isInAnyBreak(point.x, true)) ||
+                    (yAxis &&
+                      yAxis.brokenAxis &&
+                      yAxis.brokenAxis.isInAnyBreak(point.y, true)));
+                // Set point.visible if in any break.
+                // If not in break, reset visible to original value.
+                point.visible = isPointInBreak
+                  ? false
+                  : point.options.visible !== false;
+              }
+            }
+          });
+          addEvent(SeriesClass, "afterRender", function drawPointsWrapped() {
+            this.drawBreaks(this.xAxis, ["x"]);
+            this.drawBreaks(this.yAxis, pick(this.pointArrayMap, ["y"]));
+          });
+        };
+        return BrokenAxis;
+      })();
+      BrokenAxis.compose(Axis, LineSeries); // @todo remove automatism
 
-        return dataGrouping;
-    });
-    _registerModule(_modules, 'Series/OHLCSeries.js', [_modules['Core/Series/Series.js'], _modules['Core/Series/Point.js']], function (BaseSeries, Point) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var seriesTypes = BaseSeries.seriesTypes;
+      return BrokenAxis;
+    }
+  );
+  _registerModule(
+    _modules,
+    "masters/modules/broken-axis.src.js",
+    [],
+    function () {}
+  );
+  _registerModule(
+    _modules,
+    "Extensions/DataGrouping.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Axis/DateTimeAxis.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Series/Point.js"],
+      _modules["Core/Tooltip.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, DateTimeAxis, H, O, Point, Tooltip, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      /**
+       * @typedef {"average"|"averages"|"open"|"high"|"low"|"close"|"sum"} Highcharts.DataGroupingApproximationValue
+       */
+      /**
+       * @interface Highcharts.DataGroupingInfoObject
+       */ /**
+       * @name Highcharts.DataGroupingInfoObject#length
+       * @type {number}
+       */ /**
+       * @name Highcharts.DataGroupingInfoObject#options
+       * @type {Highcharts.SeriesOptionsType|undefined}
+       */ /**
+       * @name Highcharts.DataGroupingInfoObject#start
+       * @type {number}
+       */
+      ""; // detach doclets above
+      var defaultOptions = O.defaultOptions;
+      var addEvent = U.addEvent,
+        arrayMax = U.arrayMax,
+        arrayMin = U.arrayMin,
+        correctFloat = U.correctFloat,
+        defined = U.defined,
+        error = U.error,
+        extend = U.extend,
+        format = U.format,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        pick = U.pick;
+      var Series = H.Series;
+      /* ************************************************************************** *
+       *  Start data grouping module                                                *
+       * ************************************************************************** */
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * Define the available approximation types. The data grouping
+       * approximations takes an array or numbers as the first parameter. In case
+       * of ohlc, four arrays are sent in as four parameters. Each array consists
+       * only of numbers. In case null values belong to the group, the property
+       * .hasNulls will be set to true on the array.
+       *
+       * @product highstock
+       *
+       * @private
+       * @name Highcharts.approximations
+       * @type {Highcharts.Dictionary<Function>}
+       */
+      var approximations = (H.approximations = {
+        sum: function (arr) {
+          var len = arr.length,
+            ret;
+          // 1. it consists of nulls exclusive
+          if (!len && arr.hasNulls) {
+            ret = null;
+            // 2. it has a length and real values
+          } else if (len) {
+            ret = 0;
+            while (len--) {
+              ret += arr[len];
+            }
+          }
+          // 3. it has zero length, so just return undefined
+          // => doNothing()
+          return ret;
+        },
+        average: function (arr) {
+          var len = arr.length,
+            ret = approximations.sum(arr);
+          // If we have a number, return it divided by the length. If not,
+          // return null or undefined based on what the sum method finds.
+          if (isNumber(ret) && len) {
+            ret = correctFloat(ret / len);
+          }
+          return ret;
+        },
+        // The same as average, but for series with multiple values, like area
+        // ranges.
+        averages: function () {
+          var ret = [];
+          [].forEach.call(arguments, function (arr) {
+            ret.push(approximations.average(arr));
+          });
+          // Return undefined when first elem. is undefined and let
+          // sum method handle null (#7377)
+          return typeof ret[0] === "undefined" ? void 0 : ret;
+        },
+        open: function (arr) {
+          return arr.length ? arr[0] : arr.hasNulls ? null : void 0;
+        },
+        high: function (arr) {
+          return arr.length ? arrayMax(arr) : arr.hasNulls ? null : void 0;
+        },
+        low: function (arr) {
+          return arr.length ? arrayMin(arr) : arr.hasNulls ? null : void 0;
+        },
+        close: function (arr) {
+          return arr.length
+            ? arr[arr.length - 1]
+            : arr.hasNulls
+            ? null
+            : void 0;
+        },
+        // ohlc and range are special cases where a multidimensional array is
+        // input and an array is output
+        ohlc: function (open, high, low, close) {
+          open = approximations.open(open);
+          high = approximations.high(high);
+          low = approximations.low(low);
+          close = approximations.close(close);
+          if (
+            isNumber(open) ||
+            isNumber(high) ||
+            isNumber(low) ||
+            isNumber(close)
+          ) {
+            return [open, high, low, close];
+          }
+          // else, return is undefined
+        },
+        range: function (low, high) {
+          low = approximations.low(low);
+          high = approximations.high(high);
+          if (isNumber(low) || isNumber(high)) {
+            return [low, high];
+          }
+          if (low === null && high === null) {
+            return null;
+          }
+          // else, return is undefined
+        },
+      });
+      var groupData = function (xData, yData, groupPositions, approximation) {
+        var series = this,
+          data = series.data,
+          dataOptions = series.options && series.options.data,
+          groupedXData = [],
+          groupedYData = [],
+          groupMap = [],
+          dataLength = xData.length,
+          pointX,
+          pointY,
+          groupedY,
+          // when grouping the fake extended axis for panning,
+          // we don't need to consider y
+          handleYData = !!yData,
+          values = [],
+          approximationFn,
+          pointArrayMap = series.pointArrayMap,
+          pointArrayMapLength = pointArrayMap && pointArrayMap.length,
+          extendedPointArrayMap = ["x"].concat(pointArrayMap || ["y"]),
+          pos = 0,
+          start = 0,
+          valuesLen,
+          i,
+          j;
         /**
-         * The ohlc series type.
-         *
          * @private
-         * @class
-         * @name Highcharts.seriesTypes.ohlc
-         *
-         * @augments Highcharts.Series
          */
-        BaseSeries.seriesType('ohlc', 'column'
+        function getApproximation(approx) {
+          if (typeof approx === "function") {
+            return approx;
+          }
+          if (approximations[approx]) {
+            return approximations[approx];
+          }
+          return approximations[
+            (series.getDGApproximation && series.getDGApproximation()) ||
+              "average"
+          ];
+        }
+        approximationFn = getApproximation(approximation);
+        // Calculate values array size from pointArrayMap length
+        if (pointArrayMapLength) {
+          pointArrayMap.forEach(function () {
+            values.push([]);
+          });
+        } else {
+          values.push([]);
+        }
+        valuesLen = pointArrayMapLength || 1;
+        // Start with the first point within the X axis range (#2696)
+        for (i = 0; i <= dataLength; i++) {
+          if (xData[i] >= groupPositions[0]) {
+            break;
+          }
+        }
+        for (i; i <= dataLength; i++) {
+          // when a new group is entered, summarize and initialize
+          // the previous group
+          while (
+            (typeof groupPositions[pos + 1] !== "undefined" &&
+              xData[i] >= groupPositions[pos + 1]) ||
+            i === dataLength
+          ) {
+            // get the last group
+            // get group x and y
+            pointX = groupPositions[pos];
+            series.dataGroupInfo = {
+              start: series.cropStart + start,
+              length: values[0].length,
+            };
+            groupedY = approximationFn.apply(series, values);
+            // By default, let options of the first grouped point be passed over
+            // to the grouped point. This allows preserving properties like
+            // `name` and `color` or custom properties. Implementers can
+            // override this from the approximation function, where they can
+            // write custom options to `this.dataGroupInfo.options`.
+            if (series.pointClass && !defined(series.dataGroupInfo.options)) {
+              // Convert numbers and arrays into objects
+              series.dataGroupInfo.options = merge(
+                series.pointClass.prototype.optionsToObject.call(
+                  { series: series },
+                  series.options.data[series.cropStart + start]
+                )
+              );
+              // Make sure the raw data (x, y, open, high etc) is not copied
+              // over and overwriting approximated data.
+              extendedPointArrayMap.forEach(function (key) {
+                delete series.dataGroupInfo.options[key];
+              });
+            }
+            // push the grouped data
+            if (typeof groupedY !== "undefined") {
+              groupedXData.push(pointX);
+              groupedYData.push(groupedY);
+              groupMap.push(series.dataGroupInfo);
+            }
+            // reset the aggregate arrays
+            start = i;
+            for (j = 0; j < valuesLen; j++) {
+              values[j].length = 0; // faster than values[j] = []
+              values[j].hasNulls = false;
+            }
+            // Advance on the group positions
+            pos += 1;
+            // don't loop beyond the last group
+            if (i === dataLength) {
+              break;
+            }
+          }
+          // break out
+          if (i === dataLength) {
+            break;
+          }
+          // for each raw data point, push it to an array that contains all values
+          // for this specific group
+          if (pointArrayMap) {
+            var index = series.cropStart + i,
+              point =
+                (data && data[index]) ||
+                series.pointClass.prototype.applyOptions.apply(
+                  {
+                    series: series,
+                  },
+                  [dataOptions[index]]
+                ),
+              val;
+            for (j = 0; j < pointArrayMapLength; j++) {
+              val = point[pointArrayMap[j]];
+              if (isNumber(val)) {
+                values[j].push(val);
+              } else if (val === null) {
+                values[j].hasNulls = true;
+              }
+            }
+          } else {
+            pointY = handleYData ? yData[i] : null;
+            if (isNumber(pointY)) {
+              values[0].push(pointY);
+            } else if (pointY === null) {
+              values[0].hasNulls = true;
+            }
+          }
+        }
+        return {
+          groupedXData: groupedXData,
+          groupedYData: groupedYData,
+          groupMap: groupMap,
+        };
+      };
+      var dataGrouping = {
+        approximations: approximations,
+        groupData: groupData,
+      };
+      // -----------------------------------------------------------------------------
+      // The following code applies to implementation of data grouping on a Series
+      var seriesProto = Series.prototype,
+        baseProcessData = seriesProto.processData,
+        baseGeneratePoints = seriesProto.generatePoints,
+        /** @ignore */
+        commonOptions = {
+          // enabled: null, // (true for stock charts, false for basic),
+          // forced: undefined,
+          groupPixelWidth: 2,
+          // the first one is the point or start value, the second is the start
+          // value if we're dealing with range, the third one is the end value if
+          // dealing with a range
+          dateTimeLabelFormats: {
+            millisecond: [
+              "%A, %b %e, %H:%M:%S.%L",
+              "%A, %b %e, %H:%M:%S.%L",
+              "-%H:%M:%S.%L",
+            ],
+            second: ["%A, %b %e, %H:%M:%S", "%A, %b %e, %H:%M:%S", "-%H:%M:%S"],
+            minute: ["%A, %b %e, %H:%M", "%A, %b %e, %H:%M", "-%H:%M"],
+            hour: ["%A, %b %e, %H:%M", "%A, %b %e, %H:%M", "-%H:%M"],
+            day: ["%A, %b %e, %Y", "%A, %b %e", "-%A, %b %e, %Y"],
+            week: ["Week from %A, %b %e, %Y", "%A, %b %e", "-%A, %b %e, %Y"],
+            month: ["%B %Y", "%B", "-%B %Y"],
+            year: ["%Y", "%Y", "-%Y"],
+          },
+          // smoothed = false, // enable this for navigator series only
+        },
+        specificOptions = {
+          line: {},
+          spline: {},
+          area: {},
+          areaspline: {},
+          arearange: {},
+          column: {
+            groupPixelWidth: 10,
+          },
+          columnrange: {
+            groupPixelWidth: 10,
+          },
+          candlestick: {
+            groupPixelWidth: 10,
+          },
+          ohlc: {
+            groupPixelWidth: 5,
+          },
+        },
+        // units are defined in a separate array to allow complete overriding in
+        // case of a user option
+        defaultDataGroupingUnits = (H.defaultDataGroupingUnits = [
+          [
+            "millisecond",
+            [1, 2, 5, 10, 20, 25, 50, 100, 200, 500], // allowed multiples
+          ],
+          ["second", [1, 2, 5, 10, 15, 30]],
+          ["minute", [1, 2, 5, 10, 15, 30]],
+          ["hour", [1, 2, 3, 4, 6, 8, 12]],
+          ["day", [1]],
+          ["week", [1]],
+          ["month", [1, 3, 6]],
+          ["year", null],
+        ]);
+      // Set default approximations to the prototypes if present. Properties are
+      // inherited down. Can be overridden for individual series types.
+      seriesProto.getDGApproximation = function () {
+        if (this.is("arearange")) {
+          return "range";
+        }
+        if (this.is("ohlc")) {
+          return "ohlc";
+        }
+        if (this.is("column")) {
+          return "sum";
+        }
+        return "average";
+      };
+      /**
+       * Takes parallel arrays of x and y data and groups the data into intervals
+       * defined by groupPositions, a collection of starting x values for each group.
+       *
+       * @private
+       * @function Highcharts.Series#groupData
+       *
+       * @param {Array<number>} xData
+       *
+       * @param {Array<number>|Array<Array<number>>} yData
+       *
+       * @param {boolean} groupPositions
+       *
+       * @param {string|Function} approximation
+       *
+       * @return {void}
+       */
+      seriesProto.groupData = groupData;
+      // Extend the basic processData method, that crops the data to the current zoom
+      // range, with data grouping logic.
+      seriesProto.processData = function () {
+        var series = this,
+          chart = series.chart,
+          options = series.options,
+          dataGroupingOptions = options.dataGrouping,
+          groupingEnabled =
+            series.allowDG !== false &&
+            dataGroupingOptions &&
+            pick(dataGroupingOptions.enabled, chart.options.isStock),
+          visible = series.visible || !chart.options.chart.ignoreHiddenSeries,
+          hasGroupedData,
+          skip,
+          lastDataGrouping = this.currentDataGrouping,
+          currentDataGrouping,
+          croppedData,
+          revertRequireSorting = false;
+        // Run base method
+        series.forceCrop = groupingEnabled; // #334
+        series.groupPixelWidth = null; // #2110
+        series.hasProcessed = true; // #2692
+        // Data needs to be sorted for dataGrouping
+        if (groupingEnabled && !series.requireSorting) {
+          series.requireSorting = revertRequireSorting = true;
+        }
+        // Skip if processData returns false or if grouping is disabled (in that
+        // order)
+        skip =
+          baseProcessData.apply(series, arguments) === false ||
+          !groupingEnabled;
+        // Revert original requireSorting value if changed
+        if (revertRequireSorting) {
+          series.requireSorting = false;
+        }
+        if (!skip) {
+          series.destroyGroupedData();
+          var i,
+            processedXData = dataGroupingOptions.groupAll
+              ? series.xData
+              : series.processedXData,
+            processedYData = dataGroupingOptions.groupAll
+              ? series.yData
+              : series.processedYData,
+            plotSizeX = chart.plotSizeX,
+            xAxis = series.xAxis,
+            ordinal = xAxis.options.ordinal,
+            groupPixelWidth = (series.groupPixelWidth =
+              xAxis.getGroupPixelWidth && xAxis.getGroupPixelWidth());
+          // Execute grouping if the amount of points is greater than the limit
+          // defined in groupPixelWidth
+          if (groupPixelWidth) {
+            hasGroupedData = true;
+            // Force recreation of point instances in series.translate, #5699
+            series.isDirty = true;
+            series.points = null; // #6709
+            var extremes = xAxis.getExtremes(),
+              xMin = extremes.min,
+              xMax = extremes.max,
+              groupIntervalFactor =
+                (ordinal &&
+                  xAxis.ordinal &&
+                  xAxis.ordinal.getGroupIntervalFactor(xMin, xMax, series)) ||
+                1,
+              interval =
+                ((groupPixelWidth * (xMax - xMin)) / plotSizeX) *
+                groupIntervalFactor,
+              groupPositions = xAxis.getTimeTicks(
+                DateTimeAxis.AdditionsClass.prototype.normalizeTimeTickInterval(
+                  interval,
+                  dataGroupingOptions.units || defaultDataGroupingUnits
+                ),
+                // Processed data may extend beyond axis (#4907)
+                Math.min(xMin, processedXData[0]),
+                Math.max(xMax, processedXData[processedXData.length - 1]),
+                xAxis.options.startOfWeek,
+                processedXData,
+                series.closestPointRange
+              ),
+              groupedData = seriesProto.groupData.apply(series, [
+                processedXData,
+                processedYData,
+                groupPositions,
+                dataGroupingOptions.approximation,
+              ]),
+              groupedXData = groupedData.groupedXData,
+              groupedYData = groupedData.groupedYData,
+              gapSize = 0;
+            // Prevent the smoothed data to spill out left and right, and make
+            // sure data is not shifted to the left
+            if (dataGroupingOptions.smoothed && groupedXData.length) {
+              i = groupedXData.length - 1;
+              groupedXData[i] = Math.min(groupedXData[i], xMax);
+              while (i-- && i > 0) {
+                groupedXData[i] += interval / 2;
+              }
+              groupedXData[0] = Math.max(groupedXData[0], xMin);
+            }
+            // Record what data grouping values were used
+            for (i = 1; i < groupPositions.length; i++) {
+              // The grouped gapSize needs to be the largest distance between
+              // the group to capture varying group sizes like months or DST
+              // crossing (#10000). Also check that the gap is not at the
+              // start of a segment.
+              if (
+                !groupPositions.info.segmentStarts ||
+                groupPositions.info.segmentStarts.indexOf(i) === -1
+              ) {
+                gapSize = Math.max(
+                  groupPositions[i] - groupPositions[i - 1],
+                  gapSize
+                );
+              }
+            }
+            currentDataGrouping = groupPositions.info;
+            currentDataGrouping.gapSize = gapSize;
+            series.closestPointRange = groupPositions.info.totalRange;
+            series.groupMap = groupedData.groupMap;
+            // Make sure the X axis extends to show the first group (#2533)
+            // But only for visible series (#5493, #6393)
+            if (
+              defined(groupedXData[0]) &&
+              groupedXData[0] < xAxis.min &&
+              visible
+            ) {
+              if (
+                (!defined(xAxis.options.min) && xAxis.min <= xAxis.dataMin) ||
+                xAxis.min === xAxis.dataMin
+              ) {
+                xAxis.min = Math.min(groupedXData[0], xAxis.min);
+              }
+              xAxis.dataMin = Math.min(groupedXData[0], xAxis.dataMin);
+            }
+            // We calculated all group positions but we should render
+            // only the ones within the visible range
+            if (dataGroupingOptions.groupAll) {
+              croppedData = series.cropData(
+                groupedXData,
+                groupedYData,
+                xAxis.min,
+                xAxis.max,
+                1 // Ordinal xAxis will remove left-most points otherwise
+              );
+              groupedXData = croppedData.xData;
+              groupedYData = croppedData.yData;
+            }
+            // Set series props
+            series.processedXData = groupedXData;
+            series.processedYData = groupedYData;
+          } else {
+            series.groupMap = null;
+          }
+          series.hasGroupedData = hasGroupedData;
+          series.currentDataGrouping = currentDataGrouping;
+          series.preventGraphAnimation =
+            (lastDataGrouping && lastDataGrouping.totalRange) !==
+            (currentDataGrouping && currentDataGrouping.totalRange);
+        }
+      };
+      // Destroy the grouped data points. #622, #740
+      seriesProto.destroyGroupedData = function () {
+        // Clear previous groups
+        if (this.groupedData) {
+          this.groupedData.forEach(function (point, i) {
+            if (point) {
+              this.groupedData[i] = point.destroy ? point.destroy() : null;
+            }
+          }, this);
+          // Clears all:
+          // - `this.groupedData`
+          // - `this.points`
+          // - `preserve` object in series.update()
+          this.groupedData.length = 0;
+        }
+      };
+      // Override the generatePoints method by adding a reference to grouped data
+      seriesProto.generatePoints = function () {
+        baseGeneratePoints.apply(this);
+        // Record grouped data in order to let it be destroyed the next time
+        // processData runs
+        this.destroyGroupedData(); // #622
+        this.groupedData = this.hasGroupedData ? this.points : null;
+      };
+      // Override point prototype to throw a warning when trying to update grouped
+      // points.
+      addEvent(Point, "update", function () {
+        if (this.dataGroup) {
+          error(24, false, this.series.chart);
+          return false;
+        }
+      });
+      // Extend the original method, make the tooltip's header reflect the grouped
+      // range.
+      addEvent(Tooltip, "headerFormatter", function (e) {
+        var tooltip = this,
+          chart = this.chart,
+          time = chart.time,
+          labelConfig = e.labelConfig,
+          series = labelConfig.series,
+          options = series.options,
+          tooltipOptions = series.tooltipOptions,
+          dataGroupingOptions = options.dataGrouping,
+          xDateFormat = tooltipOptions.xDateFormat,
+          xDateFormatEnd,
+          xAxis = series.xAxis,
+          currentDataGrouping,
+          dateTimeLabelFormats,
+          labelFormats,
+          formattedKey,
+          formatString =
+            tooltipOptions[(e.isFooter ? "footer" : "header") + "Format"];
+        // apply only to grouped series
+        if (
+          xAxis &&
+          xAxis.options.type === "datetime" &&
+          dataGroupingOptions &&
+          isNumber(labelConfig.key)
+        ) {
+          // set variables
+          currentDataGrouping = series.currentDataGrouping;
+          dateTimeLabelFormats =
+            dataGroupingOptions.dateTimeLabelFormats ||
+            // Fallback to commonOptions (#9693)
+            commonOptions.dateTimeLabelFormats;
+          // if we have grouped data, use the grouping information to get the
+          // right format
+          if (currentDataGrouping) {
+            labelFormats = dateTimeLabelFormats[currentDataGrouping.unitName];
+            if (currentDataGrouping.count === 1) {
+              xDateFormat = labelFormats[0];
+            } else {
+              xDateFormat = labelFormats[1];
+              xDateFormatEnd = labelFormats[2];
+            }
+            // if not grouped, and we don't have set the xDateFormat option, get the
+            // best fit, so if the least distance between points is one minute, show
+            // it, but if the least distance is one day, skip hours and minutes etc.
+          } else if (!xDateFormat && dateTimeLabelFormats) {
+            xDateFormat = tooltip.getXDateFormat(
+              labelConfig,
+              tooltipOptions,
+              xAxis
+            );
+          }
+          // now format the key
+          formattedKey = time.dateFormat(xDateFormat, labelConfig.key);
+          if (xDateFormatEnd) {
+            formattedKey += time.dateFormat(
+              xDateFormatEnd,
+              labelConfig.key + currentDataGrouping.totalRange - 1
+            );
+          }
+          // Replace default header style with class name
+          if (series.chart.styledMode) {
+            formatString = this.styledModeFormat(formatString);
+          }
+          // return the replaced format
+          e.text = format(
+            formatString,
+            {
+              point: extend(labelConfig.point, { key: formattedKey }),
+              series: series,
+            },
+            chart
+          );
+          e.preventDefault();
+        }
+      });
+      // Destroy grouped data on series destroy
+      addEvent(Series, "destroy", seriesProto.destroyGroupedData);
+      // Handle default options for data grouping. This must be set at runtime because
+      // some series types are defined after this.
+      addEvent(Series, "afterSetOptions", function (e) {
+        var options = e.options,
+          type = this.type,
+          plotOptions = this.chart.options.plotOptions,
+          defaultOptions = O.defaultOptions.plotOptions[type].dataGrouping,
+          // External series, for example technical indicators should also
+          // inherit commonOptions which are not available outside this module
+          baseOptions = this.useCommonDataGrouping && commonOptions;
+        if (specificOptions[type] || baseOptions) {
+          // #1284
+          if (!defaultOptions) {
+            defaultOptions = merge(commonOptions, specificOptions[type]);
+          }
+          options.dataGrouping = merge(
+            baseOptions,
+            defaultOptions,
+            plotOptions.series && plotOptions.series.dataGrouping, // #1228
+            // Set by the StockChart constructor:
+            plotOptions[type].dataGrouping,
+            this.userOptions.dataGrouping
+          );
+        }
+      });
+      // When resetting the scale reset the hasProccessed flag to avoid taking
+      // previous data grouping of neighbour series into accound when determining
+      // group pixel width (#2692).
+      addEvent(Axis, "afterSetScale", function () {
+        this.series.forEach(function (series) {
+          series.hasProcessed = false;
+        });
+      });
+      // Get the data grouping pixel width based on the greatest defined individual
+      // width of the axis' series, and if whether one of the axes need grouping.
+      Axis.prototype.getGroupPixelWidth = function () {
+        var series = this.series,
+          len = series.length,
+          i,
+          groupPixelWidth = 0,
+          doGrouping = false,
+          dataLength,
+          dgOptions;
+        // If multiple series are compared on the same x axis, give them the same
+        // group pixel width (#334)
+        i = len;
+        while (i--) {
+          dgOptions = series[i].options.dataGrouping;
+          if (dgOptions) {
+            groupPixelWidth = Math.max(
+              groupPixelWidth,
+              // Fallback to commonOptions (#9693)
+              pick(dgOptions.groupPixelWidth, commonOptions.groupPixelWidth)
+            );
+          }
+        }
+        // If one of the series needs grouping, apply it to all (#1634)
+        i = len;
+        while (i--) {
+          dgOptions = series[i].options.dataGrouping;
+          if (dgOptions && series[i].hasProcessed) {
+            // #2692
+            dataLength = (series[i].processedXData || series[i].data).length;
+            // Execute grouping if the amount of points is greater than the
+            // limit defined in groupPixelWidth
+            if (
+              series[i].groupPixelWidth ||
+              dataLength > this.chart.plotSizeX / groupPixelWidth ||
+              (dataLength && dgOptions.forced)
+            ) {
+              doGrouping = true;
+            }
+          }
+        }
+        return doGrouping ? groupPixelWidth : 0;
+      };
+      /**
+       * Highstock only. Force data grouping on all the axis' series.
+       *
+       * @product highstock
+       *
+       * @function Highcharts.Axis#setDataGrouping
+       *
+       * @param {boolean|Highcharts.DataGroupingOptionsObject} [dataGrouping]
+       *        A `dataGrouping` configuration. Use `false` to disable data grouping
+       *        dynamically.
+       *
+       * @param {boolean} [redraw=true]
+       *        Whether to redraw the chart or wait for a later call to
+       *        {@link Chart#redraw}.
+       *
+       * @return {void}
+       */
+      Axis.prototype.setDataGrouping = function (dataGrouping, redraw) {
+        var axis = this;
+        var i;
+        redraw = pick(redraw, true);
+        if (!dataGrouping) {
+          dataGrouping = {
+            forced: false,
+            units: null,
+          };
+        }
+        // Axis is instantiated, update all series
+        if (this instanceof Axis) {
+          i = this.series.length;
+          while (i--) {
+            this.series[i].update(
+              {
+                dataGrouping: dataGrouping,
+              },
+              false
+            );
+          }
+          // Axis not yet instanciated, alter series options
+        } else {
+          this.chart.options.series.forEach(function (seriesOptions) {
+            seriesOptions.dataGrouping = dataGrouping;
+          }, false);
+        }
+        // Clear ordinal slope, so we won't accidentaly use the old one (#7827)
+        if (axis.ordinal) {
+          axis.ordinal.slope = void 0;
+        }
+        if (redraw) {
+          this.chart.redraw();
+        }
+      };
+      H.dataGrouping = dataGrouping;
+      /* eslint-enable no-invalid-this, valid-jsdoc */
+      /**
+       * Data grouping is the concept of sampling the data values into larger
+       * blocks in order to ease readability and increase performance of the
+       * JavaScript charts. Highstock by default applies data grouping when
+       * the points become closer than a certain pixel value, determined by
+       * the `groupPixelWidth` option.
+       *
+       * If data grouping is applied, the grouping information of grouped
+       * points can be read from the [Point.dataGroup](
+       * /class-reference/Highcharts.Point#dataGroup). If point options other than
+       * the data itself are set, for example `name` or `color` or custom properties,
+       * the grouping logic doesn't know how to group it. In this case the options of
+       * the first point instance are copied over to the group point. This can be
+       * altered through a custom `approximation` callback function.
+       *
+       * @declare   Highcharts.DataGroupingOptionsObject
+       * @product   highstock
+       * @requires  product:highstock
+       * @requires  module:modules/datagrouping
+       * @apioption plotOptions.series.dataGrouping
+       */
+      /**
+       * The method of approximation inside a group. When for example 30 days
+       * are grouped into one month, this determines what value should represent
+       * the group. Possible values are "average", "averages", "open", "high",
+       * "low", "close" and "sum". For OHLC and candlestick series the approximation
+       * is "ohlc" by default, which finds the open, high, low and close values
+       * within all the grouped data. For ranges, the approximation is "range",
+       * which finds the low and high values. For multi-dimensional data,
+       * like ranges and OHLC, "averages" will compute the average for each
+       * dimension.
+       *
+       * Custom aggregate methods can be added by assigning a callback function
+       * as the approximation. This function takes a numeric array as the
+       * argument and should return a single numeric value or `null`. Note
+       * that the numeric array will never contain null values, only true
+       * numbers. Instead, if null values are present in the raw data, the
+       * numeric array will have an `.hasNulls` property set to `true`. For
+       * single-value data sets the data is available in the first argument
+       * of the callback function. For OHLC data sets, all the open values
+       * are in the first argument, all high values in the second etc.
+       *
+       * Since v4.2.7, grouping meta data is available in the approximation
+       * callback from `this.dataGroupInfo`. It can be used to extract information
+       * from the raw data.
+       *
+       * Defaults to `average` for line-type series, `sum` for columns, `range`
+       * for range series and `ohlc` for OHLC and candlestick.
+       *
+       * @sample {highstock} stock/plotoptions/series-datagrouping-approximation
+       *         Approximation callback with custom data
+       *
+       * @type       {Highcharts.DataGroupingApproximationValue|Function}
+       * @apioption  plotOptions.series.dataGrouping.approximation
+       */
+      /**
+       * Datetime formats for the header of the tooltip in a stock chart.
+       * The format can vary within a chart depending on the currently selected
+       * time range and the current data grouping.
+       *
+       * The default formats are:
+       * ```js
+       * {
+       *     millisecond: [
+       *         '%A, %b %e, %H:%M:%S.%L', '%A, %b %e, %H:%M:%S.%L', '-%H:%M:%S.%L'
+       *     ],
+       *     second: ['%A, %b %e, %H:%M:%S', '%A, %b %e, %H:%M:%S', '-%H:%M:%S'],
+       *     minute: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'],
+       *     hour: ['%A, %b %e, %H:%M', '%A, %b %e, %H:%M', '-%H:%M'],
+       *     day: ['%A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'],
+       *     week: ['Week from %A, %b %e, %Y', '%A, %b %e', '-%A, %b %e, %Y'],
+       *     month: ['%B %Y', '%B', '-%B %Y'],
+       *     year: ['%Y', '%Y', '-%Y']
+       * }
+       * ```
+       *
+       * For each of these array definitions, the first item is the format
+       * used when the active time span is one unit. For instance, if the
+       * current data applies to one week, the first item of the week array
+       * is used. The second and third items are used when the active time
+       * span is more than two units. For instance, if the current data applies
+       * to two weeks, the second and third item of the week array are used,
+       *  and applied to the start and end date of the time span.
+       *
+       * @type      {object}
+       * @apioption plotOptions.series.dataGrouping.dateTimeLabelFormats
+       */
+      /**
+       * Enable or disable data grouping.
+       *
+       * @type      {boolean}
+       * @default   true
+       * @apioption plotOptions.series.dataGrouping.enabled
+       */
+      /**
+       * When data grouping is forced, it runs no matter how small the intervals
+       * are. This can be handy for example when the sum should be calculated
+       * for values appearing at random times within each hour.
+       *
+       * @type      {boolean}
+       * @default   false
+       * @apioption plotOptions.series.dataGrouping.forced
+       */
+      /**
+       * The approximate pixel width of each group. If for example a series
+       * with 30 points is displayed over a 600 pixel wide plot area, no grouping
+       * is performed. If however the series contains so many points that
+       * the spacing is less than the groupPixelWidth, Highcharts will try
+       * to group it into appropriate groups so that each is more or less
+       * two pixels wide. If multiple series with different group pixel widths
+       * are drawn on the same x axis, all series will take the greatest width.
+       * For example, line series have 2px default group width, while column
+       * series have 10px. If combined, both the line and the column will
+       * have 10px by default.
+       *
+       * @type      {number}
+       * @default   2
+       * @apioption plotOptions.series.dataGrouping.groupPixelWidth
+       */
+      /**
+       * By default only points within the visible range are grouped. Enabling this
+       * option will force data grouping to calculate all grouped points for a given
+       * dataset. That option prevents for example a column series from calculating
+       * a grouped point partially. The effect is similar to
+       * [Series.getExtremesFromAll](#plotOptions.series.getExtremesFromAll) but does
+       * not affect yAxis extremes.
+       *
+       * @sample {highstock} stock/plotoptions/series-datagrouping-groupall/
+       *         Two series with the same data but different groupAll setting
+       *
+       * @type      {boolean}
+       * @default   false
+       * @since     6.1.0
+       * @apioption plotOptions.series.dataGrouping.groupAll
+       */
+      /**
+       * Normally, a group is indexed by the start of that group, so for example
+       * when 30 daily values are grouped into one month, that month's x value
+       * will be the 1st of the month. This apparently shifts the data to
+       * the left. When the smoothed option is true, this is compensated for.
+       * The data is shifted to the middle of the group, and min and max
+       * values are preserved. Internally, this is used in the Navigator series.
+       *
+       * @type      {boolean}
+       * @default   false
+       * @apioption plotOptions.series.dataGrouping.smoothed
+       */
+      /**
+       * An array determining what time intervals the data is allowed to be
+       * grouped to. Each array item is an array where the first value is
+       * the time unit and the second value another array of allowed multiples.
+       *
+       * Defaults to:
+       * ```js
+       * units: [[
+       *     'millisecond', // unit name
+       *     [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples
+       * ], [
+       *     'second',
+       *     [1, 2, 5, 10, 15, 30]
+       * ], [
+       *     'minute',
+       *     [1, 2, 5, 10, 15, 30]
+       * ], [
+       *     'hour',
+       *     [1, 2, 3, 4, 6, 8, 12]
+       * ], [
+       *     'day',
+       *     [1]
+       * ], [
+       *     'week',
+       *     [1]
+       * ], [
+       *     'month',
+       *     [1, 3, 6]
+       * ], [
+       *     'year',
+       *     null
+       * ]]
+       * ```
+       *
+       * @type      {Array<Array<string,(Array<number>|null)>>}
+       * @apioption plotOptions.series.dataGrouping.units
+       */
+      /**
+       * The approximate pixel width of each group. If for example a series
+       * with 30 points is displayed over a 600 pixel wide plot area, no grouping
+       * is performed. If however the series contains so many points that
+       * the spacing is less than the groupPixelWidth, Highcharts will try
+       * to group it into appropriate groups so that each is more or less
+       * two pixels wide. Defaults to `10`.
+       *
+       * @sample {highstock} stock/plotoptions/series-datagrouping-grouppixelwidth/
+       *         Two series with the same data density but different groupPixelWidth
+       *
+       * @type      {number}
+       * @default   10
+       * @apioption plotOptions.column.dataGrouping.groupPixelWidth
+       */
+      (""); // required by JSDoc parsing
+
+      return dataGrouping;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Series/OHLCSeries.js",
+    [_modules["Core/Series/Series.js"], _modules["Core/Series/Point.js"]],
+    function (BaseSeries, Point) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var seriesTypes = BaseSeries.seriesTypes;
+      /**
+       * The ohlc series type.
+       *
+       * @private
+       * @class
+       * @name Highcharts.seriesTypes.ohlc
+       *
+       * @augments Highcharts.Series
+       */
+      BaseSeries.seriesType(
+        "ohlc",
+        "column",
         /**
          * An OHLC chart is a style of financial chart used to describe price
          * movements over time. It displays open, high, low and close values per
@@ -5798,410 +6299,439 @@
          * @product      highstock
          * @optionparent plotOptions.ohlc
          */
-        , {
-            /**
-             * The approximate pixel width of each group. If for example a series
-             * with 30 points is displayed over a 600 pixel wide plot area, no
-             * grouping is performed. If however the series contains so many points
-             * that the spacing is less than the groupPixelWidth, Highcharts will
-             * try to group it into appropriate groups so that each is more or less
-             * two pixels wide. Defaults to `5`.
-             *
-             * @type      {number}
-             * @default   5
-             * @product   highstock
-             * @apioption plotOptions.ohlc.dataGrouping.groupPixelWidth
-             */
+        {
+          /**
+           * The approximate pixel width of each group. If for example a series
+           * with 30 points is displayed over a 600 pixel wide plot area, no
+           * grouping is performed. If however the series contains so many points
+           * that the spacing is less than the groupPixelWidth, Highcharts will
+           * try to group it into appropriate groups so that each is more or less
+           * two pixels wide. Defaults to `5`.
+           *
+           * @type      {number}
+           * @default   5
+           * @product   highstock
+           * @apioption plotOptions.ohlc.dataGrouping.groupPixelWidth
+           */
+          /**
+           * The pixel width of the line/border. Defaults to `1`.
+           *
+           * @sample {highstock} stock/plotoptions/ohlc-linewidth/
+           *         A greater line width
+           *
+           * @type    {number}
+           * @default 1
+           * @product highstock
+           *
+           * @private
+           */
+          lineWidth: 1,
+          tooltip: {
+            pointFormat:
+              '<span style="color:{point.color}">\u25CF</span> ' +
+              "<b> {series.name}</b><br/>" +
+              "Open: {point.open}<br/>" +
+              "High: {point.high}<br/>" +
+              "Low: {point.low}<br/>" +
+              "Close: {point.close}<br/>",
+          },
+          threshold: null,
+          states: {
             /**
-             * The pixel width of the line/border. Defaults to `1`.
-             *
-             * @sample {highstock} stock/plotoptions/ohlc-linewidth/
-             *         A greater line width
-             *
-             * @type    {number}
-             * @default 1
+             * @extends plotOptions.column.states.hover
              * @product highstock
-             *
-             * @private
              */
-            lineWidth: 1,
-            tooltip: {
-                pointFormat: '<span style="color:{point.color}">\u25CF</span> ' +
-                    '<b> {series.name}</b><br/>' +
-                    'Open: {point.open}<br/>' +
-                    'High: {point.high}<br/>' +
-                    'Low: {point.low}<br/>' +
-                    'Close: {point.close}<br/>'
-            },
-            threshold: null,
-            states: {
-                /**
-                 * @extends plotOptions.column.states.hover
-                 * @product highstock
-                 */
-                hover: {
-                    /**
-                     * The pixel width of the line representing the OHLC point.
-                     *
-                     * @type    {number}
-                     * @default 3
-                     * @product highstock
-                     */
-                    lineWidth: 3
-                }
+            hover: {
+              /**
+               * The pixel width of the line representing the OHLC point.
+               *
+               * @type    {number}
+               * @default 3
+               * @product highstock
+               */
+              lineWidth: 3,
             },
-            /**
-             * Determines which one of `open`, `high`, `low`, `close` values should
-             * be represented as `point.y`, which is later used to set dataLabel
-             * position and [compare](#plotOptions.series.compare).
-             *
-             * @sample {highstock} stock/plotoptions/ohlc-pointvalkey/
-             *         Possible values
-             *
-             * @type       {string}
-             * @default    close
-             * @validvalue ["open", "high", "low", "close"]
-             * @product    highstock
-             * @apioption  plotOptions.ohlc.pointValKey
-             */
-            /**
-             * @default   close
-             * @apioption plotOptions.ohlc.colorKey
-             */
-            /**
-             * Line color for up points.
-             *
-             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-             * @product   highstock
-             * @apioption plotOptions.ohlc.upColor
-             */
-            stickyTracking: true
-        }, 
+          },
+          /**
+           * Determines which one of `open`, `high`, `low`, `close` values should
+           * be represented as `point.y`, which is later used to set dataLabel
+           * position and [compare](#plotOptions.series.compare).
+           *
+           * @sample {highstock} stock/plotoptions/ohlc-pointvalkey/
+           *         Possible values
+           *
+           * @type       {string}
+           * @default    close
+           * @validvalue ["open", "high", "low", "close"]
+           * @product    highstock
+           * @apioption  plotOptions.ohlc.pointValKey
+           */
+          /**
+           * @default   close
+           * @apioption plotOptions.ohlc.colorKey
+           */
+          /**
+           * Line color for up points.
+           *
+           * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @product   highstock
+           * @apioption plotOptions.ohlc.upColor
+           */
+          stickyTracking: true,
+        },
         /**
          * @lends Highcharts.seriesTypes.ohlc
          */
         {
-            /* eslint-disable valid-jsdoc */
-            directTouch: false,
-            pointArrayMap: ['open', 'high', 'low', 'close'],
-            toYData: function (point) {
-                // return a plain array for speedy calculation
-                return [point.open, point.high, point.low, point.close];
-            },
-            pointValKey: 'close',
-            pointAttrToOptions: {
-                stroke: 'color',
-                'stroke-width': 'lineWidth'
-            },
-            /**
-             * @private
-             * @function Highcarts.seriesTypes.ohlc#init
-             * @return {void}
-             */
-            init: function () {
-                seriesTypes.column.prototype.init.apply(this, arguments);
-                this.options.stacking = void 0; // #8817
-            },
-            /**
-             * Postprocess mapping between options and SVG attributes
-             *
-             * @private
-             * @function Highcharts.seriesTypes.ohlc#pointAttribs
-             * @param {Highcharts.OHLCPoint} point
-             * @param {string} state
-             * @return {Highcharts.SVGAttributes}
-             */
-            pointAttribs: function (point, state) {
-                var attribs = seriesTypes.column.prototype.pointAttribs.call(this,
-                    point,
-                    state),
-                    options = this.options;
-                delete attribs.fill;
-                if (!point.options.color &&
-                    options.upColor &&
-                    point.open < point.close) {
-                    attribs.stroke = options.upColor;
+          /* eslint-disable valid-jsdoc */
+          directTouch: false,
+          pointArrayMap: ["open", "high", "low", "close"],
+          toYData: function (point) {
+            // return a plain array for speedy calculation
+            return [point.open, point.high, point.low, point.close];
+          },
+          pointValKey: "close",
+          pointAttrToOptions: {
+            stroke: "color",
+            "stroke-width": "lineWidth",
+          },
+          /**
+           * @private
+           * @function Highcarts.seriesTypes.ohlc#init
+           * @return {void}
+           */
+          init: function () {
+            seriesTypes.column.prototype.init.apply(this, arguments);
+            this.options.stacking = void 0; // #8817
+          },
+          /**
+           * Postprocess mapping between options and SVG attributes
+           *
+           * @private
+           * @function Highcharts.seriesTypes.ohlc#pointAttribs
+           * @param {Highcharts.OHLCPoint} point
+           * @param {string} state
+           * @return {Highcharts.SVGAttributes}
+           */
+          pointAttribs: function (point, state) {
+            var attribs = seriesTypes.column.prototype.pointAttribs.call(
+                this,
+                point,
+                state
+              ),
+              options = this.options;
+            delete attribs.fill;
+            if (
+              !point.options.color &&
+              options.upColor &&
+              point.open < point.close
+            ) {
+              attribs.stroke = options.upColor;
+            }
+            return attribs;
+          },
+          /**
+           * Translate data points from raw values x and y to plotX and plotY
+           *
+           * @private
+           * @function Highcharts.seriesTypes.ohlc#translate
+           * @return {void}
+           */
+          translate: function () {
+            var series = this,
+              yAxis = series.yAxis,
+              hasModifyValue = !!series.modifyValue,
+              translated = [
+                "plotOpen",
+                "plotHigh",
+                "plotLow",
+                "plotClose",
+                "yBottom",
+              ]; // translate OHLC for
+            seriesTypes.column.prototype.translate.apply(series);
+            // Do the translation
+            series.points.forEach(function (point) {
+              [
+                point.open,
+                point.high,
+                point.low,
+                point.close,
+                point.low,
+              ].forEach(function (value, i) {
+                if (value !== null) {
+                  if (hasModifyValue) {
+                    value = series.modifyValue(value);
+                  }
+                  point[translated[i]] = yAxis.toPixels(value, true);
+                }
+              });
+              // Align the tooltip to the high value to avoid covering the
+              // point
+              point.tooltipPos[1] =
+                point.plotHigh + yAxis.pos - series.chart.plotTop;
+            });
+          },
+          /**
+           * Draw the data points
+           *
+           * @private
+           * @function Highcharts.seriesTypes.ohlc#drawPoints
+           * @return {void}
+           */
+          drawPoints: function () {
+            var series = this,
+              points = series.points,
+              chart = series.chart,
+              /**
+               * Extend vertical stem to open and close values.
+               */
+              extendStem = function (path, halfStrokeWidth, openOrClose) {
+                var start = path[0];
+                var end = path[1];
+                // We don't need to worry about crisp - openOrClose value
+                // is already crisped and halfStrokeWidth should remove it.
+                if (typeof start[2] === "number") {
+                  start[2] = Math.max(openOrClose + halfStrokeWidth, start[2]);
+                }
+                if (typeof end[2] === "number") {
+                  end[2] = Math.min(openOrClose - halfStrokeWidth, end[2]);
+                }
+              };
+            points.forEach(function (point) {
+              var plotOpen,
+                plotClose,
+                crispCorr,
+                halfWidth,
+                path,
+                graphic = point.graphic,
+                crispX,
+                isNew = !graphic,
+                strokeWidth;
+              if (typeof point.plotY !== "undefined") {
+                // Create and/or update the graphic
+                if (!graphic) {
+                  point.graphic = graphic = chart.renderer
+                    .path()
+                    .add(series.group);
                 }
-                return attribs;
-            },
-            /**
-             * Translate data points from raw values x and y to plotX and plotY
-             *
-             * @private
-             * @function Highcharts.seriesTypes.ohlc#translate
-             * @return {void}
-             */
-            translate: function () {
-                var series = this,
-                    yAxis = series.yAxis,
-                    hasModifyValue = !!series.modifyValue,
-                    translated = [
-                        'plotOpen',
-                        'plotHigh',
-                        'plotLow',
-                        'plotClose',
-                        'yBottom'
-                    ]; // translate OHLC for
-                    seriesTypes.column.prototype.translate.apply(series);
-                // Do the translation
-                series.points.forEach(function (point) {
-                    [point.open, point.high, point.low, point.close, point.low]
-                        .forEach(function (value, i) {
-                        if (value !== null) {
-                            if (hasModifyValue) {
-                                value = series.modifyValue(value);
-                            }
-                            point[translated[i]] =
-                                yAxis.toPixels(value, true);
-                        }
-                    });
-                    // Align the tooltip to the high value to avoid covering the
-                    // point
-                    point.tooltipPos[1] =
-                        point.plotHigh + yAxis.pos - series.chart.plotTop;
-                });
-            },
-            /**
-             * Draw the data points
-             *
-             * @private
-             * @function Highcharts.seriesTypes.ohlc#drawPoints
-             * @return {void}
-             */
-            drawPoints: function () {
-                var series = this,
-                    points = series.points,
-                    chart = series.chart, 
-                    /**
-                     * Extend vertical stem to open and close values.
-                     */
-                    extendStem = function (path,
-                    halfStrokeWidth,
-                    openOrClose) {
-                        var start = path[0];
-                    var end = path[1];
-                    // We don't need to worry about crisp - openOrClose value
-                    // is already crisped and halfStrokeWidth should remove it.
-                    if (typeof start[2] === 'number') {
-                        start[2] = Math.max(openOrClose + halfStrokeWidth, start[2]);
-                    }
-                    if (typeof end[2] === 'number') {
-                        end[2] = Math.min(openOrClose - halfStrokeWidth, end[2]);
-                    }
-                };
-                points.forEach(function (point) {
-                    var plotOpen,
-                        plotClose,
-                        crispCorr,
-                        halfWidth,
-                        path,
-                        graphic = point.graphic,
-                        crispX,
-                        isNew = !graphic,
-                        strokeWidth;
-                    if (typeof point.plotY !== 'undefined') {
-                        // Create and/or update the graphic
-                        if (!graphic) {
-                            point.graphic = graphic = chart.renderer.path()
-                                .add(series.group);
-                        }
-                        if (!chart.styledMode) {
-                            graphic.attr(series.pointAttribs(point, (point.selected && 'select'))); // #3897
-                        }
-                        // crisp vector coordinates
-                        strokeWidth = graphic.strokeWidth();
-                        crispCorr = (strokeWidth % 2) / 2;
-                        // #2596:
-                        crispX = Math.round(point.plotX) - crispCorr;
-                        halfWidth = Math.round(point.shapeArgs.width / 2);
-                        // the vertical stem
-                        path = [
-                            ['M', crispX, Math.round(point.yBottom)],
-                            ['L', crispX, Math.round(point.plotHigh)]
-                        ];
-                        // open
-                        if (point.open !== null) {
-                            plotOpen = Math.round(point.plotOpen) + crispCorr;
-                            path.push(['M', crispX, plotOpen], ['L', crispX - halfWidth, plotOpen]);
-                            extendStem(path, strokeWidth / 2, plotOpen);
-                        }
-                        // close
-                        if (point.close !== null) {
-                            plotClose = Math.round(point.plotClose) + crispCorr;
-                            path.push(['M', crispX, plotClose], ['L', crispX + halfWidth, plotClose]);
-                            extendStem(path, strokeWidth / 2, plotClose);
-                        }
-                        graphic[isNew ? 'attr' : 'animate']({ d: path })
-                            .addClass(point.getClassName(), true);
-                    }
-                });
-            },
-            animate: null // Disable animation
-            /* eslint-enable valid-jsdoc */
-        }, 
+                if (!chart.styledMode) {
+                  graphic.attr(
+                    series.pointAttribs(point, point.selected && "select")
+                  ); // #3897
+                }
+                // crisp vector coordinates
+                strokeWidth = graphic.strokeWidth();
+                crispCorr = (strokeWidth % 2) / 2;
+                // #2596:
+                crispX = Math.round(point.plotX) - crispCorr;
+                halfWidth = Math.round(point.shapeArgs.width / 2);
+                // the vertical stem
+                path = [
+                  ["M", crispX, Math.round(point.yBottom)],
+                  ["L", crispX, Math.round(point.plotHigh)],
+                ];
+                // open
+                if (point.open !== null) {
+                  plotOpen = Math.round(point.plotOpen) + crispCorr;
+                  path.push(
+                    ["M", crispX, plotOpen],
+                    ["L", crispX - halfWidth, plotOpen]
+                  );
+                  extendStem(path, strokeWidth / 2, plotOpen);
+                }
+                // close
+                if (point.close !== null) {
+                  plotClose = Math.round(point.plotClose) + crispCorr;
+                  path.push(
+                    ["M", crispX, plotClose],
+                    ["L", crispX + halfWidth, plotClose]
+                  );
+                  extendStem(path, strokeWidth / 2, plotClose);
+                }
+                graphic[isNew ? "attr" : "animate"]({ d: path }).addClass(
+                  point.getClassName(),
+                  true
+                );
+              }
+            });
+          },
+          animate: null, // Disable animation
+          /* eslint-enable valid-jsdoc */
+        },
         /**
          * @lends Highcharts.seriesTypes.ohlc.prototype.pointClass.prototype
          */
         {
-            /* eslint-disable valid-jsdoc */
-            /**
-             * Extend the parent method by adding up or down to the class name.
-             * @private
-             * @function Highcharts.seriesTypes.ohlc#getClassName
-             * @return {string}
-             */
-            getClassName: function () {
-                return Point.prototype.getClassName.call(this) +
-                    (this.open < this.close ?
-                        ' highcharts-point-up' :
-                        ' highcharts-point-down');
-            }
-            /* eslint-enable valid-jsdoc */
-        });
+          /* eslint-disable valid-jsdoc */
+          /**
+           * Extend the parent method by adding up or down to the class name.
+           * @private
+           * @function Highcharts.seriesTypes.ohlc#getClassName
+           * @return {string}
+           */
+          getClassName: function () {
+            return (
+              Point.prototype.getClassName.call(this) +
+              (this.open < this.close
+                ? " highcharts-point-up"
+                : " highcharts-point-down")
+            );
+          },
+          /* eslint-enable valid-jsdoc */
+        }
+      );
+      /**
+       * A `ohlc` series. If the [type](#series.ohlc.type) option is not
+       * specified, it is inherited from [chart.type](#chart.type).
+       *
+       * @extends   series,plotOptions.ohlc
+       * @excluding dataParser, dataURL
+       * @product   highstock
+       * @apioption series.ohlc
+       */
+      /**
+       * An array of data points for the series. For the `ohlc` series type,
+       * points can be given in the following ways:
+       *
+       * 1. An array of arrays with 5 or 4 values. In this case, the values correspond
+       *    to `x,open,high,low,close`. If the first value is a string, it is applied
+       *    as the name of the point, and the `x` value is inferred. The `x` value can
+       *    also be omitted, in which case the inner arrays should be of length 4\.
+       *    Then the `x` value is automatically calculated, either starting at 0 and
+       *    incremented by 1, or from `pointStart` and `pointInterval` given in the
+       *    series options.
+       *    ```js
+       *    data: [
+       *        [0, 6, 5, 6, 7],
+       *        [1, 9, 4, 8, 2],
+       *        [2, 6, 3, 4, 10]
+       *    ]
+       *    ```
+       *
+       * 2. An array of objects with named values. The following snippet shows only a
+       *    few settings, see the complete options set below. If the total number of
+       *    data points exceeds the series'
+       *    [turboThreshold](#series.ohlc.turboThreshold), this option is not
+       *    available.
+       *    ```js
+       *    data: [{
+       *        x: 1,
+       *        open: 3,
+       *        high: 4,
+       *        low: 5,
+       *        close: 2,
+       *        name: "Point2",
+       *        color: "#00FF00"
+       *    }, {
+       *        x: 1,
+       *        open: 4,
+       *        high: 3,
+       *        low: 6,
+       *        close: 7,
+       *        name: "Point1",
+       *        color: "#FF00FF"
+       *    }]
+       *    ```
+       *
+       * @type      {Array<Array<(number|string),number,number,number>|Array<(number|string),number,number,number,number>|*>}
+       * @extends   series.arearange.data
+       * @excluding y, marker
+       * @product   highstock
+       * @apioption series.ohlc.data
+       */
+      /**
+       * The closing value of each data point.
+       *
+       * @type      {number}
+       * @product   highstock
+       * @apioption series.ohlc.data.close
+       */
+      /**
+       * The opening value of each data point.
+       *
+       * @type      {number}
+       * @product   highstock
+       * @apioption series.ohlc.data.open
+       */
+      (""); // adds doclets above to transpilat
+    }
+  );
+  _registerModule(
+    _modules,
+    "Series/CandlestickSeries.js",
+    [
+      _modules["Core/Series/Series.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (BaseSeries, O, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var defaultOptions = O.defaultOptions;
+      var merge = U.merge;
+      var columnProto = BaseSeries.seriesTypes.column.prototype;
+      /**
+       * A candlestick chart is a style of financial chart used to describe price
+       * movements over time.
+       *
+       * @sample stock/demo/candlestick/
+       *         Candlestick chart
+       *
+       * @extends      plotOptions.ohlc
+       * @excluding    borderColor,borderRadius,borderWidth
+       * @product      highstock
+       * @optionparent plotOptions.candlestick
+       */
+      var candlestickOptions = {
         /**
-         * A `ohlc` series. If the [type](#series.ohlc.type) option is not
-         * specified, it is inherited from [chart.type](#chart.type).
+         * The specific line color for up candle sticks. The default is to inherit
+         * the general `lineColor` setting.
          *
-         * @extends   series,plotOptions.ohlc
-         * @excluding dataParser, dataURL
-         * @product   highstock
-         * @apioption series.ohlc
-         */
-        /**
-         * An array of data points for the series. For the `ohlc` series type,
-         * points can be given in the following ways:
-         *
-         * 1. An array of arrays with 5 or 4 values. In this case, the values correspond
-         *    to `x,open,high,low,close`. If the first value is a string, it is applied
-         *    as the name of the point, and the `x` value is inferred. The `x` value can
-         *    also be omitted, in which case the inner arrays should be of length 4\.
-         *    Then the `x` value is automatically calculated, either starting at 0 and
-         *    incremented by 1, or from `pointStart` and `pointInterval` given in the
-         *    series options.
-         *    ```js
-         *    data: [
-         *        [0, 6, 5, 6, 7],
-         *        [1, 9, 4, 8, 2],
-         *        [2, 6, 3, 4, 10]
-         *    ]
-         *    ```
-         *
-         * 2. An array of objects with named values. The following snippet shows only a
-         *    few settings, see the complete options set below. If the total number of
-         *    data points exceeds the series'
-         *    [turboThreshold](#series.ohlc.turboThreshold), this option is not
-         *    available.
-         *    ```js
-         *    data: [{
-         *        x: 1,
-         *        open: 3,
-         *        high: 4,
-         *        low: 5,
-         *        close: 2,
-         *        name: "Point2",
-         *        color: "#00FF00"
-         *    }, {
-         *        x: 1,
-         *        open: 4,
-         *        high: 3,
-         *        low: 6,
-         *        close: 7,
-         *        name: "Point1",
-         *        color: "#FF00FF"
-         *    }]
-         *    ```
-         *
-         * @type      {Array<Array<(number|string),number,number,number>|Array<(number|string),number,number,number,number>|*>}
-         * @extends   series.arearange.data
-         * @excluding y, marker
-         * @product   highstock
-         * @apioption series.ohlc.data
-         */
-        /**
-         * The closing value of each data point.
+         * @sample {highstock} stock/plotoptions/candlestick-linecolor/
+         *         Candlestick line colors
          *
-         * @type      {number}
+         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+         * @since     1.3.6
          * @product   highstock
-         * @apioption series.ohlc.data.close
+         * @apioption plotOptions.candlestick.upLineColor
          */
         /**
-         * The opening value of each data point.
-         *
-         * @type      {number}
+         * @type      {Highcharts.DataGroupingApproximationValue|Function}
+         * @default   ohlc
          * @product   highstock
-         * @apioption series.ohlc.data.open
-         */
-        ''; // adds doclets above to transpilat
-
-    });
-    _registerModule(_modules, 'Series/CandlestickSeries.js', [_modules['Core/Series/Series.js'], _modules['Core/Options.js'], _modules['Core/Utilities.js']], function (BaseSeries, O, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var defaultOptions = O.defaultOptions;
-        var merge = U.merge;
-        var columnProto = BaseSeries.seriesTypes.column.prototype;
-        /**
-         * A candlestick chart is a style of financial chart used to describe price
-         * movements over time.
-         *
-         * @sample stock/demo/candlestick/
-         *         Candlestick chart
-         *
-         * @extends      plotOptions.ohlc
-         * @excluding    borderColor,borderRadius,borderWidth
-         * @product      highstock
-         * @optionparent plotOptions.candlestick
+         * @apioption plotOptions.candlestick.dataGrouping.approximation
          */
-        var candlestickOptions = {
-                /**
-                 * The specific line color for up candle sticks. The default is to inherit
-                 * the general `lineColor` setting.
-                 *
-                 * @sample {highstock} stock/plotoptions/candlestick-linecolor/
-                 *         Candlestick line colors
-                 *
-                 * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                 * @since     1.3.6
-                 * @product   highstock
-                 * @apioption plotOptions.candlestick.upLineColor
-                 */
-                /**
-                 * @type      {Highcharts.DataGroupingApproximationValue|Function}
-                 * @default   ohlc
-                 * @product   highstock
-                 * @apioption plotOptions.candlestick.dataGrouping.approximation
-                 */
-                states: {
-                    /**
-                     * @extends plotOptions.column.states.hover
-                     * @product highstock
-                     */
-                    hover: {
-                        /**
-                         * The pixel width of the line/border around the candlestick.
-                         *
-                         * @product highstock
-                         */
-                        lineWidth: 2
-                    }
-                },
-                /**
-                 * @extends plotOptions.ohlc.tooltip
-                 */
-                tooltip: defaultOptions.plotOptions.ohlc.tooltip,
-                /**
-                 * @type    {number|null}
-                 * @product highstock
-                 */
-                threshold: null,
-                /**
+        states: {
+          /**
+           * @extends plotOptions.column.states.hover
+           * @product highstock
+           */
+          hover: {
+            /**
+             * The pixel width of the line/border around the candlestick.
+             *
+             * @product highstock
+             */
+            lineWidth: 2,
+          },
+        },
+        /**
+         * @extends plotOptions.ohlc.tooltip
+         */
+        tooltip: defaultOptions.plotOptions.ohlc.tooltip,
+        /**
+         * @type    {number|null}
+         * @product highstock
+         */
+        threshold: null,
+        /**
                  * The color of the line/border of the candlestick.
                  *
                  * In styled mode,
@@ -6217,8 +6747,8 @@
                  * @default #000000
                  * @product highstock
                  */
-                lineColor: '#000000',
-                /**
+        lineColor: "#000000",
+        /**
                  * The pixel width of the candlestick line/border. Defaults to `1`.
                  *
                  *
@@ -6228,8 +6758,8 @@
                  *
                  * @product highstock
                  */
-                lineWidth: 1,
-                /**
+        lineWidth: 1,
+        /**
                  * The fill color of the candlestick when values are rising.
                  *
                  * In styled mode,
@@ -6244,1534 +6774,1588 @@
                  * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
                  * @default #ffffff
                  * @product highstock
-                 */
-                upColor: '#ffffff',
-                /**
-                 * @product highstock
-                 */
-                stickyTracking: true
-            };
-        /**
-         * The candlestick series type.
-         *
-         * @private
-         * @class
-         * @name Highcharts.seriesTypes.candlestick
-         *
-         * @augments Highcharts.seriesTypes.ohlc
-         */
-        BaseSeries.seriesType('candlestick', 'ohlc', merge(defaultOptions.plotOptions.column, candlestickOptions), 
-        /**
-         * @lends seriesTypes.candlestick
-         */
-        {
-            /* eslint-disable valid-jsdoc */
-            /**
-             * Postprocess mapping between options and SVG attributes
-             *
-             * @private
-             * @function Highcharts.seriesTypes.candlestick#pointAttribs
-             * @param {Highcharts.Point} point
-             * @param {string} [state]
-             * @return {Highcharts.SVGAttributes}
-             */
-            pointAttribs: function (point, state) {
-                var attribs = columnProto.pointAttribs.call(this,
-                    point,
-                    state),
-                    options = this.options,
-                    isUp = point.open < point.close,
-                    stroke = options.lineColor || this.color,
-                    stateOptions;
-                attribs['stroke-width'] = options.lineWidth;
-                attribs.fill = point.options.color ||
-                    (isUp ? (options.upColor || this.color) : this.color);
-                attribs.stroke = point.options.lineColor ||
-                    (isUp ? (options.upLineColor || stroke) : stroke);
-                // Select or hover states
-                if (state) {
-                    stateOptions = options.states[state];
-                    attribs.fill = stateOptions.color || attribs.fill;
-                    attribs.stroke = stateOptions.lineColor || attribs.stroke;
-                    attribs['stroke-width'] =
-                        stateOptions.lineWidth || attribs['stroke-width'];
-                }
-                return attribs;
-            },
-            /**
-             * Draw the data points.
-             *
-             * @private
-             * @function Highcharts.seriesTypes.candlestick#drawPoints
-             * @return {void}
-             */
-            drawPoints: function () {
-                var series = this,
-                    points = series.points,
-                    chart = series.chart,
-                    reversedYAxis = series.yAxis.reversed;
-                points.forEach(function (point) {
-                    var graphic = point.graphic,
-                        plotOpen,
-                        plotClose,
-                        topBox,
-                        bottomBox,
-                        hasTopWhisker,
-                        hasBottomWhisker,
-                        crispCorr,
-                        crispX,
-                        path,
-                        halfWidth,
-                        isNew = !graphic;
-                    if (typeof point.plotY !== 'undefined') {
-                        if (!graphic) {
-                            point.graphic = graphic = chart.renderer.path()
-                                .add(series.group);
-                        }
-                        if (!series.chart.styledMode) {
-                            graphic
-                                .attr(series.pointAttribs(point, (point.selected && 'select'))) // #3897
-                                .shadow(series.options.shadow);
-                        }
-                        // Crisp vector coordinates
-                        crispCorr = (graphic.strokeWidth() % 2) / 2;
-                        // #2596:
-                        crispX = Math.round(point.plotX) - crispCorr;
-                        plotOpen = point.plotOpen;
-                        plotClose = point.plotClose;
-                        topBox = Math.min(plotOpen, plotClose);
-                        bottomBox = Math.max(plotOpen, plotClose);
-                        halfWidth = Math.round(point.shapeArgs.width / 2);
-                        hasTopWhisker = reversedYAxis ?
-                            bottomBox !== point.yBottom :
-                            Math.round(topBox) !==
-                                Math.round(point.plotHigh);
-                        hasBottomWhisker = reversedYAxis ?
-                            Math.round(topBox) !==
-                                Math.round(point.plotHigh) :
-                            bottomBox !== point.yBottom;
-                        topBox = Math.round(topBox) + crispCorr;
-                        bottomBox = Math.round(bottomBox) + crispCorr;
-                        // Create the path. Due to a bug in Chrome 49, the path is
-                        // first instanciated with no values, then the values
-                        // pushed. For unknown reasons, instanciating the path array
-                        // with all the values would lead to a crash when updating
-                        // frequently (#5193).
-                        path = [];
-                        path.push(['M', crispX - halfWidth, bottomBox], ['L', crispX - halfWidth, topBox], ['L', crispX + halfWidth, topBox], ['L', crispX + halfWidth, bottomBox], ['Z'], // Ensure a nice rectangle #2602
-                        ['M', crispX, topBox], [
-                            'L',
-                            // #460, #2094
-                            crispX,
-                            hasTopWhisker ?
-                                Math.round(reversedYAxis ?
-                                    point.yBottom :
-                                    point.plotHigh) :
-                                topBox
-                        ], ['M', crispX, bottomBox], [
-                            'L',
-                            // #460, #2094
-                            crispX,
-                            hasBottomWhisker ?
-                                Math.round(reversedYAxis ?
-                                    point.plotHigh :
-                                    point.yBottom) :
-                                bottomBox
-                        ]);
-                        graphic[isNew ? 'attr' : 'animate']({ d: path })
-                            .addClass(point.getClassName(), true);
-                    }
-                });
-                /* eslint-enable valid-jsdoc */
-            }
-        });
-        /**
-         * A `candlestick` series. If the [type](#series.candlestick.type)
-         * option is not specified, it is inherited from [chart.type](
-         * #chart.type).
-         *
-         * @type      {*}
-         * @extends   series,plotOptions.candlestick
-         * @excluding dataParser, dataURL
-         * @product   highstock
-         * @apioption series.candlestick
-         */
-        /**
-         * An array of data points for the series. For the `candlestick` series
-         * type, points can be given in the following ways:
-         *
-         * 1. An array of arrays with 5 or 4 values. In this case, the values correspond
-         *    to `x,open,high,low,close`. If the first value is a string, it is applied
-         *    as the name of the point, and the `x` value is inferred. The `x` value can
-         *    also be omitted, in which case the inner arrays should be of length 4.
-         *    Then the `x` value is automatically calculated, either starting at 0 and
-         *    incremented by 1, or from `pointStart` and `pointInterval` given in the
-         *    series options.
-         *    ```js
-         *    data: [
-         *        [0, 7, 2, 0, 4],
-         *        [1, 1, 4, 2, 8],
-         *        [2, 3, 3, 9, 3]
-         *    ]
-         *    ```
-         *
-         * 2. An array of objects with named values. The following snippet shows only a
-         *    few settings, see the complete options set below. If the total number of
-         *    data points exceeds the series'
-         *    [turboThreshold](#series.candlestick.turboThreshold), this option is not
-         *    available.
-         *    ```js
-         *    data: [{
-         *        x: 1,
-         *        open: 9,
-         *        high: 2,
-         *        low: 4,
-         *        close: 6,
-         *        name: "Point2",
-         *        color: "#00FF00"
-         *    }, {
-         *        x: 1,
-         *        open: 1,
-         *        high: 4,
-         *        low: 7,
-         *        close: 7,
-         *        name: "Point1",
-         *        color: "#FF00FF"
-         *    }]
-         *    ```
-         *
-         * @type      {Array<Array<(number|string),number,number,number>|Array<(number|string),number,number,number,number>|*>}
-         * @extends   series.ohlc.data
-         * @excluding y
-         * @product   highstock
-         * @apioption series.candlestick.data
-         */
-        ''; // adds doclets above to transpilat
-
-    });
-    _registerModule(_modules, 'Mixins/OnSeries.js', [_modules['Core/Globals.js'], _modules['Core/Utilities.js']], function (H, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var defined = U.defined,
-            stableSort = U.stableSort;
-        var seriesTypes = H.seriesTypes;
-        /**
-         * @private
-         * @mixin onSeriesMixin
-         */
-        var onSeriesMixin = {
-                /* eslint-disable valid-jsdoc */
-                /**
-                 * Override getPlotBox. If the onSeries option is valid,
-            return the plot box
-                 * of the onSeries,
-            otherwise proceed as usual.
-                 *
-                 * @private
-                 * @function onSeriesMixin.getPlotBox
-                 * @return {Highcharts.SeriesPlotBoxObject}
-                 */
-                getPlotBox: function () {
-                    return H.Series.prototype.getPlotBox.call((this.options.onSeries &&
-                        this.chart.get(this.options.onSeries)) || this);
-            },
-            /**
-             * Extend the translate method by placing the point on the related series
-             *
-             * @private
-             * @function onSeriesMixin.translate
-             * @return {void}
-             */
-            translate: function () {
-                seriesTypes.column.prototype.translate.apply(this);
-                var series = this,
-                    options = series.options,
-                    chart = series.chart,
-                    points = series.points,
-                    cursor = points.length - 1,
-                    point,
-                    lastPoint,
-                    optionsOnSeries = options.onSeries,
-                    onSeries = (optionsOnSeries &&
-                        chart.get(optionsOnSeries)),
-                    onKey = options.onKey || 'y',
-                    step = onSeries && onSeries.options.step,
-                    onData = (onSeries && onSeries.points),
-                    i = onData && onData.length,
-                    inverted = chart.inverted,
-                    xAxis = series.xAxis,
-                    yAxis = series.yAxis,
-                    xOffset = 0,
-                    leftPoint,
-                    lastX,
-                    rightPoint,
-                    currentDataGrouping,
-                    distanceRatio;
-                // relate to a master series
-                if (onSeries && onSeries.visible && i) {
-                    xOffset = (onSeries.pointXOffset || 0) + (onSeries.barW || 0) / 2;
-                    currentDataGrouping = onSeries.currentDataGrouping;
-                    lastX = (onData[i - 1].x +
-                        (currentDataGrouping ? currentDataGrouping.totalRange : 0)); // #2374
-                    // sort the data points
-                    stableSort(points, function (a, b) {
-                        return (a.x - b.x);
-                    });
-                    onKey = 'plot' + onKey[0].toUpperCase() + onKey.substr(1);
-                    while (i-- && points[cursor]) {
-                        leftPoint = onData[i];
-                        point = points[cursor];
-                        point.y = leftPoint.y;
-                        if (leftPoint.x <= point.x &&
-                            typeof leftPoint[onKey] !== 'undefined') {
-                            if (point.x <= lastX) { // #803
-                                point.plotY = leftPoint[onKey];
-                                // interpolate between points, #666
-                                if (leftPoint.x < point.x &&
-                                    !step) {
-                                    rightPoint = onData[i + 1];
-                                    if (rightPoint &&
-                                        typeof rightPoint[onKey] !== 'undefined') {
-                                        // the distance ratio, between 0 and 1
-                                        distanceRatio =
-                                            (point.x - leftPoint.x) /
-                                                (rightPoint.x - leftPoint.x);
-                                        point.plotY +=
-                                            distanceRatio *
-                                                // the plotY distance
-                                                (rightPoint[onKey] - leftPoint[onKey]);
-                                        point.y +=
-                                            distanceRatio *
-                                                (rightPoint.y - leftPoint.y);
-                                    }
-                                }
-                            }
-                            cursor--;
-                            i++; // check again for points in the same x position
-                            if (cursor < 0) {
-                                break;
-                            }
-                        }
-                    }
-                }
-                // Add plotY position and handle stacking
-                points.forEach(function (point, i) {
-                    var stackIndex;
-                    point.plotX += xOffset; // #2049
-                    // Undefined plotY means the point is either on axis, outside series
-                    // range or hidden series. If the series is outside the range of the
-                    // x axis it should fall through with an undefined plotY, but then
-                    // we must remove the shapeArgs (#847). For inverted charts, we need
-                    // to calculate position anyway, because series.invertGroups is not
-                    // defined
-                    if (typeof point.plotY === 'undefined' || inverted) {
-                        if (point.plotX >= 0 &&
-                            point.plotX <= xAxis.len) {
-                            // We're inside xAxis range
-                            if (inverted) {
-                                point.plotY = xAxis.translate(point.x, 0, 1, 0, 1);
-                                point.plotX = defined(point.y) ?
-                                    yAxis.translate(point.y, 0, 0, 0, 1) :
-                                    0;
-                            }
-                            else {
-                                point.plotY = (xAxis.opposite ? 0 : series.yAxis.len) +
-                                    xAxis.offset; // For the windbarb demo
-                            }
-                        }
-                        else {
-                            point.shapeArgs = {}; // 847
-                        }
-                    }
-                    // if multiple flags appear at the same x, order them into a stack
-                    lastPoint = points[i - 1];
-                    if (lastPoint && lastPoint.plotX === point.plotX) {
-                        if (typeof lastPoint.stackIndex === 'undefined') {
-                            lastPoint.stackIndex = 0;
-                        }
-                        stackIndex = lastPoint.stackIndex + 1;
-                    }
-                    point.stackIndex = stackIndex; // #3639
-                });
-                this.onSeries = onSeries;
-            }
-            /* eslint-enable valid-jsdoc */
-        };
-
-        return onSeriesMixin;
-    });
-    _registerModule(_modules, 'Series/FlagsSeries.js', [_modules['Core/Series/Series.js'], _modules['Core/Globals.js'], _modules['Mixins/OnSeries.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Renderer/SVG/SVGRenderer.js'], _modules['Core/Utilities.js']], function (BaseSeries, H, OnSeriesMixin, SVGElement, SVGRenderer, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var noop = H.noop;
-        var addEvent = U.addEvent,
-            defined = U.defined,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            objectEach = U.objectEach,
-            wrap = U.wrap;
-        var Renderer = H.Renderer,
-            Series = H.Series,
-            TrackerMixin = H.TrackerMixin, // Interaction
-            VMLRenderer = H.VMLRenderer,
-            symbols = SVGRenderer.prototype.symbols;
-        /**
-         * @typedef {"circlepin"|"flag"|"squarepin"} Highcharts.FlagsShapeValue
-         */
-        ''; // detach doclets above
-        /**
-         * The Flags series.
-         *
-         * @private
-         * @class
-         * @name Highcharts.seriesTypes.flags
-         *
-         * @augments Highcharts.Series
-         */
-        BaseSeries.seriesType('flags', 'column'
-        /**
-         * Flags are used to mark events in stock charts. They can be added on the
-         * timeline, or attached to a specific series.
-         *
-         * @sample stock/demo/flags-general/
-         *         Flags on a line series
-         *
-         * @extends      plotOptions.column
-         * @excluding    animation, borderColor, borderRadius, borderWidth,
-         *               colorByPoint, dataGrouping, pointPadding, pointWidth,
-         *               turboThreshold
-         * @product      highstock
-         * @optionparent plotOptions.flags
-         */
-        , {
-            /**
-             * In case the flag is placed on a series, on what point key to place
-             * it. Line and columns have one key, `y`. In range or OHLC-type series,
-             * however, the flag can optionally be placed on the `open`, `high`,
-             * `low` or `close` key.
-             *
-             * @sample {highstock} stock/plotoptions/flags-onkey/
-             *         Range series, flag on high
-             *
-             * @type       {string}
-             * @default    y
-             * @since      4.2.2
-             * @product    highstock
-             * @validvalue ["y", "open", "high", "low", "close"]
-             * @apioption  plotOptions.flags.onKey
-             */
-            /**
-             * The id of the series that the flags should be drawn on. If no id
-             * is given, the flags are drawn on the x axis.
-             *
-             * @sample {highstock} stock/plotoptions/flags/
-             *         Flags on series and on x axis
-             *
-             * @type      {string}
-             * @product   highstock
-             * @apioption plotOptions.flags.onSeries
-             */
-            pointRange: 0,
-            /**
-             * Whether the flags are allowed to overlap sideways. If `false`, the
-             * flags are moved sideways using an algorithm that seeks to place every
-             * flag as close as possible to its original position.
-             *
-             * @sample {highstock} stock/plotoptions/flags-allowoverlapx
-             *         Allow sideways overlap
-             *
-             * @since 6.0.4
-             */
-            allowOverlapX: false,
-            /**
-             * The shape of the marker. Can be one of "flag", "circlepin",
-             * "squarepin", or an image of the format `url(/path-to-image.jpg)`.
-             * Individual shapes can also be set for each point.
-             *
-             * @sample {highstock} stock/plotoptions/flags/
-             *         Different shapes
-             *
-             * @type    {Highcharts.FlagsShapeValue}
-             * @product highstock
-             */
-            shape: 'flag',
-            /**
-             * When multiple flags in the same series fall on the same value, this
-             * number determines the vertical offset between them.
-             *
-             * @sample {highstock} stock/plotoptions/flags-stackdistance/
-             *         A greater stack distance
-             *
-             * @product highstock
-             */
-            stackDistance: 12,
-            /**
-             * Text alignment for the text inside the flag.
-             *
-             * @since      5.0.0
-             * @product    highstock
-             * @validvalue ["left", "center", "right"]
-             */
-            textAlign: 'center',
-            /**
-             * Specific tooltip options for flag series. Flag series tooltips are
-             * different from most other types in that a flag doesn't have a data
-             * value, so the tooltip rather displays the `text` option for each
-             * point.
-             *
-             * @extends   plotOptions.series.tooltip
-             * @excluding changeDecimals, valueDecimals, valuePrefix, valueSuffix
-             * @product   highstock
-             */
-            tooltip: {
-                pointFormat: '{point.text}<br/>'
-            },
-            threshold: null,
-            /**
-             * The text to display on each flag. This can be defined on series
-             * level, or individually for each point. Defaults to `"A"`.
-             *
-             * @type      {string}
-             * @default   A
-             * @product   highstock
-             * @apioption plotOptions.flags.title
-             */
-            /**
-             * The y position of the top left corner of the flag relative to either
-             * the series (if onSeries is defined), or the x axis. Defaults to
-             * `-30`.
-             *
-             * @product highstock
-             */
-            y: -30,
-            /**
-             * Whether to use HTML to render the flag texts. Using HTML allows for
-             * advanced formatting, images and reliable bi-directional text
-             * rendering. Note that exported images won't respect the HTML, and that
-             * HTML won't respect Z-index settings.
-             *
-             * @type      {boolean}
-             * @default   false
-             * @since     1.3
-             * @product   highstock
-             * @apioption plotOptions.flags.useHTML
-             */
-            /**
-             * Fixed width of the flag's shape. By default, width is autocalculated
-             * according to the flag's title.
-             *
-             * @sample {highstock} stock/demo/flags-shapes/
-             *         Flags with fixed width
-             *
-             * @type      {number}
-             * @product   highstock
-             * @apioption plotOptions.flags.width
-             */
-            /**
-             * Fixed height of the flag's shape. By default, height is
-             * autocalculated according to the flag's title.
-             *
-             * @type      {number}
-             * @product   highstock
-             * @apioption plotOptions.flags.height
-             */
-            /**
-             * The fill color for the flags.
-             *
-             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-             * @product highstock
-             */
-            fillColor: '#ffffff',
-            /**
-             * The color of the line/border of the flag.
-             *
-             * In styled mode, the stroke is set in the
-             * `.highcharts-flag-series.highcharts-point` rule.
-             *
-             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-             * @default   #000000
-             * @product   highstock
-             * @apioption plotOptions.flags.lineColor
-             */
-            /**
-             * The pixel width of the flag's line/border.
-             *
-             * @product highstock
-             */
-            lineWidth: 1,
-            states: {
-                /**
-                 * @extends plotOptions.column.states.hover
-                 * @product highstock
-                 */
-                hover: {
-                    /**
-                     * The color of the line/border of the flag.
-                     *
-                     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     * @product highstock
-                     */
-                    lineColor: '#000000',
-                    /**
-                     * The fill or background color of the flag.
-                     *
-                     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-                     * @product highstock
-                     */
-                    fillColor: '#ccd6eb'
-                }
-            },
-            /**
-             * The text styles of the flag.
-             *
-             * In styled mode, the styles are set in the
-             * `.highcharts-flag-series .highcharts-point` rule.
-             *
-             * @type    {Highcharts.CSSObject}
-             * @default {"fontSize": "11px", "fontWeight": "bold"}
-             * @product highstock
-             */
-            style: {
-                /** @ignore-option */
-                fontSize: '11px',
-                /** @ignore-option */
-                fontWeight: 'bold'
-            }
-        }, 
-        /**
-         * @lends seriesTypes.flags.prototype
-         */
-        {
-            sorted: false,
-            noSharedTooltip: true,
-            allowDG: false,
-            takeOrdinalPosition: false,
-            trackerGroups: ['markerGroup'],
-            forceCrop: true,
-            /* eslint-disable no-invalid-this, valid-jsdoc */
-            /**
-             * Inherit the initialization from base Series.
-             *
-             * @private
-             * @borrows Highcharts.Series#init as Highcharts.seriesTypes.flags#init
-             */
-            init: Series.prototype.init,
-            /**
-             * Get presentational attributes
-             *
-             * @private
-             * @function Highcharts.seriesTypes.flags#pointAttribs
-             *
-             * @param {Highcharts.Point} point
-             *
-             * @param {string} [state]
-             *
-             * @return {Highcharts.SVGAttributes}
-             */
-            pointAttribs: function (point, state) {
-                var options = this.options,
-                    color = (point && point.color) || this.color,
-                    lineColor = options.lineColor,
-                    lineWidth = (point && point.lineWidth),
-                    fill = (point && point.fillColor) || options.fillColor;
-                if (state) {
-                    fill = options.states[state].fillColor;
-                    lineColor = options.states[state].lineColor;
-                    lineWidth = options.states[state].lineWidth;
-                }
-                return {
-                    fill: fill || color,
-                    stroke: lineColor || color,
-                    'stroke-width': lineWidth || options.lineWidth || 0
-                };
-            },
-            translate: OnSeriesMixin.translate,
-            getPlotBox: OnSeriesMixin.getPlotBox,
-            /**
-             * Draw the markers.
-             *
-             * @private
-             * @function Highcharts.seriesTypes.flags#drawPoints
-             * @return {void}
-             */
-            drawPoints: function () {
-                var series = this,
-                    points = series.points,
-                    chart = series.chart,
-                    renderer = chart.renderer,
-                    plotX,
-                    plotY,
-                    inverted = chart.inverted,
-                    options = series.options,
-                    optionsY = options.y,
-                    shape,
-                    i,
-                    point,
-                    graphic,
-                    stackIndex,
-                    anchorY,
-                    attribs,
-                    outsideRight,
-                    yAxis = series.yAxis,
-                    boxesMap = {},
-                    boxes = [],
-                    centered;
-                i = points.length;
-                while (i--) {
-                    point = points[i];
-                    outsideRight =
-                        (inverted ? point.plotY : point.plotX) >
-                            series.xAxis.len;
-                    plotX = point.plotX;
-                    stackIndex = point.stackIndex;
-                    shape = point.options.shape || options.shape;
-                    plotY = point.plotY;
-                    if (typeof plotY !== 'undefined') {
-                        plotY = point.plotY + optionsY -
-                            (typeof stackIndex !== 'undefined' &&
-                                (stackIndex * options.stackDistance));
-                    }
-                    // skip connectors for higher level stacked points
-                    point.anchorX = stackIndex ? void 0 : point.plotX;
-                    anchorY = stackIndex ? void 0 : point.plotY;
-                    centered = shape !== 'flag';
-                    graphic = point.graphic;
-                    // Only draw the point if y is defined and the flag is within
-                    // the visible area
-                    if (typeof plotY !== 'undefined' &&
-                        plotX >= 0 &&
-                        !outsideRight) {
-                        // Create the flag
-                        if (!graphic) {
-                            graphic = point.graphic = renderer.label('', null, null, shape, null, null, options.useHTML);
-                            if (!chart.styledMode) {
-                                graphic
-                                    .attr(series.pointAttribs(point))
-                                    .css(merge(options.style, point.style));
-                            }
-                            graphic.attr({
-                                align: centered ? 'center' : 'left',
-                                width: options.width,
-                                height: options.height,
-                                'text-align': options.textAlign
-                            })
-                                .addClass('highcharts-point')
-                                .add(series.markerGroup);
-                            // Add reference to the point for tracker (#6303)
-                            if (point.graphic.div) {
-                                point.graphic.div.point = point;
-                            }
-                            if (!chart.styledMode) {
-                                graphic.shadow(options.shadow);
-                            }
-                            graphic.isNew = true;
-                        }
-                        if (plotX > 0) { // #3119
-                            plotX -= graphic.strokeWidth() % 2; // #4285
-                        }
-                        // Plant the flag
-                        attribs = {
-                            y: plotY,
-                            anchorY: anchorY
-                        };
-                        if (options.allowOverlapX) {
-                            attribs.x = plotX;
-                            attribs.anchorX = point.anchorX;
-                        }
-                        graphic.attr({
-                            text: point.options.title || options.title || 'A'
-                        })[graphic.isNew ? 'attr' : 'animate'](attribs);
-                        // Rig for the distribute function
-                        if (!options.allowOverlapX) {
-                            if (!boxesMap[point.plotX]) {
-                                boxesMap[point.plotX] = {
-                                    align: centered ? 0.5 : 0,
-                                    size: graphic.width,
-                                    target: plotX,
-                                    anchorX: plotX
-                                };
-                            }
-                            else {
-                                boxesMap[point.plotX].size = Math.max(boxesMap[point.plotX].size, graphic.width);
-                            }
-                        }
-                        // Set the tooltip anchor position
-                        point.tooltipPos = [
-                            plotX,
-                            plotY + yAxis.pos - chart.plotTop
-                        ]; // #6327
-                    }
-                    else if (graphic) {
-                        point.graphic = graphic.destroy();
-                    }
-                }
-                // Handle X-dimension overlapping
-                if (!options.allowOverlapX) {
-                    objectEach(boxesMap, function (box) {
-                        box.plotX = box.anchorX;
-                        boxes.push(box);
-                    });
-                    H.distribute(boxes, inverted ? yAxis.len : this.xAxis.len, 100);
-                    points.forEach(function (point) {
-                        var box = point.graphic && boxesMap[point.plotX];
-                        if (box) {
-                            point.graphic[point.graphic.isNew ? 'attr' : 'animate']({
-                                x: box.pos + box.align * box.size,
-                                anchorX: point.anchorX
-                            });
-                            // Hide flag when its box position is not specified
-                            // (#8573, #9299)
-                            if (!defined(box.pos)) {
-                                point.graphic.attr({
-                                    x: -9999,
-                                    anchorX: -9999
-                                });
-                                point.graphic.isNew = true;
-                            }
-                            else {
-                                point.graphic.isNew = false;
-                            }
-                        }
-                    });
-                }
-                // Can be a mix of SVG and HTML and we need events for both (#6303)
-                if (options.useHTML) {
-                    wrap(series.markerGroup, 'on', function (proceed) {
-                        return SVGElement.prototype.on.apply(
-                        // for HTML
-                        proceed.apply(this, [].slice.call(arguments, 1)), 
-                        // and for SVG
-                        [].slice.call(arguments, 1));
-                    });
-                }
-            },
-            /**
-             * Extend the column trackers with listeners to expand and contract
-             * stacks.
-             *
-             * @private
-             * @function Highcharts.seriesTypes.flags#drawTracker
-             * @return {void}
-             */
-            drawTracker: function () {
-                var series = this,
-                    points = series.points;
-                TrackerMixin.drawTrackerPoint.apply(this);
-                /* *
-                * Bring each stacked flag up on mouse over, this allows readability
-                * of vertically stacked elements as well as tight points on the x
-                * axis. #1924.
-                */
-                points.forEach(function (point) {
-                    var graphic = point.graphic;
-                    if (graphic) {
-                        addEvent(graphic.element, 'mouseover', function () {
-                            // Raise this point
-                            if (point.stackIndex > 0 &&
-                                !point.raised) {
-                                point._y = graphic.y;
-                                graphic.attr({
-                                    y: point._y - 8
-                                });
-                                point.raised = true;
-                            }
-                            // Revert other raised points
-                            points.forEach(function (otherPoint) {
-                                if (otherPoint !== point &&
-                                    otherPoint.raised &&
-                                    otherPoint.graphic) {
-                                    otherPoint.graphic.attr({
-                                        y: otherPoint._y
-                                    });
-                                    otherPoint.raised = false;
-                                }
-                            });
-                        });
-                    }
-                });
-            },
-            /**
-             * Disable animation, but keep clipping (#8546).
-             *
-             * @private
-             * @function Highcharts.seriesTypes.flags#animate
-             * @param {boolean} [init]
-             * @return {void}
-             */
-            animate: function (init) {
-                if (init) {
-                    this.setClip();
-                }
-            },
-            /**
-             * @private
-             * @function Highcharts.seriesTypes.flags#setClip
-             * @return {void}
-             */
-            setClip: function () {
-                Series.prototype.setClip.apply(this, arguments);
-                if (this.options.clip !== false && this.sharedClipKey) {
-                    this.markerGroup
-                        .clip(this.chart[this.sharedClipKey]);
-                }
-            },
-            /**
-             * @private
-             * @function Highcharts.seriesTypes.flags#buildKDTree
-             */
-            buildKDTree: noop,
-            /**
-             * Don't invert the flag marker group (#4960).
-             *
-             * @private
-             * @function Highcharts.seriesTypes.flags#invertGroups
-             */
-            invertGroups: noop
-            /* eslint-enable no-invalid-this, valid-jsdoc */
-        }, 
-        /**
-         * @lends Highcharts.seriesTypes.flag.prototype.pointClass.prototype
-         */
-        {
-            isValid: function () {
-                // #9233 - Prevent from treating flags as null points (even if
-                // they have no y values defined).
-                return isNumber(this.y) || typeof this.y === 'undefined';
-            }
-        });
-        // create the flag icon with anchor
-        symbols.flag = function (x, y, w, h, options) {
-            var anchorX = (options && options.anchorX) || x,
-                anchorY = (options && options.anchorY) || y;
-            // To do: unwanted any cast because symbols.circle has wrong type, it
-            // actually returns an SVGPathArray
-            var path = symbols.circle(anchorX - 1,
-                anchorY - 1, 2, 2);
-            path.push(['M', anchorX, anchorY], ['L', x, y + h], ['L', x, y], ['L', x + w, y], ['L', x + w, y + h], ['L', x, y + h], ['Z']);
-            return path;
-        };
+                 */
+        upColor: "#ffffff",
         /**
-         * Create the circlepin and squarepin icons with anchor.
-         * @private
-         * @param {string} shape - circle or square
-         * @return {void}
+         * @product highstock
          */
-        function createPinSymbol(shape) {
-            symbols[shape + 'pin'] = function (x, y, w, h, options) {
-                var anchorX = options && options.anchorX,
-                    anchorY = options && options.anchorY,
-                    path;
-                // For single-letter flags, make sure circular flags are not taller
-                // than their width
-                if (shape === 'circle' && h > w) {
-                    x -= Math.round((h - w) / 2);
-                    w = h;
-                }
-                path = (symbols[shape])(x, y, w, h);
-                if (anchorX && anchorY) {
-                    /**
-                     * If the label is below the anchor, draw the connecting line from
-                     * the top edge of the label, otherwise start drawing from the
-                     * bottom edge
-                     */
-                    var labelX = anchorX;
-                    if (shape === 'circle') {
-                        labelX = x + w / 2;
-                    }
-                    else {
-                        var startSeg = path[0];
-                        var endSeg = path[1];
-                        if (startSeg[0] === 'M' && endSeg[0] === 'L') {
-                            labelX = (startSeg[1] + endSeg[1]) / 2;
-                        }
-                    }
-                    var labelY = (y > anchorY) ? y : y + h;
-                    path.push([
-                        'M',
-                        labelX,
-                        labelY
-                    ], [
-                        'L',
-                        anchorX,
-                        anchorY
-                    ]);
-                    path = path.concat(symbols.circle(anchorX - 1, anchorY - 1, 2, 2));
-                }
-                return path;
-            };
-        }
-        createPinSymbol('circle');
-        createPinSymbol('square');
+        stickyTracking: true,
+      };
+      /**
+       * The candlestick series type.
+       *
+       * @private
+       * @class
+       * @name Highcharts.seriesTypes.candlestick
+       *
+       * @augments Highcharts.seriesTypes.ohlc
+       */
+      BaseSeries.seriesType(
+        "candlestick",
+        "ohlc",
+        merge(defaultOptions.plotOptions.column, candlestickOptions),
         /**
-         * The symbol callbacks are generated on the SVGRenderer object in all browsers.
-         * Even VML browsers need this in order to generate shapes in export. Now share
-         * them with the VMLRenderer.
+         * @lends seriesTypes.candlestick
          */
-        if (Renderer === VMLRenderer) {
-            ['circlepin', 'flag', 'squarepin'].forEach(function (shape) {
-                VMLRenderer.prototype.symbols[shape] = symbols[shape];
+        {
+          /* eslint-disable valid-jsdoc */
+          /**
+           * Postprocess mapping between options and SVG attributes
+           *
+           * @private
+           * @function Highcharts.seriesTypes.candlestick#pointAttribs
+           * @param {Highcharts.Point} point
+           * @param {string} [state]
+           * @return {Highcharts.SVGAttributes}
+           */
+          pointAttribs: function (point, state) {
+            var attribs = columnProto.pointAttribs.call(this, point, state),
+              options = this.options,
+              isUp = point.open < point.close,
+              stroke = options.lineColor || this.color,
+              stateOptions;
+            attribs["stroke-width"] = options.lineWidth;
+            attribs.fill =
+              point.options.color ||
+              (isUp ? options.upColor || this.color : this.color);
+            attribs.stroke =
+              point.options.lineColor ||
+              (isUp ? options.upLineColor || stroke : stroke);
+            // Select or hover states
+            if (state) {
+              stateOptions = options.states[state];
+              attribs.fill = stateOptions.color || attribs.fill;
+              attribs.stroke = stateOptions.lineColor || attribs.stroke;
+              attribs["stroke-width"] =
+                stateOptions.lineWidth || attribs["stroke-width"];
+            }
+            return attribs;
+          },
+          /**
+           * Draw the data points.
+           *
+           * @private
+           * @function Highcharts.seriesTypes.candlestick#drawPoints
+           * @return {void}
+           */
+          drawPoints: function () {
+            var series = this,
+              points = series.points,
+              chart = series.chart,
+              reversedYAxis = series.yAxis.reversed;
+            points.forEach(function (point) {
+              var graphic = point.graphic,
+                plotOpen,
+                plotClose,
+                topBox,
+                bottomBox,
+                hasTopWhisker,
+                hasBottomWhisker,
+                crispCorr,
+                crispX,
+                path,
+                halfWidth,
+                isNew = !graphic;
+              if (typeof point.plotY !== "undefined") {
+                if (!graphic) {
+                  point.graphic = graphic = chart.renderer
+                    .path()
+                    .add(series.group);
+                }
+                if (!series.chart.styledMode) {
+                  graphic
+                    .attr(
+                      series.pointAttribs(point, point.selected && "select")
+                    ) // #3897
+                    .shadow(series.options.shadow);
+                }
+                // Crisp vector coordinates
+                crispCorr = (graphic.strokeWidth() % 2) / 2;
+                // #2596:
+                crispX = Math.round(point.plotX) - crispCorr;
+                plotOpen = point.plotOpen;
+                plotClose = point.plotClose;
+                topBox = Math.min(plotOpen, plotClose);
+                bottomBox = Math.max(plotOpen, plotClose);
+                halfWidth = Math.round(point.shapeArgs.width / 2);
+                hasTopWhisker = reversedYAxis
+                  ? bottomBox !== point.yBottom
+                  : Math.round(topBox) !== Math.round(point.plotHigh);
+                hasBottomWhisker = reversedYAxis
+                  ? Math.round(topBox) !== Math.round(point.plotHigh)
+                  : bottomBox !== point.yBottom;
+                topBox = Math.round(topBox) + crispCorr;
+                bottomBox = Math.round(bottomBox) + crispCorr;
+                // Create the path. Due to a bug in Chrome 49, the path is
+                // first instanciated with no values, then the values
+                // pushed. For unknown reasons, instanciating the path array
+                // with all the values would lead to a crash when updating
+                // frequently (#5193).
+                path = [];
+                path.push(
+                  ["M", crispX - halfWidth, bottomBox],
+                  ["L", crispX - halfWidth, topBox],
+                  ["L", crispX + halfWidth, topBox],
+                  ["L", crispX + halfWidth, bottomBox],
+                  ["Z"], // Ensure a nice rectangle #2602
+                  ["M", crispX, topBox],
+                  [
+                    "L",
+                    // #460, #2094
+                    crispX,
+                    hasTopWhisker
+                      ? Math.round(
+                          reversedYAxis ? point.yBottom : point.plotHigh
+                        )
+                      : topBox,
+                  ],
+                  ["M", crispX, bottomBox],
+                  [
+                    "L",
+                    // #460, #2094
+                    crispX,
+                    hasBottomWhisker
+                      ? Math.round(
+                          reversedYAxis ? point.plotHigh : point.yBottom
+                        )
+                      : bottomBox,
+                  ]
+                );
+                graphic[isNew ? "attr" : "animate"]({ d: path }).addClass(
+                  point.getClassName(),
+                  true
+                );
+              }
             });
+            /* eslint-enable valid-jsdoc */
+          },
         }
+      );
+      /**
+       * A `candlestick` series. If the [type](#series.candlestick.type)
+       * option is not specified, it is inherited from [chart.type](
+       * #chart.type).
+       *
+       * @type      {*}
+       * @extends   series,plotOptions.candlestick
+       * @excluding dataParser, dataURL
+       * @product   highstock
+       * @apioption series.candlestick
+       */
+      /**
+       * An array of data points for the series. For the `candlestick` series
+       * type, points can be given in the following ways:
+       *
+       * 1. An array of arrays with 5 or 4 values. In this case, the values correspond
+       *    to `x,open,high,low,close`. If the first value is a string, it is applied
+       *    as the name of the point, and the `x` value is inferred. The `x` value can
+       *    also be omitted, in which case the inner arrays should be of length 4.
+       *    Then the `x` value is automatically calculated, either starting at 0 and
+       *    incremented by 1, or from `pointStart` and `pointInterval` given in the
+       *    series options.
+       *    ```js
+       *    data: [
+       *        [0, 7, 2, 0, 4],
+       *        [1, 1, 4, 2, 8],
+       *        [2, 3, 3, 9, 3]
+       *    ]
+       *    ```
+       *
+       * 2. An array of objects with named values. The following snippet shows only a
+       *    few settings, see the complete options set below. If the total number of
+       *    data points exceeds the series'
+       *    [turboThreshold](#series.candlestick.turboThreshold), this option is not
+       *    available.
+       *    ```js
+       *    data: [{
+       *        x: 1,
+       *        open: 9,
+       *        high: 2,
+       *        low: 4,
+       *        close: 6,
+       *        name: "Point2",
+       *        color: "#00FF00"
+       *    }, {
+       *        x: 1,
+       *        open: 1,
+       *        high: 4,
+       *        low: 7,
+       *        close: 7,
+       *        name: "Point1",
+       *        color: "#FF00FF"
+       *    }]
+       *    ```
+       *
+       * @type      {Array<Array<(number|string),number,number,number>|Array<(number|string),number,number,number,number>|*>}
+       * @extends   series.ohlc.data
+       * @excluding y
+       * @product   highstock
+       * @apioption series.candlestick.data
+       */
+      (""); // adds doclets above to transpilat
+    }
+  );
+  _registerModule(
+    _modules,
+    "Mixins/OnSeries.js",
+    [_modules["Core/Globals.js"], _modules["Core/Utilities.js"]],
+    function (H, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var defined = U.defined,
+        stableSort = U.stableSort;
+      var seriesTypes = H.seriesTypes;
+      /**
+       * @private
+       * @mixin onSeriesMixin
+       */
+      var onSeriesMixin = {
+        /* eslint-disable valid-jsdoc */
         /**
-         * A `flags` series. If the [type](#series.flags.type) option is not
-         * specified, it is inherited from [chart.type](#chart.type).
-         *
-         * @extends   series,plotOptions.flags
-         * @excluding animation, borderColor, borderRadius, borderWidth, colorByPoint,
-         *            connectNulls, dashStyle, dataGrouping, dataParser, dataURL,
-         *            gapSize, gapUnit, linecap, lineWidth, marker, pointPadding,
-         *            pointWidth, step, turboThreshold, useOhlcData
-         * @product   highstock
-         * @apioption series.flags
-         */
-        /**
-         * An array of data points for the series. For the `flags` series type,
-         * points can be given in the following ways:
-         *
-         * 1. An array of objects with named values. The following snippet shows only a
-         *    few settings, see the complete options set below. If the total number of
-         *    data points exceeds the series'
-         *    [turboThreshold](#series.flags.turboThreshold), this option is not
-         *    available.
-         *    ```js
-         *    data: [{
-         *        x: 1,
-         *        title: "A",
-         *        text: "First event"
-         *    }, {
-         *        x: 1,
-         *        title: "B",
-         *        text: "Second event"
-         *    }]
-         *    ```
-         *
-         * @type      {Array<*>}
-         * @extends   series.line.data
-         * @excluding dataLabels, marker, name, y
-         * @product   highstock
-         * @apioption series.flags.data
-         */
+                 * Override getPlotBox. If the onSeries option is valid,
+            return the plot box
+                 * of the onSeries,
+            otherwise proceed as usual.
+                 *
+                 * @private
+                 * @function onSeriesMixin.getPlotBox
+                 * @return {Highcharts.SeriesPlotBoxObject}
+                 */
+        getPlotBox: function () {
+          return H.Series.prototype.getPlotBox.call(
+            (this.options.onSeries && this.chart.get(this.options.onSeries)) ||
+              this
+          );
+        },
         /**
-         * The fill color of an individual flag. By default it inherits from
-         * the series color.
+         * Extend the translate method by placing the point on the related series
          *
-         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
-         * @product   highstock
-         * @apioption series.flags.data.fillColor
+         * @private
+         * @function onSeriesMixin.translate
+         * @return {void}
          */
+        translate: function () {
+          seriesTypes.column.prototype.translate.apply(this);
+          var series = this,
+            options = series.options,
+            chart = series.chart,
+            points = series.points,
+            cursor = points.length - 1,
+            point,
+            lastPoint,
+            optionsOnSeries = options.onSeries,
+            onSeries = optionsOnSeries && chart.get(optionsOnSeries),
+            onKey = options.onKey || "y",
+            step = onSeries && onSeries.options.step,
+            onData = onSeries && onSeries.points,
+            i = onData && onData.length,
+            inverted = chart.inverted,
+            xAxis = series.xAxis,
+            yAxis = series.yAxis,
+            xOffset = 0,
+            leftPoint,
+            lastX,
+            rightPoint,
+            currentDataGrouping,
+            distanceRatio;
+          // relate to a master series
+          if (onSeries && onSeries.visible && i) {
+            xOffset = (onSeries.pointXOffset || 0) + (onSeries.barW || 0) / 2;
+            currentDataGrouping = onSeries.currentDataGrouping;
+            lastX =
+              onData[i - 1].x +
+              (currentDataGrouping ? currentDataGrouping.totalRange : 0); // #2374
+            // sort the data points
+            stableSort(points, function (a, b) {
+              return a.x - b.x;
+            });
+            onKey = "plot" + onKey[0].toUpperCase() + onKey.substr(1);
+            while (i-- && points[cursor]) {
+              leftPoint = onData[i];
+              point = points[cursor];
+              point.y = leftPoint.y;
+              if (
+                leftPoint.x <= point.x &&
+                typeof leftPoint[onKey] !== "undefined"
+              ) {
+                if (point.x <= lastX) {
+                  // #803
+                  point.plotY = leftPoint[onKey];
+                  // interpolate between points, #666
+                  if (leftPoint.x < point.x && !step) {
+                    rightPoint = onData[i + 1];
+                    if (
+                      rightPoint &&
+                      typeof rightPoint[onKey] !== "undefined"
+                    ) {
+                      // the distance ratio, between 0 and 1
+                      distanceRatio =
+                        (point.x - leftPoint.x) / (rightPoint.x - leftPoint.x);
+                      point.plotY +=
+                        distanceRatio *
+                        // the plotY distance
+                        (rightPoint[onKey] - leftPoint[onKey]);
+                      point.y += distanceRatio * (rightPoint.y - leftPoint.y);
+                    }
+                  }
+                }
+                cursor--;
+                i++; // check again for points in the same x position
+                if (cursor < 0) {
+                  break;
+                }
+              }
+            }
+          }
+          // Add plotY position and handle stacking
+          points.forEach(function (point, i) {
+            var stackIndex;
+            point.plotX += xOffset; // #2049
+            // Undefined plotY means the point is either on axis, outside series
+            // range or hidden series. If the series is outside the range of the
+            // x axis it should fall through with an undefined plotY, but then
+            // we must remove the shapeArgs (#847). For inverted charts, we need
+            // to calculate position anyway, because series.invertGroups is not
+            // defined
+            if (typeof point.plotY === "undefined" || inverted) {
+              if (point.plotX >= 0 && point.plotX <= xAxis.len) {
+                // We're inside xAxis range
+                if (inverted) {
+                  point.plotY = xAxis.translate(point.x, 0, 1, 0, 1);
+                  point.plotX = defined(point.y)
+                    ? yAxis.translate(point.y, 0, 0, 0, 1)
+                    : 0;
+                } else {
+                  point.plotY =
+                    (xAxis.opposite ? 0 : series.yAxis.len) + xAxis.offset; // For the windbarb demo
+                }
+              } else {
+                point.shapeArgs = {}; // 847
+              }
+            }
+            // if multiple flags appear at the same x, order them into a stack
+            lastPoint = points[i - 1];
+            if (lastPoint && lastPoint.plotX === point.plotX) {
+              if (typeof lastPoint.stackIndex === "undefined") {
+                lastPoint.stackIndex = 0;
+              }
+              stackIndex = lastPoint.stackIndex + 1;
+            }
+            point.stackIndex = stackIndex; // #3639
+          });
+          this.onSeries = onSeries;
+        },
+        /* eslint-enable valid-jsdoc */
+      };
+
+      return onSeriesMixin;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Series/FlagsSeries.js",
+    [
+      _modules["Core/Series/Series.js"],
+      _modules["Core/Globals.js"],
+      _modules["Mixins/OnSeries.js"],
+      _modules["Core/Renderer/SVG/SVGElement.js"],
+      _modules["Core/Renderer/SVG/SVGRenderer.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (BaseSeries, H, OnSeriesMixin, SVGElement, SVGRenderer, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var noop = H.noop;
+      var addEvent = U.addEvent,
+        defined = U.defined,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        objectEach = U.objectEach,
+        wrap = U.wrap;
+      var Renderer = H.Renderer,
+        Series = H.Series,
+        TrackerMixin = H.TrackerMixin, // Interaction
+        VMLRenderer = H.VMLRenderer,
+        symbols = SVGRenderer.prototype.symbols;
+      /**
+       * @typedef {"circlepin"|"flag"|"squarepin"} Highcharts.FlagsShapeValue
+       */
+      (""); // detach doclets above
+      /**
+       * The Flags series.
+       *
+       * @private
+       * @class
+       * @name Highcharts.seriesTypes.flags
+       *
+       * @augments Highcharts.Series
+       */
+      BaseSeries.seriesType(
+        "flags",
+        "column",
         /**
-         * The longer text to be shown in the flag's tooltip.
+         * Flags are used to mark events in stock charts. They can be added on the
+         * timeline, or attached to a specific series.
          *
-         * @type      {string}
-         * @product   highstock
-         * @apioption series.flags.data.text
-         */
-        /**
-         * The short text to be shown on the flag.
+         * @sample stock/demo/flags-general/
+         *         Flags on a line series
          *
-         * @type      {string}
-         * @product   highstock
-         * @apioption series.flags.data.title
+         * @extends      plotOptions.column
+         * @excluding    animation, borderColor, borderRadius, borderWidth,
+         *               colorByPoint, dataGrouping, pointPadding, pointWidth,
+         *               turboThreshold
+         * @product      highstock
+         * @optionparent plotOptions.flags
          */
-        ''; // adds doclets above to transpiled file
-
-    });
-    _registerModule(_modules, 'Extensions/RangeSelector.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Core/Options.js'], _modules['Core/Renderer/SVG/SVGElement.js'], _modules['Core/Utilities.js']], function (Axis, Chart, H, O, SVGElement, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
-         *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
-         *
-         * */
-        var defaultOptions = O.defaultOptions;
-        var addEvent = U.addEvent,
-            createElement = U.createElement,
-            css = U.css,
-            defined = U.defined,
-            destroyObjectProperties = U.destroyObjectProperties,
-            discardElement = U.discardElement,
-            extend = U.extend,
-            fireEvent = U.fireEvent,
-            isNumber = U.isNumber,
-            merge = U.merge,
-            objectEach = U.objectEach,
-            pick = U.pick,
-            pInt = U.pInt,
-            splat = U.splat;
+        {
+          /**
+           * In case the flag is placed on a series, on what point key to place
+           * it. Line and columns have one key, `y`. In range or OHLC-type series,
+           * however, the flag can optionally be placed on the `open`, `high`,
+           * `low` or `close` key.
+           *
+           * @sample {highstock} stock/plotoptions/flags-onkey/
+           *         Range series, flag on high
+           *
+           * @type       {string}
+           * @default    y
+           * @since      4.2.2
+           * @product    highstock
+           * @validvalue ["y", "open", "high", "low", "close"]
+           * @apioption  plotOptions.flags.onKey
+           */
+          /**
+           * The id of the series that the flags should be drawn on. If no id
+           * is given, the flags are drawn on the x axis.
+           *
+           * @sample {highstock} stock/plotoptions/flags/
+           *         Flags on series and on x axis
+           *
+           * @type      {string}
+           * @product   highstock
+           * @apioption plotOptions.flags.onSeries
+           */
+          pointRange: 0,
+          /**
+           * Whether the flags are allowed to overlap sideways. If `false`, the
+           * flags are moved sideways using an algorithm that seeks to place every
+           * flag as close as possible to its original position.
+           *
+           * @sample {highstock} stock/plotoptions/flags-allowoverlapx
+           *         Allow sideways overlap
+           *
+           * @since 6.0.4
+           */
+          allowOverlapX: false,
+          /**
+           * The shape of the marker. Can be one of "flag", "circlepin",
+           * "squarepin", or an image of the format `url(/path-to-image.jpg)`.
+           * Individual shapes can also be set for each point.
+           *
+           * @sample {highstock} stock/plotoptions/flags/
+           *         Different shapes
+           *
+           * @type    {Highcharts.FlagsShapeValue}
+           * @product highstock
+           */
+          shape: "flag",
+          /**
+           * When multiple flags in the same series fall on the same value, this
+           * number determines the vertical offset between them.
+           *
+           * @sample {highstock} stock/plotoptions/flags-stackdistance/
+           *         A greater stack distance
+           *
+           * @product highstock
+           */
+          stackDistance: 12,
+          /**
+           * Text alignment for the text inside the flag.
+           *
+           * @since      5.0.0
+           * @product    highstock
+           * @validvalue ["left", "center", "right"]
+           */
+          textAlign: "center",
+          /**
+           * Specific tooltip options for flag series. Flag series tooltips are
+           * different from most other types in that a flag doesn't have a data
+           * value, so the tooltip rather displays the `text` option for each
+           * point.
+           *
+           * @extends   plotOptions.series.tooltip
+           * @excluding changeDecimals, valueDecimals, valuePrefix, valueSuffix
+           * @product   highstock
+           */
+          tooltip: {
+            pointFormat: "{point.text}<br/>",
+          },
+          threshold: null,
+          /**
+           * The text to display on each flag. This can be defined on series
+           * level, or individually for each point. Defaults to `"A"`.
+           *
+           * @type      {string}
+           * @default   A
+           * @product   highstock
+           * @apioption plotOptions.flags.title
+           */
+          /**
+           * The y position of the top left corner of the flag relative to either
+           * the series (if onSeries is defined), or the x axis. Defaults to
+           * `-30`.
+           *
+           * @product highstock
+           */
+          y: -30,
+          /**
+           * Whether to use HTML to render the flag texts. Using HTML allows for
+           * advanced formatting, images and reliable bi-directional text
+           * rendering. Note that exported images won't respect the HTML, and that
+           * HTML won't respect Z-index settings.
+           *
+           * @type      {boolean}
+           * @default   false
+           * @since     1.3
+           * @product   highstock
+           * @apioption plotOptions.flags.useHTML
+           */
+          /**
+           * Fixed width of the flag's shape. By default, width is autocalculated
+           * according to the flag's title.
+           *
+           * @sample {highstock} stock/demo/flags-shapes/
+           *         Flags with fixed width
+           *
+           * @type      {number}
+           * @product   highstock
+           * @apioption plotOptions.flags.width
+           */
+          /**
+           * Fixed height of the flag's shape. By default, height is
+           * autocalculated according to the flag's title.
+           *
+           * @type      {number}
+           * @product   highstock
+           * @apioption plotOptions.flags.height
+           */
+          /**
+           * The fill color for the flags.
+           *
+           * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @product highstock
+           */
+          fillColor: "#ffffff",
+          /**
+           * The color of the line/border of the flag.
+           *
+           * In styled mode, the stroke is set in the
+           * `.highcharts-flag-series.highcharts-point` rule.
+           *
+           * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+           * @default   #000000
+           * @product   highstock
+           * @apioption plotOptions.flags.lineColor
+           */
+          /**
+           * The pixel width of the flag's line/border.
+           *
+           * @product highstock
+           */
+          lineWidth: 1,
+          states: {
+            /**
+             * @extends plotOptions.column.states.hover
+             * @product highstock
+             */
+            hover: {
+              /**
+               * The color of the line/border of the flag.
+               *
+               * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+               * @product highstock
+               */
+              lineColor: "#000000",
+              /**
+               * The fill or background color of the flag.
+               *
+               * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+               * @product highstock
+               */
+              fillColor: "#ccd6eb",
+            },
+          },
+          /**
+           * The text styles of the flag.
+           *
+           * In styled mode, the styles are set in the
+           * `.highcharts-flag-series .highcharts-point` rule.
+           *
+           * @type    {Highcharts.CSSObject}
+           * @default {"fontSize": "11px", "fontWeight": "bold"}
+           * @product highstock
+           */
+          style: {
+            /** @ignore-option */
+            fontSize: "11px",
+            /** @ignore-option */
+            fontWeight: "bold",
+          },
+        },
         /**
-         * Define the time span for the button
-         *
-         * @typedef {"all"|"day"|"hour"|"millisecond"|"minute"|"month"|"second"|"week"|"year"|"ytd"} Highcharts.RangeSelectorButtonTypeValue
+         * @lends seriesTypes.flags.prototype
          */
+        {
+          sorted: false,
+          noSharedTooltip: true,
+          allowDG: false,
+          takeOrdinalPosition: false,
+          trackerGroups: ["markerGroup"],
+          forceCrop: true,
+          /* eslint-disable no-invalid-this, valid-jsdoc */
+          /**
+           * Inherit the initialization from base Series.
+           *
+           * @private
+           * @borrows Highcharts.Series#init as Highcharts.seriesTypes.flags#init
+           */
+          init: Series.prototype.init,
+          /**
+           * Get presentational attributes
+           *
+           * @private
+           * @function Highcharts.seriesTypes.flags#pointAttribs
+           *
+           * @param {Highcharts.Point} point
+           *
+           * @param {string} [state]
+           *
+           * @return {Highcharts.SVGAttributes}
+           */
+          pointAttribs: function (point, state) {
+            var options = this.options,
+              color = (point && point.color) || this.color,
+              lineColor = options.lineColor,
+              lineWidth = point && point.lineWidth,
+              fill = (point && point.fillColor) || options.fillColor;
+            if (state) {
+              fill = options.states[state].fillColor;
+              lineColor = options.states[state].lineColor;
+              lineWidth = options.states[state].lineWidth;
+            }
+            return {
+              fill: fill || color,
+              stroke: lineColor || color,
+              "stroke-width": lineWidth || options.lineWidth || 0,
+            };
+          },
+          translate: OnSeriesMixin.translate,
+          getPlotBox: OnSeriesMixin.getPlotBox,
+          /**
+           * Draw the markers.
+           *
+           * @private
+           * @function Highcharts.seriesTypes.flags#drawPoints
+           * @return {void}
+           */
+          drawPoints: function () {
+            var series = this,
+              points = series.points,
+              chart = series.chart,
+              renderer = chart.renderer,
+              plotX,
+              plotY,
+              inverted = chart.inverted,
+              options = series.options,
+              optionsY = options.y,
+              shape,
+              i,
+              point,
+              graphic,
+              stackIndex,
+              anchorY,
+              attribs,
+              outsideRight,
+              yAxis = series.yAxis,
+              boxesMap = {},
+              boxes = [],
+              centered;
+            i = points.length;
+            while (i--) {
+              point = points[i];
+              outsideRight =
+                (inverted ? point.plotY : point.plotX) > series.xAxis.len;
+              plotX = point.plotX;
+              stackIndex = point.stackIndex;
+              shape = point.options.shape || options.shape;
+              plotY = point.plotY;
+              if (typeof plotY !== "undefined") {
+                plotY =
+                  point.plotY +
+                  optionsY -
+                  (typeof stackIndex !== "undefined" &&
+                    stackIndex * options.stackDistance);
+              }
+              // skip connectors for higher level stacked points
+              point.anchorX = stackIndex ? void 0 : point.plotX;
+              anchorY = stackIndex ? void 0 : point.plotY;
+              centered = shape !== "flag";
+              graphic = point.graphic;
+              // Only draw the point if y is defined and the flag is within
+              // the visible area
+              if (typeof plotY !== "undefined" && plotX >= 0 && !outsideRight) {
+                // Create the flag
+                if (!graphic) {
+                  graphic = point.graphic = renderer.label(
+                    "",
+                    null,
+                    null,
+                    shape,
+                    null,
+                    null,
+                    options.useHTML
+                  );
+                  if (!chart.styledMode) {
+                    graphic
+                      .attr(series.pointAttribs(point))
+                      .css(merge(options.style, point.style));
+                  }
+                  graphic
+                    .attr({
+                      align: centered ? "center" : "left",
+                      width: options.width,
+                      height: options.height,
+                      "text-align": options.textAlign,
+                    })
+                    .addClass("highcharts-point")
+                    .add(series.markerGroup);
+                  // Add reference to the point for tracker (#6303)
+                  if (point.graphic.div) {
+                    point.graphic.div.point = point;
+                  }
+                  if (!chart.styledMode) {
+                    graphic.shadow(options.shadow);
+                  }
+                  graphic.isNew = true;
+                }
+                if (plotX > 0) {
+                  // #3119
+                  plotX -= graphic.strokeWidth() % 2; // #4285
+                }
+                // Plant the flag
+                attribs = {
+                  y: plotY,
+                  anchorY: anchorY,
+                };
+                if (options.allowOverlapX) {
+                  attribs.x = plotX;
+                  attribs.anchorX = point.anchorX;
+                }
+                graphic
+                  .attr({
+                    text: point.options.title || options.title || "A",
+                  })
+                  [graphic.isNew ? "attr" : "animate"](attribs);
+                // Rig for the distribute function
+                if (!options.allowOverlapX) {
+                  if (!boxesMap[point.plotX]) {
+                    boxesMap[point.plotX] = {
+                      align: centered ? 0.5 : 0,
+                      size: graphic.width,
+                      target: plotX,
+                      anchorX: plotX,
+                    };
+                  } else {
+                    boxesMap[point.plotX].size = Math.max(
+                      boxesMap[point.plotX].size,
+                      graphic.width
+                    );
+                  }
+                }
+                // Set the tooltip anchor position
+                point.tooltipPos = [plotX, plotY + yAxis.pos - chart.plotTop]; // #6327
+              } else if (graphic) {
+                point.graphic = graphic.destroy();
+              }
+            }
+            // Handle X-dimension overlapping
+            if (!options.allowOverlapX) {
+              objectEach(boxesMap, function (box) {
+                box.plotX = box.anchorX;
+                boxes.push(box);
+              });
+              H.distribute(boxes, inverted ? yAxis.len : this.xAxis.len, 100);
+              points.forEach(function (point) {
+                var box = point.graphic && boxesMap[point.plotX];
+                if (box) {
+                  point.graphic[point.graphic.isNew ? "attr" : "animate"]({
+                    x: box.pos + box.align * box.size,
+                    anchorX: point.anchorX,
+                  });
+                  // Hide flag when its box position is not specified
+                  // (#8573, #9299)
+                  if (!defined(box.pos)) {
+                    point.graphic.attr({
+                      x: -9999,
+                      anchorX: -9999,
+                    });
+                    point.graphic.isNew = true;
+                  } else {
+                    point.graphic.isNew = false;
+                  }
+                }
+              });
+            }
+            // Can be a mix of SVG and HTML and we need events for both (#6303)
+            if (options.useHTML) {
+              wrap(series.markerGroup, "on", function (proceed) {
+                return SVGElement.prototype.on.apply(
+                  // for HTML
+                  proceed.apply(this, [].slice.call(arguments, 1)),
+                  // and for SVG
+                  [].slice.call(arguments, 1)
+                );
+              });
+            }
+          },
+          /**
+           * Extend the column trackers with listeners to expand and contract
+           * stacks.
+           *
+           * @private
+           * @function Highcharts.seriesTypes.flags#drawTracker
+           * @return {void}
+           */
+          drawTracker: function () {
+            var series = this,
+              points = series.points;
+            TrackerMixin.drawTrackerPoint.apply(this);
+            /* *
+             * Bring each stacked flag up on mouse over, this allows readability
+             * of vertically stacked elements as well as tight points on the x
+             * axis. #1924.
+             */
+            points.forEach(function (point) {
+              var graphic = point.graphic;
+              if (graphic) {
+                addEvent(graphic.element, "mouseover", function () {
+                  // Raise this point
+                  if (point.stackIndex > 0 && !point.raised) {
+                    point._y = graphic.y;
+                    graphic.attr({
+                      y: point._y - 8,
+                    });
+                    point.raised = true;
+                  }
+                  // Revert other raised points
+                  points.forEach(function (otherPoint) {
+                    if (
+                      otherPoint !== point &&
+                      otherPoint.raised &&
+                      otherPoint.graphic
+                    ) {
+                      otherPoint.graphic.attr({
+                        y: otherPoint._y,
+                      });
+                      otherPoint.raised = false;
+                    }
+                  });
+                });
+              }
+            });
+          },
+          /**
+           * Disable animation, but keep clipping (#8546).
+           *
+           * @private
+           * @function Highcharts.seriesTypes.flags#animate
+           * @param {boolean} [init]
+           * @return {void}
+           */
+          animate: function (init) {
+            if (init) {
+              this.setClip();
+            }
+          },
+          /**
+           * @private
+           * @function Highcharts.seriesTypes.flags#setClip
+           * @return {void}
+           */
+          setClip: function () {
+            Series.prototype.setClip.apply(this, arguments);
+            if (this.options.clip !== false && this.sharedClipKey) {
+              this.markerGroup.clip(this.chart[this.sharedClipKey]);
+            }
+          },
+          /**
+           * @private
+           * @function Highcharts.seriesTypes.flags#buildKDTree
+           */
+          buildKDTree: noop,
+          /**
+           * Don't invert the flag marker group (#4960).
+           *
+           * @private
+           * @function Highcharts.seriesTypes.flags#invertGroups
+           */
+          invertGroups: noop,
+          /* eslint-enable no-invalid-this, valid-jsdoc */
+        },
         /**
-         * Callback function to react on button clicks.
-         *
-         * @callback Highcharts.RangeSelectorClickCallbackFunction
-         *
-         * @param {global.Event} e
-         *        Event arguments.
-         *
-         * @param {boolean|undefined}
-         *        Return false to cancel the default button event.
+         * @lends Highcharts.seriesTypes.flag.prototype.pointClass.prototype
          */
+        {
+          isValid: function () {
+            // #9233 - Prevent from treating flags as null points (even if
+            // they have no y values defined).
+            return isNumber(this.y) || typeof this.y === "undefined";
+          },
+        }
+      );
+      // create the flag icon with anchor
+      symbols.flag = function (x, y, w, h, options) {
+        var anchorX = (options && options.anchorX) || x,
+          anchorY = (options && options.anchorY) || y;
+        // To do: unwanted any cast because symbols.circle has wrong type, it
+        // actually returns an SVGPathArray
+        var path = symbols.circle(anchorX - 1, anchorY - 1, 2, 2);
+        path.push(
+          ["M", anchorX, anchorY],
+          ["L", x, y + h],
+          ["L", x, y],
+          ["L", x + w, y],
+          ["L", x + w, y + h],
+          ["L", x, y + h],
+          ["Z"]
+        );
+        return path;
+      };
+      /**
+       * Create the circlepin and squarepin icons with anchor.
+       * @private
+       * @param {string} shape - circle or square
+       * @return {void}
+       */
+      function createPinSymbol(shape) {
+        symbols[shape + "pin"] = function (x, y, w, h, options) {
+          var anchorX = options && options.anchorX,
+            anchorY = options && options.anchorY,
+            path;
+          // For single-letter flags, make sure circular flags are not taller
+          // than their width
+          if (shape === "circle" && h > w) {
+            x -= Math.round((h - w) / 2);
+            w = h;
+          }
+          path = symbols[shape](x, y, w, h);
+          if (anchorX && anchorY) {
+            /**
+             * If the label is below the anchor, draw the connecting line from
+             * the top edge of the label, otherwise start drawing from the
+             * bottom edge
+             */
+            var labelX = anchorX;
+            if (shape === "circle") {
+              labelX = x + w / 2;
+            } else {
+              var startSeg = path[0];
+              var endSeg = path[1];
+              if (startSeg[0] === "M" && endSeg[0] === "L") {
+                labelX = (startSeg[1] + endSeg[1]) / 2;
+              }
+            }
+            var labelY = y > anchorY ? y : y + h;
+            path.push(["M", labelX, labelY], ["L", anchorX, anchorY]);
+            path = path.concat(symbols.circle(anchorX - 1, anchorY - 1, 2, 2));
+          }
+          return path;
+        };
+      }
+      createPinSymbol("circle");
+      createPinSymbol("square");
+      /**
+       * The symbol callbacks are generated on the SVGRenderer object in all browsers.
+       * Even VML browsers need this in order to generate shapes in export. Now share
+       * them with the VMLRenderer.
+       */
+      if (Renderer === VMLRenderer) {
+        ["circlepin", "flag", "squarepin"].forEach(function (shape) {
+          VMLRenderer.prototype.symbols[shape] = symbols[shape];
+        });
+      }
+      /**
+       * A `flags` series. If the [type](#series.flags.type) option is not
+       * specified, it is inherited from [chart.type](#chart.type).
+       *
+       * @extends   series,plotOptions.flags
+       * @excluding animation, borderColor, borderRadius, borderWidth, colorByPoint,
+       *            connectNulls, dashStyle, dataGrouping, dataParser, dataURL,
+       *            gapSize, gapUnit, linecap, lineWidth, marker, pointPadding,
+       *            pointWidth, step, turboThreshold, useOhlcData
+       * @product   highstock
+       * @apioption series.flags
+       */
+      /**
+       * An array of data points for the series. For the `flags` series type,
+       * points can be given in the following ways:
+       *
+       * 1. An array of objects with named values. The following snippet shows only a
+       *    few settings, see the complete options set below. If the total number of
+       *    data points exceeds the series'
+       *    [turboThreshold](#series.flags.turboThreshold), this option is not
+       *    available.
+       *    ```js
+       *    data: [{
+       *        x: 1,
+       *        title: "A",
+       *        text: "First event"
+       *    }, {
+       *        x: 1,
+       *        title: "B",
+       *        text: "Second event"
+       *    }]
+       *    ```
+       *
+       * @type      {Array<*>}
+       * @extends   series.line.data
+       * @excluding dataLabels, marker, name, y
+       * @product   highstock
+       * @apioption series.flags.data
+       */
+      /**
+       * The fill color of an individual flag. By default it inherits from
+       * the series color.
+       *
+       * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}
+       * @product   highstock
+       * @apioption series.flags.data.fillColor
+       */
+      /**
+       * The longer text to be shown in the flag's tooltip.
+       *
+       * @type      {string}
+       * @product   highstock
+       * @apioption series.flags.data.text
+       */
+      /**
+       * The short text to be shown on the flag.
+       *
+       * @type      {string}
+       * @product   highstock
+       * @apioption series.flags.data.title
+       */
+      (""); // adds doclets above to transpiled file
+    }
+  );
+  _registerModule(
+    _modules,
+    "Extensions/RangeSelector.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Globals.js"],
+      _modules["Core/Options.js"],
+      _modules["Core/Renderer/SVG/SVGElement.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, Chart, H, O, SVGElement, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var defaultOptions = O.defaultOptions;
+      var addEvent = U.addEvent,
+        createElement = U.createElement,
+        css = U.css,
+        defined = U.defined,
+        destroyObjectProperties = U.destroyObjectProperties,
+        discardElement = U.discardElement,
+        extend = U.extend,
+        fireEvent = U.fireEvent,
+        isNumber = U.isNumber,
+        merge = U.merge,
+        objectEach = U.objectEach,
+        pick = U.pick,
+        pInt = U.pInt,
+        splat = U.splat;
+      /**
+       * Define the time span for the button
+       *
+       * @typedef {"all"|"day"|"hour"|"millisecond"|"minute"|"month"|"second"|"week"|"year"|"ytd"} Highcharts.RangeSelectorButtonTypeValue
+       */
+      /**
+       * Callback function to react on button clicks.
+       *
+       * @callback Highcharts.RangeSelectorClickCallbackFunction
+       *
+       * @param {global.Event} e
+       *        Event arguments.
+       *
+       * @param {boolean|undefined}
+       *        Return false to cancel the default button event.
+       */
+      /**
+       * Callback function to parse values entered in the input boxes and return a
+       * valid JavaScript time as milliseconds since 1970.
+       *
+       * @callback Highcharts.RangeSelectorParseCallbackFunction
+       *
+       * @param {string} value
+       *        Input value to parse.
+       *
+       * @return {number}
+       *         Parsed JavaScript time value.
+       */
+      /* ************************************************************************** *
+       * Start Range Selector code                                                  *
+       * ************************************************************************** */
+      extend(defaultOptions, {
         /**
-         * Callback function to parse values entered in the input boxes and return a
-         * valid JavaScript time as milliseconds since 1970.
-         *
-         * @callback Highcharts.RangeSelectorParseCallbackFunction
+         * The range selector is a tool for selecting ranges to display within
+         * the chart. It provides buttons to select preconfigured ranges in
+         * the chart, like 1 day, 1 week, 1 month etc. It also provides input
+         * boxes where min and max dates can be manually input.
          *
-         * @param {string} value
-         *        Input value to parse.
-         *
-         * @return {number}
-         *         Parsed JavaScript time value.
+         * @product      highstock gantt
+         * @optionparent rangeSelector
          */
-        /* ************************************************************************** *
-         * Start Range Selector code                                                  *
-         * ************************************************************************** */
-        extend(defaultOptions, {
+        rangeSelector: {
+          /**
+           * Whether to enable all buttons from the start. By default buttons are
+           * only enabled if the corresponding time range exists on the X axis,
+           * but enabling all buttons allows for dynamically loading different
+           * time ranges.
+           *
+           * @sample {highstock} stock/rangeselector/allbuttonsenabled-true/
+           *         All buttons enabled
+           *
+           * @type      {boolean}
+           * @default   false
+           * @since     2.0.3
+           * @apioption rangeSelector.allButtonsEnabled
+           */
+          /**
+           * An array of configuration objects for the buttons.
+           *
+           * Defaults to:
+           * ```js
+           * buttons: [{
+           *     type: 'month',
+           *     count: 1,
+           *     text: '1m'
+           * }, {
+           *     type: 'month',
+           *     count: 3,
+           *     text: '3m'
+           * }, {
+           *     type: 'month',
+           *     count: 6,
+           *     text: '6m'
+           * }, {
+           *     type: 'ytd',
+           *     text: 'YTD'
+           * }, {
+           *     type: 'year',
+           *     count: 1,
+           *     text: '1y'
+           * }, {
+           *     type: 'all',
+           *     text: 'All'
+           * }]
+           * ```
+           *
+           * @sample {highstock} stock/rangeselector/datagrouping/
+           *         Data grouping by buttons
+           *
+           * @type      {Array<*>}
+           * @apioption rangeSelector.buttons
+           */
+          /**
+           * How many units of the defined type the button should span. If `type`
+           * is "month" and `count` is 3, the button spans three months.
+           *
+           * @type      {number}
+           * @default   1
+           * @apioption rangeSelector.buttons.count
+           */
+          /**
+           * Fires when clicking on the rangeSelector button. One parameter,
+           * event, is passed to the function, containing common event
+           * information.
+           *
+           * ```js
+           * click: function(e) {
+           *   //console.log(this);
+           * }
+           * ```
+           *
+           * Return false to stop default button's click action.
+           *
+           * @sample {highstock} stock/rangeselector/button-click/
+           *         Click event on the button
+           *
+           * @type      {Highcharts.RangeSelectorClickCallbackFunction}
+           * @apioption rangeSelector.buttons.events.click
+           */
+          /**
+           * Additional range (in milliseconds) added to the end of the calculated
+           * time span.
+           *
+           * @sample {highstock} stock/rangeselector/min-max-offsets/
+           *         Button offsets
+           *
+           * @type      {number}
+           * @default   0
+           * @since     6.0.0
+           * @apioption rangeSelector.buttons.offsetMax
+           */
+          /**
+           * Additional range (in milliseconds) added to the start of the
+           * calculated time span.
+           *
+           * @sample {highstock} stock/rangeselector/min-max-offsets/
+           *         Button offsets
+           *
+           * @type      {number}
+           * @default   0
+           * @since     6.0.0
+           * @apioption rangeSelector.buttons.offsetMin
+           */
+          /**
+           * When buttons apply dataGrouping on a series, by default zooming
+           * in/out will deselect buttons and unset dataGrouping. Enable this
+           * option to keep buttons selected when extremes change.
+           *
+           * @sample {highstock} stock/rangeselector/preserve-datagrouping/
+           *         Different preserveDataGrouping settings
+           *
+           * @type      {boolean}
+           * @default   false
+           * @since     6.1.2
+           * @apioption rangeSelector.buttons.preserveDataGrouping
+           */
+          /**
+           * A custom data grouping object for each button.
+           *
+           * @see [series.dataGrouping](#plotOptions.series.dataGrouping)
+           *
+           * @sample {highstock} stock/rangeselector/datagrouping/
+           *         Data grouping by range selector buttons
+           *
+           * @type      {*}
+           * @extends   plotOptions.series.dataGrouping
+           * @apioption rangeSelector.buttons.dataGrouping
+           */
+          /**
+           * The text for the button itself.
+           *
+           * @type      {string}
+           * @apioption rangeSelector.buttons.text
+           */
+          /**
+           * Defined the time span for the button. Can be one of `millisecond`,
+           * `second`, `minute`, `hour`, `day`, `week`, `month`, `year`, `ytd`,
+           * and `all`.
+           *
+           * @type       {Highcharts.RangeSelectorButtonTypeValue}
+           * @apioption  rangeSelector.buttons.type
+           */
+          /**
+           * The space in pixels between the buttons in the range selector.
+           *
+           * @type      {number}
+           * @default   0
+           * @apioption rangeSelector.buttonSpacing
+           */
+          /**
+           * Enable or disable the range selector.
+           *
+           * @sample {highstock} stock/rangeselector/enabled/
+           *         Disable the range selector
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption rangeSelector.enabled
+           */
+          /**
+           * The vertical alignment of the rangeselector box. Allowed properties
+           * are `top`, `middle`, `bottom`.
+           *
+           * @sample {highstock} stock/rangeselector/vertical-align-middle/
+           *         Middle
+           * @sample {highstock} stock/rangeselector/vertical-align-bottom/
+           *         Bottom
+           *
+           * @type  {Highcharts.VerticalAlignValue}
+           * @since 6.0.0
+           */
+          verticalAlign: "top",
+          /**
+           * A collection of attributes for the buttons. The object takes SVG
+           * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,
+           * a collection of CSS properties for the text.
+           *
+           * The object can also be extended with states, so you can set
+           * presentational options for `hover`, `select` or `disabled` button
+           * states.
+           *
+           * CSS styles for the text label.
+           *
+           * In styled mode, the buttons are styled by the
+           * `.highcharts-range-selector-buttons .highcharts-button` rule with its
+           * different states.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type {Highcharts.SVGAttributes}
+           */
+          buttonTheme: {
+            /** @ignore */
+            width: 28,
+            /** @ignore */
+            height: 18,
+            /** @ignore */
+            padding: 2,
+            /** @ignore */
+            zIndex: 7, // #484, #852
+          },
+          /**
+           * When the rangeselector is floating, the plot area does not reserve
+           * space for it. This opens for positioning anywhere on the chart.
+           *
+           * @sample {highstock} stock/rangeselector/floating/
+           *         Placing the range selector between the plot area and the
+           *         navigator
+           *
+           * @since 6.0.0
+           */
+          floating: false,
+          /**
+           * The x offset of the range selector relative to its horizontal
+           * alignment within `chart.spacingLeft` and `chart.spacingRight`.
+           *
+           * @since 6.0.0
+           */
+          x: 0,
+          /**
+           * The y offset of the range selector relative to its horizontal
+           * alignment within `chart.spacingLeft` and `chart.spacingRight`.
+           *
+           * @since 6.0.0
+           */
+          y: 0,
+          /**
+           * Deprecated. The height of the range selector. Currently it is
+           * calculated dynamically.
+           *
+           * @deprecated
+           * @type  {number|undefined}
+           * @since 2.1.9
+           */
+          height: void 0,
+          /**
+           * The border color of the date input boxes.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {Highcharts.ColorString}
+           * @default   #cccccc
+           * @since     1.3.7
+           * @apioption rangeSelector.inputBoxBorderColor
+           */
+          /**
+           * The pixel height of the date input boxes.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {number}
+           * @default   17
+           * @since     1.3.7
+           * @apioption rangeSelector.inputBoxHeight
+           */
+          /**
+           * CSS for the container DIV holding the input boxes. Deprecated as
+           * of 1.2.5\. Use [inputPosition](#rangeSelector.inputPosition) instead.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @deprecated
+           * @type      {Highcharts.CSSObject}
+           * @apioption rangeSelector.inputBoxStyle
+           */
+          /**
+           * The pixel width of the date input boxes.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {number}
+           * @default   90
+           * @since     1.3.7
+           * @apioption rangeSelector.inputBoxWidth
+           */
+          /**
+           * The date format in the input boxes when not selected for editing.
+           * Defaults to `%b %e, %Y`.
+           *
+           * @sample {highstock} stock/rangeselector/input-format/
+           *         Milliseconds in the range selector
+           *
+           * @type      {string}
+           * @default   %b %e, %Y
+           * @apioption rangeSelector.inputDateFormat
+           */
+          /**
+           * A custom callback function to parse values entered in the input boxes
+           * and return a valid JavaScript time as milliseconds since 1970.
+           * The first argument passed is a value to parse,
+           * second is a boolean indicating use of the UTC time.
+           *
+           * @sample {highstock} stock/rangeselector/input-format/
+           *         Milliseconds in the range selector
+           *
+           * @type      {Highcharts.RangeSelectorParseCallbackFunction}
+           * @since     1.3.3
+           * @apioption rangeSelector.inputDateParser
+           */
+          /**
+           * The date format in the input boxes when they are selected for
+           * editing. This must be a format that is recognized by JavaScript
+           * Date.parse.
+           *
+           * @sample {highstock} stock/rangeselector/input-format/
+           *         Milliseconds in the range selector
+           *
+           * @type      {string}
+           * @default   %Y-%m-%d
+           * @apioption rangeSelector.inputEditDateFormat
+           */
+          /**
+           * Enable or disable the date input boxes. Defaults to enabled when
+           * there is enough space, disabled if not (typically mobile).
+           *
+           * @sample {highstock} stock/rangeselector/input-datepicker/
+           *         Extending the input with a jQuery UI datepicker
+           *
+           * @type      {boolean}
+           * @default   true
+           * @apioption rangeSelector.inputEnabled
+           */
+          /**
+           * Positioning for the input boxes. Allowed properties are `align`,
+           *  `x` and `y`.
+           *
+           * @since 1.2.4
+           */
+          inputPosition: {
             /**
-             * The range selector is a tool for selecting ranges to display within
-             * the chart. It provides buttons to select preconfigured ranges in
-             * the chart, like 1 day, 1 week, 1 month etc. It also provides input
-             * boxes where min and max dates can be manually input.
+             * The alignment of the input box. Allowed properties are `left`,
+             * `center`, `right`.
              *
-             * @product      highstock gantt
-             * @optionparent rangeSelector
-             */
-            rangeSelector: {
-                /**
-                 * Whether to enable all buttons from the start. By default buttons are
-                 * only enabled if the corresponding time range exists on the X axis,
-                 * but enabling all buttons allows for dynamically loading different
-                 * time ranges.
-                 *
-                 * @sample {highstock} stock/rangeselector/allbuttonsenabled-true/
-                 *         All buttons enabled
-                 *
-                 * @type      {boolean}
-                 * @default   false
-                 * @since     2.0.3
-                 * @apioption rangeSelector.allButtonsEnabled
-                 */
-                /**
-                 * An array of configuration objects for the buttons.
-                 *
-                 * Defaults to:
-                 * ```js
-                 * buttons: [{
-                 *     type: 'month',
-                 *     count: 1,
-                 *     text: '1m'
-                 * }, {
-                 *     type: 'month',
-                 *     count: 3,
-                 *     text: '3m'
-                 * }, {
-                 *     type: 'month',
-                 *     count: 6,
-                 *     text: '6m'
-                 * }, {
-                 *     type: 'ytd',
-                 *     text: 'YTD'
-                 * }, {
-                 *     type: 'year',
-                 *     count: 1,
-                 *     text: '1y'
-                 * }, {
-                 *     type: 'all',
-                 *     text: 'All'
-                 * }]
-                 * ```
-                 *
-                 * @sample {highstock} stock/rangeselector/datagrouping/
-                 *         Data grouping by buttons
-                 *
-                 * @type      {Array<*>}
-                 * @apioption rangeSelector.buttons
-                 */
-                /**
-                 * How many units of the defined type the button should span. If `type`
-                 * is "month" and `count` is 3, the button spans three months.
-                 *
-                 * @type      {number}
-                 * @default   1
-                 * @apioption rangeSelector.buttons.count
-                 */
-                /**
-                 * Fires when clicking on the rangeSelector button. One parameter,
-                 * event, is passed to the function, containing common event
-                 * information.
-                 *
-                 * ```js
-                 * click: function(e) {
-                 *   console.log(this);
-                 * }
-                 * ```
-                 *
-                 * Return false to stop default button's click action.
-                 *
-                 * @sample {highstock} stock/rangeselector/button-click/
-                 *         Click event on the button
-                 *
-                 * @type      {Highcharts.RangeSelectorClickCallbackFunction}
-                 * @apioption rangeSelector.buttons.events.click
-                 */
-                /**
-                 * Additional range (in milliseconds) added to the end of the calculated
-                 * time span.
-                 *
-                 * @sample {highstock} stock/rangeselector/min-max-offsets/
-                 *         Button offsets
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @since     6.0.0
-                 * @apioption rangeSelector.buttons.offsetMax
-                 */
-                /**
-                 * Additional range (in milliseconds) added to the start of the
-                 * calculated time span.
-                 *
-                 * @sample {highstock} stock/rangeselector/min-max-offsets/
-                 *         Button offsets
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @since     6.0.0
-                 * @apioption rangeSelector.buttons.offsetMin
-                 */
-                /**
-                 * When buttons apply dataGrouping on a series, by default zooming
-                 * in/out will deselect buttons and unset dataGrouping. Enable this
-                 * option to keep buttons selected when extremes change.
-                 *
-                 * @sample {highstock} stock/rangeselector/preserve-datagrouping/
-                 *         Different preserveDataGrouping settings
-                 *
-                 * @type      {boolean}
-                 * @default   false
-                 * @since     6.1.2
-                 * @apioption rangeSelector.buttons.preserveDataGrouping
-                 */
-                /**
-                 * A custom data grouping object for each button.
-                 *
-                 * @see [series.dataGrouping](#plotOptions.series.dataGrouping)
-                 *
-                 * @sample {highstock} stock/rangeselector/datagrouping/
-                 *         Data grouping by range selector buttons
-                 *
-                 * @type      {*}
-                 * @extends   plotOptions.series.dataGrouping
-                 * @apioption rangeSelector.buttons.dataGrouping
-                 */
-                /**
-                 * The text for the button itself.
-                 *
-                 * @type      {string}
-                 * @apioption rangeSelector.buttons.text
-                 */
-                /**
-                 * Defined the time span for the button. Can be one of `millisecond`,
-                 * `second`, `minute`, `hour`, `day`, `week`, `month`, `year`, `ytd`,
-                 * and `all`.
-                 *
-                 * @type       {Highcharts.RangeSelectorButtonTypeValue}
-                 * @apioption  rangeSelector.buttons.type
-                 */
-                /**
-                 * The space in pixels between the buttons in the range selector.
-                 *
-                 * @type      {number}
-                 * @default   0
-                 * @apioption rangeSelector.buttonSpacing
-                 */
-                /**
-                 * Enable or disable the range selector.
-                 *
-                 * @sample {highstock} stock/rangeselector/enabled/
-                 *         Disable the range selector
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption rangeSelector.enabled
-                 */
-                /**
-                 * The vertical alignment of the rangeselector box. Allowed properties
-                 * are `top`, `middle`, `bottom`.
-                 *
-                 * @sample {highstock} stock/rangeselector/vertical-align-middle/
-                 *         Middle
-                 * @sample {highstock} stock/rangeselector/vertical-align-bottom/
-                 *         Bottom
-                 *
-                 * @type  {Highcharts.VerticalAlignValue}
-                 * @since 6.0.0
-                 */
-                verticalAlign: 'top',
-                /**
-                 * A collection of attributes for the buttons. The object takes SVG
-                 * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,
-                 * a collection of CSS properties for the text.
-                 *
-                 * The object can also be extended with states, so you can set
-                 * presentational options for `hover`, `select` or `disabled` button
-                 * states.
-                 *
-                 * CSS styles for the text label.
-                 *
-                 * In styled mode, the buttons are styled by the
-                 * `.highcharts-range-selector-buttons .highcharts-button` rule with its
-                 * different states.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type {Highcharts.SVGAttributes}
-                 */
-                buttonTheme: {
-                    /** @ignore */
-                    width: 28,
-                    /** @ignore */
-                    height: 18,
-                    /** @ignore */
-                    padding: 2,
-                    /** @ignore */
-                    zIndex: 7 // #484, #852
-                },
-                /**
-                 * When the rangeselector is floating, the plot area does not reserve
-                 * space for it. This opens for positioning anywhere on the chart.
-                 *
-                 * @sample {highstock} stock/rangeselector/floating/
-                 *         Placing the range selector between the plot area and the
-                 *         navigator
-                 *
-                 * @since 6.0.0
-                 */
-                floating: false,
-                /**
-                 * The x offset of the range selector relative to its horizontal
-                 * alignment within `chart.spacingLeft` and `chart.spacingRight`.
-                 *
-                 * @since 6.0.0
-                 */
-                x: 0,
-                /**
-                 * The y offset of the range selector relative to its horizontal
-                 * alignment within `chart.spacingLeft` and `chart.spacingRight`.
-                 *
-                 * @since 6.0.0
-                 */
-                y: 0,
-                /**
-                 * Deprecated. The height of the range selector. Currently it is
-                 * calculated dynamically.
-                 *
-                 * @deprecated
-                 * @type  {number|undefined}
-                 * @since 2.1.9
-                 */
-                height: void 0,
-                /**
-                 * The border color of the date input boxes.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {Highcharts.ColorString}
-                 * @default   #cccccc
-                 * @since     1.3.7
-                 * @apioption rangeSelector.inputBoxBorderColor
-                 */
-                /**
-                 * The pixel height of the date input boxes.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {number}
-                 * @default   17
-                 * @since     1.3.7
-                 * @apioption rangeSelector.inputBoxHeight
-                 */
-                /**
-                 * CSS for the container DIV holding the input boxes. Deprecated as
-                 * of 1.2.5\. Use [inputPosition](#rangeSelector.inputPosition) instead.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @deprecated
-                 * @type      {Highcharts.CSSObject}
-                 * @apioption rangeSelector.inputBoxStyle
-                 */
-                /**
-                 * The pixel width of the date input boxes.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {number}
-                 * @default   90
-                 * @since     1.3.7
-                 * @apioption rangeSelector.inputBoxWidth
-                 */
-                /**
-                 * The date format in the input boxes when not selected for editing.
-                 * Defaults to `%b %e, %Y`.
-                 *
-                 * @sample {highstock} stock/rangeselector/input-format/
-                 *         Milliseconds in the range selector
-                 *
-                 * @type      {string}
-                 * @default   %b %e, %Y
-                 * @apioption rangeSelector.inputDateFormat
-                 */
-                /**
-                 * A custom callback function to parse values entered in the input boxes
-                 * and return a valid JavaScript time as milliseconds since 1970.
-                 * The first argument passed is a value to parse,
-                 * second is a boolean indicating use of the UTC time.
-                 *
-                 * @sample {highstock} stock/rangeselector/input-format/
-                 *         Milliseconds in the range selector
-                 *
-                 * @type      {Highcharts.RangeSelectorParseCallbackFunction}
-                 * @since     1.3.3
-                 * @apioption rangeSelector.inputDateParser
-                 */
-                /**
-                 * The date format in the input boxes when they are selected for
-                 * editing. This must be a format that is recognized by JavaScript
-                 * Date.parse.
-                 *
-                 * @sample {highstock} stock/rangeselector/input-format/
-                 *         Milliseconds in the range selector
-                 *
-                 * @type      {string}
-                 * @default   %Y-%m-%d
-                 * @apioption rangeSelector.inputEditDateFormat
-                 */
-                /**
-                 * Enable or disable the date input boxes. Defaults to enabled when
-                 * there is enough space, disabled if not (typically mobile).
-                 *
-                 * @sample {highstock} stock/rangeselector/input-datepicker/
-                 *         Extending the input with a jQuery UI datepicker
-                 *
-                 * @type      {boolean}
-                 * @default   true
-                 * @apioption rangeSelector.inputEnabled
-                 */
-                /**
-                 * Positioning for the input boxes. Allowed properties are `align`,
-                 *  `x` and `y`.
-                 *
-                 * @since 1.2.4
-                 */
-                inputPosition: {
-                    /**
-                     * The alignment of the input box. Allowed properties are `left`,
-                     * `center`, `right`.
-                     *
-                     * @sample {highstock} stock/rangeselector/input-button-position/
-                     *         Alignment
-                     *
-                     * @type  {Highcharts.AlignValue}
-                     * @since 6.0.0
-                     */
-                    align: 'right',
-                    /**
-                     * X offset of the input row.
-                     */
-                    x: 0,
-                    /**
-                     * Y offset of the input row.
-                     */
-                    y: 0
-                },
-                /**
-                 * The index of the button to appear pre-selected.
-                 *
-                 * @type      {number}
-                 * @apioption rangeSelector.selected
-                 */
-                /**
-                 * Positioning for the button row.
-                 *
-                 * @since 1.2.4
-                 */
-                buttonPosition: {
-                    /**
-                     * The alignment of the input box. Allowed properties are `left`,
-                     * `center`, `right`.
-                     *
-                     * @sample {highstock} stock/rangeselector/input-button-position/
-                     *         Alignment
-                     *
-                     * @type  {Highcharts.AlignValue}
-                     * @since 6.0.0
-                     */
-                    align: 'left',
-                    /**
-                     * X offset of the button row.
-                     */
-                    x: 0,
-                    /**
-                     * Y offset of the button row.
-                     */
-                    y: 0
-                },
-                /**
-                 * CSS for the HTML inputs in the range selector.
-                 *
-                 * In styled mode, the inputs are styled by the
-                 * `.highcharts-range-input text` rule in SVG mode, and
-                 * `input.highcharts-range-selector` when active.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type      {Highcharts.CSSObject}
-                 * @apioption rangeSelector.inputStyle
-                 */
-                /**
-                 * CSS styles for the labels - the Zoom, From and To texts.
-                 *
-                 * In styled mode, the labels are styled by the
-                 * `.highcharts-range-label` class.
-                 *
-                 * @sample {highstock} stock/rangeselector/styling/
-                 *         Styling the buttons and inputs
-                 *
-                 * @type {Highcharts.CSSObject}
-                 */
-                labelStyle: {
-                    /** @ignore */
-                    color: '#666666'
-                }
-            }
-        });
-        defaultOptions.lang = merge(defaultOptions.lang, 
+             * @sample {highstock} stock/rangeselector/input-button-position/
+             *         Alignment
+             *
+             * @type  {Highcharts.AlignValue}
+             * @since 6.0.0
+             */
+            align: "right",
+            /**
+             * X offset of the input row.
+             */
+            x: 0,
+            /**
+             * Y offset of the input row.
+             */
+            y: 0,
+          },
+          /**
+           * The index of the button to appear pre-selected.
+           *
+           * @type      {number}
+           * @apioption rangeSelector.selected
+           */
+          /**
+           * Positioning for the button row.
+           *
+           * @since 1.2.4
+           */
+          buttonPosition: {
+            /**
+             * The alignment of the input box. Allowed properties are `left`,
+             * `center`, `right`.
+             *
+             * @sample {highstock} stock/rangeselector/input-button-position/
+             *         Alignment
+             *
+             * @type  {Highcharts.AlignValue}
+             * @since 6.0.0
+             */
+            align: "left",
+            /**
+             * X offset of the button row.
+             */
+            x: 0,
+            /**
+             * Y offset of the button row.
+             */
+            y: 0,
+          },
+          /**
+           * CSS for the HTML inputs in the range selector.
+           *
+           * In styled mode, the inputs are styled by the
+           * `.highcharts-range-input text` rule in SVG mode, and
+           * `input.highcharts-range-selector` when active.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type      {Highcharts.CSSObject}
+           * @apioption rangeSelector.inputStyle
+           */
+          /**
+           * CSS styles for the labels - the Zoom, From and To texts.
+           *
+           * In styled mode, the labels are styled by the
+           * `.highcharts-range-label` class.
+           *
+           * @sample {highstock} stock/rangeselector/styling/
+           *         Styling the buttons and inputs
+           *
+           * @type {Highcharts.CSSObject}
+           */
+          labelStyle: {
+            /** @ignore */
+            color: "#666666",
+          },
+        },
+      });
+      defaultOptions.lang = merge(
+        defaultOptions.lang,
         /**
          * Language object. The language object is global and it can't be set
          * on each chart initialization. Instead, use `Highcharts.setOptions` to
@@ -7796,2098 +8380,2301 @@
          * @optionparent lang
          */
         {
-            /**
-             * The text for the label for the range selector buttons.
-             *
-             * @product highstock gantt
-             */
-            rangeSelectorZoom: 'Zoom',
-            /**
-             * The text for the label for the "from" input box in the range
-             * selector.
-             *
-             * @product highstock gantt
-             */
-            rangeSelectorFrom: 'From',
-            /**
-             * The text for the label for the "to" input box in the range selector.
-             *
-             * @product highstock gantt
-             */
-            rangeSelectorTo: 'To'
-        });
-        /* eslint-disable no-invalid-this, valid-jsdoc */
+          /**
+           * The text for the label for the range selector buttons.
+           *
+           * @product highstock gantt
+           */
+          rangeSelectorZoom: "Zoom",
+          /**
+           * The text for the label for the "from" input box in the range
+           * selector.
+           *
+           * @product highstock gantt
+           */
+          rangeSelectorFrom: "From",
+          /**
+           * The text for the label for the "to" input box in the range selector.
+           *
+           * @product highstock gantt
+           */
+          rangeSelectorTo: "To",
+        }
+      );
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * The range selector.
+       *
+       * @private
+       * @class
+       * @name Highcharts.RangeSelector
+       * @param {Highcharts.Chart} chart
+       */
+      var RangeSelector = /** @class */ (function () {
+        function RangeSelector(chart) {
+          /* *
+           *
+           * Properties
+           *
+           * */
+          this.buttons = void 0;
+          this.buttonOptions = RangeSelector.prototype.defaultButtons;
+          this.options = void 0;
+          this.chart = chart;
+          // Run RangeSelector
+          this.init(chart);
+        }
         /**
-         * The range selector.
+         * The method to run when one of the buttons in the range selectors is
+         * clicked
          *
          * @private
-         * @class
-         * @name Highcharts.RangeSelector
-         * @param {Highcharts.Chart} chart
+         * @function Highcharts.RangeSelector#clickButton
+         * @param {number} i
+         *        The index of the button
+         * @param {boolean} [redraw]
+         * @return {void}
          */
-        var RangeSelector = /** @class */ (function () {
-                function RangeSelector(chart) {
-                    /* *
-                     *
-                     * Properties
-                     *
-                     * */
-                    this.buttons = void 0;
-                this.buttonOptions = RangeSelector.prototype.defaultButtons;
-                this.options = void 0;
-                this.chart = chart;
-                // Run RangeSelector
-                this.init(chart);
+        RangeSelector.prototype.clickButton = function (i, redraw) {
+          var rangeSelector = this,
+            chart = rangeSelector.chart,
+            rangeOptions = rangeSelector.buttonOptions[i],
+            baseAxis = chart.xAxis[0],
+            unionExtremes =
+              (chart.scroller && chart.scroller.getUnionExtremes()) ||
+              baseAxis ||
+              {},
+            dataMin = unionExtremes.dataMin,
+            dataMax = unionExtremes.dataMax,
+            newMin,
+            newMax =
+              baseAxis &&
+              Math.round(Math.min(baseAxis.max, pick(dataMax, baseAxis.max))), // #1568
+            type = rangeOptions.type,
+            baseXAxisOptions,
+            range = rangeOptions._range,
+            rangeMin,
+            minSetting,
+            rangeSetting,
+            ctx,
+            ytdExtremes,
+            dataGrouping = rangeOptions.dataGrouping;
+          // chart has no data, base series is removed
+          if (dataMin === null || dataMax === null) {
+            return;
+          }
+          // Set the fixed range before range is altered
+          chart.fixedRange = range;
+          // Apply dataGrouping associated to button
+          if (dataGrouping) {
+            this.forcedDataGrouping = true;
+            Axis.prototype.setDataGrouping.call(
+              baseAxis || { chart: this.chart },
+              dataGrouping,
+              false
+            );
+            this.frozenStates = rangeOptions.preserveDataGrouping;
+          }
+          // Apply range
+          if (type === "month" || type === "year") {
+            if (!baseAxis) {
+              // This is set to the user options and picked up later when the
+              // axis is instantiated so that we know the min and max.
+              range = rangeOptions;
+            } else {
+              ctx = {
+                range: rangeOptions,
+                max: newMax,
+                chart: chart,
+                dataMin: dataMin,
+                dataMax: dataMax,
+              };
+              newMin = baseAxis.minFromRange.call(ctx);
+              if (isNumber(ctx.newMax)) {
+                newMax = ctx.newMax;
+              }
             }
-            /**
-             * The method to run when one of the buttons in the range selectors is
-             * clicked
-             *
-             * @private
-             * @function Highcharts.RangeSelector#clickButton
-             * @param {number} i
-             *        The index of the button
-             * @param {boolean} [redraw]
-             * @return {void}
-             */
-            RangeSelector.prototype.clickButton = function (i, redraw) {
-                var rangeSelector = this,
-                    chart = rangeSelector.chart,
-                    rangeOptions = rangeSelector.buttonOptions[i],
-                    baseAxis = chart.xAxis[0],
-                    unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {},
-                    dataMin = unionExtremes.dataMin,
-                    dataMax = unionExtremes.dataMax,
-                    newMin,
-                    newMax = baseAxis && Math.round(Math.min(baseAxis.max,
-                    pick(dataMax,
-                    baseAxis.max))), // #1568
-                    type = rangeOptions.type,
-                    baseXAxisOptions,
-                    range = rangeOptions._range,
-                    rangeMin,
-                    minSetting,
-                    rangeSetting,
-                    ctx,
-                    ytdExtremes,
-                    dataGrouping = rangeOptions.dataGrouping;
-                // chart has no data, base series is removed
-                if (dataMin === null || dataMax === null) {
-                    return;
-                }
-                // Set the fixed range before range is altered
-                chart.fixedRange = range;
-                // Apply dataGrouping associated to button
-                if (dataGrouping) {
-                    this.forcedDataGrouping = true;
-                    Axis.prototype.setDataGrouping.call(baseAxis || { chart: this.chart }, dataGrouping, false);
-                    this.frozenStates = rangeOptions.preserveDataGrouping;
-                }
-                // Apply range
-                if (type === 'month' || type === 'year') {
-                    if (!baseAxis) {
-                        // This is set to the user options and picked up later when the
-                        // axis is instantiated so that we know the min and max.
-                        range = rangeOptions;
-                    }
-                    else {
-                        ctx = {
-                            range: rangeOptions,
-                            max: newMax,
-                            chart: chart,
-                            dataMin: dataMin,
-                            dataMax: dataMax
-                        };
-                        newMin = baseAxis.minFromRange.call(ctx);
-                        if (isNumber(ctx.newMax)) {
-                            newMax = ctx.newMax;
-                        }
-                    }
-                    // Fixed times like minutes, hours, days
-                }
-                else if (range) {
-                    newMin = Math.max(newMax - range, dataMin);
-                    newMax = Math.min(newMin + range, dataMax);
-                }
-                else if (type === 'ytd') {
-                    // On user clicks on the buttons, or a delayed action running from
-                    // the beforeRender event (below), the baseAxis is defined.
-                    if (baseAxis) {
-                        // When "ytd" is the pre-selected button for the initial view,
-                        // its calculation is delayed and rerun in the beforeRender
-                        // event (below). When the series are initialized, but before
-                        // the chart is rendered, we have access to the xData array
-                        // (#942).
-                        if (typeof dataMax === 'undefined') {
-                            dataMin = Number.MAX_VALUE;
-                            dataMax = Number.MIN_VALUE;
-                            chart.series.forEach(function (series) {
-                                // reassign it to the last item
-                                var xData = series.xData;
-                                dataMin = Math.min(xData[0], dataMin);
-                                dataMax = Math.max(xData[xData.length - 1], dataMax);
-                            });
-                            redraw = false;
-                        }
-                        ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin, chart.time.useUTC);
-                        newMin = rangeMin = ytdExtremes.min;
-                        newMax = ytdExtremes.max;
-                        // "ytd" is pre-selected. We don't yet have access to processed
-                        // point and extremes data (things like pointStart and pointInterval
-                        // are missing), so we delay the process (#942)
-                    }
-                    else {
-                        rangeSelector.deferredYTDClick = i;
-                        return;
-                    }
-                }
-                else if (type === 'all' && baseAxis) {
-                    newMin = dataMin;
-                    newMax = dataMax;
-                }
-                if (defined(newMin)) {
-                    newMin += rangeOptions._offsetMin;
-                }
-                if (defined(newMax)) {
-                    newMax += rangeOptions._offsetMax;
-                }
-                rangeSelector.setSelected(i);
-                // Update the chart
-                if (!baseAxis) {
-                    // Axis not yet instanciated. Temporarily set min and range
-                    // options and remove them on chart load (#4317).
-                    baseXAxisOptions = splat(chart.options.xAxis)[0];
-                    rangeSetting = baseXAxisOptions.range;
-                    baseXAxisOptions.range = range;
-                    minSetting = baseXAxisOptions.min;
-                    baseXAxisOptions.min = rangeMin;
-                    addEvent(chart, 'load', function resetMinAndRange() {
-                        baseXAxisOptions.range = rangeSetting;
-                        baseXAxisOptions.min = minSetting;
-                    });
-                }
-                else {
-                    // Existing axis object. Set extremes after render time.
-                    baseAxis.setExtremes(newMin, newMax, pick(redraw, 1), null, // auto animation
-                    {
-                        trigger: 'rangeSelectorButton',
-                        rangeSelectorButton: rangeOptions
-                    });
-                }
-            };
-            /**
-             * Set the selected option. This method only sets the internal flag, it
-             * doesn't update the buttons or the actual zoomed range.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#setSelected
-             * @param {number} [selected]
-             * @return {void}
-             */
-            RangeSelector.prototype.setSelected = function (selected) {
-                this.selected = this.options.selected = selected;
-            };
-            /**
-             * Initialize the range selector
-             *
-             * @private
-             * @function Highcharts.RangeSelector#init
-             * @param {Highcharts.Chart} chart
-             * @return {void}
-             */
-            RangeSelector.prototype.init = function (chart) {
-                var rangeSelector = this,
-                    options = chart.options.rangeSelector,
-                    buttonOptions = options.buttons || rangeSelector.defaultButtons.slice(),
-                    selectedOption = options.selected,
-                    blurInputs = function () {
-                        var minInput = rangeSelector.minInput,
-                    maxInput = rangeSelector.maxInput;
-                    // #3274 in some case blur is not defined
-                    if (minInput && minInput.blur) {
-                        fireEvent(minInput, 'blur');
-                    }
-                    if (maxInput && maxInput.blur) {
-                        fireEvent(maxInput, 'blur');
-                    }
-                };
-                rangeSelector.chart = chart;
-                rangeSelector.options = options;
-                rangeSelector.buttons = [];
-                rangeSelector.buttonOptions = buttonOptions;
-                this.unMouseDown = addEvent(chart.container, 'mousedown', blurInputs);
-                this.unResize = addEvent(chart, 'resize', blurInputs);
-                // Extend the buttonOptions with actual range
-                buttonOptions.forEach(rangeSelector.computeButtonRange);
-                // zoomed range based on a pre-selected button index
-                if (typeof selectedOption !== 'undefined' &&
-                    buttonOptions[selectedOption]) {
-                    this.clickButton(selectedOption, false);
-                }
-                addEvent(chart, 'load', function () {
-                    // If a data grouping is applied to the current button, release it
-                    // when extremes change
-                    if (chart.xAxis && chart.xAxis[0]) {
-                        addEvent(chart.xAxis[0], 'setExtremes', function (e) {
-                            if (this.max - this.min !==
-                                chart.fixedRange &&
-                                e.trigger !== 'rangeSelectorButton' &&
-                                e.trigger !== 'updatedData' &&
-                                rangeSelector.forcedDataGrouping &&
-                                !rangeSelector.frozenStates) {
-                                this.setDataGrouping(false, false);
-                            }
-                        });
-                    }
-                });
-            };
-            /**
-             * Dynamically update the range selector buttons after a new range has been
-             * set
-             *
-             * @private
-             * @function Highcharts.RangeSelector#updateButtonStates
-             * @return {void}
-             */
-            RangeSelector.prototype.updateButtonStates = function () {
-                var rangeSelector = this,
-                    chart = this.chart,
-                    baseAxis = chart.xAxis[0],
-                    actualRange = Math.round(baseAxis.max - baseAxis.min),
-                    hasNoData = !baseAxis.hasVisibleSeries,
-                    day = 24 * 36e5, // A single day in milliseconds
-                    unionExtremes = (chart.scroller &&
-                        chart.scroller.getUnionExtremes()) || baseAxis,
-                    dataMin = unionExtremes.dataMin,
-                    dataMax = unionExtremes.dataMax,
-                    ytdExtremes = rangeSelector.getYTDExtremes(dataMax,
-                    dataMin,
-                    chart.time.useUTC),
-                    ytdMin = ytdExtremes.min,
-                    ytdMax = ytdExtremes.max,
-                    selected = rangeSelector.selected,
-                    selectedExists = isNumber(selected),
-                    allButtonsEnabled = rangeSelector.options.allButtonsEnabled,
-                    buttons = rangeSelector.buttons;
-                rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
-                    var range = rangeOptions._range,
-                        type = rangeOptions.type,
-                        count = rangeOptions.count || 1,
-                        button = buttons[i],
-                        state = 0,
-                        disable,
-                        select,
-                        offsetRange = rangeOptions._offsetMax -
-                            rangeOptions._offsetMin,
-                        isSelected = i === selected, 
-                        // Disable buttons where the range exceeds what is allowed in
-                        // the current view
-                        isTooGreatRange = range >
-                            dataMax - dataMin, 
-                        // Disable buttons where the range is smaller than the minimum
-                        // range
-                        isTooSmallRange = range < baseAxis.minRange, 
-                        // Do not select the YTD button if not explicitly told so
-                        isYTDButNotSelected = false, 
-                        // Disable the All button if we're already showing all
-                        isAllButAlreadyShowingAll = false,
-                        isSameRange = range === actualRange;
-                    // Months and years have a variable range so we check the extremes
-                    if ((type === 'month' || type === 'year') &&
-                        (actualRange + 36e5 >=
-                            { month: 28, year: 365 }[type] * day * count - offsetRange) &&
-                        (actualRange - 36e5 <=
-                            { month: 31, year: 366 }[type] * day * count + offsetRange)) {
-                        isSameRange = true;
-                    }
-                    else if (type === 'ytd') {
-                        isSameRange = (ytdMax - ytdMin + offsetRange) === actualRange;
-                        isYTDButNotSelected = !isSelected;
-                    }
-                    else if (type === 'all') {
-                        isSameRange = (baseAxis.max - baseAxis.min >=
-                            dataMax - dataMin);
-                        isAllButAlreadyShowingAll = (!isSelected &&
-                            selectedExists &&
-                            isSameRange);
-                    }
-                    // The new zoom area happens to match the range for a button - mark
-                    // it selected. This happens when scrolling across an ordinal gap.
-                    // It can be seen in the intraday demos when selecting 1h and scroll
-                    // across the night gap.
-                    disable = (!allButtonsEnabled &&
-                        (isTooGreatRange ||
-                            isTooSmallRange ||
-                            isAllButAlreadyShowingAll ||
-                            hasNoData));
-                    select = ((isSelected && isSameRange) ||
-                        (isSameRange && !selectedExists && !isYTDButNotSelected) ||
-                        (isSelected && rangeSelector.frozenStates));
-                    if (disable) {
-                        state = 3;
-                    }
-                    else if (select) {
-                        selectedExists = true; // Only one button can be selected
-                        state = 2;
-                    }
-                    // If state has changed, update the button
-                    if (button.state !== state) {
-                        button.setState(state);
-                        // Reset (#9209)
-                        if (state === 0 && selected === i) {
-                            rangeSelector.setSelected(null);
-                        }
-                    }
-                });
-            };
-            /**
-             * Compute and cache the range for an individual button
-             *
-             * @private
-             * @function Highcharts.RangeSelector#computeButtonRange
-             * @param {Highcharts.RangeSelectorButtonsOptions} rangeOptions
-             * @return {void}
-             */
-            RangeSelector.prototype.computeButtonRange = function (rangeOptions) {
-                var type = rangeOptions.type,
-                    count = rangeOptions.count || 1, 
-                    // these time intervals have a fixed number of milliseconds, as
-                    // opposed to month, ytd and year
-                    fixedTimes = {
-                        millisecond: 1,
-                        second: 1000,
-                        minute: 60 * 1000,
-                        hour: 3600 * 1000,
-                        day: 24 * 3600 * 1000,
-                        week: 7 * 24 * 3600 * 1000
-                    };
-                // Store the range on the button object
-                if (fixedTimes[type]) {
-                    rangeOptions._range = fixedTimes[type] * count;
-                }
-                else if (type === 'month' || type === 'year') {
-                    rangeOptions._range = {
-                        month: 30,
-                        year: 365
-                    }[type] * 24 * 36e5 * count;
-                }
-                rangeOptions._offsetMin = pick(rangeOptions.offsetMin, 0);
-                rangeOptions._offsetMax = pick(rangeOptions.offsetMax, 0);
-                rangeOptions._range +=
-                    rangeOptions._offsetMax - rangeOptions._offsetMin;
-            };
-            /**
-             * Set the internal and displayed value of a HTML input for the dates
-             *
-             * @private
-             * @function Highcharts.RangeSelector#setInputValue
-             * @param {string} name
-             * @param {number} [inputTime]
-             * @return {void}
-             */
-            RangeSelector.prototype.setInputValue = function (name, inputTime) {
-                var options = this.chart.options.rangeSelector,
-                    time = this.chart.time,
-                    input = this[name + 'Input'];
-                if (defined(inputTime)) {
-                    input.previousValue = input.HCTime;
-                    input.HCTime = inputTime;
-                }
-                input.value = time.dateFormat(options.inputEditDateFormat || '%Y-%m-%d', input.HCTime);
-                this[name + 'DateBox'].attr({
-                    text: time.dateFormat(options.inputDateFormat || '%b %e, %Y', input.HCTime)
-                });
-            };
-            /**
-             * @private
-             * @function Highcharts.RangeSelector#showInput
-             * @param {string} name
-             * @return {void}
-             */
-            RangeSelector.prototype.showInput = function (name) {
-                var inputGroup = this.inputGroup,
-                    dateBox = this[name + 'DateBox'];
-                css(this[name + 'Input'], {
-                    left: (inputGroup.translateX + dateBox.x) + 'px',
-                    top: inputGroup.translateY + 'px',
-                    width: (dateBox.width - 2) + 'px',
-                    height: (dateBox.height - 2) + 'px',
-                    border: '2px solid silver'
-                });
-            };
-            /**
-             * @private
-             * @function Highcharts.RangeSelector#hideInput
-             * @param {string} name
-             * @return {void}
-             */
-            RangeSelector.prototype.hideInput = function (name) {
-                css(this[name + 'Input'], {
-                    border: 0,
-                    width: '1px',
-                    height: '1px'
-                });
-                this.setInputValue(name);
-            };
-            /**
-             * @private
-             * @function Highcharts.RangeSelector#defaultInputDateParser
-             */
-            RangeSelector.prototype.defaultInputDateParser = function (inputDate, useUTC) {
-                var date = new Date();
-                if (H.isSafari) {
-                    return Date.parse(inputDate.split(' ').join('T'));
-                }
-                if (useUTC) {
-                    return Date.parse(inputDate + 'Z');
-                }
-                return Date.parse(inputDate) - date.getTimezoneOffset() * 60 * 1000;
-            };
-            /**
-             * Draw either the 'from' or the 'to' HTML input box of the range selector
-             *
-             * @private
-             * @function Highcharts.RangeSelector#drawInput
-             * @param {string} name
-             * @return {void}
-             */
-            RangeSelector.prototype.drawInput = function (name) {
-                var rangeSelector = this,
-                    chart = rangeSelector.chart,
-                    chartStyle = chart.renderer.style || {},
-                    renderer = chart.renderer,
-                    options = chart.options.rangeSelector,
-                    lang = defaultOptions.lang,
-                    div = rangeSelector.div,
-                    isMin = name === 'min',
-                    input,
-                    label,
-                    dateBox,
-                    inputGroup = this.inputGroup,
-                    defaultInputDateParser = this.defaultInputDateParser;
-                /**
-                 * @private
-                 */
-                function updateExtremes() {
-                    var inputValue = input.value,
-                        value,
-                        chartAxis = chart.xAxis[0],
-                        dataAxis = chart.scroller && chart.scroller.xAxis ?
-                            chart.scroller.xAxis :
-                            chartAxis,
-                        dataMin = dataAxis.dataMin,
-                        dataMax = dataAxis.dataMax;
-                    value = (options.inputDateParser || defaultInputDateParser)(inputValue, chart.time.useUTC);
-                    if (value !== input.previousValue) {
-                        input.previousValue = value;
-                        // If the value isn't parsed directly to a value by the
-                        // browser's Date.parse method, like YYYY-MM-DD in IE, try
-                        // parsing it a different way
-                        if (!isNumber(value)) {
-                            value = inputValue.split('-');
-                            value = Date.UTC(pInt(value[0]), pInt(value[1]) - 1, pInt(value[2]));
-                        }
-                        if (isNumber(value)) {
-                            // Correct for timezone offset (#433)
-                            if (!chart.time.useUTC) {
-                                value =
-                                    value + new Date().getTimezoneOffset() * 60 * 1000;
-                            }
-                            // Validate the extremes. If it goes beyound the data min or
-                            // max, use the actual data extreme (#2438).
-                            if (isMin) {
-                                if (value > rangeSelector.maxInput.HCTime) {
-                                    value = void 0;
-                                }
-                                else if (value < dataMin) {
-                                    value = dataMin;
-                                }
-                            }
-                            else {
-                                if (value < rangeSelector.minInput.HCTime) {
-                                    value = void 0;
-                                }
-                                else if (value > dataMax) {
-                                    value = dataMax;
-                                }
-                            }
-                            // Set the extremes
-                            if (typeof value !== 'undefined') { // @todo typof undefined
-                                chartAxis.setExtremes(isMin ? value : chartAxis.min, isMin ? chartAxis.max : value, void 0, void 0, { trigger: 'rangeSelectorInput' });
-                            }
-                        }
-                    }
-                }
-                // Create the text label
-                this[name + 'Label'] = label = renderer
-                    .label(lang[isMin ? 'rangeSelectorFrom' : 'rangeSelectorTo'], this.inputGroup.offset)
-                    .addClass('highcharts-range-label')
-                    .attr({
-                    padding: 2
-                })
-                    .add(inputGroup);
-                inputGroup.offset += label.width + 5;
-                // Create an SVG label that shows updated date ranges and and records
-                // click events that bring in the HTML input.
-                this[name + 'DateBox'] = dateBox = renderer
-                    .label('', inputGroup.offset)
-                    .addClass('highcharts-range-input')
-                    .attr({
-                    padding: 2,
-                    width: options.inputBoxWidth || 90,
-                    height: options.inputBoxHeight || 17,
-                    'text-align': 'center'
-                })
-                    .on('click', function () {
-                    // If it is already focused, the onfocus event doesn't fire
-                    // (#3713)
-                    rangeSelector.showInput(name);
-                    rangeSelector[name + 'Input'].focus();
-                });
-                if (!chart.styledMode) {
-                    dateBox.attr({
-                        stroke: options.inputBoxBorderColor || '#cccccc',
-                        'stroke-width': 1
-                    });
-                }
-                dateBox.add(inputGroup);
-                inputGroup.offset += dateBox.width + (isMin ? 10 : 0);
-                // Create the HTML input element. This is rendered as 1x1 pixel then set
-                // to the right size when focused.
-                this[name + 'Input'] = input = createElement('input', {
-                    name: name,
-                    className: 'highcharts-range-selector',
-                    type: 'text'
-                }, {
-                    top: chart.plotTop + 'px' // prevent jump on focus in Firefox
-                }, div);
-                if (!chart.styledMode) {
-                    // Styles
-                    label.css(merge(chartStyle, options.labelStyle));
-                    dateBox.css(merge({
-                        color: '#333333'
-                    }, chartStyle, options.inputStyle));
-                    css(input, extend({
-                        position: 'absolute',
-                        border: 0,
-                        width: '1px',
-                        height: '1px',
-                        padding: 0,
-                        textAlign: 'center',
-                        fontSize: chartStyle.fontSize,
-                        fontFamily: chartStyle.fontFamily,
-                        top: '-9999em' // #4798
-                    }, options.inputStyle));
-                }
-                // Blow up the input box
-                input.onfocus = function () {
-                    rangeSelector.showInput(name);
-                };
-                // Hide away the input box
-                input.onblur = function () {
-                    // update extermes only when inputs are active
-                    if (input === H.doc.activeElement) { // Only when focused
-                        // Update also when no `change` event is triggered, like when
-                        // clicking inside the SVG (#4710)
-                        updateExtremes();
-                    }
-                    // #10404 - move hide and blur outside focus
-                    rangeSelector.hideInput(name);
-                    input.blur(); // #4606
-                };
-                // handle changes in the input boxes
-                input.onchange = updateExtremes;
-                input.onkeypress = function (event) {
-                    // IE does not fire onchange on enter
-                    if (event.keyCode === 13) {
-                        updateExtremes();
-                    }
-                };
-            };
-            /**
-             * Get the position of the range selector buttons and inputs. This can be
-             * overridden from outside for custom positioning.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#getPosition
-             *
-             * @return {Highcharts.Dictionary<number>}
-             */
-            RangeSelector.prototype.getPosition = function () {
-                var chart = this.chart,
-                    options = chart.options.rangeSelector,
-                    top = options.verticalAlign === 'top' ?
-                        chart.plotTop - chart.axisOffset[0] :
-                        0; // set offset only for varticalAlign top
-                    return {
-                        buttonTop: top + options.buttonPosition.y,
-                        inputTop: top + options.inputPosition.y - 10
-                    };
-            };
-            /**
-             * Get the extremes of YTD. Will choose dataMax if its value is lower than
-             * the current timestamp. Will choose dataMin if its value is higher than
-             * the timestamp for the start of current year.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#getYTDExtremes
-             *
-             * @param {number} dataMax
-             *
-             * @param {number} dataMin
-             *
-             * @return {*}
-             *         Returns min and max for the YTD
-             */
-            RangeSelector.prototype.getYTDExtremes = function (dataMax, dataMin, useUTC) {
-                var time = this.chart.time,
-                    min,
-                    now = new time.Date(dataMax),
-                    year = time.get('FullYear',
-                    now),
-                    startOfYear = useUTC ?
-                        time.Date.UTC(year, 0, 1) : // eslint-disable-line new-cap
-                        +new time.Date(year, 0, 1);
-                min = Math.max(dataMin || 0, startOfYear);
-                now = now.getTime();
-                return {
-                    max: Math.min(dataMax || now, now),
-                    min: min
-                };
-            };
-            /**
-             * Render the range selector including the buttons and the inputs. The first
-             * time render is called, the elements are created and positioned. On
-             * subsequent calls, they are moved and updated.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#render
-             * @param {number} [min]
-             *        X axis minimum
-             * @param {number} [max]
-             *        X axis maximum
-             * @return {void}
-             */
-            RangeSelector.prototype.render = function (min, max) {
-                var rangeSelector = this,
-                    chart = rangeSelector.chart,
-                    renderer = chart.renderer,
-                    container = chart.container,
-                    chartOptions = chart.options,
-                    navButtonOptions = (chartOptions.exporting &&
-                        chartOptions.exporting.enabled !== false &&
-                        chartOptions.navigation &&
-                        chartOptions.navigation.buttonOptions),
-                    lang = defaultOptions.lang,
-                    div = rangeSelector.div,
-                    options = chartOptions.rangeSelector, 
-                    // Place inputs above the container
-                    inputsZIndex = pick(chartOptions.chart.style &&
-                        chartOptions.chart.style.zIndex, 0) + 1,
-                    floating = options.floating,
-                    buttons = rangeSelector.buttons,
-                    inputGroup = rangeSelector.inputGroup,
-                    buttonTheme = options.buttonTheme,
-                    buttonPosition = options.buttonPosition,
-                    inputPosition = options.inputPosition,
-                    inputEnabled = options.inputEnabled,
-                    states = buttonTheme && buttonTheme.states,
-                    plotLeft = chart.plotLeft,
-                    buttonLeft,
-                    buttonGroup = rangeSelector.buttonGroup,
-                    group,
-                    groupHeight,
-                    rendered = rangeSelector.rendered,
-                    verticalAlign = rangeSelector.options.verticalAlign,
-                    legend = chart.legend,
-                    legendOptions = legend && legend.options,
-                    buttonPositionY = buttonPosition.y,
-                    inputPositionY = inputPosition.y,
-                    animate = chart.hasLoaded,
-                    verb = animate ? 'animate' : 'attr',
-                    exportingX = 0,
-                    alignTranslateY,
-                    legendHeight,
-                    minPosition,
-                    translateY = 0,
-                    translateX;
-                if (options.enabled === false) {
-                    return;
-                }
-                // create the elements
-                if (!rendered) {
-                    rangeSelector.group = group = renderer.g('range-selector-group')
-                        .attr({
-                        zIndex: 7
-                    })
-                        .add();
-                    rangeSelector.buttonGroup = buttonGroup =
-                        renderer.g('range-selector-buttons').add(group);
-                    rangeSelector.zoomText = renderer
-                        .text(lang.rangeSelectorZoom, 0, 15)
-                        .add(buttonGroup);
-                    if (!chart.styledMode) {
-                        rangeSelector.zoomText.css(options.labelStyle);
-                        buttonTheme['stroke-width'] =
-                            pick(buttonTheme['stroke-width'], 0);
-                    }
-                    rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
-                        buttons[i] = renderer
-                            .button(rangeOptions.text, 0, 0, function (e) {
-                            // extract events from button object and call
-                            var buttonEvents = (rangeOptions.events &&
-                                    rangeOptions.events.click),
-                                callDefaultEvent;
-                            if (buttonEvents) {
-                                callDefaultEvent =
-                                    buttonEvents.call(rangeOptions, e);
-                            }
-                            if (callDefaultEvent !== false) {
-                                rangeSelector.clickButton(i);
-                            }
-                            rangeSelector.isActive = true;
-                        }, buttonTheme, states && states.hover, states && states.select, states && states.disabled)
-                            .attr({
-                            'text-align': 'center'
-                        })
-                            .add(buttonGroup);
-                    });
-                    // first create a wrapper outside the container in order to make
-                    // the inputs work and make export correct
-                    if (inputEnabled !== false) {
-                        rangeSelector.div = div = createElement('div', null, {
-                            position: 'relative',
-                            height: 0,
-                            zIndex: inputsZIndex
-                        });
-                        container.parentNode.insertBefore(div, container);
-                        // Create the group to keep the inputs
-                        rangeSelector.inputGroup = inputGroup =
-                            renderer.g('input-group').add(group);
-                        inputGroup.offset = 0;
-                        rangeSelector.drawInput('min');
-                        rangeSelector.drawInput('max');
-                    }
-                }
-                // #8769, allow dynamically updating margins
-                rangeSelector.zoomText[verb]({
-                    x: pick(plotLeft + buttonPosition.x, plotLeft)
+            // Fixed times like minutes, hours, days
+          } else if (range) {
+            newMin = Math.max(newMax - range, dataMin);
+            newMax = Math.min(newMin + range, dataMax);
+          } else if (type === "ytd") {
+            // On user clicks on the buttons, or a delayed action running from
+            // the beforeRender event (below), the baseAxis is defined.
+            if (baseAxis) {
+              // When "ytd" is the pre-selected button for the initial view,
+              // its calculation is delayed and rerun in the beforeRender
+              // event (below). When the series are initialized, but before
+              // the chart is rendered, we have access to the xData array
+              // (#942).
+              if (typeof dataMax === "undefined") {
+                dataMin = Number.MAX_VALUE;
+                dataMax = Number.MIN_VALUE;
+                chart.series.forEach(function (series) {
+                  // reassign it to the last item
+                  var xData = series.xData;
+                  dataMin = Math.min(xData[0], dataMin);
+                  dataMax = Math.max(xData[xData.length - 1], dataMax);
                 });
-                // button start position
-                buttonLeft = pick(plotLeft + buttonPosition.x, plotLeft) +
-                    rangeSelector.zoomText.getBBox().width + 5;
-                rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
-                    buttons[i][verb]({ x: buttonLeft });
-                    // increase button position for the next button
-                    buttonLeft += buttons[i].width + pick(options.buttonSpacing, 5);
-                });
-                plotLeft = chart.plotLeft - chart.spacing[3];
-                rangeSelector.updateButtonStates();
-                // detect collisiton with exporting
-                if (navButtonOptions &&
-                    this.titleCollision(chart) &&
-                    verticalAlign === 'top' &&
-                    buttonPosition.align === 'right' && ((buttonPosition.y +
-                    buttonGroup.getBBox().height - 12) <
-                    ((navButtonOptions.y || 0) +
-                        navButtonOptions.height))) {
-                    exportingX = -40;
-                }
-                translateX = buttonPosition.x - chart.spacing[3];
-                if (buttonPosition.align === 'right') {
-                    translateX += exportingX - plotLeft; // (#13014)
-                }
-                else if (buttonPosition.align === 'center') {
-                    translateX -= plotLeft / 2;
-                }
-                // align button group
-                buttonGroup.align({
-                    y: buttonPosition.y,
-                    width: buttonGroup.getBBox().width,
-                    align: buttonPosition.align,
-                    x: translateX
-                }, true, chart.spacingBox);
-                // skip animation
-                rangeSelector.group.placed = animate;
-                rangeSelector.buttonGroup.placed = animate;
-                if (inputEnabled !== false) {
-                    var inputGroupX,
-                        inputGroupWidth,
-                        buttonGroupX,
-                        buttonGroupWidth;
-                    // detect collision with exporting
-                    if (navButtonOptions &&
-                        this.titleCollision(chart) &&
-                        verticalAlign === 'top' &&
-                        inputPosition.align === 'right' && ((inputPosition.y -
-                        inputGroup.getBBox().height - 12) <
-                        ((navButtonOptions.y || 0) +
-                            navButtonOptions.height +
-                            chart.spacing[0]))) {
-                        exportingX = -40;
-                    }
-                    else {
-                        exportingX = 0;
-                    }
-                    if (inputPosition.align === 'left') {
-                        translateX = plotLeft;
-                    }
-                    else if (inputPosition.align === 'right') {
-                        translateX = -Math.max(chart.axisOffset[1], -exportingX);
-                    }
-                    // Update the alignment to the updated spacing box
-                    inputGroup.align({
-                        y: inputPosition.y,
-                        width: inputGroup.getBBox().width,
-                        align: inputPosition.align,
-                        // fix wrong getBBox() value on right align
-                        x: inputPosition.x + translateX - 2
-                    }, true, chart.spacingBox);
-                    // detect collision
-                    inputGroupX = (inputGroup.alignAttr.translateX +
-                        inputGroup.alignOptions.x -
-                        exportingX +
-                        // getBBox for detecing left margin
-                        inputGroup.getBBox().x +
-                        // 2px padding to not overlap input and label
-                        2);
-                    inputGroupWidth = inputGroup.alignOptions.width;
-                    buttonGroupX = buttonGroup.alignAttr.translateX +
-                        buttonGroup.getBBox().x;
-                    // 20 is minimal spacing between elements
-                    buttonGroupWidth = buttonGroup.getBBox().width + 20;
-                    if ((inputPosition.align ===
-                        buttonPosition.align) || ((buttonGroupX + buttonGroupWidth > inputGroupX) &&
-                        (inputGroupX + inputGroupWidth > buttonGroupX) &&
-                        (buttonPositionY <
-                            (inputPositionY +
-                                inputGroup.getBBox().height)))) {
-                        inputGroup.attr({
-                            translateX: inputGroup.alignAttr.translateX +
-                                (chart.axisOffset[1] >= -exportingX ? 0 : -exportingX),
-                            translateY: inputGroup.alignAttr.translateY +
-                                buttonGroup.getBBox().height + 10
-                        });
-                    }
-                    // Set or reset the input values
-                    rangeSelector.setInputValue('min', min);
-                    rangeSelector.setInputValue('max', max);
-                    // skip animation
-                    rangeSelector.inputGroup.placed = animate;
-                }
-                // vertical align
-                rangeSelector.group.align({
-                    verticalAlign: verticalAlign
-                }, true, chart.spacingBox);
-                // set position
-                groupHeight =
-                    rangeSelector.group.getBBox().height + 20; // # 20 padding
-                alignTranslateY =
-                    rangeSelector.group.alignAttr.translateY;
-                // calculate bottom position
-                if (verticalAlign === 'bottom') {
-                    legendHeight = (legendOptions &&
-                        legendOptions.verticalAlign === 'bottom' &&
-                        legendOptions.enabled &&
-                        !legendOptions.floating ?
-                        legend.legendHeight + pick(legendOptions.margin, 10) :
-                        0);
-                    groupHeight = groupHeight + legendHeight - 20;
-                    translateY = (alignTranslateY -
-                        groupHeight -
-                        (floating ? 0 : options.y) -
-                        (chart.titleOffset ? chart.titleOffset[2] : 0) -
-                        10 // 10 spacing
-                    );
-                }
-                if (verticalAlign === 'top') {
-                    if (floating) {
-                        translateY = 0;
-                    }
-                    if (chart.titleOffset && chart.titleOffset[0]) {
-                        translateY = chart.titleOffset[0];
-                    }
-                    translateY += ((chart.margin[0] - chart.spacing[0]) || 0);
-                }
-                else if (verticalAlign === 'middle') {
-                    if (inputPositionY === buttonPositionY) {
-                        if (inputPositionY < 0) {
-                            translateY = alignTranslateY + minPosition;
-                        }
-                        else {
-                            translateY = alignTranslateY;
-                        }
-                    }
-                    else if (inputPositionY || buttonPositionY) {
-                        if (inputPositionY < 0 ||
-                            buttonPositionY < 0) {
-                            translateY -= Math.min(inputPositionY, buttonPositionY);
-                        }
-                        else {
-                            translateY =
-                                alignTranslateY - groupHeight + minPosition;
-                        }
-                    }
-                }
-                rangeSelector.group.translate(options.x, options.y + Math.floor(translateY));
-                // translate HTML inputs
-                if (inputEnabled !== false) {
-                    rangeSelector.minInput.style.marginTop =
-                        rangeSelector.group.translateY + 'px';
-                    rangeSelector.maxInput.style.marginTop =
-                        rangeSelector.group.translateY + 'px';
-                }
-                rangeSelector.rendered = true;
-            };
-            /**
-             * Extracts height of range selector
-             *
-             * @private
-             * @function Highcharts.RangeSelector#getHeight
-             * @return {number}
-             *         Returns rangeSelector height
-             */
-            RangeSelector.prototype.getHeight = function () {
-                var rangeSelector = this,
-                    options = rangeSelector.options,
-                    rangeSelectorGroup = rangeSelector.group,
-                    inputPosition = options.inputPosition,
-                    buttonPosition = options.buttonPosition,
-                    yPosition = options.y,
-                    buttonPositionY = buttonPosition.y,
-                    inputPositionY = inputPosition.y,
-                    rangeSelectorHeight = 0,
-                    minPosition;
-                if (options.height) {
-                    return options.height;
-                }
-                rangeSelectorHeight = rangeSelectorGroup ?
-                    // 13px to keep back compatibility
-                    (rangeSelectorGroup.getBBox(true).height) + 13 +
-                        yPosition :
-                    0;
-                minPosition = Math.min(inputPositionY, buttonPositionY);
-                if ((inputPositionY < 0 && buttonPositionY < 0) ||
-                    (inputPositionY > 0 && buttonPositionY > 0)) {
-                    rangeSelectorHeight += Math.abs(minPosition);
-                }
-                return rangeSelectorHeight;
-            };
-            /**
-             * Detect collision with title or subtitle
-             *
-             * @private
-             * @function Highcharts.RangeSelector#titleCollision
-             *
-             * @param {Highcharts.Chart} chart
-             *
-             * @return {boolean}
-             *         Returns collision status
-             */
-            RangeSelector.prototype.titleCollision = function (chart) {
-                return !(chart.options.title.text ||
-                    chart.options.subtitle.text);
-            };
-            /**
-             * Update the range selector with new options
-             *
-             * @private
-             * @function Highcharts.RangeSelector#update
-             * @param {Highcharts.RangeSelectorOptions} options
-             * @return {void}
-             */
-            RangeSelector.prototype.update = function (options) {
-                var chart = this.chart;
-                merge(true, chart.options.rangeSelector, options);
-                this.destroy();
-                this.init(chart);
-                chart.rangeSelector.render();
-            };
-            /**
-             * Destroys allocated elements.
-             *
-             * @private
-             * @function Highcharts.RangeSelector#destroy
-             */
-            RangeSelector.prototype.destroy = function () {
-                var rSelector = this,
-                    minInput = rSelector.minInput,
-                    maxInput = rSelector.maxInput;
-                rSelector.unMouseDown();
-                rSelector.unResize();
-                // Destroy elements in collections
-                destroyObjectProperties(rSelector.buttons);
-                // Clear input element events
-                if (minInput) {
-                    minInput.onfocus = minInput.onblur = minInput.onchange = null;
-                }
-                if (maxInput) {
-                    maxInput.onfocus = maxInput.onblur = maxInput.onchange = null;
-                }
-                // Destroy HTML and SVG elements
-                objectEach(rSelector, function (val, key) {
-                    if (val && key !== 'chart') {
-                        if (val instanceof SVGElement) {
-                            // SVGElement
-                            val.destroy();
-                        }
-                        else if (val instanceof window.HTMLElement) {
-                            // HTML element
-                            discardElement(val);
-                        }
-                    }
-                    if (val !== RangeSelector.prototype[key]) {
-                        rSelector[key] = null;
-                    }
-                }, this);
-            };
-            return RangeSelector;
-        }());
+                redraw = false;
+              }
+              ytdExtremes = rangeSelector.getYTDExtremes(
+                dataMax,
+                dataMin,
+                chart.time.useUTC
+              );
+              newMin = rangeMin = ytdExtremes.min;
+              newMax = ytdExtremes.max;
+              // "ytd" is pre-selected. We don't yet have access to processed
+              // point and extremes data (things like pointStart and pointInterval
+              // are missing), so we delay the process (#942)
+            } else {
+              rangeSelector.deferredYTDClick = i;
+              return;
+            }
+          } else if (type === "all" && baseAxis) {
+            newMin = dataMin;
+            newMax = dataMax;
+          }
+          if (defined(newMin)) {
+            newMin += rangeOptions._offsetMin;
+          }
+          if (defined(newMax)) {
+            newMax += rangeOptions._offsetMax;
+          }
+          rangeSelector.setSelected(i);
+          // Update the chart
+          if (!baseAxis) {
+            // Axis not yet instanciated. Temporarily set min and range
+            // options and remove them on chart load (#4317).
+            baseXAxisOptions = splat(chart.options.xAxis)[0];
+            rangeSetting = baseXAxisOptions.range;
+            baseXAxisOptions.range = range;
+            minSetting = baseXAxisOptions.min;
+            baseXAxisOptions.min = rangeMin;
+            addEvent(chart, "load", function resetMinAndRange() {
+              baseXAxisOptions.range = rangeSetting;
+              baseXAxisOptions.min = minSetting;
+            });
+          } else {
+            // Existing axis object. Set extremes after render time.
+            baseAxis.setExtremes(
+              newMin,
+              newMax,
+              pick(redraw, 1),
+              null, // auto animation
+              {
+                trigger: "rangeSelectorButton",
+                rangeSelectorButton: rangeOptions,
+              }
+            );
+          }
+        };
         /**
-         * The default buttons for pre-selecting time frames
+         * Set the selected option. This method only sets the internal flag, it
+         * doesn't update the buttons or the actual zoomed range.
+         *
+         * @private
+         * @function Highcharts.RangeSelector#setSelected
+         * @param {number} [selected]
+         * @return {void}
          */
-        RangeSelector.prototype.defaultButtons = [{
-                type: 'month',
-                count: 1,
-                text: '1m'
-            }, {
-                type: 'month',
-                count: 3,
-                text: '3m'
-            }, {
-                type: 'month',
-                count: 6,
-                text: '6m'
-            }, {
-                type: 'ytd',
-                text: 'YTD'
-            }, {
-                type: 'year',
-                count: 1,
-                text: '1y'
-            }, {
-                type: 'all',
-                text: 'All'
-            }];
+        RangeSelector.prototype.setSelected = function (selected) {
+          this.selected = this.options.selected = selected;
+        };
         /**
-         * Get the axis min value based on the range option and the current max. For
-         * stock charts this is extended via the {@link RangeSelector} so that if the
-         * selected range is a multiple of months or years, it is compensated for
-         * various month lengths.
+         * Initialize the range selector
          *
          * @private
-         * @function Highcharts.Axis#minFromRange
-         * @return {number|undefined}
-         *         The new minimum value.
+         * @function Highcharts.RangeSelector#init
+         * @param {Highcharts.Chart} chart
+         * @return {void}
          */
-        Axis.prototype.minFromRange = function () {
-            var rangeOptions = this.range,
-                type = rangeOptions.type,
-                min,
-                max = this.max,
-                dataMin,
-                range,
-                time = this.chart.time, 
-                // Get the true range from a start date
-                getTrueRange = function (base,
-                count) {
-                    var timeName = type === 'year' ? 'FullYear' : 'Month';
-                var date = new time.Date(base);
-                var basePeriod = time.get(timeName,
-                    date);
-                time.set(timeName, date, basePeriod + count);
-                if (basePeriod === time.get(timeName, date)) {
-                    time.set('Date', date, 0); // #6537
-                }
-                return date.getTime() - base;
+        RangeSelector.prototype.init = function (chart) {
+          var rangeSelector = this,
+            options = chart.options.rangeSelector,
+            buttonOptions =
+              options.buttons || rangeSelector.defaultButtons.slice(),
+            selectedOption = options.selected,
+            blurInputs = function () {
+              var minInput = rangeSelector.minInput,
+                maxInput = rangeSelector.maxInput;
+              // #3274 in some case blur is not defined
+              if (minInput && minInput.blur) {
+                fireEvent(minInput, "blur");
+              }
+              if (maxInput && maxInput.blur) {
+                fireEvent(maxInput, "blur");
+              }
             };
-            if (isNumber(rangeOptions)) {
-                min = max - rangeOptions;
-                range = rangeOptions;
-            }
-            else {
-                min = max + getTrueRange(max, -rangeOptions.count);
-                // Let the fixedRange reflect initial settings (#5930)
-                if (this.chart) {
-                    this.chart.fixedRange = max - min;
-                }
+          rangeSelector.chart = chart;
+          rangeSelector.options = options;
+          rangeSelector.buttons = [];
+          rangeSelector.buttonOptions = buttonOptions;
+          this.unMouseDown = addEvent(chart.container, "mousedown", blurInputs);
+          this.unResize = addEvent(chart, "resize", blurInputs);
+          // Extend the buttonOptions with actual range
+          buttonOptions.forEach(rangeSelector.computeButtonRange);
+          // zoomed range based on a pre-selected button index
+          if (
+            typeof selectedOption !== "undefined" &&
+            buttonOptions[selectedOption]
+          ) {
+            this.clickButton(selectedOption, false);
+          }
+          addEvent(chart, "load", function () {
+            // If a data grouping is applied to the current button, release it
+            // when extremes change
+            if (chart.xAxis && chart.xAxis[0]) {
+              addEvent(chart.xAxis[0], "setExtremes", function (e) {
+                if (
+                  this.max - this.min !== chart.fixedRange &&
+                  e.trigger !== "rangeSelectorButton" &&
+                  e.trigger !== "updatedData" &&
+                  rangeSelector.forcedDataGrouping &&
+                  !rangeSelector.frozenStates
+                ) {
+                  this.setDataGrouping(false, false);
+                }
+              });
             }
-            dataMin = pick(this.dataMin, Number.MIN_VALUE);
-            if (!isNumber(min)) {
-                min = dataMin;
+          });
+        };
+        /**
+         * Dynamically update the range selector buttons after a new range has been
+         * set
+         *
+         * @private
+         * @function Highcharts.RangeSelector#updateButtonStates
+         * @return {void}
+         */
+        RangeSelector.prototype.updateButtonStates = function () {
+          var rangeSelector = this,
+            chart = this.chart,
+            baseAxis = chart.xAxis[0],
+            actualRange = Math.round(baseAxis.max - baseAxis.min),
+            hasNoData = !baseAxis.hasVisibleSeries,
+            day = 24 * 36e5, // A single day in milliseconds
+            unionExtremes =
+              (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis,
+            dataMin = unionExtremes.dataMin,
+            dataMax = unionExtremes.dataMax,
+            ytdExtremes = rangeSelector.getYTDExtremes(
+              dataMax,
+              dataMin,
+              chart.time.useUTC
+            ),
+            ytdMin = ytdExtremes.min,
+            ytdMax = ytdExtremes.max,
+            selected = rangeSelector.selected,
+            selectedExists = isNumber(selected),
+            allButtonsEnabled = rangeSelector.options.allButtonsEnabled,
+            buttons = rangeSelector.buttons;
+          rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
+            var range = rangeOptions._range,
+              type = rangeOptions.type,
+              count = rangeOptions.count || 1,
+              button = buttons[i],
+              state = 0,
+              disable,
+              select,
+              offsetRange = rangeOptions._offsetMax - rangeOptions._offsetMin,
+              isSelected = i === selected,
+              // Disable buttons where the range exceeds what is allowed in
+              // the current view
+              isTooGreatRange = range > dataMax - dataMin,
+              // Disable buttons where the range is smaller than the minimum
+              // range
+              isTooSmallRange = range < baseAxis.minRange,
+              // Do not select the YTD button if not explicitly told so
+              isYTDButNotSelected = false,
+              // Disable the All button if we're already showing all
+              isAllButAlreadyShowingAll = false,
+              isSameRange = range === actualRange;
+            // Months and years have a variable range so we check the extremes
+            if (
+              (type === "month" || type === "year") &&
+              actualRange + 36e5 >=
+                { month: 28, year: 365 }[type] * day * count - offsetRange &&
+              actualRange - 36e5 <=
+                { month: 31, year: 366 }[type] * day * count + offsetRange
+            ) {
+              isSameRange = true;
+            } else if (type === "ytd") {
+              isSameRange = ytdMax - ytdMin + offsetRange === actualRange;
+              isYTDButNotSelected = !isSelected;
+            } else if (type === "all") {
+              isSameRange = baseAxis.max - baseAxis.min >= dataMax - dataMin;
+              isAllButAlreadyShowingAll =
+                !isSelected && selectedExists && isSameRange;
             }
-            if (min <= dataMin) {
-                min = dataMin;
-                if (typeof range === 'undefined') { // #4501
-                    range = getTrueRange(min, rangeOptions.count);
-                }
-                this.newMax = Math.min(min + range, this.dataMax);
+            // The new zoom area happens to match the range for a button - mark
+            // it selected. This happens when scrolling across an ordinal gap.
+            // It can be seen in the intraday demos when selecting 1h and scroll
+            // across the night gap.
+            disable =
+              !allButtonsEnabled &&
+              (isTooGreatRange ||
+                isTooSmallRange ||
+                isAllButAlreadyShowingAll ||
+                hasNoData);
+            select =
+              (isSelected && isSameRange) ||
+              (isSameRange && !selectedExists && !isYTDButNotSelected) ||
+              (isSelected && rangeSelector.frozenStates);
+            if (disable) {
+              state = 3;
+            } else if (select) {
+              selectedExists = true; // Only one button can be selected
+              state = 2;
             }
-            if (!isNumber(max)) {
-                min = void 0;
+            // If state has changed, update the button
+            if (button.state !== state) {
+              button.setState(state);
+              // Reset (#9209)
+              if (state === 0 && selected === i) {
+                rangeSelector.setSelected(null);
+              }
             }
-            return min;
+          });
         };
-        if (!H.RangeSelector) {
-            // Initialize rangeselector for stock charts
-            addEvent(Chart, 'afterGetContainer', function () {
-                if (this.options.rangeSelector.enabled) {
-                    this.rangeSelector = new RangeSelector(this);
-                }
-            });
-            addEvent(Chart, 'beforeRender', function () {
-                var chart = this,
-                    axes = chart.axes,
-                    rangeSelector = chart.rangeSelector,
-                    verticalAlign;
-                if (rangeSelector) {
-                    if (isNumber(rangeSelector.deferredYTDClick)) {
-                        rangeSelector.clickButton(rangeSelector.deferredYTDClick);
-                        delete rangeSelector.deferredYTDClick;
-                    }
-                    axes.forEach(function (axis) {
-                        axis.updateNames();
-                        axis.setScale();
-                    });
-                    chart.getAxisMargins();
-                    rangeSelector.render();
-                    verticalAlign = rangeSelector.options.verticalAlign;
-                    if (!rangeSelector.options.floating) {
-                        if (verticalAlign === 'bottom') {
-                            this.extraBottomMargin = true;
-                        }
-                        else if (verticalAlign !== 'middle') {
-                            this.extraTopMargin = true;
-                        }
-                    }
-                }
-            });
-            addEvent(Chart, 'update', function (e) {
-                var chart = this,
-                    options = e.options,
-                    optionsRangeSelector = options.rangeSelector,
-                    rangeSelector = chart.rangeSelector,
-                    verticalAlign,
-                    extraBottomMarginWas = this.extraBottomMargin,
-                    extraTopMarginWas = this.extraTopMargin;
-                if (optionsRangeSelector &&
-                    optionsRangeSelector.enabled &&
-                    !defined(rangeSelector)) {
-                    this.options.rangeSelector.enabled = true;
-                    this.rangeSelector = new RangeSelector(this);
-                }
-                this.extraBottomMargin = false;
-                this.extraTopMargin = false;
-                if (rangeSelector) {
-                    rangeSelector.render();
-                    verticalAlign = (optionsRangeSelector &&
-                        optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);
-                    if (!rangeSelector.options.floating) {
-                        if (verticalAlign === 'bottom') {
-                            this.extraBottomMargin = true;
-                        }
-                        else if (verticalAlign !== 'middle') {
-                            this.extraTopMargin = true;
-                        }
-                    }
-                    if (this.extraBottomMargin !== extraBottomMarginWas ||
-                        this.extraTopMargin !== extraTopMarginWas) {
-                        this.isDirtyBox = true;
-                    }
-                }
-            });
-            addEvent(Chart, 'render', function () {
-                var chart = this,
-                    rangeSelector = chart.rangeSelector,
-                    verticalAlign;
-                if (rangeSelector && !rangeSelector.options.floating) {
-                    rangeSelector.render();
-                    verticalAlign = rangeSelector.options.verticalAlign;
-                    if (verticalAlign === 'bottom') {
-                        this.extraBottomMargin = true;
-                    }
-                    else if (verticalAlign !== 'middle') {
-                        this.extraTopMargin = true;
-                    }
-                }
-            });
-            addEvent(Chart, 'getMargins', function () {
-                var rangeSelector = this.rangeSelector,
-                    rangeSelectorHeight;
-                if (rangeSelector) {
-                    rangeSelectorHeight = rangeSelector.getHeight();
-                    if (this.extraTopMargin) {
-                        this.plotTop += rangeSelectorHeight;
-                    }
-                    if (this.extraBottomMargin) {
-                        this.marginBottom += rangeSelectorHeight;
-                    }
-                }
-            });
-            Chart.prototype.callbacks.push(function (chart) {
-                var extremes,
-                    rangeSelector = chart.rangeSelector,
-                    unbindRender,
-                    unbindSetExtremes,
-                    legend,
-                    alignTo,
-                    verticalAlign;
-                /**
-                 * @private
-                 */
-                function renderRangeSelector() {
-                    extremes = chart.xAxis[0].getExtremes();
-                    legend = chart.legend;
-                    verticalAlign = rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.options.verticalAlign;
-                    if (isNumber(extremes.min)) {
-                        rangeSelector.render(extremes.min, extremes.max);
-                    }
-                    // Re-align the legend so that it's below the rangeselector
-                    if (rangeSelector && legend.display &&
-                        verticalAlign === 'top' &&
-                        verticalAlign === legend.options.verticalAlign) {
-                        // Create a new alignment box for the legend.
-                        alignTo = merge(chart.spacingBox);
-                        if (legend.options.layout === 'vertical') {
-                            alignTo.y = chart.plotTop;
-                        }
-                        else {
-                            alignTo.y += rangeSelector.getHeight();
-                        }
-                        legend.group.placed = false; // Don't animate the alignment.
-                        legend.align(alignTo);
-                    }
-                }
-                if (rangeSelector) {
-                    // redraw the scroller on setExtremes
-                    unbindSetExtremes = addEvent(chart.xAxis[0], 'afterSetExtremes', function (e) {
-                        rangeSelector.render(e.min, e.max);
-                    });
-                    // redraw the scroller chart resize
-                    unbindRender = addEvent(chart, 'redraw', renderRangeSelector);
-                    // do it now
-                    renderRangeSelector();
-                }
-                // Remove resize/afterSetExtremes at chart destroy
-                addEvent(chart, 'destroy', function destroyEvents() {
-                    if (rangeSelector) {
-                        unbindRender();
-                        unbindSetExtremes();
-                    }
-                });
-            });
-            H.RangeSelector = RangeSelector;
-        }
-
-        return H.RangeSelector;
-    });
-    _registerModule(_modules, 'Core/Chart/StockChart.js', [_modules['Core/Axis/Axis.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Globals.js'], _modules['Series/LineSeries.js'], _modules['Core/Series/Point.js'], _modules['Core/Renderer/SVG/SVGRenderer.js'], _modules['Core/Utilities.js']], function (Axis, Chart, H, LineSeries, Point, SVGRenderer, U) {
-        /* *
-         *
-         *  (c) 2010-2020 Torstein Honsi
-         *
-         *  License: www.highcharts.com/license
+        /**
+         * Compute and cache the range for an individual button
          *
-         *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+         * @private
+         * @function Highcharts.RangeSelector#computeButtonRange
+         * @param {Highcharts.RangeSelectorButtonsOptions} rangeOptions
+         * @return {void}
+         */
+        RangeSelector.prototype.computeButtonRange = function (rangeOptions) {
+          var type = rangeOptions.type,
+            count = rangeOptions.count || 1,
+            // these time intervals have a fixed number of milliseconds, as
+            // opposed to month, ytd and year
+            fixedTimes = {
+              millisecond: 1,
+              second: 1000,
+              minute: 60 * 1000,
+              hour: 3600 * 1000,
+              day: 24 * 3600 * 1000,
+              week: 7 * 24 * 3600 * 1000,
+            };
+          // Store the range on the button object
+          if (fixedTimes[type]) {
+            rangeOptions._range = fixedTimes[type] * count;
+          } else if (type === "month" || type === "year") {
+            rangeOptions._range =
+              {
+                month: 30,
+                year: 365,
+              }[type] *
+              24 *
+              36e5 *
+              count;
+          }
+          rangeOptions._offsetMin = pick(rangeOptions.offsetMin, 0);
+          rangeOptions._offsetMax = pick(rangeOptions.offsetMax, 0);
+          rangeOptions._range +=
+            rangeOptions._offsetMax - rangeOptions._offsetMin;
+        };
+        /**
+         * Set the internal and displayed value of a HTML input for the dates
          *
-         * */
-        var addEvent = U.addEvent,
-            arrayMax = U.arrayMax,
-            arrayMin = U.arrayMin,
-            clamp = U.clamp,
-            defined = U.defined,
-            extend = U.extend,
-            find = U.find,
-            format = U.format,
-            getOptions = U.getOptions,
-            isNumber = U.isNumber,
-            isString = U.isString,
-            merge = U.merge,
-            pick = U.pick,
-            splat = U.splat;
-        // Has a dependency on Navigator due to the use of
-        // defaultOptions.navigator
-        // Has a dependency on Scrollbar due to the use of
-        // defaultOptions.scrollbar
-        // Has a dependency on RangeSelector due to the use of
-        // defaultOptions.rangeSelector
-        var seriesProto = LineSeries.prototype,
-            seriesInit = seriesProto.init,
-            seriesProcessData = seriesProto.processData,
-            pointTooltipFormatter = Point.prototype.tooltipFormatter;
+         * @private
+         * @function Highcharts.RangeSelector#setInputValue
+         * @param {string} name
+         * @param {number} [inputTime]
+         * @return {void}
+         */
+        RangeSelector.prototype.setInputValue = function (name, inputTime) {
+          var options = this.chart.options.rangeSelector,
+            time = this.chart.time,
+            input = this[name + "Input"];
+          if (defined(inputTime)) {
+            input.previousValue = input.HCTime;
+            input.HCTime = inputTime;
+          }
+          input.value = time.dateFormat(
+            options.inputEditDateFormat || "%Y-%m-%d",
+            input.HCTime
+          );
+          this[name + "DateBox"].attr({
+            text: time.dateFormat(
+              options.inputDateFormat || "%b %e, %Y",
+              input.HCTime
+            ),
+          });
+        };
         /**
-         * Compare the values of the series against the first non-null, non-
-         * zero value in the visible range. The y axis will show percentage
-         * or absolute change depending on whether `compare` is set to `"percent"`
-         * or `"value"`. When this is applied to multiple series, it allows
-         * comparing the development of the series against each other. Adds
-         * a `change` field to every point object.
-         *
-         * @see [compareBase](#plotOptions.series.compareBase)
-         * @see [Axis.setCompare()](/class-reference/Highcharts.Axis#setCompare)
-         *
-         * @sample {highstock} stock/plotoptions/series-compare-percent/
-         *         Percent
-         * @sample {highstock} stock/plotoptions/series-compare-value/
-         *         Value
-         *
-         * @type      {string}
-         * @since     1.0.1
-         * @product   highstock
-         * @apioption plotOptions.series.compare
+         * @private
+         * @function Highcharts.RangeSelector#showInput
+         * @param {string} name
+         * @return {void}
          */
+        RangeSelector.prototype.showInput = function (name) {
+          var inputGroup = this.inputGroup,
+            dateBox = this[name + "DateBox"];
+          css(this[name + "Input"], {
+            left: inputGroup.translateX + dateBox.x + "px",
+            top: inputGroup.translateY + "px",
+            width: dateBox.width - 2 + "px",
+            height: dateBox.height - 2 + "px",
+            border: "2px solid silver",
+          });
+        };
         /**
-         * Defines if comparison should start from the first point within the visible
-         * range or should start from the first point **before** the range.
-         *
-         * In other words, this flag determines if first point within the visible range
-         * will have 0% (`compareStart=true`) or should have been already calculated
-         * according to the previous point (`compareStart=false`).
-         *
-         * @sample {highstock} stock/plotoptions/series-comparestart/
-         *         Calculate compare within visible range
-         *
-         * @type      {boolean}
-         * @default   false
-         * @since     6.0.0
-         * @product   highstock
-         * @apioption plotOptions.series.compareStart
+         * @private
+         * @function Highcharts.RangeSelector#hideInput
+         * @param {string} name
+         * @return {void}
          */
+        RangeSelector.prototype.hideInput = function (name) {
+          css(this[name + "Input"], {
+            border: 0,
+            width: "1px",
+            height: "1px",
+          });
+          this.setInputValue(name);
+        };
         /**
-         * When [compare](#plotOptions.series.compare) is `percent`, this option
-         * dictates whether to use 0 or 100 as the base of comparison.
-         *
-         * @sample {highstock} stock/plotoptions/series-comparebase/
-         *         Compare base is 100
-         *
-         * @type       {number}
-         * @default    0
-         * @since      5.0.6
-         * @product    highstock
-         * @validvalue [0, 100]
-         * @apioption  plotOptions.series.compareBase
+         * @private
+         * @function Highcharts.RangeSelector#defaultInputDateParser
          */
-        /* eslint-disable no-invalid-this, valid-jsdoc */
+        RangeSelector.prototype.defaultInputDateParser = function (
+          inputDate,
+          useUTC
+        ) {
+          var date = new Date();
+          if (H.isSafari) {
+            return Date.parse(inputDate.split(" ").join("T"));
+          }
+          if (useUTC) {
+            return Date.parse(inputDate + "Z");
+          }
+          return Date.parse(inputDate) - date.getTimezoneOffset() * 60 * 1000;
+        };
         /**
-         * Factory function for creating new stock charts. Creates a new
-         * {@link Highcharts.Chart|Chart} object with different default options than the
-         * basic Chart.
-         *
-         * @example
-         * var chart = Highcharts.stockChart('container', {
-         *     series: [{
-         *         data: [1, 2, 3, 4, 5, 6, 7, 8, 9],
-         *         pointInterval: 24 * 60 * 60 * 1000
-         *     }]
-         * });
-         *
-         * @function Highcharts.stockChart
-         *
-         * @param {string|Highcharts.HTMLDOMElement} [renderTo]
-         *        The DOM element to render to, or its id.
+         * Draw either the 'from' or the 'to' HTML input box of the range selector
          *
-         * @param {Highcharts.Options} options
-         *        The chart options structure as described in the
-         *        [options reference](https://api.highcharts.com/highstock).
-         *
-         * @param {Highcharts.ChartCallbackFunction} [callback]
-         *        A function to execute when the chart object is finished loading and
-         *        rendering. In most cases the chart is built in one thread, but in
-         *        Internet Explorer version 8 or less the chart is sometimes
-         *        initialized before the document is ready, and in these cases the
-         *        chart object will not be finished synchronously. As a consequence,
-         *        code that relies on the newly built Chart object should always run in
-         *        the callback. Defining a
-         *        [chart.events.load](https://api.highcharts.com/highstock/chart.events.load)
-         *        handler is equivalent.
-         *
-         * @return {Highcharts.Chart}
-         *         The chart object.
+         * @private
+         * @function Highcharts.RangeSelector#drawInput
+         * @param {string} name
+         * @return {void}
          */
-        H.StockChart = H.stockChart = function (a, b, c) {
-            var hasRenderToArg = isString(a) || a.nodeName,
-                options = arguments[hasRenderToArg ? 1 : 0],
-                userOptions = options, 
-                // to increase performance, don't merge the data
-                seriesOptions = options.series,
-                defaultOptions = getOptions(),
-                opposite, 
-                // Always disable startOnTick:true on the main axis when the navigator
-                // is enabled (#1090)
-                navigatorEnabled = pick(options.navigator && options.navigator.enabled,
-                defaultOptions.navigator.enabled,
-                true);
-            // apply X axis options to both single and multi y axes
-            options.xAxis = splat(options.xAxis || {}).map(function (xAxisOptions, i) {
-                return merge({
-                    minPadding: 0,
-                    maxPadding: 0,
-                    overscroll: 0,
-                    ordinal: true,
-                    title: {
-                        text: null
-                    },
-                    labels: {
-                        overflow: 'justify'
-                    },
-                    showLastLabel: true
-                }, defaultOptions.xAxis, // #3802
-                defaultOptions.xAxis && defaultOptions.xAxis[i], // #7690
-                xAxisOptions, // user options
-                {
-                    type: 'datetime',
-                    categories: null
-                }, (navigatorEnabled ? {
-                    startOnTick: false,
-                    endOnTick: false
-                } : null));
-            });
-            // apply Y axis options to both single and multi y axes
-            options.yAxis = splat(options.yAxis || {}).map(function (yAxisOptions, i) {
-                opposite = pick(yAxisOptions.opposite, true);
-                return merge({
-                    labels: {
-                        y: -2
-                    },
-                    opposite: opposite,
-                    /**
-                     * @default {highcharts} true
-                     * @default {highstock} false
-                     * @apioption yAxis.showLastLabel
-                     *
-                     * @private
-                     */
-                    showLastLabel: !!(
-                    // #6104, show last label by default for category axes
-                    yAxisOptions.categories ||
-                        yAxisOptions.type === 'category'),
-                    title: {
-                        text: null
-                    }
-                }, defaultOptions.yAxis, // #3802
-                defaultOptions.yAxis && defaultOptions.yAxis[i], // #7690
-                yAxisOptions // user options
+        RangeSelector.prototype.drawInput = function (name) {
+          var rangeSelector = this,
+            chart = rangeSelector.chart,
+            chartStyle = chart.renderer.style || {},
+            renderer = chart.renderer,
+            options = chart.options.rangeSelector,
+            lang = defaultOptions.lang,
+            div = rangeSelector.div,
+            isMin = name === "min",
+            input,
+            label,
+            dateBox,
+            inputGroup = this.inputGroup,
+            defaultInputDateParser = this.defaultInputDateParser;
+          /**
+           * @private
+           */
+          function updateExtremes() {
+            var inputValue = input.value,
+              value,
+              chartAxis = chart.xAxis[0],
+              dataAxis =
+                chart.scroller && chart.scroller.xAxis
+                  ? chart.scroller.xAxis
+                  : chartAxis,
+              dataMin = dataAxis.dataMin,
+              dataMax = dataAxis.dataMax;
+            value = (options.inputDateParser || defaultInputDateParser)(
+              inputValue,
+              chart.time.useUTC
+            );
+            if (value !== input.previousValue) {
+              input.previousValue = value;
+              // If the value isn't parsed directly to a value by the
+              // browser's Date.parse method, like YYYY-MM-DD in IE, try
+              // parsing it a different way
+              if (!isNumber(value)) {
+                value = inputValue.split("-");
+                value = Date.UTC(
+                  pInt(value[0]),
+                  pInt(value[1]) - 1,
+                  pInt(value[2])
                 );
+              }
+              if (isNumber(value)) {
+                // Correct for timezone offset (#433)
+                if (!chart.time.useUTC) {
+                  value = value + new Date().getTimezoneOffset() * 60 * 1000;
+                }
+                // Validate the extremes. If it goes beyound the data min or
+                // max, use the actual data extreme (#2438).
+                if (isMin) {
+                  if (value > rangeSelector.maxInput.HCTime) {
+                    value = void 0;
+                  } else if (value < dataMin) {
+                    value = dataMin;
+                  }
+                } else {
+                  if (value < rangeSelector.minInput.HCTime) {
+                    value = void 0;
+                  } else if (value > dataMax) {
+                    value = dataMax;
+                  }
+                }
+                // Set the extremes
+                if (typeof value !== "undefined") {
+                  // @todo typof undefined
+                  chartAxis.setExtremes(
+                    isMin ? value : chartAxis.min,
+                    isMin ? chartAxis.max : value,
+                    void 0,
+                    void 0,
+                    { trigger: "rangeSelectorInput" }
+                  );
+                }
+              }
+            }
+          }
+          // Create the text label
+          this[name + "Label"] = label = renderer
+            .label(
+              lang[isMin ? "rangeSelectorFrom" : "rangeSelectorTo"],
+              this.inputGroup.offset
+            )
+            .addClass("highcharts-range-label")
+            .attr({
+              padding: 2,
+            })
+            .add(inputGroup);
+          inputGroup.offset += label.width + 5;
+          // Create an SVG label that shows updated date ranges and and records
+          // click events that bring in the HTML input.
+          this[name + "DateBox"] = dateBox = renderer
+            .label("", inputGroup.offset)
+            .addClass("highcharts-range-input")
+            .attr({
+              padding: 2,
+              width: options.inputBoxWidth || 90,
+              height: options.inputBoxHeight || 17,
+              "text-align": "center",
+            })
+            .on("click", function () {
+              // If it is already focused, the onfocus event doesn't fire
+              // (#3713)
+              rangeSelector.showInput(name);
+              rangeSelector[name + "Input"].focus();
             });
-            options.series = null;
-            options = merge({
-                chart: {
-                    panning: {
-                        enabled: true,
-                        type: 'x'
-                    },
-                    pinchType: 'x'
-                },
-                navigator: {
-                    enabled: navigatorEnabled
-                },
-                scrollbar: {
-                    // #4988 - check if setOptions was called
-                    enabled: pick(defaultOptions.scrollbar.enabled, true)
-                },
-                rangeSelector: {
-                    // #4988 - check if setOptions was called
-                    enabled: pick(defaultOptions.rangeSelector.enabled, true)
-                },
-                title: {
-                    text: null
+          if (!chart.styledMode) {
+            dateBox.attr({
+              stroke: options.inputBoxBorderColor || "#cccccc",
+              "stroke-width": 1,
+            });
+          }
+          dateBox.add(inputGroup);
+          inputGroup.offset += dateBox.width + (isMin ? 10 : 0);
+          // Create the HTML input element. This is rendered as 1x1 pixel then set
+          // to the right size when focused.
+          this[name + "Input"] = input = createElement(
+            "input",
+            {
+              name: name,
+              className: "highcharts-range-selector",
+              type: "text",
+            },
+            {
+              top: chart.plotTop + "px", // prevent jump on focus in Firefox
+            },
+            div
+          );
+          if (!chart.styledMode) {
+            // Styles
+            label.css(merge(chartStyle, options.labelStyle));
+            dateBox.css(
+              merge(
+                {
+                  color: "#333333",
                 },
-                tooltip: {
-                    split: pick(defaultOptions.tooltip.split, true),
-                    crosshairs: true
+                chartStyle,
+                options.inputStyle
+              )
+            );
+            css(
+              input,
+              extend(
+                {
+                  position: "absolute",
+                  border: 0,
+                  width: "1px",
+                  height: "1px",
+                  padding: 0,
+                  textAlign: "center",
+                  fontSize: chartStyle.fontSize,
+                  fontFamily: chartStyle.fontFamily,
+                  top: "-9999em", // #4798
                 },
-                legend: {
-                    enabled: false
-                }
-            }, options, // user's options
-            {
-                isStock: true // internal flag
-            });
-            options.series = userOptions.series = seriesOptions;
-            return hasRenderToArg ?
-                new Chart(a, options, c) :
-                new Chart(options, b);
-        };
-        // Handle som Stock-specific series defaults, override the plotOptions before
-        // series options are handled.
-        addEvent(LineSeries, 'setOptions', function (e) {
-            var overrides;
-            if (this.chart.options.isStock) {
-                if (this.is('column') || this.is('columnrange')) {
-                    overrides = {
-                        borderWidth: 0,
-                        shadow: false
-                    };
-                }
-                else if (!this.is('scatter') && !this.is('sma')) {
-                    overrides = {
-                        marker: {
-                            enabled: false,
-                            radius: 2
-                        }
-                    };
-                }
-                if (overrides) {
-                    e.plotOptions[this.type] = merge(e.plotOptions[this.type], overrides);
-                }
-            }
-        });
-        // Override the automatic label alignment so that the first Y axis' labels
-        // are drawn on top of the grid line, and subsequent axes are drawn outside
-        addEvent(Axis, 'autoLabelAlign', function (e) {
-            var chart = this.chart,
-                options = this.options,
-                panes = chart._labelPanes = chart._labelPanes || {},
-                key,
-                labelOptions = this.options.labels;
-            if (this.chart.options.isStock && this.coll === 'yAxis') {
-                key = options.top + ',' + options.height;
-                // do it only for the first Y axis of each pane
-                if (!panes[key] && labelOptions.enabled) {
-                    if (labelOptions.x === 15) { // default
-                        labelOptions.x = 0;
-                    }
-                    if (typeof labelOptions.align === 'undefined') {
-                        labelOptions.align = 'right';
-                    }
-                    panes[key] = this;
-                    e.align = 'right';
-                    e.preventDefault();
-                }
-            }
-        });
-        // Clear axis from label panes (#6071)
-        addEvent(Axis, 'destroy', function () {
-            var chart = this.chart, key = this.options && (this.options.top + ',' + this.options.height);
-            if (key && chart._labelPanes && chart._labelPanes[key] === this) {
-                delete chart._labelPanes[key];
-            }
-        });
-        // Override getPlotLinePath to allow for multipane charts
-        addEvent(Axis, 'getPlotLinePath', function (e) {
-            var axis = this,
-                series = (this.isLinked && !this.series ?
-                    this.linkedParent.series :
-                    this.series),
-                chart = axis.chart,
-                renderer = chart.renderer,
-                axisLeft = axis.left,
-                axisTop = axis.top,
-                x1,
-                y1,
-                x2,
-                y2,
-                result = [],
-                axes = [], // #3416 need a default array
-                axes2,
-                uniqueAxes,
-                translatedValue = e.translatedValue,
-                value = e.value,
-                force = e.force,
-                transVal;
-            /**
-             * Return the other axis based on either the axis option or on related
-             * series.
-             * @private
-             */
-            function getAxis(coll) {
-                var otherColl = coll === 'xAxis' ? 'yAxis' : 'xAxis',
-                    opt = axis.options[otherColl];
-                // Other axis indexed by number
-                if (isNumber(opt)) {
-                    return [chart[otherColl][opt]];
-                }
-                // Other axis indexed by id (like navigator)
-                if (isString(opt)) {
-                    return [chart.get(opt)];
-                }
-                // Auto detect based on existing series
-                return series.map(function (s) {
-                    return s[otherColl];
-                });
+                options.inputStyle
+              )
+            );
+          }
+          // Blow up the input box
+          input.onfocus = function () {
+            rangeSelector.showInput(name);
+          };
+          // Hide away the input box
+          input.onblur = function () {
+            // update extermes only when inputs are active
+            if (input === H.doc.activeElement) {
+              // Only when focused
+              // Update also when no `change` event is triggered, like when
+              // clicking inside the SVG (#4710)
+              updateExtremes();
             }
-            if ( // For stock chart, by default render paths across the panes
-            // except the case when `acrossPanes` is disabled by user (#6644)
-            (chart.options.isStock && e.acrossPanes !== false) &&
-                // Ignore in case of colorAxis or zAxis. #3360, #3524, #6720
-                axis.coll === 'xAxis' || axis.coll === 'yAxis') {
-                e.preventDefault();
-                // Get the related axes based on series
-                axes = getAxis(axis.coll);
-                // Get the related axes based options.*Axis setting #2810
-                axes2 = (axis.isXAxis ? chart.yAxis : chart.xAxis);
-                axes2.forEach(function (A) {
-                    if (defined(A.options.id) ?
-                        A.options.id.indexOf('navigator') === -1 :
-                        true) {
-                        var a = (A.isXAxis ? 'yAxis' : 'xAxis'),
-                            rax = (defined(A.options[a]) ?
-                                chart[a][A.options[a]] :
-                                chart[a][0]);
-                        if (axis === rax) {
-                            axes.push(A);
-                        }
-                    }
-                });
-                // Remove duplicates in the axes array. If there are no axes in the axes
-                // array, we are adding an axis without data, so we need to populate
-                // this with grid lines (#2796).
-                uniqueAxes = axes.length ?
-                    [] :
-                    [axis.isXAxis ? chart.yAxis[0] : chart.xAxis[0]]; // #3742
-                axes.forEach(function (axis2) {
-                    if (uniqueAxes.indexOf(axis2) === -1 &&
-                        // Do not draw on axis which overlap completely. #5424
-                        !find(uniqueAxes, function (unique) {
-                            return unique.pos === axis2.pos && unique.len === axis2.len;
-                        })) {
-                        uniqueAxes.push(axis2);
-                    }
-                });
-                transVal = pick(translatedValue, axis.translate(value, null, null, e.old));
-                if (isNumber(transVal)) {
-                    if (axis.horiz) {
-                        uniqueAxes.forEach(function (axis2) {
-                            var skip;
-                            y1 = axis2.pos;
-                            y2 = y1 + axis2.len;
-                            x1 = x2 = Math.round(transVal + axis.transB);
-                            // outside plot area
-                            if (force !== 'pass' &&
-                                (x1 < axisLeft || x1 > axisLeft + axis.width)) {
-                                if (force) {
-                                    x1 = x2 = clamp(x1, axisLeft, axisLeft + axis.width);
-                                }
-                                else {
-                                    skip = true;
-                                }
-                            }
-                            if (!skip) {
-                                result.push(['M', x1, y1], ['L', x2, y2]);
-                            }
-                        });
-                    }
-                    else {
-                        uniqueAxes.forEach(function (axis2) {
-                            var skip;
-                            x1 = axis2.pos;
-                            x2 = x1 + axis2.len;
-                            y1 = y2 = Math.round(axisTop + axis.height - transVal);
-                            // outside plot area
-                            if (force !== 'pass' &&
-                                (y1 < axisTop || y1 > axisTop + axis.height)) {
-                                if (force) {
-                                    y1 = y2 = clamp(y1, axisTop, axisTop + axis.height);
-                                }
-                                else {
-                                    skip = true;
-                                }
-                            }
-                            if (!skip) {
-                                result.push(['M', x1, y1], ['L', x2, y2]);
-                            }
-                        });
-                    }
-                }
-                e.path = result.length > 0 ?
-                    renderer.crispPolyLine(result, e.lineWidth || 1) :
-                    // #3557 getPlotLinePath in regular Highcharts also returns null
-                    null;
+            // #10404 - move hide and blur outside focus
+            rangeSelector.hideInput(name);
+            input.blur(); // #4606
+          };
+          // handle changes in the input boxes
+          input.onchange = updateExtremes;
+          input.onkeypress = function (event) {
+            // IE does not fire onchange on enter
+            if (event.keyCode === 13) {
+              updateExtremes();
             }
-        });
+          };
+        };
         /**
-         * Function to crisp a line with multiple segments
+         * Get the position of the range selector buttons and inputs. This can be
+         * overridden from outside for custom positioning.
          *
          * @private
-         * @function Highcharts.SVGRenderer#crispPolyLine
-         * @param {Highcharts.SVGPathArray} points
-         * @param {number} width
-         * @return {Highcharts.SVGPathArray}
+         * @function Highcharts.RangeSelector#getPosition
+         *
+         * @return {Highcharts.Dictionary<number>}
          */
-        SVGRenderer.prototype.crispPolyLine = function (points, width) {
-            // points format: [['M', 0, 0], ['L', 100, 0]]
-            // normalize to a crisp line
-            for (var i = 0; i < points.length; i = i + 2) {
-                var start = points[i],
-                    end = points[i + 1];
-                if (start[1] === end[1]) {
-                    // Substract due to #1129. Now bottom and left axis gridlines behave
-                    // the same.
-                    start[1] = end[1] =
-                        Math.round(start[1]) - (width % 2 / 2);
-                }
-                if (start[2] === end[2]) {
-                    start[2] = end[2] =
-                        Math.round(start[2]) + (width % 2 / 2);
-                }
-            }
-            return points;
+        RangeSelector.prototype.getPosition = function () {
+          var chart = this.chart,
+            options = chart.options.rangeSelector,
+            top =
+              options.verticalAlign === "top"
+                ? chart.plotTop - chart.axisOffset[0]
+                : 0; // set offset only for varticalAlign top
+          return {
+            buttonTop: top + options.buttonPosition.y,
+            inputTop: top + options.inputPosition.y - 10,
+          };
         };
-        // Wrapper to hide the label
-        addEvent(Axis, 'afterHideCrosshair', function () {
-            if (this.crossLabel) {
-                this.crossLabel = this.crossLabel.hide();
-            }
-        });
-        // Extend crosshairs to also draw the label
-        addEvent(Axis, 'afterDrawCrosshair', function (event) {
-            // Check if the label has to be drawn
-            if (!defined(this.crosshair.label) ||
-                !this.crosshair.label.enabled ||
-                !this.cross) {
-                return;
+        /**
+         * Get the extremes of YTD. Will choose dataMax if its value is lower than
+         * the current timestamp. Will choose dataMin if its value is higher than
+         * the timestamp for the start of current year.
+         *
+         * @private
+         * @function Highcharts.RangeSelector#getYTDExtremes
+         *
+         * @param {number} dataMax
+         *
+         * @param {number} dataMin
+         *
+         * @return {*}
+         *         Returns min and max for the YTD
+         */
+        RangeSelector.prototype.getYTDExtremes = function (
+          dataMax,
+          dataMin,
+          useUTC
+        ) {
+          var time = this.chart.time,
+            min,
+            now = new time.Date(dataMax),
+            year = time.get("FullYear", now),
+            startOfYear = useUTC
+              ? time.Date.UTC(year, 0, 1) // eslint-disable-line new-cap
+              : +new time.Date(year, 0, 1);
+          min = Math.max(dataMin || 0, startOfYear);
+          now = now.getTime();
+          return {
+            max: Math.min(dataMax || now, now),
+            min: min,
+          };
+        };
+        /**
+         * Render the range selector including the buttons and the inputs. The first
+         * time render is called, the elements are created and positioned. On
+         * subsequent calls, they are moved and updated.
+         *
+         * @private
+         * @function Highcharts.RangeSelector#render
+         * @param {number} [min]
+         *        X axis minimum
+         * @param {number} [max]
+         *        X axis maximum
+         * @return {void}
+         */
+        RangeSelector.prototype.render = function (min, max) {
+          var rangeSelector = this,
+            chart = rangeSelector.chart,
+            renderer = chart.renderer,
+            container = chart.container,
+            chartOptions = chart.options,
+            navButtonOptions =
+              chartOptions.exporting &&
+              chartOptions.exporting.enabled !== false &&
+              chartOptions.navigation &&
+              chartOptions.navigation.buttonOptions,
+            lang = defaultOptions.lang,
+            div = rangeSelector.div,
+            options = chartOptions.rangeSelector,
+            // Place inputs above the container
+            inputsZIndex =
+              pick(
+                chartOptions.chart.style && chartOptions.chart.style.zIndex,
+                0
+              ) + 1,
+            floating = options.floating,
+            buttons = rangeSelector.buttons,
+            inputGroup = rangeSelector.inputGroup,
+            buttonTheme = options.buttonTheme,
+            buttonPosition = options.buttonPosition,
+            inputPosition = options.inputPosition,
+            inputEnabled = options.inputEnabled,
+            states = buttonTheme && buttonTheme.states,
+            plotLeft = chart.plotLeft,
+            buttonLeft,
+            buttonGroup = rangeSelector.buttonGroup,
+            group,
+            groupHeight,
+            rendered = rangeSelector.rendered,
+            verticalAlign = rangeSelector.options.verticalAlign,
+            legend = chart.legend,
+            legendOptions = legend && legend.options,
+            buttonPositionY = buttonPosition.y,
+            inputPositionY = inputPosition.y,
+            animate = chart.hasLoaded,
+            verb = animate ? "animate" : "attr",
+            exportingX = 0,
+            alignTranslateY,
+            legendHeight,
+            minPosition,
+            translateY = 0,
+            translateX;
+          if (options.enabled === false) {
+            return;
+          }
+          // create the elements
+          if (!rendered) {
+            rangeSelector.group = group = renderer
+              .g("range-selector-group")
+              .attr({
+                zIndex: 7,
+              })
+              .add();
+            rangeSelector.buttonGroup = buttonGroup = renderer
+              .g("range-selector-buttons")
+              .add(group);
+            rangeSelector.zoomText = renderer
+              .text(lang.rangeSelectorZoom, 0, 15)
+              .add(buttonGroup);
+            if (!chart.styledMode) {
+              rangeSelector.zoomText.css(options.labelStyle);
+              buttonTheme["stroke-width"] = pick(
+                buttonTheme["stroke-width"],
+                0
+              );
             }
-            var chart = this.chart, log = this.logarithmic, options = this.options.crosshair.label, // the label's options
-                horiz = this.horiz, // axis orientation
-                opposite = this.opposite, // axis position
-                left = this.left, // left position
-                top = this.top, // top position
-                crossLabel = this.crossLabel, // the svgElement
-                posx, posy, crossBox, formatOption = options.format, formatFormat = '', limit, align, tickInside = this.options.tickPosition === 'inside', snap = this.crosshair.snap !== false, value, offset = 0, 
-                // Use last available event (#5287)
-                e = event.e || (this.cross && this.cross.e), point = event.point, min = this.min, max = this.max;
-            if (log) {
-                min = log.lin2log(min);
-                max = log.lin2log(max);
-            }
-            align = (horiz ? 'center' : opposite ?
-                (this.labelAlign === 'right' ? 'right' : 'left') :
-                (this.labelAlign === 'left' ? 'left' : 'center'));
-            // If the label does not exist yet, create it.
-            if (!crossLabel) {
-                crossLabel = this.crossLabel = chart.renderer
-                    .label(null, null, null, options.shape || 'callout')
-                    .addClass('highcharts-crosshair-label' + (this.series[0] &&
-                    ' highcharts-color-' + this.series[0].colorIndex))
-                    .attr({
-                    align: options.align || align,
-                    padding: pick(options.padding, 8),
-                    r: pick(options.borderRadius, 3),
-                    zIndex: 2
+            rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
+              buttons[i] = renderer
+                .button(
+                  rangeOptions.text,
+                  0,
+                  0,
+                  function (e) {
+                    // extract events from button object and call
+                    var buttonEvents =
+                        rangeOptions.events && rangeOptions.events.click,
+                      callDefaultEvent;
+                    if (buttonEvents) {
+                      callDefaultEvent = buttonEvents.call(rangeOptions, e);
+                    }
+                    if (callDefaultEvent !== false) {
+                      rangeSelector.clickButton(i);
+                    }
+                    rangeSelector.isActive = true;
+                  },
+                  buttonTheme,
+                  states && states.hover,
+                  states && states.select,
+                  states && states.disabled
+                )
+                .attr({
+                  "text-align": "center",
                 })
-                    .add(this.labelGroup);
-                // Presentational
-                if (!chart.styledMode) {
-                    crossLabel
-                        .attr({
-                        fill: options.backgroundColor ||
-                            (this.series[0] && this.series[0].color) ||
-                            '#666666',
-                        stroke: options.borderColor || '',
-                        'stroke-width': options.borderWidth || 0
-                    })
-                        .css(extend({
-                        color: '#ffffff',
-                        fontWeight: 'normal',
-                        fontSize: '11px',
-                        textAlign: 'center'
-                    }, options.style));
-                }
+                .add(buttonGroup);
+            });
+            // first create a wrapper outside the container in order to make
+            // the inputs work and make export correct
+            if (inputEnabled !== false) {
+              rangeSelector.div = div = createElement("div", null, {
+                position: "relative",
+                height: 0,
+                zIndex: inputsZIndex,
+              });
+              container.parentNode.insertBefore(div, container);
+              // Create the group to keep the inputs
+              rangeSelector.inputGroup = inputGroup = renderer
+                .g("input-group")
+                .add(group);
+              inputGroup.offset = 0;
+              rangeSelector.drawInput("min");
+              rangeSelector.drawInput("max");
             }
-            if (horiz) {
-                posx = snap ? point.plotX + left : e.chartX;
-                posy = top + (opposite ? 0 : this.height);
+          }
+          // #8769, allow dynamically updating margins
+          rangeSelector.zoomText[verb]({
+            x: pick(plotLeft + buttonPosition.x, plotLeft),
+          });
+          // button start position
+          buttonLeft =
+            pick(plotLeft + buttonPosition.x, plotLeft) +
+            rangeSelector.zoomText.getBBox().width +
+            5;
+          rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {
+            buttons[i][verb]({ x: buttonLeft });
+            // increase button position for the next button
+            buttonLeft += buttons[i].width + pick(options.buttonSpacing, 5);
+          });
+          plotLeft = chart.plotLeft - chart.spacing[3];
+          rangeSelector.updateButtonStates();
+          // detect collisiton with exporting
+          if (
+            navButtonOptions &&
+            this.titleCollision(chart) &&
+            verticalAlign === "top" &&
+            buttonPosition.align === "right" &&
+            buttonPosition.y + buttonGroup.getBBox().height - 12 <
+              (navButtonOptions.y || 0) + navButtonOptions.height
+          ) {
+            exportingX = -40;
+          }
+          translateX = buttonPosition.x - chart.spacing[3];
+          if (buttonPosition.align === "right") {
+            translateX += exportingX - plotLeft; // (#13014)
+          } else if (buttonPosition.align === "center") {
+            translateX -= plotLeft / 2;
+          }
+          // align button group
+          buttonGroup.align(
+            {
+              y: buttonPosition.y,
+              width: buttonGroup.getBBox().width,
+              align: buttonPosition.align,
+              x: translateX,
+            },
+            true,
+            chart.spacingBox
+          );
+          // skip animation
+          rangeSelector.group.placed = animate;
+          rangeSelector.buttonGroup.placed = animate;
+          if (inputEnabled !== false) {
+            var inputGroupX, inputGroupWidth, buttonGroupX, buttonGroupWidth;
+            // detect collision with exporting
+            if (
+              navButtonOptions &&
+              this.titleCollision(chart) &&
+              verticalAlign === "top" &&
+              inputPosition.align === "right" &&
+              inputPosition.y - inputGroup.getBBox().height - 12 <
+                (navButtonOptions.y || 0) +
+                  navButtonOptions.height +
+                  chart.spacing[0]
+            ) {
+              exportingX = -40;
+            } else {
+              exportingX = 0;
             }
-            else {
-                posx = opposite ? this.width + left : 0;
-                posy = snap ? point.plotY + top : e.chartY;
+            if (inputPosition.align === "left") {
+              translateX = plotLeft;
+            } else if (inputPosition.align === "right") {
+              translateX = -Math.max(chart.axisOffset[1], -exportingX);
             }
-            if (!formatOption && !options.formatter) {
-                if (this.dateTime) {
-                    formatFormat = '%b %d, %Y';
-                }
-                formatOption =
-                    '{value' + (formatFormat ? ':' + formatFormat : '') + '}';
-            }
-            // Show the label
-            value = snap ?
-                point[this.isXAxis ? 'x' : 'y'] :
-                this.toValue(horiz ? e.chartX : e.chartY);
-            crossLabel.attr({
-                text: formatOption ?
-                    format(formatOption, { value: value }, chart) :
-                    options.formatter.call(this, value),
-                x: posx,
-                y: posy,
-                // Crosshair should be rendered within Axis range (#7219)
-                visibility: value < min || value > max ?
-                    'hidden' :
-                    'visible'
-            });
-            crossBox = crossLabel.getBBox();
-            // now it is placed we can correct its position
-            if (isNumber(crossLabel.y)) {
-                if (horiz) {
-                    if ((tickInside && !opposite) || (!tickInside && opposite)) {
-                        posy = crossLabel.y - crossBox.height;
-                    }
-                }
-                else {
-                    posy = crossLabel.y - (crossBox.height / 2);
-                }
+            // Update the alignment to the updated spacing box
+            inputGroup.align(
+              {
+                y: inputPosition.y,
+                width: inputGroup.getBBox().width,
+                align: inputPosition.align,
+                // fix wrong getBBox() value on right align
+                x: inputPosition.x + translateX - 2,
+              },
+              true,
+              chart.spacingBox
+            );
+            // detect collision
+            inputGroupX =
+              inputGroup.alignAttr.translateX +
+              inputGroup.alignOptions.x -
+              exportingX +
+              // getBBox for detecing left margin
+              inputGroup.getBBox().x +
+              // 2px padding to not overlap input and label
+              2;
+            inputGroupWidth = inputGroup.alignOptions.width;
+            buttonGroupX =
+              buttonGroup.alignAttr.translateX + buttonGroup.getBBox().x;
+            // 20 is minimal spacing between elements
+            buttonGroupWidth = buttonGroup.getBBox().width + 20;
+            if (
+              inputPosition.align === buttonPosition.align ||
+              (buttonGroupX + buttonGroupWidth > inputGroupX &&
+                inputGroupX + inputGroupWidth > buttonGroupX &&
+                buttonPositionY < inputPositionY + inputGroup.getBBox().height)
+            ) {
+              inputGroup.attr({
+                translateX:
+                  inputGroup.alignAttr.translateX +
+                  (chart.axisOffset[1] >= -exportingX ? 0 : -exportingX),
+                translateY:
+                  inputGroup.alignAttr.translateY +
+                  buttonGroup.getBBox().height +
+                  10,
+              });
             }
-            // check the edges
-            if (horiz) {
-                limit = {
-                    left: left - crossBox.x,
-                    right: left + this.width - crossBox.x
-                };
+            // Set or reset the input values
+            rangeSelector.setInputValue("min", min);
+            rangeSelector.setInputValue("max", max);
+            // skip animation
+            rangeSelector.inputGroup.placed = animate;
+          }
+          // vertical align
+          rangeSelector.group.align(
+            {
+              verticalAlign: verticalAlign,
+            },
+            true,
+            chart.spacingBox
+          );
+          // set position
+          groupHeight = rangeSelector.group.getBBox().height + 20; // # 20 padding
+          alignTranslateY = rangeSelector.group.alignAttr.translateY;
+          // calculate bottom position
+          if (verticalAlign === "bottom") {
+            legendHeight =
+              legendOptions &&
+              legendOptions.verticalAlign === "bottom" &&
+              legendOptions.enabled &&
+              !legendOptions.floating
+                ? legend.legendHeight + pick(legendOptions.margin, 10)
+                : 0;
+            groupHeight = groupHeight + legendHeight - 20;
+            translateY =
+              alignTranslateY -
+              groupHeight -
+              (floating ? 0 : options.y) -
+              (chart.titleOffset ? chart.titleOffset[2] : 0) -
+              10; // 10 spacing
+          }
+          if (verticalAlign === "top") {
+            if (floating) {
+              translateY = 0;
             }
-            else {
-                limit = {
-                    left: this.labelAlign === 'left' ? left : 0,
-                    right: this.labelAlign === 'right' ?
-                        left + this.width :
-                        chart.chartWidth
-                };
+            if (chart.titleOffset && chart.titleOffset[0]) {
+              translateY = chart.titleOffset[0];
             }
-            // left edge
-            if (crossLabel.translateX < limit.left) {
-                offset = limit.left - crossLabel.translateX;
-            }
-            // right edge
-            if (crossLabel.translateX + crossBox.width >= limit.right) {
-                offset = -(crossLabel.translateX + crossBox.width - limit.right);
-            }
-            // show the crosslabel
-            crossLabel.attr({
-                x: posx + offset,
-                y: posy,
-                // First set x and y, then anchorX and anchorY, when box is actually
-                // calculated, #5702
-                anchorX: horiz ?
-                    posx :
-                    (this.opposite ? 0 : chart.chartWidth),
-                anchorY: horiz ?
-                    (this.opposite ? chart.chartHeight : 0) :
-                    posy + crossBox.height / 2
-            });
-        });
-        /* ************************************************************************** *
-         *  Start value compare logic                                                 *
-         * ************************************************************************** */
+            translateY += chart.margin[0] - chart.spacing[0] || 0;
+          } else if (verticalAlign === "middle") {
+            if (inputPositionY === buttonPositionY) {
+              if (inputPositionY < 0) {
+                translateY = alignTranslateY + minPosition;
+              } else {
+                translateY = alignTranslateY;
+              }
+            } else if (inputPositionY || buttonPositionY) {
+              if (inputPositionY < 0 || buttonPositionY < 0) {
+                translateY -= Math.min(inputPositionY, buttonPositionY);
+              } else {
+                translateY = alignTranslateY - groupHeight + minPosition;
+              }
+            }
+          }
+          rangeSelector.group.translate(
+            options.x,
+            options.y + Math.floor(translateY)
+          );
+          // translate HTML inputs
+          if (inputEnabled !== false) {
+            rangeSelector.minInput.style.marginTop =
+              rangeSelector.group.translateY + "px";
+            rangeSelector.maxInput.style.marginTop =
+              rangeSelector.group.translateY + "px";
+          }
+          rangeSelector.rendered = true;
+        };
         /**
-         * Extend series.init by adding a method to modify the y value used for plotting
-         * on the y axis. This method is called both from the axis when finding dataMin
-         * and dataMax, and from the series.translate method.
+         * Extracts height of range selector
          *
-         * @ignore
-         * @function Highcharts.Series#init
+         * @private
+         * @function Highcharts.RangeSelector#getHeight
+         * @return {number}
+         *         Returns rangeSelector height
          */
-        seriesProto.init = function () {
-            // Call base method
-            seriesInit.apply(this, arguments);
-            // Set comparison mode
-            this.setCompare(this.options.compare);
+        RangeSelector.prototype.getHeight = function () {
+          var rangeSelector = this,
+            options = rangeSelector.options,
+            rangeSelectorGroup = rangeSelector.group,
+            inputPosition = options.inputPosition,
+            buttonPosition = options.buttonPosition,
+            yPosition = options.y,
+            buttonPositionY = buttonPosition.y,
+            inputPositionY = inputPosition.y,
+            rangeSelectorHeight = 0,
+            minPosition;
+          if (options.height) {
+            return options.height;
+          }
+          rangeSelectorHeight = rangeSelectorGroup
+            ? // 13px to keep back compatibility
+              rangeSelectorGroup.getBBox(true).height + 13 + yPosition
+            : 0;
+          minPosition = Math.min(inputPositionY, buttonPositionY);
+          if (
+            (inputPositionY < 0 && buttonPositionY < 0) ||
+            (inputPositionY > 0 && buttonPositionY > 0)
+          ) {
+            rangeSelectorHeight += Math.abs(minPosition);
+          }
+          return rangeSelectorHeight;
         };
         /**
-         * Highstock only. Set the
-         * [compare](https://api.highcharts.com/highstock/plotOptions.series.compare)
-         * mode of the series after render time. In most cases it is more useful running
-         * {@link Axis#setCompare} on the X axis to update all its series.
+         * Detect collision with title or subtitle
          *
-         * @function Highcharts.Series#setCompare
+         * @private
+         * @function Highcharts.RangeSelector#titleCollision
+         *
+         * @param {Highcharts.Chart} chart
          *
-         * @param {string} [compare]
-         *        Can be one of `null` (default), `"percent"` or `"value"`.
+         * @return {boolean}
+         *         Returns collision status
          */
-        seriesProto.setCompare = function (compare) {
-            // Set or unset the modifyValue method
-            this.modifyValue = (compare === 'value' || compare === 'percent') ?
-                function (value, point) {
-                    var compareValue = this.compareValue;
-                    if (typeof value !== 'undefined' &&
-                        typeof compareValue !== 'undefined') { // #2601, #5814
-                        // Get the modified value
-                        if (compare === 'value') {
-                            value -= compareValue;
-                            // Compare percent
-                        }
-                        else {
-                            value = 100 * (value / compareValue) -
-                                (this.options.compareBase === 100 ? 0 : 100);
-                        }
-                        // record for tooltip etc.
-                        if (point) {
-                            point.change = value;
-                        }
-                        return value;
-                    }
-                    return 0;
-                } :
-                null;
-            // Survive to export, #5485
-            this.userOptions.compare = compare;
-            // Mark dirty
-            if (this.chart.hasRendered) {
-                this.isDirty = true;
-            }
+        RangeSelector.prototype.titleCollision = function (chart) {
+          return !(chart.options.title.text || chart.options.subtitle.text);
         };
         /**
-         * Extend series.processData by finding the first y value in the plot area,
-         * used for comparing the following values
+         * Update the range selector with new options
          *
-         * @ignore
-         * @function Highcharts.Series#processData
+         * @private
+         * @function Highcharts.RangeSelector#update
+         * @param {Highcharts.RangeSelectorOptions} options
+         * @return {void}
          */
-        seriesProto.processData = function (force) {
-            var series = this,
-                i,
-                keyIndex = -1,
-                processedXData,
-                processedYData,
-                compareStart = series.options.compareStart === true ? 0 : 1,
-                length,
-                compareValue;
-            // call base method
-            seriesProcessData.apply(this, arguments);
-            if (series.xAxis && series.processedYData) { // not pies
-                // local variables
-                processedXData = series.processedXData;
-                processedYData = series.processedYData;
-                length = processedYData.length;
-                // For series with more than one value (range, OHLC etc), compare
-                // against close or the pointValKey (#4922, #3112, #9854)
-                if (series.pointArrayMap) {
-                    keyIndex = series.pointArrayMap.indexOf(series.options.pointValKey || series.pointValKey || 'y');
-                }
-                // find the first value for comparison
-                for (i = 0; i < length - compareStart; i++) {
-                    compareValue = processedYData[i] && keyIndex > -1 ?
-                        processedYData[i][keyIndex] :
-                        processedYData[i];
-                    if (isNumber(compareValue) &&
-                        processedXData[i + compareStart] >=
-                            series.xAxis.min &&
-                        compareValue !== 0) {
-                        series.compareValue = compareValue;
-                        break;
-                    }
-                }
-            }
-            return;
+        RangeSelector.prototype.update = function (options) {
+          var chart = this.chart;
+          merge(true, chart.options.rangeSelector, options);
+          this.destroy();
+          this.init(chart);
+          chart.rangeSelector.render();
         };
-        // Modify series extremes
-        addEvent(LineSeries, 'afterGetExtremes', function (e) {
-            var dataExtremes = e.dataExtremes;
-            if (this.modifyValue && dataExtremes) {
-                var extremes = [
-                        this.modifyValue(dataExtremes.dataMin),
-                        this.modifyValue(dataExtremes.dataMax)
-                    ];
-                dataExtremes.dataMin = arrayMin(extremes);
-                dataExtremes.dataMax = arrayMax(extremes);
-            }
-        });
         /**
-         * Highstock only. Set the compare mode on all series belonging to an Y axis
-         * after render time.
-         *
-         * @see [series.plotOptions.compare](https://api.highcharts.com/highstock/series.plotOptions.compare)
+         * Destroys allocated elements.
          *
-         * @sample stock/members/axis-setcompare/
-         *         Set compoare
-         *
-         * @function Highcharts.Axis#setCompare
-         *
-         * @param {string} [compare]
-         *        The compare mode. Can be one of `null` (default), `"value"` or
-         *        `"percent"`.
-         *
-         * @param {boolean} [redraw=true]
-         *        Whether to redraw the chart or to wait for a later call to
-         *        {@link Chart#redraw}.
+         * @private
+         * @function Highcharts.RangeSelector#destroy
          */
-        Axis.prototype.setCompare = function (compare, redraw) {
-            if (!this.isXAxis) {
-                this.series.forEach(function (series) {
-                    series.setCompare(compare);
-                });
-                if (pick(redraw, true)) {
-                    this.chart.redraw();
+        RangeSelector.prototype.destroy = function () {
+          var rSelector = this,
+            minInput = rSelector.minInput,
+            maxInput = rSelector.maxInput;
+          rSelector.unMouseDown();
+          rSelector.unResize();
+          // Destroy elements in collections
+          destroyObjectProperties(rSelector.buttons);
+          // Clear input element events
+          if (minInput) {
+            minInput.onfocus = minInput.onblur = minInput.onchange = null;
+          }
+          if (maxInput) {
+            maxInput.onfocus = maxInput.onblur = maxInput.onchange = null;
+          }
+          // Destroy HTML and SVG elements
+          objectEach(
+            rSelector,
+            function (val, key) {
+              if (val && key !== "chart") {
+                if (val instanceof SVGElement) {
+                  // SVGElement
+                  val.destroy();
+                } else if (val instanceof window.HTMLElement) {
+                  // HTML element
+                  discardElement(val);
+                }
+              }
+              if (val !== RangeSelector.prototype[key]) {
+                rSelector[key] = null;
+              }
+            },
+            this
+          );
+        };
+        return RangeSelector;
+      })();
+      /**
+       * The default buttons for pre-selecting time frames
+       */
+      RangeSelector.prototype.defaultButtons = [
+        {
+          type: "month",
+          count: 1,
+          text: "1m",
+        },
+        {
+          type: "month",
+          count: 3,
+          text: "3m",
+        },
+        {
+          type: "month",
+          count: 6,
+          text: "6m",
+        },
+        {
+          type: "ytd",
+          text: "YTD",
+        },
+        {
+          type: "year",
+          count: 1,
+          text: "1y",
+        },
+        {
+          type: "all",
+          text: "All",
+        },
+      ];
+      /**
+       * Get the axis min value based on the range option and the current max. For
+       * stock charts this is extended via the {@link RangeSelector} so that if the
+       * selected range is a multiple of months or years, it is compensated for
+       * various month lengths.
+       *
+       * @private
+       * @function Highcharts.Axis#minFromRange
+       * @return {number|undefined}
+       *         The new minimum value.
+       */
+      Axis.prototype.minFromRange = function () {
+        var rangeOptions = this.range,
+          type = rangeOptions.type,
+          min,
+          max = this.max,
+          dataMin,
+          range,
+          time = this.chart.time,
+          // Get the true range from a start date
+          getTrueRange = function (base, count) {
+            var timeName = type === "year" ? "FullYear" : "Month";
+            var date = new time.Date(base);
+            var basePeriod = time.get(timeName, date);
+            time.set(timeName, date, basePeriod + count);
+            if (basePeriod === time.get(timeName, date)) {
+              time.set("Date", date, 0); // #6537
+            }
+            return date.getTime() - base;
+          };
+        if (isNumber(rangeOptions)) {
+          min = max - rangeOptions;
+          range = rangeOptions;
+        } else {
+          min = max + getTrueRange(max, -rangeOptions.count);
+          // Let the fixedRange reflect initial settings (#5930)
+          if (this.chart) {
+            this.chart.fixedRange = max - min;
+          }
+        }
+        dataMin = pick(this.dataMin, Number.MIN_VALUE);
+        if (!isNumber(min)) {
+          min = dataMin;
+        }
+        if (min <= dataMin) {
+          min = dataMin;
+          if (typeof range === "undefined") {
+            // #4501
+            range = getTrueRange(min, rangeOptions.count);
+          }
+          this.newMax = Math.min(min + range, this.dataMax);
+        }
+        if (!isNumber(max)) {
+          min = void 0;
+        }
+        return min;
+      };
+      if (!H.RangeSelector) {
+        // Initialize rangeselector for stock charts
+        addEvent(Chart, "afterGetContainer", function () {
+          if (this.options.rangeSelector.enabled) {
+            this.rangeSelector = new RangeSelector(this);
+          }
+        });
+        addEvent(Chart, "beforeRender", function () {
+          var chart = this,
+            axes = chart.axes,
+            rangeSelector = chart.rangeSelector,
+            verticalAlign;
+          if (rangeSelector) {
+            if (isNumber(rangeSelector.deferredYTDClick)) {
+              rangeSelector.clickButton(rangeSelector.deferredYTDClick);
+              delete rangeSelector.deferredYTDClick;
+            }
+            axes.forEach(function (axis) {
+              axis.updateNames();
+              axis.setScale();
+            });
+            chart.getAxisMargins();
+            rangeSelector.render();
+            verticalAlign = rangeSelector.options.verticalAlign;
+            if (!rangeSelector.options.floating) {
+              if (verticalAlign === "bottom") {
+                this.extraBottomMargin = true;
+              } else if (verticalAlign !== "middle") {
+                this.extraTopMargin = true;
+              }
+            }
+          }
+        });
+        addEvent(Chart, "update", function (e) {
+          var chart = this,
+            options = e.options,
+            optionsRangeSelector = options.rangeSelector,
+            rangeSelector = chart.rangeSelector,
+            verticalAlign,
+            extraBottomMarginWas = this.extraBottomMargin,
+            extraTopMarginWas = this.extraTopMargin;
+          if (
+            optionsRangeSelector &&
+            optionsRangeSelector.enabled &&
+            !defined(rangeSelector)
+          ) {
+            this.options.rangeSelector.enabled = true;
+            this.rangeSelector = new RangeSelector(this);
+          }
+          this.extraBottomMargin = false;
+          this.extraTopMargin = false;
+          if (rangeSelector) {
+            rangeSelector.render();
+            verticalAlign =
+              (optionsRangeSelector && optionsRangeSelector.verticalAlign) ||
+              (rangeSelector.options && rangeSelector.options.verticalAlign);
+            if (!rangeSelector.options.floating) {
+              if (verticalAlign === "bottom") {
+                this.extraBottomMargin = true;
+              } else if (verticalAlign !== "middle") {
+                this.extraTopMargin = true;
+              }
+            }
+            if (
+              this.extraBottomMargin !== extraBottomMarginWas ||
+              this.extraTopMargin !== extraTopMarginWas
+            ) {
+              this.isDirtyBox = true;
+            }
+          }
+        });
+        addEvent(Chart, "render", function () {
+          var chart = this,
+            rangeSelector = chart.rangeSelector,
+            verticalAlign;
+          if (rangeSelector && !rangeSelector.options.floating) {
+            rangeSelector.render();
+            verticalAlign = rangeSelector.options.verticalAlign;
+            if (verticalAlign === "bottom") {
+              this.extraBottomMargin = true;
+            } else if (verticalAlign !== "middle") {
+              this.extraTopMargin = true;
+            }
+          }
+        });
+        addEvent(Chart, "getMargins", function () {
+          var rangeSelector = this.rangeSelector,
+            rangeSelectorHeight;
+          if (rangeSelector) {
+            rangeSelectorHeight = rangeSelector.getHeight();
+            if (this.extraTopMargin) {
+              this.plotTop += rangeSelectorHeight;
+            }
+            if (this.extraBottomMargin) {
+              this.marginBottom += rangeSelectorHeight;
+            }
+          }
+        });
+        Chart.prototype.callbacks.push(function (chart) {
+          var extremes,
+            rangeSelector = chart.rangeSelector,
+            unbindRender,
+            unbindSetExtremes,
+            legend,
+            alignTo,
+            verticalAlign;
+          /**
+           * @private
+           */
+          function renderRangeSelector() {
+            extremes = chart.xAxis[0].getExtremes();
+            legend = chart.legend;
+            verticalAlign =
+              rangeSelector === null || rangeSelector === void 0
+                ? void 0
+                : rangeSelector.options.verticalAlign;
+            if (isNumber(extremes.min)) {
+              rangeSelector.render(extremes.min, extremes.max);
+            }
+            // Re-align the legend so that it's below the rangeselector
+            if (
+              rangeSelector &&
+              legend.display &&
+              verticalAlign === "top" &&
+              verticalAlign === legend.options.verticalAlign
+            ) {
+              // Create a new alignment box for the legend.
+              alignTo = merge(chart.spacingBox);
+              if (legend.options.layout === "vertical") {
+                alignTo.y = chart.plotTop;
+              } else {
+                alignTo.y += rangeSelector.getHeight();
+              }
+              legend.group.placed = false; // Don't animate the alignment.
+              legend.align(alignTo);
+            }
+          }
+          if (rangeSelector) {
+            // redraw the scroller on setExtremes
+            unbindSetExtremes = addEvent(
+              chart.xAxis[0],
+              "afterSetExtremes",
+              function (e) {
+                rangeSelector.render(e.min, e.max);
+              }
+            );
+            // redraw the scroller chart resize
+            unbindRender = addEvent(chart, "redraw", renderRangeSelector);
+            // do it now
+            renderRangeSelector();
+          }
+          // Remove resize/afterSetExtremes at chart destroy
+          addEvent(chart, "destroy", function destroyEvents() {
+            if (rangeSelector) {
+              unbindRender();
+              unbindSetExtremes();
+            }
+          });
+        });
+        H.RangeSelector = RangeSelector;
+      }
+
+      return H.RangeSelector;
+    }
+  );
+  _registerModule(
+    _modules,
+    "Core/Chart/StockChart.js",
+    [
+      _modules["Core/Axis/Axis.js"],
+      _modules["Core/Chart/Chart.js"],
+      _modules["Core/Globals.js"],
+      _modules["Series/LineSeries.js"],
+      _modules["Core/Series/Point.js"],
+      _modules["Core/Renderer/SVG/SVGRenderer.js"],
+      _modules["Core/Utilities.js"],
+    ],
+    function (Axis, Chart, H, LineSeries, Point, SVGRenderer, U) {
+      /* *
+       *
+       *  (c) 2010-2020 Torstein Honsi
+       *
+       *  License: www.highcharts.com/license
+       *
+       *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
+       *
+       * */
+      var addEvent = U.addEvent,
+        arrayMax = U.arrayMax,
+        arrayMin = U.arrayMin,
+        clamp = U.clamp,
+        defined = U.defined,
+        extend = U.extend,
+        find = U.find,
+        format = U.format,
+        getOptions = U.getOptions,
+        isNumber = U.isNumber,
+        isString = U.isString,
+        merge = U.merge,
+        pick = U.pick,
+        splat = U.splat;
+      // Has a dependency on Navigator due to the use of
+      // defaultOptions.navigator
+      // Has a dependency on Scrollbar due to the use of
+      // defaultOptions.scrollbar
+      // Has a dependency on RangeSelector due to the use of
+      // defaultOptions.rangeSelector
+      var seriesProto = LineSeries.prototype,
+        seriesInit = seriesProto.init,
+        seriesProcessData = seriesProto.processData,
+        pointTooltipFormatter = Point.prototype.tooltipFormatter;
+      /**
+       * Compare the values of the series against the first non-null, non-
+       * zero value in the visible range. The y axis will show percentage
+       * or absolute change depending on whether `compare` is set to `"percent"`
+       * or `"value"`. When this is applied to multiple series, it allows
+       * comparing the development of the series against each other. Adds
+       * a `change` field to every point object.
+       *
+       * @see [compareBase](#plotOptions.series.compareBase)
+       * @see [Axis.setCompare()](/class-reference/Highcharts.Axis#setCompare)
+       *
+       * @sample {highstock} stock/plotoptions/series-compare-percent/
+       *         Percent
+       * @sample {highstock} stock/plotoptions/series-compare-value/
+       *         Value
+       *
+       * @type      {string}
+       * @since     1.0.1
+       * @product   highstock
+       * @apioption plotOptions.series.compare
+       */
+      /**
+       * Defines if comparison should start from the first point within the visible
+       * range or should start from the first point **before** the range.
+       *
+       * In other words, this flag determines if first point within the visible range
+       * will have 0% (`compareStart=true`) or should have been already calculated
+       * according to the previous point (`compareStart=false`).
+       *
+       * @sample {highstock} stock/plotoptions/series-comparestart/
+       *         Calculate compare within visible range
+       *
+       * @type      {boolean}
+       * @default   false
+       * @since     6.0.0
+       * @product   highstock
+       * @apioption plotOptions.series.compareStart
+       */
+      /**
+       * When [compare](#plotOptions.series.compare) is `percent`, this option
+       * dictates whether to use 0 or 100 as the base of comparison.
+       *
+       * @sample {highstock} stock/plotoptions/series-comparebase/
+       *         Compare base is 100
+       *
+       * @type       {number}
+       * @default    0
+       * @since      5.0.6
+       * @product    highstock
+       * @validvalue [0, 100]
+       * @apioption  plotOptions.series.compareBase
+       */
+      /* eslint-disable no-invalid-this, valid-jsdoc */
+      /**
+       * Factory function for creating new stock charts. Creates a new
+       * {@link Highcharts.Chart|Chart} object with different default options than the
+       * basic Chart.
+       *
+       * @example
+       * var chart = Highcharts.stockChart('container', {
+       *     series: [{
+       *         data: [1, 2, 3, 4, 5, 6, 7, 8, 9],
+       *         pointInterval: 24 * 60 * 60 * 1000
+       *     }]
+       * });
+       *
+       * @function Highcharts.stockChart
+       *
+       * @param {string|Highcharts.HTMLDOMElement} [renderTo]
+       *        The DOM element to render to, or its id.
+       *
+       * @param {Highcharts.Options} options
+       *        The chart options structure as described in the
+       *        [options reference](https://api.highcharts.com/highstock).
+       *
+       * @param {Highcharts.ChartCallbackFunction} [callback]
+       *        A function to execute when the chart object is finished loading and
+       *        rendering. In most cases the chart is built in one thread, but in
+       *        Internet Explorer version 8 or less the chart is sometimes
+       *        initialized before the document is ready, and in these cases the
+       *        chart object will not be finished synchronously. As a consequence,
+       *        code that relies on the newly built Chart object should always run in
+       *        the callback. Defining a
+       *        [chart.events.load](https://api.highcharts.com/highstock/chart.events.load)
+       *        handler is equivalent.
+       *
+       * @return {Highcharts.Chart}
+       *         The chart object.
+       */
+      H.StockChart = H.stockChart = function (a, b, c) {
+        var hasRenderToArg = isString(a) || a.nodeName,
+          options = arguments[hasRenderToArg ? 1 : 0],
+          userOptions = options,
+          // to increase performance, don't merge the data
+          seriesOptions = options.series,
+          defaultOptions = getOptions(),
+          opposite,
+          // Always disable startOnTick:true on the main axis when the navigator
+          // is enabled (#1090)
+          navigatorEnabled = pick(
+            options.navigator && options.navigator.enabled,
+            defaultOptions.navigator.enabled,
+            true
+          );
+        // apply X axis options to both single and multi y axes
+        options.xAxis = splat(options.xAxis || {}).map(function (
+          xAxisOptions,
+          i
+        ) {
+          return merge(
+            {
+              minPadding: 0,
+              maxPadding: 0,
+              overscroll: 0,
+              ordinal: true,
+              title: {
+                text: null,
+              },
+              labels: {
+                overflow: "justify",
+              },
+              showLastLabel: true,
+            },
+            defaultOptions.xAxis, // #3802
+            defaultOptions.xAxis && defaultOptions.xAxis[i], // #7690
+            xAxisOptions, // user options
+            {
+              type: "datetime",
+              categories: null,
+            },
+            navigatorEnabled
+              ? {
+                  startOnTick: false,
+                  endOnTick: false,
                 }
+              : null
+          );
+        });
+        // apply Y axis options to both single and multi y axes
+        options.yAxis = splat(options.yAxis || {}).map(function (
+          yAxisOptions,
+          i
+        ) {
+          opposite = pick(yAxisOptions.opposite, true);
+          return merge(
+            {
+              labels: {
+                y: -2,
+              },
+              opposite: opposite,
+              /**
+               * @default {highcharts} true
+               * @default {highstock} false
+               * @apioption yAxis.showLastLabel
+               *
+               * @private
+               */
+              showLastLabel: !!(
+                // #6104, show last label by default for category axes
+                (yAxisOptions.categories || yAxisOptions.type === "category")
+              ),
+              title: {
+                text: null,
+              },
+            },
+            defaultOptions.yAxis, // #3802
+            defaultOptions.yAxis && defaultOptions.yAxis[i], // #7690
+            yAxisOptions // user options
+          );
+        });
+        options.series = null;
+        options = merge(
+          {
+            chart: {
+              panning: {
+                enabled: true,
+                type: "x",
+              },
+              pinchType: "x",
+            },
+            navigator: {
+              enabled: navigatorEnabled,
+            },
+            scrollbar: {
+              // #4988 - check if setOptions was called
+              enabled: pick(defaultOptions.scrollbar.enabled, true),
+            },
+            rangeSelector: {
+              // #4988 - check if setOptions was called
+              enabled: pick(defaultOptions.rangeSelector.enabled, true),
+            },
+            title: {
+              text: null,
+            },
+            tooltip: {
+              split: pick(defaultOptions.tooltip.split, true),
+              crosshairs: true,
+            },
+            legend: {
+              enabled: false,
+            },
+          },
+          options, // user's options
+          {
+            isStock: true, // internal flag
+          }
+        );
+        options.series = userOptions.series = seriesOptions;
+        return hasRenderToArg
+          ? new Chart(a, options, c)
+          : new Chart(options, b);
+      };
+      // Handle som Stock-specific series defaults, override the plotOptions before
+      // series options are handled.
+      addEvent(LineSeries, "setOptions", function (e) {
+        var overrides;
+        if (this.chart.options.isStock) {
+          if (this.is("column") || this.is("columnrange")) {
+            overrides = {
+              borderWidth: 0,
+              shadow: false,
+            };
+          } else if (!this.is("scatter") && !this.is("sma")) {
+            overrides = {
+              marker: {
+                enabled: false,
+                radius: 2,
+              },
+            };
+          }
+          if (overrides) {
+            e.plotOptions[this.type] = merge(
+              e.plotOptions[this.type],
+              overrides
+            );
+          }
+        }
+      });
+      // Override the automatic label alignment so that the first Y axis' labels
+      // are drawn on top of the grid line, and subsequent axes are drawn outside
+      addEvent(Axis, "autoLabelAlign", function (e) {
+        var chart = this.chart,
+          options = this.options,
+          panes = (chart._labelPanes = chart._labelPanes || {}),
+          key,
+          labelOptions = this.options.labels;
+        if (this.chart.options.isStock && this.coll === "yAxis") {
+          key = options.top + "," + options.height;
+          // do it only for the first Y axis of each pane
+          if (!panes[key] && labelOptions.enabled) {
+            if (labelOptions.x === 15) {
+              // default
+              labelOptions.x = 0;
             }
-        };
+            if (typeof labelOptions.align === "undefined") {
+              labelOptions.align = "right";
+            }
+            panes[key] = this;
+            e.align = "right";
+            e.preventDefault();
+          }
+        }
+      });
+      // Clear axis from label panes (#6071)
+      addEvent(Axis, "destroy", function () {
+        var chart = this.chart,
+          key = this.options && this.options.top + "," + this.options.height;
+        if (key && chart._labelPanes && chart._labelPanes[key] === this) {
+          delete chart._labelPanes[key];
+        }
+      });
+      // Override getPlotLinePath to allow for multipane charts
+      addEvent(Axis, "getPlotLinePath", function (e) {
+        var axis = this,
+          series =
+            this.isLinked && !this.series
+              ? this.linkedParent.series
+              : this.series,
+          chart = axis.chart,
+          renderer = chart.renderer,
+          axisLeft = axis.left,
+          axisTop = axis.top,
+          x1,
+          y1,
+          x2,
+          y2,
+          result = [],
+          axes = [], // #3416 need a default array
+          axes2,
+          uniqueAxes,
+          translatedValue = e.translatedValue,
+          value = e.value,
+          force = e.force,
+          transVal;
         /**
-         * Extend the tooltip formatter by adding support for the point.change variable
-         * as well as the changeDecimals option.
-         *
-         * @ignore
-         * @function Highcharts.Point#tooltipFormatter
-         *
-         * @param {string} pointFormat
+         * Return the other axis based on either the axis option or on related
+         * series.
+         * @private
          */
-        Point.prototype.tooltipFormatter = function (pointFormat) {
-            var point = this;
-            var numberFormatter = point.series.chart.numberFormatter;
-            pointFormat = pointFormat.replace('{point.change}', (point.change > 0 ? '+' : '') + numberFormatter(point.change, pick(point.series.tooltipOptions.changeDecimals, 2)));
-            return pointTooltipFormatter.apply(this, [pointFormat]);
-        };
-        /* ************************************************************************** *
-         *  End value compare logic                                                   *
-         * ************************************************************************** */
-        // Extend the Series prototype to create a separate series clip box. This is
-        // related to using multiple panes, and a future pane logic should incorporate
-        // this feature (#2754).
-        addEvent(LineSeries, 'render', function () {
-            var chart = this.chart,
-                clipHeight;
-            // Only do this on not 3d (#2939, #5904) nor polar (#6057) charts, and only
-            // if the series type handles clipping in the animate method (#2975).
-            if (!(chart.is3d && chart.is3d()) &&
-                !chart.polar &&
-                this.xAxis &&
-                !this.xAxis.isRadial // Gauge, #6192
+        function getAxis(coll) {
+          var otherColl = coll === "xAxis" ? "yAxis" : "xAxis",
+            opt = axis.options[otherColl];
+          // Other axis indexed by number
+          if (isNumber(opt)) {
+            return [chart[otherColl][opt]];
+          }
+          // Other axis indexed by id (like navigator)
+          if (isString(opt)) {
+            return [chart.get(opt)];
+          }
+          // Auto detect based on existing series
+          return series.map(function (s) {
+            return s[otherColl];
+          });
+        }
+        if (
+          // For stock chart, by default render paths across the panes
+          // except the case when `acrossPanes` is disabled by user (#6644)
+          (chart.options.isStock &&
+            e.acrossPanes !== false &&
+            // Ignore in case of colorAxis or zAxis. #3360, #3524, #6720
+            axis.coll === "xAxis") ||
+          axis.coll === "yAxis"
+        ) {
+          e.preventDefault();
+          // Get the related axes based on series
+          axes = getAxis(axis.coll);
+          // Get the related axes based options.*Axis setting #2810
+          axes2 = axis.isXAxis ? chart.yAxis : chart.xAxis;
+          axes2.forEach(function (A) {
+            if (
+              defined(A.options.id)
+                ? A.options.id.indexOf("navigator") === -1
+                : true
             ) {
-                clipHeight = this.yAxis.len;
-                // Include xAxis line width (#8031) but only if the Y axis ends on the
-                // edge of the X axis (#11005).
-                if (this.xAxis.axisLine) {
-                    var dist = chart.plotTop + chart.plotHeight -
-                            this.yAxis.pos - this.yAxis.len,
-                        lineHeightCorrection = Math.floor(this.xAxis.axisLine.strokeWidth() / 2);
-                    if (dist >= 0) {
-                        clipHeight -= Math.max(lineHeightCorrection - dist, 0);
-                    }
-                }
-                // First render, initial clip box
-                if (!this.clipBox && !chart.hasRendered) {
-                    this.clipBox = merge(chart.clipBox);
-                    this.clipBox.width = this.xAxis.len;
-                    this.clipBox.height = clipHeight;
-                    // On redrawing, resizing etc, update the clip rectangle
-                }
-                else if (chart[this.sharedClipKey]) {
-                    // animate in case resize is done during initial animation
-                    chart[this.sharedClipKey].animate({
-                        width: this.xAxis.len,
-                        height: clipHeight
-                    });
-                    // also change markers clip animation for consistency
-                    // (marker clip rects should exist only on chart init)
-                    if (chart[this.sharedClipKey + 'm']) {
-                        chart[this.sharedClipKey + 'm'].animate({
-                            width: this.xAxis.len
-                        });
-                    }
-                }
+              var a = A.isXAxis ? "yAxis" : "xAxis",
+                rax = defined(A.options[a])
+                  ? chart[a][A.options[a]]
+                  : chart[a][0];
+              if (axis === rax) {
+                axes.push(A);
+              }
+            }
+          });
+          // Remove duplicates in the axes array. If there are no axes in the axes
+          // array, we are adding an axis without data, so we need to populate
+          // this with grid lines (#2796).
+          uniqueAxes = axes.length
+            ? []
+            : [axis.isXAxis ? chart.yAxis[0] : chart.xAxis[0]]; // #3742
+          axes.forEach(function (axis2) {
+            if (
+              uniqueAxes.indexOf(axis2) === -1 &&
+              // Do not draw on axis which overlap completely. #5424
+              !find(uniqueAxes, function (unique) {
+                return unique.pos === axis2.pos && unique.len === axis2.len;
+              })
+            ) {
+              uniqueAxes.push(axis2);
+            }
+          });
+          transVal = pick(
+            translatedValue,
+            axis.translate(value, null, null, e.old)
+          );
+          if (isNumber(transVal)) {
+            if (axis.horiz) {
+              uniqueAxes.forEach(function (axis2) {
+                var skip;
+                y1 = axis2.pos;
+                y2 = y1 + axis2.len;
+                x1 = x2 = Math.round(transVal + axis.transB);
+                // outside plot area
+                if (
+                  force !== "pass" &&
+                  (x1 < axisLeft || x1 > axisLeft + axis.width)
+                ) {
+                  if (force) {
+                    x1 = x2 = clamp(x1, axisLeft, axisLeft + axis.width);
+                  } else {
+                    skip = true;
+                  }
+                }
+                if (!skip) {
+                  result.push(["M", x1, y1], ["L", x2, y2]);
+                }
+              });
+            } else {
+              uniqueAxes.forEach(function (axis2) {
+                var skip;
+                x1 = axis2.pos;
+                x2 = x1 + axis2.len;
+                y1 = y2 = Math.round(axisTop + axis.height - transVal);
+                // outside plot area
+                if (
+                  force !== "pass" &&
+                  (y1 < axisTop || y1 > axisTop + axis.height)
+                ) {
+                  if (force) {
+                    y1 = y2 = clamp(y1, axisTop, axisTop + axis.height);
+                  } else {
+                    skip = true;
+                  }
+                }
+                if (!skip) {
+                  result.push(["M", x1, y1], ["L", x2, y2]);
+                }
+              });
             }
+          }
+          e.path =
+            result.length > 0
+              ? renderer.crispPolyLine(result, e.lineWidth || 1)
+              : // #3557 getPlotLinePath in regular Highcharts also returns null
+                null;
+        }
+      });
+      /**
+       * Function to crisp a line with multiple segments
+       *
+       * @private
+       * @function Highcharts.SVGRenderer#crispPolyLine
+       * @param {Highcharts.SVGPathArray} points
+       * @param {number} width
+       * @return {Highcharts.SVGPathArray}
+       */
+      SVGRenderer.prototype.crispPolyLine = function (points, width) {
+        // points format: [['M', 0, 0], ['L', 100, 0]]
+        // normalize to a crisp line
+        for (var i = 0; i < points.length; i = i + 2) {
+          var start = points[i],
+            end = points[i + 1];
+          if (start[1] === end[1]) {
+            // Substract due to #1129. Now bottom and left axis gridlines behave
+            // the same.
+            start[1] = end[1] = Math.round(start[1]) - (width % 2) / 2;
+          }
+          if (start[2] === end[2]) {
+            start[2] = end[2] = Math.round(start[2]) + (width % 2) / 2;
+          }
+        }
+        return points;
+      };
+      // Wrapper to hide the label
+      addEvent(Axis, "afterHideCrosshair", function () {
+        if (this.crossLabel) {
+          this.crossLabel = this.crossLabel.hide();
+        }
+      });
+      // Extend crosshairs to also draw the label
+      addEvent(Axis, "afterDrawCrosshair", function (event) {
+        // Check if the label has to be drawn
+        if (
+          !defined(this.crosshair.label) ||
+          !this.crosshair.label.enabled ||
+          !this.cross
+        ) {
+          return;
+        }
+        var chart = this.chart,
+          log = this.logarithmic,
+          options = this.options.crosshair.label, // the label's options
+          horiz = this.horiz, // axis orientation
+          opposite = this.opposite, // axis position
+          left = this.left, // left position
+          top = this.top, // top position
+          crossLabel = this.crossLabel, // the svgElement
+          posx,
+          posy,
+          crossBox,
+          formatOption = options.format,
+          formatFormat = "",
+          limit,
+          align,
+          tickInside = this.options.tickPosition === "inside",
+          snap = this.crosshair.snap !== false,
+          value,
+          offset = 0,
+          // Use last available event (#5287)
+          e = event.e || (this.cross && this.cross.e),
+          point = event.point,
+          min = this.min,
+          max = this.max;
+        if (log) {
+          min = log.lin2log(min);
+          max = log.lin2log(max);
+        }
+        align = horiz
+          ? "center"
+          : opposite
+          ? this.labelAlign === "right"
+            ? "right"
+            : "left"
+          : this.labelAlign === "left"
+          ? "left"
+          : "center";
+        // If the label does not exist yet, create it.
+        if (!crossLabel) {
+          crossLabel = this.crossLabel = chart.renderer
+            .label(null, null, null, options.shape || "callout")
+            .addClass(
+              "highcharts-crosshair-label" +
+                (this.series[0] &&
+                  " highcharts-color-" + this.series[0].colorIndex)
+            )
+            .attr({
+              align: options.align || align,
+              padding: pick(options.padding, 8),
+              r: pick(options.borderRadius, 3),
+              zIndex: 2,
+            })
+            .add(this.labelGroup);
+          // Presentational
+          if (!chart.styledMode) {
+            crossLabel
+              .attr({
+                fill:
+                  options.backgroundColor ||
+                  (this.series[0] && this.series[0].color) ||
+                  "#666666",
+                stroke: options.borderColor || "",
+                "stroke-width": options.borderWidth || 0,
+              })
+              .css(
+                extend(
+                  {
+                    color: "#ffffff",
+                    fontWeight: "normal",
+                    fontSize: "11px",
+                    textAlign: "center",
+                  },
+                  options.style
+                )
+              );
+          }
+        }
+        if (horiz) {
+          posx = snap ? point.plotX + left : e.chartX;
+          posy = top + (opposite ? 0 : this.height);
+        } else {
+          posx = opposite ? this.width + left : 0;
+          posy = snap ? point.plotY + top : e.chartY;
+        }
+        if (!formatOption && !options.formatter) {
+          if (this.dateTime) {
+            formatFormat = "%b %d, %Y";
+          }
+          formatOption =
+            "{value" + (formatFormat ? ":" + formatFormat : "") + "}";
+        }
+        // Show the label
+        value = snap
+          ? point[this.isXAxis ? "x" : "y"]
+          : this.toValue(horiz ? e.chartX : e.chartY);
+        crossLabel.attr({
+          text: formatOption
+            ? format(formatOption, { value: value }, chart)
+            : options.formatter.call(this, value),
+          x: posx,
+          y: posy,
+          // Crosshair should be rendered within Axis range (#7219)
+          visibility: value < min || value > max ? "hidden" : "visible",
         });
-        addEvent(Chart, 'update', function (e) {
-            var options = e.options;
-            // Use case: enabling scrollbar from a disabled state.
-            // Scrollbar needs to be initialized from a controller, Navigator in this
-            // case (#6615)
-            if ('scrollbar' in options && this.navigator) {
-                merge(true, this.options.scrollbar, options.scrollbar);
-                this.navigator.update({}, false);
-                delete options.scrollbar;
+        crossBox = crossLabel.getBBox();
+        // now it is placed we can correct its position
+        if (isNumber(crossLabel.y)) {
+          if (horiz) {
+            if ((tickInside && !opposite) || (!tickInside && opposite)) {
+              posy = crossLabel.y - crossBox.height;
             }
+          } else {
+            posy = crossLabel.y - crossBox.height / 2;
+          }
+        }
+        // check the edges
+        if (horiz) {
+          limit = {
+            left: left - crossBox.x,
+            right: left + this.width - crossBox.x,
+          };
+        } else {
+          limit = {
+            left: this.labelAlign === "left" ? left : 0,
+            right:
+              this.labelAlign === "right"
+                ? left + this.width
+                : chart.chartWidth,
+          };
+        }
+        // left edge
+        if (crossLabel.translateX < limit.left) {
+          offset = limit.left - crossLabel.translateX;
+        }
+        // right edge
+        if (crossLabel.translateX + crossBox.width >= limit.right) {
+          offset = -(crossLabel.translateX + crossBox.width - limit.right);
+        }
+        // show the crosslabel
+        crossLabel.attr({
+          x: posx + offset,
+          y: posy,
+          // First set x and y, then anchorX and anchorY, when box is actually
+          // calculated, #5702
+          anchorX: horiz ? posx : this.opposite ? 0 : chart.chartWidth,
+          anchorY: horiz
+            ? this.opposite
+              ? chart.chartHeight
+              : 0
+            : posy + crossBox.height / 2,
         });
-
-    });
-    _registerModule(_modules, 'masters/modules/stock.src.js', [], function () {
-
-
-    });
-}));
\ No newline at end of file
+      });
+      /* ************************************************************************** *
+       *  Start value compare logic                                                 *
+       * ************************************************************************** */
+      /**
+       * Extend series.init by adding a method to modify the y value used for plotting
+       * on the y axis. This method is called both from the axis when finding dataMin
+       * and dataMax, and from the series.translate method.
+       *
+       * @ignore
+       * @function Highcharts.Series#init
+       */
+      seriesProto.init = function () {
+        // Call base method
+        seriesInit.apply(this, arguments);
+        // Set comparison mode
+        this.setCompare(this.options.compare);
+      };
+      /**
+       * Highstock only. Set the
+       * [compare](https://api.highcharts.com/highstock/plotOptions.series.compare)
+       * mode of the series after render time. In most cases it is more useful running
+       * {@link Axis#setCompare} on the X axis to update all its series.
+       *
+       * @function Highcharts.Series#setCompare
+       *
+       * @param {string} [compare]
+       *        Can be one of `null` (default), `"percent"` or `"value"`.
+       */
+      seriesProto.setCompare = function (compare) {
+        // Set or unset the modifyValue method
+        this.modifyValue =
+          compare === "value" || compare === "percent"
+            ? function (value, point) {
+                var compareValue = this.compareValue;
+                if (
+                  typeof value !== "undefined" &&
+                  typeof compareValue !== "undefined"
+                ) {
+                  // #2601, #5814
+                  // Get the modified value
+                  if (compare === "value") {
+                    value -= compareValue;
+                    // Compare percent
+                  } else {
+                    value =
+                      100 * (value / compareValue) -
+                      (this.options.compareBase === 100 ? 0 : 100);
+                  }
+                  // record for tooltip etc.
+                  if (point) {
+                    point.change = value;
+                  }
+                  return value;
+                }
+                return 0;
+              }
+            : null;
+        // Survive to export, #5485
+        this.userOptions.compare = compare;
+        // Mark dirty
+        if (this.chart.hasRendered) {
+          this.isDirty = true;
+        }
+      };
+      /**
+       * Extend series.processData by finding the first y value in the plot area,
+       * used for comparing the following values
+       *
+       * @ignore
+       * @function Highcharts.Series#processData
+       */
+      seriesProto.processData = function (force) {
+        var series = this,
+          i,
+          keyIndex = -1,
+          processedXData,
+          processedYData,
+          compareStart = series.options.compareStart === true ? 0 : 1,
+          length,
+          compareValue;
+        // call base method
+        seriesProcessData.apply(this, arguments);
+        if (series.xAxis && series.processedYData) {
+          // not pies
+          // local variables
+          processedXData = series.processedXData;
+          processedYData = series.processedYData;
+          length = processedYData.length;
+          // For series with more than one value (range, OHLC etc), compare
+          // against close or the pointValKey (#4922, #3112, #9854)
+          if (series.pointArrayMap) {
+            keyIndex = series.pointArrayMap.indexOf(
+              series.options.pointValKey || series.pointValKey || "y"
+            );
+          }
+          // find the first value for comparison
+          for (i = 0; i < length - compareStart; i++) {
+            compareValue =
+              processedYData[i] && keyIndex > -1
+                ? processedYData[i][keyIndex]
+                : processedYData[i];
+            if (
+              isNumber(compareValue) &&
+              processedXData[i + compareStart] >= series.xAxis.min &&
+              compareValue !== 0
+            ) {
+              series.compareValue = compareValue;
+              break;
+            }
+          }
+        }
+        return;
+      };
+      // Modify series extremes
+      addEvent(LineSeries, "afterGetExtremes", function (e) {
+        var dataExtremes = e.dataExtremes;
+        if (this.modifyValue && dataExtremes) {
+          var extremes = [
+            this.modifyValue(dataExtremes.dataMin),
+            this.modifyValue(dataExtremes.dataMax),
+          ];
+          dataExtremes.dataMin = arrayMin(extremes);
+          dataExtremes.dataMax = arrayMax(extremes);
+        }
+      });
+      /**
+       * Highstock only. Set the compare mode on all series belonging to an Y axis
+       * after render time.
+       *
+       * @see [series.plotOptions.compare](https://api.highcharts.com/highstock/series.plotOptions.compare)
+       *
+       * @sample stock/members/axis-setcompare/
+       *         Set compoare
+       *
+       * @function Highcharts.Axis#setCompare
+       *
+       * @param {string} [compare]
+       *        The compare mode. Can be one of `null` (default), `"value"` or
+       *        `"percent"`.
+       *
+       * @param {boolean} [redraw=true]
+       *        Whether to redraw the chart or to wait for a later call to
+       *        {@link Chart#redraw}.
+       */
+      Axis.prototype.setCompare = function (compare, redraw) {
+        if (!this.isXAxis) {
+          this.series.forEach(function (series) {
+            series.setCompare(compare);
+          });
+          if (pick(redraw, true)) {
+            this.chart.redraw();
+          }
+        }
+      };
+      /**
+       * Extend the tooltip formatter by adding support for the point.change variable
+       * as well as the changeDecimals option.
+       *
+       * @ignore
+       * @function Highcharts.Point#tooltipFormatter
+       *
+       * @param {string} pointFormat
+       */
+      Point.prototype.tooltipFormatter = function (pointFormat) {
+        var point = this;
+        var numberFormatter = point.series.chart.numberFormatter;
+        pointFormat = pointFormat.replace(
+          "{point.change}",
+          (point.change > 0 ? "+" : "") +
+            numberFormatter(
+              point.change,
+              pick(point.series.tooltipOptions.changeDecimals, 2)
+            )
+        );
+        return pointTooltipFormatter.apply(this, [pointFormat]);
+      };
+      /* ************************************************************************** *
+       *  End value compare logic                                                   *
+       * ************************************************************************** */
+      // Extend the Series prototype to create a separate series clip box. This is
+      // related to using multiple panes, and a future pane logic should incorporate
+      // this feature (#2754).
+      addEvent(LineSeries, "render", function () {
+        var chart = this.chart,
+          clipHeight;
+        // Only do this on not 3d (#2939, #5904) nor polar (#6057) charts, and only
+        // if the series type handles clipping in the animate method (#2975).
+        if (
+          !(chart.is3d && chart.is3d()) &&
+          !chart.polar &&
+          this.xAxis &&
+          !this.xAxis.isRadial // Gauge, #6192
+        ) {
+          clipHeight = this.yAxis.len;
+          // Include xAxis line width (#8031) but only if the Y axis ends on the
+          // edge of the X axis (#11005).
+          if (this.xAxis.axisLine) {
+            var dist =
+                chart.plotTop +
+                chart.plotHeight -
+                this.yAxis.pos -
+                this.yAxis.len,
+              lineHeightCorrection = Math.floor(
+                this.xAxis.axisLine.strokeWidth() / 2
+              );
+            if (dist >= 0) {
+              clipHeight -= Math.max(lineHeightCorrection - dist, 0);
+            }
+          }
+          // First render, initial clip box
+          if (!this.clipBox && !chart.hasRendered) {
+            this.clipBox = merge(chart.clipBox);
+            this.clipBox.width = this.xAxis.len;
+            this.clipBox.height = clipHeight;
+            // On redrawing, resizing etc, update the clip rectangle
+          } else if (chart[this.sharedClipKey]) {
+            // animate in case resize is done during initial animation
+            chart[this.sharedClipKey].animate({
+              width: this.xAxis.len,
+              height: clipHeight,
+            });
+            // also change markers clip animation for consistency
+            // (marker clip rects should exist only on chart init)
+            if (chart[this.sharedClipKey + "m"]) {
+              chart[this.sharedClipKey + "m"].animate({
+                width: this.xAxis.len,
+              });
+            }
+          }
+        }
+      });
+      addEvent(Chart, "update", function (e) {
+        var options = e.options;
+        // Use case: enabling scrollbar from a disabled state.
+        // Scrollbar needs to be initialized from a controller, Navigator in this
+        // case (#6615)
+        if ("scrollbar" in options && this.navigator) {
+          merge(true, this.options.scrollbar, options.scrollbar);
+          this.navigator.update({}, false);
+          delete options.scrollbar;
+        }
+      });
+    }
+  );
+  _registerModule(_modules, "masters/modules/stock.src.js", [], function () {});
+});
diff --git a/notemyprogress/js/sortablejs.js b/notemyprogress/js/sortablejs.js
index a2081a015c2ec17525234cc75547fa650e24129e..921f8b7e7b04355def6ff0bbdf49f9895f541510 100644
--- a/notemyprogress/js/sortablejs.js
+++ b/notemyprogress/js/sortablejs.js
@@ -1,2 +1,1473 @@
 /*! Sortable 1.8.4 - MIT | git://github.com/SortableJS/Sortable.git */
-!function(t){"use strict";"function"==typeof define&&define.amd?define(t):"undefined"!=typeof module&&void 0!==module.exports?module.exports=t():window.Sortable=t()}(function(){"use strict";if("undefined"==typeof window||!window.document)return function(){throw new Error("Sortable.js requires a window with a document")};var U,V,f,u,q,G,h,X,Y,A,K,n,Z,Q,l,s,c,p,k,J,$,tt,et,ot,g,nt,I=[],B=!1,v=!1,it=!1,d=[],rt=!1,at=!1,m=[],i=/\s+/g,lt="Sortable"+(new Date).getTime(),b=window,st=b.document,w=b.parseInt,ct=b.setTimeout,e=b.jQuery||b.Zepto,o=b.Polymer,r={capture:!1,passive:!1},dt=!!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\.|msie|iemobile)/i),_=!!navigator.userAgent.match(/Edge/i),y=!!navigator.userAgent.match(/firefox/i),D=!(!navigator.userAgent.match(/safari/i)||navigator.userAgent.match(/chrome/i)||navigator.userAgent.match(/android/i)),S=!!navigator.userAgent.match(/iP(ad|od|hone)/i),T=_||dt?"cssFloat":"float",a="draggable"in st.createElement("div"),C=function(){if(dt)return!1;var t=st.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}(),ht=!1,E=!1,ut=Math.abs,x=Math.min,N=Math.max,M=[],P=function(t,e){var o=Dt(t),n=w(o.width)-w(o.paddingLeft)-w(o.paddingRight)-w(o.borderLeftWidth)-w(o.borderRightWidth),i=Mt(t,0,e),r=Mt(t,1,e),a=i&&Dt(i),l=r&&Dt(r),s=a&&w(a.marginLeft)+w(a.marginRight)+Lt(i).width,c=l&&w(l.marginLeft)+w(l.marginRight)+Lt(r).width;if("flex"===o.display)return"column"===o.flexDirection||"column-reverse"===o.flexDirection?"vertical":"horizontal";if("grid"===o.display)return o.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(i&&"none"!==a.float){var d="left"===a.float?"left":"right";return!r||"both"!==l.clear&&l.clear!==d?"horizontal":"vertical"}return i&&("block"===a.display||"flex"===a.display||"table"===a.display||"grid"===a.display||n<=s&&"none"===o[T]||r&&"none"===o[T]&&n<s+c)?"vertical":"horizontal"},O=function(t,e){if(!t||!t.getBoundingClientRect)return H();var o=t,n=!1;do{if(o.clientWidth<o.scrollWidth||o.clientHeight<o.scrollHeight){var i=Dt(o);if(o.clientWidth<o.scrollWidth&&("auto"==i.overflowX||"scroll"==i.overflowX)||o.clientHeight<o.scrollHeight&&("auto"==i.overflowY||"scroll"==i.overflowY)){if(!o||!o.getBoundingClientRect||o===st.body)return H();if(n||e)return o;n=!0}}}while(o=o.parentNode);return H()},H=function(){return dt?st.documentElement:st.scrollingElement},ft=function(t,e,o){t.scrollLeft+=e,t.scrollTop+=o},R=It(function(o,t,e,n){if(t.scroll){var i=e?e[lt]:window,r=t.scrollSensitivity,a=t.scrollSpeed,l=o.clientX,s=o.clientY,c=H(),d=!1;Y!==e&&(L(),X=t.scroll,A=t.scrollFn,!0===X&&(X=O(e,!0),Y=X));var h=0,u=X;do{var f,p,g,v,m,b,w,_,y,D=u,S=Lt(D),T=S.top,C=S.bottom,E=S.left,x=S.right,N=S.width,M=S.height;if(f=D.scrollWidth,p=D.scrollHeight,g=Dt(D),_=D.scrollLeft,y=D.scrollTop,w=D===c?(b=N<f&&("auto"===g.overflowX||"scroll"===g.overflowX||"visible"===g.overflowX),M<p&&("auto"===g.overflowY||"scroll"===g.overflowY||"visible"===g.overflowY)):(b=N<f&&("auto"===g.overflowX||"scroll"===g.overflowX),M<p&&("auto"===g.overflowY||"scroll"===g.overflowY)),v=b&&(ut(x-l)<=r&&_+N<f)-(ut(E-l)<=r&&!!_),m=w&&(ut(C-s)<=r&&y+M<p)-(ut(T-s)<=r&&!!y),!I[h])for(var P=0;P<=h;P++)I[P]||(I[P]={});I[h].vx==v&&I[h].vy==m&&I[h].el===D||(I[h].el=D,I[h].vx=v,I[h].vy=m,clearInterval(I[h].pid),!D||0==v&&0==m||(d=!0,I[h].pid=setInterval(function(){n&&0===this.layer&&(mt.active._emulateDragOver(!0),mt.active._onTouchMove(k,!0));var t=I[this.layer].vy?I[this.layer].vy*a:0,e=I[this.layer].vx?I[this.layer].vx*a:0;"function"==typeof A&&"continue"!==A.call(i,e,t,o,k,I[this.layer].el)||ft(I[this.layer].el,e,t)}.bind({layer:h}),24))),h++}while(t.bubbleScroll&&u!==c&&(u=O(u,!1)));B=d}},30),L=function(){I.forEach(function(t){clearInterval(t.pid)}),I=[]},W=function(t){function s(a,l){return function(t,e,o,n){var i=t.options.group.name&&e.options.group.name&&t.options.group.name===e.options.group.name;if(null==a&&(l||i))return!0;if(null==a||!1===a)return!1;if(l&&"clone"===a)return a;if("function"==typeof a)return s(a(t,e,o,n),l)(t,e,o,n);var r=(l?t:e).options.group.name;return!0===a||"string"==typeof a&&a===r||a.join&&-1<a.indexOf(r)}}var e={},o=t.group;o&&"object"==typeof o||(o={name:o}),e.name=o.name,e.checkPull=s(o.pull,!0),e.checkPut=s(o.put),e.revertClone=o.revertClone,t.group=e},F=function(t){U&&U.parentNode&&U.parentNode[lt]&&U.parentNode[lt]._computeIsAligned(t)},pt=function(t,e){for(var o=e;!o[lt];)o=o.parentNode;return t===o},gt=function(t,e,o){for(var n=t.parentNode;n&&!n[lt];)n=n.parentNode;n&&n[lt][o](Bt(e,{artificialBubble:!0}))},z=function(){!C&&f&&Dt(f,"display","none")},j=function(){!C&&f&&Dt(f,"display","")};st.addEventListener("click",function(t){if(it)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),it=!1},!0);var vt,t=function(t){if(t=t.touches?t.touches[0]:t,U){var e=function(t,e){for(var o=0;o<d.length;o++)if(!Pt(d[o])){var n=Lt(d[o]),i=d[o][lt].options.emptyInsertThreshold,r=t>=n.left-i&&t<=n.right+i,a=e>=n.top-i&&e<=n.bottom+i;if(r&&a)return d[o]}}(t.clientX,t.clientY);e&&e[lt]._onDragOver({clientX:t.clientX,clientY:t.clientY,target:e,rootEl:e})}};function mt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be HTMLElement, not "+{}.toString.call(t);this.el=t,this.options=e=Bt({},e),t[lt]=this;var o={group:null,sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0,draggable:/[uo]l/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return P(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,touchStartThreshold:w(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==mt.supportPointer&&("PointerEvent"in window||window.navigator&&"msPointerEnabled"in window.navigator),emptyInsertThreshold:5};for(var n in o)!(n in e)&&(e[n]=o[n]);for(var i in W(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&a,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?wt(t,"pointerdown",this._onTapStart):(wt(t,"mousedown",this._onTapStart),wt(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(wt(t,"dragover",this),wt(t,"dragenter",this)),d.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[])}function bt(t,e,o,n){if(t){o=o||st;do{if(null!=e&&(">"===e[0]&&t.parentNode===o&&kt(t,e.substring(1))||kt(t,e))||n&&t===o)return t;if(t===o)break}while(t=(i=t).host&&i!==st&&i.host.nodeType?i.host:i.parentNode)}var i;return null}function wt(t,e,o){t.addEventListener(e,o,r)}function _t(t,e,o){t.removeEventListener(e,o,r)}function yt(t,e,o){if(t&&e)if(t.classList)t.classList[o?"add":"remove"](e);else{var n=(" "+t.className+" ").replace(i," ").replace(" "+e+" "," ");t.className=(n+(o?" "+e:"")).replace(i," ")}}function Dt(t,e,o){var n=t&&t.style;if(n){if(void 0===o)return st.defaultView&&st.defaultView.getComputedStyle?o=st.defaultView.getComputedStyle(t,""):t.currentStyle&&(o=t.currentStyle),void 0===e?o:o[e];e in n||-1!==e.indexOf("webkit")||(e="-webkit-"+e),n[e]=o+("string"==typeof o?"":"px")}}function St(t){var e="";do{var o=Dt(t,"transform");o&&"none"!==o&&(e=o+" "+e)}while(t=t.parentNode);return window.DOMMatrix?new DOMMatrix(e):window.WebKitCSSMatrix?new WebKitCSSMatrix(e):window.CSSMatrix?new CSSMatrix(e):void 0}function Tt(t,e,o){if(t){var n=t.getElementsByTagName(e),i=0,r=n.length;if(o)for(;i<r;i++)o(n[i],i);return n}return[]}function Ct(t,e,o,n,i,r,a,l,s){var c,d=(t=t||e[lt]).options,h="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||dt||_?(c=st.createEvent("Event")).initEvent(o,!0,!0):c=new CustomEvent(o,{bubbles:!0,cancelable:!0}),c.to=i||e,c.from=r||e,c.item=n||e,c.clone=u,c.oldIndex=a,c.newIndex=l,c.originalEvent=s,c.pullMode=Q?Q.lastPutMode:void 0,e&&e.dispatchEvent(c),d[h]&&d[h].call(t,c)}function Et(t,e,o,n,i,r,a,l){var s,c,d=t[lt],h=d.options.onMove;return!window.CustomEvent||dt||_?(s=st.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=o,s.draggedRect=n,s.related=i||e,s.relatedRect=r||Lt(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),h&&(c=h.call(d,s,a)),c}function xt(t){t.draggable=!1}function Nt(){ht=!1}function Mt(t,e,o){for(var n=0,i=0,r=t.children;i<r.length;){if("none"!==r[i].style.display&&r[i]!==f&&r[i]!==U&&bt(r[i],o.draggable,t,!1)){if(n===e)return r[i];n++}i++}return null}function Pt(t){for(var e=t.lastElementChild;e&&(e===f||"none"===e.style.display);)e=e.previousElementSibling;return e||null}function Xt(t){return At(U)<At(t)?1:-1}function Yt(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,o=e.length,n=0;o--;)n+=e.charCodeAt(o);return n.toString(36)}function At(t,e){var o=0;if(!t||!t.parentNode)return-1;for(;t&&(t=t.previousElementSibling);)"TEMPLATE"!==t.nodeName.toUpperCase()&&t!==u&&o++;return o}function kt(t,e){if(t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}function It(o,n){return function(){if(!vt){var t=arguments,e=this;vt=ct(function(){1===t.length?o.call(e,t[0]):o.apply(e,t),vt=void 0},n)}}}function Bt(t,e){if(t&&e)for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o]);return t}function Ot(t){return o&&o.dom?o.dom(t).cloneNode(!0):e?e(t).clone(!0)[0]:t.cloneNode(!0)}function Ht(t){return ct(t,0)}function Rt(t){return clearTimeout(t)}function Lt(t,e,o,n){if(t.getBoundingClientRect||t===b){var i,r,a,l,s,c,d;if(d=t!==b&&t!==H()?(r=(i=t.getBoundingClientRect()).top,a=i.left,l=i.bottom,s=i.right,c=i.height,i.width):(a=r=0,l=window.innerHeight,s=window.innerWidth,c=window.innerHeight,window.innerWidth),n&&t!==b&&(o=o||t.parentNode,!dt))do{if(o&&o.getBoundingClientRect&&"none"!==Dt(o,"transform")){var h=o.getBoundingClientRect();r-=h.top+w(Dt(o,"border-top-width")),a-=h.left+w(Dt(o,"border-left-width")),l=r+i.height,s=a+i.width;break}}while(o=o.parentNode);if(e&&t!==b){var u=St(o||t),f=u&&u.a,p=u&&u.d;u&&(l=(r/=p)+(c/=p),s=(a/=f)+(d/=f))}return{top:r,left:a,bottom:l,right:s,width:d,height:c}}}function Wt(t,e){for(var o=O(t,!0),n=Lt(t)[e];o;){var i=Lt(o)[e];if(!("top"===e||"left"===e?i<=n:n<=i))return o;if(o===H())break;o=O(o,!1)}return!1}function Ft(t){var e=0,o=0,n=H();if(t)do{var i=St(t),r=i.a,a=i.d;e+=t.scrollLeft*r,o+=t.scrollTop*a}while(t!==n&&(t=t.parentNode));return[e,o]}return wt(st,"dragover",t),wt(st,"mousemove",t),wt(st,"touchmove",t),mt.prototype={constructor:mt,_computeIsAligned:function(t){var e;if(f&&!C?(z(),e=st.elementFromPoint(t.clientX,t.clientY),j()):e=t.target,e=bt(e,this.options.draggable,this.el,!1),!E&&U&&U.parentNode===this.el){for(var o,n,i,r,a,l,s,c,d=this.el.children,h=0;h<d.length;h++)bt(d[h],this.options.draggable,this.el,!1)&&d[h]!==e&&(d[h].sortableMouseAligned=(o=t.clientX,n=t.clientY,i=d[h],r=this._getDirection(t,null),this.options,void 0,a=Lt(i),l="vertical"===r?a.left:a.top,s="vertical"===r?a.right:a.bottom,l<(c="vertical"===r?o:n)&&c<s));bt(e,this.options.draggable,this.el,!0)||($=null),E=!0,ct(function(){E=!1},30)}},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,U):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e,o=this,n=this.el,i=this.options,r=i.preventOnFilter,a=t.type,l=t.touches&&t.touches[0],s=(l||t).target,c=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,d=i.filter;if(function(t){M.length=0;var e=t.getElementsByTagName("input"),o=e.length;for(;o--;){var n=e[o];n.checked&&M.push(n)}}(n),(!dt||t.artificialBubble||pt(n,s))&&!U&&!(/mousedown|pointerdown/.test(a)&&0!==t.button||i.disabled||c.isContentEditable))if(s=bt(s,i.draggable,n,!1)){if(h!==s){if(e=At(s,i.draggable),"function"==typeof d){if(d.call(this,t,s,this))return Ct(o,c,"filter",s,n,n,e),void(r&&t.cancelable&&t.preventDefault())}else if(d&&(d=d.split(",").some(function(t){if(t=bt(c,t.trim(),n,!1))return Ct(o,t,"filter",s,n,n,e),!0})))return void(r&&t.cancelable&&t.preventDefault());i.handle&&!bt(c,i.handle,n,!1)||this._prepareDragStart(t,l,s,e)}}else dt&&gt(n,t,"_onTapStart")}},_handleAutoScroll:function(e,o){if(U&&this.options.scroll){var n=e.clientX,i=e.clientY,t=st.elementFromPoint(n,i),r=this;if(o||_||dt||D){R(e,r.options,t,o);var a=O(t,!0);!B||l&&n===s&&i===c||(l&&clearInterval(l),l=setInterval(function(){if(U){var t=O(st.elementFromPoint(n,i),!0);t!==a&&(a=t,L(),R(e,r.options,a,o))}},10),s=n,c=i)}else{if(!r.options.bubbleScroll||O(t,!0)===H())return void L();R(e,r.options,O(t,!1),!1)}}},_prepareDragStart:function(t,e,o,n){var i,r=this,a=r.el,l=r.options,s=a.ownerDocument;o&&!U&&o.parentNode===a&&(q=a,V=(U=o).parentNode,G=U.nextSibling,h=o,Z=l.group,K=n,p={target:U,clientX:(e||t).clientX,clientY:(e||t).clientY},this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,U.style["will-change"]="all",U.style.transition="",U.style.transform="",i=function(){r._disableDelayedDragEvents(),!y&&r.nativeDraggable&&(U.draggable=!0),r._triggerDragStart(t,e),Ct(r,q,"choose",U,q,q,K),yt(U,l.chosenClass,!0)},l.ignore.split(",").forEach(function(t){Tt(U,t.trim(),xt)}),l.supportPointer?wt(s,"pointerup",r._onDrop):(wt(s,"mouseup",r._onDrop),wt(s,"touchend",r._onDrop),wt(s,"touchcancel",r._onDrop)),y&&this.nativeDraggable&&(this.options.touchStartThreshold=4,U.draggable=!0),!l.delay||this.nativeDraggable&&(_||dt)?i():(wt(s,"mouseup",r._disableDelayedDrag),wt(s,"touchend",r._disableDelayedDrag),wt(s,"touchcancel",r._disableDelayedDrag),wt(s,"mousemove",r._delayedDragTouchMoveHandler),wt(s,"touchmove",r._delayedDragTouchMoveHandler),l.supportPointer&&wt(s,"pointermove",r._delayedDragTouchMoveHandler),r._dragStartTimer=ct(i,l.delay)))},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;N(ut(e.clientX-this._lastX),ut(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){U&&xt(U),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;_t(t,"mouseup",this._disableDelayedDrag),_t(t,"touchend",this._disableDelayedDrag),_t(t,"touchcancel",this._disableDelayedDrag),_t(t,"mousemove",this._delayedDragTouchMoveHandler),_t(t,"touchmove",this._delayedDragTouchMoveHandler),_t(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||("touch"==t.pointerType?t:null),!this.nativeDraggable||e?this.options.supportPointer?wt(st,"pointermove",this._onTouchMove):wt(st,e?"touchmove":"mousemove",this._onTouchMove):(wt(U,"dragend",this),wt(q,"dragstart",this._onDragStart));try{st.selection?Ht(function(){st.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(v=!1,q&&U){this.nativeDraggable&&(wt(st,"dragover",this._handleAutoScroll),wt(st,"dragover",F));var o=this.options;!t&&yt(U,o.dragClass,!1),yt(U,o.ghostClass,!0),Dt(U,"transform",""),mt.active=this,t&&this._appendGhost(),Ct(this,q,"start",U,q,q,K,void 0,e)}else this._nulling()},_emulateDragOver:function(t){if(k){if(this._lastX===k.clientX&&this._lastY===k.clientY&&!t)return;this._lastX=k.clientX,this._lastY=k.clientY,z();for(var e=st.elementFromPoint(k.clientX,k.clientY),o=e;e&&e.shadowRoot;)o=e=e.shadowRoot.elementFromPoint(k.clientX,k.clientY);if(o)do{if(o[lt])if(o[lt]._onDragOver({clientX:k.clientX,clientY:k.clientY,target:e,rootEl:o})&&!this.options.dragoverBubble)break;e=o}while(o=o.parentNode);U.parentNode[lt]._computeIsAligned(k),j()}},_onTouchMove:function(t,e){if(p){var o=this.options,n=o.fallbackTolerance,i=o.fallbackOffset,r=t.touches?t.touches[0]:t,a=f&&St(f),l=f&&a&&a.a,s=f&&a&&a.d,c=S&&g&&Ft(g),d=(r.clientX-p.clientX+i.x)/(l||1)+(c?c[0]-m[0]:0)/(l||1),h=(r.clientY-p.clientY+i.y)/(s||1)+(c?c[1]-m[1]:0)/(s||1),u=t.touches?"translate3d("+d+"px,"+h+"px,0)":"translate("+d+"px,"+h+"px)";if(!mt.active&&!v){if(n&&x(ut(r.clientX-this._lastX),ut(r.clientY-this._lastY))<n)return;this._onDragStart(t,!0)}!e&&this._handleAutoScroll(r,!0),J=!0,k=r,Dt(f,"webkitTransform",u),Dt(f,"mozTransform",u),Dt(f,"msTransform",u),Dt(f,"transform",u),t.cancelable&&t.preventDefault()}},_appendGhost:function(){if(!f){var t=this.options.fallbackOnBody?st.body:q,e=Lt(U,!0,t,!S),o=(Dt(U),this.options);if(S){for(g=t;"static"===Dt(g,"position")&&"none"===Dt(g,"transform")&&g!==st;)g=g.parentNode;if(g!==st){var n=Lt(g,!0);e.top-=n.top,e.left-=n.left}g!==st.body&&g!==st.documentElement?(g===st&&(g=H()),e.top+=g.scrollTop,e.left+=g.scrollLeft):g=H(),m=Ft(g)}yt(f=U.cloneNode(!0),o.ghostClass,!1),yt(f,o.fallbackClass,!0),yt(f,o.dragClass,!0),Dt(f,"box-sizing","border-box"),Dt(f,"margin",0),Dt(f,"top",e.top),Dt(f,"left",e.left),Dt(f,"width",e.width),Dt(f,"height",e.height),Dt(f,"opacity","0.8"),Dt(f,"position",S?"absolute":"fixed"),Dt(f,"zIndex","100000"),Dt(f,"pointerEvents","none"),t.appendChild(f)}},_onDragStart:function(t,e){var o=this,n=t.dataTransfer,i=o.options;(u=Ot(U)).draggable=!1,u.style["will-change"]="",this._hideClone(),yt(u,o.options.chosenClass,!1),o._cloneId=Ht(function(){o.options.removeCloneOnHide||q.insertBefore(u,U),Ct(o,q,"clone",U)}),!e&&yt(U,i.dragClass,!0),e?(it=!0,o._loopId=setInterval(o._emulateDragOver,50)):(_t(st,"mouseup",o._onDrop),_t(st,"touchend",o._onDrop),_t(st,"touchcancel",o._onDrop),n&&(n.effectAllowed="move",i.setData&&i.setData.call(o,n,U)),wt(st,"drop",o),Dt(U,"transform","translateZ(0)")),v=!0,o._dragStartId=Ht(o._dragStarted.bind(o,e,t)),wt(st,"selectstart",o),D&&Dt(st.body,"user-select","none")},_onDragOver:function(e){var o,n,t,i=this.el,r=e.target,a=this.options,l=a.group,s=mt.active,c=Z===l,d=a.sort,h=this;if(!ht&&(!dt||e.rootEl||e.artificialBubble||pt(i,r))){if(void 0!==e.preventDefault&&e.cancelable&&e.preventDefault(),J=!0,r=bt(r,a.draggable,i,!0),bt(e.target,null,U,!0)||r.animated)return z(!1);if(r!==U&&(it=!1),s&&!a.disabled&&(c?d||(t=!q.contains(U)):Q===this||(this.lastPutMode=Z.checkPull(this,s,U,e))&&l.checkPut(this,s,U,e))){var u=this._getDirection(e,r);if(o=Lt(U),t)return this._hideClone(),V=q,G?q.insertBefore(U,G):q.appendChild(U),z(!0);var f=Pt(i);if(f&&(I=e,B=u,O=Lt(Pt(i)),H="vertical"===B?I.clientY:I.clientX,R="vertical"===B?I.clientX:I.clientY,L="vertical"===B?O.bottom:O.right,W="vertical"===B?O.left:O.top,F="vertical"===B?O.right:O.bottom,!("vertical"===B?F+10<R||R<=F&&L<H&&W<=R:L<H&&W<R||H<=L&&F+10<R)||f.animated)){if(r&&r!==U&&r.parentNode===i){var p,g=0,v=r.sortableMouseAligned,m=U.parentNode!==i,b="vertical"===u?"top":"left",w=Wt(r,"top")||Wt(U,"top"),_=w?w.scrollTop:void 0;if($!==r&&(et=null,p=Lt(r)[b],rt=!1),C=r,E=u,x=(T=U)===U&&nt||Lt(T),N=C===U&&nt||Lt(C),M="vertical"===E?x.left:x.top,P="vertical"===E?x.right:x.bottom,X="vertical"===E?x.width:x.height,Y="vertical"===E?N.left:N.top,A="vertical"===E?N.right:N.bottom,k="vertical"===E?N.width:N.height,et=(M===Y||P===A||M+X/2===Y+k/2)&&v||m||w||a.invertSwap||"insert"===et||"swap"===et?("swap"!==et&&(at=a.invertSwap||m),g=function(t,e,o,n,i,r,a){var l=Lt(e),s="vertical"===o?t.clientY:t.clientX,c="vertical"===o?l.height:l.width,d="vertical"===o?l.top:l.left,h="vertical"===o?l.bottom:l.right,u=Lt(U),f=!1;if(!r)if(a&&ot<c*n)if(!rt&&(1===tt?d+c*i/2<s:s<h-c*i/2)&&(rt=!0),rt)f=!0;else{"vertical"===o?u.top:u.left,"vertical"===o?u.bottom:u.right;if(1===tt?s<d+ot:h-ot<s)return-1*tt}else if(d+c*(1-n)/2<s&&s<h-c*(1-n)/2)return Xt(e);if((f=f||r)&&(s<d+c*i/2||h-c*i/2<s))return d+c/2<s?1:-1;return 0}(e,r,u,a.swapThreshold,null==a.invertedSwapThreshold?a.swapThreshold:a.invertedSwapThreshold,at,$===r),"swap"):(g=Xt(r),"insert"),0===g)return z(!1);nt=null,tt=g,n=Lt($=r);var y=r.nextElementSibling,D=!1,S=Et(q,i,U,o,r,n,e,D=1===g);if(!1!==S)return 1!==S&&-1!==S||(D=1===S),ht=!0,ct(Nt,30),c?s._hideClone():s._showClone(this),D&&!y?i.appendChild(U):r.parentNode.insertBefore(U,D?y:r),w&&ft(w,0,_-w.scrollTop),V=U.parentNode,void 0===p||at||(ot=ut(p-Lt(r)[b])),j(),z(!0)}}else if(f&&i===e.target&&(r=f),r&&(n=Lt(r)),c?s._hideClone():s._showClone(this),!1!==Et(q,i,U,o,r,n,e,!!r))return i.appendChild(U),V=i,nt=null,j(),z(!0);if(i.contains(U))return z(!1)}var T,C,E,x,N,M,P,X,Y,A,k,I,B,O,H,R,L,W,F;return dt&&!e.rootEl&&gt(i,e,"_onDragOver"),!1}function z(t){return t&&(c?s._hideClone():s._showClone(h),s&&(yt(U,Q?Q.options.ghostClass:s.options.ghostClass,!1),yt(U,a.ghostClass,!0)),Q!==h&&h!==mt.active?Q=h:h===mt.active&&(Q=null),o&&h._animate(o,U),r&&n&&h._animate(n,r)),(r===U&&!U.animated||r===i&&!r.animated)&&($=null),a.dragoverBubble||e.rootEl||r===st||(h._handleAutoScroll(e),U.parentNode[lt]._computeIsAligned(e)),!a.dragoverBubble&&e.stopPropagation&&e.stopPropagation(),!0}function j(){Ct(h,q,"change",r,i,q,K,At(U,a.draggable),e)}},_animate:function(t,e){var o=this.options.animation;if(o){var n=Lt(e);if(e===U&&(nt=n),1===t.nodeType&&(t=Lt(t)),t.left+t.width/2!==n.left+n.width/2||t.top+t.height/2!==n.top+n.height/2){var i=St(this.el),r=i&&i.a,a=i&&i.d;Dt(e,"transition","none"),Dt(e,"transform","translate3d("+(t.left-n.left)/(r||1)+"px,"+(t.top-n.top)/(a||1)+"px,0)"),e.offsetWidth,Dt(e,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),Dt(e,"transform","translate3d(0,0,0)")}"number"==typeof e.animated&&clearTimeout(e.animated),e.animated=ct(function(){Dt(e,"transition",""),Dt(e,"transform",""),e.animated=!1},o)}},_offUpEvents:function(){var t=this.el.ownerDocument;_t(st,"touchmove",this._onTouchMove),_t(st,"pointermove",this._onTouchMove),_t(t,"mouseup",this._onDrop),_t(t,"touchend",this._onDrop),_t(t,"pointerup",this._onDrop),_t(t,"touchcancel",this._onDrop),_t(st,"selectstart",this)},_onDrop:function(t){var e=this.el,o=this.options;rt=at=B=v=!1,clearInterval(this._loopId),clearInterval(l),L(),clearTimeout(vt),vt=void 0,clearTimeout(this._dragStartTimer),Rt(this._cloneId),Rt(this._dragStartId),_t(st,"mousemove",this._onTouchMove),this.nativeDraggable&&(_t(st,"drop",this),_t(e,"dragstart",this._onDragStart),_t(st,"dragover",this._handleAutoScroll),_t(st,"dragover",F)),D&&Dt(st.body,"user-select",""),this._offUpEvents(),t&&(J&&(t.cancelable&&t.preventDefault(),!o.dropBubble&&t.stopPropagation()),f&&f.parentNode&&f.parentNode.removeChild(f),(q===V||Q&&"clone"!==Q.lastPutMode)&&u&&u.parentNode&&u.parentNode.removeChild(u),U&&(this.nativeDraggable&&_t(U,"dragend",this),xt(U),U.style["will-change"]="",yt(U,Q?Q.options.ghostClass:this.options.ghostClass,!1),yt(U,this.options.chosenClass,!1),Ct(this,q,"unchoose",U,V,q,K,null,t),q!==V?(0<=(n=At(U,o.draggable))&&(Ct(null,V,"add",U,V,q,K,n,t),Ct(this,q,"remove",U,V,q,K,n,t),Ct(null,V,"sort",U,V,q,K,n,t),Ct(this,q,"sort",U,V,q,K,n,t)),Q&&Q.save()):U.nextSibling!==G&&0<=(n=At(U,o.draggable))&&(Ct(this,q,"update",U,V,q,K,n,t),Ct(this,q,"sort",U,V,q,K,n,t)),mt.active&&(null!=n&&-1!==n||(n=K),Ct(this,q,"end",U,V,q,K,n,t),this.save()))),this._nulling()},_nulling:function(){q=U=V=f=G=u=h=X=Y=I.length=l=s=c=p=k=J=n=K=$=tt=nt=Q=Z=mt.active=null,M.forEach(function(t){t.checked=!0}),M.length=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":U&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move");t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],o=this.el.children,n=0,i=o.length,r=this.options;n<i;n++)bt(t=o[n],r.draggable,this.el,!1)&&e.push(t.getAttribute(r.dataIdAttr)||Yt(t));return e},sort:function(t){var n={},i=this.el;this.toArray().forEach(function(t,e){var o=i.children[e];bt(o,this.options.draggable,i,!1)&&(n[t]=o)},this),t.forEach(function(t){n[t]&&(i.removeChild(n[t]),i.appendChild(n[t]))})},save:function(){var t=this.options.store;t&&t.set&&t.set(this)},closest:function(t,e){return bt(t,e||this.options.draggable,this.el,!1)},option:function(t,e){var o=this.options;if(void 0===e)return o[t];o[t]=e,"group"===t&&W(o)},destroy:function(){var t=this.el;t[lt]=null,_t(t,"mousedown",this._onTapStart),_t(t,"touchstart",this._onTapStart),_t(t,"pointerdown",this._onTapStart),this.nativeDraggable&&(_t(t,"dragover",this),_t(t,"dragenter",this)),Array.prototype.forEach.call(t.querySelectorAll("[draggable]"),function(t){t.removeAttribute("draggable")}),this._onDrop(),d.splice(d.indexOf(this.el),1),this.el=t=null},_hideClone:function(){u.cloneHidden||(Dt(u,"display","none"),u.cloneHidden=!0,u.parentNode&&this.options.removeCloneOnHide&&u.parentNode.removeChild(u))},_showClone:function(t){"clone"===t.lastPutMode?u.cloneHidden&&(q.contains(U)&&!this.options.group.revertClone?q.insertBefore(u,U):G?q.insertBefore(u,G):q.appendChild(u),this.options.group.revertClone&&this._animate(U,u),Dt(u,"display",""),u.cloneHidden=!1):this._hideClone()}},wt(st,"touchmove",function(t){(mt.active||v)&&t.cancelable&&t.preventDefault()}),mt.utils={on:wt,off:_t,css:Dt,find:Tt,is:function(t,e){return!!bt(t,e,t,!1)},extend:Bt,throttle:It,closest:bt,toggleClass:yt,clone:Ot,index:At,nextTick:Ht,cancelNextTick:Rt,detectDirection:P,getChild:Mt},mt.create=function(t,e){return new mt(t,e)},mt.version="1.8.4",mt});
\ No newline at end of file
+!(function (t) {
+  "use strict";
+  "function" == typeof define && define.amd
+    ? define(t)
+    : "undefined" != typeof module && void 0 !== module.exports
+    ? (module.exports = t())
+    : (window.Sortable = t());
+})(function () {
+  "use strict";
+  if ("undefined" == typeof window || !window.document)
+    return function () {
+      throw new Error("Sortable.js requires a window with a document");
+    };
+  var U,
+    V,
+    f,
+    u,
+    q,
+    G,
+    h,
+    X,
+    Y,
+    A,
+    K,
+    n,
+    Z,
+    Q,
+    l,
+    s,
+    c,
+    p,
+    k,
+    J,
+    $,
+    tt,
+    et,
+    ot,
+    g,
+    nt,
+    I = [],
+    B = !1,
+    v = !1,
+    it = !1,
+    d = [],
+    rt = !1,
+    at = !1,
+    m = [],
+    i = /\s+/g,
+    lt = "Sortable" + new Date().getTime(),
+    b = window,
+    st = b.document,
+    w = b.parseInt,
+    ct = b.setTimeout,
+    e = b.jQuery || b.Zepto,
+    o = b.Polymer,
+    r = { capture: !1, passive: !1 },
+    dt = !!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\.|msie|iemobile)/i),
+    _ = !!navigator.userAgent.match(/Edge/i),
+    y = !!navigator.userAgent.match(/firefox/i),
+    D = !(
+      !navigator.userAgent.match(/safari/i) ||
+      navigator.userAgent.match(/chrome/i) ||
+      navigator.userAgent.match(/android/i)
+    ),
+    S = !!navigator.userAgent.match(/iP(ad|od|hone)/i),
+    T = _ || dt ? "cssFloat" : "float",
+    a = "draggable" in st.createElement("div"),
+    C = (function () {
+      if (dt) return !1;
+      var t = st.createElement("x");
+      return (
+        (t.style.cssText = "pointer-events:auto"),
+        "auto" === t.style.pointerEvents
+      );
+    })(),
+    ht = !1,
+    E = !1,
+    ut = Math.abs,
+    x = Math.min,
+    N = Math.max,
+    M = [],
+    P = function (t, e) {
+      var o = Dt(t),
+        n =
+          w(o.width) -
+          w(o.paddingLeft) -
+          w(o.paddingRight) -
+          w(o.borderLeftWidth) -
+          w(o.borderRightWidth),
+        i = Mt(t, 0, e),
+        r = Mt(t, 1, e),
+        a = i && Dt(i),
+        l = r && Dt(r),
+        s = a && w(a.marginLeft) + w(a.marginRight) + Lt(i).width,
+        c = l && w(l.marginLeft) + w(l.marginRight) + Lt(r).width;
+      if ("flex" === o.display)
+        return "column" === o.flexDirection ||
+          "column-reverse" === o.flexDirection
+          ? "vertical"
+          : "horizontal";
+      if ("grid" === o.display)
+        return o.gridTemplateColumns.split(" ").length <= 1
+          ? "vertical"
+          : "horizontal";
+      if (i && "none" !== a.float) {
+        var d = "left" === a.float ? "left" : "right";
+        return !r || ("both" !== l.clear && l.clear !== d)
+          ? "horizontal"
+          : "vertical";
+      }
+      return i &&
+        ("block" === a.display ||
+          "flex" === a.display ||
+          "table" === a.display ||
+          "grid" === a.display ||
+          (n <= s && "none" === o[T]) ||
+          (r && "none" === o[T] && n < s + c))
+        ? "vertical"
+        : "horizontal";
+    },
+    O = function (t, e) {
+      if (!t || !t.getBoundingClientRect) return H();
+      var o = t,
+        n = !1;
+      do {
+        if (o.clientWidth < o.scrollWidth || o.clientHeight < o.scrollHeight) {
+          var i = Dt(o);
+          if (
+            (o.clientWidth < o.scrollWidth &&
+              ("auto" == i.overflowX || "scroll" == i.overflowX)) ||
+            (o.clientHeight < o.scrollHeight &&
+              ("auto" == i.overflowY || "scroll" == i.overflowY))
+          ) {
+            if (!o || !o.getBoundingClientRect || o === st.body) return H();
+            if (n || e) return o;
+            n = !0;
+          }
+        }
+      } while ((o = o.parentNode));
+      return H();
+    },
+    H = function () {
+      return dt ? st.documentElement : st.scrollingElement;
+    },
+    ft = function (t, e, o) {
+      (t.scrollLeft += e), (t.scrollTop += o);
+    },
+    R = It(function (o, t, e, n) {
+      if (t.scroll) {
+        var i = e ? e[lt] : window,
+          r = t.scrollSensitivity,
+          a = t.scrollSpeed,
+          l = o.clientX,
+          s = o.clientY,
+          c = H(),
+          d = !1;
+        Y !== e &&
+          (L(),
+          (X = t.scroll),
+          (A = t.scrollFn),
+          !0 === X && ((X = O(e, !0)), (Y = X)));
+        var h = 0,
+          u = X;
+        do {
+          var f,
+            p,
+            g,
+            v,
+            m,
+            b,
+            w,
+            _,
+            y,
+            D = u,
+            S = Lt(D),
+            T = S.top,
+            C = S.bottom,
+            E = S.left,
+            x = S.right,
+            N = S.width,
+            M = S.height;
+          if (
+            ((f = D.scrollWidth),
+            (p = D.scrollHeight),
+            (g = Dt(D)),
+            (_ = D.scrollLeft),
+            (y = D.scrollTop),
+            (w =
+              D === c
+                ? ((b =
+                    N < f &&
+                    ("auto" === g.overflowX ||
+                      "scroll" === g.overflowX ||
+                      "visible" === g.overflowX)),
+                  M < p &&
+                    ("auto" === g.overflowY ||
+                      "scroll" === g.overflowY ||
+                      "visible" === g.overflowY))
+                : ((b =
+                    N < f &&
+                    ("auto" === g.overflowX || "scroll" === g.overflowX)),
+                  M < p &&
+                    ("auto" === g.overflowY || "scroll" === g.overflowY))),
+            (v = b && (ut(x - l) <= r && _ + N < f) - (ut(E - l) <= r && !!_)),
+            (m = w && (ut(C - s) <= r && y + M < p) - (ut(T - s) <= r && !!y)),
+            !I[h])
+          )
+            for (var P = 0; P <= h; P++) I[P] || (I[P] = {});
+          (I[h].vx == v && I[h].vy == m && I[h].el === D) ||
+            ((I[h].el = D),
+            (I[h].vx = v),
+            (I[h].vy = m),
+            clearInterval(I[h].pid),
+            !D ||
+              (0 == v && 0 == m) ||
+              ((d = !0),
+              (I[h].pid = setInterval(
+                function () {
+                  n &&
+                    0 === this.layer &&
+                    (mt.active._emulateDragOver(!0),
+                    mt.active._onTouchMove(k, !0));
+                  var t = I[this.layer].vy ? I[this.layer].vy * a : 0,
+                    e = I[this.layer].vx ? I[this.layer].vx * a : 0;
+                  ("function" == typeof A &&
+                    "continue" !== A.call(i, e, t, o, k, I[this.layer].el)) ||
+                    ft(I[this.layer].el, e, t);
+                }.bind({ layer: h }),
+                24
+              )))),
+            h++;
+        } while (t.bubbleScroll && u !== c && (u = O(u, !1)));
+        B = d;
+      }
+    }, 30),
+    L = function () {
+      I.forEach(function (t) {
+        clearInterval(t.pid);
+      }),
+        (I = []);
+    },
+    W = function (t) {
+      function s(a, l) {
+        return function (t, e, o, n) {
+          var i =
+            t.options.group.name &&
+            e.options.group.name &&
+            t.options.group.name === e.options.group.name;
+          if (null == a && (l || i)) return !0;
+          if (null == a || !1 === a) return !1;
+          if (l && "clone" === a) return a;
+          if ("function" == typeof a) return s(a(t, e, o, n), l)(t, e, o, n);
+          var r = (l ? t : e).options.group.name;
+          return (
+            !0 === a ||
+            ("string" == typeof a && a === r) ||
+            (a.join && -1 < a.indexOf(r))
+          );
+        };
+      }
+      var e = {},
+        o = t.group;
+      (o && "object" == typeof o) || (o = { name: o }),
+        (e.name = o.name),
+        (e.checkPull = s(o.pull, !0)),
+        (e.checkPut = s(o.put)),
+        (e.revertClone = o.revertClone),
+        (t.group = e);
+    },
+    F = function (t) {
+      U &&
+        U.parentNode &&
+        U.parentNode[lt] &&
+        U.parentNode[lt]._computeIsAligned(t);
+    },
+    pt = function (t, e) {
+      for (var o = e; !o[lt]; ) o = o.parentNode;
+      return t === o;
+    },
+    gt = function (t, e, o) {
+      for (var n = t.parentNode; n && !n[lt]; ) n = n.parentNode;
+      n && n[lt][o](Bt(e, { artificialBubble: !0 }));
+    },
+    z = function () {
+      !C && f && Dt(f, "display", "none");
+    },
+    j = function () {
+      !C && f && Dt(f, "display", "");
+    };
+  st.addEventListener(
+    "click",
+    function (t) {
+      if (it)
+        return (
+          t.preventDefault(),
+          t.stopPropagation && t.stopPropagation(),
+          t.stopImmediatePropagation && t.stopImmediatePropagation(),
+          (it = !1)
+        );
+    },
+    !0
+  );
+  var vt,
+    t = function (t) {
+      if (((t = t.touches ? t.touches[0] : t), U)) {
+        var e = (function (t, e) {
+          for (var o = 0; o < d.length; o++)
+            if (!Pt(d[o])) {
+              var n = Lt(d[o]),
+                i = d[o][lt].options.emptyInsertThreshold,
+                r = t >= n.left - i && t <= n.right + i,
+                a = e >= n.top - i && e <= n.bottom + i;
+              if (r && a) return d[o];
+            }
+        })(t.clientX, t.clientY);
+        e &&
+          e[lt]._onDragOver({
+            clientX: t.clientX,
+            clientY: t.clientY,
+            target: e,
+            rootEl: e,
+          });
+      }
+    };
+  function mt(t, e) {
+    if (!t || !t.nodeType || 1 !== t.nodeType)
+      throw "Sortable: `el` must be HTMLElement, not " + {}.toString.call(t);
+    (this.el = t), (this.options = e = Bt({}, e)), (t[lt] = this);
+    var o = {
+      group: null,
+      sort: !0,
+      disabled: !1,
+      store: null,
+      handle: null,
+      scroll: !0,
+      scrollSensitivity: 30,
+      scrollSpeed: 10,
+      bubbleScroll: !0,
+      draggable: /[uo]l/i.test(t.nodeName) ? ">li" : ">*",
+      swapThreshold: 1,
+      invertSwap: !1,
+      invertedSwapThreshold: null,
+      removeCloneOnHide: !0,
+      direction: function () {
+        return P(t, this.options);
+      },
+      ghostClass: "sortable-ghost",
+      chosenClass: "sortable-chosen",
+      dragClass: "sortable-drag",
+      ignore: "a, img",
+      filter: null,
+      preventOnFilter: !0,
+      animation: 0,
+      easing: null,
+      setData: function (t, e) {
+        t.setData("Text", e.textContent);
+      },
+      dropBubble: !1,
+      dragoverBubble: !1,
+      dataIdAttr: "data-id",
+      delay: 0,
+      touchStartThreshold: w(window.devicePixelRatio, 10) || 1,
+      forceFallback: !1,
+      fallbackClass: "sortable-fallback",
+      fallbackOnBody: !1,
+      fallbackTolerance: 0,
+      fallbackOffset: { x: 0, y: 0 },
+      supportPointer:
+        !1 !== mt.supportPointer &&
+        ("PointerEvent" in window ||
+          (window.navigator && "msPointerEnabled" in window.navigator)),
+      emptyInsertThreshold: 5,
+    };
+    for (var n in o) !(n in e) && (e[n] = o[n]);
+    for (var i in (W(e), this))
+      "_" === i.charAt(0) &&
+        "function" == typeof this[i] &&
+        (this[i] = this[i].bind(this));
+    (this.nativeDraggable = !e.forceFallback && a),
+      this.nativeDraggable && (this.options.touchStartThreshold = 1),
+      e.supportPointer
+        ? wt(t, "pointerdown", this._onTapStart)
+        : (wt(t, "mousedown", this._onTapStart),
+          wt(t, "touchstart", this._onTapStart)),
+      this.nativeDraggable &&
+        (wt(t, "dragover", this), wt(t, "dragenter", this)),
+      d.push(this.el),
+      e.store && e.store.get && this.sort(e.store.get(this) || []);
+  }
+  function bt(t, e, o, n) {
+    if (t) {
+      o = o || st;
+      do {
+        if (
+          (null != e &&
+            ((">" === e[0] && t.parentNode === o && kt(t, e.substring(1))) ||
+              kt(t, e))) ||
+          (n && t === o)
+        )
+          return t;
+        if (t === o) break;
+      } while (
+        (t =
+          (i = t).host && i !== st && i.host.nodeType ? i.host : i.parentNode)
+      );
+    }
+    var i;
+    return null;
+  }
+  function wt(t, e, o) {
+    t.addEventListener(e, o, r);
+  }
+  function _t(t, e, o) {
+    t.removeEventListener(e, o, r);
+  }
+  function yt(t, e, o) {
+    if (t && e)
+      if (t.classList) t.classList[o ? "add" : "remove"](e);
+      else {
+        var n = (" " + t.className + " ")
+          .replace(i, " ")
+          .replace(" " + e + " ", " ");
+        t.className = (n + (o ? " " + e : "")).replace(i, " ");
+      }
+  }
+  function Dt(t, e, o) {
+    var n = t && t.style;
+    if (n) {
+      if (void 0 === o)
+        return (
+          st.defaultView && st.defaultView.getComputedStyle
+            ? (o = st.defaultView.getComputedStyle(t, ""))
+            : t.currentStyle && (o = t.currentStyle),
+          void 0 === e ? o : o[e]
+        );
+      e in n || -1 !== e.indexOf("webkit") || (e = "-webkit-" + e),
+        (n[e] = o + ("string" == typeof o ? "" : "px"));
+    }
+  }
+  function St(t) {
+    var e = "";
+    do {
+      var o = Dt(t, "transform");
+      o && "none" !== o && (e = o + " " + e);
+    } while ((t = t.parentNode));
+    return window.DOMMatrix
+      ? new DOMMatrix(e)
+      : window.WebKitCSSMatrix
+      ? new WebKitCSSMatrix(e)
+      : window.CSSMatrix
+      ? new CSSMatrix(e)
+      : void 0;
+  }
+  function Tt(t, e, o) {
+    if (t) {
+      var n = t.getElementsByTagName(e),
+        i = 0,
+        r = n.length;
+      if (o) for (; i < r; i++) o(n[i], i);
+      return n;
+    }
+    return [];
+  }
+  function Ct(t, e, o, n, i, r, a, l, s) {
+    var c,
+      d = (t = t || e[lt]).options,
+      h = "on" + o.charAt(0).toUpperCase() + o.substr(1);
+    !window.CustomEvent || dt || _
+      ? (c = st.createEvent("Event")).initEvent(o, !0, !0)
+      : (c = new CustomEvent(o, { bubbles: !0, cancelable: !0 })),
+      (c.to = i || e),
+      (c.from = r || e),
+      (c.item = n || e),
+      (c.clone = u),
+      (c.oldIndex = a),
+      (c.newIndex = l),
+      (c.originalEvent = s),
+      (c.pullMode = Q ? Q.lastPutMode : void 0),
+      e && e.dispatchEvent(c),
+      d[h] && d[h].call(t, c);
+  }
+  function Et(t, e, o, n, i, r, a, l) {
+    var s,
+      c,
+      d = t[lt],
+      h = d.options.onMove;
+    return (
+      !window.CustomEvent || dt || _
+        ? (s = st.createEvent("Event")).initEvent("move", !0, !0)
+        : (s = new CustomEvent("move", { bubbles: !0, cancelable: !0 })),
+      (s.to = e),
+      (s.from = t),
+      (s.dragged = o),
+      (s.draggedRect = n),
+      (s.related = i || e),
+      (s.relatedRect = r || Lt(e)),
+      (s.willInsertAfter = l),
+      (s.originalEvent = a),
+      t.dispatchEvent(s),
+      h && (c = h.call(d, s, a)),
+      c
+    );
+  }
+  function xt(t) {
+    t.draggable = !1;
+  }
+  function Nt() {
+    ht = !1;
+  }
+  function Mt(t, e, o) {
+    for (var n = 0, i = 0, r = t.children; i < r.length; ) {
+      if (
+        "none" !== r[i].style.display &&
+        r[i] !== f &&
+        r[i] !== U &&
+        bt(r[i], o.draggable, t, !1)
+      ) {
+        if (n === e) return r[i];
+        n++;
+      }
+      i++;
+    }
+    return null;
+  }
+  function Pt(t) {
+    for (
+      var e = t.lastElementChild;
+      e && (e === f || "none" === e.style.display);
+
+    )
+      e = e.previousElementSibling;
+    return e || null;
+  }
+  function Xt(t) {
+    return At(U) < At(t) ? 1 : -1;
+  }
+  function Yt(t) {
+    for (
+      var e = t.tagName + t.className + t.src + t.href + t.textContent,
+        o = e.length,
+        n = 0;
+      o--;
+
+    )
+      n += e.charCodeAt(o);
+    return n.toString(36);
+  }
+  function At(t, e) {
+    var o = 0;
+    if (!t || !t.parentNode) return -1;
+    for (; t && (t = t.previousElementSibling); )
+      "TEMPLATE" !== t.nodeName.toUpperCase() && t !== u && o++;
+    return o;
+  }
+  function kt(t, e) {
+    if (t)
+      try {
+        if (t.matches) return t.matches(e);
+        if (t.msMatchesSelector) return t.msMatchesSelector(e);
+        if (t.webkitMatchesSelector) return t.webkitMatchesSelector(e);
+      } catch (t) {
+        return !1;
+      }
+    return !1;
+  }
+  function It(o, n) {
+    return function () {
+      if (!vt) {
+        var t = arguments,
+          e = this;
+        vt = ct(function () {
+          1 === t.length ? o.call(e, t[0]) : o.apply(e, t), (vt = void 0);
+        }, n);
+      }
+    };
+  }
+  function Bt(t, e) {
+    if (t && e) for (var o in e) e.hasOwnProperty(o) && (t[o] = e[o]);
+    return t;
+  }
+  function Ot(t) {
+    return o && o.dom
+      ? o.dom(t).cloneNode(!0)
+      : e
+      ? e(t).clone(!0)[0]
+      : t.cloneNode(!0);
+  }
+  function Ht(t) {
+    return ct(t, 0);
+  }
+  function Rt(t) {
+    return clearTimeout(t);
+  }
+  function Lt(t, e, o, n) {
+    if (t.getBoundingClientRect || t === b) {
+      var i, r, a, l, s, c, d;
+      if (
+        ((d =
+          t !== b && t !== H()
+            ? ((r = (i = t.getBoundingClientRect()).top),
+              (a = i.left),
+              (l = i.bottom),
+              (s = i.right),
+              (c = i.height),
+              i.width)
+            : ((a = r = 0),
+              (l = window.innerHeight),
+              (s = window.innerWidth),
+              (c = window.innerHeight),
+              window.innerWidth)),
+        n && t !== b && ((o = o || t.parentNode), !dt))
+      )
+        do {
+          if (o && o.getBoundingClientRect && "none" !== Dt(o, "transform")) {
+            var h = o.getBoundingClientRect();
+            (r -= h.top + w(Dt(o, "border-top-width"))),
+              (a -= h.left + w(Dt(o, "border-left-width"))),
+              (l = r + i.height),
+              (s = a + i.width);
+            break;
+          }
+        } while ((o = o.parentNode));
+      if (e && t !== b) {
+        var u = St(o || t),
+          f = u && u.a,
+          p = u && u.d;
+        u && ((l = (r /= p) + (c /= p)), (s = (a /= f) + (d /= f)));
+      }
+      return { top: r, left: a, bottom: l, right: s, width: d, height: c };
+    }
+  }
+  function Wt(t, e) {
+    for (var o = O(t, !0), n = Lt(t)[e]; o; ) {
+      var i = Lt(o)[e];
+      if (!("top" === e || "left" === e ? i <= n : n <= i)) return o;
+      if (o === H()) break;
+      o = O(o, !1);
+    }
+    return !1;
+  }
+  function Ft(t) {
+    var e = 0,
+      o = 0,
+      n = H();
+    if (t)
+      do {
+        var i = St(t),
+          r = i.a,
+          a = i.d;
+        (e += t.scrollLeft * r), (o += t.scrollTop * a);
+      } while (t !== n && (t = t.parentNode));
+    return [e, o];
+  }
+  return (
+    wt(st, "dragover", t),
+    wt(st, "mousemove", t),
+    wt(st, "touchmove", t),
+    (mt.prototype = {
+      constructor: mt,
+      _computeIsAligned: function (t) {
+        var e;
+        if (
+          (f && !C
+            ? (z(), (e = st.elementFromPoint(t.clientX, t.clientY)), j())
+            : (e = t.target),
+          (e = bt(e, this.options.draggable, this.el, !1)),
+          !E && U && U.parentNode === this.el)
+        ) {
+          for (
+            var o, n, i, r, a, l, s, c, d = this.el.children, h = 0;
+            h < d.length;
+            h++
+          )
+            bt(d[h], this.options.draggable, this.el, !1) &&
+              d[h] !== e &&
+              (d[h].sortableMouseAligned =
+                ((o = t.clientX),
+                (n = t.clientY),
+                (i = d[h]),
+                (r = this._getDirection(t, null)),
+                this.options,
+                void 0,
+                (a = Lt(i)),
+                (l = "vertical" === r ? a.left : a.top),
+                (s = "vertical" === r ? a.right : a.bottom),
+                l < (c = "vertical" === r ? o : n) && c < s));
+          bt(e, this.options.draggable, this.el, !0) || ($ = null),
+            (E = !0),
+            ct(function () {
+              E = !1;
+            }, 30);
+        }
+      },
+      _getDirection: function (t, e) {
+        return "function" == typeof this.options.direction
+          ? this.options.direction.call(this, t, e, U)
+          : this.options.direction;
+      },
+      _onTapStart: function (t) {
+        if (t.cancelable) {
+          var e,
+            o = this,
+            n = this.el,
+            i = this.options,
+            r = i.preventOnFilter,
+            a = t.type,
+            l = t.touches && t.touches[0],
+            s = (l || t).target,
+            c =
+              (t.target.shadowRoot &&
+                ((t.path && t.path[0]) ||
+                  (t.composedPath && t.composedPath()[0]))) ||
+              s,
+            d = i.filter;
+          if (
+            ((function (t) {
+              M.length = 0;
+              var e = t.getElementsByTagName("input"),
+                o = e.length;
+              for (; o--; ) {
+                var n = e[o];
+                n.checked && M.push(n);
+              }
+            })(n),
+            (!dt || t.artificialBubble || pt(n, s)) &&
+              !U &&
+              !(
+                (/mousedown|pointerdown/.test(a) && 0 !== t.button) ||
+                i.disabled ||
+                c.isContentEditable
+              ))
+          )
+            if ((s = bt(s, i.draggable, n, !1))) {
+              if (h !== s) {
+                if (((e = At(s, i.draggable)), "function" == typeof d)) {
+                  if (d.call(this, t, s, this))
+                    return (
+                      Ct(o, c, "filter", s, n, n, e),
+                      void (r && t.cancelable && t.preventDefault())
+                    );
+                } else if (
+                  d &&
+                  (d = d.split(",").some(function (t) {
+                    if ((t = bt(c, t.trim(), n, !1)))
+                      return Ct(o, t, "filter", s, n, n, e), !0;
+                  }))
+                )
+                  return void (r && t.cancelable && t.preventDefault());
+                (i.handle && !bt(c, i.handle, n, !1)) ||
+                  this._prepareDragStart(t, l, s, e);
+              }
+            } else dt && gt(n, t, "_onTapStart");
+        }
+      },
+      _handleAutoScroll: function (e, o) {
+        if (U && this.options.scroll) {
+          var n = e.clientX,
+            i = e.clientY,
+            t = st.elementFromPoint(n, i),
+            r = this;
+          if (o || _ || dt || D) {
+            R(e, r.options, t, o);
+            var a = O(t, !0);
+            !B ||
+              (l && n === s && i === c) ||
+              (l && clearInterval(l),
+              (l = setInterval(function () {
+                if (U) {
+                  var t = O(st.elementFromPoint(n, i), !0);
+                  t !== a && ((a = t), L(), R(e, r.options, a, o));
+                }
+              }, 10)),
+              (s = n),
+              (c = i));
+          } else {
+            if (!r.options.bubbleScroll || O(t, !0) === H()) return void L();
+            R(e, r.options, O(t, !1), !1);
+          }
+        }
+      },
+      _prepareDragStart: function (t, e, o, n) {
+        var i,
+          r = this,
+          a = r.el,
+          l = r.options,
+          s = a.ownerDocument;
+        o &&
+          !U &&
+          o.parentNode === a &&
+          ((q = a),
+          (V = (U = o).parentNode),
+          (G = U.nextSibling),
+          (h = o),
+          (Z = l.group),
+          (K = n),
+          (p = {
+            target: U,
+            clientX: (e || t).clientX,
+            clientY: (e || t).clientY,
+          }),
+          (this._lastX = (e || t).clientX),
+          (this._lastY = (e || t).clientY),
+          (U.style["will-change"] = "all"),
+          (U.style.transition = ""),
+          (U.style.transform = ""),
+          (i = function () {
+            r._disableDelayedDragEvents(),
+              !y && r.nativeDraggable && (U.draggable = !0),
+              r._triggerDragStart(t, e),
+              Ct(r, q, "choose", U, q, q, K),
+              yt(U, l.chosenClass, !0);
+          }),
+          l.ignore.split(",").forEach(function (t) {
+            Tt(U, t.trim(), xt);
+          }),
+          l.supportPointer
+            ? wt(s, "pointerup", r._onDrop)
+            : (wt(s, "mouseup", r._onDrop),
+              wt(s, "touchend", r._onDrop),
+              wt(s, "touchcancel", r._onDrop)),
+          y &&
+            this.nativeDraggable &&
+            ((this.options.touchStartThreshold = 4), (U.draggable = !0)),
+          !l.delay || (this.nativeDraggable && (_ || dt))
+            ? i()
+            : (wt(s, "mouseup", r._disableDelayedDrag),
+              wt(s, "touchend", r._disableDelayedDrag),
+              wt(s, "touchcancel", r._disableDelayedDrag),
+              wt(s, "mousemove", r._delayedDragTouchMoveHandler),
+              wt(s, "touchmove", r._delayedDragTouchMoveHandler),
+              l.supportPointer &&
+                wt(s, "pointermove", r._delayedDragTouchMoveHandler),
+              (r._dragStartTimer = ct(i, l.delay))));
+      },
+      _delayedDragTouchMoveHandler: function (t) {
+        var e = t.touches ? t.touches[0] : t;
+        N(ut(e.clientX - this._lastX), ut(e.clientY - this._lastY)) >=
+          Math.floor(
+            this.options.touchStartThreshold /
+              ((this.nativeDraggable && window.devicePixelRatio) || 1)
+          ) && this._disableDelayedDrag();
+      },
+      _disableDelayedDrag: function () {
+        U && xt(U),
+          clearTimeout(this._dragStartTimer),
+          this._disableDelayedDragEvents();
+      },
+      _disableDelayedDragEvents: function () {
+        var t = this.el.ownerDocument;
+        _t(t, "mouseup", this._disableDelayedDrag),
+          _t(t, "touchend", this._disableDelayedDrag),
+          _t(t, "touchcancel", this._disableDelayedDrag),
+          _t(t, "mousemove", this._delayedDragTouchMoveHandler),
+          _t(t, "touchmove", this._delayedDragTouchMoveHandler),
+          _t(t, "pointermove", this._delayedDragTouchMoveHandler);
+      },
+      _triggerDragStart: function (t, e) {
+        (e = e || ("touch" == t.pointerType ? t : null)),
+          !this.nativeDraggable || e
+            ? this.options.supportPointer
+              ? wt(st, "pointermove", this._onTouchMove)
+              : wt(st, e ? "touchmove" : "mousemove", this._onTouchMove)
+            : (wt(U, "dragend", this), wt(q, "dragstart", this._onDragStart));
+        try {
+          st.selection
+            ? Ht(function () {
+                st.selection.empty();
+              })
+            : window.getSelection().removeAllRanges();
+        } catch (t) {}
+      },
+      _dragStarted: function (t, e) {
+        if (((v = !1), q && U)) {
+          this.nativeDraggable &&
+            (wt(st, "dragover", this._handleAutoScroll), wt(st, "dragover", F));
+          var o = this.options;
+          !t && yt(U, o.dragClass, !1),
+            yt(U, o.ghostClass, !0),
+            Dt(U, "transform", ""),
+            (mt.active = this),
+            t && this._appendGhost(),
+            Ct(this, q, "start", U, q, q, K, void 0, e);
+        } else this._nulling();
+      },
+      _emulateDragOver: function (t) {
+        if (k) {
+          if (this._lastX === k.clientX && this._lastY === k.clientY && !t)
+            return;
+          (this._lastX = k.clientX), (this._lastY = k.clientY), z();
+          for (
+            var e = st.elementFromPoint(k.clientX, k.clientY), o = e;
+            e && e.shadowRoot;
+
+          )
+            o = e = e.shadowRoot.elementFromPoint(k.clientX, k.clientY);
+          if (o)
+            do {
+              if (o[lt])
+                if (
+                  o[lt]._onDragOver({
+                    clientX: k.clientX,
+                    clientY: k.clientY,
+                    target: e,
+                    rootEl: o,
+                  }) &&
+                  !this.options.dragoverBubble
+                )
+                  break;
+              e = o;
+            } while ((o = o.parentNode));
+          U.parentNode[lt]._computeIsAligned(k), j();
+        }
+      },
+      _onTouchMove: function (t, e) {
+        if (p) {
+          var o = this.options,
+            n = o.fallbackTolerance,
+            i = o.fallbackOffset,
+            r = t.touches ? t.touches[0] : t,
+            a = f && St(f),
+            l = f && a && a.a,
+            s = f && a && a.d,
+            c = S && g && Ft(g),
+            d =
+              (r.clientX - p.clientX + i.x) / (l || 1) +
+              (c ? c[0] - m[0] : 0) / (l || 1),
+            h =
+              (r.clientY - p.clientY + i.y) / (s || 1) +
+              (c ? c[1] - m[1] : 0) / (s || 1),
+            u = t.touches
+              ? "translate3d(" + d + "px," + h + "px,0)"
+              : "translate(" + d + "px," + h + "px)";
+          if (!mt.active && !v) {
+            if (
+              n &&
+              x(ut(r.clientX - this._lastX), ut(r.clientY - this._lastY)) < n
+            )
+              return;
+            this._onDragStart(t, !0);
+          }
+          !e && this._handleAutoScroll(r, !0),
+            (J = !0),
+            (k = r),
+            Dt(f, "webkitTransform", u),
+            Dt(f, "mozTransform", u),
+            Dt(f, "msTransform", u),
+            Dt(f, "transform", u),
+            t.cancelable && t.preventDefault();
+        }
+      },
+      _appendGhost: function () {
+        if (!f) {
+          var t = this.options.fallbackOnBody ? st.body : q,
+            e = Lt(U, !0, t, !S),
+            o = (Dt(U), this.options);
+          if (S) {
+            for (
+              g = t;
+              "static" === Dt(g, "position") &&
+              "none" === Dt(g, "transform") &&
+              g !== st;
+
+            )
+              g = g.parentNode;
+            if (g !== st) {
+              var n = Lt(g, !0);
+              (e.top -= n.top), (e.left -= n.left);
+            }
+            g !== st.body && g !== st.documentElement
+              ? (g === st && (g = H()),
+                (e.top += g.scrollTop),
+                (e.left += g.scrollLeft))
+              : (g = H()),
+              (m = Ft(g));
+          }
+          yt((f = U.cloneNode(!0)), o.ghostClass, !1),
+            yt(f, o.fallbackClass, !0),
+            yt(f, o.dragClass, !0),
+            Dt(f, "box-sizing", "border-box"),
+            Dt(f, "margin", 0),
+            Dt(f, "top", e.top),
+            Dt(f, "left", e.left),
+            Dt(f, "width", e.width),
+            Dt(f, "height", e.height),
+            Dt(f, "opacity", "0.8"),
+            Dt(f, "position", S ? "absolute" : "fixed"),
+            Dt(f, "zIndex", "100000"),
+            Dt(f, "pointerEvents", "none"),
+            t.appendChild(f);
+        }
+      },
+      _onDragStart: function (t, e) {
+        var o = this,
+          n = t.dataTransfer,
+          i = o.options;
+        ((u = Ot(U)).draggable = !1),
+          (u.style["will-change"] = ""),
+          this._hideClone(),
+          yt(u, o.options.chosenClass, !1),
+          (o._cloneId = Ht(function () {
+            o.options.removeCloneOnHide || q.insertBefore(u, U),
+              Ct(o, q, "clone", U);
+          })),
+          !e && yt(U, i.dragClass, !0),
+          e
+            ? ((it = !0), (o._loopId = setInterval(o._emulateDragOver, 50)))
+            : (_t(st, "mouseup", o._onDrop),
+              _t(st, "touchend", o._onDrop),
+              _t(st, "touchcancel", o._onDrop),
+              n &&
+                ((n.effectAllowed = "move"),
+                i.setData && i.setData.call(o, n, U)),
+              wt(st, "drop", o),
+              Dt(U, "transform", "translateZ(0)")),
+          (v = !0),
+          (o._dragStartId = Ht(o._dragStarted.bind(o, e, t))),
+          wt(st, "selectstart", o),
+          D && Dt(st.body, "user-select", "none");
+      },
+      _onDragOver: function (e) {
+        var o,
+          n,
+          t,
+          i = this.el,
+          r = e.target,
+          a = this.options,
+          l = a.group,
+          s = mt.active,
+          c = Z === l,
+          d = a.sort,
+          h = this;
+        if (!ht && (!dt || e.rootEl || e.artificialBubble || pt(i, r))) {
+          if (
+            (void 0 !== e.preventDefault && e.cancelable && e.preventDefault(),
+            (J = !0),
+            (r = bt(r, a.draggable, i, !0)),
+            bt(e.target, null, U, !0) || r.animated)
+          )
+            return z(!1);
+          if (
+            (r !== U && (it = !1),
+            s &&
+              !a.disabled &&
+              (c
+                ? d || (t = !q.contains(U))
+                : Q === this ||
+                  ((this.lastPutMode = Z.checkPull(this, s, U, e)) &&
+                    l.checkPut(this, s, U, e))))
+          ) {
+            var u = this._getDirection(e, r);
+            if (((o = Lt(U)), t))
+              return (
+                this._hideClone(),
+                (V = q),
+                G ? q.insertBefore(U, G) : q.appendChild(U),
+                z(!0)
+              );
+            var f = Pt(i);
+            if (
+              f &&
+              ((I = e),
+              (B = u),
+              (O = Lt(Pt(i))),
+              (H = "vertical" === B ? I.clientY : I.clientX),
+              (R = "vertical" === B ? I.clientX : I.clientY),
+              (L = "vertical" === B ? O.bottom : O.right),
+              (W = "vertical" === B ? O.left : O.top),
+              (F = "vertical" === B ? O.right : O.bottom),
+              !("vertical" === B
+                ? F + 10 < R || (R <= F && L < H && W <= R)
+                : (L < H && W < R) || (H <= L && F + 10 < R)) || f.animated)
+            ) {
+              if (r && r !== U && r.parentNode === i) {
+                var p,
+                  g = 0,
+                  v = r.sortableMouseAligned,
+                  m = U.parentNode !== i,
+                  b = "vertical" === u ? "top" : "left",
+                  w = Wt(r, "top") || Wt(U, "top"),
+                  _ = w ? w.scrollTop : void 0;
+                if (
+                  ($ !== r && ((et = null), (p = Lt(r)[b]), (rt = !1)),
+                  (C = r),
+                  (E = u),
+                  (x = ((T = U) === U && nt) || Lt(T)),
+                  (N = (C === U && nt) || Lt(C)),
+                  (M = "vertical" === E ? x.left : x.top),
+                  (P = "vertical" === E ? x.right : x.bottom),
+                  (X = "vertical" === E ? x.width : x.height),
+                  (Y = "vertical" === E ? N.left : N.top),
+                  (A = "vertical" === E ? N.right : N.bottom),
+                  (k = "vertical" === E ? N.width : N.height),
+                  (et =
+                    ((M === Y || P === A || M + X / 2 === Y + k / 2) && v) ||
+                    m ||
+                    w ||
+                    a.invertSwap ||
+                    "insert" === et ||
+                    "swap" === et
+                      ? ("swap" !== et && (at = a.invertSwap || m),
+                        (g = (function (t, e, o, n, i, r, a) {
+                          var l = Lt(e),
+                            s = "vertical" === o ? t.clientY : t.clientX,
+                            c = "vertical" === o ? l.height : l.width,
+                            d = "vertical" === o ? l.top : l.left,
+                            h = "vertical" === o ? l.bottom : l.right,
+                            u = Lt(U),
+                            f = !1;
+                          if (!r)
+                            if (a && ot < c * n)
+                              if (
+                                (!rt &&
+                                  (1 === tt
+                                    ? d + (c * i) / 2 < s
+                                    : s < h - (c * i) / 2) &&
+                                  (rt = !0),
+                                rt)
+                              )
+                                f = !0;
+                              else {
+                                "vertical" === o ? u.top : u.left,
+                                  "vertical" === o ? u.bottom : u.right;
+                                if (1 === tt ? s < d + ot : h - ot < s)
+                                  return -1 * tt;
+                              }
+                            else if (
+                              d + (c * (1 - n)) / 2 < s &&
+                              s < h - (c * (1 - n)) / 2
+                            )
+                              return Xt(e);
+                          if (
+                            (f = f || r) &&
+                            (s < d + (c * i) / 2 || h - (c * i) / 2 < s)
+                          )
+                            return d + c / 2 < s ? 1 : -1;
+                          return 0;
+                        })(
+                          e,
+                          r,
+                          u,
+                          a.swapThreshold,
+                          null == a.invertedSwapThreshold
+                            ? a.swapThreshold
+                            : a.invertedSwapThreshold,
+                          at,
+                          $ === r
+                        )),
+                        "swap")
+                      : ((g = Xt(r)), "insert")),
+                  0 === g)
+                )
+                  return z(!1);
+                (nt = null), (tt = g), (n = Lt(($ = r)));
+                var y = r.nextElementSibling,
+                  D = !1,
+                  S = Et(q, i, U, o, r, n, e, (D = 1 === g));
+                if (!1 !== S)
+                  return (
+                    (1 !== S && -1 !== S) || (D = 1 === S),
+                    (ht = !0),
+                    ct(Nt, 30),
+                    c ? s._hideClone() : s._showClone(this),
+                    D && !y
+                      ? i.appendChild(U)
+                      : r.parentNode.insertBefore(U, D ? y : r),
+                    w && ft(w, 0, _ - w.scrollTop),
+                    (V = U.parentNode),
+                    void 0 === p || at || (ot = ut(p - Lt(r)[b])),
+                    j(),
+                    z(!0)
+                  );
+              }
+            } else if (
+              (f && i === e.target && (r = f),
+              r && (n = Lt(r)),
+              c ? s._hideClone() : s._showClone(this),
+              !1 !== Et(q, i, U, o, r, n, e, !!r))
+            )
+              return i.appendChild(U), (V = i), (nt = null), j(), z(!0);
+            if (i.contains(U)) return z(!1);
+          }
+          var T, C, E, x, N, M, P, X, Y, A, k, I, B, O, H, R, L, W, F;
+          return dt && !e.rootEl && gt(i, e, "_onDragOver"), !1;
+        }
+        function z(t) {
+          return (
+            t &&
+              (c ? s._hideClone() : s._showClone(h),
+              s &&
+                (yt(U, Q ? Q.options.ghostClass : s.options.ghostClass, !1),
+                yt(U, a.ghostClass, !0)),
+              Q !== h && h !== mt.active
+                ? (Q = h)
+                : h === mt.active && (Q = null),
+              o && h._animate(o, U),
+              r && n && h._animate(n, r)),
+            ((r === U && !U.animated) || (r === i && !r.animated)) &&
+              ($ = null),
+            a.dragoverBubble ||
+              e.rootEl ||
+              r === st ||
+              (h._handleAutoScroll(e), U.parentNode[lt]._computeIsAligned(e)),
+            !a.dragoverBubble && e.stopPropagation && e.stopPropagation(),
+            !0
+          );
+        }
+        function j() {
+          Ct(h, q, "change", r, i, q, K, At(U, a.draggable), e);
+        }
+      },
+      _animate: function (t, e) {
+        var o = this.options.animation;
+        if (o) {
+          var n = Lt(e);
+          if (
+            (e === U && (nt = n),
+            1 === t.nodeType && (t = Lt(t)),
+            t.left + t.width / 2 !== n.left + n.width / 2 ||
+              t.top + t.height / 2 !== n.top + n.height / 2)
+          ) {
+            var i = St(this.el),
+              r = i && i.a,
+              a = i && i.d;
+            Dt(e, "transition", "none"),
+              Dt(
+                e,
+                "transform",
+                "translate3d(" +
+                  (t.left - n.left) / (r || 1) +
+                  "px," +
+                  (t.top - n.top) / (a || 1) +
+                  "px,0)"
+              ),
+              e.offsetWidth,
+              Dt(
+                e,
+                "transition",
+                "transform " +
+                  o +
+                  "ms" +
+                  (this.options.easing ? " " + this.options.easing : "")
+              ),
+              Dt(e, "transform", "translate3d(0,0,0)");
+          }
+          "number" == typeof e.animated && clearTimeout(e.animated),
+            (e.animated = ct(function () {
+              Dt(e, "transition", ""),
+                Dt(e, "transform", ""),
+                (e.animated = !1);
+            }, o));
+        }
+      },
+      _offUpEvents: function () {
+        var t = this.el.ownerDocument;
+        _t(st, "touchmove", this._onTouchMove),
+          _t(st, "pointermove", this._onTouchMove),
+          _t(t, "mouseup", this._onDrop),
+          _t(t, "touchend", this._onDrop),
+          _t(t, "pointerup", this._onDrop),
+          _t(t, "touchcancel", this._onDrop),
+          _t(st, "selectstart", this);
+      },
+      _onDrop: function (t) {
+        var e = this.el,
+          o = this.options;
+        (rt = at = B = v = !1),
+          clearInterval(this._loopId),
+          clearInterval(l),
+          L(),
+          clearTimeout(vt),
+          (vt = void 0),
+          clearTimeout(this._dragStartTimer),
+          Rt(this._cloneId),
+          Rt(this._dragStartId),
+          _t(st, "mousemove", this._onTouchMove),
+          this.nativeDraggable &&
+            (_t(st, "drop", this),
+            _t(e, "dragstart", this._onDragStart),
+            _t(st, "dragover", this._handleAutoScroll),
+            _t(st, "dragover", F)),
+          D && Dt(st.body, "user-select", ""),
+          this._offUpEvents(),
+          t &&
+            (J &&
+              (t.cancelable && t.preventDefault(),
+              !o.dropBubble && t.stopPropagation()),
+            f && f.parentNode && f.parentNode.removeChild(f),
+            (q === V || (Q && "clone" !== Q.lastPutMode)) &&
+              u &&
+              u.parentNode &&
+              u.parentNode.removeChild(u),
+            U &&
+              (this.nativeDraggable && _t(U, "dragend", this),
+              xt(U),
+              (U.style["will-change"] = ""),
+              yt(U, Q ? Q.options.ghostClass : this.options.ghostClass, !1),
+              yt(U, this.options.chosenClass, !1),
+              Ct(this, q, "unchoose", U, V, q, K, null, t),
+              q !== V
+                ? (0 <= (n = At(U, o.draggable)) &&
+                    (Ct(null, V, "add", U, V, q, K, n, t),
+                    Ct(this, q, "remove", U, V, q, K, n, t),
+                    Ct(null, V, "sort", U, V, q, K, n, t),
+                    Ct(this, q, "sort", U, V, q, K, n, t)),
+                  Q && Q.save())
+                : U.nextSibling !== G &&
+                  0 <= (n = At(U, o.draggable)) &&
+                  (Ct(this, q, "update", U, V, q, K, n, t),
+                  Ct(this, q, "sort", U, V, q, K, n, t)),
+              mt.active &&
+                ((null != n && -1 !== n) || (n = K),
+                Ct(this, q, "end", U, V, q, K, n, t),
+                this.save()))),
+          this._nulling();
+      },
+      _nulling: function () {
+        (q =
+          U =
+          V =
+          f =
+          G =
+          u =
+          h =
+          X =
+          Y =
+          I.length =
+          l =
+          s =
+          c =
+          p =
+          k =
+          J =
+          n =
+          K =
+          $ =
+          tt =
+          nt =
+          Q =
+          Z =
+          mt.active =
+            null),
+          M.forEach(function (t) {
+            t.checked = !0;
+          }),
+          (M.length = 0);
+      },
+      handleEvent: function (t) {
+        switch (t.type) {
+          case "drop":
+          case "dragend":
+            this._onDrop(t);
+            break;
+          case "dragenter":
+          case "dragover":
+            U &&
+              (this._onDragOver(t),
+              (function (t) {
+                t.dataTransfer && (t.dataTransfer.dropEffect = "move");
+                t.cancelable && t.preventDefault();
+              })(t));
+            break;
+          case "selectstart":
+            t.preventDefault();
+        }
+      },
+      toArray: function () {
+        for (
+          var t,
+            e = [],
+            o = this.el.children,
+            n = 0,
+            i = o.length,
+            r = this.options;
+          n < i;
+          n++
+        )
+          bt((t = o[n]), r.draggable, this.el, !1) &&
+            e.push(t.getAttribute(r.dataIdAttr) || Yt(t));
+        return e;
+      },
+      sort: function (t) {
+        var n = {},
+          i = this.el;
+        this.toArray().forEach(function (t, e) {
+          var o = i.children[e];
+          bt(o, this.options.draggable, i, !1) && (n[t] = o);
+        }, this),
+          t.forEach(function (t) {
+            n[t] && (i.removeChild(n[t]), i.appendChild(n[t]));
+          });
+      },
+      save: function () {
+        var t = this.options.store;
+        t && t.set && t.set(this);
+      },
+      closest: function (t, e) {
+        return bt(t, e || this.options.draggable, this.el, !1);
+      },
+      option: function (t, e) {
+        var o = this.options;
+        if (void 0 === e) return o[t];
+        (o[t] = e), "group" === t && W(o);
+      },
+      destroy: function () {
+        var t = this.el;
+        (t[lt] = null),
+          _t(t, "mousedown", this._onTapStart),
+          _t(t, "touchstart", this._onTapStart),
+          _t(t, "pointerdown", this._onTapStart),
+          this.nativeDraggable &&
+            (_t(t, "dragover", this), _t(t, "dragenter", this)),
+          Array.prototype.forEach.call(
+            t.querySelectorAll("[draggable]"),
+            function (t) {
+              t.removeAttribute("draggable");
+            }
+          ),
+          this._onDrop(),
+          d.splice(d.indexOf(this.el), 1),
+          (this.el = t = null);
+      },
+      _hideClone: function () {
+        u.cloneHidden ||
+          (Dt(u, "display", "none"),
+          (u.cloneHidden = !0),
+          u.parentNode &&
+            this.options.removeCloneOnHide &&
+            u.parentNode.removeChild(u));
+      },
+      _showClone: function (t) {
+        "clone" === t.lastPutMode
+          ? u.cloneHidden &&
+            (q.contains(U) && !this.options.group.revertClone
+              ? q.insertBefore(u, U)
+              : G
+              ? q.insertBefore(u, G)
+              : q.appendChild(u),
+            this.options.group.revertClone && this._animate(U, u),
+            Dt(u, "display", ""),
+            (u.cloneHidden = !1))
+          : this._hideClone();
+      },
+    }),
+    wt(st, "touchmove", function (t) {
+      (mt.active || v) && t.cancelable && t.preventDefault();
+    }),
+    (mt.utils = {
+      on: wt,
+      off: _t,
+      css: Dt,
+      find: Tt,
+      is: function (t, e) {
+        return !!bt(t, e, t, !1);
+      },
+      extend: Bt,
+      throttle: It,
+      closest: bt,
+      toggleClass: yt,
+      clone: Ot,
+      index: At,
+      nextTick: Ht,
+      cancelNextTick: Rt,
+      detectDirection: P,
+      getChild: Mt,
+    }),
+    (mt.create = function (t, e) {
+      return new mt(t, e);
+    }),
+    (mt.version = "1.8.4"),
+    mt
+  );
+});
diff --git a/notemyprogress/js/vuetify.js b/notemyprogress/js/vuetify.js
index faec41145efaf188b4ce1e2033fb819a17f561ad..05f8fdd814f1f3b5c8ed3129ac769a5f5a2b16bc 100644
--- a/notemyprogress/js/vuetify.js
+++ b/notemyprogress/js/vuetify.js
@@ -1,38711 +1,55920 @@
 (function webpackUniversalModuleDefinition(root, factory) {
-	if(typeof exports === 'object' && typeof module === 'object')
-		module.exports = factory(require("vue"));
-	else if(typeof define === 'function' && define.amd)
-		define(["vue"], factory);
-	else if(typeof exports === 'object')
-		exports["Vuetify"] = factory(require("vue"));
-	else
-		root["Vuetify"] = factory(root["Vue"]);
-})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_vue__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-/******/
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId]) {
-/******/ 			return installedModules[moduleId].exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			i: moduleId,
-/******/ 			l: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ 		// Flag the module as loaded
-/******/ 		module.l = true;
-/******/
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/
-/******/
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-/******/
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-/******/
-/******/ 	// define getter function for harmony exports
-/******/ 	__webpack_require__.d = function(exports, name, getter) {
-/******/ 		if(!__webpack_require__.o(exports, name)) {
-/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ 		}
-/******/ 	};
-/******/
-/******/ 	// define __esModule on exports
-/******/ 	__webpack_require__.r = function(exports) {
-/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 		}
-/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 	};
-/******/
-/******/ 	// create a fake namespace object
-/******/ 	// mode & 1: value is a module id, require it
-/******/ 	// mode & 2: merge all properties of value into the ns
-/******/ 	// mode & 4: return value when already ns object
-/******/ 	// mode & 8|1: behave like require
-/******/ 	__webpack_require__.t = function(value, mode) {
-/******/ 		if(mode & 1) value = __webpack_require__(value);
-/******/ 		if(mode & 8) return value;
-/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ 		var ns = Object.create(null);
-/******/ 		__webpack_require__.r(ns);
-/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ 		return ns;
-/******/ 	};
-/******/
-/******/ 	// getDefaultExport function for compatibility with non-harmony modules
-/******/ 	__webpack_require__.n = function(module) {
-/******/ 		var getter = module && module.__esModule ?
-/******/ 			function getDefault() { return module['default']; } :
-/******/ 			function getModuleExports() { return module; };
-/******/ 		__webpack_require__.d(getter, 'a', getter);
-/******/ 		return getter;
-/******/ 	};
-/******/
-/******/ 	// Object.prototype.hasOwnProperty.call
-/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "/dist/";
-/******/
-/******/
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(__webpack_require__.s = "./src/index.ts");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./src/components/VAlert/VAlert.sass":
-/*!*******************************************!*\
-  !*** ./src/components/VAlert/VAlert.sass ***!
-  \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VAlert/VAlert.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VAlert/VAlert.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAlert_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAlert.sass */ "./src/components/VAlert/VAlert.sass");
-/* harmony import */ var _VAlert_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VAlert_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet */ "./src/components/VSheet/index.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_transitionable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/transitionable */ "./src/mixins/transitionable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
- // Components
-
-
- // Mixins
-
-
-
- // Utilities
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_transitionable__WEBPACK_IMPORTED_MODULE_6__["default"]).extend({
-  name: 'v-alert',
-  props: {
-    border: {
-      type: String,
-      validator: function validator(val) {
-        return ['top', 'right', 'bottom', 'left'].includes(val);
-      }
-    },
-    closeLabel: {
-      type: String,
-      default: '$vuetify.close'
-    },
-    coloredBorder: Boolean,
-    dense: Boolean,
-    dismissible: Boolean,
-    closeIcon: {
-      type: String,
-      default: '$cancel'
-    },
-    icon: {
-      default: '',
-      type: [Boolean, String],
-      validator: function validator(val) {
-        return typeof val === 'string' || val === false;
-      }
-    },
-    outlined: Boolean,
-    prominent: Boolean,
-    text: Boolean,
-    type: {
-      type: String,
-      validator: function validator(val) {
-        return ['info', 'error', 'success', 'warning'].includes(val);
-      }
-    },
-    value: {
-      type: Boolean,
-      default: true
-    }
-  },
-  computed: {
-    __cachedBorder: function __cachedBorder() {
-      var _a;
-
-      if (!this.border) return null;
-      var data = {
-        staticClass: 'v-alert__border',
-        class: (_a = {}, _a["v-alert__border--" + this.border] = true, _a)
-      };
-
-      if (this.coloredBorder) {
-        data = this.setBackgroundColor(this.computedColor, data);
-        data.class['v-alert__border--has-color'] = true;
-      }
-
-      return this.$createElement('div', data);
-    },
-    __cachedDismissible: function __cachedDismissible() {
-      var _this = this;
-
-      if (!this.dismissible) return null;
-      var color = this.iconColor;
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        staticClass: 'v-alert__dismissible',
-        props: {
-          color: color,
-          icon: true,
-          small: true
-        },
-        attrs: {
-          'aria-label': this.$vuetify.lang.t(this.closeLabel)
-        },
-        on: {
-          click: function click() {
-            return _this.isActive = false;
-          }
-        }
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        props: {
-          color: color
+  if (typeof exports === "object" && typeof module === "object")
+    module.exports = factory(require("vue"));
+  else if (typeof define === "function" && define.amd) define(["vue"], factory);
+  else if (typeof exports === "object")
+    exports["Vuetify"] = factory(require("vue"));
+  else root["Vuetify"] = factory(root["Vue"]);
+})(
+  typeof self !== "undefined" ? self : this,
+  function (__WEBPACK_EXTERNAL_MODULE_vue__) {
+    return /******/ (function (modules) {
+      // webpackBootstrap
+      /******/ // The module cache
+      /******/ var installedModules = {};
+      /******/
+      /******/ // The require function
+      /******/ function __webpack_require__(moduleId) {
+        /******/
+        /******/ // Check if module is in cache
+        /******/ if (installedModules[moduleId]) {
+          /******/ return installedModules[moduleId].exports;
+          /******/
+        }
+        /******/ // Create a new module (and put it into the cache)
+        /******/ var module = (installedModules[moduleId] = {
+          /******/ i: moduleId,
+          /******/ l: false,
+          /******/ exports: {},
+          /******/
+        });
+        /******/
+        /******/ // Execute the module function
+        /******/ modules[moduleId].call(
+          module.exports,
+          module,
+          module.exports,
+          __webpack_require__
+        );
+        /******/
+        /******/ // Flag the module as loaded
+        /******/ module.l = true;
+        /******/
+        /******/ // Return the exports of the module
+        /******/ return module.exports;
+        /******/
+      }
+      /******/
+      /******/
+      /******/ // expose the modules object (__webpack_modules__)
+      /******/ __webpack_require__.m = modules;
+      /******/
+      /******/ // expose the module cache
+      /******/ __webpack_require__.c = installedModules;
+      /******/
+      /******/ // define getter function for harmony exports
+      /******/ __webpack_require__.d = function (exports, name, getter) {
+        /******/ if (!__webpack_require__.o(exports, name)) {
+          /******/ Object.defineProperty(exports, name, {
+            enumerable: true,
+            get: getter,
+          });
+          /******/
         }
-      }, this.closeIcon)]);
-    },
-    __cachedIcon: function __cachedIcon() {
-      if (!this.computedIcon) return null;
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        staticClass: 'v-alert__icon',
-        props: {
-          color: this.iconColor
+        /******/
+      };
+      /******/
+      /******/ // define __esModule on exports
+      /******/ __webpack_require__.r = function (exports) {
+        /******/ if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
+          /******/ Object.defineProperty(exports, Symbol.toStringTag, {
+            value: "Module",
+          });
+          /******/
         }
-      }, this.computedIcon);
-    },
-    classes: function classes() {
-      var classes = __assign(__assign({}, _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-alert--border': Boolean(this.border),
-        'v-alert--dense': this.dense,
-        'v-alert--outlined': this.outlined,
-        'v-alert--prominent': this.prominent,
-        'v-alert--text': this.text
-      });
-
-      if (this.border) {
-        classes["v-alert--border-" + this.border] = true;
-      }
-
-      return classes;
-    },
-    computedColor: function computedColor() {
-      return this.color || this.type;
-    },
-    computedIcon: function computedIcon() {
-      if (this.icon === false) return false;
-      if (typeof this.icon === 'string' && this.icon) return this.icon;
-      if (!['error', 'info', 'success', 'warning'].includes(this.type)) return false;
-      return "$" + this.type;
-    },
-    hasColoredIcon: function hasColoredIcon() {
-      return this.hasText || Boolean(this.border) && this.coloredBorder;
-    },
-    hasText: function hasText() {
-      return this.text || this.outlined;
-    },
-    iconColor: function iconColor() {
-      return this.hasColoredIcon ? this.computedColor : undefined;
-    },
-    isDark: function isDark() {
-      if (this.type && !this.coloredBorder && !this.outlined) return true;
-      return _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"].options.computed.isDark.call(this);
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('outline')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_8__["breaking"])('outline', 'outlined', this);
-    }
-  },
-  methods: {
-    genWrapper: function genWrapper() {
-      var children = [this.$slots.prepend || this.__cachedIcon, this.genContent(), this.__cachedBorder, this.$slots.append, this.$scopedSlots.close ? this.$scopedSlots.close({
-        toggle: this.toggle
-      }) : this.__cachedDismissible];
-      var data = {
-        staticClass: 'v-alert__wrapper'
+        /******/ Object.defineProperty(exports, "__esModule", { value: true });
+        /******/
       };
-      return this.$createElement('div', data, children);
-    },
-    genContent: function genContent() {
-      return this.$createElement('div', {
-        staticClass: 'v-alert__content'
-      }, this.$slots.default);
-    },
-    genAlert: function genAlert() {
-      var data = {
-        staticClass: 'v-alert',
-        attrs: {
-          role: 'alert'
-        },
-        on: this.listeners$,
-        class: this.classes,
-        style: this.styles,
-        directives: [{
-          name: 'show',
-          value: this.isActive
-        }]
+      /******/
+      /******/ // create a fake namespace object
+      /******/ // mode & 1: value is a module id, require it
+      /******/ // mode & 2: merge all properties of value into the ns
+      /******/ // mode & 4: return value when already ns object
+      /******/ // mode & 8|1: behave like require
+      /******/ __webpack_require__.t = function (value, mode) {
+        /******/ if (mode & 1) value = __webpack_require__(value);
+        /******/ if (mode & 8) return value;
+        /******/ if (
+          mode & 4 &&
+          typeof value === "object" &&
+          value &&
+          value.__esModule
+        )
+          return value;
+        /******/ var ns = Object.create(null);
+        /******/ __webpack_require__.r(ns);
+        /******/ Object.defineProperty(ns, "default", {
+          enumerable: true,
+          value: value,
+        });
+        /******/ if (mode & 2 && typeof value != "string")
+          for (var key in value)
+            __webpack_require__.d(
+              ns,
+              key,
+              function (key) {
+                return value[key];
+              }.bind(null, key)
+            );
+        /******/ return ns;
+        /******/
       };
+      /******/
+      /******/ // getDefaultExport function for compatibility with non-harmony modules
+      /******/ __webpack_require__.n = function (module) {
+        /******/ var getter =
+          module && module.__esModule
+            ? /******/ function getDefault() {
+                return module["default"];
+              }
+            : /******/ function getModuleExports() {
+                return module;
+              };
+        /******/ __webpack_require__.d(getter, "a", getter);
+        /******/ return getter;
+        /******/
+      };
+      /******/
+      /******/ // Object.prototype.hasOwnProperty.call
+      /******/ __webpack_require__.o = function (object, property) {
+        return Object.prototype.hasOwnProperty.call(object, property);
+      };
+      /******/
+      /******/ // __webpack_public_path__
+      /******/ __webpack_require__.p = "/dist/";
+      /******/
+      /******/
+      /******/ // Load entry module and return exports
+      /******/ return __webpack_require__(
+        (__webpack_require__.s = "./src/index.ts")
+      );
+      /******/
+    })(
+      /************************************************************************/
+      /******/ {
+        /***/ "./src/components/VAlert/VAlert.sass":
+          /*!*******************************************!*\
+  !*** ./src/components/VAlert/VAlert.sass ***!
+  \*******************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (!this.coloredBorder) {
-        var setColor = this.hasText ? this.setTextColor : this.setBackgroundColor;
-        data = setColor(this.computedColor, data);
-      }
-
-      return this.$createElement('div', data, [this.genWrapper()]);
-    },
-
-    /** @public */
-    toggle: function toggle() {
-      this.isActive = !this.isActive;
-    }
-  },
-  render: function render(h) {
-    var render = this.genAlert();
-    if (!this.transition) return render;
-    return h('transition', {
-      props: {
-        name: this.transition,
-        origin: this.origin,
-        mode: this.mode
-      }
-    }, [render]);
-  }
-}));
+        /***/ "./src/components/VAlert/VAlert.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VAlert/VAlert.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAlert_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAlert.sass */ "./src/components/VAlert/VAlert.sass"
+              );
+            /* harmony import */ var _VAlert_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VAlert_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet */ "./src/components/VSheet/index.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_transitionable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/transitionable */ "./src/mixins/transitionable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(
+                _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _mixins_transitionable__WEBPACK_IMPORTED_MODULE_6__["default"]
+              ).extend({
+                name: "v-alert",
+                props: {
+                  border: {
+                    type: String,
+                    validator: function validator(val) {
+                      return ["top", "right", "bottom", "left"].includes(val);
+                    },
+                  },
+                  closeLabel: {
+                    type: String,
+                    default: "$vuetify.close",
+                  },
+                  coloredBorder: Boolean,
+                  dense: Boolean,
+                  dismissible: Boolean,
+                  closeIcon: {
+                    type: String,
+                    default: "$cancel",
+                  },
+                  icon: {
+                    default: "",
+                    type: [Boolean, String],
+                    validator: function validator(val) {
+                      return typeof val === "string" || val === false;
+                    },
+                  },
+                  outlined: Boolean,
+                  prominent: Boolean,
+                  text: Boolean,
+                  type: {
+                    type: String,
+                    validator: function validator(val) {
+                      return ["info", "error", "success", "warning"].includes(
+                        val
+                      );
+                    },
+                  },
+                  value: {
+                    type: Boolean,
+                    default: true,
+                  },
+                },
+                computed: {
+                  __cachedBorder: function __cachedBorder() {
+                    var _a;
+
+                    if (!this.border) return null;
+                    var data = {
+                      staticClass: "v-alert__border",
+                      class:
+                        ((_a = {}),
+                        (_a["v-alert__border--" + this.border] = true),
+                        _a),
+                    };
+
+                    if (this.coloredBorder) {
+                      data = this.setBackgroundColor(this.computedColor, data);
+                      data.class["v-alert__border--has-color"] = true;
+                    }
+
+                    return this.$createElement("div", data);
+                  },
+                  __cachedDismissible: function __cachedDismissible() {
+                    var _this = this;
+
+                    if (!this.dismissible) return null;
+                    var color = this.iconColor;
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        staticClass: "v-alert__dismissible",
+                        props: {
+                          color: color,
+                          icon: true,
+                          small: true,
+                        },
+                        attrs: {
+                          "aria-label": this.$vuetify.lang.t(this.closeLabel),
+                        },
+                        on: {
+                          click: function click() {
+                            return (_this.isActive = false);
+                          },
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          _VIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                          {
+                            props: {
+                              color: color,
+                            },
+                          },
+                          this.closeIcon
+                        ),
+                      ]
+                    );
+                  },
+                  __cachedIcon: function __cachedIcon() {
+                    if (!this.computedIcon) return null;
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      {
+                        staticClass: "v-alert__icon",
+                        props: {
+                          color: this.iconColor,
+                        },
+                      },
+                      this.computedIcon
+                    );
+                  },
+                  classes: function classes() {
+                    var classes = __assign(
+                      __assign(
+                        {},
+                        _VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-alert--border": Boolean(this.border),
+                        "v-alert--dense": this.dense,
+                        "v-alert--outlined": this.outlined,
+                        "v-alert--prominent": this.prominent,
+                        "v-alert--text": this.text,
+                      }
+                    );
+
+                    if (this.border) {
+                      classes["v-alert--border-" + this.border] = true;
+                    }
+
+                    return classes;
+                  },
+                  computedColor: function computedColor() {
+                    return this.color || this.type;
+                  },
+                  computedIcon: function computedIcon() {
+                    if (this.icon === false) return false;
+                    if (typeof this.icon === "string" && this.icon)
+                      return this.icon;
+                    if (
+                      !["error", "info", "success", "warning"].includes(
+                        this.type
+                      )
+                    )
+                      return false;
+                    return "$" + this.type;
+                  },
+                  hasColoredIcon: function hasColoredIcon() {
+                    return (
+                      this.hasText ||
+                      (Boolean(this.border) && this.coloredBorder)
+                    );
+                  },
+                  hasText: function hasText() {
+                    return this.text || this.outlined;
+                  },
+                  iconColor: function iconColor() {
+                    return this.hasColoredIcon ? this.computedColor : undefined;
+                  },
+                  isDark: function isDark() {
+                    if (this.type && !this.coloredBorder && !this.outlined)
+                      return true;
+                    return _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__[
+                      "default"
+                    ].options.computed.isDark.call(this);
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("outline")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_8__["breaking"]
+                    )("outline", "outlined", this);
+                  }
+                },
+                methods: {
+                  genWrapper: function genWrapper() {
+                    var children = [
+                      this.$slots.prepend || this.__cachedIcon,
+                      this.genContent(),
+                      this.__cachedBorder,
+                      this.$slots.append,
+                      this.$scopedSlots.close
+                        ? this.$scopedSlots.close({
+                            toggle: this.toggle,
+                          })
+                        : this.__cachedDismissible,
+                    ];
+                    var data = {
+                      staticClass: "v-alert__wrapper",
+                    };
+                    return this.$createElement("div", data, children);
+                  },
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-alert__content",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                  genAlert: function genAlert() {
+                    var data = {
+                      staticClass: "v-alert",
+                      attrs: {
+                        role: "alert",
+                      },
+                      on: this.listeners$,
+                      class: this.classes,
+                      style: this.styles,
+                      directives: [
+                        {
+                          name: "show",
+                          value: this.isActive,
+                        },
+                      ],
+                    };
+
+                    if (!this.coloredBorder) {
+                      var setColor = this.hasText
+                        ? this.setTextColor
+                        : this.setBackgroundColor;
+                      data = setColor(this.computedColor, data);
+                    }
+
+                    return this.$createElement("div", data, [
+                      this.genWrapper(),
+                    ]);
+                  },
+
+                  /** @public */
+                  toggle: function toggle() {
+                    this.isActive = !this.isActive;
+                  },
+                },
+                render: function render(h) {
+                  var render = this.genAlert();
+                  if (!this.transition) return render;
+                  return h(
+                    "transition",
+                    {
+                      props: {
+                        name: this.transition,
+                        origin: this.origin,
+                        mode: this.mode,
+                      },
+                    },
+                    [render]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAlert/index.ts":
-/*!****************************************!*\
+        /***/ "./src/components/VAlert/index.ts":
+          /*!****************************************!*\
   !*** ./src/components/VAlert/index.ts ***!
   \****************************************/
-/*! exports provided: VAlert, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAlert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAlert */ "./src/components/VAlert/VAlert.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAlert", function() { return _VAlert__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
+          /*! exports provided: VAlert, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAlert__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAlert */ "./src/components/VAlert/VAlert.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAlert",
+              function () {
+                return _VAlert__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VAlert__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VAlert__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VApp/VApp.sass":
-/*!***************************************!*\
+        /***/ "./src/components/VApp/VApp.sass":
+          /*!***************************************!*\
   !*** ./src/components/VApp/VApp.sass ***!
   \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VApp/VApp.ts":
-/*!*************************************!*\
+        /***/ "./src/components/VApp/VApp.ts":
+          /*!*************************************!*\
   !*** ./src/components/VApp/VApp.ts ***!
   \*************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VApp_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VApp.sass */ "./src/components/VApp/VApp.sass");
-/* harmony import */ var _VApp_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VApp_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]).extend({
-  name: 'v-app',
-  props: {
-    dark: {
-      type: Boolean,
-      default: undefined
-    },
-    id: {
-      type: String,
-      default: 'app'
-    },
-    light: {
-      type: Boolean,
-      default: undefined
-    }
-  },
-  computed: {
-    isDark: function isDark() {
-      return this.$vuetify.theme.dark;
-    }
-  },
-  beforeCreate: function beforeCreate() {
-    if (!this.$vuetify || this.$vuetify === this.$root) {
-      throw new Error('Vuetify is not properly initialized, see https://vuetifyjs.com/getting-started/quick-start#bootstrapping-the-vuetify-object');
-    }
-  },
-  render: function render(h) {
-    var wrapper = h('div', {
-      staticClass: 'v-application--wrap'
-    }, this.$slots.default);
-    return h('div', {
-      staticClass: 'v-application',
-      class: __assign({
-        'v-application--is-rtl': this.$vuetify.rtl,
-        'v-application--is-ltr': !this.$vuetify.rtl
-      }, this.themeClasses),
-      attrs: {
-        'data-app': true
-      },
-      domProps: {
-        id: this.id
-      }
-    }, [wrapper]);
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VApp_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VApp.sass */ "./src/components/VApp/VApp.sass"
+              );
+            /* harmony import */ var _VApp_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VApp_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]
+              ).extend({
+                name: "v-app",
+                props: {
+                  dark: {
+                    type: Boolean,
+                    default: undefined,
+                  },
+                  id: {
+                    type: String,
+                    default: "app",
+                  },
+                  light: {
+                    type: Boolean,
+                    default: undefined,
+                  },
+                },
+                computed: {
+                  isDark: function isDark() {
+                    return this.$vuetify.theme.dark;
+                  },
+                },
+                beforeCreate: function beforeCreate() {
+                  if (!this.$vuetify || this.$vuetify === this.$root) {
+                    throw new Error(
+                      "Vuetify is not properly initialized, see https://vuetifyjs.com/getting-started/quick-start#bootstrapping-the-vuetify-object"
+                    );
+                  }
+                },
+                render: function render(h) {
+                  var wrapper = h(
+                    "div",
+                    {
+                      staticClass: "v-application--wrap",
+                    },
+                    this.$slots.default
+                  );
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-application",
+                      class: __assign(
+                        {
+                          "v-application--is-rtl": this.$vuetify.rtl,
+                          "v-application--is-ltr": !this.$vuetify.rtl,
+                        },
+                        this.themeClasses
+                      ),
+                      attrs: {
+                        "data-app": true,
+                      },
+                      domProps: {
+                        id: this.id,
+                      },
+                    },
+                    [wrapper]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VApp/index.ts":
-/*!**************************************!*\
+        /***/ "./src/components/VApp/index.ts":
+          /*!**************************************!*\
   !*** ./src/components/VApp/index.ts ***!
   \**************************************/
-/*! exports provided: VApp, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VApp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VApp */ "./src/components/VApp/VApp.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VApp", function() { return _VApp__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
+          /*! exports provided: VApp, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VApp__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VApp */ "./src/components/VApp/VApp.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VApp",
+              function () {
+                return _VApp__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VApp__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VApp__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAppBar/VAppBar.sass":
-/*!*********************************************!*\
+        /***/ "./src/components/VAppBar/VAppBar.sass":
+          /*!*********************************************!*\
   !*** ./src/components/VAppBar/VAppBar.sass ***!
   \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VAppBar/VAppBar.ts":
-/*!*******************************************!*\
+        /***/ "./src/components/VAppBar/VAppBar.ts":
+          /*!*******************************************!*\
   !*** ./src/components/VAppBar/VAppBar.ts ***!
   \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAppBar_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAppBar.sass */ "./src/components/VAppBar/VAppBar.sass");
-/* harmony import */ var _VAppBar_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VAppBar_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VToolbar/VToolbar */ "./src/components/VToolbar/VToolbar.ts");
-/* harmony import */ var _directives_scroll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../directives/scroll */ "./src/directives/scroll/index.ts");
-/* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts");
-/* harmony import */ var _mixins_scrollable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/scrollable */ "./src/mixins/scrollable/index.ts");
-/* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
- // Directives
-
- // Mixins
-
-
-
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(_VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_scrollable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__["default"], Object(_mixins_applicationable__WEBPACK_IMPORTED_MODULE_3__["default"])('top', ['clippedLeft', 'clippedRight', 'computedHeight', 'invertedScroll', 'isExtended', 'isProminent', 'value']));
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-app-bar',
-  directives: {
-    Scroll: _directives_scroll__WEBPACK_IMPORTED_MODULE_2__["default"]
-  },
-  props: {
-    clippedLeft: Boolean,
-    clippedRight: Boolean,
-    collapseOnScroll: Boolean,
-    elevateOnScroll: Boolean,
-    fadeImgOnScroll: Boolean,
-    hideOnScroll: Boolean,
-    invertedScroll: Boolean,
-    scrollOffScreen: Boolean,
-    shrinkOnScroll: Boolean,
-    value: {
-      type: Boolean,
-      default: true
-    }
-  },
-  data: function data() {
-    return {
-      isActive: this.value
-    };
-  },
-  computed: {
-    applicationProperty: function applicationProperty() {
-      return !this.bottom ? 'top' : 'bottom';
-    },
-    canScroll: function canScroll() {
-      return _mixins_scrollable__WEBPACK_IMPORTED_MODULE_4__["default"].options.computed.canScroll.call(this) && (this.invertedScroll || this.elevateOnScroll || this.hideOnScroll || this.collapseOnScroll || this.isBooted || // If falsey, user has provided an
-      // explicit value which should
-      // overwrite anything we do
-      !this.value);
-    },
-    classes: function classes() {
-      return __assign(__assign({}, _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-toolbar--collapse': this.collapse || this.collapseOnScroll,
-        'v-app-bar': true,
-        'v-app-bar--clipped': this.clippedLeft || this.clippedRight,
-        'v-app-bar--fade-img-on-scroll': this.fadeImgOnScroll,
-        'v-app-bar--elevate-on-scroll': this.elevateOnScroll,
-        'v-app-bar--fixed': !this.absolute && (this.app || this.fixed),
-        'v-app-bar--hide-shadow': this.hideShadow,
-        'v-app-bar--is-scrolled': this.currentScroll > 0,
-        'v-app-bar--shrink-on-scroll': this.shrinkOnScroll
-      });
-    },
-    computedContentHeight: function computedContentHeight() {
-      if (!this.shrinkOnScroll) return _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.computedContentHeight.call(this);
-      var height = this.computedOriginalHeight;
-      var min = this.dense ? 48 : 56;
-      var max = height;
-      var difference = max - min;
-      var iteration = difference / this.computedScrollThreshold;
-      var offset = this.currentScroll * iteration;
-      return Math.max(min, max - offset);
-    },
-    computedFontSize: function computedFontSize() {
-      if (!this.isProminent) return undefined;
-      var max = this.dense ? 96 : 128;
-      var difference = max - this.computedContentHeight;
-      var increment = 0.00347; // 1.5rem to a minimum of 1.25rem
-
-      return Number((1.50 - difference * increment).toFixed(2));
-    },
-    computedLeft: function computedLeft() {
-      if (!this.app || this.clippedLeft) return 0;
-      return this.$vuetify.application.left;
-    },
-    computedMarginTop: function computedMarginTop() {
-      if (!this.app) return 0;
-      return this.$vuetify.application.bar;
-    },
-    computedOpacity: function computedOpacity() {
-      if (!this.fadeImgOnScroll) return undefined;
-      var opacity = Math.max((this.computedScrollThreshold - this.currentScroll) / this.computedScrollThreshold, 0);
-      return Number(parseFloat(opacity).toFixed(2));
-    },
-    computedOriginalHeight: function computedOriginalHeight() {
-      var height = _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.computedContentHeight.call(this);
-      if (this.isExtended) height += parseInt(this.extensionHeight);
-      return height;
-    },
-    computedRight: function computedRight() {
-      if (!this.app || this.clippedRight) return 0;
-      return this.$vuetify.application.right;
-    },
-    computedScrollThreshold: function computedScrollThreshold() {
-      if (this.scrollThreshold) return Number(this.scrollThreshold);
-      return this.computedOriginalHeight - (this.dense ? 48 : 56);
-    },
-    computedTransform: function computedTransform() {
-      if (!this.canScroll || this.elevateOnScroll && this.currentScroll === 0 && this.isActive) return 0;
-      if (this.isActive) return 0;
-      var scrollOffScreen = this.scrollOffScreen ? this.computedHeight : this.computedContentHeight;
-      return this.bottom ? scrollOffScreen : -scrollOffScreen;
-    },
-    hideShadow: function hideShadow() {
-      if (this.elevateOnScroll && this.isExtended) {
-        return this.currentScroll < this.computedScrollThreshold;
-      }
-
-      if (this.elevateOnScroll) {
-        return this.currentScroll === 0 || this.computedTransform < 0;
-      }
-
-      return (!this.isExtended || this.scrollOffScreen) && this.computedTransform !== 0;
-    },
-    isCollapsed: function isCollapsed() {
-      if (!this.collapseOnScroll) {
-        return _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.isCollapsed.call(this);
-      }
-
-      return this.currentScroll > 0;
-    },
-    isProminent: function isProminent() {
-      return _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.isProminent.call(this) || this.shrinkOnScroll;
-    },
-    styles: function styles() {
-      return __assign(__assign({}, _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.styles.call(this)), {
-        fontSize: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(this.computedFontSize, 'rem'),
-        marginTop: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(this.computedMarginTop),
-        transform: "translateY(" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(this.computedTransform) + ")",
-        left: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(this.computedLeft),
-        right: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(this.computedRight)
-      });
-    }
-  },
-  watch: {
-    canScroll: 'onScroll',
-    computedTransform: function computedTransform() {
-      // Normally we do not want the v-app-bar
-      // to update the application top value
-      // to avoid screen jump. However, in
-      // this situation, we must so that
-      // the clipped drawer can update
-      // its top value when scrolled
-      if (!this.canScroll || !this.clippedLeft && !this.clippedRight) return;
-      this.callUpdate();
-    },
-    invertedScroll: function invertedScroll(val) {
-      this.isActive = !val || this.currentScroll !== 0;
-    }
-  },
-  created: function created() {
-    if (this.invertedScroll) this.isActive = false;
-  },
-  methods: {
-    genBackground: function genBackground() {
-      var render = _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genBackground.call(this);
-      render.data = this._b(render.data || {}, render.tag, {
-        style: {
-          opacity: this.computedOpacity
-        }
-      });
-      return render;
-    },
-    updateApplication: function updateApplication() {
-      return this.invertedScroll ? 0 : this.computedHeight + this.computedTransform;
-    },
-    thresholdMet: function thresholdMet() {
-      if (this.invertedScroll) {
-        this.isActive = this.currentScroll > this.computedScrollThreshold;
-        return;
-      }
-
-      if (this.hideOnScroll) {
-        this.isActive = this.isScrollingUp || this.currentScroll < this.computedScrollThreshold;
-      }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAppBar_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAppBar.sass */ "./src/components/VAppBar/VAppBar.sass"
+              );
+            /* harmony import */ var _VAppBar_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VAppBar_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VToolbar/VToolbar */ "./src/components/VToolbar/VToolbar.ts"
+              );
+            /* harmony import */ var _directives_scroll__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../directives/scroll */ "./src/directives/scroll/index.ts"
+              );
+            /* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts"
+              );
+            /* harmony import */ var _mixins_scrollable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/scrollable */ "./src/mixins/scrollable/index.ts"
+              );
+            /* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Directives
+
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"]
+            )(
+              _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"],
+              _mixins_scrollable__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__["default"],
+              Object(
+                _mixins_applicationable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              )("top", [
+                "clippedLeft",
+                "clippedRight",
+                "computedHeight",
+                "invertedScroll",
+                "isExtended",
+                "isProminent",
+                "value",
+              ])
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-app-bar",
+                directives: {
+                  Scroll:
+                    _directives_scroll__WEBPACK_IMPORTED_MODULE_2__["default"],
+                },
+                props: {
+                  clippedLeft: Boolean,
+                  clippedRight: Boolean,
+                  collapseOnScroll: Boolean,
+                  elevateOnScroll: Boolean,
+                  fadeImgOnScroll: Boolean,
+                  hideOnScroll: Boolean,
+                  invertedScroll: Boolean,
+                  scrollOffScreen: Boolean,
+                  shrinkOnScroll: Boolean,
+                  value: {
+                    type: Boolean,
+                    default: true,
+                  },
+                },
+                data: function data() {
+                  return {
+                    isActive: this.value,
+                  };
+                },
+                computed: {
+                  applicationProperty: function applicationProperty() {
+                    return !this.bottom ? "top" : "bottom";
+                  },
+                  canScroll: function canScroll() {
+                    return (
+                      _mixins_scrollable__WEBPACK_IMPORTED_MODULE_4__[
+                        "default"
+                      ].options.computed.canScroll.call(this) &&
+                      (this.invertedScroll ||
+                        this.elevateOnScroll ||
+                        this.hideOnScroll ||
+                        this.collapseOnScroll ||
+                        this.isBooted || // If falsey, user has provided an
+                        // explicit value which should
+                        // overwrite anything we do
+                        !this.value)
+                    );
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-toolbar--collapse":
+                          this.collapse || this.collapseOnScroll,
+                        "v-app-bar": true,
+                        "v-app-bar--clipped":
+                          this.clippedLeft || this.clippedRight,
+                        "v-app-bar--fade-img-on-scroll": this.fadeImgOnScroll,
+                        "v-app-bar--elevate-on-scroll": this.elevateOnScroll,
+                        "v-app-bar--fixed":
+                          !this.absolute && (this.app || this.fixed),
+                        "v-app-bar--hide-shadow": this.hideShadow,
+                        "v-app-bar--is-scrolled": this.currentScroll > 0,
+                        "v-app-bar--shrink-on-scroll": this.shrinkOnScroll,
+                      }
+                    );
+                  },
+                  computedContentHeight: function computedContentHeight() {
+                    if (!this.shrinkOnScroll)
+                      return _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.computedContentHeight.call(this);
+                    var height = this.computedOriginalHeight;
+                    var min = this.dense ? 48 : 56;
+                    var max = height;
+                    var difference = max - min;
+                    var iteration = difference / this.computedScrollThreshold;
+                    var offset = this.currentScroll * iteration;
+                    return Math.max(min, max - offset);
+                  },
+                  computedFontSize: function computedFontSize() {
+                    if (!this.isProminent) return undefined;
+                    var max = this.dense ? 96 : 128;
+                    var difference = max - this.computedContentHeight;
+                    var increment = 0.00347; // 1.5rem to a minimum of 1.25rem
+
+                    return Number((1.5 - difference * increment).toFixed(2));
+                  },
+                  computedLeft: function computedLeft() {
+                    if (!this.app || this.clippedLeft) return 0;
+                    return this.$vuetify.application.left;
+                  },
+                  computedMarginTop: function computedMarginTop() {
+                    if (!this.app) return 0;
+                    return this.$vuetify.application.bar;
+                  },
+                  computedOpacity: function computedOpacity() {
+                    if (!this.fadeImgOnScroll) return undefined;
+                    var opacity = Math.max(
+                      (this.computedScrollThreshold - this.currentScroll) /
+                        this.computedScrollThreshold,
+                      0
+                    );
+                    return Number(parseFloat(opacity).toFixed(2));
+                  },
+                  computedOriginalHeight: function computedOriginalHeight() {
+                    var height =
+                      _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.computedContentHeight.call(this);
+                    if (this.isExtended)
+                      height += parseInt(this.extensionHeight);
+                    return height;
+                  },
+                  computedRight: function computedRight() {
+                    if (!this.app || this.clippedRight) return 0;
+                    return this.$vuetify.application.right;
+                  },
+                  computedScrollThreshold: function computedScrollThreshold() {
+                    if (this.scrollThreshold)
+                      return Number(this.scrollThreshold);
+                    return this.computedOriginalHeight - (this.dense ? 48 : 56);
+                  },
+                  computedTransform: function computedTransform() {
+                    if (
+                      !this.canScroll ||
+                      (this.elevateOnScroll &&
+                        this.currentScroll === 0 &&
+                        this.isActive)
+                    )
+                      return 0;
+                    if (this.isActive) return 0;
+                    var scrollOffScreen = this.scrollOffScreen
+                      ? this.computedHeight
+                      : this.computedContentHeight;
+                    return this.bottom ? scrollOffScreen : -scrollOffScreen;
+                  },
+                  hideShadow: function hideShadow() {
+                    if (this.elevateOnScroll && this.isExtended) {
+                      return this.currentScroll < this.computedScrollThreshold;
+                    }
+
+                    if (this.elevateOnScroll) {
+                      return (
+                        this.currentScroll === 0 || this.computedTransform < 0
+                      );
+                    }
+
+                    return (
+                      (!this.isExtended || this.scrollOffScreen) &&
+                      this.computedTransform !== 0
+                    );
+                  },
+                  isCollapsed: function isCollapsed() {
+                    if (!this.collapseOnScroll) {
+                      return _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.isCollapsed.call(this);
+                    }
+
+                    return this.currentScroll > 0;
+                  },
+                  isProminent: function isProminent() {
+                    return (
+                      _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.isProminent.call(this) ||
+                      this.shrinkOnScroll
+                    );
+                  },
+                  styles: function styles() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.styles.call(this)
+                      ),
+                      {
+                        fontSize: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedFontSize, "rem"),
+                        marginTop: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedMarginTop),
+                        transform:
+                          "translateY(" +
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                              "convertToUnit"
+                            ]
+                          )(this.computedTransform) +
+                          ")",
+                        left: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedLeft),
+                        right: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedRight),
+                      }
+                    );
+                  },
+                },
+                watch: {
+                  canScroll: "onScroll",
+                  computedTransform: function computedTransform() {
+                    // Normally we do not want the v-app-bar
+                    // to update the application top value
+                    // to avoid screen jump. However, in
+                    // this situation, we must so that
+                    // the clipped drawer can update
+                    // its top value when scrolled
+                    if (
+                      !this.canScroll ||
+                      (!this.clippedLeft && !this.clippedRight)
+                    )
+                      return;
+                    this.callUpdate();
+                  },
+                  invertedScroll: function invertedScroll(val) {
+                    this.isActive = !val || this.currentScroll !== 0;
+                  },
+                },
+                created: function created() {
+                  if (this.invertedScroll) this.isActive = false;
+                },
+                methods: {
+                  genBackground: function genBackground() {
+                    var render =
+                      _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genBackground.call(this);
+                    render.data = this._b(render.data || {}, render.tag, {
+                      style: {
+                        opacity: this.computedOpacity,
+                      },
+                    });
+                    return render;
+                  },
+                  updateApplication: function updateApplication() {
+                    return this.invertedScroll
+                      ? 0
+                      : this.computedHeight + this.computedTransform;
+                  },
+                  thresholdMet: function thresholdMet() {
+                    if (this.invertedScroll) {
+                      this.isActive =
+                        this.currentScroll > this.computedScrollThreshold;
+                      return;
+                    }
+
+                    if (this.hideOnScroll) {
+                      this.isActive =
+                        this.isScrollingUp ||
+                        this.currentScroll < this.computedScrollThreshold;
+                    }
+
+                    if (this.currentThreshold < this.computedScrollThreshold)
+                      return;
+                    this.savedScroll = this.currentScroll;
+                  },
+                },
+                render: function render(h) {
+                  var render = _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__[
+                    "default"
+                  ].options.render.call(this, h);
+                  render.data = render.data || {};
+
+                  if (this.canScroll) {
+                    render.data.directives = render.data.directives || [];
+                    render.data.directives.push({
+                      arg: this.scrollTarget,
+                      name: "scroll",
+                      value: this.onScroll,
+                    });
+                  }
 
-      if (this.currentThreshold < this.computedScrollThreshold) return;
-      this.savedScroll = this.currentScroll;
-    }
-  },
-  render: function render(h) {
-    var render = _VToolbar_VToolbar__WEBPACK_IMPORTED_MODULE_1__["default"].options.render.call(this, h);
-    render.data = render.data || {};
-
-    if (this.canScroll) {
-      render.data.directives = render.data.directives || [];
-      render.data.directives.push({
-        arg: this.scrollTarget,
-        name: 'scroll',
-        value: this.onScroll
-      });
-    }
-
-    return render;
-  }
-}));
+                  return render;
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAppBar/VAppBarNavIcon.ts":
-/*!**************************************************!*\
+        /***/ "./src/components/VAppBar/VAppBarNavIcon.ts":
+          /*!**************************************************!*\
   !*** ./src/components/VAppBar/VAppBarNavIcon.ts ***!
   \**************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VBtn_VBtn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VBtn/VBtn */ "./src/components/VBtn/VBtn.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_2__);
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Components
-
-
-
- // Types
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
-  name: 'v-app-bar-nav-icon',
-  functional: true,
-  render: function render(h, _a) {
-    var slots = _a.slots,
-        listeners = _a.listeners,
-        props = _a.props,
-        data = _a.data;
-    var d = Object.assign(data, {
-      staticClass: ("v-app-bar__nav-icon " + (data.staticClass || '')).trim(),
-      props: __assign(__assign({}, props), {
-        icon: true
-      }),
-      on: listeners
-    });
-    var defaultSlot = slots().default;
-    return h(_VBtn_VBtn__WEBPACK_IMPORTED_MODULE_1__["default"], d, defaultSlot || [h(_VIcon__WEBPACK_IMPORTED_MODULE_0__["default"], '$menu')]);
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VBtn_VBtn__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VBtn/VBtn */ "./src/components/VBtn/VBtn.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_2__
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Components
+
+            // Types
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
+                name: "v-app-bar-nav-icon",
+                functional: true,
+                render: function render(h, _a) {
+                  var slots = _a.slots,
+                    listeners = _a.listeners,
+                    props = _a.props,
+                    data = _a.data;
+                  var d = Object.assign(data, {
+                    staticClass: (
+                      "v-app-bar__nav-icon " + (data.staticClass || "")
+                    ).trim(),
+                    props: __assign(__assign({}, props), {
+                      icon: true,
+                    }),
+                    on: listeners,
+                  });
+                  var defaultSlot = slots().default;
+                  return h(
+                    _VBtn_VBtn__WEBPACK_IMPORTED_MODULE_1__["default"],
+                    d,
+                    defaultSlot || [
+                      h(
+                        _VIcon__WEBPACK_IMPORTED_MODULE_0__["default"],
+                        "$menu"
+                      ),
+                    ]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAppBar/index.ts":
-/*!*****************************************!*\
+        /***/ "./src/components/VAppBar/index.ts":
+          /*!*****************************************!*\
   !*** ./src/components/VAppBar/index.ts ***!
   \*****************************************/
-/*! exports provided: VAppBar, VAppBarNavIcon, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAppBar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAppBar */ "./src/components/VAppBar/VAppBar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAppBar", function() { return _VAppBar__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VAppBarNavIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VAppBarNavIcon */ "./src/components/VAppBar/VAppBarNavIcon.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAppBarNavIcon", function() { return _VAppBarNavIcon__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VAppBar: _VAppBar__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VAppBarNavIcon: _VAppBarNavIcon__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
+          /*! exports provided: VAppBar, VAppBarNavIcon, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAppBar__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAppBar */ "./src/components/VAppBar/VAppBar.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAppBar",
+              function () {
+                return _VAppBar__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VAppBarNavIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VAppBarNavIcon */ "./src/components/VAppBar/VAppBarNavIcon.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAppBarNavIcon",
+              function () {
+                return _VAppBarNavIcon__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VAppBar: _VAppBar__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VAppBarNavIcon:
+                  _VAppBarNavIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAutocomplete/VAutocomplete.sass":
-/*!*********************************************************!*\
+        /***/ "./src/components/VAutocomplete/VAutocomplete.sass":
+          /*!*********************************************************!*\
   !*** ./src/components/VAutocomplete/VAutocomplete.sass ***!
   \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VAutocomplete/VAutocomplete.ts":
-/*!*******************************************************!*\
+        /***/ "./src/components/VAutocomplete/VAutocomplete.ts":
+          /*!*******************************************************!*\
   !*** ./src/components/VAutocomplete/VAutocomplete.ts ***!
   \*******************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAutocomplete.sass */ "./src/components/VAutocomplete/VAutocomplete.sass");
-/* harmony import */ var _VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts");
-/* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
-
- // Utilities
-
-
-
-
-var defaultMenuProps = __assign(__assign({}, _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["defaultMenuProps"]), {
-  offsetY: true,
-  offsetOverflow: true,
-  transition: false
-});
-/* @vue/component */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-autocomplete',
-  props: {
-    allowOverflow: {
-      type: Boolean,
-      default: true
-    },
-    autoSelectFirst: {
-      type: Boolean,
-      default: false
-    },
-    filter: {
-      type: Function,
-      default: function _default(item, queryText, itemText) {
-        return itemText.toLocaleLowerCase().indexOf(queryText.toLocaleLowerCase()) > -1;
-      }
-    },
-    hideNoData: Boolean,
-    menuProps: {
-      type: _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.props.menuProps.type,
-      default: function _default() {
-        return defaultMenuProps;
-      }
-    },
-    noFilter: Boolean,
-    searchInput: {
-      type: String,
-      default: undefined
-    }
-  },
-  data: function data() {
-    return {
-      lazySearch: this.searchInput
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-autocomplete': true,
-        'v-autocomplete--is-selecting-index': this.selectedIndex > -1
-      });
-    },
-    computedItems: function computedItems() {
-      return this.filteredItems;
-    },
-    selectedValues: function selectedValues() {
-      var _this = this;
-
-      return this.selectedItems.map(function (item) {
-        return _this.getValue(item);
-      });
-    },
-    hasDisplayedItems: function hasDisplayedItems() {
-      var _this = this;
-
-      return this.hideSelected ? this.filteredItems.some(function (item) {
-        return !_this.hasItem(item);
-      }) : this.filteredItems.length > 0;
-    },
-    currentRange: function currentRange() {
-      if (this.selectedItem == null) return 0;
-      return String(this.getText(this.selectedItem)).length;
-    },
-    filteredItems: function filteredItems() {
-      var _this = this;
-
-      if (!this.isSearching || this.noFilter || this.internalSearch == null) return this.allItems;
-      return this.allItems.filter(function (item) {
-        var value = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getPropertyFromItem"])(item, _this.itemText);
-        var text = value != null ? String(value) : '';
-        return _this.filter(item, String(_this.internalSearch), text);
-      });
-    },
-    internalSearch: {
-      get: function get() {
-        return this.lazySearch;
-      },
-      set: function set(val) {
-        this.lazySearch = val;
-        this.$emit('update:search-input', val);
-      }
-    },
-    isAnyValueAllowed: function isAnyValueAllowed() {
-      return false;
-    },
-    isDirty: function isDirty() {
-      return this.searchIsDirty || this.selectedItems.length > 0;
-    },
-    isSearching: function isSearching() {
-      return this.multiple && this.searchIsDirty || this.searchIsDirty && this.internalSearch !== this.getText(this.selectedItem);
-    },
-    menuCanShow: function menuCanShow() {
-      if (!this.isFocused) return false;
-      return this.hasDisplayedItems || !this.hideNoData;
-    },
-    $_menuProps: function $_menuProps() {
-      var props = _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.$_menuProps.call(this);
-      props.contentClass = ("v-autocomplete__content " + (props.contentClass || '')).trim();
-      return __assign(__assign({}, defaultMenuProps), props);
-    },
-    searchIsDirty: function searchIsDirty() {
-      return this.internalSearch != null;
-    },
-    selectedItem: function selectedItem() {
-      var _this = this;
-
-      if (this.multiple) return null;
-      return this.selectedItems.find(function (i) {
-        return _this.valueComparator(_this.getValue(i), _this.getValue(_this.internalValue));
-      });
-    },
-    listData: function listData() {
-      var data = _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.listData.call(this);
-      data.props = __assign(__assign({}, data.props), {
-        items: this.virtualizedItems,
-        noFilter: this.noFilter || !this.isSearching || !this.filteredItems.length,
-        searchInput: this.internalSearch
-      });
-      return data;
-    }
-  },
-  watch: {
-    filteredItems: 'onFilteredItemsChanged',
-    internalValue: 'setSearch',
-    isFocused: function isFocused(val) {
-      if (val) {
-        document.addEventListener('copy', this.onCopy);
-        this.$refs.input && this.$refs.input.select();
-      } else {
-        document.removeEventListener('copy', this.onCopy);
-        this.updateSelf();
-      }
-    },
-    isMenuActive: function isMenuActive(val) {
-      if (val || !this.hasSlot) return;
-      this.lazySearch = undefined;
-    },
-    items: function items(val, oldVal) {
-      // If we are focused, the menu
-      // is not active, hide no data is enabled,
-      // and items change
-      // User is probably async loading
-      // items, try to activate the menu
-      if (!(oldVal && oldVal.length) && this.hideNoData && this.isFocused && !this.isMenuActive && val.length) this.activateMenu();
-    },
-    searchInput: function searchInput(val) {
-      this.lazySearch = val;
-    },
-    internalSearch: 'onInternalSearchChanged',
-    itemText: 'updateSelf'
-  },
-  created: function created() {
-    this.setSearch();
-  },
-  destroyed: function destroyed() {
-    document.removeEventListener('copy', this.onCopy);
-  },
-  methods: {
-    onFilteredItemsChanged: function onFilteredItemsChanged(val, oldVal) {
-      var _this = this; // TODO: How is the watcher triggered
-      // for duplicate items? no idea
-
-
-      if (val === oldVal) return;
-      this.setMenuIndex(-1);
-      this.$nextTick(function () {
-        if (!_this.internalSearch || val.length !== 1 && !_this.autoSelectFirst) return;
-
-        _this.$refs.menu.getTiles();
-
-        _this.setMenuIndex(0);
-      });
-    },
-    onInternalSearchChanged: function onInternalSearchChanged() {
-      this.updateMenuDimensions();
-    },
-    updateMenuDimensions: function updateMenuDimensions() {
-      // Type from menuable is not making it through
-      this.isMenuActive && this.$refs.menu && this.$refs.menu.updateDimensions();
-    },
-    changeSelectedIndex: function changeSelectedIndex(keyCode) {
-      // Do not allow changing of selectedIndex
-      // when search is dirty
-      if (this.searchIsDirty) return;
-
-      if (this.multiple && keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"].left) {
-        if (this.selectedIndex === -1) {
-          this.selectedIndex = this.selectedItems.length - 1;
-        } else {
-          this.selectedIndex--;
-        }
-      } else if (this.multiple && keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"].right) {
-        if (this.selectedIndex >= this.selectedItems.length - 1) {
-          this.selectedIndex = -1;
-        } else {
-          this.selectedIndex++;
-        }
-      } else if (keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"].backspace || keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"].delete) {
-        this.deleteCurrentItem();
-      }
-    },
-    deleteCurrentItem: function deleteCurrentItem() {
-      var curIndex = this.selectedIndex;
-      var curItem = this.selectedItems[curIndex]; // Do nothing if input or item is disabled
-
-      if (!this.isInteractive || this.getDisabled(curItem)) return;
-      var lastIndex = this.selectedItems.length - 1; // Select the last item if
-      // there is no selection
-
-      if (this.selectedIndex === -1 && lastIndex !== 0) {
-        this.selectedIndex = lastIndex;
-        return;
-      }
-
-      var length = this.selectedItems.length;
-      var nextIndex = curIndex !== length - 1 ? curIndex : curIndex - 1;
-      var nextItem = this.selectedItems[nextIndex];
-
-      if (!nextItem) {
-        this.setValue(this.multiple ? [] : undefined);
-      } else {
-        this.selectItem(curItem);
-      }
-
-      this.selectedIndex = nextIndex;
-    },
-    clearableCallback: function clearableCallback() {
-      this.internalSearch = undefined;
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.clearableCallback.call(this);
-    },
-    genInput: function genInput() {
-      var input = _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genInput.call(this);
-      input.data = Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_3__["default"])(input.data, {
-        attrs: {
-          'aria-activedescendant': Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(this.$refs.menu, 'activeTile.id'),
-          autocomplete: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(input.data, 'attrs.autocomplete', 'off')
-        },
-        domProps: {
-          value: this.internalSearch
-        }
-      });
-      return input;
-    },
-    genInputSlot: function genInputSlot() {
-      var slot = _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genInputSlot.call(this);
-      slot.data.attrs.role = 'combobox';
-      return slot;
-    },
-    genSelections: function genSelections() {
-      return this.hasSlot || this.multiple ? _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genSelections.call(this) : [];
-    },
-    onClick: function onClick(e) {
-      if (!this.isInteractive) return;
-      this.selectedIndex > -1 ? this.selectedIndex = -1 : this.onFocus();
-      if (!this.isAppendInner(e.target)) this.activateMenu();
-    },
-    onInput: function onInput(e) {
-      if (this.selectedIndex > -1 || !e.target) return;
-      var target = e.target;
-      var value = target.value; // If typing and menu is not currently active
-
-      if (target.value) this.activateMenu();
-      this.internalSearch = value;
-      this.badInput = target.validity && target.validity.badInput;
-    },
-    onKeyDown: function onKeyDown(e) {
-      var keyCode = e.keyCode;
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.onKeyDown.call(this, e); // The ordering is important here
-      // allows new value to be updated
-      // and then moves the index to the
-      // proper location
-
-      this.changeSelectedIndex(keyCode);
-    },
-    onSpaceDown: function onSpaceDown(e) {},
-    onTabDown: function onTabDown(e) {
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.onTabDown.call(this, e);
-      this.updateSelf();
-    },
-    onUpDown: function onUpDown(e) {
-      // Prevent screen from scrolling
-      e.preventDefault(); // For autocomplete / combobox, cycling
-      // interfers with native up/down behavior
-      // instead activate the menu
-
-      this.activateMenu();
-    },
-    selectItem: function selectItem(item) {
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.selectItem.call(this, item);
-      this.setSearch();
-    },
-    setSelectedItems: function setSelectedItems() {
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.setSelectedItems.call(this); // #4273 Don't replace if searching
-      // #4403 Don't replace if focused
-
-      if (!this.isFocused) this.setSearch();
-    },
-    setSearch: function setSearch() {
-      var _this = this; // Wait for nextTick so selectedItem
-      // has had time to update
-
-
-      this.$nextTick(function () {
-        if (!_this.multiple || !_this.internalSearch || !_this.isMenuActive) {
-          _this.internalSearch = !_this.selectedItems.length || _this.multiple || _this.hasSlot ? null : _this.getText(_this.selectedItem);
-        }
-      });
-    },
-    updateSelf: function updateSelf() {
-      if (!this.searchIsDirty && !this.internalValue) return;
-
-      if (!this.valueComparator(this.internalSearch, this.getValue(this.internalValue))) {
-        this.setSearch();
-      }
-    },
-    hasItem: function hasItem(item) {
-      return this.selectedValues.indexOf(this.getValue(item)) > -1;
-    },
-    onCopy: function onCopy(event) {
-      var _a, _b;
-
-      if (this.selectedIndex === -1) return;
-      var currentItem = this.selectedItems[this.selectedIndex];
-      var currentItemText = this.getText(currentItem);
-      (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.setData('text/plain', currentItemText);
-      (_b = event.clipboardData) === null || _b === void 0 ? void 0 : _b.setData('text/vnd.vuetify.autocomplete.item+plain', currentItemText);
-      event.preventDefault();
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAutocomplete.sass */ "./src/components/VAutocomplete/VAutocomplete.sass"
+              );
+            /* harmony import */ var _VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts"
+              );
+            /* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Utilities
+
+            var defaultMenuProps = __assign(
+              __assign(
+                {},
+                _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                  "defaultMenuProps"
+                ]
+              ),
+              {
+                offsetY: true,
+                offsetOverflow: true,
+                transition: false,
+              }
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-autocomplete",
+                props: {
+                  allowOverflow: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  autoSelectFirst: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  filter: {
+                    type: Function,
+                    default: function _default(item, queryText, itemText) {
+                      return (
+                        itemText
+                          .toLocaleLowerCase()
+                          .indexOf(queryText.toLocaleLowerCase()) > -1
+                      );
+                    },
+                  },
+                  hideNoData: Boolean,
+                  menuProps: {
+                    type: _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.props.menuProps.type,
+                    default: function _default() {
+                      return defaultMenuProps;
+                    },
+                  },
+                  noFilter: Boolean,
+                  searchInput: {
+                    type: String,
+                    default: undefined,
+                  },
+                },
+                data: function data() {
+                  return {
+                    lazySearch: this.searchInput,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-autocomplete": true,
+                        "v-autocomplete--is-selecting-index":
+                          this.selectedIndex > -1,
+                      }
+                    );
+                  },
+                  computedItems: function computedItems() {
+                    return this.filteredItems;
+                  },
+                  selectedValues: function selectedValues() {
+                    var _this = this;
+
+                    return this.selectedItems.map(function (item) {
+                      return _this.getValue(item);
+                    });
+                  },
+                  hasDisplayedItems: function hasDisplayedItems() {
+                    var _this = this;
+
+                    return this.hideSelected
+                      ? this.filteredItems.some(function (item) {
+                          return !_this.hasItem(item);
+                        })
+                      : this.filteredItems.length > 0;
+                  },
+                  currentRange: function currentRange() {
+                    if (this.selectedItem == null) return 0;
+                    return String(this.getText(this.selectedItem)).length;
+                  },
+                  filteredItems: function filteredItems() {
+                    var _this = this;
+
+                    if (
+                      !this.isSearching ||
+                      this.noFilter ||
+                      this.internalSearch == null
+                    )
+                      return this.allItems;
+                    return this.allItems.filter(function (item) {
+                      var value = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                          "getPropertyFromItem"
+                        ]
+                      )(item, _this.itemText);
+                      var text = value != null ? String(value) : "";
+                      return _this.filter(
+                        item,
+                        String(_this.internalSearch),
+                        text
+                      );
+                    });
+                  },
+                  internalSearch: {
+                    get: function get() {
+                      return this.lazySearch;
+                    },
+                    set: function set(val) {
+                      this.lazySearch = val;
+                      this.$emit("update:search-input", val);
+                    },
+                  },
+                  isAnyValueAllowed: function isAnyValueAllowed() {
+                    return false;
+                  },
+                  isDirty: function isDirty() {
+                    return this.searchIsDirty || this.selectedItems.length > 0;
+                  },
+                  isSearching: function isSearching() {
+                    return (
+                      (this.multiple && this.searchIsDirty) ||
+                      (this.searchIsDirty &&
+                        this.internalSearch !== this.getText(this.selectedItem))
+                    );
+                  },
+                  menuCanShow: function menuCanShow() {
+                    if (!this.isFocused) return false;
+                    return this.hasDisplayedItems || !this.hideNoData;
+                  },
+                  $_menuProps: function $_menuProps() {
+                    var props =
+                      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.$_menuProps.call(this);
+                    props.contentClass = (
+                      "v-autocomplete__content " + (props.contentClass || "")
+                    ).trim();
+                    return __assign(__assign({}, defaultMenuProps), props);
+                  },
+                  searchIsDirty: function searchIsDirty() {
+                    return this.internalSearch != null;
+                  },
+                  selectedItem: function selectedItem() {
+                    var _this = this;
+
+                    if (this.multiple) return null;
+                    return this.selectedItems.find(function (i) {
+                      return _this.valueComparator(
+                        _this.getValue(i),
+                        _this.getValue(_this.internalValue)
+                      );
+                    });
+                  },
+                  listData: function listData() {
+                    var data =
+                      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.listData.call(this);
+                    data.props = __assign(__assign({}, data.props), {
+                      items: this.virtualizedItems,
+                      noFilter:
+                        this.noFilter ||
+                        !this.isSearching ||
+                        !this.filteredItems.length,
+                      searchInput: this.internalSearch,
+                    });
+                    return data;
+                  },
+                },
+                watch: {
+                  filteredItems: "onFilteredItemsChanged",
+                  internalValue: "setSearch",
+                  isFocused: function isFocused(val) {
+                    if (val) {
+                      document.addEventListener("copy", this.onCopy);
+                      this.$refs.input && this.$refs.input.select();
+                    } else {
+                      document.removeEventListener("copy", this.onCopy);
+                      this.updateSelf();
+                    }
+                  },
+                  isMenuActive: function isMenuActive(val) {
+                    if (val || !this.hasSlot) return;
+                    this.lazySearch = undefined;
+                  },
+                  items: function items(val, oldVal) {
+                    // If we are focused, the menu
+                    // is not active, hide no data is enabled,
+                    // and items change
+                    // User is probably async loading
+                    // items, try to activate the menu
+                    if (
+                      !(oldVal && oldVal.length) &&
+                      this.hideNoData &&
+                      this.isFocused &&
+                      !this.isMenuActive &&
+                      val.length
+                    )
+                      this.activateMenu();
+                  },
+                  searchInput: function searchInput(val) {
+                    this.lazySearch = val;
+                  },
+                  internalSearch: "onInternalSearchChanged",
+                  itemText: "updateSelf",
+                },
+                created: function created() {
+                  this.setSearch();
+                },
+                destroyed: function destroyed() {
+                  document.removeEventListener("copy", this.onCopy);
+                },
+                methods: {
+                  onFilteredItemsChanged: function onFilteredItemsChanged(
+                    val,
+                    oldVal
+                  ) {
+                    var _this = this; // TODO: How is the watcher triggered
+                    // for duplicate items? no idea
+
+                    if (val === oldVal) return;
+                    this.setMenuIndex(-1);
+                    this.$nextTick(function () {
+                      if (
+                        !_this.internalSearch ||
+                        (val.length !== 1 && !_this.autoSelectFirst)
+                      )
+                        return;
+
+                      _this.$refs.menu.getTiles();
+
+                      _this.setMenuIndex(0);
+                    });
+                  },
+                  onInternalSearchChanged: function onInternalSearchChanged() {
+                    this.updateMenuDimensions();
+                  },
+                  updateMenuDimensions: function updateMenuDimensions() {
+                    // Type from menuable is not making it through
+                    this.isMenuActive &&
+                      this.$refs.menu &&
+                      this.$refs.menu.updateDimensions();
+                  },
+                  changeSelectedIndex: function changeSelectedIndex(keyCode) {
+                    // Do not allow changing of selectedIndex
+                    // when search is dirty
+                    if (this.searchIsDirty) return;
+
+                    if (
+                      this.multiple &&
+                      keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"]
+                          .left
+                    ) {
+                      if (this.selectedIndex === -1) {
+                        this.selectedIndex = this.selectedItems.length - 1;
+                      } else {
+                        this.selectedIndex--;
+                      }
+                    } else if (
+                      this.multiple &&
+                      keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"]
+                          .right
+                    ) {
+                      if (this.selectedIndex >= this.selectedItems.length - 1) {
+                        this.selectedIndex = -1;
+                      } else {
+                        this.selectedIndex++;
+                      }
+                    } else if (
+                      keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"]
+                          .backspace ||
+                      keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["keyCodes"]
+                          .delete
+                    ) {
+                      this.deleteCurrentItem();
+                    }
+                  },
+                  deleteCurrentItem: function deleteCurrentItem() {
+                    var curIndex = this.selectedIndex;
+                    var curItem = this.selectedItems[curIndex]; // Do nothing if input or item is disabled
+
+                    if (!this.isInteractive || this.getDisabled(curItem))
+                      return;
+                    var lastIndex = this.selectedItems.length - 1; // Select the last item if
+                    // there is no selection
+
+                    if (this.selectedIndex === -1 && lastIndex !== 0) {
+                      this.selectedIndex = lastIndex;
+                      return;
+                    }
+
+                    var length = this.selectedItems.length;
+                    var nextIndex =
+                      curIndex !== length - 1 ? curIndex : curIndex - 1;
+                    var nextItem = this.selectedItems[nextIndex];
+
+                    if (!nextItem) {
+                      this.setValue(this.multiple ? [] : undefined);
+                    } else {
+                      this.selectItem(curItem);
+                    }
+
+                    this.selectedIndex = nextIndex;
+                  },
+                  clearableCallback: function clearableCallback() {
+                    this.internalSearch = undefined;
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.clearableCallback.call(this);
+                  },
+                  genInput: function genInput() {
+                    var input =
+                      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genInput.call(this);
+                    input.data = Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_3__["default"]
+                    )(input.data, {
+                      attrs: {
+                        "aria-activedescendant": Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "getObjectValueByPath"
+                          ]
+                        )(this.$refs.menu, "activeTile.id"),
+                        autocomplete: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "getObjectValueByPath"
+                          ]
+                        )(input.data, "attrs.autocomplete", "off"),
+                      },
+                      domProps: {
+                        value: this.internalSearch,
+                      },
+                    });
+                    return input;
+                  },
+                  genInputSlot: function genInputSlot() {
+                    var slot =
+                      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genInputSlot.call(this);
+                    slot.data.attrs.role = "combobox";
+                    return slot;
+                  },
+                  genSelections: function genSelections() {
+                    return this.hasSlot || this.multiple
+                      ? _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.methods.genSelections.call(this)
+                      : [];
+                  },
+                  onClick: function onClick(e) {
+                    if (!this.isInteractive) return;
+                    this.selectedIndex > -1
+                      ? (this.selectedIndex = -1)
+                      : this.onFocus();
+                    if (!this.isAppendInner(e.target)) this.activateMenu();
+                  },
+                  onInput: function onInput(e) {
+                    if (this.selectedIndex > -1 || !e.target) return;
+                    var target = e.target;
+                    var value = target.value; // If typing and menu is not currently active
+
+                    if (target.value) this.activateMenu();
+                    this.internalSearch = value;
+                    this.badInput = target.validity && target.validity.badInput;
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    var keyCode = e.keyCode;
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.onKeyDown.call(this, e); // The ordering is important here
+                    // allows new value to be updated
+                    // and then moves the index to the
+                    // proper location
+
+                    this.changeSelectedIndex(keyCode);
+                  },
+                  onSpaceDown: function onSpaceDown(e) {},
+                  onTabDown: function onTabDown(e) {
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.onTabDown.call(this, e);
+                    this.updateSelf();
+                  },
+                  onUpDown: function onUpDown(e) {
+                    // Prevent screen from scrolling
+                    e.preventDefault(); // For autocomplete / combobox, cycling
+                    // interfers with native up/down behavior
+                    // instead activate the menu
+
+                    this.activateMenu();
+                  },
+                  selectItem: function selectItem(item) {
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.selectItem.call(this, item);
+                    this.setSearch();
+                  },
+                  setSelectedItems: function setSelectedItems() {
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.setSelectedItems.call(this); // #4273 Don't replace if searching
+                    // #4403 Don't replace if focused
+
+                    if (!this.isFocused) this.setSearch();
+                  },
+                  setSearch: function setSearch() {
+                    var _this = this; // Wait for nextTick so selectedItem
+                    // has had time to update
+
+                    this.$nextTick(function () {
+                      if (
+                        !_this.multiple ||
+                        !_this.internalSearch ||
+                        !_this.isMenuActive
+                      ) {
+                        _this.internalSearch =
+                          !_this.selectedItems.length ||
+                          _this.multiple ||
+                          _this.hasSlot
+                            ? null
+                            : _this.getText(_this.selectedItem);
+                      }
+                    });
+                  },
+                  updateSelf: function updateSelf() {
+                    if (!this.searchIsDirty && !this.internalValue) return;
+
+                    if (
+                      !this.valueComparator(
+                        this.internalSearch,
+                        this.getValue(this.internalValue)
+                      )
+                    ) {
+                      this.setSearch();
+                    }
+                  },
+                  hasItem: function hasItem(item) {
+                    return (
+                      this.selectedValues.indexOf(this.getValue(item)) > -1
+                    );
+                  },
+                  onCopy: function onCopy(event) {
+                    var _a, _b;
+
+                    if (this.selectedIndex === -1) return;
+                    var currentItem = this.selectedItems[this.selectedIndex];
+                    var currentItemText = this.getText(currentItem);
+                    (_a = event.clipboardData) === null || _a === void 0
+                      ? void 0
+                      : _a.setData("text/plain", currentItemText);
+                    (_b = event.clipboardData) === null || _b === void 0
+                      ? void 0
+                      : _b.setData(
+                          "text/vnd.vuetify.autocomplete.item+plain",
+                          currentItemText
+                        );
+                    event.preventDefault();
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAutocomplete/index.ts":
-/*!***********************************************!*\
+        /***/ "./src/components/VAutocomplete/index.ts":
+          /*!***********************************************!*\
   !*** ./src/components/VAutocomplete/index.ts ***!
   \***********************************************/
-/*! exports provided: VAutocomplete, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAutocomplete__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAutocomplete */ "./src/components/VAutocomplete/VAutocomplete.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAutocomplete", function() { return _VAutocomplete__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
+          /*! exports provided: VAutocomplete, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAutocomplete__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAutocomplete */ "./src/components/VAutocomplete/VAutocomplete.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAutocomplete",
+              function () {
+                return _VAutocomplete__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VAutocomplete__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VAutocomplete__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAvatar/VAvatar.sass":
-/*!*********************************************!*\
+        /***/ "./src/components/VAvatar/VAvatar.sass":
+          /*!*********************************************!*\
   !*** ./src/components/VAvatar/VAvatar.sass ***!
   \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VAvatar/VAvatar.ts":
-/*!*******************************************!*\
+        /***/ "./src/components/VAvatar/VAvatar.ts":
+          /*!*******************************************!*\
   !*** ./src/components/VAvatar/VAvatar.ts ***!
   \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAvatar_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAvatar.sass */ "./src/components/VAvatar/VAvatar.sass");
-/* harmony import */ var _VAvatar_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VAvatar_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts");
-/* harmony import */ var _mixins_roundable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/roundable */ "./src/mixins/roundable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
- // Mixins
-
-
-
- // Utilities
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_roundable__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'v-avatar',
-  props: {
-    left: Boolean,
-    right: Boolean,
-    size: {
-      type: [Number, String],
-      default: 48
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-avatar--left': this.left,
-        'v-avatar--right': this.right
-      }, this.roundedClasses);
-    },
-    styles: function styles() {
-      return __assign({
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.size),
-        minWidth: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.size),
-        width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.size)
-      }, this.measurableStyles);
-    }
-  },
-  render: function render(h) {
-    var data = {
-      staticClass: 'v-avatar',
-      class: this.classes,
-      style: this.styles,
-      on: this.$listeners
-    };
-    return h('div', this.setBackgroundColor(this.color, data), this.$slots.default);
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAvatar_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAvatar.sass */ "./src/components/VAvatar/VAvatar.sass"
+              );
+            /* harmony import */ var _VAvatar_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VAvatar_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts"
+              );
+            /* harmony import */ var _mixins_roundable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/roundable */ "./src/mixins/roundable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
+
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_roundable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "v-avatar",
+                props: {
+                  left: Boolean,
+                  right: Boolean,
+                  size: {
+                    type: [Number, String],
+                    default: 48,
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-avatar--left": this.left,
+                        "v-avatar--right": this.right,
+                      },
+                      this.roundedClasses
+                    );
+                  },
+                  styles: function styles() {
+                    return __assign(
+                      {
+                        height: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "convertToUnit"
+                          ]
+                        )(this.size),
+                        minWidth: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "convertToUnit"
+                          ]
+                        )(this.size),
+                        width: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "convertToUnit"
+                          ]
+                        )(this.size),
+                      },
+                      this.measurableStyles
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var data = {
+                    staticClass: "v-avatar",
+                    class: this.classes,
+                    style: this.styles,
+                    on: this.$listeners,
+                  };
+                  return h(
+                    "div",
+                    this.setBackgroundColor(this.color, data),
+                    this.$slots.default
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VAvatar/index.ts":
-/*!*****************************************!*\
+        /***/ "./src/components/VAvatar/index.ts":
+          /*!*****************************************!*\
   !*** ./src/components/VAvatar/index.ts ***!
   \*****************************************/
-/*! exports provided: VAvatar, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VAvatar */ "./src/components/VAvatar/VAvatar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAvatar", function() { return _VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
+          /*! exports provided: VAvatar, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VAvatar */ "./src/components/VAvatar/VAvatar.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAvatar",
+              function () {
+                return _VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBadge/VBadge.sass":
-/*!*******************************************!*\
+        /***/ "./src/components/VBadge/VBadge.sass":
+          /*!*******************************************!*\
   !*** ./src/components/VBadge/VBadge.sass ***!
   \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VBadge/VBadge.ts":
-/*!*****************************************!*\
+        /***/ "./src/components/VBadge/VBadge.ts":
+          /*!*****************************************!*\
   !*** ./src/components/VBadge/VBadge.ts ***!
   \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBadge_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBadge.sass */ "./src/components/VBadge/VBadge.sass");
-/* harmony import */ var _VBadge_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VBadge_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon_VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon/VIcon */ "./src/components/VIcon/VIcon.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_transitionable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/transitionable */ "./src/mixins/transitionable/index.ts");
-/* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __rest = undefined && undefined.__rest || function (s, e) {
-  var t = {};
-
-  for (var p in s) {
-    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
-  }
-
-  if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
-    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
-  }
-  return t;
-}; // Styles
-
-
- // Components
-
- // Mixins
-
-
-
-
-
- // Utilities
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], Object(_mixins_positionable__WEBPACK_IMPORTED_MODULE_6__["factory"])(['left', 'bottom']), _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_transitionable__WEBPACK_IMPORTED_MODULE_5__["default"]).extend({
-  name: 'v-badge',
-  props: {
-    avatar: Boolean,
-    bordered: Boolean,
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    content: {
-      required: false
-    },
-    dot: Boolean,
-    label: {
-      type: String,
-      default: '$vuetify.badge'
-    },
-    icon: String,
-    inline: Boolean,
-    offsetX: [Number, String],
-    offsetY: [Number, String],
-    overlap: Boolean,
-    tile: Boolean,
-    transition: {
-      type: String,
-      default: 'scale-rotate-transition'
-    },
-    value: {
-      default: true
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-badge--avatar': this.avatar,
-        'v-badge--bordered': this.bordered,
-        'v-badge--bottom': this.bottom,
-        'v-badge--dot': this.dot,
-        'v-badge--icon': this.icon != null,
-        'v-badge--inline': this.inline,
-        'v-badge--left': this.left,
-        'v-badge--overlap': this.overlap,
-        'v-badge--tile': this.tile
-      }, this.themeClasses);
-    },
-    computedBottom: function computedBottom() {
-      return this.bottom ? 'auto' : this.computedYOffset;
-    },
-    computedLeft: function computedLeft() {
-      if (this.isRtl) {
-        return this.left ? this.computedXOffset : 'auto';
-      }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBadge_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBadge.sass */ "./src/components/VBadge/VBadge.sass"
+              );
+            /* harmony import */ var _VBadge_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VBadge_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon_VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon/VIcon */ "./src/components/VIcon/VIcon.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_transitionable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/transitionable */ "./src/mixins/transitionable/index.ts"
+              );
+            /* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      return this.left ? 'auto' : this.computedXOffset;
-    },
-    computedRight: function computedRight() {
-      if (this.isRtl) {
-        return this.left ? 'auto' : this.computedXOffset;
-      }
+            var __rest =
+              (undefined && undefined.__rest) ||
+              function (s, e) {
+                var t = {};
+
+                for (var p in s) {
+                  if (
+                    Object.prototype.hasOwnProperty.call(s, p) &&
+                    e.indexOf(p) < 0
+                  )
+                    t[p] = s[p];
+                }
 
-      return !this.left ? 'auto' : this.computedXOffset;
-    },
-    computedTop: function computedTop() {
-      return this.bottom ? this.computedYOffset : 'auto';
-    },
-    computedXOffset: function computedXOffset() {
-      return this.calcPosition(this.offsetX);
-    },
-    computedYOffset: function computedYOffset() {
-      return this.calcPosition(this.offsetY);
-    },
-    isRtl: function isRtl() {
-      return this.$vuetify.rtl;
-    },
-    // Default fallback if offsetX
-    // or offsetY are undefined.
-    offset: function offset() {
-      if (this.overlap) return this.dot ? 8 : 12;
-      return this.dot ? 2 : 4;
-    },
-    styles: function styles() {
-      if (this.inline) return {};
-      return {
-        bottom: this.computedBottom,
-        left: this.computedLeft,
-        right: this.computedRight,
-        top: this.computedTop
-      };
-    }
-  },
-  methods: {
-    calcPosition: function calcPosition(offset) {
-      return "calc(100% - " + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(offset || this.offset) + ")";
-    },
-    genBadge: function genBadge() {
-      var lang = this.$vuetify.lang;
-      var label = this.$attrs['aria-label'] || lang.t(this.label);
-      var data = this.setBackgroundColor(this.color, {
-        staticClass: 'v-badge__badge',
-        style: this.styles,
-        attrs: {
-          'aria-atomic': this.$attrs['aria-atomic'] || 'true',
-          'aria-label': label,
-          'aria-live': this.$attrs['aria-live'] || 'polite',
-          title: this.$attrs.title,
-          role: this.$attrs.role || 'status'
-        },
-        directives: [{
-          name: 'show',
-          value: this.isActive
-        }]
-      });
-      var badge = this.$createElement('span', data, [this.genBadgeContent()]);
-      if (!this.transition) return badge;
-      return this.$createElement('transition', {
-        props: {
-          name: this.transition,
-          origin: this.origin,
-          mode: this.mode
-        }
-      }, [badge]);
-    },
-    genBadgeContent: function genBadgeContent() {
-      // Dot prop shows no content
-      if (this.dot) return undefined;
-      var slot = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlot"])(this, 'badge');
-      if (slot) return slot;
-      if (this.content) return String(this.content);
-      if (this.icon) return this.$createElement(_VIcon_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], this.icon);
-      return undefined;
-    },
-    genBadgeWrapper: function genBadgeWrapper() {
-      return this.$createElement('span', {
-        staticClass: 'v-badge__wrapper'
-      }, [this.genBadge()]);
-    }
-  },
-  render: function render(h) {
-    var badge = [this.genBadgeWrapper()];
-    var children = [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlot"])(this)];
-
-    var _a = this.$attrs,
-        _x = _a["aria-atomic"],
-        _y = _a["aria-label"],
-        _z = _a["aria-live"],
-        role = _a.role,
-        title = _a.title,
-        attrs = __rest(_a, ['aria-atomic', 'aria-label', 'aria-live', "role", "title"]);
-
-    if (this.inline && this.left) children.unshift(badge);else children.push(badge);
-    return h('span', {
-      staticClass: 'v-badge',
-      attrs: attrs,
-      class: this.classes
-    }, children);
-  }
-}));
+                if (
+                  s != null &&
+                  typeof Object.getOwnPropertySymbols === "function"
+                )
+                  for (
+                    var i = 0, p = Object.getOwnPropertySymbols(s);
+                    i < p.length;
+                    i++
+                  ) {
+                    if (
+                      e.indexOf(p[i]) < 0 &&
+                      Object.prototype.propertyIsEnumerable.call(s, p[i])
+                    )
+                      t[p[i]] = s[p[i]];
+                  }
+                return t;
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                Object(
+                  _mixins_positionable__WEBPACK_IMPORTED_MODULE_6__["factory"]
+                )(["left", "bottom"]),
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _mixins_transitionable__WEBPACK_IMPORTED_MODULE_5__["default"]
+              ).extend({
+                name: "v-badge",
+                props: {
+                  avatar: Boolean,
+                  bordered: Boolean,
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  content: {
+                    required: false,
+                  },
+                  dot: Boolean,
+                  label: {
+                    type: String,
+                    default: "$vuetify.badge",
+                  },
+                  icon: String,
+                  inline: Boolean,
+                  offsetX: [Number, String],
+                  offsetY: [Number, String],
+                  overlap: Boolean,
+                  tile: Boolean,
+                  transition: {
+                    type: String,
+                    default: "scale-rotate-transition",
+                  },
+                  value: {
+                    default: true,
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-badge--avatar": this.avatar,
+                        "v-badge--bordered": this.bordered,
+                        "v-badge--bottom": this.bottom,
+                        "v-badge--dot": this.dot,
+                        "v-badge--icon": this.icon != null,
+                        "v-badge--inline": this.inline,
+                        "v-badge--left": this.left,
+                        "v-badge--overlap": this.overlap,
+                        "v-badge--tile": this.tile,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  computedBottom: function computedBottom() {
+                    return this.bottom ? "auto" : this.computedYOffset;
+                  },
+                  computedLeft: function computedLeft() {
+                    if (this.isRtl) {
+                      return this.left ? this.computedXOffset : "auto";
+                    }
+
+                    return this.left ? "auto" : this.computedXOffset;
+                  },
+                  computedRight: function computedRight() {
+                    if (this.isRtl) {
+                      return this.left ? "auto" : this.computedXOffset;
+                    }
+
+                    return !this.left ? "auto" : this.computedXOffset;
+                  },
+                  computedTop: function computedTop() {
+                    return this.bottom ? this.computedYOffset : "auto";
+                  },
+                  computedXOffset: function computedXOffset() {
+                    return this.calcPosition(this.offsetX);
+                  },
+                  computedYOffset: function computedYOffset() {
+                    return this.calcPosition(this.offsetY);
+                  },
+                  isRtl: function isRtl() {
+                    return this.$vuetify.rtl;
+                  },
+                  // Default fallback if offsetX
+                  // or offsetY are undefined.
+                  offset: function offset() {
+                    if (this.overlap) return this.dot ? 8 : 12;
+                    return this.dot ? 2 : 4;
+                  },
+                  styles: function styles() {
+                    if (this.inline) return {};
+                    return {
+                      bottom: this.computedBottom,
+                      left: this.computedLeft,
+                      right: this.computedRight,
+                      top: this.computedTop,
+                    };
+                  },
+                },
+                methods: {
+                  calcPosition: function calcPosition(offset) {
+                    return (
+                      "calc(100% - " +
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                          "convertToUnit"
+                        ]
+                      )(offset || this.offset) +
+                      ")"
+                    );
+                  },
+                  genBadge: function genBadge() {
+                    var lang = this.$vuetify.lang;
+                    var label = this.$attrs["aria-label"] || lang.t(this.label);
+                    var data = this.setBackgroundColor(this.color, {
+                      staticClass: "v-badge__badge",
+                      style: this.styles,
+                      attrs: {
+                        "aria-atomic": this.$attrs["aria-atomic"] || "true",
+                        "aria-label": label,
+                        "aria-live": this.$attrs["aria-live"] || "polite",
+                        title: this.$attrs.title,
+                        role: this.$attrs.role || "status",
+                      },
+                      directives: [
+                        {
+                          name: "show",
+                          value: this.isActive,
+                        },
+                      ],
+                    });
+                    var badge = this.$createElement("span", data, [
+                      this.genBadgeContent(),
+                    ]);
+                    if (!this.transition) return badge;
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.transition,
+                          origin: this.origin,
+                          mode: this.mode,
+                        },
+                      },
+                      [badge]
+                    );
+                  },
+                  genBadgeContent: function genBadgeContent() {
+                    // Dot prop shows no content
+                    if (this.dot) return undefined;
+                    var slot = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlot"]
+                    )(this, "badge");
+                    if (slot) return slot;
+                    if (this.content) return String(this.content);
+                    if (this.icon)
+                      return this.$createElement(
+                        _VIcon_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                        this.icon
+                      );
+                    return undefined;
+                  },
+                  genBadgeWrapper: function genBadgeWrapper() {
+                    return this.$createElement(
+                      "span",
+                      {
+                        staticClass: "v-badge__wrapper",
+                      },
+                      [this.genBadge()]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var badge = [this.genBadgeWrapper()];
+                  var children = [
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlot"]
+                    )(this),
+                  ];
+
+                  var _a = this.$attrs,
+                    _x = _a["aria-atomic"],
+                    _y = _a["aria-label"],
+                    _z = _a["aria-live"],
+                    role = _a.role,
+                    title = _a.title,
+                    attrs = __rest(_a, [
+                      "aria-atomic",
+                      "aria-label",
+                      "aria-live",
+                      "role",
+                      "title",
+                    ]);
+
+                  if (this.inline && this.left) children.unshift(badge);
+                  else children.push(badge);
+                  return h(
+                    "span",
+                    {
+                      staticClass: "v-badge",
+                      attrs: attrs,
+                      class: this.classes,
+                    },
+                    children
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBadge/index.ts":
-/*!****************************************!*\
+        /***/ "./src/components/VBadge/index.ts":
+          /*!****************************************!*\
   !*** ./src/components/VBadge/index.ts ***!
   \****************************************/
-/*! exports provided: VBadge, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBadge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBadge */ "./src/components/VBadge/VBadge.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBadge", function() { return _VBadge__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
+          /*! exports provided: VBadge, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBadge__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBadge */ "./src/components/VBadge/VBadge.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBadge",
+              function () {
+                return _VBadge__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VBadge__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VBadge__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBanner/VBanner.sass":
-/*!*********************************************!*\
+        /***/ "./src/components/VBanner/VBanner.sass":
+          /*!*********************************************!*\
   !*** ./src/components/VBanner/VBanner.sass ***!
   \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VBanner/VBanner.ts":
-/*!*******************************************!*\
+        /***/ "./src/components/VBanner/VBanner.ts":
+          /*!*******************************************!*\
   !*** ./src/components/VBanner/VBanner.ts ***!
   \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBanner_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBanner.sass */ "./src/components/VBanner/VBanner.sass");
-/* harmony import */ var _VBanner_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VBanner_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet */ "./src/components/VSheet/index.ts");
-/* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VAvatar */ "./src/components/VAvatar/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
- // Components
-
-
-
- // Mixins
-
-
- // Utilities
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__["default"]).extend({
-  name: 'v-banner',
-  inheritAttrs: false,
-  props: {
-    app: Boolean,
-    icon: String,
-    iconColor: String,
-    singleLine: Boolean,
-    sticky: Boolean,
-    value: {
-      type: Boolean,
-      default: true
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-banner--has-icon': this.hasIcon,
-        'v-banner--is-mobile': this.isMobile,
-        'v-banner--single-line': this.singleLine,
-        'v-banner--sticky': this.isSticky
-      });
-    },
-    hasIcon: function hasIcon() {
-      return Boolean(this.icon || this.$slots.icon);
-    },
-    isSticky: function isSticky() {
-      return this.sticky || this.app;
-    },
-    styles: function styles() {
-      var styles = __assign({}, _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.styles.call(this));
-
-      if (this.isSticky) {
-        var top = !this.app ? 0 : this.$vuetify.application.bar + this.$vuetify.application.top;
-        styles.top = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(top);
-        styles.position = 'sticky';
-        styles.zIndex = 1;
-      }
-
-      return styles;
-    }
-  },
-  methods: {
-    /** @public */
-    toggle: function toggle() {
-      this.isActive = !this.isActive;
-    },
-    iconClick: function iconClick(e) {
-      this.$emit('click:icon', e);
-    },
-    genIcon: function genIcon() {
-      if (!this.hasIcon) return undefined;
-      var content;
-
-      if (this.icon) {
-        content = this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-          props: {
-            color: this.iconColor,
-            size: 28
-          }
-        }, [this.icon]);
-      } else {
-        content = this.$slots.icon;
-      }
-
-      return this.$createElement(_VAvatar__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        staticClass: 'v-banner__icon',
-        props: {
-          color: this.color,
-          size: 40
-        },
-        on: {
-          click: this.iconClick
-        }
-      }, [content]);
-    },
-    genText: function genText() {
-      return this.$createElement('div', {
-        staticClass: 'v-banner__text'
-      }, this.$slots.default);
-    },
-    genActions: function genActions() {
-      var _this = this;
-
-      var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlot"])(this, 'actions', {
-        dismiss: function dismiss() {
-          return _this.isActive = false;
-        }
-      });
-      if (!children) return undefined;
-      return this.$createElement('div', {
-        staticClass: 'v-banner__actions'
-      }, children);
-    },
-    genContent: function genContent() {
-      return this.$createElement('div', {
-        staticClass: 'v-banner__content'
-      }, [this.genIcon(), this.genText()]);
-    },
-    genWrapper: function genWrapper() {
-      return this.$createElement('div', {
-        staticClass: 'v-banner__wrapper'
-      }, [this.genContent(), this.genActions()]);
-    }
-  },
-  render: function render(h) {
-    return h(_transitions__WEBPACK_IMPORTED_MODULE_4__["VExpandTransition"], [h('div', this.setBackgroundColor(this.color, {
-      staticClass: 'v-banner',
-      attrs: this.attrs$,
-      class: this.classes,
-      style: this.styles,
-      directives: [{
-        name: 'show',
-        value: this.isActive
-      }]
-    }), [this.genWrapper()])]);
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBanner_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBanner.sass */ "./src/components/VBanner/VBanner.sass"
+              );
+            /* harmony import */ var _VBanner_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VBanner_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet */ "./src/components/VSheet/index.ts"
+              );
+            /* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VAvatar */ "./src/components/VAvatar/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(
+                _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_6__["default"]
+              ).extend({
+                name: "v-banner",
+                inheritAttrs: false,
+                props: {
+                  app: Boolean,
+                  icon: String,
+                  iconColor: String,
+                  singleLine: Boolean,
+                  sticky: Boolean,
+                  value: {
+                    type: Boolean,
+                    default: true,
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-banner--has-icon": this.hasIcon,
+                        "v-banner--is-mobile": this.isMobile,
+                        "v-banner--single-line": this.singleLine,
+                        "v-banner--sticky": this.isSticky,
+                      }
+                    );
+                  },
+                  hasIcon: function hasIcon() {
+                    return Boolean(this.icon || this.$slots.icon);
+                  },
+                  isSticky: function isSticky() {
+                    return this.sticky || this.app;
+                  },
+                  styles: function styles() {
+                    var styles = __assign(
+                      {},
+                      _VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.styles.call(this)
+                    );
+
+                    if (this.isSticky) {
+                      var top = !this.app
+                        ? 0
+                        : this.$vuetify.application.bar +
+                          this.$vuetify.application.top;
+                      styles.top = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                          "convertToUnit"
+                        ]
+                      )(top);
+                      styles.position = "sticky";
+                      styles.zIndex = 1;
+                    }
+
+                    return styles;
+                  },
+                },
+                methods: {
+                  /** @public */
+                  toggle: function toggle() {
+                    this.isActive = !this.isActive;
+                  },
+                  iconClick: function iconClick(e) {
+                    this.$emit("click:icon", e);
+                  },
+                  genIcon: function genIcon() {
+                    if (!this.hasIcon) return undefined;
+                    var content;
+
+                    if (this.icon) {
+                      content = this.$createElement(
+                        _VIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                        {
+                          props: {
+                            color: this.iconColor,
+                            size: 28,
+                          },
+                        },
+                        [this.icon]
+                      );
+                    } else {
+                      content = this.$slots.icon;
+                    }
+
+                    return this.$createElement(
+                      _VAvatar__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        staticClass: "v-banner__icon",
+                        props: {
+                          color: this.color,
+                          size: 40,
+                        },
+                        on: {
+                          click: this.iconClick,
+                        },
+                      },
+                      [content]
+                    );
+                  },
+                  genText: function genText() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-banner__text",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                  genActions: function genActions() {
+                    var _this = this;
+
+                    var children = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlot"]
+                    )(this, "actions", {
+                      dismiss: function dismiss() {
+                        return (_this.isActive = false);
+                      },
+                    });
+                    if (!children) return undefined;
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-banner__actions",
+                      },
+                      children
+                    );
+                  },
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-banner__content",
+                      },
+                      [this.genIcon(), this.genText()]
+                    );
+                  },
+                  genWrapper: function genWrapper() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-banner__wrapper",
+                      },
+                      [this.genContent(), this.genActions()]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    _transitions__WEBPACK_IMPORTED_MODULE_4__[
+                      "VExpandTransition"
+                    ],
+                    [
+                      h(
+                        "div",
+                        this.setBackgroundColor(this.color, {
+                          staticClass: "v-banner",
+                          attrs: this.attrs$,
+                          class: this.classes,
+                          style: this.styles,
+                          directives: [
+                            {
+                              name: "show",
+                              value: this.isActive,
+                            },
+                          ],
+                        }),
+                        [this.genWrapper()]
+                      ),
+                    ]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBanner/index.ts":
-/*!*****************************************!*\
+        /***/ "./src/components/VBanner/index.ts":
+          /*!*****************************************!*\
   !*** ./src/components/VBanner/index.ts ***!
   \*****************************************/
-/*! exports provided: VBanner, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBanner */ "./src/components/VBanner/VBanner.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBanner", function() { return _VBanner__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
+          /*! exports provided: VBanner, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBanner__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBanner */ "./src/components/VBanner/VBanner.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBanner",
+              function () {
+                return _VBanner__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VBanner__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VBanner__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBottomNavigation/VBottomNavigation.sass":
-/*!*****************************************************************!*\
+        /***/ "./src/components/VBottomNavigation/VBottomNavigation.sass":
+          /*!*****************************************************************!*\
   !*** ./src/components/VBottomNavigation/VBottomNavigation.sass ***!
   \*****************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VBottomNavigation/VBottomNavigation.ts":
-/*!***************************************************************!*\
+        /***/ "./src/components/VBottomNavigation/VBottomNavigation.ts":
+          /*!***************************************************************!*\
   !*** ./src/components/VBottomNavigation/VBottomNavigation.ts ***!
   \***************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBottomNavigation_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBottomNavigation.sass */ "./src/components/VBottomNavigation/VBottomNavigation.sass");
-/* harmony import */ var _VBottomNavigation_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VBottomNavigation_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts");
-/* harmony import */ var _mixins_button_group__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/button-group */ "./src/mixins/button-group/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts");
-/* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts");
-/* harmony import */ var _mixins_scrollable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/scrollable */ "./src/mixins/scrollable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBottomNavigation_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBottomNavigation.sass */ "./src/components/VBottomNavigation/VBottomNavigation.sass"
+              );
+            /* harmony import */ var _VBottomNavigation_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VBottomNavigation_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts"
+              );
+            /* harmony import */ var _mixins_button_group__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/button-group */ "./src/mixins/button-group/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts"
+              );
+            /* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts"
+              );
+            /* harmony import */ var _mixins_scrollable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/scrollable */ "./src/mixins/scrollable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_9__["default"])(
+                Object(
+                  _mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__[
+                    "default"
+                  ]
+                )("bottom", ["height", "inputValue"]),
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                Object(
+                  _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__["factory"]
+                )("inputValue"),
+                _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__["default"],
+                _mixins_scrollable__WEBPACK_IMPORTED_MODULE_6__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_7__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-bottom-navigation",
+                props: {
+                  activeClass: {
+                    type: String,
+                    default: "v-btn--active",
+                  },
+                  backgroundColor: String,
+                  grow: Boolean,
+                  height: {
+                    type: [Number, String],
+                    default: 56,
+                  },
+                  hideOnScroll: Boolean,
+                  horizontal: Boolean,
+                  inputValue: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  mandatory: Boolean,
+                  shift: Boolean,
+                },
+                data: function data() {
+                  return {
+                    isActive: this.inputValue,
+                  };
+                },
+                computed: {
+                  canScroll: function canScroll() {
+                    return (
+                      _mixins_scrollable__WEBPACK_IMPORTED_MODULE_6__[
+                        "default"
+                      ].options.computed.canScroll.call(this) &&
+                      (this.hideOnScroll || !this.inputValue)
+                    );
+                  },
+                  classes: function classes() {
+                    return {
+                      "v-bottom-navigation--absolute": this.absolute,
+                      "v-bottom-navigation--grow": this.grow,
+                      "v-bottom-navigation--fixed":
+                        !this.absolute && (this.app || this.fixed),
+                      "v-bottom-navigation--horizontal": this.horizontal,
+                      "v-bottom-navigation--shift": this.shift,
+                    };
+                  },
+                  styles: function styles() {
+                    return __assign(__assign({}, this.measurableStyles), {
+                      transform: this.isActive ? "none" : "translateY(100%)",
+                    });
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("active")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"]
+                    )("active.sync", "value or v-model", this);
+                  }
+                },
+                methods: {
+                  thresholdMet: function thresholdMet() {
+                    this.isActive = !this.isScrollingUp;
+                    this.$emit("update:input-value", this.isActive);
+                  },
+                  updateApplication: function updateApplication() {
+                    return this.$el ? this.$el.clientHeight : 0;
+                  },
+                  updateValue: function updateValue(val) {
+                    this.$emit("change", val);
+                  },
+                },
+                render: function render(h) {
+                  var data = this.setBackgroundColor(this.backgroundColor, {
+                    staticClass: "v-bottom-navigation",
+                    class: this.classes,
+                    style: this.styles,
+                    props: {
+                      activeClass: this.activeClass,
+                      mandatory: Boolean(
+                        this.mandatory || this.value !== undefined
+                      ),
+                      value: this.internalValue,
+                    },
+                    on: {
+                      change: this.updateValue,
+                    },
+                  });
+
+                  if (this.canScroll) {
+                    data.directives = data.directives || [];
+                    data.directives.push({
+                      arg: this.scrollTarget,
+                      name: "scroll",
+                      value: this.onScroll,
+                    });
+                  }
 
-  return __assign.apply(this, arguments);
-}; // Styles
+                  return h(
+                    _mixins_button_group__WEBPACK_IMPORTED_MODULE_2__[
+                      "default"
+                    ],
+                    this.setTextColor(this.color, data),
+                    this.$slots.default
+                  );
+                },
+              });
 
+            /***/
+          },
 
- // Mixins
+        /***/ "./src/components/VBottomNavigation/index.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VBottomNavigation/index.ts ***!
+  \***************************************************/
+          /*! exports provided: VBottomNavigation, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBottomNavigation__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBottomNavigation */ "./src/components/VBottomNavigation/VBottomNavigation.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBottomNavigation",
+              function () {
+                return _VBottomNavigation__WEBPACK_IMPORTED_MODULE_0__[
+                  "default"
+                ];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VBottomNavigation__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VBottomSheet/VBottomSheet.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VBottomSheet/VBottomSheet.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VBottomSheet/VBottomSheet.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VBottomSheet/VBottomSheet.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBottomSheet_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBottomSheet.sass */ "./src/components/VBottomSheet/VBottomSheet.sass"
+              );
+            /* harmony import */ var _VBottomSheet_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VBottomSheet_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VDialog_VDialog__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VDialog/VDialog */ "./src/components/VDialog/VDialog.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            // Extensions
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VDialog_VDialog__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-bottom-sheet",
+                props: {
+                  inset: Boolean,
+                  maxWidth: {
+                    type: [String, Number],
+                    default: "auto",
+                  },
+                  transition: {
+                    type: String,
+                    default: "bottom-sheet-transition",
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VDialog_VDialog__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-bottom-sheet": true,
+                        "v-bottom-sheet--inset": this.inset,
+                      }
+                    );
+                  },
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VBottomSheet/index.ts":
+          /*!**********************************************!*\
+  !*** ./src/components/VBottomSheet/index.ts ***!
+  \**********************************************/
+          /*! exports provided: VBottomSheet, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBottomSheet__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBottomSheet */ "./src/components/VBottomSheet/VBottomSheet.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBottomSheet",
+              function () {
+                return _VBottomSheet__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
- // Utilities
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VBottomSheet__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VBreadcrumbs/VBreadcrumbs.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VBreadcrumbs/VBreadcrumbs.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_9__["default"])(Object(_mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__["default"])('bottom', ['height', 'inputValue']), _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__["default"], Object(_mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__["factory"])('inputValue'), _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_scrollable__WEBPACK_IMPORTED_MODULE_6__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_7__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-bottom-navigation',
-  props: {
-    activeClass: {
-      type: String,
-      default: 'v-btn--active'
-    },
-    backgroundColor: String,
-    grow: Boolean,
-    height: {
-      type: [Number, String],
-      default: 56
-    },
-    hideOnScroll: Boolean,
-    horizontal: Boolean,
-    inputValue: {
-      type: Boolean,
-      default: true
-    },
-    mandatory: Boolean,
-    shift: Boolean
-  },
-  data: function data() {
-    return {
-      isActive: this.inputValue
-    };
-  },
-  computed: {
-    canScroll: function canScroll() {
-      return _mixins_scrollable__WEBPACK_IMPORTED_MODULE_6__["default"].options.computed.canScroll.call(this) && (this.hideOnScroll || !this.inputValue);
-    },
-    classes: function classes() {
-      return {
-        'v-bottom-navigation--absolute': this.absolute,
-        'v-bottom-navigation--grow': this.grow,
-        'v-bottom-navigation--fixed': !this.absolute && (this.app || this.fixed),
-        'v-bottom-navigation--horizontal': this.horizontal,
-        'v-bottom-navigation--shift': this.shift
-      };
-    },
-    styles: function styles() {
-      return __assign(__assign({}, this.measurableStyles), {
-        transform: this.isActive ? 'none' : 'translateY(100%)'
-      });
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('active')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"])('active.sync', 'value or v-model', this);
-    }
-  },
-  methods: {
-    thresholdMet: function thresholdMet() {
-      this.isActive = !this.isScrollingUp;
-      this.$emit('update:input-value', this.isActive);
-    },
-    updateApplication: function updateApplication() {
-      return this.$el ? this.$el.clientHeight : 0;
-    },
-    updateValue: function updateValue(val) {
-      this.$emit('change', val);
-    }
-  },
-  render: function render(h) {
-    var data = this.setBackgroundColor(this.backgroundColor, {
-      staticClass: 'v-bottom-navigation',
-      class: this.classes,
-      style: this.styles,
-      props: {
-        activeClass: this.activeClass,
-        mandatory: Boolean(this.mandatory || this.value !== undefined),
-        value: this.internalValue
-      },
-      on: {
-        change: this.updateValue
-      }
-    });
-
-    if (this.canScroll) {
-      data.directives = data.directives || [];
-      data.directives.push({
-        arg: this.scrollTarget,
-        name: 'scroll',
-        value: this.onScroll
-      });
-    }
-
-    return h(_mixins_button_group__WEBPACK_IMPORTED_MODULE_2__["default"], this.setTextColor(this.color, data), this.$slots.default);
-  }
-}));
+        /***/ "./src/components/VBreadcrumbs/VBreadcrumbs.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VBreadcrumbs/VBreadcrumbs.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBreadcrumbs_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBreadcrumbs.sass */ "./src/components/VBreadcrumbs/VBreadcrumbs.sass"
+              );
+            /* harmony import */ var _VBreadcrumbs_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VBreadcrumbs_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VBreadcrumbsItem */ "./src/components/VBreadcrumbs/VBreadcrumbsItem.ts"
+              );
+            /* harmony import */ var _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VBreadcrumbsDivider */ "./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-breadcrumbs",
+                props: {
+                  divider: {
+                    type: String,
+                    default: "/",
+                  },
+                  items: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  large: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-breadcrumbs--large": this.large,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                },
+                methods: {
+                  genDivider: function genDivider() {
+                    return this.$createElement(
+                      _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ],
+                      this.$slots.divider ? this.$slots.divider : this.divider
+                    );
+                  },
+                  genItems: function genItems() {
+                    var items = [];
+                    var hasSlot = !!this.$scopedSlots.item;
+                    var keys = [];
+
+                    for (var i = 0; i < this.items.length; i++) {
+                      var item = this.items[i];
+                      keys.push(item.text);
+                      if (hasSlot)
+                        items.push(
+                          this.$scopedSlots.item({
+                            item: item,
+                          })
+                        );
+                      else
+                        items.push(
+                          this.$createElement(
+                            _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__[
+                              "default"
+                            ],
+                            {
+                              key: keys.join("."),
+                              props: item,
+                            },
+                            [item.text]
+                          )
+                        );
+                      if (i < this.items.length - 1)
+                        items.push(this.genDivider());
+                    }
+
+                    return items;
+                  },
+                },
+                render: function render(h) {
+                  var children = this.$slots.default || this.genItems();
+                  return h(
+                    "ul",
+                    {
+                      staticClass: "v-breadcrumbs",
+                      class: this.classes,
+                    },
+                    children
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBottomNavigation/index.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VBottomNavigation/index.ts ***!
-  \***************************************************/
-/*! exports provided: VBottomNavigation, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+        /***/ "./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts":
+          /*!************************************************************!*\
+  !*** ./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts ***!
+  \************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(
+                _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                  "createSimpleFunctional"
+                ]
+              )("v-breadcrumbs__divider", "li");
+
+            /***/
+          },
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBottomNavigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBottomNavigation */ "./src/components/VBottomNavigation/VBottomNavigation.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBottomNavigation", function() { return _VBottomNavigation__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+        /***/ "./src/components/VBreadcrumbs/VBreadcrumbsItem.ts":
+          /*!*********************************************************!*\
+  !*** ./src/components/VBreadcrumbs/VBreadcrumbsItem.ts ***!
+  \*********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/routable */ "./src/mixins/routable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(
+                _mixins_routable__WEBPACK_IMPORTED_MODULE_0__["default"]
+              ).extend({
+                name: "v-breadcrumbs-item",
+                props: {
+                  // In a breadcrumb, the currently
+                  // active item should be dimmed
+                  activeClass: {
+                    type: String,
+                    default: "v-breadcrumbs__item--disabled",
+                  },
+                  ripple: {
+                    type: [Boolean, Object],
+                    default: false,
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    var _a;
+
+                    return (
+                      (_a = {
+                        "v-breadcrumbs__item": true,
+                      }),
+                      (_a[this.activeClass] = this.disabled),
+                      _a
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _a = this.generateRouteLink(),
+                    tag = _a.tag,
+                    data = _a.data;
+
+                  return h("li", [
+                    h(
+                      tag,
+                      __assign(__assign({}, data), {
+                        attrs: __assign(__assign({}, data.attrs), {
+                          "aria-current":
+                            this.isActive && this.isLink ? "page" : undefined,
+                        }),
+                      }),
+                      this.$slots.default
+                    ),
+                  ]);
+                },
+              });
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (_VBottomNavigation__WEBPACK_IMPORTED_MODULE_0__["default"]);
+        /***/ "./src/components/VBreadcrumbs/index.ts":
+          /*!**********************************************!*\
+  !*** ./src/components/VBreadcrumbs/index.ts ***!
+  \**********************************************/
+          /*! exports provided: VBreadcrumbs, VBreadcrumbsItem, VBreadcrumbsDivider, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBreadcrumbs */ "./src/components/VBreadcrumbs/VBreadcrumbs.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBreadcrumbs",
+              function () {
+                return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VBreadcrumbsItem */ "./src/components/VBreadcrumbs/VBreadcrumbsItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBreadcrumbsItem",
+              function () {
+                return _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VBreadcrumbsDivider */ "./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBreadcrumbsDivider",
+              function () {
+                return _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VBreadcrumbs:
+                  _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VBreadcrumbsItem:
+                  _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VBreadcrumbsDivider:
+                  _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__["default"],
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBottomSheet/VBottomSheet.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VBottomSheet/VBottomSheet.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VBtn/VBtn.sass":
+          /*!***************************************!*\
+  !*** ./src/components/VBtn/VBtn.sass ***!
+  \***************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-// extracted by mini-css-extract-plugin
+        /***/ "./src/components/VBtn/VBtn.ts":
+          /*!*************************************!*\
+  !*** ./src/components/VBtn/VBtn.ts ***!
+  \*************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBtn_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBtn.sass */ "./src/components/VBtn/VBtn.sass"
+              );
+            /* harmony import */ var _VBtn_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VBtn_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet */ "./src/components/VSheet/index.ts"
+              );
+            /* harmony import */ var _VProgressCircular__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VProgressCircular */ "./src/components/VProgressCircular/index.ts"
+              );
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts"
+              );
+            /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/routable */ "./src/mixins/routable/index.ts"
+              );
+            /* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-/***/ }),
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ "./src/components/VBottomSheet/VBottomSheet.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VBottomSheet/VBottomSheet.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBottomSheet_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBottomSheet.sass */ "./src/components/VBottomSheet/VBottomSheet.sass");
-/* harmony import */ var _VBottomSheet_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VBottomSheet_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VDialog_VDialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VDialog/VDialog */ "./src/components/VDialog/VDialog.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
- // Extensions
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VDialog_VDialog__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-bottom-sheet',
-  props: {
-    inset: Boolean,
-    maxWidth: {
-      type: [String, Number],
-      default: 'auto'
-    },
-    transition: {
-      type: String,
-      default: 'bottom-sheet-transition'
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VDialog_VDialog__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-bottom-sheet': true,
-        'v-bottom-sheet--inset': this.inset
-      });
-    }
-  }
-}));
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/***/ }),
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ "./src/components/VBottomSheet/index.ts":
-/*!**********************************************!*\
-  !*** ./src/components/VBottomSheet/index.ts ***!
-  \**********************************************/
-/*! exports provided: VBottomSheet, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                return ar;
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"]
+            )(
+              _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"],
+              _mixins_routable__WEBPACK_IMPORTED_MODULE_6__["default"],
+              _mixins_positionable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_sizeable__WEBPACK_IMPORTED_MODULE_7__["default"],
+              Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_3__["factory"])(
+                "btnToggle"
+              ),
+              Object(
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["factory"]
+              )("inputValue")
+              /* @vue/component */
+            );
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-btn",
+                props: {
+                  activeClass: {
+                    type: String,
+                    default: function _default() {
+                      if (!this.btnToggle) return "";
+                      return this.btnToggle.activeClass;
+                    },
+                  },
+                  block: Boolean,
+                  depressed: Boolean,
+                  fab: Boolean,
+                  icon: Boolean,
+                  loading: Boolean,
+                  outlined: Boolean,
+                  retainFocusOnClick: Boolean,
+                  rounded: Boolean,
+                  tag: {
+                    type: String,
+                    default: "button",
+                  },
+                  text: Boolean,
+                  tile: Boolean,
+                  type: {
+                    type: String,
+                    default: "button",
+                  },
+                  value: null,
+                },
+                data: function data() {
+                  return {
+                    proxyClass: "v-btn--active",
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        __assign(
+                          __assign(
+                            __assign(
+                              __assign(
+                                {
+                                  "v-btn": true,
+                                },
+                                _mixins_routable__WEBPACK_IMPORTED_MODULE_6__[
+                                  "default"
+                                ].options.computed.classes.call(this)
+                              ),
+                              {
+                                "v-btn--absolute": this.absolute,
+                                "v-btn--block": this.block,
+                                "v-btn--bottom": this.bottom,
+                                "v-btn--contained": this.contained,
+                                "v-btn--depressed":
+                                  this.depressed || this.outlined,
+                                "v-btn--disabled": this.disabled,
+                                "v-btn--fab": this.fab,
+                                "v-btn--fixed": this.fixed,
+                                "v-btn--flat": this.isFlat,
+                                "v-btn--icon": this.icon,
+                                "v-btn--left": this.left,
+                                "v-btn--loading": this.loading,
+                                "v-btn--outlined": this.outlined,
+                                "v-btn--right": this.right,
+                                "v-btn--round": this.isRound,
+                                "v-btn--rounded": this.rounded,
+                                "v-btn--router": this.to,
+                                "v-btn--text": this.text,
+                                "v-btn--tile": this.tile,
+                                "v-btn--top": this.top,
+                              }
+                            ),
+                            this.themeClasses
+                          ),
+                          this.groupClasses
+                        ),
+                        this.elevationClasses
+                      ),
+                      this.sizeableClasses
+                    );
+                  },
+                  contained: function contained() {
+                    return Boolean(
+                      !this.isFlat &&
+                        !this.depressed && // Contained class only adds elevation
+                        // is not needed if user provides value
+                        !this.elevation
+                    );
+                  },
+                  computedRipple: function computedRipple() {
+                    var _a;
+
+                    var defaultRipple =
+                      this.icon || this.fab
+                        ? {
+                            circle: true,
+                          }
+                        : true;
+                    if (this.disabled) return false;
+                    else
+                      return (_a = this.ripple) !== null && _a !== void 0
+                        ? _a
+                        : defaultRipple;
+                  },
+                  isFlat: function isFlat() {
+                    return Boolean(this.icon || this.text || this.outlined);
+                  },
+                  isRound: function isRound() {
+                    return Boolean(this.icon || this.fab);
+                  },
+                  styles: function styles() {
+                    return __assign({}, this.measurableStyles);
+                  },
+                },
+                created: function created() {
+                  var _this = this;
+
+                  var breakingProps = [
+                    ["flat", "text"],
+                    ["outline", "outlined"],
+                    ["round", "rounded"],
+                  ];
+                  /* istanbul ignore next */
+
+                  breakingProps.forEach(function (_a) {
+                    var _b = __read(_a, 2),
+                      original = _b[0],
+                      replacement = _b[1];
+
+                    if (_this.$attrs.hasOwnProperty(original))
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_9__["breaking"]
+                      )(original, replacement, _this);
+                  });
+                },
+                methods: {
+                  click: function click(e) {
+                    // TODO: Remove this in v3
+                    !this.retainFocusOnClick &&
+                      !this.fab &&
+                      e.detail &&
+                      this.$el.blur();
+                    this.$emit("click", e);
+                    this.btnToggle && this.toggle();
+                  },
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "span",
+                      {
+                        staticClass: "v-btn__content",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                  genLoader: function genLoader() {
+                    return this.$createElement(
+                      "span",
+                      {
+                        class: "v-btn__loader",
+                      },
+                      this.$slots.loader || [
+                        this.$createElement(
+                          _VProgressCircular__WEBPACK_IMPORTED_MODULE_2__[
+                            "default"
+                          ],
+                          {
+                            props: {
+                              indeterminate: true,
+                              size: 23,
+                              width: 2,
+                            },
+                          }
+                        ),
+                      ]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var children = [
+                    this.genContent(),
+                    this.loading && this.genLoader(),
+                  ];
+                  var setColor = !this.isFlat
+                    ? this.setBackgroundColor
+                    : this.setTextColor;
+
+                  var _a = this.generateRouteLink(),
+                    tag = _a.tag,
+                    data = _a.data;
+
+                  if (tag === "button") {
+                    data.attrs.type = this.type;
+                    data.attrs.disabled = this.disabled;
+                  }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBottomSheet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBottomSheet */ "./src/components/VBottomSheet/VBottomSheet.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBottomSheet", function() { return _VBottomSheet__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+                  data.attrs.value = ["string", "number"].includes(
+                    _typeof(this.value)
+                  )
+                    ? this.value
+                    : JSON.stringify(this.value);
+                  return h(
+                    tag,
+                    this.disabled ? data : setColor(this.color, data),
+                    children
+                  );
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VBtn/index.ts":
+          /*!**************************************!*\
+  !*** ./src/components/VBtn/index.ts ***!
+  \**************************************/
+          /*! exports provided: VBtn, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBtn */ "./src/components/VBtn/VBtn.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBtn",
+              function () {
+                return _VBtn__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VBottomSheet__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VBtn__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBreadcrumbs/VBreadcrumbs.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VBreadcrumbs/VBreadcrumbs.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VBtnToggle/VBtnToggle.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VBtnToggle/VBtnToggle.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-// extracted by mini-css-extract-plugin
+        /***/ "./src/components/VBtnToggle/VBtnToggle.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VBtnToggle/VBtnToggle.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBtnToggle_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBtnToggle.sass */ "./src/components/VBtnToggle/VBtnToggle.sass"
+              );
+            /* harmony import */ var _VBtnToggle_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VBtnToggle_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_button_group__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/button-group */ "./src/mixins/button-group/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_button_group__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "v-btn-toggle",
+                props: {
+                  backgroundColor: String,
+                  borderless: Boolean,
+                  dense: Boolean,
+                  group: Boolean,
+                  rounded: Boolean,
+                  shaped: Boolean,
+                  tile: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        __assign(
+                          {},
+                          _mixins_button_group__WEBPACK_IMPORTED_MODULE_1__[
+                            "default"
+                          ].options.computed.classes.call(this)
+                        ),
+                        {
+                          "v-btn-toggle": true,
+                          "v-btn-toggle--borderless": this.borderless,
+                          "v-btn-toggle--dense": this.dense,
+                          "v-btn-toggle--group": this.group,
+                          "v-btn-toggle--rounded": this.rounded,
+                          "v-btn-toggle--shaped": this.shaped,
+                          "v-btn-toggle--tile": this.tile,
+                        }
+                      ),
+                      this.themeClasses
+                    );
+                  },
+                },
+                methods: {
+                  genData: function genData() {
+                    var data = this.setTextColor(
+                      this.color,
+                      __assign(
+                        {},
+                        _mixins_button_group__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.methods.genData.call(this)
+                      )
+                    );
+                    if (this.group) return data;
+                    return this.setBackgroundColor(this.backgroundColor, data);
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBreadcrumbs/VBreadcrumbs.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VBreadcrumbs/VBreadcrumbs.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBreadcrumbs_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBreadcrumbs.sass */ "./src/components/VBreadcrumbs/VBreadcrumbs.sass");
-/* harmony import */ var _VBreadcrumbs_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VBreadcrumbs_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VBreadcrumbsItem */ "./src/components/VBreadcrumbs/VBreadcrumbsItem.ts");
-/* harmony import */ var _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VBreadcrumbsDivider */ "./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+        /***/ "./src/components/VBtnToggle/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VBtnToggle/index.ts ***!
+  \********************************************/
+          /*! exports provided: VBtnToggle, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VBtnToggle__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VBtnToggle */ "./src/components/VBtnToggle/VBtnToggle.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBtnToggle",
+              function () {
+                return _VBtnToggle__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-    return t;
-  };
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VBtnToggle__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return __assign.apply(this, arguments);
-}; // Styles
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/VCalendar.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VCalendar/VCalendar.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_calendar_with_events__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./mixins/calendar-with-events */ "./src/components/VCalendar/mixins/calendar-with-events.ts"
+              );
+            /* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./util/props */ "./src/components/VCalendar/util/props.ts"
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            /* harmony import */ var _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VCalendarMonthly */ "./src/components/VCalendar/VCalendarMonthly.ts"
+              );
+            /* harmony import */ var _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VCalendarDaily */ "./src/components/VCalendar/VCalendarDaily.ts"
+              );
+            /* harmony import */ var _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./VCalendarWeekly */ "./src/components/VCalendar/VCalendarWeekly.ts"
+              );
+            /* harmony import */ var _VCalendarCategory__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./VCalendarCategory */ "./src/components/VCalendar/VCalendarCategory.ts"
+              );
+            // Styles
+            // import '../../stylus/components/_calendar-daily.styl'
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Mixins
+
+            // Util
+
+            // Calendars
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_calendar_with_events__WEBPACK_IMPORTED_MODULE_0__[
+                "default"
+              ].extend({
+                name: "v-calendar",
+                props: __assign(
+                  __assign(
+                    __assign(
+                      __assign(
+                        {},
+                        _util_props__WEBPACK_IMPORTED_MODULE_1__["default"]
+                          .calendar
+                      ),
+                      _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].weeks
+                    ),
+                    _util_props__WEBPACK_IMPORTED_MODULE_1__["default"]
+                      .intervals
+                  ),
+                  _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].category
+                ),
+                data: function data() {
+                  return {
+                    lastStart: null,
+                    lastEnd: null,
+                  };
+                },
+                computed: {
+                  parsedValue: function parsedValue() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "validateTimestamp"
+                      ]
+                    )(this.value)
+                      ? Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "parseTimestamp"
+                          ]
+                        )(this.value, true)
+                      : this.parsedStart || this.times.today;
+                  },
+                  parsedCategoryDays: function parsedCategoryDays() {
+                    return parseInt(this.categoryDays) || 1;
+                  },
+                  renderProps: function renderProps() {
+                    var around = this.parsedValue;
+                    var component = null;
+                    var maxDays = this.maxDays;
+                    var weekdays = this.parsedWeekdays;
+                    var categories = this.parsedCategories;
+                    var start = around;
+                    var end = around;
+
+                    switch (this.type) {
+                      case "month":
+                        component =
+                          _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__[
+                            "default"
+                          ];
+                        start = Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "getStartOfMonth"
+                          ]
+                        )(around);
+                        end = Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "getEndOfMonth"
+                          ]
+                        )(around);
+                        break;
+
+                      case "week":
+                        component =
+                          _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__[
+                            "default"
+                          ];
+                        start = this.getStartOfWeek(around);
+                        end = this.getEndOfWeek(around);
+                        maxDays = 7;
+                        break;
+
+                      case "day":
+                        component =
+                          _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__[
+                            "default"
+                          ];
+                        maxDays = 1;
+                        weekdays = [start.weekday];
+                        break;
+
+                      case "4day":
+                        component =
+                          _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__[
+                            "default"
+                          ];
+                        end = Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "relativeDays"
+                          ]
+                        )(
+                          Object(
+                            _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                              "copyTimestamp"
+                            ]
+                          )(end),
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "nextDay"
+                          ],
+                          4
+                        );
+                        Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "updateFormatted"
+                          ]
+                        )(end);
+                        maxDays = 4;
+                        weekdays = [
+                          start.weekday,
+                          (start.weekday + 1) % 7,
+                          (start.weekday + 2) % 7,
+                          (start.weekday + 3) % 7,
+                        ];
+                        break;
+
+                      case "custom-weekly":
+                        component =
+                          _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_5__[
+                            "default"
+                          ];
+                        start = this.parsedStart || around;
+                        end = this.parsedEnd;
+                        break;
+
+                      case "custom-daily":
+                        component =
+                          _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__[
+                            "default"
+                          ];
+                        start = this.parsedStart || around;
+                        end = this.parsedEnd;
+                        break;
+
+                      case "category":
+                        var days = this.parsedCategoryDays;
+                        component =
+                          _VCalendarCategory__WEBPACK_IMPORTED_MODULE_6__[
+                            "default"
+                          ];
+                        end = Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "relativeDays"
+                          ]
+                        )(
+                          Object(
+                            _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                              "copyTimestamp"
+                            ]
+                          )(end),
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "nextDay"
+                          ],
+                          days
+                        );
+                        Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "updateFormatted"
+                          ]
+                        )(end);
+                        maxDays = days;
+                        weekdays = [];
+
+                        for (var i = 0; i < days; i++) {
+                          weekdays.push((start.weekday + i) % 7);
+                        }
+
+                        categories = this.getCategoryList(categories);
+                        break;
+
+                      default:
+                        throw new Error(
+                          this.type + " is not a valid Calendar type"
+                        );
+                    }
+
+                    return {
+                      component: component,
+                      start: start,
+                      end: end,
+                      maxDays: maxDays,
+                      weekdays: weekdays,
+                      categories: categories,
+                    };
+                  },
+                  eventWeekdays: function eventWeekdays() {
+                    return this.renderProps.weekdays;
+                  },
+                  categoryMode: function categoryMode() {
+                    return this.type === "category";
+                  },
+                  title: function title() {
+                    var _a = this.renderProps,
+                      start = _a.start,
+                      end = _a.end;
+                    var spanYears = start.year !== end.year;
+                    var spanMonths = spanYears || start.month !== end.month;
+
+                    if (spanYears) {
+                      return (
+                        this.monthShortFormatter(start, true) +
+                        " " +
+                        start.year +
+                        " - " +
+                        this.monthShortFormatter(end, true) +
+                        " " +
+                        end.year
+                      );
+                    }
+
+                    if (spanMonths) {
+                      return (
+                        this.monthShortFormatter(start, true) +
+                        " - " +
+                        this.monthShortFormatter(end, true) +
+                        " " +
+                        end.year
+                      );
+                    } else {
+                      return (
+                        this.monthLongFormatter(start, false) + " " + start.year
+                      );
+                    }
+                  },
+                  monthLongFormatter: function monthLongFormatter() {
+                    return this.getFormatter({
+                      timeZone: "UTC",
+                      month: "long",
+                    });
+                  },
+                  monthShortFormatter: function monthShortFormatter() {
+                    return this.getFormatter({
+                      timeZone: "UTC",
+                      month: "short",
+                    });
+                  },
+                  parsedCategories: function parsedCategories() {
+                    return typeof this.categories === "string" &&
+                      this.categories
+                      ? this.categories.split(/\s*,\s*/)
+                      : Array.isArray(this.categories)
+                      ? this.categories
+                      : [];
+                  },
+                },
+                watch: {
+                  renderProps: "checkChange",
+                },
+                mounted: function mounted() {
+                  this.updateEventVisibility();
+                  this.checkChange();
+                },
+                updated: function updated() {
+                  window.requestAnimationFrame(this.updateEventVisibility);
+                },
+                methods: {
+                  checkChange: function checkChange() {
+                    var _a = this,
+                      lastStart = _a.lastStart,
+                      lastEnd = _a.lastEnd;
+
+                    var _b = this.renderProps,
+                      start = _b.start,
+                      end = _b.end;
+
+                    if (
+                      !lastStart ||
+                      !lastEnd ||
+                      start.date !== lastStart.date ||
+                      end.date !== lastEnd.date
+                    ) {
+                      this.lastStart = start;
+                      this.lastEnd = end;
+                      this.$emit("change", {
+                        start: start,
+                        end: end,
+                      });
+                    }
+                  },
+                  move: function move(amount) {
+                    if (amount === void 0) {
+                      amount = 1;
+                    }
+
+                    var moved = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "copyTimestamp"
+                      ]
+                    )(this.parsedValue);
+                    var forward = amount > 0;
+                    var mover = forward
+                      ? _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["nextDay"]
+                      : _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["prevDay"];
+                    var limit = forward
+                      ? _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                          "DAYS_IN_MONTH_MAX"
+                        ]
+                      : _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["DAY_MIN"];
+                    var times = forward ? amount : -amount;
+
+                    while (--times >= 0) {
+                      switch (this.type) {
+                        case "month":
+                          moved.day = limit;
+                          mover(moved);
+                          break;
+
+                        case "week":
+                          Object(
+                            _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                              "relativeDays"
+                            ]
+                          )(
+                            moved,
+                            mover,
+                            _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                              "DAYS_IN_WEEK"
+                            ]
+                          );
+                          break;
+
+                        case "day":
+                          Object(
+                            _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                              "relativeDays"
+                            ]
+                          )(moved, mover, 1);
+                          break;
+
+                        case "4day":
+                          Object(
+                            _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                              "relativeDays"
+                            ]
+                          )(moved, mover, 4);
+                          break;
+
+                        case "category":
+                          Object(
+                            _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                              "relativeDays"
+                            ]
+                          )(moved, mover, this.parsedCategoryDays);
+                          break;
+                      }
+                    }
+
+                    Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "updateWeekday"
+                      ]
+                    )(moved);
+                    Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "updateFormatted"
+                      ]
+                    )(moved);
+                    Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "updateRelative"
+                      ]
+                    )(moved, this.times.now);
+
+                    if (this.value instanceof Date) {
+                      this.$emit(
+                        "input",
+                        Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "timestampToDate"
+                          ]
+                        )(moved)
+                      );
+                    } else if (typeof this.value === "number") {
+                      this.$emit(
+                        "input",
+                        Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                            "timestampToDate"
+                          ]
+                        )(moved).getTime()
+                      );
+                    } else {
+                      this.$emit("input", moved.date);
+                    }
+
+                    this.$emit("moved", moved);
+                  },
+                  next: function next(amount) {
+                    if (amount === void 0) {
+                      amount = 1;
+                    }
+
+                    this.move(amount);
+                  },
+                  prev: function prev(amount) {
+                    if (amount === void 0) {
+                      amount = 1;
+                    }
+
+                    this.move(-amount);
+                  },
+                  timeToY: function timeToY(time, clamp) {
+                    if (clamp === void 0) {
+                      clamp = true;
+                    }
+
+                    var c = this.$children[0];
+
+                    if (c && c.timeToY) {
+                      return c.timeToY(time, clamp);
+                    } else {
+                      return false;
+                    }
+                  },
+                  timeDelta: function timeDelta(time) {
+                    var c = this.$children[0];
+
+                    if (c && c.timeDelta) {
+                      return c.timeDelta(time);
+                    } else {
+                      return false;
+                    }
+                  },
+                  minutesToPixels: function minutesToPixels(minutes) {
+                    var c = this.$children[0];
+
+                    if (c && c.minutesToPixels) {
+                      return c.minutesToPixels(minutes);
+                    } else {
+                      return -1;
+                    }
+                  },
+                  scrollToTime: function scrollToTime(time) {
+                    var c = this.$children[0];
+
+                    if (c && c.scrollToTime) {
+                      return c.scrollToTime(time);
+                    } else {
+                      return false;
+                    }
+                  },
+                  parseTimestamp: function parseTimestamp(input, required) {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "parseTimestamp"
+                      ]
+                    )(input, required, this.times.now);
+                  },
+                  timestampToDate: function timestampToDate(timestamp) {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "timestampToDate"
+                      ]
+                    )(timestamp);
+                  },
+                  getCategoryList: function getCategoryList(categories) {
+                    var _this = this;
+
+                    if (!this.noEvents) {
+                      var categoryMap_1 = categories.reduce(function (
+                        map,
+                        category,
+                        index
+                      ) {
+                        map[category] = {
+                          index: index,
+                          count: 0,
+                        };
+                        return map;
+                      },
+                      Object.create(null));
+
+                      if (!this.categoryHideDynamic || !this.categoryShowAll) {
+                        var categoryLength_1 = categories.length;
+                        this.parsedEvents.forEach(function (ev) {
+                          var category = ev.category;
+
+                          if (typeof category !== "string") {
+                            category = _this.categoryForInvalid;
+                          }
+
+                          if (!category) {
+                            return;
+                          }
+
+                          if (category in categoryMap_1) {
+                            categoryMap_1[category].count++;
+                          } else if (!_this.categoryHideDynamic) {
+                            categoryMap_1[category] = {
+                              index: categoryLength_1++,
+                              count: 1,
+                            };
+                          }
+                        });
+                      }
+
+                      if (!this.categoryShowAll) {
+                        for (var category in categoryMap_1) {
+                          if (categoryMap_1[category].count === 0) {
+                            delete categoryMap_1[category];
+                          }
+                        }
+                      }
+
+                      categories = Object.keys(categoryMap_1);
+                    }
+
+                    return categories;
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var _a = this.renderProps,
+                    start = _a.start,
+                    end = _a.end,
+                    maxDays = _a.maxDays,
+                    component = _a.component,
+                    weekdays = _a.weekdays,
+                    categories = _a.categories;
+                  return h(component, {
+                    staticClass: "v-calendar",
+                    class: {
+                      "v-calendar-events": !this.noEvents,
+                    },
+                    props: __assign(__assign({}, this.$props), {
+                      start: start.date,
+                      end: end.date,
+                      maxDays: maxDays,
+                      weekdays: weekdays,
+                      categories: categories,
+                    }),
+                    directives: [
+                      {
+                        modifiers: {
+                          quiet: true,
+                        },
+                        name: "resize",
+                        value: this.updateEventVisibility,
+                      },
+                    ],
+                    on: __assign(__assign({}, this.$listeners), {
+                      "click:date": function clickDate(day) {
+                        if (_this.$listeners.input) {
+                          _this.$emit("input", day.date);
+                        }
+
+                        if (_this.$listeners["click:date"]) {
+                          _this.$emit("click:date", day);
+                        }
+                      },
+                    }),
+                    scopedSlots: this.getScopedSlots(),
+                  });
+                },
+              });
 
- // Components
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/VCalendarCategory.sass":
+          /*!*********************************************************!*\
+  !*** ./src/components/VCalendar/VCalendarCategory.sass ***!
+  \*********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
- // Mixins
+        /***/ "./src/components/VCalendar/VCalendarCategory.ts":
+          /*!*******************************************************!*\
+  !*** ./src/components/VCalendar/VCalendarCategory.ts ***!
+  \*******************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCalendarCategory_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCalendarCategory.sass */ "./src/components/VCalendar/VCalendarCategory.sass"
+              );
+            /* harmony import */ var _VCalendarCategory_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCalendarCategory_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VCalendarDaily */ "./src/components/VCalendar/VCalendarDaily.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./util/props */ "./src/components/VCalendar/util/props.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Util
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-calendar-category",
+                props:
+                  _util_props__WEBPACK_IMPORTED_MODULE_3__["default"].category,
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-calendar-daily": true,
+                        "v-calendar-category": true,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  parsedCategories: function parsedCategories() {
+                    return typeof this.categories === "string" &&
+                      this.categories
+                      ? this.categories.split(/\s*,\s*/)
+                      : Array.isArray(this.categories)
+                      ? this.categories
+                      : [];
+                  },
+                },
+                methods: {
+                  genDayHeader: function genDayHeader(day, index) {
+                    var _this = this;
+
+                    var data = {
+                      staticClass: "v-calendar-category__columns",
+                    };
+
+                    var scope = __assign(
+                      __assign(
+                        {
+                          week: this.days,
+                        },
+                        day
+                      ),
+                      {
+                        index: index,
+                      }
+                    );
+
+                    var children = this.parsedCategories.map(function (
+                      category
+                    ) {
+                      return _this.genDayHeaderCategory(
+                        day,
+                        _this.getCategoryScope(scope, category)
+                      );
+                    });
+                    return [this.$createElement("div", data, children)];
+                  },
+                  getCategoryScope: function getCategoryScope(scope, category) {
+                    return __assign(__assign({}, scope), {
+                      category:
+                        category === this.categoryForInvalid ? null : category,
+                    });
+                  },
+                  genDayHeaderCategory: function genDayHeaderCategory(
+                    day,
+                    scope
+                  ) {
+                    var _this = this;
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-category__column-header",
+                        on: this.getDefaultMouseEventHandlers(
+                          ":day-category",
+                          function (e) {
+                            return _this.getCategoryScope(
+                              _this.getSlotScope(day),
+                              scope.category
+                            );
+                          }
+                        ),
+                      },
+                      [
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"]
+                        )(this, "category", scope) ||
+                          this.genDayHeaderCategoryTitle(scope.category),
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"]
+                        )(this, "day-header", scope),
+                      ]
+                    );
+                  },
+                  genDayHeaderCategoryTitle: function genDayHeaderCategoryTitle(
+                    category
+                  ) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-category__category",
+                      },
+                      category === null ? this.categoryForInvalid : category
+                    );
+                  },
+                  genDayBody: function genDayBody(day) {
+                    var _this = this;
+
+                    var data = {
+                      staticClass: "v-calendar-category__columns",
+                    };
+                    var children = this.parsedCategories.map(function (
+                      category
+                    ) {
+                      return _this.genDayBodyCategory(day, category);
+                    });
+                    return [this.$createElement("div", data, children)];
+                  },
+                  genDayBodyCategory: function genDayBodyCategory(
+                    day,
+                    category
+                  ) {
+                    var _this = this;
+
+                    var data = {
+                      staticClass: "v-calendar-category__column",
+                      on: this.getDefaultMouseEventHandlers(
+                        ":time-category",
+                        function (e) {
+                          return _this.getCategoryScope(
+                            _this.getSlotScope(
+                              _this.getTimestampAtEvent(e, day)
+                            ),
+                            category
+                          );
+                        }
+                      ),
+                    };
+                    var children = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"]
+                    )(this, "day-body", function () {
+                      return _this.getCategoryScope(
+                        _this.getSlotScope(day),
+                        category
+                      );
+                    });
+                    return this.$createElement("div", data, children);
+                  },
+                },
+              });
 
- // Utils
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/VCalendarDaily.sass":
+          /*!******************************************************!*\
+  !*** ./src/components/VCalendar/VCalendarDaily.sass ***!
+  \******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-breadcrumbs',
-  props: {
-    divider: {
-      type: String,
-      default: '/'
-    },
-    items: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    large: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-breadcrumbs--large': this.large
-      }, this.themeClasses);
-    }
-  },
-  methods: {
-    genDivider: function genDivider() {
-      return this.$createElement(_VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__["default"], this.$slots.divider ? this.$slots.divider : this.divider);
-    },
-    genItems: function genItems() {
-      var items = [];
-      var hasSlot = !!this.$scopedSlots.item;
-      var keys = [];
-
-      for (var i = 0; i < this.items.length; i++) {
-        var item = this.items[i];
-        keys.push(item.text);
-        if (hasSlot) items.push(this.$scopedSlots.item({
-          item: item
-        }));else items.push(this.$createElement(_VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__["default"], {
-          key: keys.join('.'),
-          props: item
-        }, [item.text]));
-        if (i < this.items.length - 1) items.push(this.genDivider());
-      }
+        /***/ "./src/components/VCalendar/VCalendarDaily.ts":
+          /*!****************************************************!*\
+  !*** ./src/components/VCalendar/VCalendarDaily.ts ***!
+  \****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCalendarDaily_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCalendarDaily.sass */ "./src/components/VCalendar/VCalendarDaily.sass"
+              );
+            /* harmony import */ var _VCalendarDaily_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCalendarDaily_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _mixins_calendar_with_intervals__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./mixins/calendar-with-intervals */ "./src/components/VCalendar/mixins/calendar-with-intervals.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      return items;
-    }
-  },
-  render: function render(h) {
-    var children = this.$slots.default || this.genItems();
-    return h('ul', {
-      staticClass: 'v-breadcrumbs',
-      class: this.classes
-    }, children);
-  }
-}));
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/***/ }),
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ "./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts":
-/*!************************************************************!*\
-  !*** ./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts ***!
-  \************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                return ar;
+              };
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-breadcrumbs__divider', 'li'));
+                return ar;
+              }; // Styles
+
+            // Directives
+
+            // Components
+
+            // Mixins
+
+            // Util
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_calendar_with_intervals__WEBPACK_IMPORTED_MODULE_3__[
+                "default"
+              ].extend({
+                name: "v-calendar-daily",
+                directives: {
+                  Resize:
+                    _directives_resize__WEBPACK_IMPORTED_MODULE_1__["default"],
+                },
+                data: function data() {
+                  return {
+                    scrollPush: 0,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-calendar-daily": true,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                },
+                mounted: function mounted() {
+                  this.init();
+                },
+                methods: {
+                  init: function init() {
+                    this.$nextTick(this.onResize);
+                  },
+                  onResize: function onResize() {
+                    this.scrollPush = this.getScrollPush();
+                  },
+                  getScrollPush: function getScrollPush() {
+                    var area = this.$refs.scrollArea;
+                    var pane = this.$refs.pane;
+                    return area && pane
+                      ? area.offsetWidth - pane.offsetWidth
+                      : 0;
+                  },
+                  genHead: function genHead() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-daily__head",
+                        style: {
+                          marginRight: this.scrollPush + "px",
+                        },
+                      },
+                      __spread([this.genHeadIntervals()], this.genHeadDays())
+                    );
+                  },
+                  genHeadIntervals: function genHeadIntervals() {
+                    var width = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "convertToUnit"
+                      ]
+                    )(this.intervalWidth);
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-daily__intervals-head",
+                        style: {
+                          width: width,
+                        },
+                      },
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"]
+                      )(this, "interval-header")
+                    );
+                  },
+                  genHeadDays: function genHeadDays() {
+                    return this.days.map(this.genHeadDay);
+                  },
+                  genHeadDay: function genHeadDay(day, index) {
+                    var _this = this;
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        key: day.date,
+                        staticClass: "v-calendar-daily_head-day",
+                        class: this.getRelativeClasses(day),
+                        on: this.getDefaultMouseEventHandlers(
+                          ":day",
+                          function (_e) {
+                            return _this.getSlotScope(day);
+                          }
+                        ),
+                      },
+                      __spread(
+                        [this.genHeadWeekday(day), this.genHeadDayLabel(day)],
+                        this.genDayHeader(day, index)
+                      )
+                    );
+                  },
+                  genDayHeader: function genDayHeader(day, index) {
+                    var _this = this;
+
+                    return (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"]
+                      )(this, "day-header", function () {
+                        return __assign(
+                          __assign(
+                            {
+                              week: _this.days,
+                            },
+                            day
+                          ),
+                          {
+                            index: index,
+                          }
+                        );
+                      }) || []
+                    );
+                  },
+                  genHeadWeekday: function genHeadWeekday(day) {
+                    var color = day.present ? this.color : undefined;
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(color, {
+                        staticClass: "v-calendar-daily_head-weekday",
+                      }),
+                      this.weekdayFormatter(day, this.shortWeekdays)
+                    );
+                  },
+                  genHeadDayLabel: function genHeadDayLabel(day) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-daily_head-day-label",
+                      },
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"]
+                      )(this, "day-label-header", day) || [
+                        this.genHeadDayButton(day),
+                      ]
+                    );
+                  },
+                  genHeadDayButton: function genHeadDayButton(day) {
+                    var color = day.present ? this.color : "transparent";
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        props: {
+                          color: color,
+                          fab: true,
+                          depressed: true,
+                        },
+                        on: this.getMouseEventHandlers(
+                          {
+                            "click:date": {
+                              event: "click",
+                              stop: true,
+                            },
+                            "contextmenu:date": {
+                              event: "contextmenu",
+                              stop: true,
+                              prevent: true,
+                              result: false,
+                            },
+                          },
+                          function (_e) {
+                            return day;
+                          }
+                        ),
+                      },
+                      this.dayFormatter(day, false)
+                    );
+                  },
+                  genBody: function genBody() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-daily__body",
+                      },
+                      [this.genScrollArea()]
+                    );
+                  },
+                  genScrollArea: function genScrollArea() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        ref: "scrollArea",
+                        staticClass: "v-calendar-daily__scroll-area",
+                      },
+                      [this.genPane()]
+                    );
+                  },
+                  genPane: function genPane() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        ref: "pane",
+                        staticClass: "v-calendar-daily__pane",
+                        style: {
+                          height: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                              "convertToUnit"
+                            ]
+                          )(this.bodyHeight),
+                        },
+                      },
+                      [this.genDayContainer()]
+                    );
+                  },
+                  genDayContainer: function genDayContainer() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-daily__day-container",
+                      },
+                      __spread([this.genBodyIntervals()], this.genDays())
+                    );
+                  },
+                  genDays: function genDays() {
+                    return this.days.map(this.genDay);
+                  },
+                  genDay: function genDay(day, index) {
+                    var _this = this;
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        key: day.date,
+                        staticClass: "v-calendar-daily__day",
+                        class: this.getRelativeClasses(day),
+                        on: this.getDefaultMouseEventHandlers(
+                          ":time",
+                          function (e) {
+                            return _this.getSlotScope(
+                              _this.getTimestampAtEvent(e, day)
+                            );
+                          }
+                        ),
+                      },
+                      __spread(
+                        this.genDayIntervals(index),
+                        this.genDayBody(day)
+                      )
+                    );
+                  },
+                  genDayBody: function genDayBody(day) {
+                    var _this = this;
+
+                    return (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"]
+                      )(this, "day-body", function () {
+                        return _this.getSlotScope(day);
+                      }) || []
+                    );
+                  },
+                  genDayIntervals: function genDayIntervals(index) {
+                    return this.intervals[index].map(this.genDayInterval);
+                  },
+                  genDayInterval: function genDayInterval(interval) {
+                    var _this = this;
+
+                    var height = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "convertToUnit"
+                      ]
+                    )(this.intervalHeight);
+                    var styler =
+                      this.intervalStyle || this.intervalStyleDefault;
+                    var data = {
+                      key: interval.time,
+                      staticClass: "v-calendar-daily__day-interval",
+                      style: __assign(
+                        {
+                          height: height,
+                        },
+                        styler(interval)
+                      ),
+                    };
+                    var children = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"]
+                    )(this, "interval", function () {
+                      return _this.getSlotScope(interval);
+                    });
+                    return this.$createElement("div", data, children);
+                  },
+                  genBodyIntervals: function genBodyIntervals() {
+                    var _this = this;
+
+                    var width = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "convertToUnit"
+                      ]
+                    )(this.intervalWidth);
+                    var data = {
+                      staticClass: "v-calendar-daily__intervals-body",
+                      style: {
+                        width: width,
+                      },
+                      on: this.getDefaultMouseEventHandlers(
+                        ":interval",
+                        function (e) {
+                          return _this.getTimestampAtEvent(
+                            e,
+                            _this.parsedStart
+                          );
+                        }
+                      ),
+                    };
+                    return this.$createElement(
+                      "div",
+                      data,
+                      this.genIntervalLabels()
+                    );
+                  },
+                  genIntervalLabels: function genIntervalLabels() {
+                    if (!this.intervals.length) return null;
+                    return this.intervals[0].map(this.genIntervalLabel);
+                  },
+                  genIntervalLabel: function genIntervalLabel(interval) {
+                    var height = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "convertToUnit"
+                      ]
+                    )(this.intervalHeight);
+                    var short = this.shortIntervals;
+                    var shower =
+                      this.showIntervalLabel || this.showIntervalLabelDefault;
+                    var show = shower(interval);
+                    var label = show
+                      ? this.intervalFormatter(interval, short)
+                      : undefined;
+                    return this.$createElement(
+                      "div",
+                      {
+                        key: interval.time,
+                        staticClass: "v-calendar-daily__interval",
+                        style: {
+                          height: height,
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          "div",
+                          {
+                            staticClass: "v-calendar-daily__interval-text",
+                          },
+                          label
+                        ),
+                      ]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      class: this.classes,
+                      on: {
+                        dragstart: function dragstart(e) {
+                          e.preventDefault();
+                        },
+                      },
+                      directives: [
+                        {
+                          modifiers: {
+                            quiet: true,
+                          },
+                          name: "resize",
+                          value: this.onResize,
+                        },
+                      ],
+                    },
+                    [!this.hideHeader ? this.genHead() : "", this.genBody()]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBreadcrumbs/VBreadcrumbsItem.ts":
-/*!*********************************************************!*\
-  !*** ./src/components/VBreadcrumbs/VBreadcrumbsItem.ts ***!
-  \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/routable */ "./src/mixins/routable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(_mixins_routable__WEBPACK_IMPORTED_MODULE_0__["default"]).extend({
-  name: 'v-breadcrumbs-item',
-  props: {
-    // In a breadcrumb, the currently
-    // active item should be dimmed
-    activeClass: {
-      type: String,
-      default: 'v-breadcrumbs__item--disabled'
-    },
-    ripple: {
-      type: [Boolean, Object],
-      default: false
-    }
-  },
-  computed: {
-    classes: function classes() {
-      var _a;
-
-      return _a = {
-        'v-breadcrumbs__item': true
-      }, _a[this.activeClass] = this.disabled, _a;
-    }
-  },
-  render: function render(h) {
-    var _a = this.generateRouteLink(),
-        tag = _a.tag,
-        data = _a.data;
-
-    return h('li', [h(tag, __assign(__assign({}, data), {
-      attrs: __assign(__assign({}, data.attrs), {
-        'aria-current': this.isActive && this.isLink ? 'page' : undefined
-      })
-    }), this.$slots.default)]);
-  }
-}));
+        /***/ "./src/components/VCalendar/VCalendarMonthly.ts":
+          /*!******************************************************!*\
+  !*** ./src/components/VCalendar/VCalendarMonthly.ts ***!
+  \******************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCalendarWeekly.sass */ "./src/components/VCalendar/VCalendarWeekly.sass"
+              );
+            /* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VCalendarWeekly */ "./src/components/VCalendar/VCalendarWeekly.ts"
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            // Styles
+            // Mixins
+
+            // Util
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-calendar-monthly",
+                computed: {
+                  staticClass: function staticClass() {
+                    return "v-calendar-monthly v-calendar-weekly";
+                  },
+                  parsedStart: function parsedStart() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "getStartOfMonth"
+                      ]
+                    )(
+                      Object(
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                          "parseTimestamp"
+                        ]
+                      )(this.start, true)
+                    );
+                  },
+                  parsedEnd: function parsedEnd() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "getEndOfMonth"
+                      ]
+                    )(
+                      Object(
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                          "parseTimestamp"
+                        ]
+                      )(this.end, true)
+                    );
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBreadcrumbs/index.ts":
-/*!**********************************************!*\
-  !*** ./src/components/VBreadcrumbs/index.ts ***!
-  \**********************************************/
-/*! exports provided: VBreadcrumbs, VBreadcrumbsItem, VBreadcrumbsDivider, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+        /***/ "./src/components/VCalendar/VCalendarWeekly.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VCalendar/VCalendarWeekly.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBreadcrumbs */ "./src/components/VBreadcrumbs/VBreadcrumbs.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBreadcrumbs", function() { return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+        /***/ "./src/components/VCalendar/VCalendarWeekly.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VCalendar/VCalendarWeekly.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCalendarWeekly.sass */ "./src/components/VCalendar/VCalendarWeekly.sass"
+              );
+            /* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _mixins_calendar_base__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./mixins/calendar-base */ "./src/components/VCalendar/mixins/calendar-base.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/dateTimeUtils */ "./src/util/dateTimeUtils.ts"
+              );
+            /* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./util/props */ "./src/components/VCalendar/util/props.ts"
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/* harmony import */ var _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VBreadcrumbsItem */ "./src/components/VBreadcrumbs/VBreadcrumbsItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBreadcrumbsItem", function() { return _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/* harmony import */ var _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VBreadcrumbsDivider */ "./src/components/VBreadcrumbs/VBreadcrumbsDivider.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBreadcrumbsDivider", function() { return _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__["default"]; });
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
+                return ar;
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Util
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_calendar_base__WEBPACK_IMPORTED_MODULE_2__[
+                "default"
+              ].extend({
+                name: "v-calendar-weekly",
+                props:
+                  _util_props__WEBPACK_IMPORTED_MODULE_5__["default"].weeks,
+                computed: {
+                  staticClass: function staticClass() {
+                    return "v-calendar-weekly";
+                  },
+                  classes: function classes() {
+                    return this.themeClasses;
+                  },
+                  parsedMinWeeks: function parsedMinWeeks() {
+                    return parseInt(this.minWeeks);
+                  },
+                  days: function days() {
+                    var minDays =
+                      this.parsedMinWeeks * this.parsedWeekdays.length;
+                    var start = this.getStartOfWeek(this.parsedStart);
+                    var end = this.getEndOfWeek(this.parsedEnd);
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "createDayList"
+                      ]
+                    )(
+                      start,
+                      end,
+                      this.times.today,
+                      this.weekdaySkips,
+                      Number.MAX_SAFE_INTEGER,
+                      minDays
+                    );
+                  },
+                  todayWeek: function todayWeek() {
+                    var today = this.times.today;
+                    var start = this.getStartOfWeek(today);
+                    var end = this.getEndOfWeek(today);
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "createDayList"
+                      ]
+                    )(
+                      start,
+                      end,
+                      today,
+                      this.weekdaySkips,
+                      this.parsedWeekdays.length,
+                      this.parsedWeekdays.length
+                    );
+                  },
+                  monthFormatter: function monthFormatter() {
+                    if (this.monthFormat) {
+                      return this.monthFormat;
+                    }
+
+                    var longOptions = {
+                      timeZone: "UTC",
+                      month: "long",
+                    };
+                    var shortOptions = {
+                      timeZone: "UTC",
+                      month: "short",
+                    };
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "createNativeLocaleFormatter"
+                      ]
+                    )(this.currentLocale, function (_tms, short) {
+                      return short ? shortOptions : longOptions;
+                    });
+                  },
+                },
+                methods: {
+                  isOutside: function isOutside(day) {
+                    var dayIdentifier = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(day);
+                    return (
+                      dayIdentifier <
+                        Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                            "getDayIdentifier"
+                          ]
+                        )(this.parsedStart) ||
+                      dayIdentifier >
+                        Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                            "getDayIdentifier"
+                          ]
+                        )(this.parsedEnd)
+                    );
+                  },
+                  genHead: function genHead() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-weekly__head",
+                      },
+                      this.genHeadDays()
+                    );
+                  },
+                  genHeadDays: function genHeadDays() {
+                    var header = this.todayWeek.map(this.genHeadDay);
+
+                    if (this.showWeek) {
+                      header.unshift(
+                        this.$createElement("div", {
+                          staticClass: "v-calendar-weekly__head-weeknumber",
+                        })
+                      );
+                    }
+
+                    return header;
+                  },
+                  genHeadDay: function genHeadDay(day, index) {
+                    var outside = this.isOutside(this.days[index]);
+                    var color = day.present ? this.color : undefined;
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(color, {
+                        key: day.date,
+                        staticClass: "v-calendar-weekly__head-weekday",
+                        class: this.getRelativeClasses(day, outside),
+                      }),
+                      this.weekdayFormatter(day, this.shortWeekdays)
+                    );
+                  },
+                  genWeeks: function genWeeks() {
+                    var days = this.days;
+                    var weekDays = this.parsedWeekdays.length;
+                    var weeks = [];
+
+                    for (var i = 0; i < days.length; i += weekDays) {
+                      weeks.push(
+                        this.genWeek(
+                          days.slice(i, i + weekDays),
+                          this.getWeekNumber(days[i])
+                        )
+                      );
+                    }
+
+                    return weeks;
+                  },
+                  genWeek: function genWeek(week, weekNumber) {
+                    var _this = this;
+
+                    var weekNodes = week.map(function (day, index) {
+                      return _this.genDay(day, index, week);
+                    });
+
+                    if (this.showWeek) {
+                      weekNodes.unshift(this.genWeekNumber(weekNumber));
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        key: week[0].date,
+                        staticClass: "v-calendar-weekly__week",
+                      },
+                      weekNodes
+                    );
+                  },
+                  getWeekNumber: function getWeekNumber(determineDay) {
+                    return Object(
+                      _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_4__[
+                        "weekNumber"
+                      ]
+                    )(
+                      determineDay.year,
+                      determineDay.month - 1,
+                      determineDay.day,
+                      this.parsedWeekdays[0],
+                      parseInt(this.localeFirstDayOfYear)
+                    );
+                  },
+                  genWeekNumber: function genWeekNumber(weekNumber) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-weekly__weeknumber",
+                      },
+                      [this.$createElement("small", String(weekNumber))]
+                    );
+                  },
+                  genDay: function genDay(day, index, week) {
+                    var outside = this.isOutside(day);
+                    return this.$createElement(
+                      "div",
+                      {
+                        key: day.date,
+                        staticClass: "v-calendar-weekly__day",
+                        class: this.getRelativeClasses(day, outside),
+                        on: this.getDefaultMouseEventHandlers(
+                          ":day",
+                          function (_e) {
+                            return day;
+                          }
+                        ),
+                      },
+                      __spread(
+                        [this.genDayLabel(day)],
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                        )(this, "day", function () {
+                          return __assign(
+                            {
+                              outside: outside,
+                              index: index,
+                              week: week,
+                            },
+                            day
+                          );
+                        }) || []
+                      )
+                    );
+                  },
+                  genDayLabel: function genDayLabel(day) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-calendar-weekly__day-label",
+                      },
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                      )(this, "day-label", day) || [this.genDayLabelButton(day)]
+                    );
+                  },
+                  genDayLabelButton: function genDayLabelButton(day) {
+                    var color = day.present ? this.color : "transparent";
+                    var hasMonth = day.day === 1 && this.showMonthOnFirst;
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        props: {
+                          color: color,
+                          fab: true,
+                          depressed: true,
+                          small: true,
+                        },
+                        on: this.getMouseEventHandlers(
+                          {
+                            "click:date": {
+                              event: "click",
+                              stop: true,
+                            },
+                            "contextmenu:date": {
+                              event: "contextmenu",
+                              stop: true,
+                              prevent: true,
+                              result: false,
+                            },
+                          },
+                          function (_e) {
+                            return day;
+                          }
+                        ),
+                      },
+                      hasMonth
+                        ? this.monthFormatter(day, this.shortMonths) +
+                            " " +
+                            this.dayFormatter(day, false)
+                        : this.dayFormatter(day, false)
+                    );
+                  },
+                  genDayMonth: function genDayMonth(day) {
+                    var color = day.present ? this.color : undefined;
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(color, {
+                        staticClass: "v-calendar-weekly__day-month",
+                      }),
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                      )(this, "day-month", day) ||
+                        this.monthFormatter(day, this.shortMonths)
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: this.staticClass,
+                      class: this.classes,
+                      on: {
+                        dragstart: function dragstart(e) {
+                          e.preventDefault();
+                        },
+                      },
+                    },
+                    __spread(
+                      [!this.hideHeader ? this.genHead() : ""],
+                      this.genWeeks()
+                    )
+                  );
+                },
+              });
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VBreadcrumbs: _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VBreadcrumbsItem: _VBreadcrumbsItem__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VBreadcrumbsDivider: _VBreadcrumbsDivider__WEBPACK_IMPORTED_MODULE_2__["default"]
-  }
-});
+        /***/ "./src/components/VCalendar/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VCalendar/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VCalendar, VCalendarCategory, VCalendarDaily, VCalendarWeekly, VCalendarMonthly, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCalendar__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCalendar */ "./src/components/VCalendar/VCalendar.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendar",
+              function () {
+                return _VCalendar__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VCalendarDaily */ "./src/components/VCalendar/VCalendarDaily.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarDaily",
+              function () {
+                return _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VCalendarWeekly */ "./src/components/VCalendar/VCalendarWeekly.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarWeekly",
+              function () {
+                return _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_2__["default"];
+              }
+            );
+
+            /* harmony import */ var _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VCalendarMonthly */ "./src/components/VCalendar/VCalendarMonthly.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarMonthly",
+              function () {
+                return _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VCalendarCategory__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VCalendarCategory */ "./src/components/VCalendar/VCalendarCategory.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarCategory",
+              function () {
+                return _VCalendarCategory__WEBPACK_IMPORTED_MODULE_4__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VCalendar: _VCalendar__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VCalendarCategory:
+                  _VCalendarCategory__WEBPACK_IMPORTED_MODULE_4__["default"],
+                VCalendarDaily:
+                  _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VCalendarWeekly:
+                  _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_2__["default"],
+                VCalendarMonthly:
+                  _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__["default"],
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBtn/VBtn.sass":
-/*!***************************************!*\
-  !*** ./src/components/VBtn/VBtn.sass ***!
-  \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VCalendar/mixins/calendar-base.ts":
+          /*!**********************************************************!*\
+  !*** ./src/components/VCalendar/mixins/calendar-base.ts ***!
+  \**********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../../mixins/localable */ "./src/mixins/localable/index.ts"
+              );
+            /* harmony import */ var _mouse__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./mouse */ "./src/components/VCalendar/mixins/mouse.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _times__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./times */ "./src/components/VCalendar/mixins/times.ts"
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../util/props */ "./src/components/VCalendar/util/props.ts"
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            // Mixins
+
+            // Directives
+
+            // Util
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_localable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mouse__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _times__WEBPACK_IMPORTED_MODULE_5__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "calendar-base",
+                directives: {
+                  Resize:
+                    _directives_resize__WEBPACK_IMPORTED_MODULE_6__["default"],
+                },
+                props: _util_props__WEBPACK_IMPORTED_MODULE_7__["default"].base,
+                computed: {
+                  parsedWeekdays: function parsedWeekdays() {
+                    return Array.isArray(this.weekdays)
+                      ? this.weekdays
+                      : (this.weekdays || "").split(",").map(function (x) {
+                          return parseInt(x, 10);
+                        });
+                  },
+                  weekdaySkips: function weekdaySkips() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "getWeekdaySkips"
+                      ]
+                    )(this.parsedWeekdays);
+                  },
+                  weekdaySkipsReverse: function weekdaySkipsReverse() {
+                    var reversed = this.weekdaySkips.slice();
+                    reversed.reverse();
+                    return reversed;
+                  },
+                  parsedStart: function parsedStart() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "parseTimestamp"
+                      ]
+                    )(this.start, true);
+                  },
+                  parsedEnd: function parsedEnd() {
+                    var start = this.parsedStart;
+                    var end = this.end
+                      ? Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                            "parseTimestamp"
+                          ]
+                        )(this.end) || start
+                      : start;
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "getTimestampIdentifier"
+                      ]
+                    )(end) <
+                      Object(
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                          "getTimestampIdentifier"
+                        ]
+                      )(start)
+                      ? start
+                      : end;
+                  },
+                  days: function days() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "createDayList"
+                      ]
+                    )(
+                      this.parsedStart,
+                      this.parsedEnd,
+                      this.times.today,
+                      this.weekdaySkips
+                    );
+                  },
+                  dayFormatter: function dayFormatter() {
+                    if (this.dayFormat) {
+                      return this.dayFormat;
+                    }
+
+                    var options = {
+                      timeZone: "UTC",
+                      day: "numeric",
+                    };
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "createNativeLocaleFormatter"
+                      ]
+                    )(this.currentLocale, function (_tms, _short) {
+                      return options;
+                    });
+                  },
+                  weekdayFormatter: function weekdayFormatter() {
+                    if (this.weekdayFormat) {
+                      return this.weekdayFormat;
+                    }
+
+                    var longOptions = {
+                      timeZone: "UTC",
+                      weekday: "long",
+                    };
+                    var shortOptions = {
+                      timeZone: "UTC",
+                      weekday: "short",
+                    };
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "createNativeLocaleFormatter"
+                      ]
+                    )(this.currentLocale, function (_tms, short) {
+                      return short ? shortOptions : longOptions;
+                    });
+                  },
+                },
+                methods: {
+                  getRelativeClasses: function getRelativeClasses(
+                    timestamp,
+                    outside
+                  ) {
+                    if (outside === void 0) {
+                      outside = false;
+                    }
+
+                    return {
+                      "v-present": timestamp.present,
+                      "v-past": timestamp.past,
+                      "v-future": timestamp.future,
+                      "v-outside": outside,
+                    };
+                  },
+                  getStartOfWeek: function getStartOfWeek(timestamp) {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "getStartOfWeek"
+                      ]
+                    )(timestamp, this.parsedWeekdays, this.times.today);
+                  },
+                  getEndOfWeek: function getEndOfWeek(timestamp) {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "getEndOfWeek"
+                      ]
+                    )(timestamp, this.parsedWeekdays, this.times.today);
+                  },
+                  getFormatter: function getFormatter(options) {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_8__[
+                        "createNativeLocaleFormatter"
+                      ]
+                    )(this.locale, function (_tms, _short) {
+                      return options;
+                    });
+                  },
+                },
+              });
 
-// extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VCalendar/mixins/calendar-with-events.sass":
+          /*!*******************************************************************!*\
+  !*** ./src/components/VCalendar/mixins/calendar-with-events.sass ***!
+  \*******************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VBtn/VBtn.ts":
-/*!*************************************!*\
-  !*** ./src/components/VBtn/VBtn.ts ***!
-  \*************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBtn_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBtn.sass */ "./src/components/VBtn/VBtn.sass");
-/* harmony import */ var _VBtn_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VBtn_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet */ "./src/components/VSheet/index.ts");
-/* harmony import */ var _VProgressCircular__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VProgressCircular */ "./src/components/VProgressCircular/index.ts");
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts");
-/* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/routable */ "./src/mixins/routable/index.ts");
-/* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+        /***/ "./src/components/VCalendar/mixins/calendar-with-events.ts":
+          /*!*****************************************************************!*\
+  !*** ./src/components/VCalendar/mixins/calendar-with-events.ts ***!
+  \*****************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _calendar_with_events_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./calendar-with-events.sass */ "./src/components/VCalendar/mixins/calendar-with-events.sass"
+              );
+            /* harmony import */ var _calendar_with_events_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _calendar_with_events_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _calendar_base__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./calendar-base */ "./src/components/VCalendar/mixins/calendar-base.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../util/props */ "./src/components/VCalendar/util/props.ts"
+              );
+            /* harmony import */ var _modes__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../modes */ "./src/components/VCalendar/modes/index.ts"
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            /* harmony import */ var _util_events__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../util/events */ "./src/components/VCalendar/util/events.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Directives
+
+            // Mixins
+
+            // Helpers
+
+            // Util
+
+            var WIDTH_FULL = 100;
+            var WIDTH_START = 95;
+            var MINUTES_IN_DAY = 1440;
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _calendar_base__WEBPACK_IMPORTED_MODULE_2__["default"].extend({
+                name: "calendar-with-events",
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_1__["default"],
+                },
+                props:
+                  _util_props__WEBPACK_IMPORTED_MODULE_4__["default"].events,
+                computed: {
+                  noEvents: function noEvents() {
+                    return this.events.length === 0;
+                  },
+                  parsedEvents: function parsedEvents() {
+                    return this.events.map(this.parseEvent);
+                  },
+                  parsedEventOverlapThreshold:
+                    function parsedEventOverlapThreshold() {
+                      return parseInt(this.eventOverlapThreshold);
+                    },
+                  eventColorFunction: function eventColorFunction() {
+                    var _this = this;
+
+                    return typeof this.eventColor === "function"
+                      ? this.eventColor
+                      : function () {
+                          return _this.eventColor;
+                        };
+                  },
+                  eventTimedFunction: function eventTimedFunction() {
+                    var _this = this;
+
+                    return typeof this.eventTimed === "function"
+                      ? this.eventTimed
+                      : function (event) {
+                          return !!event[_this.eventTimed];
+                        };
+                  },
+                  eventCategoryFunction: function eventCategoryFunction() {
+                    var _this = this;
+
+                    return typeof this.eventCategory === "function"
+                      ? this.eventCategory
+                      : function (event) {
+                          return event[_this.eventCategory];
+                        };
+                  },
+                  eventTextColorFunction: function eventTextColorFunction() {
+                    var _this = this;
+
+                    return typeof this.eventTextColor === "function"
+                      ? this.eventTextColor
+                      : function () {
+                          return _this.eventTextColor;
+                        };
+                  },
+                  eventNameFunction: function eventNameFunction() {
+                    var _this = this;
+
+                    return typeof this.eventName === "function"
+                      ? this.eventName
+                      : function (event, timedEvent) {
+                          return Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                              "escapeHTML"
+                            ]
+                          )(event.input[_this.eventName]);
+                        };
+                  },
+                  eventModeFunction: function eventModeFunction() {
+                    return typeof this.eventOverlapMode === "function"
+                      ? this.eventOverlapMode
+                      : _modes__WEBPACK_IMPORTED_MODULE_5__[
+                          "CalendarEventOverlapModes"
+                        ][this.eventOverlapMode];
+                  },
+                  eventWeekdays: function eventWeekdays() {
+                    return this.parsedWeekdays;
+                  },
+                  categoryMode: function categoryMode() {
+                    return false;
+                  },
+                },
+                methods: {
+                  parseEvent: function parseEvent(input, index) {
+                    if (index === void 0) {
+                      index = 0;
+                    }
+
+                    return Object(
+                      _util_events__WEBPACK_IMPORTED_MODULE_7__["parseEvent"]
+                    )(
+                      input,
+                      index,
+                      this.eventStart,
+                      this.eventEnd,
+                      this.eventTimedFunction(input),
+                      this.categoryMode
+                        ? this.eventCategoryFunction(input)
+                        : false
+                    );
+                  },
+                  formatTime: function formatTime(withTime, ampm) {
+                    var formatter = this.getFormatter({
+                      timeZone: "UTC",
+                      hour: "numeric",
+                      minute: withTime.minute > 0 ? "numeric" : undefined,
+                    });
+                    return formatter(withTime, true);
+                  },
+                  updateEventVisibility: function updateEventVisibility() {
+                    if (this.noEvents || !this.eventMore) {
+                      return;
+                    }
+
+                    var eventHeight = this.eventHeight;
+                    var eventsMap = this.getEventsMap();
+
+                    for (var date in eventsMap) {
+                      var _a = eventsMap[date],
+                        parent = _a.parent,
+                        events = _a.events,
+                        more = _a.more;
+
+                      if (!more) {
+                        break;
+                      }
+
+                      var parentBounds = parent.getBoundingClientRect();
+                      var last = events.length - 1;
+                      var hide = false;
+                      var hidden = 0;
+
+                      for (var i = 0; i <= last; i++) {
+                        if (!hide) {
+                          var eventBounds = events[i].getBoundingClientRect();
+                          hide =
+                            i === last
+                              ? eventBounds.bottom > parentBounds.bottom
+                              : eventBounds.bottom + eventHeight >
+                                parentBounds.bottom;
+                        }
+
+                        if (hide) {
+                          events[i].style.display = "none";
+                          hidden++;
+                        }
+                      }
+
+                      if (hide) {
+                        more.style.display = "";
+                        more.innerHTML = this.$vuetify.lang.t(
+                          this.eventMoreText,
+                          hidden
+                        );
+                      } else {
+                        more.style.display = "none";
+                      }
+                    }
+                  },
+                  getEventsMap: function getEventsMap() {
+                    var eventsMap = {};
+                    var elements = this.$refs.events;
+
+                    if (!elements || !elements.forEach) {
+                      return eventsMap;
+                    }
+
+                    elements.forEach(function (el) {
+                      var date = el.getAttribute("data-date");
+
+                      if (el.parentElement && date) {
+                        if (!(date in eventsMap)) {
+                          eventsMap[date] = {
+                            parent: el.parentElement,
+                            more: null,
+                            events: [],
+                          };
+                        }
+
+                        if (el.getAttribute("data-more")) {
+                          eventsMap[date].more = el;
+                        } else {
+                          eventsMap[date].events.push(el);
+                          el.style.display = "";
+                        }
+                      }
+                    });
+                    return eventsMap;
+                  },
+                  genDayEvent: function genDayEvent(_a, day) {
+                    var event = _a.event;
+                    var eventHeight = this.eventHeight;
+                    var eventMarginBottom = this.eventMarginBottom;
+                    var dayIdentifier = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(day);
+                    var week = day.week;
+                    var start = dayIdentifier === event.startIdentifier;
+                    var end = dayIdentifier === event.endIdentifier;
+                    var width = WIDTH_START;
+
+                    if (!this.categoryMode) {
+                      for (var i = day.index + 1; i < week.length; i++) {
+                        var weekdayIdentifier = Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                            "getDayIdentifier"
+                          ]
+                        )(week[i]);
+
+                        if (event.endIdentifier >= weekdayIdentifier) {
+                          width += WIDTH_FULL;
+                          end =
+                            end || weekdayIdentifier === event.endIdentifier;
+                        } else {
+                          end = true;
+                          break;
+                        }
+                      }
+                    }
+
+                    var scope = {
+                      eventParsed: event,
+                      day: day,
+                      start: start,
+                      end: end,
+                      timed: false,
+                    };
+                    return this.genEvent(event, scope, false, {
+                      staticClass: "v-event",
+                      class: {
+                        "v-event-start": start,
+                        "v-event-end": end,
+                      },
+                      style: {
+                        height: eventHeight + "px",
+                        width: width + "%",
+                        "margin-bottom": eventMarginBottom + "px",
+                      },
+                      attrs: {
+                        "data-date": day.date,
+                      },
+                      key: event.index,
+                      ref: "events",
+                      refInFor: true,
+                    });
+                  },
+                  genTimedEvent: function genTimedEvent(_a, day) {
+                    var event = _a.event,
+                      left = _a.left,
+                      width = _a.width;
+
+                    if (
+                      day.timeDelta(event.end) <= 0 ||
+                      day.timeDelta(event.start) >= 1
+                    ) {
+                      return false;
+                    }
+
+                    var dayIdentifier = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(day);
+                    var start = event.startIdentifier >= dayIdentifier;
+                    var end = event.endIdentifier > dayIdentifier;
+                    var top = start ? day.timeToY(event.start) : 0;
+                    var bottom = end
+                      ? day.timeToY(MINUTES_IN_DAY)
+                      : day.timeToY(event.end);
+                    var height = Math.max(this.eventHeight, bottom - top);
+                    var scope = {
+                      eventParsed: event,
+                      day: day,
+                      start: start,
+                      end: end,
+                      timed: true,
+                    };
+                    return this.genEvent(event, scope, true, {
+                      staticClass: "v-event-timed",
+                      style: {
+                        top: top + "px",
+                        height: height + "px",
+                        left: left + "%",
+                        width: width + "%",
+                      },
+                    });
+                  },
+                  genEvent: function genEvent(
+                    event,
+                    scopeInput,
+                    timedEvent,
+                    data
+                  ) {
+                    var _this = this;
+
+                    var _a;
+
+                    var slot = this.$scopedSlots.event;
+                    var text = this.eventTextColorFunction(event.input);
+                    var background = this.eventColorFunction(event.input);
+                    var overlapsNoon =
+                      event.start.hour < 12 && event.end.hour >= 12;
+                    var singline =
+                      Object(
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                          "diffMinutes"
+                        ]
+                      )(event.start, event.end) <=
+                      this.parsedEventOverlapThreshold;
+                    var formatTime = this.formatTime;
+
+                    var timeSummary = function timeSummary() {
+                      return (
+                        formatTime(event.start, overlapsNoon) +
+                        " - " +
+                        formatTime(event.end, true)
+                      );
+                    };
+
+                    var eventSummary = function eventSummary() {
+                      var name = _this.eventNameFunction(event, timedEvent);
+
+                      if (event.start.hasTime) {
+                        if (timedEvent) {
+                          var time = timeSummary();
+                          var delimiter = singline ? ", " : "<br>";
+                          return (
+                            "<strong>" + name + "</strong>" + delimiter + time
+                          );
+                        } else {
+                          var time = formatTime(event.start, true);
+                          return "<strong>" + time + "</strong> " + name;
+                        }
+                      }
+
+                      return name;
+                    };
+
+                    var scope = __assign(__assign({}, scopeInput), {
+                      event: event.input,
+                      outside: scopeInput.day.outside,
+                      singline: singline,
+                      overlapsNoon: overlapsNoon,
+                      formatTime: formatTime,
+                      timeSummary: timeSummary,
+                      eventSummary: eventSummary,
+                    });
+
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(
+                        text,
+                        this.setBackgroundColor(
+                          background,
+                          __assign(
+                            {
+                              on: this.getDefaultMouseEventHandlers(
+                                ":event",
+                                function (nativeEvent) {
+                                  return __assign(__assign({}, scope), {
+                                    nativeEvent: nativeEvent,
+                                  });
+                                }
+                              ),
+                              directives: [
+                                {
+                                  name: "ripple",
+                                  value:
+                                    (_a = this.eventRipple) !== null &&
+                                    _a !== void 0
+                                      ? _a
+                                      : true,
+                                },
+                              ],
+                            },
+                            data
+                          )
+                        )
+                      ),
+                      slot ? slot(scope) : [this.genName(eventSummary)]
+                    );
+                  },
+                  genName: function genName(eventSummary) {
+                    return this.$createElement("div", {
+                      staticClass: "pl-1",
+                      domProps: {
+                        innerHTML: eventSummary(),
+                      },
+                    });
+                  },
+                  genPlaceholder: function genPlaceholder(day) {
+                    var height = this.eventHeight + this.eventMarginBottom;
+                    return this.$createElement("div", {
+                      style: {
+                        height: height + "px",
+                      },
+                      attrs: {
+                        "data-date": day.date,
+                      },
+                      ref: "events",
+                      refInFor: true,
+                    });
+                  },
+                  genMore: function genMore(day) {
+                    var _this = this;
+
+                    var _a;
+
+                    var eventHeight = this.eventHeight;
+                    var eventMarginBottom = this.eventMarginBottom;
+                    return this.$createElement("div", {
+                      staticClass: "v-event-more pl-1",
+                      class: {
+                        "v-outside": day.outside,
+                      },
+                      attrs: {
+                        "data-date": day.date,
+                        "data-more": 1,
+                      },
+                      directives: [
+                        {
+                          name: "ripple",
+                          value:
+                            (_a = this.eventRipple) !== null && _a !== void 0
+                              ? _a
+                              : true,
+                        },
+                      ],
+                      on: {
+                        click: function click() {
+                          return _this.$emit("click:more", day);
+                        },
+                      },
+                      style: {
+                        display: "none",
+                        height: eventHeight + "px",
+                        "margin-bottom": eventMarginBottom + "px",
+                      },
+                      ref: "events",
+                      refInFor: true,
+                    });
+                  },
+                  getVisibleEvents: function getVisibleEvents() {
+                    var start = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(this.days[0]);
+                    var end = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(this.days[this.days.length - 1]);
+                    return this.parsedEvents.filter(function (event) {
+                      return Object(
+                        _util_events__WEBPACK_IMPORTED_MODULE_7__[
+                          "isEventOverlapping"
+                        ]
+                      )(event, start, end);
+                    });
+                  },
+                  isEventForCategory: function isEventForCategory(
+                    event,
+                    category
+                  ) {
+                    return (
+                      !this.categoryMode ||
+                      category === event.category ||
+                      (typeof event.category !== "string" && category === null)
+                    );
+                  },
+                  getEventsForDay: function getEventsForDay(day) {
+                    var identifier = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(day);
+                    var firstWeekday = this.eventWeekdays[0];
+                    return this.parsedEvents.filter(function (event) {
+                      return Object(
+                        _util_events__WEBPACK_IMPORTED_MODULE_7__[
+                          "isEventStart"
+                        ]
+                      )(event, day, identifier, firstWeekday);
+                    });
+                  },
+                  getEventsForDayAll: function getEventsForDayAll(day) {
+                    var _this = this;
+
+                    var identifier = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(day);
+                    var firstWeekday = this.eventWeekdays[0];
+                    return this.parsedEvents.filter(function (event) {
+                      return (
+                        event.allDay &&
+                        (_this.categoryMode
+                          ? Object(
+                              _util_events__WEBPACK_IMPORTED_MODULE_7__[
+                                "isEventOn"
+                              ]
+                            )(event, identifier)
+                          : Object(
+                              _util_events__WEBPACK_IMPORTED_MODULE_7__[
+                                "isEventStart"
+                              ]
+                            )(event, day, identifier, firstWeekday)) &&
+                        _this.isEventForCategory(event, day.category)
+                      );
+                    });
+                  },
+                  getEventsForDayTimed: function getEventsForDayTimed(day) {
+                    var _this = this;
+
+                    var identifier = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_6__[
+                        "getDayIdentifier"
+                      ]
+                    )(day);
+                    return this.parsedEvents.filter(function (event) {
+                      return (
+                        !event.allDay &&
+                        Object(
+                          _util_events__WEBPACK_IMPORTED_MODULE_7__["isEventOn"]
+                        )(event, identifier) &&
+                        _this.isEventForCategory(event, day.category)
+                      );
+                    });
+                  },
+                  getScopedSlots: function getScopedSlots() {
+                    var _this = this;
+
+                    if (this.noEvents) {
+                      return __assign({}, this.$scopedSlots);
+                    }
+
+                    var mode = this.eventModeFunction(
+                      this.parsedEvents,
+                      this.eventWeekdays[0],
+                      this.parsedEventOverlapThreshold
+                    );
+
+                    var isNode = function isNode(input) {
+                      return !!input;
+                    };
+
+                    var getSlotChildren = function getSlotChildren(
+                      day,
+                      getter,
+                      mapper,
+                      timed
+                    ) {
+                      var events = getter(day);
+                      var visuals = mode(
+                        day,
+                        events,
+                        timed,
+                        _this.categoryMode
+                      );
+
+                      if (timed) {
+                        return visuals
+                          .map(function (visual) {
+                            return mapper(visual, day);
+                          })
+                          .filter(isNode);
+                      }
+
+                      var children = [];
+                      visuals.forEach(function (visual, index) {
+                        while (children.length < visual.column) {
+                          children.push(_this.genPlaceholder(day));
+                        }
+
+                        var mapped = mapper(visual, day);
+
+                        if (mapped) {
+                          children.push(mapped);
+                        }
+                      });
+                      return children;
+                    };
+
+                    var slots = this.$scopedSlots;
+                    var slotDay = slots.day;
+                    var slotDayHeader = slots["day-header"];
+                    var slotDayBody = slots["day-body"];
+                    return __assign(__assign({}, slots), {
+                      day: function day(_day) {
+                        var children = getSlotChildren(
+                          _day,
+                          _this.getEventsForDay,
+                          _this.genDayEvent,
+                          false
+                        );
+
+                        if (
+                          children &&
+                          children.length > 0 &&
+                          _this.eventMore
+                        ) {
+                          children.push(_this.genMore(_day));
+                        }
+
+                        if (slotDay) {
+                          var slot = slotDay(_day);
+
+                          if (slot) {
+                            children = children ? children.concat(slot) : slot;
+                          }
+                        }
+
+                        return children;
+                      },
+                      "day-header": function dayHeader(day) {
+                        var children = getSlotChildren(
+                          day,
+                          _this.getEventsForDayAll,
+                          _this.genDayEvent,
+                          false
+                        );
+
+                        if (slotDayHeader) {
+                          var slot = slotDayHeader(day);
+
+                          if (slot) {
+                            children = children ? children.concat(slot) : slot;
+                          }
+                        }
+
+                        return children;
+                      },
+                      "day-body": function dayBody(day) {
+                        var events = getSlotChildren(
+                          day,
+                          _this.getEventsForDayTimed,
+                          _this.genTimedEvent,
+                          true
+                        );
+                        var children = [
+                          _this.$createElement(
+                            "div",
+                            {
+                              staticClass: "v-event-timed-container",
+                            },
+                            events
+                          ),
+                        ];
+
+                        if (slotDayBody) {
+                          var slot = slotDayBody(day);
+
+                          if (slot) {
+                            children = children.concat(slot);
+                          }
+                        }
+
+                        return children;
+                      },
+                    });
+                  },
+                },
+              });
 
-  return ar;
-}; // Styles
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/mixins/calendar-with-intervals.ts":
+          /*!********************************************************************!*\
+  !*** ./src/components/VCalendar/mixins/calendar-with-intervals.ts ***!
+  \********************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _calendar_base__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./calendar-base */ "./src/components/VCalendar/mixins/calendar-base.ts"
+              );
+            /* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../util/props */ "./src/components/VCalendar/util/props.ts"
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            // Mixins
+            // Util
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _calendar_base__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
+                name: "calendar-with-intervals",
+                props:
+                  _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].intervals,
+                computed: {
+                  parsedFirstInterval: function parsedFirstInterval() {
+                    return parseInt(this.firstInterval);
+                  },
+                  parsedIntervalMinutes: function parsedIntervalMinutes() {
+                    return parseInt(this.intervalMinutes);
+                  },
+                  parsedIntervalCount: function parsedIntervalCount() {
+                    return parseInt(this.intervalCount);
+                  },
+                  parsedIntervalHeight: function parsedIntervalHeight() {
+                    return parseFloat(this.intervalHeight);
+                  },
+                  parsedFirstTime: function parsedFirstTime() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTime"]
+                    )(this.firstTime);
+                  },
+                  firstMinute: function firstMinute() {
+                    var time = this.parsedFirstTime;
+                    return time !== false &&
+                      time >= 0 &&
+                      time <=
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                          "MINUTES_IN_DAY"
+                        ]
+                      ? time
+                      : this.parsedFirstInterval * this.parsedIntervalMinutes;
+                  },
+                  bodyHeight: function bodyHeight() {
+                    return this.parsedIntervalCount * this.parsedIntervalHeight;
+                  },
+                  days: function days() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "createDayList"
+                      ]
+                    )(
+                      this.parsedStart,
+                      this.parsedEnd,
+                      this.times.today,
+                      this.weekdaySkips,
+                      this.maxDays
+                    );
+                  },
+                  intervals: function intervals() {
+                    var days = this.days;
+                    var first = this.firstMinute;
+                    var minutes = this.parsedIntervalMinutes;
+                    var count = this.parsedIntervalCount;
+                    var now = this.times.now;
+                    return days.map(function (d) {
+                      return Object(
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                          "createIntervalList"
+                        ]
+                      )(d, first, minutes, count, now);
+                    });
+                  },
+                  intervalFormatter: function intervalFormatter() {
+                    if (this.intervalFormat) {
+                      return this.intervalFormat;
+                    }
+
+                    var longOptions = {
+                      timeZone: "UTC",
+                      hour: "2-digit",
+                      minute: "2-digit",
+                    };
+                    var shortOptions = {
+                      timeZone: "UTC",
+                      hour: "numeric",
+                      minute: "2-digit",
+                    };
+                    var shortHourOptions = {
+                      timeZone: "UTC",
+                      hour: "numeric",
+                    };
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "createNativeLocaleFormatter"
+                      ]
+                    )(this.currentLocale, function (tms, short) {
+                      return short
+                        ? tms.minute === 0
+                          ? shortHourOptions
+                          : shortOptions
+                        : longOptions;
+                    });
+                  },
+                },
+                methods: {
+                  showIntervalLabelDefault: function showIntervalLabelDefault(
+                    interval
+                  ) {
+                    var first = this.intervals[0][0];
+                    var isFirst =
+                      first.hour === interval.hour &&
+                      first.minute === interval.minute;
+                    return !isFirst;
+                  },
+                  intervalStyleDefault: function intervalStyleDefault(
+                    _interval
+                  ) {
+                    return undefined;
+                  },
+                  getTimestampAtEvent: function getTimestampAtEvent(e, day) {
+                    var timestamp = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "copyTimestamp"
+                      ]
+                    )(day);
+                    var bounds = e.currentTarget.getBoundingClientRect();
+                    var baseMinutes = this.firstMinute;
+                    var touchEvent = e;
+                    var mouseEvent = e;
+                    var touches =
+                      touchEvent.changedTouches || touchEvent.touches;
+                    var clientY =
+                      touches && touches[0]
+                        ? touches[0].clientY
+                        : mouseEvent.clientY;
+                    var addIntervals =
+                      (clientY - bounds.top) / this.parsedIntervalHeight;
+                    var addMinutes = Math.floor(
+                      addIntervals * this.parsedIntervalMinutes
+                    );
+                    var minutes = baseMinutes + addMinutes;
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "updateMinutes"
+                      ]
+                    )(timestamp, minutes, this.times.now);
+                  },
+                  getSlotScope: function getSlotScope(timestamp) {
+                    var scope = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__[
+                        "copyTimestamp"
+                      ]
+                    )(timestamp);
+                    scope.timeToY = this.timeToY;
+                    scope.timeDelta = this.timeDelta;
+                    scope.minutesToPixels = this.minutesToPixels;
+                    scope.week = this.days;
+                    return scope;
+                  },
+                  scrollToTime: function scrollToTime(time) {
+                    var y = this.timeToY(time);
+                    var pane = this.$refs.scrollArea;
+
+                    if (y === false || !pane) {
+                      return false;
+                    }
+
+                    pane.scrollTop = y;
+                    return true;
+                  },
+                  minutesToPixels: function minutesToPixels(minutes) {
+                    return (
+                      (minutes / this.parsedIntervalMinutes) *
+                      this.parsedIntervalHeight
+                    );
+                  },
+                  timeToY: function timeToY(time, clamp) {
+                    if (clamp === void 0) {
+                      clamp = true;
+                    }
+
+                    var y = this.timeDelta(time);
+
+                    if (y !== false) {
+                      y *= this.bodyHeight;
+
+                      if (clamp) {
+                        if (y < 0) {
+                          y = 0;
+                        }
+
+                        if (y > this.bodyHeight) {
+                          y = this.bodyHeight;
+                        }
+                      }
+                    }
+
+                    return y;
+                  },
+                  timeDelta: function timeDelta(time) {
+                    var minutes = Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTime"]
+                    )(time);
+
+                    if (minutes === false) {
+                      return false;
+                    }
+
+                    var min = this.firstMinute;
+                    var gap =
+                      this.parsedIntervalCount * this.parsedIntervalMinutes;
+                    return (minutes - min) / gap;
+                  },
+                },
+              });
 
- // Extensions
+            /***/
+          },
 
- // Components
+        /***/ "./src/components/VCalendar/mixins/mouse.ts":
+          /*!**************************************************!*\
+  !*** ./src/components/VCalendar/mixins/mouse.ts ***!
+  \**************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "mouse",
+                methods: {
+                  getDefaultMouseEventHandlers:
+                    function getDefaultMouseEventHandlers(suffix, getEvent) {
+                      var _a;
+
+                      return this.getMouseEventHandlers(
+                        ((_a = {}),
+                        (_a["click" + suffix] = {
+                          event: "click",
+                        }),
+                        (_a["contextmenu" + suffix] = {
+                          event: "contextmenu",
+                          prevent: true,
+                          result: false,
+                        }),
+                        (_a["mousedown" + suffix] = {
+                          event: "mousedown",
+                        }),
+                        (_a["mousemove" + suffix] = {
+                          event: "mousemove",
+                        }),
+                        (_a["mouseup" + suffix] = {
+                          event: "mouseup",
+                        }),
+                        (_a["mouseenter" + suffix] = {
+                          event: "mouseenter",
+                        }),
+                        (_a["mouseleave" + suffix] = {
+                          event: "mouseleave",
+                        }),
+                        (_a["touchstart" + suffix] = {
+                          event: "touchstart",
+                        }),
+                        (_a["touchmove" + suffix] = {
+                          event: "touchmove",
+                        }),
+                        (_a["touchend" + suffix] = {
+                          event: "touchend",
+                        }),
+                        _a),
+                        getEvent
+                      );
+                    },
+                  getMouseEventHandlers: function getMouseEventHandlers(
+                    events,
+                    getEvent
+                  ) {
+                    var _this = this;
+
+                    var on = {};
+
+                    var _loop_1 = function _loop_1(event) {
+                      var eventOptions = events[event];
+                      if (!this_1.$listeners[event]) return "continue"; // TODO somehow pull in modifiers
+
+                      var prefix = eventOptions.passive
+                        ? "&"
+                        : (eventOptions.once ? "~" : "") +
+                          (eventOptions.capture ? "!" : "");
+                      var key = prefix + eventOptions.event;
+
+                      var handler = function handler(e) {
+                        var mouseEvent = e;
+
+                        if (
+                          eventOptions.button === undefined ||
+                          (mouseEvent.buttons > 0 &&
+                            mouseEvent.button === eventOptions.button)
+                        ) {
+                          if (eventOptions.prevent) {
+                            e.preventDefault();
+                          }
+
+                          if (eventOptions.stop) {
+                            e.stopPropagation();
+                          }
+
+                          _this.$emit(event, getEvent(e));
+                        }
+
+                        return eventOptions.result;
+                      };
+
+                      if (key in on) {
+                        /* istanbul ignore next */
+                        if (Array.isArray(on[key])) {
+                          on[key].push(handler);
+                        } else {
+                          on[key] = [on[key], handler];
+                        }
+                      } else {
+                        on[key] = handler;
+                      }
+                    };
+
+                    var this_1 = this;
+
+                    for (var event in events) {
+                      _loop_1(event);
+                    }
+
+                    return on;
+                  },
+                },
+              });
 
- // Mixins
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/mixins/times.ts":
+          /*!**************************************************!*\
+  !*** ./src/components/VCalendar/mixins/times.ts ***!
+  \**************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "times",
+                props: {
+                  now: {
+                    type: String,
+                    validator:
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_1__[
+                        "validateTimestamp"
+                      ],
+                  },
+                },
+                data: function data() {
+                  return {
+                    times: {
+                      now: Object(
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_1__[
+                          "parseTimestamp"
+                        ]
+                      )("0000-00-00 00:00", true),
+                      today: Object(
+                        _util_timestamp__WEBPACK_IMPORTED_MODULE_1__[
+                          "parseTimestamp"
+                        ]
+                      )("0000-00-00", true),
+                    },
+                  };
+                },
+                computed: {
+                  parsedNow: function parsedNow() {
+                    return this.now
+                      ? Object(
+                          _util_timestamp__WEBPACK_IMPORTED_MODULE_1__[
+                            "parseTimestamp"
+                          ]
+                        )(this.now, true)
+                      : null;
+                  },
+                },
+                watch: {
+                  parsedNow: "updateTimes",
+                },
+                created: function created() {
+                  this.updateTimes();
+                  this.setPresent();
+                },
+                methods: {
+                  setPresent: function setPresent() {
+                    this.times.now.present = this.times.today.present = true;
+                    this.times.now.past = this.times.today.past = false;
+                    this.times.now.future = this.times.today.future = false;
+                  },
+                  updateTimes: function updateTimes() {
+                    var now = this.parsedNow || this.getNow();
+                    this.updateDay(now, this.times.now);
+                    this.updateTime(now, this.times.now);
+                    this.updateDay(now, this.times.today);
+                  },
+                  getNow: function getNow() {
+                    return Object(
+                      _util_timestamp__WEBPACK_IMPORTED_MODULE_1__["parseDate"]
+                    )(new Date());
+                  },
+                  updateDay: function updateDay(now, target) {
+                    if (now.date !== target.date) {
+                      target.year = now.year;
+                      target.month = now.month;
+                      target.day = now.day;
+                      target.weekday = now.weekday;
+                      target.date = now.date;
+                    }
+                  },
+                  updateTime: function updateTime(now, target) {
+                    if (now.time !== target.time) {
+                      target.hour = now.hour;
+                      target.minute = now.minute;
+                      target.time = now.time;
+                    }
+                  },
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/modes/column.ts":
+          /*!**************************************************!*\
+  !*** ./src/components/VCalendar/modes/column.ts ***!
+  \**************************************************/
+          /*! exports provided: column */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "column",
+              function () {
+                return column;
+              }
+            );
+            /* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./common */ "./src/components/VCalendar/modes/common.ts"
+              );
+
+            var FULL_WIDTH = 100;
+            var column = function column(
+              events,
+              firstWeekday,
+              overlapThreshold
+            ) {
+              var handler = Object(
+                _common__WEBPACK_IMPORTED_MODULE_0__["getOverlapGroupHandler"]
+              )(firstWeekday);
+              return function (day, dayEvents, timed, reset) {
+                var visuals = handler.getVisuals(day, dayEvents, timed, reset);
+
+                if (timed) {
+                  visuals.forEach(function (visual) {
+                    visual.left =
+                      (visual.column * FULL_WIDTH) / visual.columnCount;
+                    visual.width = FULL_WIDTH / visual.columnCount;
+                  });
+                }
 
+                return visuals;
+              };
+            };
 
- // Utilities
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/modes/common.ts":
+          /*!**************************************************!*\
+  !*** ./src/components/VCalendar/modes/common.ts ***!
+  \**************************************************/
+          /*! exports provided: getVisuals, hasOverlap, setColumnCount, getRange, getDayRange, getNormalizedRange, getOpenGroup, getOverlapGroupHandler */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getVisuals",
+              function () {
+                return _getVisuals;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "hasOverlap",
+              function () {
+                return hasOverlap;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "setColumnCount",
+              function () {
+                return setColumnCount;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getRange",
+              function () {
+                return getRange;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getDayRange",
+              function () {
+                return getDayRange;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getNormalizedRange",
+              function () {
+                return getNormalizedRange;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getOpenGroup",
+              function () {
+                return getOpenGroup;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getOverlapGroupHandler",
+              function () {
+                return getOverlapGroupHandler;
+              }
+            );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_routable__WEBPACK_IMPORTED_MODULE_6__["default"], _mixins_positionable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_sizeable__WEBPACK_IMPORTED_MODULE_7__["default"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_3__["factory"])('btnToggle'), Object(_mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["factory"])('inputValue')
-/* @vue/component */
-);
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-btn',
-  props: {
-    activeClass: {
-      type: String,
-      default: function _default() {
-        if (!this.btnToggle) return '';
-        return this.btnToggle.activeClass;
-      }
-    },
-    block: Boolean,
-    depressed: Boolean,
-    fab: Boolean,
-    icon: Boolean,
-    loading: Boolean,
-    outlined: Boolean,
-    retainFocusOnClick: Boolean,
-    rounded: Boolean,
-    tag: {
-      type: String,
-      default: 'button'
-    },
-    text: Boolean,
-    tile: Boolean,
-    type: {
-      type: String,
-      default: 'button'
-    },
-    value: null
-  },
-  data: function data() {
-    return {
-      proxyClass: 'v-btn--active'
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign(__assign(__assign(__assign({
-        'v-btn': true
-      }, _mixins_routable__WEBPACK_IMPORTED_MODULE_6__["default"].options.computed.classes.call(this)), {
-        'v-btn--absolute': this.absolute,
-        'v-btn--block': this.block,
-        'v-btn--bottom': this.bottom,
-        'v-btn--contained': this.contained,
-        'v-btn--depressed': this.depressed || this.outlined,
-        'v-btn--disabled': this.disabled,
-        'v-btn--fab': this.fab,
-        'v-btn--fixed': this.fixed,
-        'v-btn--flat': this.isFlat,
-        'v-btn--icon': this.icon,
-        'v-btn--left': this.left,
-        'v-btn--loading': this.loading,
-        'v-btn--outlined': this.outlined,
-        'v-btn--right': this.right,
-        'v-btn--round': this.isRound,
-        'v-btn--rounded': this.rounded,
-        'v-btn--router': this.to,
-        'v-btn--text': this.text,
-        'v-btn--tile': this.tile,
-        'v-btn--top': this.top
-      }), this.themeClasses), this.groupClasses), this.elevationClasses), this.sizeableClasses);
-    },
-    contained: function contained() {
-      return Boolean(!this.isFlat && !this.depressed && // Contained class only adds elevation
-      // is not needed if user provides value
-      !this.elevation);
-    },
-    computedRipple: function computedRipple() {
-      var _a;
-
-      var defaultRipple = this.icon || this.fab ? {
-        circle: true
-      } : true;
-      if (this.disabled) return false;else return (_a = this.ripple) !== null && _a !== void 0 ? _a : defaultRipple;
-    },
-    isFlat: function isFlat() {
-      return Boolean(this.icon || this.text || this.outlined);
-    },
-    isRound: function isRound() {
-      return Boolean(this.icon || this.fab);
-    },
-    styles: function styles() {
-      return __assign({}, this.measurableStyles);
-    }
-  },
-  created: function created() {
-    var _this = this;
-
-    var breakingProps = [['flat', 'text'], ['outline', 'outlined'], ['round', 'rounded']];
-    /* istanbul ignore next */
-
-    breakingProps.forEach(function (_a) {
-      var _b = __read(_a, 2),
-          original = _b[0],
-          replacement = _b[1];
-
-      if (_this.$attrs.hasOwnProperty(original)) Object(_util_console__WEBPACK_IMPORTED_MODULE_9__["breaking"])(original, replacement, _this);
-    });
-  },
-  methods: {
-    click: function click(e) {
-      // TODO: Remove this in v3
-      !this.retainFocusOnClick && !this.fab && e.detail && this.$el.blur();
-      this.$emit('click', e);
-      this.btnToggle && this.toggle();
-    },
-    genContent: function genContent() {
-      return this.$createElement('span', {
-        staticClass: 'v-btn__content'
-      }, this.$slots.default);
-    },
-    genLoader: function genLoader() {
-      return this.$createElement('span', {
-        class: 'v-btn__loader'
-      }, this.$slots.loader || [this.$createElement(_VProgressCircular__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          indeterminate: true,
-          size: 23,
-          width: 2
-        }
-      })]);
-    }
-  },
-  render: function render(h) {
-    var children = [this.genContent(), this.loading && this.genLoader()];
-    var setColor = !this.isFlat ? this.setBackgroundColor : this.setTextColor;
-
-    var _a = this.generateRouteLink(),
-        tag = _a.tag,
-        data = _a.data;
-
-    if (tag === 'button') {
-      data.attrs.type = this.type;
-      data.attrs.disabled = this.disabled;
-    }
-
-    data.attrs.value = ['string', 'number'].includes(_typeof(this.value)) ? this.value : JSON.stringify(this.value);
-    return h(tag, this.disabled ? data : setColor(this.color, data), children);
-  }
-}));
+                return ar;
+              };
 
-/***/ }),
+            var MILLIS_IN_DAY = 86400000;
 
-/***/ "./src/components/VBtn/index.ts":
-/*!**************************************!*\
-  !*** ./src/components/VBtn/index.ts ***!
-  \**************************************/
-/*! exports provided: VBtn, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            function _getVisuals(events, minStart) {
+              if (minStart === void 0) {
+                minStart = 0;
+              }
+
+              var visuals = events.map(function (event) {
+                return {
+                  event: event,
+                  columnCount: 0,
+                  column: 0,
+                  left: 0,
+                  width: 100,
+                };
+              });
+              visuals.sort(function (a, b) {
+                return (
+                  Math.max(minStart, a.event.startTimestampIdentifier) -
+                    Math.max(minStart, b.event.startTimestampIdentifier) ||
+                  b.event.endTimestampIdentifier -
+                    a.event.endTimestampIdentifier
+                );
+              });
+              return visuals;
+            }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBtn */ "./src/components/VBtn/VBtn.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBtn", function() { return _VBtn__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            function hasOverlap(s0, e0, s1, e1, exclude) {
+              if (exclude === void 0) {
+                exclude = true;
+              }
 
+              return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1);
+            }
+            function setColumnCount(groups) {
+              groups.forEach(function (group) {
+                group.visuals.forEach(function (groupVisual) {
+                  groupVisual.columnCount = groups.length;
+                });
+              });
+            }
+            function getRange(event) {
+              return [
+                event.startTimestampIdentifier,
+                event.endTimestampIdentifier,
+              ];
+            }
+            function getDayRange(event) {
+              return [event.startIdentifier, event.endIdentifier];
+            }
+            function getNormalizedRange(event, dayStart) {
+              return [
+                Math.max(dayStart, event.startTimestampIdentifier),
+                Math.min(
+                  dayStart + MILLIS_IN_DAY,
+                  event.endTimestampIdentifier
+                ),
+              ];
+            }
+            function getOpenGroup(groups, start, end, timed) {
+              for (var i = 0; i < groups.length; i++) {
+                var group = groups[i];
+                var intersected = false;
+
+                if (hasOverlap(start, end, group.start, group.end, timed)) {
+                  for (var k = 0; k < group.visuals.length; k++) {
+                    var groupVisual = group.visuals[k];
+
+                    var _a = __read(
+                        timed
+                          ? getRange(groupVisual.event)
+                          : getDayRange(groupVisual.event),
+                        2
+                      ),
+                      groupStart = _a[0],
+                      groupEnd = _a[1];
+
+                    if (hasOverlap(start, end, groupStart, groupEnd, timed)) {
+                      intersected = true;
+                      break;
+                    }
+                  }
+                }
 
+                if (!intersected) {
+                  return i;
+                }
+              }
 
-/* harmony default export */ __webpack_exports__["default"] = (_VBtn__WEBPACK_IMPORTED_MODULE_0__["default"]);
+              return -1;
+            }
+            function getOverlapGroupHandler(firstWeekday) {
+              var handler = {
+                groups: [],
+                min: -1,
+                max: -1,
+                reset: function reset() {
+                  handler.groups = [];
+                  handler.min = handler.max = -1;
+                },
+                getVisuals: function getVisuals(day, dayEvents, timed, reset) {
+                  if (reset === void 0) {
+                    reset = false;
+                  }
 
-/***/ }),
+                  if (day.weekday === firstWeekday || reset) {
+                    handler.reset();
+                  }
 
-/***/ "./src/components/VBtnToggle/VBtnToggle.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VBtnToggle/VBtnToggle.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+                  var dayStart = Object(
+                    _util_timestamp__WEBPACK_IMPORTED_MODULE_0__[
+                      "getTimestampIdentifier"
+                    ]
+                  )(day);
+
+                  var visuals = _getVisuals(dayEvents, dayStart);
+
+                  visuals.forEach(function (visual) {
+                    var _a = __read(
+                        timed
+                          ? getRange(visual.event)
+                          : getDayRange(visual.event),
+                        2
+                      ),
+                      start = _a[0],
+                      end = _a[1];
+
+                    if (
+                      handler.groups.length > 0 &&
+                      !hasOverlap(start, end, handler.min, handler.max, timed)
+                    ) {
+                      setColumnCount(handler.groups);
+                      handler.reset();
+                    }
+
+                    var targetGroup = getOpenGroup(
+                      handler.groups,
+                      start,
+                      end,
+                      timed
+                    );
+
+                    if (targetGroup === -1) {
+                      targetGroup = handler.groups.length;
+                      handler.groups.push({
+                        start: start,
+                        end: end,
+                        visuals: [],
+                      });
+                    }
+
+                    var target = handler.groups[targetGroup];
+                    target.visuals.push(visual);
+                    target.start = Math.min(target.start, start);
+                    target.end = Math.max(target.end, end);
+                    visual.column = targetGroup;
+
+                    if (handler.min === -1) {
+                      handler.min = start;
+                      handler.max = end;
+                    } else {
+                      handler.min = Math.min(handler.min, start);
+                      handler.max = Math.max(handler.max, end);
+                    }
+                  });
+                  setColumnCount(handler.groups);
+
+                  if (timed) {
+                    handler.reset();
+                  }
 
-// extracted by mini-css-extract-plugin
+                  return visuals;
+                },
+              };
+              return handler;
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBtnToggle/VBtnToggle.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VBtnToggle/VBtnToggle.ts ***!
+        /***/ "./src/components/VCalendar/modes/index.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VCalendar/modes/index.ts ***!
   \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBtnToggle_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBtnToggle.sass */ "./src/components/VBtnToggle/VBtnToggle.sass");
-/* harmony import */ var _VBtnToggle_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VBtnToggle_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_button_group__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/button-group */ "./src/mixins/button-group/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_button_group__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'v-btn-toggle',
-  props: {
-    backgroundColor: String,
-    borderless: Boolean,
-    dense: Boolean,
-    group: Boolean,
-    rounded: Boolean,
-    shaped: Boolean,
-    tile: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign({}, _mixins_button_group__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-btn-toggle': true,
-        'v-btn-toggle--borderless': this.borderless,
-        'v-btn-toggle--dense': this.dense,
-        'v-btn-toggle--group': this.group,
-        'v-btn-toggle--rounded': this.rounded,
-        'v-btn-toggle--shaped': this.shaped,
-        'v-btn-toggle--tile': this.tile
-      }), this.themeClasses);
-    }
-  },
-  methods: {
-    genData: function genData() {
-      var data = this.setTextColor(this.color, __assign({}, _mixins_button_group__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genData.call(this)));
-      if (this.group) return data;
-      return this.setBackgroundColor(this.backgroundColor, data);
-    }
-  }
-}));
+          /*! exports provided: CalendarEventOverlapModes */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "CalendarEventOverlapModes",
+              function () {
+                return CalendarEventOverlapModes;
+              }
+            );
+            /* harmony import */ var _stack__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./stack */ "./src/components/VCalendar/modes/stack.ts"
+              );
+            /* harmony import */ var _column__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./column */ "./src/components/VCalendar/modes/column.ts"
+              );
+
+            var CalendarEventOverlapModes = {
+              stack: _stack__WEBPACK_IMPORTED_MODULE_0__["stack"],
+              column: _column__WEBPACK_IMPORTED_MODULE_1__["column"],
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VBtnToggle/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VBtnToggle/index.ts ***!
-  \********************************************/
-/*! exports provided: VBtnToggle, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+        /***/ "./src/components/VCalendar/modes/stack.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VCalendar/modes/stack.ts ***!
+  \*************************************************/
+          /*! exports provided: stack */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "stack",
+              function () {
+                return stack;
+              }
+            );
+            /* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./common */ "./src/components/VCalendar/modes/common.ts"
+              );
+            /* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              };
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VBtnToggle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VBtnToggle */ "./src/components/VBtnToggle/VBtnToggle.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBtnToggle", function() { return _VBtnToggle__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
-/* harmony default export */ __webpack_exports__["default"] = (_VBtnToggle__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            var FULL_WIDTH = 100;
+            var DEFAULT_OFFSET = 5;
+            var WIDTH_MULTIPLIER = 1.7;
+            /**
+             * Variation of column mode where events can be stacked. The priority of this
+             * mode is to stack events together taking up the least amount of space while
+             * trying to ensure the content of the event is always visible as well as its
+             * start and end. A sibling column has intersecting event content and must be
+             * placed beside each other. Non-sibling columns are offset by 5% from the
+             * previous column. The width is scaled by 1.7 so the events overlap and
+             * whitespace is reduced. If there is a hole in columns the event width is
+             * scaled up so it intersects with the next column. The columns have equal
+             * width in the space they are given. If the event doesn't have any to the
+             * right of it that intersect with it's content it's right side is extended
+             * to the right side.
+             */
+
+            var stack = function stack(events, firstWeekday, overlapThreshold) {
+              var handler = Object(
+                _common__WEBPACK_IMPORTED_MODULE_0__["getOverlapGroupHandler"]
+              )(firstWeekday); // eslint-disable-next-line max-statements
+
+              return function (day, dayEvents, timed, reset) {
+                var e_1, _a, e_2, _b, e_3, _c;
+
+                if (!timed) {
+                  return handler.getVisuals(day, dayEvents, timed, reset);
+                }
 
-/***/ }),
+                var dayStart = Object(
+                  _util_timestamp__WEBPACK_IMPORTED_MODULE_1__[
+                    "getTimestampIdentifier"
+                  ]
+                )(day);
+                var visuals = Object(
+                  _common__WEBPACK_IMPORTED_MODULE_0__["getVisuals"]
+                )(dayEvents, dayStart);
+                var groups = getGroups(visuals, dayStart);
 
-/***/ "./src/components/VCalendar/VCalendar.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VCalendar/VCalendar.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_calendar_with_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mixins/calendar-with-events */ "./src/components/VCalendar/mixins/calendar-with-events.ts");
-/* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/props */ "./src/components/VCalendar/util/props.ts");
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-/* harmony import */ var _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VCalendarMonthly */ "./src/components/VCalendar/VCalendarMonthly.ts");
-/* harmony import */ var _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VCalendarDaily */ "./src/components/VCalendar/VCalendarDaily.ts");
-/* harmony import */ var _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VCalendarWeekly */ "./src/components/VCalendar/VCalendarWeekly.ts");
-/* harmony import */ var _VCalendarCategory__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./VCalendarCategory */ "./src/components/VCalendar/VCalendarCategory.ts");
-// Styles
-// import '../../stylus/components/_calendar-daily.styl'
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Mixins
-
-
- // Util
-
-
- // Calendars
-
-
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_calendar_with_events__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
-  name: 'v-calendar',
-  props: __assign(__assign(__assign(__assign({}, _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].calendar), _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].weeks), _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].intervals), _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].category),
-  data: function data() {
-    return {
-      lastStart: null,
-      lastEnd: null
-    };
-  },
-  computed: {
-    parsedValue: function parsedValue() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["validateTimestamp"])(this.value) ? Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTimestamp"])(this.value, true) : this.parsedStart || this.times.today;
-    },
-    parsedCategoryDays: function parsedCategoryDays() {
-      return parseInt(this.categoryDays) || 1;
-    },
-    renderProps: function renderProps() {
-      var around = this.parsedValue;
-      var component = null;
-      var maxDays = this.maxDays;
-      var weekdays = this.parsedWeekdays;
-      var categories = this.parsedCategories;
-      var start = around;
-      var end = around;
-
-      switch (this.type) {
-        case 'month':
-          component = _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__["default"];
-          start = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["getStartOfMonth"])(around);
-          end = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["getEndOfMonth"])(around);
-          break;
-
-        case 'week':
-          component = _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__["default"];
-          start = this.getStartOfWeek(around);
-          end = this.getEndOfWeek(around);
-          maxDays = 7;
-          break;
-
-        case 'day':
-          component = _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__["default"];
-          maxDays = 1;
-          weekdays = [start.weekday];
-          break;
-
-        case '4day':
-          component = _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__["default"];
-          end = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["relativeDays"])(Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["copyTimestamp"])(end), _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["nextDay"], 4);
-          Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["updateFormatted"])(end);
-          maxDays = 4;
-          weekdays = [start.weekday, (start.weekday + 1) % 7, (start.weekday + 2) % 7, (start.weekday + 3) % 7];
-          break;
-
-        case 'custom-weekly':
-          component = _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_5__["default"];
-          start = this.parsedStart || around;
-          end = this.parsedEnd;
-          break;
-
-        case 'custom-daily':
-          component = _VCalendarDaily__WEBPACK_IMPORTED_MODULE_4__["default"];
-          start = this.parsedStart || around;
-          end = this.parsedEnd;
-          break;
-
-        case 'category':
-          var days = this.parsedCategoryDays;
-          component = _VCalendarCategory__WEBPACK_IMPORTED_MODULE_6__["default"];
-          end = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["relativeDays"])(Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["copyTimestamp"])(end), _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["nextDay"], days);
-          Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["updateFormatted"])(end);
-          maxDays = days;
-          weekdays = [];
-
-          for (var i = 0; i < days; i++) {
-            weekdays.push((start.weekday + i) % 7);
-          }
-
-          categories = this.getCategoryList(categories);
-          break;
-
-        default:
-          throw new Error(this.type + ' is not a valid Calendar type');
-      }
+                try {
+                  for (
+                    var groups_1 = __values(groups),
+                      groups_1_1 = groups_1.next();
+                    !groups_1_1.done;
+                    groups_1_1 = groups_1.next()
+                  ) {
+                    var group = groups_1_1.value;
+                    var nodes = [];
+
+                    try {
+                      for (
+                        var _d = ((e_2 = void 0), __values(group.visuals)),
+                          _e = _d.next();
+                        !_e.done;
+                        _e = _d.next()
+                      ) {
+                        var visual = _e.value;
+                        var child = getNode(visual, dayStart);
+                        var index = getNextIndex(child, nodes);
+
+                        if (index === false) {
+                          var parent = getParent(child, nodes);
+
+                          if (parent) {
+                            child.parent = parent;
+                            child.sibling = Object(
+                              _common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"]
+                            )(
+                              child.start,
+                              child.end,
+                              parent.start,
+                              addTime(parent.start, overlapThreshold)
+                            );
+                            child.index = parent.index + 1;
+                            parent.children.push(child);
+                          }
+                        } else {
+                          var _f = __read(
+                              getOverlappingRange(
+                                child,
+                                nodes,
+                                index - 1,
+                                index - 1
+                              ),
+                              1
+                            ),
+                            parent = _f[0];
+
+                          var children = getOverlappingRange(
+                            child,
+                            nodes,
+                            index + 1,
+                            index + nodes.length,
+                            true
+                          );
+                          child.children = children;
+                          child.index = index;
+
+                          if (parent) {
+                            child.parent = parent;
+                            child.sibling = Object(
+                              _common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"]
+                            )(
+                              child.start,
+                              child.end,
+                              parent.start,
+                              addTime(parent.start, overlapThreshold)
+                            );
+                            parent.children.push(child);
+                          }
+
+                          try {
+                            for (
+                              var children_1 =
+                                  ((e_3 = void 0), __values(children)),
+                                children_1_1 = children_1.next();
+                              !children_1_1.done;
+                              children_1_1 = children_1.next()
+                            ) {
+                              var grand = children_1_1.value;
+
+                              if (grand.parent === parent) {
+                                grand.parent = child;
+                              }
+
+                              var grandNext = grand.index - child.index <= 1;
+
+                              if (
+                                grandNext &&
+                                child.sibling &&
+                                Object(
+                                  _common__WEBPACK_IMPORTED_MODULE_0__[
+                                    "hasOverlap"
+                                  ]
+                                )(
+                                  child.start,
+                                  addTime(child.start, overlapThreshold),
+                                  grand.start,
+                                  grand.end
+                                )
+                              ) {
+                                grand.sibling = true;
+                              }
+                            }
+                          } catch (e_3_1) {
+                            e_3 = {
+                              error: e_3_1,
+                            };
+                          } finally {
+                            try {
+                              if (
+                                children_1_1 &&
+                                !children_1_1.done &&
+                                (_c = children_1.return)
+                              )
+                                _c.call(children_1);
+                            } finally {
+                              if (e_3) throw e_3.error;
+                            }
+                          }
+                        }
+
+                        nodes.push(child);
+                      }
+                    } catch (e_2_1) {
+                      e_2 = {
+                        error: e_2_1,
+                      };
+                    } finally {
+                      try {
+                        if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
+                      } finally {
+                        if (e_2) throw e_2.error;
+                      }
+                    }
+
+                    calculateBounds(nodes, overlapThreshold);
+                  }
+                } catch (e_1_1) {
+                  e_1 = {
+                    error: e_1_1,
+                  };
+                } finally {
+                  try {
+                    if (
+                      groups_1_1 &&
+                      !groups_1_1.done &&
+                      (_a = groups_1.return)
+                    )
+                      _a.call(groups_1);
+                  } finally {
+                    if (e_1) throw e_1.error;
+                  }
+                }
 
-      return {
-        component: component,
-        start: start,
-        end: end,
-        maxDays: maxDays,
-        weekdays: weekdays,
-        categories: categories
-      };
-    },
-    eventWeekdays: function eventWeekdays() {
-      return this.renderProps.weekdays;
-    },
-    categoryMode: function categoryMode() {
-      return this.type === 'category';
-    },
-    title: function title() {
-      var _a = this.renderProps,
-          start = _a.start,
-          end = _a.end;
-      var spanYears = start.year !== end.year;
-      var spanMonths = spanYears || start.month !== end.month;
-
-      if (spanYears) {
-        return this.monthShortFormatter(start, true) + ' ' + start.year + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year;
-      }
+                visuals.sort(function (a, b) {
+                  return (
+                    a.left - b.left ||
+                    a.event.startTimestampIdentifier -
+                      b.event.startTimestampIdentifier
+                  );
+                });
+                return visuals;
+              };
+            };
 
-      if (spanMonths) {
-        return this.monthShortFormatter(start, true) + ' - ' + this.monthShortFormatter(end, true) + ' ' + end.year;
-      } else {
-        return this.monthLongFormatter(start, false) + ' ' + start.year;
-      }
-    },
-    monthLongFormatter: function monthLongFormatter() {
-      return this.getFormatter({
-        timeZone: 'UTC',
-        month: 'long'
-      });
-    },
-    monthShortFormatter: function monthShortFormatter() {
-      return this.getFormatter({
-        timeZone: 'UTC',
-        month: 'short'
-      });
-    },
-    parsedCategories: function parsedCategories() {
-      return typeof this.categories === 'string' && this.categories ? this.categories.split(/\s*,\s*/) : Array.isArray(this.categories) ? this.categories : [];
-    }
-  },
-  watch: {
-    renderProps: 'checkChange'
-  },
-  mounted: function mounted() {
-    this.updateEventVisibility();
-    this.checkChange();
-  },
-  updated: function updated() {
-    window.requestAnimationFrame(this.updateEventVisibility);
-  },
-  methods: {
-    checkChange: function checkChange() {
-      var _a = this,
-          lastStart = _a.lastStart,
-          lastEnd = _a.lastEnd;
-
-      var _b = this.renderProps,
-          start = _b.start,
-          end = _b.end;
-
-      if (!lastStart || !lastEnd || start.date !== lastStart.date || end.date !== lastEnd.date) {
-        this.lastStart = start;
-        this.lastEnd = end;
-        this.$emit('change', {
-          start: start,
-          end: end
-        });
-      }
-    },
-    move: function move(amount) {
-      if (amount === void 0) {
-        amount = 1;
-      }
+            function calculateBounds(nodes, overlapThreshold) {
+              var e_4, _a;
 
-      var moved = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["copyTimestamp"])(this.parsedValue);
-      var forward = amount > 0;
-      var mover = forward ? _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["nextDay"] : _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["prevDay"];
-      var limit = forward ? _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["DAYS_IN_MONTH_MAX"] : _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["DAY_MIN"];
-      var times = forward ? amount : -amount;
-
-      while (--times >= 0) {
-        switch (this.type) {
-          case 'month':
-            moved.day = limit;
-            mover(moved);
-            break;
-
-          case 'week':
-            Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["relativeDays"])(moved, mover, _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["DAYS_IN_WEEK"]);
-            break;
-
-          case 'day':
-            Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["relativeDays"])(moved, mover, 1);
-            break;
-
-          case '4day':
-            Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["relativeDays"])(moved, mover, 4);
-            break;
-
-          case 'category':
-            Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["relativeDays"])(moved, mover, this.parsedCategoryDays);
-            break;
-        }
-      }
+              try {
+                for (
+                  var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next();
+                  !nodes_1_1.done;
+                  nodes_1_1 = nodes_1.next()
+                ) {
+                  var node = nodes_1_1.value;
+                  var visual = node.visual,
+                    parent = node.parent;
+                  var columns = getMaxChildIndex(node) + 1;
+                  var spaceLeft = parent ? parent.visual.left : 0;
+                  var spaceWidth = FULL_WIDTH - spaceLeft;
+                  var offset = Math.min(DEFAULT_OFFSET, FULL_WIDTH / columns);
+                  var columnWidthMultiplier = getColumnWidthMultiplier(
+                    node,
+                    nodes
+                  );
+                  var columnOffset = spaceWidth / (columns - node.index + 1);
+                  var columnWidth =
+                    (spaceWidth /
+                      (columns - node.index + (node.sibling ? 1 : 0))) *
+                    columnWidthMultiplier;
+
+                  if (parent) {
+                    visual.left = node.sibling
+                      ? spaceLeft + columnOffset
+                      : spaceLeft + offset;
+                  }
 
-      Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["updateWeekday"])(moved);
-      Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["updateFormatted"])(moved);
-      Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["updateRelative"])(moved, this.times.now);
+                  visual.width = hasFullWidth(node, nodes, overlapThreshold)
+                    ? FULL_WIDTH - visual.left
+                    : Math.min(
+                        FULL_WIDTH - visual.left,
+                        columnWidth * WIDTH_MULTIPLIER
+                      );
+                }
+              } catch (e_4_1) {
+                e_4 = {
+                  error: e_4_1,
+                };
+              } finally {
+                try {
+                  if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return))
+                    _a.call(nodes_1);
+                } finally {
+                  if (e_4) throw e_4.error;
+                }
+              }
+            }
 
-      if (this.value instanceof Date) {
-        this.$emit('input', Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["timestampToDate"])(moved));
-      } else if (typeof this.value === 'number') {
-        this.$emit('input', Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["timestampToDate"])(moved).getTime());
-      } else {
-        this.$emit('input', moved.date);
-      }
+            function getColumnWidthMultiplier(node, nodes) {
+              if (!node.children.length) {
+                return 1;
+              }
 
-      this.$emit('moved', moved);
-    },
-    next: function next(amount) {
-      if (amount === void 0) {
-        amount = 1;
-      }
+              var maxColumn = node.index + nodes.length;
+              var minColumn = node.children.reduce(function (min, c) {
+                return Math.min(min, c.index);
+              }, maxColumn);
+              return minColumn - node.index;
+            }
 
-      this.move(amount);
-    },
-    prev: function prev(amount) {
-      if (amount === void 0) {
-        amount = 1;
-      }
+            function getOverlappingIndices(node, nodes) {
+              var e_5, _a;
 
-      this.move(-amount);
-    },
-    timeToY: function timeToY(time, clamp) {
-      if (clamp === void 0) {
-        clamp = true;
-      }
+              var indices = [];
 
-      var c = this.$children[0];
+              try {
+                for (
+                  var nodes_2 = __values(nodes), nodes_2_1 = nodes_2.next();
+                  !nodes_2_1.done;
+                  nodes_2_1 = nodes_2.next()
+                ) {
+                  var other = nodes_2_1.value;
+
+                  if (
+                    Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(
+                      node.start,
+                      node.end,
+                      other.start,
+                      other.end
+                    )
+                  ) {
+                    indices.push(other.index);
+                  }
+                }
+              } catch (e_5_1) {
+                e_5 = {
+                  error: e_5_1,
+                };
+              } finally {
+                try {
+                  if (nodes_2_1 && !nodes_2_1.done && (_a = nodes_2.return))
+                    _a.call(nodes_2);
+                } finally {
+                  if (e_5) throw e_5.error;
+                }
+              }
 
-      if (c && c.timeToY) {
-        return c.timeToY(time, clamp);
-      } else {
-        return false;
-      }
-    },
-    timeDelta: function timeDelta(time) {
-      var c = this.$children[0];
-
-      if (c && c.timeDelta) {
-        return c.timeDelta(time);
-      } else {
-        return false;
-      }
-    },
-    minutesToPixels: function minutesToPixels(minutes) {
-      var c = this.$children[0];
-
-      if (c && c.minutesToPixels) {
-        return c.minutesToPixels(minutes);
-      } else {
-        return -1;
-      }
-    },
-    scrollToTime: function scrollToTime(time) {
-      var c = this.$children[0];
-
-      if (c && c.scrollToTime) {
-        return c.scrollToTime(time);
-      } else {
-        return false;
-      }
-    },
-    parseTimestamp: function parseTimestamp(input, required) {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTimestamp"])(input, required, this.times.now);
-    },
-    timestampToDate: function timestampToDate(timestamp) {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["timestampToDate"])(timestamp);
-    },
-    getCategoryList: function getCategoryList(categories) {
-      var _this = this;
-
-      if (!this.noEvents) {
-        var categoryMap_1 = categories.reduce(function (map, category, index) {
-          map[category] = {
-            index: index,
-            count: 0
-          };
-          return map;
-        }, Object.create(null));
-
-        if (!this.categoryHideDynamic || !this.categoryShowAll) {
-          var categoryLength_1 = categories.length;
-          this.parsedEvents.forEach(function (ev) {
-            var category = ev.category;
-
-            if (typeof category !== 'string') {
-              category = _this.categoryForInvalid;
+              return indices;
             }
 
-            if (!category) {
-              return;
-            }
+            function getNextIndex(node, nodes) {
+              var indices = getOverlappingIndices(node, nodes);
+              indices.sort();
 
-            if (category in categoryMap_1) {
-              categoryMap_1[category].count++;
-            } else if (!_this.categoryHideDynamic) {
-              categoryMap_1[category] = {
-                index: categoryLength_1++,
-                count: 1
-              };
-            }
-          });
-        }
+              for (var i = 0; i < indices.length; i++) {
+                if (i < indices[i]) {
+                  return i;
+                }
+              }
 
-        if (!this.categoryShowAll) {
-          for (var category in categoryMap_1) {
-            if (categoryMap_1[category].count === 0) {
-              delete categoryMap_1[category];
+              return false;
             }
-          }
-        }
 
-        categories = Object.keys(categoryMap_1);
-      }
+            function getOverlappingRange(
+              node,
+              nodes,
+              indexMin,
+              indexMax,
+              returnFirstColumn
+            ) {
+              var e_6, _a;
+
+              if (returnFirstColumn === void 0) {
+                returnFirstColumn = false;
+              }
 
-      return categories;
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var _a = this.renderProps,
-        start = _a.start,
-        end = _a.end,
-        maxDays = _a.maxDays,
-        component = _a.component,
-        weekdays = _a.weekdays,
-        categories = _a.categories;
-    return h(component, {
-      staticClass: 'v-calendar',
-      class: {
-        'v-calendar-events': !this.noEvents
-      },
-      props: __assign(__assign({}, this.$props), {
-        start: start.date,
-        end: end.date,
-        maxDays: maxDays,
-        weekdays: weekdays,
-        categories: categories
-      }),
-      directives: [{
-        modifiers: {
-          quiet: true
-        },
-        name: 'resize',
-        value: this.updateEventVisibility
-      }],
-      on: __assign(__assign({}, this.$listeners), {
-        'click:date': function clickDate(day) {
-          if (_this.$listeners.input) {
-            _this.$emit('input', day.date);
-          }
-
-          if (_this.$listeners['click:date']) {
-            _this.$emit('click:date', day);
-          }
-        }
-      }),
-      scopedSlots: this.getScopedSlots()
-    });
-  }
-}));
+              var overlapping = [];
 
-/***/ }),
+              try {
+                for (
+                  var nodes_3 = __values(nodes), nodes_3_1 = nodes_3.next();
+                  !nodes_3_1.done;
+                  nodes_3_1 = nodes_3.next()
+                ) {
+                  var other = nodes_3_1.value;
+
+                  if (
+                    other.index >= indexMin &&
+                    other.index <= indexMax &&
+                    Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(
+                      node.start,
+                      node.end,
+                      other.start,
+                      other.end
+                    )
+                  ) {
+                    overlapping.push(other);
+                  }
+                }
+              } catch (e_6_1) {
+                e_6 = {
+                  error: e_6_1,
+                };
+              } finally {
+                try {
+                  if (nodes_3_1 && !nodes_3_1.done && (_a = nodes_3.return))
+                    _a.call(nodes_3);
+                } finally {
+                  if (e_6) throw e_6.error;
+                }
+              }
 
-/***/ "./src/components/VCalendar/VCalendarCategory.sass":
-/*!*********************************************************!*\
-  !*** ./src/components/VCalendar/VCalendarCategory.sass ***!
-  \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+              if (returnFirstColumn && overlapping.length > 0) {
+                var first_1 = overlapping.reduce(function (min, n) {
+                  return Math.min(min, n.index);
+                }, overlapping[0].index);
+                return overlapping.filter(function (n) {
+                  return n.index === first_1;
+                });
+              }
 
-// extracted by mini-css-extract-plugin
+              return overlapping;
+            }
 
-/***/ }),
+            function getParent(node, nodes) {
+              var e_7, _a;
 
-/***/ "./src/components/VCalendar/VCalendarCategory.ts":
-/*!*******************************************************!*\
-  !*** ./src/components/VCalendar/VCalendarCategory.ts ***!
-  \*******************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCalendarCategory_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCalendarCategory.sass */ "./src/components/VCalendar/VCalendarCategory.sass");
-/* harmony import */ var _VCalendarCategory_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCalendarCategory_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VCalendarDaily */ "./src/components/VCalendar/VCalendarDaily.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util/props */ "./src/components/VCalendar/util/props.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+              var parent = null;
 
-    return t;
-  };
+              try {
+                for (
+                  var nodes_4 = __values(nodes), nodes_4_1 = nodes_4.next();
+                  !nodes_4_1.done;
+                  nodes_4_1 = nodes_4.next()
+                ) {
+                  var other = nodes_4_1.value;
+
+                  if (
+                    Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(
+                      node.start,
+                      node.end,
+                      other.start,
+                      other.end
+                    ) &&
+                    (parent === null || other.index > parent.index)
+                  ) {
+                    parent = other;
+                  }
+                }
+              } catch (e_7_1) {
+                e_7 = {
+                  error: e_7_1,
+                };
+              } finally {
+                try {
+                  if (nodes_4_1 && !nodes_4_1.done && (_a = nodes_4.return))
+                    _a.call(nodes_4);
+                } finally {
+                  if (e_7) throw e_7.error;
+                }
+              }
 
-  return __assign.apply(this, arguments);
-}; // Styles
+              return parent;
+            }
 
+            function hasFullWidth(node, nodes, overlapThreshold) {
+              var e_8, _a;
 
- // Mixins
+              try {
+                for (
+                  var nodes_5 = __values(nodes), nodes_5_1 = nodes_5.next();
+                  !nodes_5_1.done;
+                  nodes_5_1 = nodes_5.next()
+                ) {
+                  var other = nodes_5_1.value;
+
+                  if (
+                    other !== node &&
+                    other.index > node.index &&
+                    Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(
+                      node.start,
+                      addTime(node.start, overlapThreshold),
+                      other.start,
+                      other.end
+                    )
+                  ) {
+                    return false;
+                  }
+                }
+              } catch (e_8_1) {
+                e_8 = {
+                  error: e_8_1,
+                };
+              } finally {
+                try {
+                  if (nodes_5_1 && !nodes_5_1.done && (_a = nodes_5.return))
+                    _a.call(nodes_5);
+                } finally {
+                  if (e_8) throw e_8.error;
+                }
+              }
 
- // Util
+              return true;
+            }
 
+            function getGroups(visuals, dayStart) {
+              var e_9, _a, e_10, _b;
 
+              var groups = [];
 
-/* @vue/component */
+              try {
+                for (
+                  var visuals_1 = __values(visuals),
+                    visuals_1_1 = visuals_1.next();
+                  !visuals_1_1.done;
+                  visuals_1_1 = visuals_1.next()
+                ) {
+                  var visual = visuals_1_1.value;
+
+                  var _c = __read(
+                      Object(
+                        _common__WEBPACK_IMPORTED_MODULE_0__[
+                          "getNormalizedRange"
+                        ]
+                      )(visual.event, dayStart),
+                      2
+                    ),
+                    start = _c[0],
+                    end = _c[1];
+
+                  var added = false;
+
+                  try {
+                    for (
+                      var groups_2 = ((e_10 = void 0), __values(groups)),
+                        groups_2_1 = groups_2.next();
+                      !groups_2_1.done;
+                      groups_2_1 = groups_2.next()
+                    ) {
+                      var group = groups_2_1.value;
+
+                      if (
+                        Object(
+                          _common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"]
+                        )(start, end, group.start, group.end)
+                      ) {
+                        group.visuals.push(visual);
+                        group.end = Math.max(group.end, end);
+                        added = true;
+                        break;
+                      }
+                    }
+                  } catch (e_10_1) {
+                    e_10 = {
+                      error: e_10_1,
+                    };
+                  } finally {
+                    try {
+                      if (
+                        groups_2_1 &&
+                        !groups_2_1.done &&
+                        (_b = groups_2.return)
+                      )
+                        _b.call(groups_2);
+                    } finally {
+                      if (e_10) throw e_10.error;
+                    }
+                  }
 
-/* harmony default export */ __webpack_exports__["default"] = (_VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-calendar-category',
-  props: _util_props__WEBPACK_IMPORTED_MODULE_3__["default"].category,
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-calendar-daily': true,
-        'v-calendar-category': true
-      }, this.themeClasses);
-    },
-    parsedCategories: function parsedCategories() {
-      return typeof this.categories === 'string' && this.categories ? this.categories.split(/\s*,\s*/) : Array.isArray(this.categories) ? this.categories : [];
-    }
-  },
-  methods: {
-    genDayHeader: function genDayHeader(day, index) {
-      var _this = this;
+                  if (!added) {
+                    groups.push({
+                      start: start,
+                      end: end,
+                      visuals: [visual],
+                    });
+                  }
+                }
+              } catch (e_9_1) {
+                e_9 = {
+                  error: e_9_1,
+                };
+              } finally {
+                try {
+                  if (
+                    visuals_1_1 &&
+                    !visuals_1_1.done &&
+                    (_a = visuals_1.return)
+                  )
+                    _a.call(visuals_1);
+                } finally {
+                  if (e_9) throw e_9.error;
+                }
+              }
 
-      var data = {
-        staticClass: 'v-calendar-category__columns'
-      };
+              return groups;
+            }
 
-      var scope = __assign(__assign({
-        week: this.days
-      }, day), {
-        index: index
-      });
-
-      var children = this.parsedCategories.map(function (category) {
-        return _this.genDayHeaderCategory(day, _this.getCategoryScope(scope, category));
-      });
-      return [this.$createElement('div', data, children)];
-    },
-    getCategoryScope: function getCategoryScope(scope, category) {
-      return __assign(__assign({}, scope), {
-        category: category === this.categoryForInvalid ? null : category
-      });
-    },
-    genDayHeaderCategory: function genDayHeaderCategory(day, scope) {
-      var _this = this;
-
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-category__column-header',
-        on: this.getDefaultMouseEventHandlers(':day-category', function (e) {
-          return _this.getCategoryScope(_this.getSlotScope(day), scope.category);
-        })
-      }, [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"])(this, 'category', scope) || this.genDayHeaderCategoryTitle(scope.category), Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"])(this, 'day-header', scope)]);
-    },
-    genDayHeaderCategoryTitle: function genDayHeaderCategoryTitle(category) {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-category__category'
-      }, category === null ? this.categoryForInvalid : category);
-    },
-    genDayBody: function genDayBody(day) {
-      var _this = this;
-
-      var data = {
-        staticClass: 'v-calendar-category__columns'
-      };
-      var children = this.parsedCategories.map(function (category) {
-        return _this.genDayBodyCategory(day, category);
-      });
-      return [this.$createElement('div', data, children)];
-    },
-    genDayBodyCategory: function genDayBodyCategory(day, category) {
-      var _this = this;
-
-      var data = {
-        staticClass: 'v-calendar-category__column',
-        on: this.getDefaultMouseEventHandlers(':time-category', function (e) {
-          return _this.getCategoryScope(_this.getSlotScope(_this.getTimestampAtEvent(e, day)), category);
-        })
-      };
-      var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"])(this, 'day-body', function () {
-        return _this.getCategoryScope(_this.getSlotScope(day), category);
-      });
-      return this.$createElement('div', data, children);
-    }
-  }
-}));
+            function getNode(visual, dayStart) {
+              var _a = __read(
+                  Object(
+                    _common__WEBPACK_IMPORTED_MODULE_0__["getNormalizedRange"]
+                  )(visual.event, dayStart),
+                  2
+                ),
+                start = _a[0],
+                end = _a[1];
+
+              return {
+                parent: null,
+                sibling: true,
+                index: 0,
+                visual: visual,
+                start: start,
+                end: end,
+                children: [],
+              };
+            }
 
-/***/ }),
+            function getMaxChildIndex(node) {
+              var e_11, _a;
 
-/***/ "./src/components/VCalendar/VCalendarDaily.sass":
-/*!******************************************************!*\
-  !*** ./src/components/VCalendar/VCalendarDaily.sass ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+              var max = node.index;
 
-// extracted by mini-css-extract-plugin
+              try {
+                for (
+                  var _b = __values(node.children), _c = _b.next();
+                  !_c.done;
+                  _c = _b.next()
+                ) {
+                  var child = _c.value;
+                  var childMax = getMaxChildIndex(child);
+
+                  if (childMax > max) {
+                    max = childMax;
+                  }
+                }
+              } catch (e_11_1) {
+                e_11 = {
+                  error: e_11_1,
+                };
+              } finally {
+                try {
+                  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
+                } finally {
+                  if (e_11) throw e_11.error;
+                }
+              }
 
-/***/ }),
+              return max;
+            }
 
-/***/ "./src/components/VCalendar/VCalendarDaily.ts":
-/*!****************************************************!*\
-  !*** ./src/components/VCalendar/VCalendarDaily.ts ***!
-  \****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCalendarDaily_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCalendarDaily.sass */ "./src/components/VCalendar/VCalendarDaily.sass");
-/* harmony import */ var _VCalendarDaily_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCalendarDaily_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _mixins_calendar_with_intervals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mixins/calendar-with-intervals */ "./src/components/VCalendar/mixins/calendar-with-intervals.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            function addTime(identifier, minutes) {
+              var removeMinutes = identifier % 100;
+              var totalMinutes = removeMinutes + minutes;
+              var addHours = Math.floor(totalMinutes / 60);
+              var addMinutes = totalMinutes % 60;
+              return identifier - removeMinutes + addHours * 100 + addMinutes;
+            }
 
-  return ar;
-};
+            /***/
+          },
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+        /***/ "./src/components/VCalendar/util/events.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VCalendar/util/events.ts ***!
+  \*************************************************/
+          /*! exports provided: parseEvent, isEventOn, isEventStart, isEventOverlapping */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parseEvent",
+              function () {
+                return parseEvent;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "isEventOn",
+              function () {
+                return isEventOn;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "isEventStart",
+              function () {
+                return isEventStart;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "isEventOverlapping",
+              function () {
+                return isEventOverlapping;
+              }
+            );
+            /* harmony import */ var _timestamp__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+
+            function parseEvent(
+              input,
+              index,
+              startProperty,
+              endProperty,
+              timed,
+              category
+            ) {
+              if (timed === void 0) {
+                timed = false;
+              }
 
-  return ar;
-}; // Styles
-
-
- // Directives
-
- // Components
-
- // Mixins
-
- // Util
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_calendar_with_intervals__WEBPACK_IMPORTED_MODULE_3__["default"].extend({
-  name: 'v-calendar-daily',
-  directives: {
-    Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_1__["default"]
-  },
-  data: function data() {
-    return {
-      scrollPush: 0
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-calendar-daily': true
-      }, this.themeClasses);
-    }
-  },
-  mounted: function mounted() {
-    this.init();
-  },
-  methods: {
-    init: function init() {
-      this.$nextTick(this.onResize);
-    },
-    onResize: function onResize() {
-      this.scrollPush = this.getScrollPush();
-    },
-    getScrollPush: function getScrollPush() {
-      var area = this.$refs.scrollArea;
-      var pane = this.$refs.pane;
-      return area && pane ? area.offsetWidth - pane.offsetWidth : 0;
-    },
-    genHead: function genHead() {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-daily__head',
-        style: {
-          marginRight: this.scrollPush + 'px'
-        }
-      }, __spread([this.genHeadIntervals()], this.genHeadDays()));
-    },
-    genHeadIntervals: function genHeadIntervals() {
-      var width = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.intervalWidth);
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-daily__intervals-head',
-        style: {
-          width: width
-        }
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(this, 'interval-header'));
-    },
-    genHeadDays: function genHeadDays() {
-      return this.days.map(this.genHeadDay);
-    },
-    genHeadDay: function genHeadDay(day, index) {
-      var _this = this;
-
-      return this.$createElement('div', {
-        key: day.date,
-        staticClass: 'v-calendar-daily_head-day',
-        class: this.getRelativeClasses(day),
-        on: this.getDefaultMouseEventHandlers(':day', function (_e) {
-          return _this.getSlotScope(day);
-        })
-      }, __spread([this.genHeadWeekday(day), this.genHeadDayLabel(day)], this.genDayHeader(day, index)));
-    },
-    genDayHeader: function genDayHeader(day, index) {
-      var _this = this;
-
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(this, 'day-header', function () {
-        return __assign(__assign({
-          week: _this.days
-        }, day), {
-          index: index
-        });
-      }) || [];
-    },
-    genHeadWeekday: function genHeadWeekday(day) {
-      var color = day.present ? this.color : undefined;
-      return this.$createElement('div', this.setTextColor(color, {
-        staticClass: 'v-calendar-daily_head-weekday'
-      }), this.weekdayFormatter(day, this.shortWeekdays));
-    },
-    genHeadDayLabel: function genHeadDayLabel(day) {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-daily_head-day-label'
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(this, 'day-label-header', day) || [this.genHeadDayButton(day)]);
-    },
-    genHeadDayButton: function genHeadDayButton(day) {
-      var color = day.present ? this.color : 'transparent';
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          color: color,
-          fab: true,
-          depressed: true
-        },
-        on: this.getMouseEventHandlers({
-          'click:date': {
-            event: 'click',
-            stop: true
-          },
-          'contextmenu:date': {
-            event: 'contextmenu',
-            stop: true,
-            prevent: true,
-            result: false
-          }
-        }, function (_e) {
-          return day;
-        })
-      }, this.dayFormatter(day, false));
-    },
-    genBody: function genBody() {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-daily__body'
-      }, [this.genScrollArea()]);
-    },
-    genScrollArea: function genScrollArea() {
-      return this.$createElement('div', {
-        ref: 'scrollArea',
-        staticClass: 'v-calendar-daily__scroll-area'
-      }, [this.genPane()]);
-    },
-    genPane: function genPane() {
-      return this.$createElement('div', {
-        ref: 'pane',
-        staticClass: 'v-calendar-daily__pane',
-        style: {
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.bodyHeight)
-        }
-      }, [this.genDayContainer()]);
-    },
-    genDayContainer: function genDayContainer() {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-daily__day-container'
-      }, __spread([this.genBodyIntervals()], this.genDays()));
-    },
-    genDays: function genDays() {
-      return this.days.map(this.genDay);
-    },
-    genDay: function genDay(day, index) {
-      var _this = this;
-
-      return this.$createElement('div', {
-        key: day.date,
-        staticClass: 'v-calendar-daily__day',
-        class: this.getRelativeClasses(day),
-        on: this.getDefaultMouseEventHandlers(':time', function (e) {
-          return _this.getSlotScope(_this.getTimestampAtEvent(e, day));
-        })
-      }, __spread(this.genDayIntervals(index), this.genDayBody(day)));
-    },
-    genDayBody: function genDayBody(day) {
-      var _this = this;
-
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(this, 'day-body', function () {
-        return _this.getSlotScope(day);
-      }) || [];
-    },
-    genDayIntervals: function genDayIntervals(index) {
-      return this.intervals[index].map(this.genDayInterval);
-    },
-    genDayInterval: function genDayInterval(interval) {
-      var _this = this;
-
-      var height = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.intervalHeight);
-      var styler = this.intervalStyle || this.intervalStyleDefault;
-      var data = {
-        key: interval.time,
-        staticClass: 'v-calendar-daily__day-interval',
-        style: __assign({
-          height: height
-        }, styler(interval))
-      };
-      var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(this, 'interval', function () {
-        return _this.getSlotScope(interval);
-      });
-      return this.$createElement('div', data, children);
-    },
-    genBodyIntervals: function genBodyIntervals() {
-      var _this = this;
-
-      var width = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.intervalWidth);
-      var data = {
-        staticClass: 'v-calendar-daily__intervals-body',
-        style: {
-          width: width
-        },
-        on: this.getDefaultMouseEventHandlers(':interval', function (e) {
-          return _this.getTimestampAtEvent(e, _this.parsedStart);
-        })
-      };
-      return this.$createElement('div', data, this.genIntervalLabels());
-    },
-    genIntervalLabels: function genIntervalLabels() {
-      if (!this.intervals.length) return null;
-      return this.intervals[0].map(this.genIntervalLabel);
-    },
-    genIntervalLabel: function genIntervalLabel(interval) {
-      var height = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.intervalHeight);
-      var short = this.shortIntervals;
-      var shower = this.showIntervalLabel || this.showIntervalLabelDefault;
-      var show = shower(interval);
-      var label = show ? this.intervalFormatter(interval, short) : undefined;
-      return this.$createElement('div', {
-        key: interval.time,
-        staticClass: 'v-calendar-daily__interval',
-        style: {
-          height: height
-        }
-      }, [this.$createElement('div', {
-        staticClass: 'v-calendar-daily__interval-text'
-      }, label)]);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      class: this.classes,
-      on: {
-        dragstart: function dragstart(e) {
-          e.preventDefault();
-        }
-      },
-      directives: [{
-        modifiers: {
-          quiet: true
-        },
-        name: 'resize',
-        value: this.onResize
-      }]
-    }, [!this.hideHeader ? this.genHead() : '', this.genBody()]);
-  }
-}));
+              if (category === void 0) {
+                category = false;
+              }
 
-/***/ }),
+              var startInput = input[startProperty];
+              var endInput = input[endProperty];
+              var startParsed = Object(
+                _timestamp__WEBPACK_IMPORTED_MODULE_0__["parseTimestamp"]
+              )(startInput, true);
+              var endParsed = endInput
+                ? Object(
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__["parseTimestamp"]
+                  )(endInput, true)
+                : startParsed;
+              var start = Object(
+                _timestamp__WEBPACK_IMPORTED_MODULE_0__["isTimedless"]
+              )(startInput)
+                ? Object(
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__["updateHasTime"]
+                  )(startParsed, timed)
+                : startParsed;
+              var end = Object(
+                _timestamp__WEBPACK_IMPORTED_MODULE_0__["isTimedless"]
+              )(endInput)
+                ? Object(
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__["updateHasTime"]
+                  )(endParsed, timed)
+                : endParsed;
+              var startIdentifier = Object(
+                _timestamp__WEBPACK_IMPORTED_MODULE_0__["getDayIdentifier"]
+              )(start);
+              var startTimestampIdentifier = Object(
+                _timestamp__WEBPACK_IMPORTED_MODULE_0__[
+                  "getTimestampIdentifier"
+                ]
+              )(start);
+              var endIdentifier = Object(
+                _timestamp__WEBPACK_IMPORTED_MODULE_0__["getDayIdentifier"]
+              )(end);
+              var endOffset = start.hasTime ? 0 : 2359;
+              var endTimestampIdentifier =
+                Object(
+                  _timestamp__WEBPACK_IMPORTED_MODULE_0__[
+                    "getTimestampIdentifier"
+                  ]
+                )(end) + endOffset;
+              var allDay = !start.hasTime;
+              return {
+                input: input,
+                start: start,
+                startIdentifier: startIdentifier,
+                startTimestampIdentifier: startTimestampIdentifier,
+                end: end,
+                endIdentifier: endIdentifier,
+                endTimestampIdentifier: endTimestampIdentifier,
+                allDay: allDay,
+                index: index,
+                category: category,
+              };
+            }
+            function isEventOn(event, dayIdentifier) {
+              return (
+                dayIdentifier >= event.startIdentifier &&
+                dayIdentifier <= event.endIdentifier &&
+                dayIdentifier *
+                  _timestamp__WEBPACK_IMPORTED_MODULE_0__["OFFSET_TIME"] !==
+                  event.endTimestampIdentifier
+              );
+            }
+            function isEventStart(event, day, dayIdentifier, firstWeekday) {
+              return (
+                dayIdentifier === event.startIdentifier ||
+                (firstWeekday === day.weekday &&
+                  isEventOn(event, dayIdentifier))
+              );
+            }
+            function isEventOverlapping(event, startIdentifier, endIdentifier) {
+              return (
+                startIdentifier <= event.endIdentifier &&
+                endIdentifier >= event.startIdentifier
+              );
+            }
 
-/***/ "./src/components/VCalendar/VCalendarMonthly.ts":
-/*!******************************************************!*\
-  !*** ./src/components/VCalendar/VCalendarMonthly.ts ***!
-  \******************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCalendarWeekly.sass */ "./src/components/VCalendar/VCalendarWeekly.sass");
-/* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VCalendarWeekly */ "./src/components/VCalendar/VCalendarWeekly.ts");
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-// Styles
- // Mixins
-
- // Util
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VCalendarWeekly__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-calendar-monthly',
-  computed: {
-    staticClass: function staticClass() {
-      return 'v-calendar-monthly v-calendar-weekly';
-    },
-    parsedStart: function parsedStart() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["getStartOfMonth"])(Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTimestamp"])(this.start, true));
-    },
-    parsedEnd: function parsedEnd() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["getEndOfMonth"])(Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTimestamp"])(this.end, true));
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VCalendar/util/props.ts":
+          /*!************************************************!*\
+  !*** ./src/components/VCalendar/util/props.ts ***!
+  \************************************************/
+          /*! exports provided: default, validateNumber, validateWeekdays */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "validateNumber",
+              function () {
+                return validateNumber;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "validateWeekdays",
+              function () {
+                return validateWeekdays;
+              }
+            );
+            /* harmony import */ var _timestamp__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            /* harmony import */ var _modes__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../modes */ "./src/components/VCalendar/modes/index.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              base: {
+                start: {
+                  type: [String, Number, Date],
+                  validate:
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__[
+                      "validateTimestamp"
+                    ],
+                  default: function _default() {
+                    return Object(
+                      _timestamp__WEBPACK_IMPORTED_MODULE_0__["parseDate"]
+                    )(new Date()).date;
+                  },
+                },
+                end: {
+                  type: [String, Number, Date],
+                  validate:
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__[
+                      "validateTimestamp"
+                    ],
+                },
+                weekdays: {
+                  type: [Array, String],
+                  default: function _default() {
+                    return [0, 1, 2, 3, 4, 5, 6];
+                  },
+                  validate: validateWeekdays,
+                },
+                hideHeader: {
+                  type: Boolean,
+                },
+                shortWeekdays: {
+                  type: Boolean,
+                  default: true,
+                },
+                weekdayFormat: {
+                  type: Function,
+                  default: null,
+                },
+                dayFormat: {
+                  type: Function,
+                  default: null,
+                },
+              },
+              intervals: {
+                maxDays: {
+                  type: Number,
+                  default: 7,
+                },
+                shortIntervals: {
+                  type: Boolean,
+                  default: true,
+                },
+                intervalHeight: {
+                  type: [Number, String],
+                  default: 48,
+                  validate: validateNumber,
+                },
+                intervalWidth: {
+                  type: [Number, String],
+                  default: 60,
+                  validate: validateNumber,
+                },
+                intervalMinutes: {
+                  type: [Number, String],
+                  default: 60,
+                  validate: validateNumber,
+                },
+                firstInterval: {
+                  type: [Number, String],
+                  default: 0,
+                  validate: validateNumber,
+                },
+                firstTime: {
+                  type: [Number, String, Object],
+                  validate:
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__["validateTime"],
+                },
+                intervalCount: {
+                  type: [Number, String],
+                  default: 24,
+                  validate: validateNumber,
+                },
+                intervalFormat: {
+                  type: Function,
+                  default: null,
+                },
+                intervalStyle: {
+                  type: Function,
+                  default: null,
+                },
+                showIntervalLabel: {
+                  type: Function,
+                  default: null,
+                },
+              },
+              weeks: {
+                localeFirstDayOfYear: {
+                  type: [String, Number],
+                  default: 0,
+                },
+                minWeeks: {
+                  validate: validateNumber,
+                  default: 1,
+                },
+                shortMonths: {
+                  type: Boolean,
+                  default: true,
+                },
+                showMonthOnFirst: {
+                  type: Boolean,
+                  default: true,
+                },
+                showWeek: Boolean,
+                monthFormat: {
+                  type: Function,
+                  default: null,
+                },
+              },
+              calendar: {
+                type: {
+                  type: String,
+                  default: "month",
+                },
+                value: {
+                  type: [String, Number, Date],
+                  validate:
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__[
+                      "validateTimestamp"
+                    ],
+                },
+              },
+              category: {
+                categories: {
+                  type: [Array, String],
+                  default: "",
+                },
+                categoryHideDynamic: {
+                  type: Boolean,
+                },
+                categoryShowAll: {
+                  type: Boolean,
+                },
+                categoryForInvalid: {
+                  type: String,
+                  default: "",
+                },
+                categoryDays: {
+                  type: [Number, String],
+                  default: 1,
+                  validate: function validate(x) {
+                    return isFinite(parseInt(x)) && parseInt(x) > 0;
+                  },
+                },
+              },
+              events: {
+                events: {
+                  type: Array,
+                  default: function _default() {
+                    return [];
+                  },
+                },
+                eventStart: {
+                  type: String,
+                  default: "start",
+                },
+                eventEnd: {
+                  type: String,
+                  default: "end",
+                },
+                eventTimed: {
+                  type: [String, Function],
+                  default: "timed",
+                },
+                eventCategory: {
+                  type: [String, Function],
+                  default: "category",
+                },
+                eventHeight: {
+                  type: Number,
+                  default: 20,
+                },
+                eventColor: {
+                  type: [String, Function],
+                  default: "primary",
+                },
+                eventTextColor: {
+                  type: [String, Function],
+                  default: "white",
+                },
+                eventName: {
+                  type: [String, Function],
+                  default: "name",
+                },
+                eventOverlapThreshold: {
+                  type: [String, Number],
+                  default: 60,
+                },
+                eventOverlapMode: {
+                  type: [String, Function],
+                  default: "stack",
+                  validate: function validate(mode) {
+                    return (
+                      mode in
+                        _modes__WEBPACK_IMPORTED_MODULE_1__[
+                          "CalendarEventOverlapModes"
+                        ] || typeof mode === "function"
+                    );
+                  },
+                },
+                eventMore: {
+                  type: Boolean,
+                  default: true,
+                },
+                eventMoreText: {
+                  type: String,
+                  default: "$vuetify.calendar.moreEvents",
+                },
+                eventRipple: {
+                  type: [Boolean, Object],
+                  default: null,
+                },
+                eventMarginBottom: {
+                  type: Number,
+                  default: 1,
+                },
+              },
+            };
+            function validateNumber(input) {
+              return isFinite(parseInt(input));
+            }
+            function validateWeekdays(input) {
+              if (typeof input === "string") {
+                input = input.split(",");
+              }
 
-/***/ "./src/components/VCalendar/VCalendarWeekly.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VCalendar/VCalendarWeekly.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+              if (Array.isArray(input)) {
+                var ints = input.map(function (x) {
+                  return parseInt(x);
+                });
+
+                if (
+                  ints.length >
+                    _timestamp__WEBPACK_IMPORTED_MODULE_0__["DAYS_IN_WEEK"] ||
+                  ints.length === 0
+                ) {
+                  return false;
+                }
 
-// extracted by mini-css-extract-plugin
+                var visited = {};
+                var wrapped = false;
 
-/***/ }),
+                for (var i = 0; i < ints.length; i++) {
+                  var x = ints[i];
 
-/***/ "./src/components/VCalendar/VCalendarWeekly.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VCalendar/VCalendarWeekly.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCalendarWeekly.sass */ "./src/components/VCalendar/VCalendarWeekly.sass");
-/* harmony import */ var _VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCalendarWeekly_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _mixins_calendar_base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mixins/calendar-base */ "./src/components/VCalendar/mixins/calendar-base.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/dateTimeUtils */ "./src/util/dateTimeUtils.ts");
-/* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util/props */ "./src/components/VCalendar/util/props.ts");
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+                  if (
+                    !isFinite(x) ||
+                    x < 0 ||
+                    x >= _timestamp__WEBPACK_IMPORTED_MODULE_0__["DAYS_IN_WEEK"]
+                  ) {
+                    return false;
+                  }
 
-  return ar;
-};
+                  if (i > 0) {
+                    var d = x - ints[i - 1];
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+                    if (d < 0) {
+                      if (wrapped) {
+                        return false;
+                      }
 
-  return ar;
-}; // Styles
+                      wrapped = true;
+                    } else if (d === 0) {
+                      return false;
+                    }
+                  }
 
+                  if (visited[x]) {
+                    return false;
+                  }
 
- // Components
+                  visited[x] = true;
+                }
 
- // Mixins
+                return true;
+              }
 
- // Util
+              return false;
+            }
 
+            /***/
+          },
 
+        /***/ "./src/components/VCalendar/util/timestamp.ts":
+          /*!****************************************************!*\
+  !*** ./src/components/VCalendar/util/timestamp.ts ***!
+  \****************************************************/
+          /*! exports provided: PARSE_REGEX, PARSE_TIME, DAYS_IN_MONTH, DAYS_IN_MONTH_LEAP, DAYS_IN_MONTH_MIN, DAYS_IN_MONTH_MAX, MONTH_MAX, MONTH_MIN, DAY_MIN, DAYS_IN_WEEK, MINUTES_IN_HOUR, MINUTE_MAX, MINUTES_IN_DAY, HOURS_IN_DAY, HOUR_MAX, FIRST_HOUR, OFFSET_YEAR, OFFSET_MONTH, OFFSET_HOUR, OFFSET_TIME, getStartOfWeek, getEndOfWeek, getStartOfMonth, getEndOfMonth, validateTime, parseTime, validateTimestamp, parseTimestamp, parseDate, getDayIdentifier, getTimeIdentifier, getTimestampIdentifier, updateRelative, isTimedless, updateHasTime, updateMinutes, updateWeekday, updateFormatted, getWeekday, daysInMonth, copyTimestamp, padNumber, getDate, getTime, nextMinutes, nextDay, prevDay, relativeDays, diffMinutes, findWeekday, getWeekdaySkips, timestampToDate, createDayList, createIntervalList, createNativeLocaleFormatter */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "PARSE_REGEX",
+              function () {
+                return PARSE_REGEX;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "PARSE_TIME",
+              function () {
+                return PARSE_TIME;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "DAYS_IN_MONTH",
+              function () {
+                return DAYS_IN_MONTH;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "DAYS_IN_MONTH_LEAP",
+              function () {
+                return DAYS_IN_MONTH_LEAP;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "DAYS_IN_MONTH_MIN",
+              function () {
+                return DAYS_IN_MONTH_MIN;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "DAYS_IN_MONTH_MAX",
+              function () {
+                return DAYS_IN_MONTH_MAX;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "MONTH_MAX",
+              function () {
+                return MONTH_MAX;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "MONTH_MIN",
+              function () {
+                return MONTH_MIN;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "DAY_MIN",
+              function () {
+                return DAY_MIN;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "DAYS_IN_WEEK",
+              function () {
+                return DAYS_IN_WEEK;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "MINUTES_IN_HOUR",
+              function () {
+                return MINUTES_IN_HOUR;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "MINUTE_MAX",
+              function () {
+                return MINUTE_MAX;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "MINUTES_IN_DAY",
+              function () {
+                return MINUTES_IN_DAY;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HOURS_IN_DAY",
+              function () {
+                return HOURS_IN_DAY;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HOUR_MAX",
+              function () {
+                return HOUR_MAX;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "FIRST_HOUR",
+              function () {
+                return FIRST_HOUR;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "OFFSET_YEAR",
+              function () {
+                return OFFSET_YEAR;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "OFFSET_MONTH",
+              function () {
+                return OFFSET_MONTH;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "OFFSET_HOUR",
+              function () {
+                return OFFSET_HOUR;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "OFFSET_TIME",
+              function () {
+                return OFFSET_TIME;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getStartOfWeek",
+              function () {
+                return getStartOfWeek;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getEndOfWeek",
+              function () {
+                return getEndOfWeek;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getStartOfMonth",
+              function () {
+                return getStartOfMonth;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getEndOfMonth",
+              function () {
+                return getEndOfMonth;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "validateTime",
+              function () {
+                return validateTime;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parseTime",
+              function () {
+                return parseTime;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "validateTimestamp",
+              function () {
+                return validateTimestamp;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parseTimestamp",
+              function () {
+                return parseTimestamp;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parseDate",
+              function () {
+                return parseDate;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getDayIdentifier",
+              function () {
+                return getDayIdentifier;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getTimeIdentifier",
+              function () {
+                return getTimeIdentifier;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getTimestampIdentifier",
+              function () {
+                return getTimestampIdentifier;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "updateRelative",
+              function () {
+                return updateRelative;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "isTimedless",
+              function () {
+                return isTimedless;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "updateHasTime",
+              function () {
+                return updateHasTime;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "updateMinutes",
+              function () {
+                return updateMinutes;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "updateWeekday",
+              function () {
+                return updateWeekday;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "updateFormatted",
+              function () {
+                return updateFormatted;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getWeekday",
+              function () {
+                return getWeekday;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "daysInMonth",
+              function () {
+                return daysInMonth;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "copyTimestamp",
+              function () {
+                return copyTimestamp;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "padNumber",
+              function () {
+                return padNumber;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getDate",
+              function () {
+                return getDate;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getTime",
+              function () {
+                return getTime;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "nextMinutes",
+              function () {
+                return nextMinutes;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "nextDay",
+              function () {
+                return nextDay;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "prevDay",
+              function () {
+                return prevDay;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "relativeDays",
+              function () {
+                return relativeDays;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "diffMinutes",
+              function () {
+                return diffMinutes;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "findWeekday",
+              function () {
+                return findWeekday;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getWeekdaySkips",
+              function () {
+                return getWeekdaySkips;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "timestampToDate",
+              function () {
+                return timestampToDate;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createDayList",
+              function () {
+                return createDayList;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createIntervalList",
+              function () {
+                return createIntervalList;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createNativeLocaleFormatter",
+              function () {
+                return createNativeLocaleFormatter;
+              }
+            );
+            /* harmony import */ var _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../../util/dateTimeUtils */ "./src/util/dateTimeUtils.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
+            var PARSE_REGEX =
+              /^(\d{4})-(\d{1,2})(-(\d{1,2}))?([^\d]+(\d{1,2}))?(:(\d{1,2}))?(:(\d{1,2}))?$/;
+            var PARSE_TIME = /(\d\d?)(:(\d\d?)|)(:(\d\d?)|)/;
+            var DAYS_IN_MONTH = [
+              0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
+            ];
+            var DAYS_IN_MONTH_LEAP = [
+              0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
+            ];
+            var DAYS_IN_MONTH_MIN = 28;
+            var DAYS_IN_MONTH_MAX = 31;
+            var MONTH_MAX = 12;
+            var MONTH_MIN = 1;
+            var DAY_MIN = 1;
+            var DAYS_IN_WEEK = 7;
+            var MINUTES_IN_HOUR = 60;
+            var MINUTE_MAX = 59;
+            var MINUTES_IN_DAY = 24 * 60;
+            var HOURS_IN_DAY = 24;
+            var HOUR_MAX = 23;
+            var FIRST_HOUR = 0;
+            var OFFSET_YEAR = 10000;
+            var OFFSET_MONTH = 100;
+            var OFFSET_HOUR = 100;
+            var OFFSET_TIME = 10000;
+            function getStartOfWeek(timestamp, weekdays, today) {
+              var start = copyTimestamp(timestamp);
+              findWeekday(start, weekdays[0], prevDay);
+              updateFormatted(start);
+
+              if (today) {
+                updateRelative(start, today, start.hasTime);
+              }
 
+              return start;
+            }
+            function getEndOfWeek(timestamp, weekdays, today) {
+              var end = copyTimestamp(timestamp);
+              findWeekday(end, weekdays[weekdays.length - 1]);
+              updateFormatted(end);
 
-/* @vue/component */
+              if (today) {
+                updateRelative(end, today, end.hasTime);
+              }
 
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_calendar_base__WEBPACK_IMPORTED_MODULE_2__["default"].extend({
-  name: 'v-calendar-weekly',
-  props: _util_props__WEBPACK_IMPORTED_MODULE_5__["default"].weeks,
-  computed: {
-    staticClass: function staticClass() {
-      return 'v-calendar-weekly';
-    },
-    classes: function classes() {
-      return this.themeClasses;
-    },
-    parsedMinWeeks: function parsedMinWeeks() {
-      return parseInt(this.minWeeks);
-    },
-    days: function days() {
-      var minDays = this.parsedMinWeeks * this.parsedWeekdays.length;
-      var start = this.getStartOfWeek(this.parsedStart);
-      var end = this.getEndOfWeek(this.parsedEnd);
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["createDayList"])(start, end, this.times.today, this.weekdaySkips, Number.MAX_SAFE_INTEGER, minDays);
-    },
-    todayWeek: function todayWeek() {
-      var today = this.times.today;
-      var start = this.getStartOfWeek(today);
-      var end = this.getEndOfWeek(today);
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["createDayList"])(start, end, today, this.weekdaySkips, this.parsedWeekdays.length, this.parsedWeekdays.length);
-    },
-    monthFormatter: function monthFormatter() {
-      if (this.monthFormat) {
-        return this.monthFormat;
-      }
+              return end;
+            }
+            function getStartOfMonth(timestamp) {
+              var start = copyTimestamp(timestamp);
+              start.day = DAY_MIN;
+              updateWeekday(start);
+              updateFormatted(start);
+              return start;
+            }
+            function getEndOfMonth(timestamp) {
+              var end = copyTimestamp(timestamp);
+              end.day = daysInMonth(end.year, end.month);
+              updateWeekday(end);
+              updateFormatted(end);
+              return end;
+            }
+            function validateTime(input) {
+              return (
+                (typeof input === "number" && isFinite(input)) ||
+                !!PARSE_TIME.exec(input) ||
+                (_typeof(input) === "object" &&
+                  isFinite(input.hour) &&
+                  isFinite(input.minute))
+              );
+            }
+            function parseTime(input) {
+              if (typeof input === "number") {
+                // when a number is given, it's minutes since 12:00am
+                return input;
+              } else if (typeof input === "string") {
+                // when a string is given, it's a hh:mm:ss format where seconds are optional
+                var parts = PARSE_TIME.exec(input);
+
+                if (!parts) {
+                  return false;
+                }
 
-      var longOptions = {
-        timeZone: 'UTC',
-        month: 'long'
-      };
-      var shortOptions = {
-        timeZone: 'UTC',
-        month: 'short'
-      };
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["createNativeLocaleFormatter"])(this.currentLocale, function (_tms, short) {
-        return short ? shortOptions : longOptions;
-      });
-    }
-  },
-  methods: {
-    isOutside: function isOutside(day) {
-      var dayIdentifier = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(day);
-      return dayIdentifier < Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(this.parsedStart) || dayIdentifier > Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(this.parsedEnd);
-    },
-    genHead: function genHead() {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-weekly__head'
-      }, this.genHeadDays());
-    },
-    genHeadDays: function genHeadDays() {
-      var header = this.todayWeek.map(this.genHeadDay);
-
-      if (this.showWeek) {
-        header.unshift(this.$createElement('div', {
-          staticClass: 'v-calendar-weekly__head-weeknumber'
-        }));
-      }
+                return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0);
+              } else if (_typeof(input) === "object") {
+                // when an object is given, it must have hour and minute
+                if (
+                  typeof input.hour !== "number" ||
+                  typeof input.minute !== "number"
+                ) {
+                  return false;
+                }
 
-      return header;
-    },
-    genHeadDay: function genHeadDay(day, index) {
-      var outside = this.isOutside(this.days[index]);
-      var color = day.present ? this.color : undefined;
-      return this.$createElement('div', this.setTextColor(color, {
-        key: day.date,
-        staticClass: 'v-calendar-weekly__head-weekday',
-        class: this.getRelativeClasses(day, outside)
-      }), this.weekdayFormatter(day, this.shortWeekdays));
-    },
-    genWeeks: function genWeeks() {
-      var days = this.days;
-      var weekDays = this.parsedWeekdays.length;
-      var weeks = [];
-
-      for (var i = 0; i < days.length; i += weekDays) {
-        weeks.push(this.genWeek(days.slice(i, i + weekDays), this.getWeekNumber(days[i])));
-      }
+                return input.hour * 60 + input.minute;
+              } else {
+                // unsupported type
+                return false;
+              }
+            }
+            function validateTimestamp(input) {
+              return (
+                (typeof input === "number" && isFinite(input)) ||
+                (typeof input === "string" && !!PARSE_REGEX.exec(input)) ||
+                input instanceof Date
+              );
+            }
+            function parseTimestamp(input, required, now) {
+              if (required === void 0) {
+                required = false;
+              }
 
-      return weeks;
-    },
-    genWeek: function genWeek(week, weekNumber) {
-      var _this = this;
+              if (typeof input === "number" && isFinite(input)) {
+                input = new Date(input);
+              }
 
-      var weekNodes = week.map(function (day, index) {
-        return _this.genDay(day, index, week);
-      });
+              if (input instanceof Date) {
+                var date = parseDate(input);
 
-      if (this.showWeek) {
-        weekNodes.unshift(this.genWeekNumber(weekNumber));
-      }
+                if (now) {
+                  updateRelative(date, now, date.hasTime);
+                }
 
-      return this.$createElement('div', {
-        key: week[0].date,
-        staticClass: 'v-calendar-weekly__week'
-      }, weekNodes);
-    },
-    getWeekNumber: function getWeekNumber(determineDay) {
-      return Object(_util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_4__["weekNumber"])(determineDay.year, determineDay.month - 1, determineDay.day, this.parsedWeekdays[0], parseInt(this.localeFirstDayOfYear));
-    },
-    genWeekNumber: function genWeekNumber(weekNumber) {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-weekly__weeknumber'
-      }, [this.$createElement('small', String(weekNumber))]);
-    },
-    genDay: function genDay(day, index, week) {
-      var outside = this.isOutside(day);
-      return this.$createElement('div', {
-        key: day.date,
-        staticClass: 'v-calendar-weekly__day',
-        class: this.getRelativeClasses(day, outside),
-        on: this.getDefaultMouseEventHandlers(':day', function (_e) {
-          return day;
-        })
-      }, __spread([this.genDayLabel(day)], Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this, 'day', function () {
-        return __assign({
-          outside: outside,
-          index: index,
-          week: week
-        }, day);
-      }) || []));
-    },
-    genDayLabel: function genDayLabel(day) {
-      return this.$createElement('div', {
-        staticClass: 'v-calendar-weekly__day-label'
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this, 'day-label', day) || [this.genDayLabelButton(day)]);
-    },
-    genDayLabelButton: function genDayLabelButton(day) {
-      var color = day.present ? this.color : 'transparent';
-      var hasMonth = day.day === 1 && this.showMonthOnFirst;
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          color: color,
-          fab: true,
-          depressed: true,
-          small: true
-        },
-        on: this.getMouseEventHandlers({
-          'click:date': {
-            event: 'click',
-            stop: true
-          },
-          'contextmenu:date': {
-            event: 'contextmenu',
-            stop: true,
-            prevent: true,
-            result: false
-          }
-        }, function (_e) {
-          return day;
-        })
-      }, hasMonth ? this.monthFormatter(day, this.shortMonths) + ' ' + this.dayFormatter(day, false) : this.dayFormatter(day, false));
-    },
-    genDayMonth: function genDayMonth(day) {
-      var color = day.present ? this.color : undefined;
-      return this.$createElement('div', this.setTextColor(color, {
-        staticClass: 'v-calendar-weekly__day-month'
-      }), Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this, 'day-month', day) || this.monthFormatter(day, this.shortMonths));
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: this.staticClass,
-      class: this.classes,
-      on: {
-        dragstart: function dragstart(e) {
-          e.preventDefault();
-        }
-      }
-    }, __spread([!this.hideHeader ? this.genHead() : ''], this.genWeeks()));
-  }
-}));
+                return date;
+              }
 
-/***/ }),
+              if (typeof input !== "string") {
+                if (required) {
+                  throw new Error(
+                    input +
+                      " is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored."
+                  );
+                }
 
-/***/ "./src/components/VCalendar/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VCalendar/index.ts ***!
-  \*******************************************/
-/*! exports provided: VCalendar, VCalendarCategory, VCalendarDaily, VCalendarWeekly, VCalendarMonthly, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                return null;
+              } // YYYY-MM-DD hh:mm:ss
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCalendar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCalendar */ "./src/components/VCalendar/VCalendar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendar", function() { return _VCalendar__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+              var parts = PARSE_REGEX.exec(input);
 
-/* harmony import */ var _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VCalendarDaily */ "./src/components/VCalendar/VCalendarDaily.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarDaily", function() { return _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+              if (!parts) {
+                if (required) {
+                  throw new Error(
+                    input +
+                      " is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored."
+                  );
+                }
 
-/* harmony import */ var _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VCalendarWeekly */ "./src/components/VCalendar/VCalendarWeekly.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarWeekly", function() { return _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_2__["default"]; });
+                return null;
+              }
 
-/* harmony import */ var _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VCalendarMonthly */ "./src/components/VCalendar/VCalendarMonthly.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarMonthly", function() { return _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__["default"]; });
+              var timestamp = {
+                date: input,
+                time: "",
+                year: parseInt(parts[1]),
+                month: parseInt(parts[2]),
+                day: parseInt(parts[4]) || 1,
+                hour: parseInt(parts[6]) || 0,
+                minute: parseInt(parts[8]) || 0,
+                weekday: 0,
+                hasDay: !!parts[4],
+                hasTime: !!(parts[6] && parts[8]),
+                past: false,
+                present: false,
+                future: false,
+              };
+              updateWeekday(timestamp);
+              updateFormatted(timestamp);
 
-/* harmony import */ var _VCalendarCategory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VCalendarCategory */ "./src/components/VCalendar/VCalendarCategory.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarCategory", function() { return _VCalendarCategory__WEBPACK_IMPORTED_MODULE_4__["default"]; });
+              if (now) {
+                updateRelative(timestamp, now, timestamp.hasTime);
+              }
 
+              return timestamp;
+            }
+            function parseDate(date) {
+              return updateFormatted({
+                date: "",
+                time: "",
+                year: date.getFullYear(),
+                month: date.getMonth() + 1,
+                day: date.getDate(),
+                weekday: date.getDay(),
+                hour: date.getHours(),
+                minute: date.getMinutes(),
+                hasDay: true,
+                hasTime: true,
+                past: false,
+                present: true,
+                future: false,
+              });
+            }
+            function getDayIdentifier(timestamp) {
+              return (
+                timestamp.year * OFFSET_YEAR +
+                timestamp.month * OFFSET_MONTH +
+                timestamp.day
+              );
+            }
+            function getTimeIdentifier(timestamp) {
+              return timestamp.hour * OFFSET_HOUR + timestamp.minute;
+            }
+            function getTimestampIdentifier(timestamp) {
+              return (
+                getDayIdentifier(timestamp) * OFFSET_TIME +
+                getTimeIdentifier(timestamp)
+              );
+            }
+            function updateRelative(timestamp, now, time) {
+              if (time === void 0) {
+                time = false;
+              }
 
+              var a = getDayIdentifier(now);
+              var b = getDayIdentifier(timestamp);
+              var present = a === b;
 
+              if (timestamp.hasTime && time && present) {
+                a = getTimeIdentifier(now);
+                b = getTimeIdentifier(timestamp);
+                present = a === b;
+              }
 
+              timestamp.past = b < a;
+              timestamp.present = present;
+              timestamp.future = b > a;
+              return timestamp;
+            }
+            function isTimedless(input) {
+              return (
+                input instanceof Date ||
+                (typeof input === "number" && isFinite(input))
+              );
+            }
+            function updateHasTime(timestamp, hasTime, now) {
+              if (timestamp.hasTime !== hasTime) {
+                timestamp.hasTime = hasTime;
+
+                if (!hasTime) {
+                  timestamp.hour = HOUR_MAX;
+                  timestamp.minute = MINUTE_MAX;
+                  timestamp.time = getTime(timestamp);
+                }
 
+                if (now) {
+                  updateRelative(timestamp, now, timestamp.hasTime);
+                }
+              }
 
+              return timestamp;
+            }
+            function updateMinutes(timestamp, minutes, now) {
+              timestamp.hasTime = true;
+              timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR);
+              timestamp.minute = minutes % MINUTES_IN_HOUR;
+              timestamp.time = getTime(timestamp);
+
+              if (now) {
+                updateRelative(timestamp, now, true);
+              }
 
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VCalendar: _VCalendar__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VCalendarCategory: _VCalendarCategory__WEBPACK_IMPORTED_MODULE_4__["default"],
-    VCalendarDaily: _VCalendarDaily__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VCalendarWeekly: _VCalendarWeekly__WEBPACK_IMPORTED_MODULE_2__["default"],
-    VCalendarMonthly: _VCalendarMonthly__WEBPACK_IMPORTED_MODULE_3__["default"]
-  }
-});
+              return timestamp;
+            }
+            function updateWeekday(timestamp) {
+              timestamp.weekday = getWeekday(timestamp);
+              return timestamp;
+            }
+            function updateFormatted(timestamp) {
+              timestamp.time = getTime(timestamp);
+              timestamp.date = getDate(timestamp);
+              return timestamp;
+            }
+            function getWeekday(timestamp) {
+              if (timestamp.hasDay) {
+                var _ = Math.floor;
+                var k = timestamp.day;
+                var m = ((timestamp.month + 9) % MONTH_MAX) + 1;
+
+                var C = _(timestamp.year / 100);
+
+                var Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0);
+                return (
+                  (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) %
+                    7) +
+                    7) %
+                  7
+                );
+              }
 
-/***/ }),
+              return timestamp.weekday;
+            }
+            function daysInMonth(year, month) {
+              return Object(
+                _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_0__["isLeapYear"]
+              )(year)
+                ? DAYS_IN_MONTH_LEAP[month]
+                : DAYS_IN_MONTH[month];
+            }
+            function copyTimestamp(timestamp) {
+              var date = timestamp.date,
+                time = timestamp.time,
+                year = timestamp.year,
+                month = timestamp.month,
+                day = timestamp.day,
+                weekday = timestamp.weekday,
+                hour = timestamp.hour,
+                minute = timestamp.minute,
+                hasDay = timestamp.hasDay,
+                hasTime = timestamp.hasTime,
+                past = timestamp.past,
+                present = timestamp.present,
+                future = timestamp.future;
+              return {
+                date: date,
+                time: time,
+                year: year,
+                month: month,
+                day: day,
+                weekday: weekday,
+                hour: hour,
+                minute: minute,
+                hasDay: hasDay,
+                hasTime: hasTime,
+                past: past,
+                present: present,
+                future: future,
+              };
+            }
+            function padNumber(x, length) {
+              var padded = String(x);
 
-/***/ "./src/components/VCalendar/mixins/calendar-base.ts":
-/*!**********************************************************!*\
-  !*** ./src/components/VCalendar/mixins/calendar-base.ts ***!
-  \**********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../mixins/localable */ "./src/mixins/localable/index.ts");
-/* harmony import */ var _mouse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mouse */ "./src/components/VCalendar/mixins/mouse.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _times__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./times */ "./src/components/VCalendar/mixins/times.ts");
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/props */ "./src/components/VCalendar/util/props.ts");
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-// Mixins
-
-
-
-
-
- // Directives
-
- // Util
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_localable__WEBPACK_IMPORTED_MODULE_2__["default"], _mouse__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"], _times__WEBPACK_IMPORTED_MODULE_5__["default"]
-/* @vue/component */
-).extend({
-  name: 'calendar-base',
-  directives: {
-    Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_6__["default"]
-  },
-  props: _util_props__WEBPACK_IMPORTED_MODULE_7__["default"].base,
-  computed: {
-    parsedWeekdays: function parsedWeekdays() {
-      return Array.isArray(this.weekdays) ? this.weekdays : (this.weekdays || '').split(',').map(function (x) {
-        return parseInt(x, 10);
-      });
-    },
-    weekdaySkips: function weekdaySkips() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["getWeekdaySkips"])(this.parsedWeekdays);
-    },
-    weekdaySkipsReverse: function weekdaySkipsReverse() {
-      var reversed = this.weekdaySkips.slice();
-      reversed.reverse();
-      return reversed;
-    },
-    parsedStart: function parsedStart() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["parseTimestamp"])(this.start, true);
-    },
-    parsedEnd: function parsedEnd() {
-      var start = this.parsedStart;
-      var end = this.end ? Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["parseTimestamp"])(this.end) || start : start;
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["getTimestampIdentifier"])(end) < Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["getTimestampIdentifier"])(start) ? start : end;
-    },
-    days: function days() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["createDayList"])(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips);
-    },
-    dayFormatter: function dayFormatter() {
-      if (this.dayFormat) {
-        return this.dayFormat;
-      }
+              while (padded.length < length) {
+                padded = "0" + padded;
+              }
 
-      var options = {
-        timeZone: 'UTC',
-        day: 'numeric'
-      };
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["createNativeLocaleFormatter"])(this.currentLocale, function (_tms, _short) {
-        return options;
-      });
-    },
-    weekdayFormatter: function weekdayFormatter() {
-      if (this.weekdayFormat) {
-        return this.weekdayFormat;
-      }
+              return padded;
+            }
+            function getDate(timestamp) {
+              var str =
+                padNumber(timestamp.year, 4) +
+                "-" +
+                padNumber(timestamp.month, 2);
+              if (timestamp.hasDay) str += "-" + padNumber(timestamp.day, 2);
+              return str;
+            }
+            function getTime(timestamp) {
+              if (!timestamp.hasTime) {
+                return "";
+              }
 
-      var longOptions = {
-        timeZone: 'UTC',
-        weekday: 'long'
-      };
-      var shortOptions = {
-        timeZone: 'UTC',
-        weekday: 'short'
-      };
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["createNativeLocaleFormatter"])(this.currentLocale, function (_tms, short) {
-        return short ? shortOptions : longOptions;
-      });
-    }
-  },
-  methods: {
-    getRelativeClasses: function getRelativeClasses(timestamp, outside) {
-      if (outside === void 0) {
-        outside = false;
-      }
+              return (
+                padNumber(timestamp.hour, 2) +
+                ":" +
+                padNumber(timestamp.minute, 2)
+              );
+            }
+            function nextMinutes(timestamp, minutes) {
+              timestamp.minute += minutes;
 
-      return {
-        'v-present': timestamp.present,
-        'v-past': timestamp.past,
-        'v-future': timestamp.future,
-        'v-outside': outside
-      };
-    },
-    getStartOfWeek: function getStartOfWeek(timestamp) {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["getStartOfWeek"])(timestamp, this.parsedWeekdays, this.times.today);
-    },
-    getEndOfWeek: function getEndOfWeek(timestamp) {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["getEndOfWeek"])(timestamp, this.parsedWeekdays, this.times.today);
-    },
-    getFormatter: function getFormatter(options) {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_8__["createNativeLocaleFormatter"])(this.locale, function (_tms, _short) {
-        return options;
-      });
-    }
-  }
-}));
+              while (timestamp.minute > MINUTES_IN_HOUR) {
+                timestamp.minute -= MINUTES_IN_HOUR;
+                timestamp.hour++;
 
-/***/ }),
+                if (timestamp.hour >= HOURS_IN_DAY) {
+                  nextDay(timestamp);
+                  timestamp.hour = FIRST_HOUR;
+                }
+              }
 
-/***/ "./src/components/VCalendar/mixins/calendar-with-events.sass":
-/*!*******************************************************************!*\
-  !*** ./src/components/VCalendar/mixins/calendar-with-events.sass ***!
-  \*******************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+              return timestamp;
+            }
+            function nextDay(timestamp) {
+              timestamp.day++;
+              timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK;
+
+              if (
+                timestamp.day > DAYS_IN_MONTH_MIN &&
+                timestamp.day > daysInMonth(timestamp.year, timestamp.month)
+              ) {
+                timestamp.day = DAY_MIN;
+                timestamp.month++;
+
+                if (timestamp.month > MONTH_MAX) {
+                  timestamp.month = MONTH_MIN;
+                  timestamp.year++;
+                }
+              }
 
-// extracted by mini-css-extract-plugin
+              return timestamp;
+            }
+            function prevDay(timestamp) {
+              timestamp.day--;
+              timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK;
 
-/***/ }),
+              if (timestamp.day < DAY_MIN) {
+                timestamp.month--;
 
-/***/ "./src/components/VCalendar/mixins/calendar-with-events.ts":
-/*!*****************************************************************!*\
-  !*** ./src/components/VCalendar/mixins/calendar-with-events.ts ***!
-  \*****************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _calendar_with_events_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calendar-with-events.sass */ "./src/components/VCalendar/mixins/calendar-with-events.sass");
-/* harmony import */ var _calendar_with_events_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_calendar_with_events_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _calendar_base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./calendar-base */ "./src/components/VCalendar/mixins/calendar-base.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/props */ "./src/components/VCalendar/util/props.ts");
-/* harmony import */ var _modes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../modes */ "./src/components/VCalendar/modes/index.ts");
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-/* harmony import */ var _util_events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../util/events */ "./src/components/VCalendar/util/events.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+                if (timestamp.month < MONTH_MIN) {
+                  timestamp.year--;
+                  timestamp.month = MONTH_MAX;
+                }
 
-    return t;
-  };
+                timestamp.day = daysInMonth(timestamp.year, timestamp.month);
+              }
 
-  return __assign.apply(this, arguments);
-}; // Styles
+              return timestamp;
+            }
+            function relativeDays(timestamp, mover, days) {
+              if (mover === void 0) {
+                mover = nextDay;
+              }
 
+              if (days === void 0) {
+                days = 1;
+              }
 
- // Directives
+              while (--days >= 0) {
+                mover(timestamp);
+              }
 
- // Mixins
+              return timestamp;
+            }
+            function diffMinutes(min, max) {
+              var Y = (max.year - min.year) * 525600;
+              var M = (max.month - min.month) * 43800;
+              var D = (max.day - min.day) * 1440;
+              var h = (max.hour - min.hour) * 60;
+              var m = max.minute - min.minute;
+              return Y + M + D + h + m;
+            }
+            function findWeekday(timestamp, weekday, mover, maxDays) {
+              if (mover === void 0) {
+                mover = nextDay;
+              }
 
- // Helpers
+              if (maxDays === void 0) {
+                maxDays = 6;
+              }
 
- // Util
+              while (timestamp.weekday !== weekday && --maxDays >= 0) {
+                mover(timestamp);
+              }
 
+              return timestamp;
+            }
+            function getWeekdaySkips(weekdays) {
+              var skips = [1, 1, 1, 1, 1, 1, 1];
+              var filled = [0, 0, 0, 0, 0, 0, 0];
 
+              for (var i = 0; i < weekdays.length; i++) {
+                filled[weekdays[i]] = 1;
+              }
 
+              for (var k = 0; k < DAYS_IN_WEEK; k++) {
+                var skip = 1;
 
+                for (var j = 1; j < DAYS_IN_WEEK; j++) {
+                  var next = (k + j) % DAYS_IN_WEEK;
 
-var WIDTH_FULL = 100;
-var WIDTH_START = 95;
-var MINUTES_IN_DAY = 1440;
-/* @vue/component */
+                  if (filled[next]) {
+                    break;
+                  }
 
-/* harmony default export */ __webpack_exports__["default"] = (_calendar_base__WEBPACK_IMPORTED_MODULE_2__["default"].extend({
-  name: 'calendar-with-events',
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_1__["default"]
-  },
-  props: _util_props__WEBPACK_IMPORTED_MODULE_4__["default"].events,
-  computed: {
-    noEvents: function noEvents() {
-      return this.events.length === 0;
-    },
-    parsedEvents: function parsedEvents() {
-      return this.events.map(this.parseEvent);
-    },
-    parsedEventOverlapThreshold: function parsedEventOverlapThreshold() {
-      return parseInt(this.eventOverlapThreshold);
-    },
-    eventColorFunction: function eventColorFunction() {
-      var _this = this;
+                  skip++;
+                }
 
-      return typeof this.eventColor === 'function' ? this.eventColor : function () {
-        return _this.eventColor;
-      };
-    },
-    eventTimedFunction: function eventTimedFunction() {
-      var _this = this;
+                skips[k] = filled[k] * skip;
+              }
 
-      return typeof this.eventTimed === 'function' ? this.eventTimed : function (event) {
-        return !!event[_this.eventTimed];
-      };
-    },
-    eventCategoryFunction: function eventCategoryFunction() {
-      var _this = this;
+              return skips;
+            }
+            function timestampToDate(timestamp) {
+              var time =
+                padNumber(timestamp.hour, 2) +
+                ":" +
+                padNumber(timestamp.minute, 2);
+              var date = timestamp.date;
+              return new Date(date + "T" + time + ":00+00:00");
+            }
+            function createDayList(start, end, now, weekdaySkips, max, min) {
+              if (max === void 0) {
+                max = 42;
+              }
 
-      return typeof this.eventCategory === 'function' ? this.eventCategory : function (event) {
-        return event[_this.eventCategory];
-      };
-    },
-    eventTextColorFunction: function eventTextColorFunction() {
-      var _this = this;
+              if (min === void 0) {
+                min = 0;
+              }
 
-      return typeof this.eventTextColor === 'function' ? this.eventTextColor : function () {
-        return _this.eventTextColor;
-      };
-    },
-    eventNameFunction: function eventNameFunction() {
-      var _this = this;
+              var stop = getDayIdentifier(end);
+              var days = [];
+              var current = copyTimestamp(start);
+              var currentIdentifier = 0;
+              var stopped = currentIdentifier === stop;
 
-      return typeof this.eventName === 'function' ? this.eventName : function (event, timedEvent) {
-        return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["escapeHTML"])(event.input[_this.eventName]);
-      };
-    },
-    eventModeFunction: function eventModeFunction() {
-      return typeof this.eventOverlapMode === 'function' ? this.eventOverlapMode : _modes__WEBPACK_IMPORTED_MODULE_5__["CalendarEventOverlapModes"][this.eventOverlapMode];
-    },
-    eventWeekdays: function eventWeekdays() {
-      return this.parsedWeekdays;
-    },
-    categoryMode: function categoryMode() {
-      return false;
-    }
-  },
-  methods: {
-    parseEvent: function parseEvent(input, index) {
-      if (index === void 0) {
-        index = 0;
-      }
+              if (stop < getDayIdentifier(start)) {
+                throw new Error("End date is earlier than start date.");
+              }
 
-      return Object(_util_events__WEBPACK_IMPORTED_MODULE_7__["parseEvent"])(input, index, this.eventStart, this.eventEnd, this.eventTimedFunction(input), this.categoryMode ? this.eventCategoryFunction(input) : false);
-    },
-    formatTime: function formatTime(withTime, ampm) {
-      var formatter = this.getFormatter({
-        timeZone: 'UTC',
-        hour: 'numeric',
-        minute: withTime.minute > 0 ? 'numeric' : undefined
-      });
-      return formatter(withTime, true);
-    },
-    updateEventVisibility: function updateEventVisibility() {
-      if (this.noEvents || !this.eventMore) {
-        return;
-      }
+              while ((!stopped || days.length < min) && days.length < max) {
+                currentIdentifier = getDayIdentifier(current);
+                stopped = stopped || currentIdentifier === stop;
 
-      var eventHeight = this.eventHeight;
-      var eventsMap = this.getEventsMap();
+                if (weekdaySkips[current.weekday] === 0) {
+                  current = nextDay(current);
+                  continue;
+                }
 
-      for (var date in eventsMap) {
-        var _a = eventsMap[date],
-            parent = _a.parent,
-            events = _a.events,
-            more = _a.more;
+                var day = copyTimestamp(current);
+                updateFormatted(day);
+                updateRelative(day, now);
+                days.push(day);
+                current = relativeDays(
+                  current,
+                  nextDay,
+                  weekdaySkips[current.weekday]
+                );
+              }
 
-        if (!more) {
-          break;
-        }
+              if (!days.length)
+                throw new Error(
+                  "No dates found using specified start date, end date, and weekdays."
+                );
+              return days;
+            }
+            function createIntervalList(timestamp, first, minutes, count, now) {
+              var intervals = [];
 
-        var parentBounds = parent.getBoundingClientRect();
-        var last = events.length - 1;
-        var hide = false;
-        var hidden = 0;
-
-        for (var i = 0; i <= last; i++) {
-          if (!hide) {
-            var eventBounds = events[i].getBoundingClientRect();
-            hide = i === last ? eventBounds.bottom > parentBounds.bottom : eventBounds.bottom + eventHeight > parentBounds.bottom;
-          }
-
-          if (hide) {
-            events[i].style.display = 'none';
-            hidden++;
-          }
-        }
+              for (var i = 0; i < count; i++) {
+                var mins = first + i * minutes;
+                var int = copyTimestamp(timestamp);
+                intervals.push(updateMinutes(int, mins, now));
+              }
 
-        if (hide) {
-          more.style.display = '';
-          more.innerHTML = this.$vuetify.lang.t(this.eventMoreText, hidden);
-        } else {
-          more.style.display = 'none';
-        }
-      }
-    },
-    getEventsMap: function getEventsMap() {
-      var eventsMap = {};
-      var elements = this.$refs.events;
+              return intervals;
+            }
+            function createNativeLocaleFormatter(locale, getOptions) {
+              var emptyFormatter = function emptyFormatter(_t, _s) {
+                return "";
+              };
 
-      if (!elements || !elements.forEach) {
-        return eventsMap;
-      }
+              if (
+                typeof Intl === "undefined" ||
+                typeof Intl.DateTimeFormat === "undefined"
+              ) {
+                return emptyFormatter;
+              }
 
-      elements.forEach(function (el) {
-        var date = el.getAttribute('data-date');
+              return function (timestamp, short) {
+                try {
+                  var intlFormatter = new Intl.DateTimeFormat(
+                    locale || undefined,
+                    getOptions(timestamp, short)
+                  );
+                  return intlFormatter.format(timestampToDate(timestamp));
+                } catch (e) {
+                  return "";
+                }
+              };
+            }
 
-        if (el.parentElement && date) {
-          if (!(date in eventsMap)) {
-            eventsMap[date] = {
-              parent: el.parentElement,
-              more: null,
-              events: []
-            };
-          }
-
-          if (el.getAttribute('data-more')) {
-            eventsMap[date].more = el;
-          } else {
-            eventsMap[date].events.push(el);
-            el.style.display = '';
-          }
-        }
-      });
-      return eventsMap;
-    },
-    genDayEvent: function genDayEvent(_a, day) {
-      var event = _a.event;
-      var eventHeight = this.eventHeight;
-      var eventMarginBottom = this.eventMarginBottom;
-      var dayIdentifier = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(day);
-      var week = day.week;
-      var start = dayIdentifier === event.startIdentifier;
-      var end = dayIdentifier === event.endIdentifier;
-      var width = WIDTH_START;
-
-      if (!this.categoryMode) {
-        for (var i = day.index + 1; i < week.length; i++) {
-          var weekdayIdentifier = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(week[i]);
-
-          if (event.endIdentifier >= weekdayIdentifier) {
-            width += WIDTH_FULL;
-            end = end || weekdayIdentifier === event.endIdentifier;
-          } else {
-            end = true;
-            break;
-          }
-        }
-      }
+            /***/
+          },
 
-      var scope = {
-        eventParsed: event,
-        day: day,
-        start: start,
-        end: end,
-        timed: false
-      };
-      return this.genEvent(event, scope, false, {
-        staticClass: 'v-event',
-        class: {
-          'v-event-start': start,
-          'v-event-end': end
-        },
-        style: {
-          height: eventHeight + "px",
-          width: width + "%",
-          'margin-bottom': eventMarginBottom + "px"
-        },
-        attrs: {
-          'data-date': day.date
-        },
-        key: event.index,
-        ref: 'events',
-        refInFor: true
-      });
-    },
-    genTimedEvent: function genTimedEvent(_a, day) {
-      var event = _a.event,
-          left = _a.left,
-          width = _a.width;
-
-      if (day.timeDelta(event.end) <= 0 || day.timeDelta(event.start) >= 1) {
-        return false;
-      }
+        /***/ "./src/components/VCard/VCard.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VCard/VCard.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      var dayIdentifier = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(day);
-      var start = event.startIdentifier >= dayIdentifier;
-      var end = event.endIdentifier > dayIdentifier;
-      var top = start ? day.timeToY(event.start) : 0;
-      var bottom = end ? day.timeToY(MINUTES_IN_DAY) : day.timeToY(event.end);
-      var height = Math.max(this.eventHeight, bottom - top);
-      var scope = {
-        eventParsed: event,
-        day: day,
-        start: start,
-        end: end,
-        timed: true
-      };
-      return this.genEvent(event, scope, true, {
-        staticClass: 'v-event-timed',
-        style: {
-          top: top + "px",
-          height: height + "px",
-          left: left + "%",
-          width: width + "%"
-        }
-      });
-    },
-    genEvent: function genEvent(event, scopeInput, timedEvent, data) {
-      var _this = this;
-
-      var _a;
-
-      var slot = this.$scopedSlots.event;
-      var text = this.eventTextColorFunction(event.input);
-      var background = this.eventColorFunction(event.input);
-      var overlapsNoon = event.start.hour < 12 && event.end.hour >= 12;
-      var singline = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["diffMinutes"])(event.start, event.end) <= this.parsedEventOverlapThreshold;
-      var formatTime = this.formatTime;
-
-      var timeSummary = function timeSummary() {
-        return formatTime(event.start, overlapsNoon) + ' - ' + formatTime(event.end, true);
-      };
+        /***/ "./src/components/VCard/VCard.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VCard/VCard.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCard_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCard.sass */ "./src/components/VCard/VCard.sass"
+              );
+            /* harmony import */ var _VCard_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCard_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet */ "./src/components/VSheet/index.ts"
+              );
+            /* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts"
+              );
+            /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/routable */ "./src/mixins/routable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Mixins
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _mixins_loadable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_routable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"]
+              ).extend({
+                name: "v-card",
+                props: {
+                  flat: Boolean,
+                  hover: Boolean,
+                  img: String,
+                  link: Boolean,
+                  loaderHeight: {
+                    type: [Number, String],
+                    default: 4,
+                  },
+                  raised: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        __assign(
+                          {
+                            "v-card": true,
+                          },
+                          _mixins_routable__WEBPACK_IMPORTED_MODULE_3__[
+                            "default"
+                          ].options.computed.classes.call(this)
+                        ),
+                        {
+                          "v-card--flat": this.flat,
+                          "v-card--hover": this.hover,
+                          "v-card--link": this.isClickable,
+                          "v-card--loading": this.loading,
+                          "v-card--disabled": this.disabled,
+                          "v-card--raised": this.raised,
+                        }
+                      ),
+                      _VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.classes.call(this)
+                    );
+                  },
+                  styles: function styles() {
+                    var style = __assign(
+                      {},
+                      _VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.styles.call(this)
+                    );
+
+                    if (this.img) {
+                      style.background =
+                        'url("' +
+                        this.img +
+                        '") center center / cover no-repeat';
+                    }
+
+                    return style;
+                  },
+                },
+                methods: {
+                  genProgress: function genProgress() {
+                    var render =
+                      _mixins_loadable__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genProgress.call(this);
+                    if (!render) return null;
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-card__progress",
+                        key: "progress",
+                      },
+                      [render]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _a = this.generateRouteLink(),
+                    tag = _a.tag,
+                    data = _a.data;
+
+                  data.style = this.styles;
+
+                  if (this.isClickable) {
+                    data.attrs = data.attrs || {};
+                    data.attrs.tabindex = 0;
+                  }
 
-      var eventSummary = function eventSummary() {
-        var name = _this.eventNameFunction(event, timedEvent);
-
-        if (event.start.hasTime) {
-          if (timedEvent) {
-            var time = timeSummary();
-            var delimiter = singline ? ', ' : '<br>';
-            return "<strong>" + name + "</strong>" + delimiter + time;
-          } else {
-            var time = formatTime(event.start, true);
-            return "<strong>" + time + "</strong> " + name;
-          }
-        }
+                  return h(tag, this.setBackgroundColor(this.color, data), [
+                    this.genProgress(),
+                    this.$slots.default,
+                  ]);
+                },
+              });
 
-        return name;
-      };
+            /***/
+          },
 
-      var scope = __assign(__assign({}, scopeInput), {
-        event: event.input,
-        outside: scopeInput.day.outside,
-        singline: singline,
-        overlapsNoon: overlapsNoon,
-        formatTime: formatTime,
-        timeSummary: timeSummary,
-        eventSummary: eventSummary
-      });
-
-      return this.$createElement('div', this.setTextColor(text, this.setBackgroundColor(background, __assign({
-        on: this.getDefaultMouseEventHandlers(':event', function (nativeEvent) {
-          return __assign(__assign({}, scope), {
-            nativeEvent: nativeEvent
-          });
-        }),
-        directives: [{
-          name: 'ripple',
-          value: (_a = this.eventRipple) !== null && _a !== void 0 ? _a : true
-        }]
-      }, data))), slot ? slot(scope) : [this.genName(eventSummary)]);
-    },
-    genName: function genName(eventSummary) {
-      return this.$createElement('div', {
-        staticClass: 'pl-1',
-        domProps: {
-          innerHTML: eventSummary()
-        }
-      });
-    },
-    genPlaceholder: function genPlaceholder(day) {
-      var height = this.eventHeight + this.eventMarginBottom;
-      return this.$createElement('div', {
-        style: {
-          height: height + "px"
-        },
-        attrs: {
-          'data-date': day.date
-        },
-        ref: 'events',
-        refInFor: true
-      });
-    },
-    genMore: function genMore(day) {
-      var _this = this;
-
-      var _a;
-
-      var eventHeight = this.eventHeight;
-      var eventMarginBottom = this.eventMarginBottom;
-      return this.$createElement('div', {
-        staticClass: 'v-event-more pl-1',
-        class: {
-          'v-outside': day.outside
-        },
-        attrs: {
-          'data-date': day.date,
-          'data-more': 1
-        },
-        directives: [{
-          name: 'ripple',
-          value: (_a = this.eventRipple) !== null && _a !== void 0 ? _a : true
-        }],
-        on: {
-          click: function click() {
-            return _this.$emit('click:more', day);
-          }
-        },
-        style: {
-          display: 'none',
-          height: eventHeight + "px",
-          'margin-bottom': eventMarginBottom + "px"
-        },
-        ref: 'events',
-        refInFor: true
-      });
-    },
-    getVisibleEvents: function getVisibleEvents() {
-      var start = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(this.days[0]);
-      var end = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(this.days[this.days.length - 1]);
-      return this.parsedEvents.filter(function (event) {
-        return Object(_util_events__WEBPACK_IMPORTED_MODULE_7__["isEventOverlapping"])(event, start, end);
-      });
-    },
-    isEventForCategory: function isEventForCategory(event, category) {
-      return !this.categoryMode || category === event.category || typeof event.category !== 'string' && category === null;
-    },
-    getEventsForDay: function getEventsForDay(day) {
-      var identifier = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(day);
-      var firstWeekday = this.eventWeekdays[0];
-      return this.parsedEvents.filter(function (event) {
-        return Object(_util_events__WEBPACK_IMPORTED_MODULE_7__["isEventStart"])(event, day, identifier, firstWeekday);
-      });
-    },
-    getEventsForDayAll: function getEventsForDayAll(day) {
-      var _this = this;
-
-      var identifier = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(day);
-      var firstWeekday = this.eventWeekdays[0];
-      return this.parsedEvents.filter(function (event) {
-        return event.allDay && (_this.categoryMode ? Object(_util_events__WEBPACK_IMPORTED_MODULE_7__["isEventOn"])(event, identifier) : Object(_util_events__WEBPACK_IMPORTED_MODULE_7__["isEventStart"])(event, day, identifier, firstWeekday)) && _this.isEventForCategory(event, day.category);
-      });
-    },
-    getEventsForDayTimed: function getEventsForDayTimed(day) {
-      var _this = this;
-
-      var identifier = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_6__["getDayIdentifier"])(day);
-      return this.parsedEvents.filter(function (event) {
-        return !event.allDay && Object(_util_events__WEBPACK_IMPORTED_MODULE_7__["isEventOn"])(event, identifier) && _this.isEventForCategory(event, day.category);
-      });
-    },
-    getScopedSlots: function getScopedSlots() {
-      var _this = this;
-
-      if (this.noEvents) {
-        return __assign({}, this.$scopedSlots);
-      }
+        /***/ "./src/components/VCard/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VCard/index.ts ***!
+  \***************************************/
+          /*! exports provided: VCard, VCardActions, VCardSubtitle, VCardText, VCardTitle, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardActions",
+              function () {
+                return VCardActions;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardSubtitle",
+              function () {
+                return VCardSubtitle;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardText",
+              function () {
+                return VCardText;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardTitle",
+              function () {
+                return VCardTitle;
+              }
+            );
+            /* harmony import */ var _VCard__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCard */ "./src/components/VCard/VCard.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCard",
+              function () {
+                return _VCard__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            var VCardActions = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                "createSimpleFunctional"
+              ]
+            )("v-card__actions");
+            var VCardSubtitle = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                "createSimpleFunctional"
+              ]
+            )("v-card__subtitle");
+            var VCardText = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                "createSimpleFunctional"
+              ]
+            )("v-card__text");
+            var VCardTitle = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                "createSimpleFunctional"
+              ]
+            )("v-card__title");
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VCard: _VCard__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VCardActions: VCardActions,
+                VCardSubtitle: VCardSubtitle,
+                VCardText: VCardText,
+                VCardTitle: VCardTitle,
+              },
+            };
 
-      var mode = this.eventModeFunction(this.parsedEvents, this.eventWeekdays[0], this.parsedEventOverlapThreshold);
+            /***/
+          },
 
-      var isNode = function isNode(input) {
-        return !!input;
-      };
+        /***/ "./src/components/VCarousel/VCarousel.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VCarousel/VCarousel.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      var getSlotChildren = function getSlotChildren(day, getter, mapper, timed) {
-        var events = getter(day);
-        var visuals = mode(day, events, timed, _this.categoryMode);
+        /***/ "./src/components/VCarousel/VCarousel.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VCarousel/VCarousel.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCarousel_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCarousel.sass */ "./src/components/VCarousel/VCarousel.sass"
+              );
+            /* harmony import */ var _VCarousel_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCarousel_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VWindow/VWindow */ "./src/components/VWindow/VWindow.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VProgressLinear__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../VProgressLinear */ "./src/components/VProgressLinear/index.ts"
+              );
+            /* harmony import */ var _mixins_button_group__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/button-group */ "./src/mixins/button-group/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Mixins
+            // TODO: Move this into core components v2.0
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-carousel",
+                props: {
+                  continuous: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  cycle: Boolean,
+                  delimiterIcon: {
+                    type: String,
+                    default: "$delimiter",
+                  },
+                  height: {
+                    type: [Number, String],
+                    default: 500,
+                  },
+                  hideDelimiters: Boolean,
+                  hideDelimiterBackground: Boolean,
+                  interval: {
+                    type: [Number, String],
+                    default: 6000,
+                    validator: function validator(value) {
+                      return value > 0;
+                    },
+                  },
+                  mandatory: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  progress: Boolean,
+                  progressColor: String,
+                  showArrows: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  verticalDelimiters: {
+                    type: String,
+                    default: undefined,
+                  },
+                },
+                data: function data() {
+                  return {
+                    internalHeight: this.height,
+                    slideTimeout: undefined,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-carousel": true,
+                        "v-carousel--hide-delimiter-background":
+                          this.hideDelimiterBackground,
+                        "v-carousel--vertical-delimiters": this.isVertical,
+                      }
+                    );
+                  },
+                  isDark: function isDark() {
+                    return this.dark || !this.light;
+                  },
+                  isVertical: function isVertical() {
+                    return this.verticalDelimiters != null;
+                  },
+                },
+                watch: {
+                  internalValue: "restartTimeout",
+                  interval: "restartTimeout",
+                  height: function height(val, oldVal) {
+                    if (val === oldVal || !val) return;
+                    this.internalHeight = val;
+                  },
+                  cycle: function cycle(val) {
+                    if (val) {
+                      this.restartTimeout();
+                    } else {
+                      clearTimeout(this.slideTimeout);
+                      this.slideTimeout = undefined;
+                    }
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("hide-controls")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_7__["breaking"]
+                    )("hide-controls", ':show-arrows="false"', this);
+                  }
+                },
+                mounted: function mounted() {
+                  this.startTimeout();
+                },
+                methods: {
+                  genControlIcons: function genControlIcons() {
+                    if (this.isVertical) return null;
+                    return _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.genControlIcons.call(this);
+                  },
+                  genDelimiters: function genDelimiters() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-carousel__controls",
+                        style: {
+                          left:
+                            this.verticalDelimiters === "left" &&
+                            this.isVertical
+                              ? 0
+                              : "auto",
+                          right:
+                            this.verticalDelimiters === "right" ? 0 : "auto",
+                        },
+                      },
+                      [this.genItems()]
+                    );
+                  },
+                  genItems: function genItems() {
+                    var _this = this;
+
+                    var length = this.items.length;
+                    var children = [];
+
+                    for (var i = 0; i < length; i++) {
+                      var child = this.$createElement(
+                        _VBtn__WEBPACK_IMPORTED_MODULE_2__["default"],
+                        {
+                          staticClass: "v-carousel__controls__item",
+                          attrs: {
+                            "aria-label": this.$vuetify.lang.t(
+                              "$vuetify.carousel.ariaLabel.delimiter",
+                              i + 1,
+                              length
+                            ),
+                          },
+                          props: {
+                            icon: true,
+                            small: true,
+                            value: this.getValue(this.items[i], i),
+                          },
+                        },
+                        [
+                          this.$createElement(
+                            _VIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                            {
+                              props: {
+                                size: 18,
+                              },
+                            },
+                            this.delimiterIcon
+                          ),
+                        ]
+                      );
+                      children.push(child);
+                    }
+
+                    return this.$createElement(
+                      _mixins_button_group__WEBPACK_IMPORTED_MODULE_5__[
+                        "default"
+                      ],
+                      {
+                        props: {
+                          value: this.internalValue,
+                          mandatory: this.mandatory,
+                        },
+                        on: {
+                          change: function change(val) {
+                            _this.internalValue = val;
+                          },
+                        },
+                      },
+                      children
+                    );
+                  },
+                  genProgress: function genProgress() {
+                    return this.$createElement(
+                      _VProgressLinear__WEBPACK_IMPORTED_MODULE_4__["default"],
+                      {
+                        staticClass: "v-carousel__progress",
+                        props: {
+                          color: this.progressColor,
+                          value:
+                            ((this.internalIndex + 1) / this.items.length) *
+                            100,
+                        },
+                      }
+                    );
+                  },
+                  restartTimeout: function restartTimeout() {
+                    this.slideTimeout && clearTimeout(this.slideTimeout);
+                    this.slideTimeout = undefined;
+                    window.requestAnimationFrame(this.startTimeout);
+                  },
+                  startTimeout: function startTimeout() {
+                    if (!this.cycle) return;
+                    this.slideTimeout = window.setTimeout(
+                      this.next,
+                      +this.interval > 0 ? +this.interval : 6000
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var render = _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__[
+                    "default"
+                  ].options.render.call(this, h);
+                  render.data.style =
+                    "height: " +
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                        "convertToUnit"
+                      ]
+                    )(this.height) +
+                    ";";
+                  /* istanbul ignore else */
+
+                  if (!this.hideDelimiters) {
+                    render.children.push(this.genDelimiters());
+                  }
+                  /* istanbul ignore else */
 
-        if (timed) {
-          return visuals.map(function (visual) {
-            return mapper(visual, day);
-          }).filter(isNode);
-        }
+                  if (this.progress || this.progressColor) {
+                    render.children.push(this.genProgress());
+                  }
 
-        var children = [];
-        visuals.forEach(function (visual, index) {
-          while (children.length < visual.column) {
-            children.push(_this.genPlaceholder(day));
-          }
+                  return render;
+                },
+              });
 
-          var mapped = mapper(visual, day);
+            /***/
+          },
 
-          if (mapped) {
-            children.push(mapped);
-          }
-        });
-        return children;
-      };
+        /***/ "./src/components/VCarousel/VCarouselItem.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VCarousel/VCarouselItem.ts ***!
+  \***************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VWindow/VWindowItem */ "./src/components/VWindow/VWindowItem.ts"
+              );
+            /* harmony import */ var _VImg__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VImg */ "./src/components/VImg/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/routable */ "./src/mixins/routable/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Extensions
+
+            // Components
+
+            // Utilities
+
+            // Types
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"]
+            )(
+              _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__["default"],
+              _mixins_routable__WEBPACK_IMPORTED_MODULE_4__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-carousel-item",
+                inheritAttrs: false,
+                methods: {
+                  genDefaultSlot: function genDefaultSlot() {
+                    return [
+                      this.$createElement(
+                        _VImg__WEBPACK_IMPORTED_MODULE_1__["VImg"],
+                        {
+                          staticClass: "v-carousel__item",
+                          props: __assign(__assign({}, this.$attrs), {
+                            height: this.windowGroup.internalHeight,
+                          }),
+                          on: this.$listeners,
+                          scopedSlots: {
+                            placeholder: this.$scopedSlots.placeholder,
+                          },
+                        },
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                        )(this)
+                      ),
+                    ];
+                  },
+                  genWindowItem: function genWindowItem() {
+                    var _a = this.generateRouteLink(),
+                      tag = _a.tag,
+                      data = _a.data;
+
+                    data.staticClass = "v-window-item";
+                    data.directives.push({
+                      name: "show",
+                      value: this.isActive,
+                    });
+                    return this.$createElement(
+                      tag,
+                      data,
+                      this.genDefaultSlot()
+                    );
+                  },
+                },
+              });
 
-      var slots = this.$scopedSlots;
-      var slotDay = slots.day;
-      var slotDayHeader = slots['day-header'];
-      var slotDayBody = slots['day-body'];
-      return __assign(__assign({}, slots), {
-        day: function day(_day) {
-          var children = getSlotChildren(_day, _this.getEventsForDay, _this.genDayEvent, false);
+            /***/
+          },
 
-          if (children && children.length > 0 && _this.eventMore) {
-            children.push(_this.genMore(_day));
-          }
+        /***/ "./src/components/VCarousel/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VCarousel/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VCarousel, VCarouselItem, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCarousel__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCarousel */ "./src/components/VCarousel/VCarousel.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarousel",
+              function () {
+                return _VCarousel__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VCarouselItem__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VCarouselItem */ "./src/components/VCarousel/VCarouselItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarouselItem",
+              function () {
+                return _VCarouselItem__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VCarousel: _VCarousel__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VCarouselItem:
+                  _VCarouselItem__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
-          if (slotDay) {
-            var slot = slotDay(_day);
+            /***/
+          },
 
-            if (slot) {
-              children = children ? children.concat(slot) : slot;
-            }
-          }
+        /***/ "./src/components/VCheckbox/VCheckbox.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VCheckbox/VCheckbox.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-          return children;
-        },
-        'day-header': function dayHeader(day) {
-          var children = getSlotChildren(day, _this.getEventsForDayAll, _this.genDayEvent, false);
+        /***/ "./src/components/VCheckbox/VCheckbox.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VCheckbox/VCheckbox.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCheckbox.sass */ "./src/components/VCheckbox/VCheckbox.sass"
+              );
+            /* harmony import */ var _VCheckbox_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../styles/components/_selection-controls.sass */ "./src/styles/components/_selection-controls.sass"
+              );
+            /* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _mixins_selectable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/selectable */ "./src/mixins/selectable/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_selectable__WEBPACK_IMPORTED_MODULE_4__["default"].extend(
+                {
+                  name: "v-checkbox",
+                  props: {
+                    indeterminate: Boolean,
+                    indeterminateIcon: {
+                      type: String,
+                      default: "$checkboxIndeterminate",
+                    },
+                    offIcon: {
+                      type: String,
+                      default: "$checkboxOff",
+                    },
+                    onIcon: {
+                      type: String,
+                      default: "$checkboxOn",
+                    },
+                  },
+                  data: function data() {
+                    return {
+                      inputIndeterminate: this.indeterminate,
+                    };
+                  },
+                  computed: {
+                    classes: function classes() {
+                      return __assign(
+                        __assign(
+                          {},
+                          _VInput__WEBPACK_IMPORTED_MODULE_3__[
+                            "default"
+                          ].options.computed.classes.call(this)
+                        ),
+                        {
+                          "v-input--selection-controls": true,
+                          "v-input--checkbox": true,
+                          "v-input--indeterminate": this.inputIndeterminate,
+                        }
+                      );
+                    },
+                    computedIcon: function computedIcon() {
+                      if (this.inputIndeterminate) {
+                        return this.indeterminateIcon;
+                      } else if (this.isActive) {
+                        return this.onIcon;
+                      } else {
+                        return this.offIcon;
+                      }
+                    },
+                    // Do not return undefined if disabled,
+                    // according to spec, should still show
+                    // a color when disabled and active
+                    validationState: function validationState() {
+                      if (this.isDisabled && !this.inputIndeterminate)
+                        return undefined;
+                      if (this.hasError && this.shouldValidate) return "error";
+                      if (this.hasSuccess) return "success";
+                      if (this.hasColor !== null) return this.computedColor;
+                      return undefined;
+                    },
+                  },
+                  watch: {
+                    indeterminate: function indeterminate(val) {
+                      var _this = this; // https://github.com/vuetifyjs/vuetify/issues/8270
+
+                      this.$nextTick(function () {
+                        return (_this.inputIndeterminate = val);
+                      });
+                    },
+                    inputIndeterminate: function inputIndeterminate(val) {
+                      this.$emit("update:indeterminate", val);
+                    },
+                    isActive: function isActive() {
+                      if (!this.indeterminate) return;
+                      this.inputIndeterminate = false;
+                    },
+                  },
+                  methods: {
+                    genCheckbox: function genCheckbox() {
+                      return this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-input--selection-controls__input",
+                        },
+                        [
+                          this.$createElement(
+                            _VIcon__WEBPACK_IMPORTED_MODULE_2__["default"],
+                            this.setTextColor(this.validationState, {
+                              props: {
+                                dense: this.dense,
+                                dark: this.dark,
+                                light: this.light,
+                              },
+                            }),
+                            this.computedIcon
+                          ),
+                          this.genInput(
+                            "checkbox",
+                            __assign(__assign({}, this.attrs$), {
+                              "aria-checked": this.inputIndeterminate
+                                ? "mixed"
+                                : this.isActive.toString(),
+                            })
+                          ),
+                          this.genRipple(this.setTextColor(this.rippleState)),
+                        ]
+                      );
+                    },
+                    genDefaultSlot: function genDefaultSlot() {
+                      return [this.genCheckbox(), this.genLabel()];
+                    },
+                  },
+                }
+              );
 
-          if (slotDayHeader) {
-            var slot = slotDayHeader(day);
+            /***/
+          },
 
-            if (slot) {
-              children = children ? children.concat(slot) : slot;
-            }
-          }
+        /***/ "./src/components/VCheckbox/VSimpleCheckbox.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VCheckbox/VSimpleCheckbox.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-          return children;
-        },
-        'day-body': function dayBody(day) {
-          var events = getSlotChildren(day, _this.getEventsForDayTimed, _this.genTimedEvent, true);
-          var children = [_this.$createElement('div', {
-            staticClass: 'v-event-timed-container'
-          }, events)];
+        /***/ "./src/components/VCheckbox/VSimpleCheckbox.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VCheckbox/VSimpleCheckbox.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSimpleCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSimpleCheckbox.sass */ "./src/components/VCheckbox/VSimpleCheckbox.sass"
+              );
+            /* harmony import */ var _VSimpleCheckbox_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSimpleCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_2__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-          if (slotDayBody) {
-            var slot = slotDayBody(day);
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
+                name: "v-simple-checkbox",
+                functional: true,
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_1__["default"],
+                },
+                props: __assign(
+                  __assign(
+                    __assign(
+                      {},
+                      _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"]
+                        .options.props
+                    ),
+                    _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"]
+                      .options.props
+                  ),
+                  {
+                    disabled: Boolean,
+                    ripple: {
+                      type: Boolean,
+                      default: true,
+                    },
+                    value: Boolean,
+                    indeterminate: Boolean,
+                    indeterminateIcon: {
+                      type: String,
+                      default: "$checkboxIndeterminate",
+                    },
+                    onIcon: {
+                      type: String,
+                      default: "$checkboxOn",
+                    },
+                    offIcon: {
+                      type: String,
+                      default: "$checkboxOff",
+                    },
+                  }
+                ),
+                render: function render(h, _a) {
+                  var props = _a.props,
+                    data = _a.data,
+                    listeners = _a.listeners;
+                  var children = [];
+
+                  if (props.ripple && !props.disabled) {
+                    var ripple_1 = h(
+                      "div",
+                      _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__[
+                        "default"
+                      ].options.methods.setTextColor(props.color, {
+                        staticClass: "v-input--selection-controls__ripple",
+                        directives: [
+                          {
+                            name: "ripple",
+                            value: {
+                              center: true,
+                            },
+                          },
+                        ],
+                      })
+                    );
+                    children.push(ripple_1);
+                  }
 
-            if (slot) {
-              children = children.concat(slot);
-            }
-          }
+                  var icon = props.offIcon;
+                  if (props.indeterminate) icon = props.indeterminateIcon;
+                  else if (props.value) icon = props.onIcon;
+                  children.push(
+                    h(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_3__["VIcon"],
+                      _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__[
+                        "default"
+                      ].options.methods.setTextColor(
+                        props.value && props.color,
+                        {
+                          props: {
+                            disabled: props.disabled,
+                            dark: props.dark,
+                            light: props.light,
+                          },
+                        }
+                      ),
+                      icon
+                    )
+                  );
+                  var classes = {
+                    "v-simple-checkbox": true,
+                    "v-simple-checkbox--disabled": props.disabled,
+                  };
+                  return h(
+                    "div",
+                    Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_6__["default"]
+                    )(data, {
+                      class: classes,
+                      on: {
+                        click: function click(e) {
+                          e.stopPropagation();
+
+                          if (data.on && data.on.input && !props.disabled) {
+                            Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                                "wrapInArray"
+                              ]
+                            )(data.on.input).forEach(function (f) {
+                              return f(!props.value);
+                            });
+                          }
+                        },
+                      },
+                    }),
+                    children
+                  );
+                },
+              });
 
-          return children;
-        }
-      });
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VCheckbox/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VCheckbox/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VCheckbox, VSimpleCheckbox, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCheckbox__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCheckbox */ "./src/components/VCheckbox/VCheckbox.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCheckbox",
+              function () {
+                return _VCheckbox__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSimpleCheckbox",
+              function () {
+                return _VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VCheckbox: _VCheckbox__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VSimpleCheckbox:
+                  _VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
-/***/ "./src/components/VCalendar/mixins/calendar-with-intervals.ts":
-/*!********************************************************************!*\
-  !*** ./src/components/VCalendar/mixins/calendar-with-intervals.ts ***!
-  \********************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _calendar_base__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./calendar-base */ "./src/components/VCalendar/mixins/calendar-base.ts");
-/* harmony import */ var _util_props__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/props */ "./src/components/VCalendar/util/props.ts");
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-// Mixins
- // Util
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_calendar_base__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
-  name: 'calendar-with-intervals',
-  props: _util_props__WEBPACK_IMPORTED_MODULE_1__["default"].intervals,
-  computed: {
-    parsedFirstInterval: function parsedFirstInterval() {
-      return parseInt(this.firstInterval);
-    },
-    parsedIntervalMinutes: function parsedIntervalMinutes() {
-      return parseInt(this.intervalMinutes);
-    },
-    parsedIntervalCount: function parsedIntervalCount() {
-      return parseInt(this.intervalCount);
-    },
-    parsedIntervalHeight: function parsedIntervalHeight() {
-      return parseFloat(this.intervalHeight);
-    },
-    parsedFirstTime: function parsedFirstTime() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTime"])(this.firstTime);
-    },
-    firstMinute: function firstMinute() {
-      var time = this.parsedFirstTime;
-      return time !== false && time >= 0 && time <= _util_timestamp__WEBPACK_IMPORTED_MODULE_2__["MINUTES_IN_DAY"] ? time : this.parsedFirstInterval * this.parsedIntervalMinutes;
-    },
-    bodyHeight: function bodyHeight() {
-      return this.parsedIntervalCount * this.parsedIntervalHeight;
-    },
-    days: function days() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["createDayList"])(this.parsedStart, this.parsedEnd, this.times.today, this.weekdaySkips, this.maxDays);
-    },
-    intervals: function intervals() {
-      var days = this.days;
-      var first = this.firstMinute;
-      var minutes = this.parsedIntervalMinutes;
-      var count = this.parsedIntervalCount;
-      var now = this.times.now;
-      return days.map(function (d) {
-        return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["createIntervalList"])(d, first, minutes, count, now);
-      });
-    },
-    intervalFormatter: function intervalFormatter() {
-      if (this.intervalFormat) {
-        return this.intervalFormat;
-      }
+            /***/
+          },
 
-      var longOptions = {
-        timeZone: 'UTC',
-        hour: '2-digit',
-        minute: '2-digit'
-      };
-      var shortOptions = {
-        timeZone: 'UTC',
-        hour: 'numeric',
-        minute: '2-digit'
-      };
-      var shortHourOptions = {
-        timeZone: 'UTC',
-        hour: 'numeric'
-      };
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["createNativeLocaleFormatter"])(this.currentLocale, function (tms, short) {
-        return short ? tms.minute === 0 ? shortHourOptions : shortOptions : longOptions;
-      });
-    }
-  },
-  methods: {
-    showIntervalLabelDefault: function showIntervalLabelDefault(interval) {
-      var first = this.intervals[0][0];
-      var isFirst = first.hour === interval.hour && first.minute === interval.minute;
-      return !isFirst;
-    },
-    intervalStyleDefault: function intervalStyleDefault(_interval) {
-      return undefined;
-    },
-    getTimestampAtEvent: function getTimestampAtEvent(e, day) {
-      var timestamp = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["copyTimestamp"])(day);
-      var bounds = e.currentTarget.getBoundingClientRect();
-      var baseMinutes = this.firstMinute;
-      var touchEvent = e;
-      var mouseEvent = e;
-      var touches = touchEvent.changedTouches || touchEvent.touches;
-      var clientY = touches && touches[0] ? touches[0].clientY : mouseEvent.clientY;
-      var addIntervals = (clientY - bounds.top) / this.parsedIntervalHeight;
-      var addMinutes = Math.floor(addIntervals * this.parsedIntervalMinutes);
-      var minutes = baseMinutes + addMinutes;
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["updateMinutes"])(timestamp, minutes, this.times.now);
-    },
-    getSlotScope: function getSlotScope(timestamp) {
-      var scope = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["copyTimestamp"])(timestamp);
-      scope.timeToY = this.timeToY;
-      scope.timeDelta = this.timeDelta;
-      scope.minutesToPixels = this.minutesToPixels;
-      scope.week = this.days;
-      return scope;
-    },
-    scrollToTime: function scrollToTime(time) {
-      var y = this.timeToY(time);
-      var pane = this.$refs.scrollArea;
-
-      if (y === false || !pane) {
-        return false;
-      }
+        /***/ "./src/components/VChip/VChip.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VChip/VChip.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      pane.scrollTop = y;
-      return true;
-    },
-    minutesToPixels: function minutesToPixels(minutes) {
-      return minutes / this.parsedIntervalMinutes * this.parsedIntervalHeight;
-    },
-    timeToY: function timeToY(time, clamp) {
-      if (clamp === void 0) {
-        clamp = true;
-      }
+        /***/ "./src/components/VChip/VChip.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VChip/VChip.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VChip_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VChip.sass */ "./src/components/VChip/VChip.sass"
+              );
+            /* harmony import */ var _VChip_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VChip_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/routable */ "./src/mixins/routable/index.ts"
+              );
+            /* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      var y = this.timeDelta(time);
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-      if (y !== false) {
-        y *= this.bodyHeight;
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-        if (clamp) {
-          if (y < 0) {
-            y = 0;
-          }
+                return ar;
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _mixins_sizeable__WEBPACK_IMPORTED_MODULE_9__["default"],
+                _mixins_routable__WEBPACK_IMPORTED_MODULE_8__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"],
+                Object(
+                  _mixins_groupable__WEBPACK_IMPORTED_MODULE_5__["factory"]
+                )("chipGroup"),
+                Object(
+                  _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__["factory"]
+                )("inputValue")
+              ).extend({
+                name: "v-chip",
+                props: {
+                  active: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  activeClass: {
+                    type: String,
+                    default: function _default() {
+                      if (!this.chipGroup) return "";
+                      return this.chipGroup.activeClass;
+                    },
+                  },
+                  close: Boolean,
+                  closeIcon: {
+                    type: String,
+                    default: "$delete",
+                  },
+                  disabled: Boolean,
+                  draggable: Boolean,
+                  filter: Boolean,
+                  filterIcon: {
+                    type: String,
+                    default: "$complete",
+                  },
+                  label: Boolean,
+                  link: Boolean,
+                  outlined: Boolean,
+                  pill: Boolean,
+                  tag: {
+                    type: String,
+                    default: "span",
+                  },
+                  textColor: String,
+                  value: null,
+                },
+                data: function data() {
+                  return {
+                    proxyClass: "v-chip--active",
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        __assign(
+                          __assign(
+                            __assign(
+                              {
+                                "v-chip": true,
+                              },
+                              _mixins_routable__WEBPACK_IMPORTED_MODULE_8__[
+                                "default"
+                              ].options.computed.classes.call(this)
+                            ),
+                            {
+                              "v-chip--clickable": this.isClickable,
+                              "v-chip--disabled": this.disabled,
+                              "v-chip--draggable": this.draggable,
+                              "v-chip--label": this.label,
+                              "v-chip--link": this.isLink,
+                              "v-chip--no-color": !this.color,
+                              "v-chip--outlined": this.outlined,
+                              "v-chip--pill": this.pill,
+                              "v-chip--removable": this.hasClose,
+                            }
+                          ),
+                          this.themeClasses
+                        ),
+                        this.sizeableClasses
+                      ),
+                      this.groupClasses
+                    );
+                  },
+                  hasClose: function hasClose() {
+                    return Boolean(this.close);
+                  },
+                  isClickable: function isClickable() {
+                    return Boolean(
+                      _mixins_routable__WEBPACK_IMPORTED_MODULE_8__[
+                        "default"
+                      ].options.computed.isClickable.call(this) ||
+                        this.chipGroup
+                    );
+                  },
+                },
+                created: function created() {
+                  var _this = this;
+
+                  var breakingProps = [
+                    ["outline", "outlined"],
+                    ["selected", "input-value"],
+                    ["value", "active"],
+                    ["@input", "@active.sync"],
+                  ];
+                  /* istanbul ignore next */
+
+                  breakingProps.forEach(function (_a) {
+                    var _b = __read(_a, 2),
+                      original = _b[0],
+                      replacement = _b[1];
+
+                    if (_this.$attrs.hasOwnProperty(original))
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"]
+                      )(original, replacement, _this);
+                  });
+                },
+                methods: {
+                  click: function click(e) {
+                    this.$emit("click", e);
+                    this.chipGroup && this.toggle();
+                  },
+                  genFilter: function genFilter() {
+                    var children = [];
+
+                    if (this.isActive) {
+                      children.push(
+                        this.$createElement(
+                          _VIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                          {
+                            staticClass: "v-chip__filter",
+                            props: {
+                              left: true,
+                            },
+                          },
+                          this.filterIcon
+                        )
+                      );
+                    }
+
+                    return this.$createElement(
+                      _transitions__WEBPACK_IMPORTED_MODULE_2__[
+                        "VExpandXTransition"
+                      ],
+                      children
+                    );
+                  },
+                  genClose: function genClose() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      {
+                        staticClass: "v-chip__close",
+                        props: {
+                          right: true,
+                          size: 18,
+                        },
+                        on: {
+                          click: function click(e) {
+                            e.stopPropagation();
+                            e.preventDefault();
+
+                            _this.$emit("click:close");
+
+                            _this.$emit("update:active", false);
+                          },
+                        },
+                      },
+                      this.closeIcon
+                    );
+                  },
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "span",
+                      {
+                        staticClass: "v-chip__content",
+                      },
+                      [
+                        this.filter && this.genFilter(),
+                        this.$slots.default,
+                        this.hasClose && this.genClose(),
+                      ]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var children = [this.genContent()];
+
+                  var _a = this.generateRouteLink(),
+                    tag = _a.tag,
+                    data = _a.data;
+
+                  data.attrs = __assign(__assign({}, data.attrs), {
+                    draggable: this.draggable ? "true" : undefined,
+                    tabindex:
+                      this.chipGroup && !this.disabled
+                        ? 0
+                        : data.attrs.tabindex,
+                  });
+                  data.directives.push({
+                    name: "show",
+                    value: this.active,
+                  });
+                  data = this.setBackgroundColor(this.color, data);
+                  var color = this.textColor || (this.outlined && this.color);
+                  return h(tag, this.setTextColor(color, data), children);
+                },
+              });
 
-          if (y > this.bodyHeight) {
-            y = this.bodyHeight;
-          }
-        }
-      }
+            /***/
+          },
 
-      return y;
-    },
-    timeDelta: function timeDelta(time) {
-      var minutes = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_2__["parseTime"])(time);
+        /***/ "./src/components/VChip/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VChip/index.ts ***!
+  \***************************************/
+          /*! exports provided: VChip, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VChip */ "./src/components/VChip/VChip.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VChip",
+              function () {
+                return _VChip__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      if (minutes === false) {
-        return false;
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VChip__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      var min = this.firstMinute;
-      var gap = this.parsedIntervalCount * this.parsedIntervalMinutes;
-      return (minutes - min) / gap;
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VChipGroup/VChipGroup.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VChipGroup/VChipGroup.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VCalendar/mixins/mouse.ts":
-/*!**************************************************!*\
-  !*** ./src/components/VCalendar/mixins/mouse.ts ***!
-  \**************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'mouse',
-  methods: {
-    getDefaultMouseEventHandlers: function getDefaultMouseEventHandlers(suffix, getEvent) {
-      var _a;
-
-      return this.getMouseEventHandlers((_a = {}, _a['click' + suffix] = {
-        event: 'click'
-      }, _a['contextmenu' + suffix] = {
-        event: 'contextmenu',
-        prevent: true,
-        result: false
-      }, _a['mousedown' + suffix] = {
-        event: 'mousedown'
-      }, _a['mousemove' + suffix] = {
-        event: 'mousemove'
-      }, _a['mouseup' + suffix] = {
-        event: 'mouseup'
-      }, _a['mouseenter' + suffix] = {
-        event: 'mouseenter'
-      }, _a['mouseleave' + suffix] = {
-        event: 'mouseleave'
-      }, _a['touchstart' + suffix] = {
-        event: 'touchstart'
-      }, _a['touchmove' + suffix] = {
-        event: 'touchmove'
-      }, _a['touchend' + suffix] = {
-        event: 'touchend'
-      }, _a), getEvent);
-    },
-    getMouseEventHandlers: function getMouseEventHandlers(events, getEvent) {
-      var _this = this;
-
-      var on = {};
-
-      var _loop_1 = function _loop_1(event) {
-        var eventOptions = events[event];
-        if (!this_1.$listeners[event]) return "continue"; // TODO somehow pull in modifiers
-
-        var prefix = eventOptions.passive ? '&' : (eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : '');
-        var key = prefix + eventOptions.event;
-
-        var handler = function handler(e) {
-          var mouseEvent = e;
-
-          if (eventOptions.button === undefined || mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button) {
-            if (eventOptions.prevent) {
-              e.preventDefault();
-            }
+        /***/ "./src/components/VChipGroup/VChipGroup.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VChipGroup/VChipGroup.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VChipGroup_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VChipGroup.sass */ "./src/components/VChipGroup/VChipGroup.sass"
+              );
+            /* harmony import */ var _VChipGroup_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VChipGroup_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSlideGroup/VSlideGroup */ "./src/components/VSlideGroup/VSlideGroup.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__[
+                  "BaseSlideGroup"
+                ],
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "v-chip-group",
+                provide: function provide() {
+                  return {
+                    chipGroup: this,
+                  };
+                },
+                props: {
+                  column: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__[
+                          "BaseSlideGroup"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-chip-group": true,
+                        "v-chip-group--column": this.column,
+                      }
+                    );
+                  },
+                },
+                watch: {
+                  column: function column(val) {
+                    if (val) this.scrollOffset = 0;
+                    this.$nextTick(this.onResize);
+                  },
+                },
+                methods: {
+                  genData: function genData() {
+                    return this.setTextColor(
+                      this.color,
+                      __assign(
+                        {},
+                        _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__[
+                          "BaseSlideGroup"
+                        ].options.methods.genData.call(this)
+                      )
+                    );
+                  },
+                },
+              });
 
-            if (eventOptions.stop) {
-              e.stopPropagation();
-            }
+            /***/
+          },
 
-            _this.$emit(event, getEvent(e));
-          }
-
-          return eventOptions.result;
-        };
-
-        if (key in on) {
-          /* istanbul ignore next */
-          if (Array.isArray(on[key])) {
-            on[key].push(handler);
-          } else {
-            on[key] = [on[key], handler];
-          }
-        } else {
-          on[key] = handler;
-        }
-      };
+        /***/ "./src/components/VChipGroup/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VChipGroup/index.ts ***!
+  \********************************************/
+          /*! exports provided: VChipGroup, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VChipGroup__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VChipGroup */ "./src/components/VChipGroup/VChipGroup.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VChipGroup",
+              function () {
+                return _VChipGroup__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      var this_1 = this;
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VChipGroup__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      for (var event in events) {
-        _loop_1(event);
-      }
+            /***/
+          },
 
-      return on;
-    }
-  }
-}));
+        /***/ "./src/components/VColorPicker/VColorPicker.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPicker.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VColorPicker/VColorPicker.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPicker.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VColorPicker_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VColorPicker.sass */ "./src/components/VColorPicker/VColorPicker.sass"
+              );
+            /* harmony import */ var _VColorPicker_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VColorPicker_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts"
+              );
+            /* harmony import */ var _VColorPickerPreview__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VColorPickerPreview */ "./src/components/VColorPicker/VColorPickerPreview.ts"
+              );
+            /* harmony import */ var _VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VColorPickerCanvas */ "./src/components/VColorPicker/VColorPickerCanvas.ts"
+              );
+            /* harmony import */ var _VColorPickerEdit__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VColorPickerEdit */ "./src/components/VColorPicker/VColorPickerEdit.ts"
+              );
+            /* harmony import */ var _VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./VColorPickerSwatches */ "./src/components/VColorPicker/VColorPickerSwatches.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VColorPicker/util/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Helpers
+
+            // Mixins
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(
+                _mixins_elevatable__WEBPACK_IMPORTED_MODULE_9__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__["default"]
+              ).extend({
+                name: "v-color-picker",
+                props: {
+                  canvasHeight: {
+                    type: [String, Number],
+                    default: 150,
+                  },
+                  disabled: Boolean,
+                  dotSize: {
+                    type: [Number, String],
+                    default: 10,
+                  },
+                  flat: Boolean,
+                  hideCanvas: Boolean,
+                  hideInputs: Boolean,
+                  hideModeSwitch: Boolean,
+                  mode: {
+                    type: String,
+                    default: "rgba",
+                    validator: function validator(v) {
+                      return Object.keys(
+                        _VColorPickerEdit__WEBPACK_IMPORTED_MODULE_4__["modes"]
+                      ).includes(v);
+                    },
+                  },
+                  showSwatches: Boolean,
+                  swatches: Array,
+                  swatchesMaxHeight: {
+                    type: [Number, String],
+                    default: 150,
+                  },
+                  value: {
+                    type: [Object, String],
+                  },
+                  width: {
+                    type: [Number, String],
+                    default: 300,
+                  },
+                },
+                data: function data() {
+                  return {
+                    internalValue: Object(
+                      _util__WEBPACK_IMPORTED_MODULE_6__["fromRGBA"]
+                    )({
+                      r: 255,
+                      g: 0,
+                      b: 0,
+                      a: 1,
+                    }),
+                  };
+                },
+                computed: {
+                  hideAlpha: function hideAlpha() {
+                    if (!this.value) return false;
+                    return !Object(
+                      _util__WEBPACK_IMPORTED_MODULE_6__["hasAlpha"]
+                    )(this.value);
+                  },
+                },
+                watch: {
+                  value: {
+                    handler: function handler(color) {
+                      this.updateColor(
+                        Object(
+                          _util__WEBPACK_IMPORTED_MODULE_6__["parseColor"]
+                        )(color, this.internalValue)
+                      );
+                    },
+                    immediate: true,
+                  },
+                },
+                methods: {
+                  updateColor: function updateColor(color) {
+                    this.internalValue = color;
+                    var value = Object(
+                      _util__WEBPACK_IMPORTED_MODULE_6__["extractColor"]
+                    )(this.internalValue, this.value);
+
+                    if (
+                      !Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__["deepEqual"]
+                      )(value, this.value)
+                    ) {
+                      this.$emit("input", value);
+                      this.$emit("update:color", this.internalValue);
+                    }
+                  },
+                  genCanvas: function genCanvas() {
+                    return this.$createElement(
+                      _VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_3__[
+                        "default"
+                      ],
+                      {
+                        props: {
+                          color: this.internalValue,
+                          disabled: this.disabled,
+                          dotSize: this.dotSize,
+                          width: this.width,
+                          height: this.canvasHeight,
+                        },
+                        on: {
+                          "update:color": this.updateColor,
+                        },
+                      }
+                    );
+                  },
+                  genControls: function genControls() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-color-picker__controls",
+                      },
+                      [this.genPreview(), !this.hideInputs && this.genEdit()]
+                    );
+                  },
+                  genEdit: function genEdit() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VColorPickerEdit__WEBPACK_IMPORTED_MODULE_4__["default"],
+                      {
+                        props: {
+                          color: this.internalValue,
+                          disabled: this.disabled,
+                          hideAlpha: this.hideAlpha,
+                          hideModeSwitch: this.hideModeSwitch,
+                          mode: this.mode,
+                        },
+                        on: {
+                          "update:color": this.updateColor,
+                          "update:mode": function updateMode(v) {
+                            return _this.$emit("update:mode", v);
+                          },
+                        },
+                      }
+                    );
+                  },
+                  genPreview: function genPreview() {
+                    return this.$createElement(
+                      _VColorPickerPreview__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ],
+                      {
+                        props: {
+                          color: this.internalValue,
+                          disabled: this.disabled,
+                          hideAlpha: this.hideAlpha,
+                        },
+                        on: {
+                          "update:color": this.updateColor,
+                        },
+                      }
+                    );
+                  },
+                  genSwatches: function genSwatches() {
+                    return this.$createElement(
+                      _VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_5__[
+                        "default"
+                      ],
+                      {
+                        props: {
+                          dark: this.dark,
+                          light: this.light,
+                          swatches: this.swatches,
+                          color: this.internalValue,
+                          maxHeight: this.swatchesMaxHeight,
+                        },
+                        on: {
+                          "update:color": this.updateColor,
+                        },
+                      }
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"],
+                    {
+                      staticClass: "v-color-picker",
+                      class: __assign(
+                        __assign(
+                          {
+                            "v-color-picker--flat": this.flat,
+                          },
+                          this.themeClasses
+                        ),
+                        this.elevationClasses
+                      ),
+                      props: {
+                        maxWidth: this.width,
+                      },
+                    },
+                    [
+                      !this.hideCanvas && this.genCanvas(),
+                      this.genControls(),
+                      this.showSwatches && this.genSwatches(),
+                    ]
+                  );
+                },
+              });
 
-/***/ "./src/components/VCalendar/mixins/times.ts":
-/*!**************************************************!*\
-  !*** ./src/components/VCalendar/mixins/times.ts ***!
-  \**************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'times',
-  props: {
-    now: {
-      type: String,
-      validator: _util_timestamp__WEBPACK_IMPORTED_MODULE_1__["validateTimestamp"]
-    }
-  },
-  data: function data() {
-    return {
-      times: {
-        now: Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_1__["parseTimestamp"])('0000-00-00 00:00', true),
-        today: Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_1__["parseTimestamp"])('0000-00-00', true)
-      }
-    };
-  },
-  computed: {
-    parsedNow: function parsedNow() {
-      return this.now ? Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_1__["parseTimestamp"])(this.now, true) : null;
-    }
-  },
-  watch: {
-    parsedNow: 'updateTimes'
-  },
-  created: function created() {
-    this.updateTimes();
-    this.setPresent();
-  },
-  methods: {
-    setPresent: function setPresent() {
-      this.times.now.present = this.times.today.present = true;
-      this.times.now.past = this.times.today.past = false;
-      this.times.now.future = this.times.today.future = false;
-    },
-    updateTimes: function updateTimes() {
-      var now = this.parsedNow || this.getNow();
-      this.updateDay(now, this.times.now);
-      this.updateTime(now, this.times.now);
-      this.updateDay(now, this.times.today);
-    },
-    getNow: function getNow() {
-      return Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_1__["parseDate"])(new Date());
-    },
-    updateDay: function updateDay(now, target) {
-      if (now.date !== target.date) {
-        target.year = now.year;
-        target.month = now.month;
-        target.day = now.day;
-        target.weekday = now.weekday;
-        target.date = now.date;
-      }
-    },
-    updateTime: function updateTime(now, target) {
-      if (now.time !== target.time) {
-        target.hour = now.hour;
-        target.minute = now.minute;
-        target.time = now.time;
-      }
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VColorPicker/VColorPickerCanvas.sass":
+          /*!*************************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerCanvas.sass ***!
+  \*************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VCalendar/modes/column.ts":
-/*!**************************************************!*\
-  !*** ./src/components/VCalendar/modes/column.ts ***!
-  \**************************************************/
-/*! exports provided: column */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "column", function() { return column; });
-/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common */ "./src/components/VCalendar/modes/common.ts");
-
-var FULL_WIDTH = 100;
-var column = function column(events, firstWeekday, overlapThreshold) {
-  var handler = Object(_common__WEBPACK_IMPORTED_MODULE_0__["getOverlapGroupHandler"])(firstWeekday);
-  return function (day, dayEvents, timed, reset) {
-    var visuals = handler.getVisuals(day, dayEvents, timed, reset);
-
-    if (timed) {
-      visuals.forEach(function (visual) {
-        visual.left = visual.column * FULL_WIDTH / visual.columnCount;
-        visual.width = FULL_WIDTH / visual.columnCount;
-      });
-    }
-
-    return visuals;
-  };
-};
-
-/***/ }),
-
-/***/ "./src/components/VCalendar/modes/common.ts":
-/*!**************************************************!*\
-  !*** ./src/components/VCalendar/modes/common.ts ***!
-  \**************************************************/
-/*! exports provided: getVisuals, hasOverlap, setColumnCount, getRange, getDayRange, getNormalizedRange, getOpenGroup, getOverlapGroupHandler */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getVisuals", function() { return _getVisuals; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasOverlap", function() { return hasOverlap; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setColumnCount", function() { return setColumnCount; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getRange", function() { return getRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDayRange", function() { return getDayRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNormalizedRange", function() { return getNormalizedRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOpenGroup", function() { return getOpenGroup; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOverlapGroupHandler", function() { return getOverlapGroupHandler; });
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+        /***/ "./src/components/VColorPicker/VColorPickerCanvas.ts":
+          /*!***********************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerCanvas.ts ***!
+  \***********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VColorPickerCanvas_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VColorPickerCanvas.sass */ "./src/components/VColorPicker/VColorPickerCanvas.sass"
+              );
+            /* harmony import */ var _VColorPickerCanvas_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VColorPickerCanvas_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VColorPicker/util/index.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_3__
+              );
+            // Styles
+            // Helpers
+
+            // Types
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_3___default.a.extend({
+                name: "v-color-picker-canvas",
+                props: {
+                  color: {
+                    type: Object,
+                    default: function _default() {
+                      return Object(
+                        _util__WEBPACK_IMPORTED_MODULE_2__["fromRGBA"]
+                      )({
+                        r: 255,
+                        g: 0,
+                        b: 0,
+                        a: 1,
+                      });
+                    },
+                  },
+                  disabled: Boolean,
+                  dotSize: {
+                    type: [Number, String],
+                    default: 10,
+                  },
+                  height: {
+                    type: [Number, String],
+                    default: 150,
+                  },
+                  width: {
+                    type: [Number, String],
+                    default: 300,
+                  },
+                },
+                data: function data() {
+                  return {
+                    boundingRect: {
+                      width: 0,
+                      height: 0,
+                      left: 0,
+                      top: 0,
+                    },
+                  };
+                },
+                computed: {
+                  dot: function dot() {
+                    if (!this.color)
+                      return {
+                        x: 0,
+                        y: 0,
+                      };
+                    return {
+                      x: this.color.hsva.s * parseInt(this.width, 10),
+                      y: (1 - this.color.hsva.v) * parseInt(this.height, 10),
+                    };
+                  },
+                },
+                watch: {
+                  "color.hue": "updateCanvas",
+                },
+                mounted: function mounted() {
+                  this.updateCanvas();
+                },
+                methods: {
+                  emitColor: function emitColor(x, y) {
+                    var _a = this.boundingRect,
+                      left = _a.left,
+                      top = _a.top,
+                      width = _a.width,
+                      height = _a.height;
+                    this.$emit(
+                      "update:color",
+                      Object(_util__WEBPACK_IMPORTED_MODULE_2__["fromHSVA"])({
+                        h: this.color.hue,
+                        s:
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_1__["clamp"]
+                          )(x - left, 0, width) / width,
+                        v:
+                          1 -
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_1__["clamp"]
+                          )(y - top, 0, height) /
+                            height,
+                        a: this.color.alpha,
+                      })
+                    );
+                  },
+                  updateCanvas: function updateCanvas() {
+                    if (!this.color) return;
+                    var canvas = this.$refs.canvas;
+                    var ctx = canvas.getContext("2d");
+                    if (!ctx) return;
+                    var saturationGradient = ctx.createLinearGradient(
+                      0,
+                      0,
+                      canvas.width,
+                      0
+                    );
+                    saturationGradient.addColorStop(0, "hsla(0, 0%, 100%, 1)"); // white
+
+                    saturationGradient.addColorStop(
+                      1,
+                      "hsla(" + this.color.hue + ", 100%, 50%, 1)"
+                    );
+                    ctx.fillStyle = saturationGradient;
+                    ctx.fillRect(0, 0, canvas.width, canvas.height);
+                    var valueGradient = ctx.createLinearGradient(
+                      0,
+                      0,
+                      0,
+                      canvas.height
+                    );
+                    valueGradient.addColorStop(0, "hsla(0, 0%, 100%, 0)"); // transparent
+
+                    valueGradient.addColorStop(1, "hsla(0, 0%, 0%, 1)"); // black
+
+                    ctx.fillStyle = valueGradient;
+                    ctx.fillRect(0, 0, canvas.width, canvas.height);
+                  },
+                  handleClick: function handleClick(e) {
+                    if (this.disabled) return;
+                    this.boundingRect = this.$el.getBoundingClientRect();
+                    this.emitColor(e.clientX, e.clientY);
+                  },
+                  handleMouseDown: function handleMouseDown(e) {
+                    // To prevent selection while moving cursor
+                    e.preventDefault();
+                    if (this.disabled) return;
+                    this.boundingRect = this.$el.getBoundingClientRect();
+                    window.addEventListener("mousemove", this.handleMouseMove);
+                    window.addEventListener("mouseup", this.handleMouseUp);
+                  },
+                  handleMouseMove: function handleMouseMove(e) {
+                    if (this.disabled) return;
+                    this.emitColor(e.clientX, e.clientY);
+                  },
+                  handleMouseUp: function handleMouseUp() {
+                    window.removeEventListener(
+                      "mousemove",
+                      this.handleMouseMove
+                    );
+                    window.removeEventListener("mouseup", this.handleMouseUp);
+                  },
+                  genCanvas: function genCanvas() {
+                    return this.$createElement("canvas", {
+                      ref: "canvas",
+                      attrs: {
+                        width: this.width,
+                        height: this.height,
+                      },
+                    });
+                  },
+                  genDot: function genDot() {
+                    var radius = parseInt(this.dotSize, 10) / 2;
+                    var x = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                        "convertToUnit"
+                      ]
+                    )(this.dot.x - radius);
+                    var y = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                        "convertToUnit"
+                      ]
+                    )(this.dot.y - radius);
+                    return this.$createElement("div", {
+                      staticClass: "v-color-picker__canvas-dot",
+                      class: {
+                        "v-color-picker__canvas-dot--disabled": this.disabled,
+                      },
+                      style: {
+                        width: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                            "convertToUnit"
+                          ]
+                        )(this.dotSize),
+                        height: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                            "convertToUnit"
+                          ]
+                        )(this.dotSize),
+                        transform: "translate(" + x + ", " + y + ")",
+                      },
+                    });
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-color-picker__canvas",
+                      style: {
+                        width: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                            "convertToUnit"
+                          ]
+                        )(this.width),
+                        height: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                            "convertToUnit"
+                          ]
+                        )(this.height),
+                      },
+                      on: {
+                        click: this.handleClick,
+                        mousedown: this.handleMouseDown,
+                      },
+                    },
+                    [this.genCanvas(), this.genDot()]
+                  );
+                },
+              });
 
-  return ar;
-};
+            /***/
+          },
 
+        /***/ "./src/components/VColorPicker/VColorPickerEdit.sass":
+          /*!***********************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerEdit.sass ***!
+  \***********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-var MILLIS_IN_DAY = 86400000;
-
-function _getVisuals(events, minStart) {
-  if (minStart === void 0) {
-    minStart = 0;
-  }
+        /***/ "./src/components/VColorPicker/VColorPickerEdit.ts":
+          /*!*********************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerEdit.ts ***!
+  \*********************************************************/
+          /*! exports provided: modes, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "modes",
+              function () {
+                return modes;
+              }
+            );
+            /* harmony import */ var _VColorPickerEdit_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VColorPickerEdit.sass */ "./src/components/VColorPicker/VColorPickerEdit.sass"
+              );
+            /* harmony import */ var _VColorPickerEdit_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VColorPickerEdit_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/colorUtils */ "./src/util/colorUtils.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_4__
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VColorPicker/util/index.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-  var visuals = events.map(function (event) {
-    return {
-      event: event,
-      columnCount: 0,
-      column: 0,
-      left: 0,
-      width: 100
-    };
-  });
-  visuals.sort(function (a, b) {
-    return Math.max(minStart, a.event.startTimestampIdentifier) - Math.max(minStart, b.event.startTimestampIdentifier) || b.event.endTimestampIdentifier - a.event.endTimestampIdentifier;
-  });
-  return visuals;
-}
-
-
-function hasOverlap(s0, e0, s1, e1, exclude) {
-  if (exclude === void 0) {
-    exclude = true;
-  }
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-  return exclude ? !(s0 >= e1 || e0 <= s1) : !(s0 > e1 || e0 < s1);
-}
-function setColumnCount(groups) {
-  groups.forEach(function (group) {
-    group.visuals.forEach(function (groupVisual) {
-      groupVisual.columnCount = groups.length;
-    });
-  });
-}
-function getRange(event) {
-  return [event.startTimestampIdentifier, event.endTimestampIdentifier];
-}
-function getDayRange(event) {
-  return [event.startIdentifier, event.endIdentifier];
-}
-function getNormalizedRange(event, dayStart) {
-  return [Math.max(dayStart, event.startTimestampIdentifier), Math.min(dayStart + MILLIS_IN_DAY, event.endTimestampIdentifier)];
-}
-function getOpenGroup(groups, start, end, timed) {
-  for (var i = 0; i < groups.length; i++) {
-    var group = groups[i];
-    var intersected = false;
-
-    if (hasOverlap(start, end, group.start, group.end, timed)) {
-      for (var k = 0; k < group.visuals.length; k++) {
-        var groupVisual = group.visuals[k];
-
-        var _a = __read(timed ? getRange(groupVisual.event) : getDayRange(groupVisual.event), 2),
-            groupStart = _a[0],
-            groupEnd = _a[1];
-
-        if (hasOverlap(start, end, groupStart, groupEnd, timed)) {
-          intersected = true;
-          break;
-        }
-      }
-    }
+                return ar;
+              }; // Styles
+
+            // Components
+
+            // Helpers
+
+            // Types
+
+            var modes = {
+              rgba: {
+                inputs: [
+                  ["r", 255, "int"],
+                  ["g", 255, "int"],
+                  ["b", 255, "int"],
+                  ["a", 1, "float"],
+                ],
+                from: _util__WEBPACK_IMPORTED_MODULE_5__["fromRGBA"],
+              },
+              hsla: {
+                inputs: [
+                  ["h", 360, "int"],
+                  ["s", 1, "float"],
+                  ["l", 1, "float"],
+                  ["a", 1, "float"],
+                ],
+                from: _util__WEBPACK_IMPORTED_MODULE_5__["fromHSLA"],
+              },
+              hexa: {
+                from: _util__WEBPACK_IMPORTED_MODULE_5__["fromHexa"],
+              },
+            };
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_4___default.a.extend({
+                name: "v-color-picker-edit",
+                props: {
+                  color: Object,
+                  disabled: Boolean,
+                  hideAlpha: Boolean,
+                  hideModeSwitch: Boolean,
+                  mode: {
+                    type: String,
+                    default: "rgba",
+                    validator: function validator(v) {
+                      return Object.keys(modes).includes(v);
+                    },
+                  },
+                },
+                data: function data() {
+                  return {
+                    modes: modes,
+                    internalMode: this.mode,
+                  };
+                },
+                computed: {
+                  currentMode: function currentMode() {
+                    return this.modes[this.internalMode];
+                  },
+                },
+                watch: {
+                  mode: function mode(_mode) {
+                    this.internalMode = _mode;
+                  },
+                },
+                created: function created() {
+                  this.internalMode = this.mode;
+                },
+                methods: {
+                  getValue: function getValue(v, type) {
+                    if (type === "float") return Math.round(v * 100) / 100;
+                    else if (type === "int") return Math.round(v);
+                    else return 0;
+                  },
+                  parseValue: function parseValue(v, type) {
+                    if (type === "float") return parseFloat(v);
+                    else if (type === "int") return parseInt(v, 10) || 0;
+                    else return 0;
+                  },
+                  changeMode: function changeMode() {
+                    var modes = Object.keys(this.modes);
+                    var index = modes.indexOf(this.internalMode);
+                    var newMode = modes[(index + 1) % modes.length];
+                    this.internalMode = newMode;
+                    this.$emit("update:mode", newMode);
+                  },
+                  genInput: function genInput(target, attrs, value, on) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-color-picker__input",
+                      },
+                      [
+                        this.$createElement("input", {
+                          key: target,
+                          attrs: attrs,
+                          domProps: {
+                            value: value,
+                          },
+                          on: on,
+                        }),
+                        this.$createElement("span", target.toUpperCase()),
+                      ]
+                    );
+                  },
+                  genInputs: function genInputs() {
+                    var _this = this;
+
+                    if (this.internalMode === "hexa") {
+                      var hex = this.color.hexa;
+                      var value =
+                        this.hideAlpha && hex.endsWith("FF")
+                          ? hex.substr(0, 7)
+                          : hex;
+                      return this.genInput(
+                        "hex",
+                        {
+                          maxlength: this.hideAlpha ? 7 : 9,
+                          disabled: this.disabled,
+                        },
+                        value,
+                        {
+                          change: function change(e) {
+                            var el = e.target;
+
+                            _this.$emit(
+                              "update:color",
+                              _this.currentMode.from(
+                                Object(
+                                  _util_colorUtils__WEBPACK_IMPORTED_MODULE_3__[
+                                    "parseHex"
+                                  ]
+                                )(el.value)
+                              )
+                            );
+                          },
+                        }
+                      );
+                    } else {
+                      var inputs = this.hideAlpha
+                        ? this.currentMode.inputs.slice(0, -1)
+                        : this.currentMode.inputs;
+                      return inputs.map(function (_a) {
+                        var _b = __read(_a, 3),
+                          target = _b[0],
+                          max = _b[1],
+                          type = _b[2];
+
+                        var value = _this.color[_this.internalMode];
+                        return _this.genInput(
+                          target,
+                          {
+                            type: "number",
+                            min: 0,
+                            max: max,
+                            step:
+                              type === "float"
+                                ? "0.01"
+                                : type === "int"
+                                ? "1"
+                                : undefined,
+                            disabled: _this.disabled,
+                          },
+                          _this.getValue(value[target], type),
+                          {
+                            input: function input(e) {
+                              var _a;
+
+                              var el = e.target;
+
+                              var newVal = _this.parseValue(
+                                el.value || "0",
+                                type
+                              );
+
+                              _this.$emit(
+                                "update:color",
+                                _this.currentMode.from(
+                                  Object.assign(
+                                    {},
+                                    value,
+                                    ((_a = {}), (_a[target] = newVal), _a)
+                                  ),
+                                  _this.color.alpha
+                                )
+                              );
+                            },
+                          }
+                        );
+                      });
+                    }
+                  },
+                  genSwitch: function genSwitch() {
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        props: {
+                          small: true,
+                          icon: true,
+                          disabled: this.disabled,
+                        },
+                        on: {
+                          click: this.changeMode,
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          _VIcon__WEBPACK_IMPORTED_MODULE_2__["default"],
+                          "$unfold"
+                        ),
+                      ]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-color-picker__edit",
+                    },
+                    [this.genInputs(), !this.hideModeSwitch && this.genSwitch()]
+                  );
+                },
+              });
 
-    if (!intersected) {
-      return i;
-    }
-  }
+            /***/
+          },
 
-  return -1;
-}
-function getOverlapGroupHandler(firstWeekday) {
-  var handler = {
-    groups: [],
-    min: -1,
-    max: -1,
-    reset: function reset() {
-      handler.groups = [];
-      handler.min = handler.max = -1;
-    },
-    getVisuals: function getVisuals(day, dayEvents, timed, reset) {
-      if (reset === void 0) {
-        reset = false;
-      }
+        /***/ "./src/components/VColorPicker/VColorPickerPreview.sass":
+          /*!**************************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerPreview.sass ***!
+  \**************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (day.weekday === firstWeekday || reset) {
-        handler.reset();
-      }
+        /***/ "./src/components/VColorPicker/VColorPickerPreview.ts":
+          /*!************************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerPreview.ts ***!
+  \************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VColorPickerPreview_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VColorPickerPreview.sass */ "./src/components/VColorPicker/VColorPickerPreview.sass"
+              );
+            /* harmony import */ var _VColorPickerPreview_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VColorPickerPreview_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSlider_VSlider__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSlider/VSlider */ "./src/components/VSlider/VSlider.ts"
+              );
+            /* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/colorUtils */ "./src/util/colorUtils.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_3__
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VColorPicker/util/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Utilities
+
+            // Types
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_3___default.a.extend({
+                name: "v-color-picker-preview",
+                props: {
+                  color: Object,
+                  disabled: Boolean,
+                  hideAlpha: Boolean,
+                },
+                methods: {
+                  genAlpha: function genAlpha() {
+                    var _this = this;
+
+                    return this.genTrack({
+                      staticClass: "v-color-picker__alpha",
+                      props: {
+                        thumbColor: "grey lighten-2",
+                        hideDetails: true,
+                        value: this.color.alpha,
+                        step: 0,
+                        min: 0,
+                        max: 1,
+                      },
+                      style: {
+                        backgroundImage: this.disabled
+                          ? undefined
+                          : "linear-gradient(to " +
+                            (this.$vuetify.rtl ? "left" : "right") +
+                            ", transparent, " +
+                            Object(
+                              _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__[
+                                "RGBtoCSS"
+                              ]
+                            )(this.color.rgba) +
+                            ")",
+                      },
+                      on: {
+                        input: function input(val) {
+                          return (
+                            _this.color.alpha !== val &&
+                            _this.$emit(
+                              "update:color",
+                              Object(
+                                _util__WEBPACK_IMPORTED_MODULE_4__["fromHSVA"]
+                              )(
+                                __assign(__assign({}, _this.color.hsva), {
+                                  a: val,
+                                })
+                              )
+                            )
+                          );
+                        },
+                      },
+                    });
+                  },
+                  genSliders: function genSliders() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-color-picker__sliders",
+                      },
+                      [this.genHue(), !this.hideAlpha && this.genAlpha()]
+                    );
+                  },
+                  genDot: function genDot() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-color-picker__dot",
+                      },
+                      [
+                        this.$createElement("div", {
+                          style: {
+                            background: Object(
+                              _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__[
+                                "RGBAtoCSS"
+                              ]
+                            )(this.color.rgba),
+                          },
+                        }),
+                      ]
+                    );
+                  },
+                  genHue: function genHue() {
+                    var _this = this;
+
+                    return this.genTrack({
+                      staticClass: "v-color-picker__hue",
+                      props: {
+                        thumbColor: "grey lighten-2",
+                        hideDetails: true,
+                        value: this.color.hue,
+                        step: 0,
+                        min: 0,
+                        max: 360,
+                      },
+                      on: {
+                        input: function input(val) {
+                          return (
+                            _this.color.hue !== val &&
+                            _this.$emit(
+                              "update:color",
+                              Object(
+                                _util__WEBPACK_IMPORTED_MODULE_4__["fromHSVA"]
+                              )(
+                                __assign(__assign({}, _this.color.hsva), {
+                                  h: val,
+                                })
+                              )
+                            )
+                          );
+                        },
+                      },
+                    });
+                  },
+                  genTrack: function genTrack(options) {
+                    return this.$createElement(
+                      _VSlider_VSlider__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      __assign(
+                        __assign(
+                          {
+                            class: "v-color-picker__track",
+                          },
+                          options
+                        ),
+                        {
+                          props: __assign(
+                            {
+                              disabled: this.disabled,
+                            },
+                            options.props
+                          ),
+                        }
+                      )
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-color-picker__preview",
+                      class: {
+                        "v-color-picker__preview--hide-alpha": this.hideAlpha,
+                      },
+                    },
+                    [this.genDot(), this.genSliders()]
+                  );
+                },
+              });
 
-      var dayStart = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_0__["getTimestampIdentifier"])(day);
+            /***/
+          },
 
-      var visuals = _getVisuals(dayEvents, dayStart);
+        /***/ "./src/components/VColorPicker/VColorPickerSwatches.sass":
+          /*!***************************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerSwatches.sass ***!
+  \***************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      visuals.forEach(function (visual) {
-        var _a = __read(timed ? getRange(visual.event) : getDayRange(visual.event), 2),
-            start = _a[0],
-            end = _a[1];
+        /***/ "./src/components/VColorPicker/VColorPickerSwatches.ts":
+          /*!*************************************************************!*\
+  !*** ./src/components/VColorPicker/VColorPickerSwatches.ts ***!
+  \*************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VColorPickerSwatches_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VColorPickerSwatches.sass */ "./src/components/VColorPicker/VColorPickerSwatches.sass"
+              );
+            /* harmony import */ var _VColorPickerSwatches_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VColorPickerSwatches_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _util_colors__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/colors */ "./src/util/colors.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VColorPicker/util/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/colorUtils */ "./src/util/colorUtils.ts"
+              );
+            // Styles
+            // Components
+
+            // Helpers
+
+            function parseDefaultColors(colors) {
+              return Object.keys(colors).map(function (key) {
+                var color = colors[key];
+                return color.base
+                  ? [
+                      color.base,
+                      color.darken4,
+                      color.darken3,
+                      color.darken2,
+                      color.darken1,
+                      color.lighten1,
+                      color.lighten2,
+                      color.lighten3,
+                      color.lighten4,
+                      color.lighten5,
+                    ]
+                  : [color.black, color.white, color.transparent];
+              });
+            }
 
-        if (handler.groups.length > 0 && !hasOverlap(start, end, handler.min, handler.max, timed)) {
-          setColumnCount(handler.groups);
-          handler.reset();
-        }
+            var white = Object(_util__WEBPACK_IMPORTED_MODULE_3__["fromHex"])(
+              "#FFFFFF"
+            ).rgba;
+            var black = Object(_util__WEBPACK_IMPORTED_MODULE_3__["fromHex"])(
+              "#000000"
+            ).rgba;
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]
+              ).extend({
+                name: "v-color-picker-swatches",
+                props: {
+                  swatches: {
+                    type: Array,
+                    default: function _default() {
+                      return parseDefaultColors(
+                        _util_colors__WEBPACK_IMPORTED_MODULE_2__["default"]
+                      );
+                    },
+                  },
+                  color: Object,
+                  maxWidth: [Number, String],
+                  maxHeight: [Number, String],
+                },
+                methods: {
+                  genColor: function genColor(color) {
+                    var _this = this;
+
+                    var content = this.$createElement(
+                      "div",
+                      {
+                        style: {
+                          background: color,
+                        },
+                      },
+                      [
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "deepEqual"
+                          ]
+                        )(
+                          this.color,
+                          Object(
+                            _util__WEBPACK_IMPORTED_MODULE_3__["parseColor"]
+                          )(color, null)
+                        ) &&
+                          this.$createElement(
+                            _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                            {
+                              props: {
+                                small: true,
+                                dark:
+                                  Object(
+                                    _util_colorUtils__WEBPACK_IMPORTED_MODULE_7__[
+                                      "contrastRatio"
+                                    ]
+                                  )(this.color.rgba, white) > 2 &&
+                                  this.color.alpha > 0.5,
+                                light:
+                                  Object(
+                                    _util_colorUtils__WEBPACK_IMPORTED_MODULE_7__[
+                                      "contrastRatio"
+                                    ]
+                                  )(this.color.rgba, black) > 2 &&
+                                  this.color.alpha > 0.5,
+                              },
+                            },
+                            "$success"
+                          ),
+                      ]
+                    );
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-color-picker__color",
+                        on: {
+                          // TODO: Less hacky way of catching transparent
+                          click: function click() {
+                            return _this.$emit(
+                              "update:color",
+                              Object(
+                                _util__WEBPACK_IMPORTED_MODULE_3__["fromHex"]
+                              )(color === "transparent" ? "#00000000" : color)
+                            );
+                          },
+                        },
+                      },
+                      [content]
+                    );
+                  },
+                  genSwatches: function genSwatches() {
+                    var _this = this;
+
+                    return this.swatches.map(function (swatch) {
+                      var colors = swatch.map(_this.genColor);
+                      return _this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-color-picker__swatch",
+                        },
+                        colors
+                      );
+                    });
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-color-picker__swatches",
+                      style: {
+                        maxWidth: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "convertToUnit"
+                          ]
+                        )(this.maxWidth),
+                        maxHeight: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "convertToUnit"
+                          ]
+                        )(this.maxHeight),
+                      },
+                    },
+                    [this.$createElement("div", this.genSwatches())]
+                  );
+                },
+              });
 
-        var targetGroup = getOpenGroup(handler.groups, start, end, timed);
+            /***/
+          },
 
-        if (targetGroup === -1) {
-          targetGroup = handler.groups.length;
-          handler.groups.push({
-            start: start,
-            end: end,
-            visuals: []
-          });
-        }
+        /***/ "./src/components/VColorPicker/index.ts":
+          /*!**********************************************!*\
+  !*** ./src/components/VColorPicker/index.ts ***!
+  \**********************************************/
+          /*! exports provided: VColorPicker, VColorPickerSwatches, VColorPickerCanvas, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VColorPicker__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VColorPicker */ "./src/components/VColorPicker/VColorPicker.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VColorPicker",
+              function () {
+                return _VColorPicker__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VColorPickerSwatches */ "./src/components/VColorPicker/VColorPickerSwatches.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VColorPickerSwatches",
+              function () {
+                return _VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_1__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VColorPickerCanvas */ "./src/components/VColorPicker/VColorPickerCanvas.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VColorPickerCanvas",
+              function () {
+                return _VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_2__[
+                  "default"
+                ];
+              }
+            );
 
-        var target = handler.groups[targetGroup];
-        target.visuals.push(visual);
-        target.start = Math.min(target.start, start);
-        target.end = Math.max(target.end, end);
-        visual.column = targetGroup;
-
-        if (handler.min === -1) {
-          handler.min = start;
-          handler.max = end;
-        } else {
-          handler.min = Math.min(handler.min, start);
-          handler.max = Math.max(handler.max, end);
-        }
-      });
-      setColumnCount(handler.groups);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VColorPicker__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      if (timed) {
-        handler.reset();
-      }
+            /***/
+          },
 
-      return visuals;
-    }
-  };
-  return handler;
-}
+        /***/ "./src/components/VColorPicker/util/index.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VColorPicker/util/index.ts ***!
+  \***************************************************/
+          /*! exports provided: fromHSVA, fromHSLA, fromRGBA, fromHexa, fromHex, parseColor, extractColor, hasAlpha */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fromHSVA",
+              function () {
+                return fromHSVA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fromHSLA",
+              function () {
+                return fromHSLA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fromRGBA",
+              function () {
+                return fromRGBA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fromHexa",
+              function () {
+                return fromHexa;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fromHex",
+              function () {
+                return fromHex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parseColor",
+              function () {
+                return parseColor;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "extractColor",
+              function () {
+                return extractColor;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "hasAlpha",
+              function () {
+                return hasAlpha;
+              }
+            );
+            /* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../../util/colorUtils */ "./src/util/colorUtils.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-/***/ }),
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ "./src/components/VCalendar/modes/index.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VCalendar/modes/index.ts ***!
-  \*************************************************/
-/*! exports provided: CalendarEventOverlapModes */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            var __rest =
+              (undefined && undefined.__rest) ||
+              function (s, e) {
+                var t = {};
+
+                for (var p in s) {
+                  if (
+                    Object.prototype.hasOwnProperty.call(s, p) &&
+                    e.indexOf(p) < 0
+                  )
+                    t[p] = s[p];
+                }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CalendarEventOverlapModes", function() { return CalendarEventOverlapModes; });
-/* harmony import */ var _stack__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stack */ "./src/components/VCalendar/modes/stack.ts");
-/* harmony import */ var _column__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./column */ "./src/components/VCalendar/modes/column.ts");
+                if (
+                  s != null &&
+                  typeof Object.getOwnPropertySymbols === "function"
+                )
+                  for (
+                    var i = 0, p = Object.getOwnPropertySymbols(s);
+                    i < p.length;
+                    i++
+                  ) {
+                    if (
+                      e.indexOf(p[i]) < 0 &&
+                      Object.prototype.propertyIsEnumerable.call(s, p[i])
+                    )
+                      t[p[i]] = s[p[i]];
+                  }
+                return t;
+              }; // Utilities
+
+            function fromHSVA(hsva) {
+              hsva = __assign({}, hsva);
+              var hexa = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHex"]
+              )(hsva);
+              var hsla = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHSLA"]
+              )(hsva);
+              var rgba = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoRGBA"]
+              )(hsva);
+              return {
+                alpha: hsva.a,
+                hex: hexa.substr(0, 7),
+                hexa: hexa,
+                hsla: hsla,
+                hsva: hsva,
+                hue: hsva.h,
+                rgba: rgba,
+              };
+            }
+            function fromHSLA(hsla) {
+              var hsva = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSLAtoHSVA"]
+              )(hsla);
+              var hexa = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHex"]
+              )(hsva);
+              var rgba = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoRGBA"]
+              )(hsva);
+              return {
+                alpha: hsva.a,
+                hex: hexa.substr(0, 7),
+                hexa: hexa,
+                hsla: hsla,
+                hsva: hsva,
+                hue: hsva.h,
+                rgba: rgba,
+              };
+            }
+            function fromRGBA(rgba) {
+              var hsva = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["RGBAtoHSVA"]
+              )(rgba);
+              var hexa = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["RGBAtoHex"]
+              )(rgba);
+              var hsla = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHSLA"]
+              )(hsva);
+              return {
+                alpha: hsva.a,
+                hex: hexa.substr(0, 7),
+                hexa: hexa,
+                hsla: hsla,
+                hsva: hsva,
+                hue: hsva.h,
+                rgba: rgba,
+              };
+            }
+            function fromHexa(hexa) {
+              var hsva = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HexToHSVA"]
+              )(hexa);
+              var hsla = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHSLA"]
+              )(hsva);
+              var rgba = Object(
+                _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoRGBA"]
+              )(hsva);
+              return {
+                alpha: hsva.a,
+                hex: hexa.substr(0, 7),
+                hexa: hexa,
+                hsla: hsla,
+                hsva: hsva,
+                hue: hsva.h,
+                rgba: rgba,
+              };
+            }
+            function fromHex(hex) {
+              return fromHexa(
+                Object(
+                  _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["parseHex"]
+                )(hex)
+              );
+            }
 
+            function has(obj, key) {
+              return key.every(function (k) {
+                return obj.hasOwnProperty(k);
+              });
+            }
 
-var CalendarEventOverlapModes = {
-  stack: _stack__WEBPACK_IMPORTED_MODULE_0__["stack"],
-  column: _column__WEBPACK_IMPORTED_MODULE_1__["column"]
-};
+            function parseColor(color, oldColor) {
+              if (!color)
+                return fromRGBA({
+                  r: 255,
+                  g: 0,
+                  b: 0,
+                  a: 1,
+                });
+
+              if (typeof color === "string") {
+                if (color === "transparent") return fromHexa("#00000000");
+                var hex = Object(
+                  _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["parseHex"]
+                )(color);
+                if (oldColor && hex === oldColor.hexa) return oldColor;
+                else return fromHexa(hex);
+              }
 
-/***/ }),
+              if (_typeof(color) === "object") {
+                if (color.hasOwnProperty("alpha")) return color;
+                var a = color.hasOwnProperty("a") ? parseFloat(color.a) : 1;
+
+                if (has(color, ["r", "g", "b"])) {
+                  if (oldColor && color === oldColor.rgba) return oldColor;
+                  else
+                    return fromRGBA(
+                      __assign(__assign({}, color), {
+                        a: a,
+                      })
+                    );
+                } else if (has(color, ["h", "s", "l"])) {
+                  if (oldColor && color === oldColor.hsla) return oldColor;
+                  else
+                    return fromHSLA(
+                      __assign(__assign({}, color), {
+                        a: a,
+                      })
+                    );
+                } else if (has(color, ["h", "s", "v"])) {
+                  if (oldColor && color === oldColor.hsva) return oldColor;
+                  else
+                    return fromHSVA(
+                      __assign(__assign({}, color), {
+                        a: a,
+                      })
+                    );
+                }
+              }
 
-/***/ "./src/components/VCalendar/modes/stack.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VCalendar/modes/stack.ts ***!
-  \*************************************************/
-/*! exports provided: stack */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stack", function() { return stack; });
-/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common */ "./src/components/VCalendar/modes/common.ts");
-/* harmony import */ var _util_timestamp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+              return fromRGBA({
+                r: 255,
+                g: 0,
+                b: 0,
+                a: 1,
+              });
+            }
 
-  return ar;
-};
+            function stripAlpha(color, stripAlpha) {
+              if (stripAlpha) {
+                var a = color.a,
+                  rest = __rest(color, ["a"]);
 
+                return rest;
+              }
 
+              return color;
+            }
 
-var FULL_WIDTH = 100;
-var DEFAULT_OFFSET = 5;
-var WIDTH_MULTIPLIER = 1.7;
-/**
- * Variation of column mode where events can be stacked. The priority of this
- * mode is to stack events together taking up the least amount of space while
- * trying to ensure the content of the event is always visible as well as its
- * start and end. A sibling column has intersecting event content and must be
- * placed beside each other. Non-sibling columns are offset by 5% from the
- * previous column. The width is scaled by 1.7 so the events overlap and
- * whitespace is reduced. If there is a hole in columns the event width is
- * scaled up so it intersects with the next column. The columns have equal
- * width in the space they are given. If the event doesn't have any to the
- * right of it that intersect with it's content it's right side is extended
- * to the right side.
- */
+            function extractColor(color, input) {
+              if (input == null) return color;
 
-var stack = function stack(events, firstWeekday, overlapThreshold) {
-  var handler = Object(_common__WEBPACK_IMPORTED_MODULE_0__["getOverlapGroupHandler"])(firstWeekday); // eslint-disable-next-line max-statements
+              if (typeof input === "string") {
+                return input.length === 7 ? color.hex : color.hexa;
+              }
 
-  return function (day, dayEvents, timed, reset) {
-    var e_1, _a, e_2, _b, e_3, _c;
+              if (_typeof(input) === "object") {
+                var shouldStrip =
+                  typeof input.a === "number" && input.a === 0
+                    ? !!input.a
+                    : !input.a;
+                if (has(input, ["r", "g", "b"]))
+                  return stripAlpha(color.rgba, shouldStrip);
+                else if (has(input, ["h", "s", "l"]))
+                  return stripAlpha(color.hsla, shouldStrip);
+                else if (has(input, ["h", "s", "v"]))
+                  return stripAlpha(color.hsva, shouldStrip);
+              }
 
-    if (!timed) {
-      return handler.getVisuals(day, dayEvents, timed, reset);
-    }
+              return color;
+            }
+            function hasAlpha(color) {
+              if (!color) return false;
 
-    var dayStart = Object(_util_timestamp__WEBPACK_IMPORTED_MODULE_1__["getTimestampIdentifier"])(day);
-    var visuals = Object(_common__WEBPACK_IMPORTED_MODULE_0__["getVisuals"])(dayEvents, dayStart);
-    var groups = getGroups(visuals, dayStart);
+              if (typeof color === "string") {
+                return color.length > 7;
+              }
 
-    try {
-      for (var groups_1 = __values(groups), groups_1_1 = groups_1.next(); !groups_1_1.done; groups_1_1 = groups_1.next()) {
-        var group = groups_1_1.value;
-        var nodes = [];
+              if (_typeof(color) === "object") {
+                return has(color, ["a"]) || has(color, ["alpha"]);
+              }
 
-        try {
-          for (var _d = (e_2 = void 0, __values(group.visuals)), _e = _d.next(); !_e.done; _e = _d.next()) {
-            var visual = _e.value;
-            var child = getNode(visual, dayStart);
-            var index = getNextIndex(child, nodes);
+              return false;
+            }
 
-            if (index === false) {
-              var parent = getParent(child, nodes);
+            /***/
+          },
 
-              if (parent) {
-                child.parent = parent;
-                child.sibling = Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold));
-                child.index = parent.index + 1;
-                parent.children.push(child);
-              }
-            } else {
-              var _f = __read(getOverlappingRange(child, nodes, index - 1, index - 1), 1),
-                  parent = _f[0];
+        /***/ "./src/components/VCombobox/VCombobox.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VCombobox/VCombobox.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAutocomplete_VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VAutocomplete/VAutocomplete.sass */ "./src/components/VAutocomplete/VAutocomplete.sass"
+              );
+            /* harmony import */ var _VAutocomplete_VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VAutocomplete_VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts"
+              );
+            /* harmony import */ var _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VAutocomplete/VAutocomplete */ "./src/components/VAutocomplete/VAutocomplete.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Utils
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                "default"
+              ].extend({
+                name: "v-combobox",
+                props: {
+                  delimiters: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  returnObject: {
+                    type: Boolean,
+                    default: true,
+                  },
+                },
+                data: function data() {
+                  return {
+                    editingIndex: -1,
+                  };
+                },
+                computed: {
+                  computedCounterValue: function computedCounterValue() {
+                    return this.multiple
+                      ? this.selectedItems.length
+                      : (this.internalSearch || "").toString().length;
+                  },
+                  hasSlot: function hasSlot() {
+                    return (
+                      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.hasSlot.call(this) || this.multiple
+                    );
+                  },
+                  isAnyValueAllowed: function isAnyValueAllowed() {
+                    return true;
+                  },
+                  menuCanShow: function menuCanShow() {
+                    if (!this.isFocused) return false;
+                    return (
+                      this.hasDisplayedItems ||
+                      (!!this.$slots["no-data"] && !this.hideNoData)
+                    );
+                  },
+                },
+                methods: {
+                  onInternalSearchChanged: function onInternalSearchChanged(
+                    val
+                  ) {
+                    if (val && this.multiple && this.delimiters.length) {
+                      var delimiter = this.delimiters.find(function (d) {
+                        return val.endsWith(d);
+                      });
+
+                      if (delimiter != null) {
+                        this.internalSearch = val.slice(
+                          0,
+                          val.length - delimiter.length
+                        );
+                        this.updateTags();
+                      }
+                    }
+
+                    this.updateMenuDimensions();
+                  },
+                  genInput: function genInput() {
+                    var input =
+                      _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genInput.call(this);
+                    delete input.data.attrs.name;
+                    input.data.on.paste = this.onPaste;
+                    return input;
+                  },
+                  genChipSelection: function genChipSelection(item, index) {
+                    var _this = this;
+
+                    var chip = _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.genChipSelection.call(this, item, index); // Allow user to update an existing value
+
+                    if (this.multiple) {
+                      chip.componentOptions.listeners = __assign(
+                        __assign({}, chip.componentOptions.listeners),
+                        {
+                          dblclick: function dblclick() {
+                            _this.editingIndex = index;
+                            _this.internalSearch = _this.getText(item);
+                            _this.selectedIndex = -1;
+                          },
+                        }
+                      );
+                    }
+
+                    return chip;
+                  },
+                  onChipInput: function onChipInput(item) {
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.onChipInput.call(this, item);
+                    this.editingIndex = -1;
+                  },
+                  // Requires a manual definition
+                  // to overwrite removal in v-autocomplete
+                  onEnterDown: function onEnterDown(e) {
+                    e.preventDefault(); // If has menu index, let v-select-list handle
+
+                    if (this.getMenuIndex() > -1) return;
+                    this.$nextTick(this.updateSelf);
+                  },
+                  onFilteredItemsChanged: function onFilteredItemsChanged(
+                    val,
+                    oldVal
+                  ) {
+                    if (!this.autoSelectFirst) return;
+                    _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                      "default"
+                    ].options.methods.onFilteredItemsChanged.call(
+                      this,
+                      val,
+                      oldVal
+                    );
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    var keyCode = e.keyCode;
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.onKeyDown.call(this, e); // If user is at selection index of 0
+                    // create a new tag
+
+                    if (
+                      this.multiple &&
+                      keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"]
+                          .left &&
+                      this.$refs.input.selectionStart === 0
+                    ) {
+                      this.updateSelf();
+                    } else if (
+                      keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"]
+                        .enter
+                    ) {
+                      this.onEnterDown(e);
+                    } // The ordering is important here
+                    // allows new value to be updated
+                    // and then moves the index to the
+                    // proper location
+
+                    this.changeSelectedIndex(keyCode);
+                  },
+                  onTabDown: function onTabDown(e) {
+                    // When adding tags, if searching and
+                    // there is not a filtered options,
+                    // add the value to the tags list
+                    if (
+                      this.multiple &&
+                      this.internalSearch &&
+                      this.getMenuIndex() === -1
+                    ) {
+                      e.preventDefault();
+                      e.stopPropagation();
+                      return this.updateTags();
+                    }
+
+                    _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                      "default"
+                    ].options.methods.onTabDown.call(this, e);
+                  },
+                  selectItem: function selectItem(item) {
+                    // Currently only supports items:<string[]>
+                    if (this.editingIndex > -1) {
+                      this.updateEditing();
+                    } else {
+                      _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.selectItem.call(this, item);
+                    }
+                  },
+                  setSelectedItems: function setSelectedItems() {
+                    if (
+                      this.internalValue == null ||
+                      this.internalValue === ""
+                    ) {
+                      this.selectedItems = [];
+                    } else {
+                      this.selectedItems = this.multiple
+                        ? this.internalValue
+                        : [this.internalValue];
+                    }
+                  },
+                  setValue: function setValue(value) {
+                    _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.setValue.call(
+                      this,
+                      value !== null && value !== void 0
+                        ? value
+                        : this.internalSearch
+                    );
+                  },
+                  updateEditing: function updateEditing() {
+                    var value = this.internalValue.slice();
+                    value[this.editingIndex] = this.internalSearch;
+                    this.setValue(value);
+                    this.editingIndex = -1;
+                  },
+                  updateCombobox: function updateCombobox() {
+                    // If search is not dirty, do nothing
+                    if (!this.searchIsDirty) return; // The internal search is not matching
+                    // the internal value, update the input
+
+                    if (
+                      this.internalSearch !== this.getText(this.internalValue)
+                    )
+                      this.setValue(); // Reset search if using slot to avoid a double input
+
+                    var isUsingSlot =
+                      Boolean(this.$scopedSlots.selection) || this.hasChips;
+                    if (isUsingSlot) this.internalSearch = undefined;
+                  },
+                  updateSelf: function updateSelf() {
+                    this.multiple ? this.updateTags() : this.updateCombobox();
+                  },
+                  updateTags: function updateTags() {
+                    var menuIndex = this.getMenuIndex(); // If the user is not searching
+                    // and no menu item is selected
+                    // do nothing
+
+                    if (menuIndex < 0 && !this.searchIsDirty) return;
+
+                    if (this.editingIndex > -1) {
+                      return this.updateEditing();
+                    }
+
+                    var index = this.selectedItems.indexOf(this.internalSearch); // If it already exists, do nothing
+                    // this might need to change to bring
+                    // the duplicated item to the last entered
+
+                    if (index > -1) {
+                      var internalValue = this.internalValue.slice();
+                      internalValue.splice(index, 1);
+                      this.setValue(internalValue);
+                    } // If menu index is greater than 1
+                    // the selection is handled elsewhere
+                    // TODO: find out where
+
+                    if (menuIndex > -1) return (this.internalSearch = null);
+                    this.selectItem(this.internalSearch);
+                    this.internalSearch = null;
+                  },
+                  onPaste: function onPaste(event) {
+                    var _a;
+
+                    if (!this.multiple || this.searchIsDirty) return;
+                    var pastedItemText =
+                      (_a = event.clipboardData) === null || _a === void 0
+                        ? void 0
+                        : _a.getData(
+                            "text/vnd.vuetify.autocomplete.item+plain"
+                          );
+
+                    if (
+                      pastedItemText &&
+                      this.findExistingIndex(pastedItemText) === -1
+                    ) {
+                      event.preventDefault();
+                      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.selectItem.call(this, pastedItemText);
+                    }
+                  },
+                },
+              });
 
-              var children = getOverlappingRange(child, nodes, index + 1, index + nodes.length, true);
-              child.children = children;
-              child.index = index;
+            /***/
+          },
 
-              if (parent) {
-                child.parent = parent;
-                child.sibling = Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(child.start, child.end, parent.start, addTime(parent.start, overlapThreshold));
-                parent.children.push(child);
+        /***/ "./src/components/VCombobox/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VCombobox/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VCombobox, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCombobox__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCombobox */ "./src/components/VCombobox/VCombobox.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCombobox",
+              function () {
+                return _VCombobox__WEBPACK_IMPORTED_MODULE_0__["default"];
               }
+            );
 
-              try {
-                for (var children_1 = (e_3 = void 0, __values(children)), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) {
-                  var grand = children_1_1.value;
-
-                  if (grand.parent === parent) {
-                    grand.parent = child;
-                  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VCombobox__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-                  var grandNext = grand.index - child.index <= 1;
+            /***/
+          },
 
-                  if (grandNext && child.sibling && Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(child.start, addTime(child.start, overlapThreshold), grand.start, grand.end)) {
-                    grand.sibling = true;
-                  }
-                }
-              } catch (e_3_1) {
-                e_3 = {
-                  error: e_3_1
-                };
-              } finally {
-                try {
-                  if (children_1_1 && !children_1_1.done && (_c = children_1.return)) _c.call(children_1);
-                } finally {
-                  if (e_3) throw e_3.error;
-                }
-              }
-            }
+        /***/ "./src/components/VContent/VContent.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VContent/VContent.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VMain_VMain__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VMain/VMain */ "./src/components/VMain/VMain.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            // Extensions
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VMain_VMain__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
+                name: "v-main",
+                created: function created() {
+                  Object(
+                    _util_console__WEBPACK_IMPORTED_MODULE_1__["deprecate"]
+                  )("v-content", "v-main", this);
+                },
+                render: function render(h) {
+                  // Add the legacy class names
+                  var node = _VMain_VMain__WEBPACK_IMPORTED_MODULE_0__[
+                    "default"
+                  ].options.render.call(this, h);
+                  node.data.staticClass += " v-content";
+                  node.children[0].data.staticClass += " v-content__wrap";
+                  return h(node.tag, node.data, node.children);
+                },
+              });
 
-            nodes.push(child);
-          }
-        } catch (e_2_1) {
-          e_2 = {
-            error: e_2_1
-          };
-        } finally {
-          try {
-            if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
-          } finally {
-            if (e_2) throw e_2.error;
-          }
-        }
+            /***/
+          },
 
-        calculateBounds(nodes, overlapThreshold);
-      }
-    } catch (e_1_1) {
-      e_1 = {
-        error: e_1_1
-      };
-    } finally {
-      try {
-        if (groups_1_1 && !groups_1_1.done && (_a = groups_1.return)) _a.call(groups_1);
-      } finally {
-        if (e_1) throw e_1.error;
-      }
-    }
-
-    visuals.sort(function (a, b) {
-      return a.left - b.left || a.event.startTimestampIdentifier - b.event.startTimestampIdentifier;
-    });
-    return visuals;
-  };
-};
-
-function calculateBounds(nodes, overlapThreshold) {
-  var e_4, _a;
-
-  try {
-    for (var nodes_1 = __values(nodes), nodes_1_1 = nodes_1.next(); !nodes_1_1.done; nodes_1_1 = nodes_1.next()) {
-      var node = nodes_1_1.value;
-      var visual = node.visual,
-          parent = node.parent;
-      var columns = getMaxChildIndex(node) + 1;
-      var spaceLeft = parent ? parent.visual.left : 0;
-      var spaceWidth = FULL_WIDTH - spaceLeft;
-      var offset = Math.min(DEFAULT_OFFSET, FULL_WIDTH / columns);
-      var columnWidthMultiplier = getColumnWidthMultiplier(node, nodes);
-      var columnOffset = spaceWidth / (columns - node.index + 1);
-      var columnWidth = spaceWidth / (columns - node.index + (node.sibling ? 1 : 0)) * columnWidthMultiplier;
-
-      if (parent) {
-        visual.left = node.sibling ? spaceLeft + columnOffset : spaceLeft + offset;
-      }
+        /***/ "./src/components/VContent/index.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VContent/index.ts ***!
+  \******************************************/
+          /*! exports provided: VContent, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VContent__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VContent */ "./src/components/VContent/VContent.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VContent",
+              function () {
+                return _VContent__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      visual.width = hasFullWidth(node, nodes, overlapThreshold) ? FULL_WIDTH - visual.left : Math.min(FULL_WIDTH - visual.left, columnWidth * WIDTH_MULTIPLIER);
-    }
-  } catch (e_4_1) {
-    e_4 = {
-      error: e_4_1
-    };
-  } finally {
-    try {
-      if (nodes_1_1 && !nodes_1_1.done && (_a = nodes_1.return)) _a.call(nodes_1);
-    } finally {
-      if (e_4) throw e_4.error;
-    }
-  }
-}
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VContent__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-function getColumnWidthMultiplier(node, nodes) {
-  if (!node.children.length) {
-    return 1;
-  }
+            /***/
+          },
 
-  var maxColumn = node.index + nodes.length;
-  var minColumn = node.children.reduce(function (min, c) {
-    return Math.min(min, c.index);
-  }, maxColumn);
-  return minColumn - node.index;
-}
+        /***/ "./src/components/VCounter/VCounter.sass":
+          /*!***********************************************!*\
+  !*** ./src/components/VCounter/VCounter.sass ***!
+  \***********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-function getOverlappingIndices(node, nodes) {
-  var e_5, _a;
+        /***/ "./src/components/VCounter/VCounter.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VCounter/VCounter.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCounter_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCounter.sass */ "./src/components/VCounter/VCounter.sass"
+              );
+            /* harmony import */ var _VCounter_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCounter_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]
+              ).extend({
+                name: "v-counter",
+                functional: true,
+                props: {
+                  value: {
+                    type: [Number, String],
+                    default: "",
+                  },
+                  max: [Number, String],
+                },
+                render: function render(h, ctx) {
+                  var props = ctx.props;
+                  var max = parseInt(props.max, 10);
+                  var value = parseInt(props.value, 10);
+                  var content = max ? value + " / " + max : String(props.value);
+                  var isGreater = max && value > max;
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-counter",
+                      class: __assign(
+                        {
+                          "error--text": isGreater,
+                        },
+                        Object(
+                          _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__[
+                            "functionalThemeClasses"
+                          ]
+                        )(ctx)
+                      ),
+                    },
+                    content
+                  );
+                },
+              });
 
-  var indices = [];
+            /***/
+          },
 
-  try {
-    for (var nodes_2 = __values(nodes), nodes_2_1 = nodes_2.next(); !nodes_2_1.done; nodes_2_1 = nodes_2.next()) {
-      var other = nodes_2_1.value;
+        /***/ "./src/components/VCounter/index.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VCounter/index.ts ***!
+  \******************************************/
+          /*! exports provided: VCounter, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCounter__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VCounter */ "./src/components/VCounter/VCounter.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCounter",
+              function () {
+                return _VCounter__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      if (Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(node.start, node.end, other.start, other.end)) {
-        indices.push(other.index);
-      }
-    }
-  } catch (e_5_1) {
-    e_5 = {
-      error: e_5_1
-    };
-  } finally {
-    try {
-      if (nodes_2_1 && !nodes_2_1.done && (_a = nodes_2.return)) _a.call(nodes_2);
-    } finally {
-      if (e_5) throw e_5.error;
-    }
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VCounter__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return indices;
-}
+            /***/
+          },
 
-function getNextIndex(node, nodes) {
-  var indices = getOverlappingIndices(node, nodes);
-  indices.sort();
+        /***/ "./src/components/VData/VData.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VData/VData.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_1__
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  for (var i = 0; i < indices.length; i++) {
-    if (i < indices[i]) {
-      return i;
-    }
-  }
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-  return false;
-}
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-function getOverlappingRange(node, nodes, indexMin, indexMax, returnFirstColumn) {
-  var e_6, _a;
+                return ar;
+              };
 
-  if (returnFirstColumn === void 0) {
-    returnFirstColumn = false;
-  }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-  var overlapping = [];
+                return ar;
+              }; // Helpers
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
+                name: "v-data",
+                inheritAttrs: false,
+                props: {
+                  items: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  options: {
+                    type: Object,
+                    default: function _default() {
+                      return {};
+                    },
+                  },
+                  sortBy: {
+                    type: [String, Array],
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  sortDesc: {
+                    type: [Boolean, Array],
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  customSort: {
+                    type: Function,
+                    default:
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["sortItems"],
+                  },
+                  mustSort: Boolean,
+                  multiSort: Boolean,
+                  page: {
+                    type: Number,
+                    default: 1,
+                  },
+                  itemsPerPage: {
+                    type: Number,
+                    default: 10,
+                  },
+                  groupBy: {
+                    type: [String, Array],
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  groupDesc: {
+                    type: [Boolean, Array],
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  customGroup: {
+                    type: Function,
+                    default:
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["groupItems"],
+                  },
+                  locale: {
+                    type: String,
+                    default: "en-US",
+                  },
+                  disableSort: Boolean,
+                  disablePagination: Boolean,
+                  disableFiltering: Boolean,
+                  search: String,
+                  customFilter: {
+                    type: Function,
+                    default:
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["searchItems"],
+                  },
+                  serverItemsLength: {
+                    type: Number,
+                    default: -1,
+                  },
+                },
+                data: function data() {
+                  var _a, _b;
+
+                  var internalOptions = {
+                    page: this.page,
+                    itemsPerPage: this.itemsPerPage,
+                    sortBy: Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"]
+                    )(this.sortBy),
+                    sortDesc: Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"]
+                    )(this.sortDesc),
+                    groupBy: Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"]
+                    )(this.groupBy),
+                    groupDesc: Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"]
+                    )(this.groupDesc),
+                    mustSort: this.mustSort,
+                    multiSort: this.multiSort,
+                  };
+
+                  if (this.options) {
+                    internalOptions = Object.assign(
+                      internalOptions,
+                      this.options
+                    );
+                  }
 
-  try {
-    for (var nodes_3 = __values(nodes), nodes_3_1 = nodes_3.next(); !nodes_3_1.done; nodes_3_1 = nodes_3.next()) {
-      var other = nodes_3_1.value;
+                  var sortBy = internalOptions.sortBy,
+                    sortDesc = internalOptions.sortDesc,
+                    groupBy = internalOptions.groupBy,
+                    groupDesc = internalOptions.groupDesc;
+                  var sortDiff = sortBy.length - sortDesc.length;
+                  var groupDiff = groupBy.length - groupDesc.length;
+
+                  if (sortDiff > 0) {
+                    (_a = internalOptions.sortDesc).push.apply(
+                      _a,
+                      __spread(
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                            "fillArray"
+                          ]
+                        )(sortDiff, false)
+                      )
+                    );
+                  }
 
-      if (other.index >= indexMin && other.index <= indexMax && Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(node.start, node.end, other.start, other.end)) {
-        overlapping.push(other);
-      }
-    }
-  } catch (e_6_1) {
-    e_6 = {
-      error: e_6_1
-    };
-  } finally {
-    try {
-      if (nodes_3_1 && !nodes_3_1.done && (_a = nodes_3.return)) _a.call(nodes_3);
-    } finally {
-      if (e_6) throw e_6.error;
-    }
-  }
+                  if (groupDiff > 0) {
+                    (_b = internalOptions.groupDesc).push.apply(
+                      _b,
+                      __spread(
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                            "fillArray"
+                          ]
+                        )(groupDiff, false)
+                      )
+                    );
+                  }
 
-  if (returnFirstColumn && overlapping.length > 0) {
-    var first_1 = overlapping.reduce(function (min, n) {
-      return Math.min(min, n.index);
-    }, overlapping[0].index);
-    return overlapping.filter(function (n) {
-      return n.index === first_1;
-    });
-  }
+                  return {
+                    internalOptions: internalOptions,
+                  };
+                },
+                computed: {
+                  itemsLength: function itemsLength() {
+                    return this.serverItemsLength >= 0
+                      ? this.serverItemsLength
+                      : this.filteredItems.length;
+                  },
+                  pageCount: function pageCount() {
+                    return this.internalOptions.itemsPerPage <= 0
+                      ? 1
+                      : Math.ceil(
+                          this.itemsLength / this.internalOptions.itemsPerPage
+                        );
+                  },
+                  pageStart: function pageStart() {
+                    if (
+                      this.internalOptions.itemsPerPage === -1 ||
+                      !this.items.length
+                    )
+                      return 0;
+                    return (
+                      (this.internalOptions.page - 1) *
+                      this.internalOptions.itemsPerPage
+                    );
+                  },
+                  pageStop: function pageStop() {
+                    if (this.internalOptions.itemsPerPage === -1)
+                      return this.itemsLength;
+                    if (!this.items.length) return 0;
+                    return Math.min(
+                      this.itemsLength,
+                      this.internalOptions.page *
+                        this.internalOptions.itemsPerPage
+                    );
+                  },
+                  isGrouped: function isGrouped() {
+                    return !!this.internalOptions.groupBy.length;
+                  },
+                  pagination: function pagination() {
+                    return {
+                      page: this.internalOptions.page,
+                      itemsPerPage: this.internalOptions.itemsPerPage,
+                      pageStart: this.pageStart,
+                      pageStop: this.pageStop,
+                      pageCount: this.pageCount,
+                      itemsLength: this.itemsLength,
+                    };
+                  },
+                  filteredItems: function filteredItems() {
+                    var items = this.items.slice();
+
+                    if (!this.disableFiltering && this.serverItemsLength <= 0) {
+                      items = this.customFilter(items, this.search);
+                    }
+
+                    return items;
+                  },
+                  computedItems: function computedItems() {
+                    var items = this.filteredItems.slice();
+
+                    if (!this.disableSort && this.serverItemsLength <= 0) {
+                      items = this.sortItems(items);
+                    }
+
+                    if (
+                      !this.disablePagination &&
+                      this.serverItemsLength <= 0
+                    ) {
+                      items = this.paginateItems(items);
+                    }
+
+                    return items;
+                  },
+                  groupedItems: function groupedItems() {
+                    return this.isGrouped
+                      ? this.groupItems(this.computedItems)
+                      : null;
+                  },
+                  scopedProps: function scopedProps() {
+                    return {
+                      sort: this.sort,
+                      sortArray: this.sortArray,
+                      group: this.group,
+                      items: this.computedItems,
+                      options: this.internalOptions,
+                      updateOptions: this.updateOptions,
+                      pagination: this.pagination,
+                      groupedItems: this.groupedItems,
+                      originalItemsLength: this.items.length,
+                    };
+                  },
+                  computedOptions: function computedOptions() {
+                    return __assign({}, this.options);
+                  },
+                },
+                watch: {
+                  computedOptions: {
+                    handler: function handler(options, old) {
+                      if (
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                            "deepEqual"
+                          ]
+                        )(options, old)
+                      )
+                        return;
+                      this.updateOptions(options);
+                    },
+                    deep: true,
+                    immediate: true,
+                  },
+                  internalOptions: {
+                    handler: function handler(options, old) {
+                      if (
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                            "deepEqual"
+                          ]
+                        )(options, old)
+                      )
+                        return;
+                      this.$emit("update:options", options);
+                    },
+                    deep: true,
+                    immediate: true,
+                  },
+                  page: function page(_page) {
+                    this.updateOptions({
+                      page: _page,
+                    });
+                  },
+                  "internalOptions.page": function internalOptionsPage(page) {
+                    this.$emit("update:page", page);
+                  },
+                  itemsPerPage: function itemsPerPage(_itemsPerPage) {
+                    this.updateOptions({
+                      itemsPerPage: _itemsPerPage,
+                    });
+                  },
+                  "internalOptions.itemsPerPage":
+                    function internalOptionsItemsPerPage(itemsPerPage) {
+                      this.$emit("update:items-per-page", itemsPerPage);
+                    },
+                  sortBy: function sortBy(_sortBy) {
+                    this.updateOptions({
+                      sortBy: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                          "wrapInArray"
+                        ]
+                      )(_sortBy),
+                    });
+                  },
+                  "internalOptions.sortBy": function internalOptionsSortBy(
+                    sortBy,
+                    old
+                  ) {
+                    !Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"]
+                    )(sortBy, old) &&
+                      this.$emit(
+                        "update:sort-by",
+                        Array.isArray(this.sortBy) ? sortBy : sortBy[0]
+                      );
+                  },
+                  sortDesc: function sortDesc(_sortDesc) {
+                    this.updateOptions({
+                      sortDesc: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                          "wrapInArray"
+                        ]
+                      )(_sortDesc),
+                    });
+                  },
+                  "internalOptions.sortDesc": function internalOptionsSortDesc(
+                    sortDesc,
+                    old
+                  ) {
+                    !Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"]
+                    )(sortDesc, old) &&
+                      this.$emit(
+                        "update:sort-desc",
+                        Array.isArray(this.sortDesc) ? sortDesc : sortDesc[0]
+                      );
+                  },
+                  groupBy: function groupBy(_groupBy) {
+                    this.updateOptions({
+                      groupBy: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                          "wrapInArray"
+                        ]
+                      )(_groupBy),
+                    });
+                  },
+                  "internalOptions.groupBy": function internalOptionsGroupBy(
+                    groupBy,
+                    old
+                  ) {
+                    !Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"]
+                    )(groupBy, old) &&
+                      this.$emit(
+                        "update:group-by",
+                        Array.isArray(this.groupBy) ? groupBy : groupBy[0]
+                      );
+                  },
+                  groupDesc: function groupDesc(_groupDesc) {
+                    this.updateOptions({
+                      groupDesc: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                          "wrapInArray"
+                        ]
+                      )(_groupDesc),
+                    });
+                  },
+                  "internalOptions.groupDesc":
+                    function internalOptionsGroupDesc(groupDesc, old) {
+                      !Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"]
+                      )(groupDesc, old) &&
+                        this.$emit(
+                          "update:group-desc",
+                          Array.isArray(this.groupDesc)
+                            ? groupDesc
+                            : groupDesc[0]
+                        );
+                    },
+                  multiSort: function multiSort(_multiSort) {
+                    this.updateOptions({
+                      multiSort: _multiSort,
+                    });
+                  },
+                  "internalOptions.multiSort":
+                    function internalOptionsMultiSort(multiSort) {
+                      this.$emit("update:multi-sort", multiSort);
+                    },
+                  mustSort: function mustSort(_mustSort) {
+                    this.updateOptions({
+                      mustSort: _mustSort,
+                    });
+                  },
+                  "internalOptions.mustSort": function internalOptionsMustSort(
+                    mustSort
+                  ) {
+                    this.$emit("update:must-sort", mustSort);
+                  },
+                  pageCount: {
+                    handler: function handler(pageCount) {
+                      this.$emit("page-count", pageCount);
+                    },
+                    immediate: true,
+                  },
+                  computedItems: {
+                    handler: function handler(computedItems) {
+                      this.$emit("current-items", computedItems);
+                    },
+                    immediate: true,
+                  },
+                  pagination: {
+                    handler: function handler(pagination, old) {
+                      if (
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                            "deepEqual"
+                          ]
+                        )(pagination, old)
+                      )
+                        return;
+                      this.$emit("pagination", this.pagination);
+                    },
+                    immediate: true,
+                  },
+                },
+                methods: {
+                  toggle: function toggle(
+                    key,
+                    oldBy,
+                    oldDesc,
+                    page,
+                    mustSort,
+                    multiSort
+                  ) {
+                    var by = oldBy.slice();
+                    var desc = oldDesc.slice();
+                    var byIndex = by.findIndex(function (k) {
+                      return k === key;
+                    });
+
+                    if (byIndex < 0) {
+                      if (!multiSort) {
+                        by = [];
+                        desc = [];
+                      }
+
+                      by.push(key);
+                      desc.push(false);
+                    } else if (byIndex >= 0 && !desc[byIndex]) {
+                      desc[byIndex] = true;
+                    } else if (!mustSort) {
+                      by.splice(byIndex, 1);
+                      desc.splice(byIndex, 1);
+                    } else {
+                      desc[byIndex] = false;
+                    } // Reset page to 1 if sortBy or sortDesc have changed
+
+                    if (
+                      !Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"]
+                      )(by, oldBy) ||
+                      !Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"]
+                      )(desc, oldDesc)
+                    ) {
+                      page = 1;
+                    }
+
+                    return {
+                      by: by,
+                      desc: desc,
+                      page: page,
+                    };
+                  },
+                  group: function group(key) {
+                    var _a = this.toggle(
+                        key,
+                        this.internalOptions.groupBy,
+                        this.internalOptions.groupDesc,
+                        this.internalOptions.page,
+                        true,
+                        false
+                      ),
+                      groupBy = _a.by,
+                      groupDesc = _a.desc,
+                      page = _a.page;
+
+                    this.updateOptions({
+                      groupBy: groupBy,
+                      groupDesc: groupDesc,
+                      page: page,
+                    });
+                  },
+                  sort: function sort(key) {
+                    if (Array.isArray(key)) return this.sortArray(key);
+
+                    var _a = this.toggle(
+                        key,
+                        this.internalOptions.sortBy,
+                        this.internalOptions.sortDesc,
+                        this.internalOptions.page,
+                        this.internalOptions.mustSort,
+                        this.internalOptions.multiSort
+                      ),
+                      sortBy = _a.by,
+                      sortDesc = _a.desc,
+                      page = _a.page;
+
+                    this.updateOptions({
+                      sortBy: sortBy,
+                      sortDesc: sortDesc,
+                      page: page,
+                    });
+                  },
+                  sortArray: function sortArray(sortBy) {
+                    var _this = this;
+
+                    var sortDesc = sortBy.map(function (s) {
+                      var i = _this.internalOptions.sortBy.findIndex(function (
+                        k
+                      ) {
+                        return k === s;
+                      });
+
+                      return i > -1 ? _this.internalOptions.sortDesc[i] : false;
+                    });
+                    this.updateOptions({
+                      sortBy: sortBy,
+                      sortDesc: sortDesc,
+                    });
+                  },
+                  updateOptions: function updateOptions(options) {
+                    this.internalOptions = __assign(
+                      __assign(__assign({}, this.internalOptions), options),
+                      {
+                        page:
+                          this.serverItemsLength < 0
+                            ? Math.max(
+                                1,
+                                Math.min(
+                                  options.page || this.internalOptions.page,
+                                  this.pageCount
+                                )
+                              )
+                            : options.page || this.internalOptions.page,
+                      }
+                    );
+                  },
+                  sortItems: function sortItems(items) {
+                    var sortBy = this.internalOptions.sortBy;
+                    var sortDesc = this.internalOptions.sortDesc;
+
+                    if (this.internalOptions.groupBy.length) {
+                      sortBy = __spread(this.internalOptions.groupBy, sortBy);
+                      sortDesc = __spread(
+                        this.internalOptions.groupDesc,
+                        sortDesc
+                      );
+                    }
+
+                    return this.customSort(
+                      items,
+                      sortBy,
+                      sortDesc,
+                      this.locale
+                    );
+                  },
+                  groupItems: function groupItems(items) {
+                    return this.customGroup(
+                      items,
+                      this.internalOptions.groupBy,
+                      this.internalOptions.groupDesc
+                    );
+                  },
+                  paginateItems: function paginateItems(items) {
+                    // Make sure we don't try to display non-existant page if items suddenly change
+                    // TODO: Could possibly move this to pageStart/pageStop?
+                    if (
+                      this.serverItemsLength === -1 &&
+                      items.length <= this.pageStart
+                    ) {
+                      this.internalOptions.page = Math.max(
+                        1,
+                        this.internalOptions.page - 1
+                      );
+                    }
+
+                    return items.slice(this.pageStart, this.pageStop);
+                  },
+                },
+                render: function render() {
+                  return (
+                    this.$scopedSlots.default &&
+                    this.$scopedSlots.default(this.scopedProps)
+                  );
+                },
+              });
 
-  return overlapping;
-}
+            /***/
+          },
 
-function getParent(node, nodes) {
-  var e_7, _a;
+        /***/ "./src/components/VData/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VData/index.ts ***!
+  \***************************************/
+          /*! exports provided: VData, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VData */ "./src/components/VData/VData.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VData",
+              function () {
+                return _VData__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-  var parent = null;
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VData__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  try {
-    for (var nodes_4 = __values(nodes), nodes_4_1 = nodes_4.next(); !nodes_4_1.done; nodes_4_1 = nodes_4.next()) {
-      var other = nodes_4_1.value;
+            /***/
+          },
 
-      if (Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(node.start, node.end, other.start, other.end) && (parent === null || other.index > parent.index)) {
-        parent = other;
-      }
-    }
-  } catch (e_7_1) {
-    e_7 = {
-      error: e_7_1
-    };
-  } finally {
-    try {
-      if (nodes_4_1 && !nodes_4_1.done && (_a = nodes_4.return)) _a.call(nodes_4);
-    } finally {
-      if (e_7) throw e_7.error;
-    }
-  }
+        /***/ "./src/components/VDataIterator/VDataFooter.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VDataIterator/VDataFooter.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  return parent;
-}
+        /***/ "./src/components/VDataIterator/VDataFooter.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VDataIterator/VDataFooter.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDataFooter_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDataFooter.sass */ "./src/components/VDataIterator/VDataFooter.sass"
+              );
+            /* harmony import */ var _VDataFooter_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDataFooter_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_4__
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-function hasFullWidth(node, nodes, overlapThreshold) {
-  var e_8, _a;
+            // Components
+
+            // Types
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_4___default.a.extend({
+                name: "v-data-footer",
+                props: {
+                  options: {
+                    type: Object,
+                    required: true,
+                  },
+                  pagination: {
+                    type: Object,
+                    required: true,
+                  },
+                  itemsPerPageOptions: {
+                    type: Array,
+                    default: function _default() {
+                      return [5, 10, 15, -1];
+                    },
+                  },
+                  prevIcon: {
+                    type: String,
+                    default: "$prev",
+                  },
+                  nextIcon: {
+                    type: String,
+                    default: "$next",
+                  },
+                  firstIcon: {
+                    type: String,
+                    default: "$first",
+                  },
+                  lastIcon: {
+                    type: String,
+                    default: "$last",
+                  },
+                  itemsPerPageText: {
+                    type: String,
+                    default: "$vuetify.dataFooter.itemsPerPageText",
+                  },
+                  itemsPerPageAllText: {
+                    type: String,
+                    default: "$vuetify.dataFooter.itemsPerPageAll",
+                  },
+                  showFirstLastPage: Boolean,
+                  showCurrentPage: Boolean,
+                  disablePagination: Boolean,
+                  disableItemsPerPage: Boolean,
+                  pageText: {
+                    type: String,
+                    default: "$vuetify.dataFooter.pageText",
+                  },
+                },
+                computed: {
+                  disableNextPageIcon: function disableNextPageIcon() {
+                    return (
+                      this.options.itemsPerPage <= 0 ||
+                      this.options.page * this.options.itemsPerPage >=
+                        this.pagination.itemsLength ||
+                      this.pagination.pageStop < 0
+                    );
+                  },
+                  computedDataItemsPerPageOptions:
+                    function computedDataItemsPerPageOptions() {
+                      var _this = this;
+
+                      return this.itemsPerPageOptions.map(function (option) {
+                        if (_typeof(option) === "object") return option;
+                        else return _this.genDataItemsPerPageOption(option);
+                      });
+                    },
+                },
+                methods: {
+                  updateOptions: function updateOptions(obj) {
+                    this.$emit(
+                      "update:options",
+                      Object.assign({}, this.options, obj)
+                    );
+                  },
+                  onFirstPage: function onFirstPage() {
+                    this.updateOptions({
+                      page: 1,
+                    });
+                  },
+                  onPreviousPage: function onPreviousPage() {
+                    this.updateOptions({
+                      page: this.options.page - 1,
+                    });
+                  },
+                  onNextPage: function onNextPage() {
+                    this.updateOptions({
+                      page: this.options.page + 1,
+                    });
+                  },
+                  onLastPage: function onLastPage() {
+                    this.updateOptions({
+                      page: this.pagination.pageCount,
+                    });
+                  },
+                  onChangeItemsPerPage: function onChangeItemsPerPage(
+                    itemsPerPage
+                  ) {
+                    this.updateOptions({
+                      itemsPerPage: itemsPerPage,
+                      page: 1,
+                    });
+                  },
+                  genDataItemsPerPageOption: function genDataItemsPerPageOption(
+                    option
+                  ) {
+                    return {
+                      text:
+                        option === -1
+                          ? this.$vuetify.lang.t(this.itemsPerPageAllText)
+                          : String(option),
+                      value: option,
+                    };
+                  },
+                  genItemsPerPageSelect: function genItemsPerPageSelect() {
+                    var value = this.options.itemsPerPage;
+                    var computedIPPO = this.computedDataItemsPerPageOptions;
+                    if (computedIPPO.length <= 1) return null;
+                    if (
+                      !computedIPPO.find(function (ippo) {
+                        return ippo.value === value;
+                      })
+                    )
+                      value = computedIPPO[0];
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-data-footer__select",
+                      },
+                      [
+                        this.$vuetify.lang.t(this.itemsPerPageText),
+                        this.$createElement(
+                          _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                            "default"
+                          ],
+                          {
+                            attrs: {
+                              "aria-label": this.$vuetify.lang.t(
+                                this.itemsPerPageText
+                              ),
+                            },
+                            props: {
+                              disabled: this.disableItemsPerPage,
+                              items: computedIPPO,
+                              value: value,
+                              hideDetails: true,
+                              auto: true,
+                              minWidth: "75px",
+                            },
+                            on: {
+                              input: this.onChangeItemsPerPage,
+                            },
+                          }
+                        ),
+                      ]
+                    );
+                  },
+                  genPaginationInfo: function genPaginationInfo() {
+                    var children = ["–"];
+                    var itemsLength = this.pagination.itemsLength;
+                    var pageStart = this.pagination.pageStart;
+                    var pageStop = this.pagination.pageStop;
+
+                    if (
+                      this.pagination.itemsLength &&
+                      this.pagination.itemsPerPage
+                    ) {
+                      pageStart = this.pagination.pageStart + 1;
+                      pageStop =
+                        itemsLength < this.pagination.pageStop ||
+                        this.pagination.pageStop < 0
+                          ? itemsLength
+                          : this.pagination.pageStop;
+                      children = this.$scopedSlots["page-text"]
+                        ? [
+                            this.$scopedSlots["page-text"]({
+                              pageStart: pageStart,
+                              pageStop: pageStop,
+                              itemsLength: itemsLength,
+                            }),
+                          ]
+                        : [
+                            this.$vuetify.lang.t(
+                              this.pageText,
+                              pageStart,
+                              pageStop,
+                              itemsLength
+                            ),
+                          ];
+                    } else if (this.$scopedSlots["page-text"]) {
+                      children = [
+                        this.$scopedSlots["page-text"]({
+                          pageStart: pageStart,
+                          pageStop: pageStop,
+                          itemsLength: itemsLength,
+                        }),
+                      ];
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        class: "v-data-footer__pagination",
+                      },
+                      children
+                    );
+                  },
+                  genIcon: function genIcon(click, disabled, label, icon) {
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      {
+                        props: {
+                          disabled: disabled || this.disablePagination,
+                          icon: true,
+                          text: true,
+                        },
+                        on: {
+                          click: click,
+                        },
+                        attrs: {
+                          "aria-label": label,
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          _VIcon__WEBPACK_IMPORTED_MODULE_2__["default"],
+                          icon
+                        ),
+                      ]
+                    );
+                  },
+                  genIcons: function genIcons() {
+                    var before = [];
+                    var after = [];
+                    before.push(
+                      this.genIcon(
+                        this.onPreviousPage,
+                        this.options.page === 1,
+                        this.$vuetify.lang.t("$vuetify.dataFooter.prevPage"),
+                        this.$vuetify.rtl ? this.nextIcon : this.prevIcon
+                      )
+                    );
+                    after.push(
+                      this.genIcon(
+                        this.onNextPage,
+                        this.disableNextPageIcon,
+                        this.$vuetify.lang.t("$vuetify.dataFooter.nextPage"),
+                        this.$vuetify.rtl ? this.prevIcon : this.nextIcon
+                      )
+                    );
+
+                    if (this.showFirstLastPage) {
+                      before.unshift(
+                        this.genIcon(
+                          this.onFirstPage,
+                          this.options.page === 1,
+                          this.$vuetify.lang.t("$vuetify.dataFooter.firstPage"),
+                          this.$vuetify.rtl ? this.lastIcon : this.firstIcon
+                        )
+                      );
+                      after.push(
+                        this.genIcon(
+                          this.onLastPage,
+                          this.options.page >= this.pagination.pageCount ||
+                            this.options.itemsPerPage === -1,
+                          this.$vuetify.lang.t("$vuetify.dataFooter.lastPage"),
+                          this.$vuetify.rtl ? this.firstIcon : this.lastIcon
+                        )
+                      );
+                    }
+
+                    return [
+                      this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-data-footer__icons-before",
+                        },
+                        before
+                      ),
+                      this.showCurrentPage &&
+                        this.$createElement("span", [
+                          this.options.page.toString(),
+                        ]),
+                      this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-data-footer__icons-after",
+                        },
+                        after
+                      ),
+                    ];
+                  },
+                },
+                render: function render() {
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-data-footer",
+                    },
+                    [
+                      this.genItemsPerPageSelect(),
+                      this.genPaginationInfo(),
+                      this.genIcons(),
+                    ]
+                  );
+                },
+              });
 
-  try {
-    for (var nodes_5 = __values(nodes), nodes_5_1 = nodes_5.next(); !nodes_5_1.done; nodes_5_1 = nodes_5.next()) {
-      var other = nodes_5_1.value;
+            /***/
+          },
 
-      if (other !== node && other.index > node.index && Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(node.start, addTime(node.start, overlapThreshold), other.start, other.end)) {
-        return false;
-      }
-    }
-  } catch (e_8_1) {
-    e_8 = {
-      error: e_8_1
-    };
-  } finally {
-    try {
-      if (nodes_5_1 && !nodes_5_1.done && (_a = nodes_5.return)) _a.call(nodes_5);
-    } finally {
-      if (e_8) throw e_8.error;
-    }
-  }
+        /***/ "./src/components/VDataIterator/VDataIterator.ts":
+          /*!*******************************************************!*\
+  !*** ./src/components/VDataIterator/VDataIterator.ts ***!
+  \*******************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VData */ "./src/components/VData/index.ts"
+              );
+            /* harmony import */ var _VDataFooter__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VDataFooter */ "./src/components/VDataIterator/VDataFooter.ts"
+              );
+            /* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  return true;
-}
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-function getGroups(visuals, dayStart) {
-  var e_9, _a, e_10, _b;
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-  var groups = [];
+                return ar;
+              }; // Components
+
+            // Mixins
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _mixins_mobile__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "v-data-iterator",
+                props: __assign(
+                  __assign(
+                    {},
+                    _VData__WEBPACK_IMPORTED_MODULE_0__["VData"].options.props
+                  ),
+                  {
+                    itemKey: {
+                      type: String,
+                      default: "id",
+                    },
+                    value: {
+                      type: Array,
+                      default: function _default() {
+                        return [];
+                      },
+                    },
+                    singleSelect: Boolean,
+                    expanded: {
+                      type: Array,
+                      default: function _default() {
+                        return [];
+                      },
+                    },
+                    mobileBreakpoint: __assign(
+                      __assign(
+                        {},
+                        _mixins_mobile__WEBPACK_IMPORTED_MODULE_2__["default"]
+                          .options.props.mobileBreakpoint
+                      ),
+                      {
+                        default: 600,
+                      }
+                    ),
+                    singleExpand: Boolean,
+                    loading: [Boolean, String],
+                    noResultsText: {
+                      type: String,
+                      default: "$vuetify.dataIterator.noResultsText",
+                    },
+                    noDataText: {
+                      type: String,
+                      default: "$vuetify.noDataText",
+                    },
+                    loadingText: {
+                      type: String,
+                      default: "$vuetify.dataIterator.loadingText",
+                    },
+                    hideDefaultFooter: Boolean,
+                    footerProps: Object,
+                    selectableKey: {
+                      type: String,
+                      default: "isSelectable",
+                    },
+                  }
+                ),
+                data: function data() {
+                  return {
+                    selection: {},
+                    expansion: {},
+                    internalCurrentItems: [],
+                  };
+                },
+                computed: {
+                  everyItem: function everyItem() {
+                    var _this = this;
+
+                    return (
+                      !!this.selectableItems.length &&
+                      this.selectableItems.every(function (i) {
+                        return _this.isSelected(i);
+                      })
+                    );
+                  },
+                  someItems: function someItems() {
+                    var _this = this;
+
+                    return this.selectableItems.some(function (i) {
+                      return _this.isSelected(i);
+                    });
+                  },
+                  sanitizedFooterProps: function sanitizedFooterProps() {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                        "camelizeObjectKeys"
+                      ]
+                    )(this.footerProps);
+                  },
+                  selectableItems: function selectableItems() {
+                    var _this = this;
+
+                    return this.internalCurrentItems.filter(function (item) {
+                      return _this.isSelectable(item);
+                    });
+                  },
+                },
+                watch: {
+                  value: {
+                    handler: function handler(value) {
+                      var _this = this;
+
+                      this.selection = value.reduce(function (selection, item) {
+                        selection[
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                              "getObjectValueByPath"
+                            ]
+                          )(item, _this.itemKey)
+                        ] = item;
+                        return selection;
+                      }, {});
+                    },
+                    immediate: true,
+                  },
+                  selection: function selection(value, old) {
+                    if (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_5__["deepEqual"]
+                      )(Object.keys(value), Object.keys(old))
+                    )
+                      return;
+                    this.$emit("input", Object.values(value));
+                  },
+                  expanded: {
+                    handler: function handler(value) {
+                      var _this = this;
+
+                      this.expansion = value.reduce(function (expansion, item) {
+                        expansion[
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                              "getObjectValueByPath"
+                            ]
+                          )(item, _this.itemKey)
+                        ] = true;
+                        return expansion;
+                      }, {});
+                    },
+                    immediate: true,
+                  },
+                  expansion: function expansion(value, old) {
+                    var _this = this;
+
+                    if (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_5__["deepEqual"]
+                      )(value, old)
+                    )
+                      return;
+                    var keys = Object.keys(value).filter(function (k) {
+                      return value[k];
+                    });
+                    var expanded = !keys.length
+                      ? []
+                      : this.items.filter(function (i) {
+                          return keys.includes(
+                            String(
+                              Object(
+                                _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                                  "getObjectValueByPath"
+                                ]
+                              )(i, _this.itemKey)
+                            )
+                          );
+                        });
+                    this.$emit("update:expanded", expanded);
+                  },
+                },
+                created: function created() {
+                  var _this = this;
+
+                  var breakingProps = [
+                    ["disable-initial-sort", "sort-by"],
+                    ["filter", "custom-filter"],
+                    ["pagination", "options"],
+                    ["total-items", "server-items-length"],
+                    ["hide-actions", "hide-default-footer"],
+                    [
+                      "rows-per-page-items",
+                      "footer-props.items-per-page-options",
+                    ],
+                    ["rows-per-page-text", "footer-props.items-per-page-text"],
+                    ["prev-icon", "footer-props.prev-icon"],
+                    ["next-icon", "footer-props.next-icon"],
+                  ];
+                  /* istanbul ignore next */
+
+                  breakingProps.forEach(function (_a) {
+                    var _b = __read(_a, 2),
+                      original = _b[0],
+                      replacement = _b[1];
+
+                    if (_this.$attrs.hasOwnProperty(original))
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_6__["breaking"]
+                      )(original, replacement, _this);
+                  });
+                  var removedProps = [
+                    "expand",
+                    "content-class",
+                    "content-props",
+                    "content-tag",
+                  ];
+                  /* istanbul ignore next */
+
+                  removedProps.forEach(function (prop) {
+                    if (_this.$attrs.hasOwnProperty(prop))
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_6__["removed"]
+                      )(prop);
+                  });
+                },
+                methods: {
+                  toggleSelectAll: function toggleSelectAll(value) {
+                    var selection = Object.assign({}, this.selection);
+
+                    for (var i = 0; i < this.selectableItems.length; i++) {
+                      var item = this.selectableItems[i];
+                      if (!this.isSelectable(item)) continue;
+                      var key = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                          "getObjectValueByPath"
+                        ]
+                      )(item, this.itemKey);
+                      if (value) selection[key] = item;
+                      else delete selection[key];
+                    }
+
+                    this.selection = selection;
+                    this.$emit("toggle-select-all", {
+                      items: this.internalCurrentItems,
+                      value: value,
+                    });
+                  },
+                  isSelectable: function isSelectable(item) {
+                    return (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                          "getObjectValueByPath"
+                        ]
+                      )(item, this.selectableKey) !== false
+                    );
+                  },
+                  isSelected: function isSelected(item) {
+                    return (
+                      !!this.selection[
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                            "getObjectValueByPath"
+                          ]
+                        )(item, this.itemKey)
+                      ] || false
+                    );
+                  },
+                  select: function select(item, value, emit) {
+                    if (value === void 0) {
+                      value = true;
+                    }
+
+                    if (emit === void 0) {
+                      emit = true;
+                    }
+
+                    if (!this.isSelectable(item)) return;
+                    var selection = this.singleSelect
+                      ? {}
+                      : Object.assign({}, this.selection);
+                    var key = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                        "getObjectValueByPath"
+                      ]
+                    )(item, this.itemKey);
+                    if (value) selection[key] = item;
+                    else delete selection[key];
+
+                    if (this.singleSelect && emit) {
+                      var keys = Object.keys(this.selection);
+                      var old =
+                        keys.length &&
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                            "getObjectValueByPath"
+                          ]
+                        )(this.selection[keys[0]], this.itemKey);
+                      old &&
+                        old !== key &&
+                        this.$emit("item-selected", {
+                          item: this.selection[old],
+                          value: false,
+                        });
+                    }
+
+                    this.selection = selection;
+                    emit &&
+                      this.$emit("item-selected", {
+                        item: item,
+                        value: value,
+                      });
+                  },
+                  isExpanded: function isExpanded(item) {
+                    return (
+                      this.expansion[
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                            "getObjectValueByPath"
+                          ]
+                        )(item, this.itemKey)
+                      ] || false
+                    );
+                  },
+                  expand: function expand(item, value) {
+                    if (value === void 0) {
+                      value = true;
+                    }
+
+                    var expansion = this.singleExpand
+                      ? {}
+                      : Object.assign({}, this.expansion);
+                    var key = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                        "getObjectValueByPath"
+                      ]
+                    )(item, this.itemKey);
+                    if (value) expansion[key] = true;
+                    else delete expansion[key];
+                    this.expansion = expansion;
+                    this.$emit("item-expanded", {
+                      item: item,
+                      value: value,
+                    });
+                  },
+                  createItemProps: function createItemProps(item) {
+                    var _this = this;
+
+                    return {
+                      item: item,
+                      select: function select(v) {
+                        return _this.select(item, v);
+                      },
+                      isSelected: this.isSelected(item),
+                      expand: function expand(v) {
+                        return _this.expand(item, v);
+                      },
+                      isExpanded: this.isExpanded(item),
+                      isMobile: this.isMobile,
+                    };
+                  },
+                  genEmptyWrapper: function genEmptyWrapper(content) {
+                    return this.$createElement("div", content);
+                  },
+                  genEmpty: function genEmpty(
+                    originalItemsLength,
+                    filteredItemsLength
+                  ) {
+                    if (originalItemsLength === 0 && this.loading) {
+                      var loading =
+                        this.$slots.loading ||
+                        this.$vuetify.lang.t(this.loadingText);
+                      return this.genEmptyWrapper(loading);
+                    } else if (originalItemsLength === 0) {
+                      var noData =
+                        this.$slots["no-data"] ||
+                        this.$vuetify.lang.t(this.noDataText);
+                      return this.genEmptyWrapper(noData);
+                    } else if (filteredItemsLength === 0) {
+                      var noResults =
+                        this.$slots["no-results"] ||
+                        this.$vuetify.lang.t(this.noResultsText);
+                      return this.genEmptyWrapper(noResults);
+                    }
+
+                    return null;
+                  },
+                  genItems: function genItems(props) {
+                    var _this = this;
+
+                    var empty = this.genEmpty(
+                      props.originalItemsLength,
+                      props.pagination.itemsLength
+                    );
+                    if (empty) return [empty];
+
+                    if (this.$scopedSlots.default) {
+                      return this.$scopedSlots.default(
+                        __assign(__assign({}, props), {
+                          isSelected: this.isSelected,
+                          select: this.select,
+                          isExpanded: this.isExpanded,
+                          expand: this.expand,
+                        })
+                      );
+                    }
+
+                    if (this.$scopedSlots.item) {
+                      return props.items.map(function (item) {
+                        return _this.$scopedSlots.item(
+                          _this.createItemProps(item)
+                        );
+                      });
+                    }
+
+                    return [];
+                  },
+                  genFooter: function genFooter(props) {
+                    if (this.hideDefaultFooter) return null;
+                    var data = {
+                      props: __assign(__assign({}, this.sanitizedFooterProps), {
+                        options: props.options,
+                        pagination: props.pagination,
+                      }),
+                      on: {
+                        "update:options": function updateOptions(value) {
+                          return props.updateOptions(value);
+                        },
+                      },
+                    };
+                    var scopedSlots = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                        "getPrefixedScopedSlots"
+                      ]
+                    )("footer.", this.$scopedSlots);
+                    return this.$createElement(
+                      _VDataFooter__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      __assign(
+                        {
+                          scopedSlots: scopedSlots,
+                        },
+                        data
+                      )
+                    );
+                  },
+                  genDefaultScopedSlot: function genDefaultScopedSlot(props) {
+                    var outerProps = __assign(__assign({}, props), {
+                      someItems: this.someItems,
+                      everyItem: this.everyItem,
+                      toggleSelectAll: this.toggleSelectAll,
+                    });
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-data-iterator",
+                      },
+                      [
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"]
+                        )(this, "header", outerProps, true),
+                        this.genItems(props),
+                        this.genFooter(props),
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"]
+                        )(this, "footer", outerProps, true),
+                      ]
+                    );
+                  },
+                },
+                render: function render() {
+                  var _this = this;
+
+                  return this.$createElement(
+                    _VData__WEBPACK_IMPORTED_MODULE_0__["VData"],
+                    {
+                      props: this.$props,
+                      on: {
+                        "update:options": function updateOptions(v, old) {
+                          return (
+                            !Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                                "deepEqual"
+                              ]
+                            )(v, old) && _this.$emit("update:options", v)
+                          );
+                        },
+                        "update:page": function updatePage(v) {
+                          return _this.$emit("update:page", v);
+                        },
+                        "update:items-per-page": function updateItemsPerPage(
+                          v
+                        ) {
+                          return _this.$emit("update:items-per-page", v);
+                        },
+                        "update:sort-by": function updateSortBy(v) {
+                          return _this.$emit("update:sort-by", v);
+                        },
+                        "update:sort-desc": function updateSortDesc(v) {
+                          return _this.$emit("update:sort-desc", v);
+                        },
+                        "update:group-by": function updateGroupBy(v) {
+                          return _this.$emit("update:group-by", v);
+                        },
+                        "update:group-desc": function updateGroupDesc(v) {
+                          return _this.$emit("update:group-desc", v);
+                        },
+                        pagination: function pagination(v, old) {
+                          return (
+                            !Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                                "deepEqual"
+                              ]
+                            )(v, old) && _this.$emit("pagination", v)
+                          );
+                        },
+                        "current-items": function currentItems(v) {
+                          _this.internalCurrentItems = v;
+
+                          _this.$emit("current-items", v);
+                        },
+                        "page-count": function pageCount(v) {
+                          return _this.$emit("page-count", v);
+                        },
+                      },
+                      scopedSlots: {
+                        default: this.genDefaultScopedSlot,
+                      },
+                    }
+                  );
+                },
+              });
 
-  try {
-    for (var visuals_1 = __values(visuals), visuals_1_1 = visuals_1.next(); !visuals_1_1.done; visuals_1_1 = visuals_1.next()) {
-      var visual = visuals_1_1.value;
+            /***/
+          },
 
-      var _c = __read(Object(_common__WEBPACK_IMPORTED_MODULE_0__["getNormalizedRange"])(visual.event, dayStart), 2),
-          start = _c[0],
-          end = _c[1];
+        /***/ "./src/components/VDataIterator/index.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VDataIterator/index.ts ***!
+  \***********************************************/
+          /*! exports provided: VDataIterator, VDataFooter, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDataIterator__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDataIterator */ "./src/components/VDataIterator/VDataIterator.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataIterator",
+              function () {
+                return _VDataIterator__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VDataFooter__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VDataFooter */ "./src/components/VDataIterator/VDataFooter.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataFooter",
+              function () {
+                return _VDataFooter__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VDataIterator:
+                  _VDataIterator__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VDataFooter:
+                  _VDataFooter__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
-      var added = false;
+            /***/
+          },
 
-      try {
-        for (var groups_2 = (e_10 = void 0, __values(groups)), groups_2_1 = groups_2.next(); !groups_2_1.done; groups_2_1 = groups_2.next()) {
-          var group = groups_2_1.value;
+        /***/ "./src/components/VDataTable/MobileRow.ts":
+          /*!************************************************!*\
+  !*** ./src/components/VDataTable/MobileRow.ts ***!
+  \************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-          if (Object(_common__WEBPACK_IMPORTED_MODULE_0__["hasOverlap"])(start, end, group.start, group.end)) {
-            group.visuals.push(visual);
-            group.end = Math.max(group.end, end);
-            added = true;
-            break;
-          }
-        }
-      } catch (e_10_1) {
-        e_10 = {
-          error: e_10_1
-        };
-      } finally {
-        try {
-          if (groups_2_1 && !groups_2_1.done && (_b = groups_2.return)) _b.call(groups_2);
-        } finally {
-          if (e_10) throw e_10.error;
-        }
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "row",
+                functional: true,
+                props: {
+                  headers: Array,
+                  hideDefaultHeader: Boolean,
+                  item: Object,
+                  rtl: Boolean,
+                },
+                render: function render(h, _a) {
+                  var props = _a.props,
+                    slots = _a.slots,
+                    data = _a.data;
+                  var computedSlots = slots();
+                  var columns = props.headers.map(function (header) {
+                    var classes = {
+                      "v-data-table__mobile-row": true,
+                    };
+                    var children = [];
+                    var value = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                        "getObjectValueByPath"
+                      ]
+                    )(props.item, header.value);
+                    var slotName = header.value;
+                    var scopedSlot =
+                      data.scopedSlots && data.scopedSlots[slotName];
+                    var regularSlot = computedSlots[slotName];
+
+                    if (scopedSlot) {
+                      children.push(
+                        scopedSlot({
+                          item: props.item,
+                          header: header,
+                          value: value,
+                        })
+                      );
+                    } else if (regularSlot) {
+                      children.push(regularSlot);
+                    } else {
+                      children.push(value == null ? value : String(value));
+                    }
+
+                    var mobileRowChildren = [
+                      h(
+                        "div",
+                        {
+                          staticClass: "v-data-table__mobile-row__cell",
+                        },
+                        children
+                      ),
+                    ];
+
+                    if (
+                      header.value !== "dataTableSelect" &&
+                      !props.hideDefaultHeader
+                    ) {
+                      mobileRowChildren.unshift(
+                        h(
+                          "div",
+                          {
+                            staticClass: "v-data-table__mobile-row__header",
+                          },
+                          [header.text]
+                        )
+                      );
+                    }
+
+                    return h(
+                      "td",
+                      {
+                        class: classes,
+                      },
+                      mobileRowChildren
+                    );
+                  });
+                  return h(
+                    "tr",
+                    __assign(__assign({}, data), {
+                      staticClass: "v-data-table__mobile-table-row",
+                    }),
+                    columns
+                  );
+                },
+              });
 
-      if (!added) {
-        groups.push({
-          start: start,
-          end: end,
-          visuals: [visual]
-        });
-      }
-    }
-  } catch (e_9_1) {
-    e_9 = {
-      error: e_9_1
-    };
-  } finally {
-    try {
-      if (visuals_1_1 && !visuals_1_1.done && (_a = visuals_1.return)) _a.call(visuals_1);
-    } finally {
-      if (e_9) throw e_9.error;
-    }
-  }
+            /***/
+          },
 
-  return groups;
-}
-
-function getNode(visual, dayStart) {
-  var _a = __read(Object(_common__WEBPACK_IMPORTED_MODULE_0__["getNormalizedRange"])(visual.event, dayStart), 2),
-      start = _a[0],
-      end = _a[1];
-
-  return {
-    parent: null,
-    sibling: true,
-    index: 0,
-    visual: visual,
-    start: start,
-    end: end,
-    children: []
-  };
-}
-
-function getMaxChildIndex(node) {
-  var e_11, _a;
-
-  var max = node.index;
-
-  try {
-    for (var _b = __values(node.children), _c = _b.next(); !_c.done; _c = _b.next()) {
-      var child = _c.value;
-      var childMax = getMaxChildIndex(child);
-
-      if (childMax > max) {
-        max = childMax;
-      }
-    }
-  } catch (e_11_1) {
-    e_11 = {
-      error: e_11_1
-    };
-  } finally {
-    try {
-      if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
-    } finally {
-      if (e_11) throw e_11.error;
-    }
-  }
+        /***/ "./src/components/VDataTable/Row.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VDataTable/Row.ts ***!
+  \******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // Types
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "row",
+                functional: true,
+                props: {
+                  headers: Array,
+                  item: Object,
+                  rtl: Boolean,
+                },
+                render: function render(h, _a) {
+                  var props = _a.props,
+                    slots = _a.slots,
+                    data = _a.data;
+                  var computedSlots = slots();
+                  var columns = props.headers.map(function (header) {
+                    var _a;
+
+                    var children = [];
+                    var value = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                        "getObjectValueByPath"
+                      ]
+                    )(props.item, header.value);
+                    var slotName = header.value;
+                    var scopedSlot =
+                      data.scopedSlots && data.scopedSlots[slotName];
+                    var regularSlot = computedSlots[slotName];
+
+                    if (scopedSlot) {
+                      children.push(
+                        scopedSlot({
+                          item: props.item,
+                          header: header,
+                          value: value,
+                        })
+                      );
+                    } else if (regularSlot) {
+                      children.push(regularSlot);
+                    } else {
+                      children.push(value == null ? value : String(value));
+                    }
+
+                    var textAlign = "text-" + (header.align || "start");
+                    return h(
+                      "td",
+                      {
+                        class:
+                          ((_a = {}),
+                          (_a[textAlign] = true),
+                          (_a["v-data-table__divider"] = header.divider),
+                          _a),
+                      },
+                      children
+                    );
+                  });
+                  return h("tr", data, columns);
+                },
+              });
 
-  return max;
-}
+            /***/
+          },
 
-function addTime(identifier, minutes) {
-  var removeMinutes = identifier % 100;
-  var totalMinutes = removeMinutes + minutes;
-  var addHours = Math.floor(totalMinutes / 60);
-  var addMinutes = totalMinutes % 60;
-  return identifier - removeMinutes + addHours * 100 + addMinutes;
-}
+        /***/ "./src/components/VDataTable/RowGroup.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VDataTable/RowGroup.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/***/ }),
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ "./src/components/VCalendar/util/events.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VCalendar/util/events.ts ***!
-  \*************************************************/
-/*! exports provided: parseEvent, isEventOn, isEventStart, isEventOverlapping */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseEvent", function() { return parseEvent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEventOn", function() { return isEventOn; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEventStart", function() { return isEventStart; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEventOverlapping", function() { return isEventOverlapping; });
-/* harmony import */ var _timestamp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-
-function parseEvent(input, index, startProperty, endProperty, timed, category) {
-  if (timed === void 0) {
-    timed = false;
-  }
+                return ar;
+              };
 
-  if (category === void 0) {
-    category = false;
-  }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-  var startInput = input[startProperty];
-  var endInput = input[endProperty];
-  var startParsed = Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["parseTimestamp"])(startInput, true);
-  var endParsed = endInput ? Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["parseTimestamp"])(endInput, true) : startParsed;
-  var start = Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["isTimedless"])(startInput) ? Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["updateHasTime"])(startParsed, timed) : startParsed;
-  var end = Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["isTimedless"])(endInput) ? Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["updateHasTime"])(endParsed, timed) : endParsed;
-  var startIdentifier = Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["getDayIdentifier"])(start);
-  var startTimestampIdentifier = Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["getTimestampIdentifier"])(start);
-  var endIdentifier = Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["getDayIdentifier"])(end);
-  var endOffset = start.hasTime ? 0 : 2359;
-  var endTimestampIdentifier = Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["getTimestampIdentifier"])(end) + endOffset;
-  var allDay = !start.hasTime;
-  return {
-    input: input,
-    start: start,
-    startIdentifier: startIdentifier,
-    startTimestampIdentifier: startTimestampIdentifier,
-    end: end,
-    endIdentifier: endIdentifier,
-    endTimestampIdentifier: endTimestampIdentifier,
-    allDay: allDay,
-    index: index,
-    category: category
-  };
-}
-function isEventOn(event, dayIdentifier) {
-  return dayIdentifier >= event.startIdentifier && dayIdentifier <= event.endIdentifier && dayIdentifier * _timestamp__WEBPACK_IMPORTED_MODULE_0__["OFFSET_TIME"] !== event.endTimestampIdentifier;
-}
-function isEventStart(event, day, dayIdentifier, firstWeekday) {
-  return dayIdentifier === event.startIdentifier || firstWeekday === day.weekday && isEventOn(event, dayIdentifier);
-}
-function isEventOverlapping(event, startIdentifier, endIdentifier) {
-  return startIdentifier <= event.endIdentifier && endIdentifier >= event.startIdentifier;
-}
-
-/***/ }),
-
-/***/ "./src/components/VCalendar/util/props.ts":
-/*!************************************************!*\
-  !*** ./src/components/VCalendar/util/props.ts ***!
-  \************************************************/
-/*! exports provided: default, validateNumber, validateWeekdays */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateNumber", function() { return validateNumber; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateWeekdays", function() { return validateWeekdays; });
-/* harmony import */ var _timestamp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-/* harmony import */ var _modes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modes */ "./src/components/VCalendar/modes/index.ts");
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  base: {
-    start: {
-      type: [String, Number, Date],
-      validate: _timestamp__WEBPACK_IMPORTED_MODULE_0__["validateTimestamp"],
-      default: function _default() {
-        return Object(_timestamp__WEBPACK_IMPORTED_MODULE_0__["parseDate"])(new Date()).date;
-      }
-    },
-    end: {
-      type: [String, Number, Date],
-      validate: _timestamp__WEBPACK_IMPORTED_MODULE_0__["validateTimestamp"]
-    },
-    weekdays: {
-      type: [Array, String],
-      default: function _default() {
-        return [0, 1, 2, 3, 4, 5, 6];
-      },
-      validate: validateWeekdays
-    },
-    hideHeader: {
-      type: Boolean
-    },
-    shortWeekdays: {
-      type: Boolean,
-      default: true
-    },
-    weekdayFormat: {
-      type: Function,
-      default: null
-    },
-    dayFormat: {
-      type: Function,
-      default: null
-    }
-  },
-  intervals: {
-    maxDays: {
-      type: Number,
-      default: 7
-    },
-    shortIntervals: {
-      type: Boolean,
-      default: true
-    },
-    intervalHeight: {
-      type: [Number, String],
-      default: 48,
-      validate: validateNumber
-    },
-    intervalWidth: {
-      type: [Number, String],
-      default: 60,
-      validate: validateNumber
-    },
-    intervalMinutes: {
-      type: [Number, String],
-      default: 60,
-      validate: validateNumber
-    },
-    firstInterval: {
-      type: [Number, String],
-      default: 0,
-      validate: validateNumber
-    },
-    firstTime: {
-      type: [Number, String, Object],
-      validate: _timestamp__WEBPACK_IMPORTED_MODULE_0__["validateTime"]
-    },
-    intervalCount: {
-      type: [Number, String],
-      default: 24,
-      validate: validateNumber
-    },
-    intervalFormat: {
-      type: Function,
-      default: null
-    },
-    intervalStyle: {
-      type: Function,
-      default: null
-    },
-    showIntervalLabel: {
-      type: Function,
-      default: null
-    }
-  },
-  weeks: {
-    localeFirstDayOfYear: {
-      type: [String, Number],
-      default: 0
-    },
-    minWeeks: {
-      validate: validateNumber,
-      default: 1
-    },
-    shortMonths: {
-      type: Boolean,
-      default: true
-    },
-    showMonthOnFirst: {
-      type: Boolean,
-      default: true
-    },
-    showWeek: Boolean,
-    monthFormat: {
-      type: Function,
-      default: null
-    }
-  },
-  calendar: {
-    type: {
-      type: String,
-      default: 'month'
-    },
-    value: {
-      type: [String, Number, Date],
-      validate: _timestamp__WEBPACK_IMPORTED_MODULE_0__["validateTimestamp"]
-    }
-  },
-  category: {
-    categories: {
-      type: [Array, String],
-      default: ''
-    },
-    categoryHideDynamic: {
-      type: Boolean
-    },
-    categoryShowAll: {
-      type: Boolean
-    },
-    categoryForInvalid: {
-      type: String,
-      default: ''
-    },
-    categoryDays: {
-      type: [Number, String],
-      default: 1,
-      validate: function validate(x) {
-        return isFinite(parseInt(x)) && parseInt(x) > 0;
-      }
-    }
-  },
-  events: {
-    events: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    eventStart: {
-      type: String,
-      default: 'start'
-    },
-    eventEnd: {
-      type: String,
-      default: 'end'
-    },
-    eventTimed: {
-      type: [String, Function],
-      default: 'timed'
-    },
-    eventCategory: {
-      type: [String, Function],
-      default: 'category'
-    },
-    eventHeight: {
-      type: Number,
-      default: 20
-    },
-    eventColor: {
-      type: [String, Function],
-      default: 'primary'
-    },
-    eventTextColor: {
-      type: [String, Function],
-      default: 'white'
-    },
-    eventName: {
-      type: [String, Function],
-      default: 'name'
-    },
-    eventOverlapThreshold: {
-      type: [String, Number],
-      default: 60
-    },
-    eventOverlapMode: {
-      type: [String, Function],
-      default: 'stack',
-      validate: function validate(mode) {
-        return mode in _modes__WEBPACK_IMPORTED_MODULE_1__["CalendarEventOverlapModes"] || typeof mode === 'function';
-      }
-    },
-    eventMore: {
-      type: Boolean,
-      default: true
-    },
-    eventMoreText: {
-      type: String,
-      default: '$vuetify.calendar.moreEvents'
-    },
-    eventRipple: {
-      type: [Boolean, Object],
-      default: null
-    },
-    eventMarginBottom: {
-      type: Number,
-      default: 1
-    }
-  }
-});
-function validateNumber(input) {
-  return isFinite(parseInt(input));
-}
-function validateWeekdays(input) {
-  if (typeof input === 'string') {
-    input = input.split(',');
-  }
+                return ar;
+              };
 
-  if (Array.isArray(input)) {
-    var ints = input.map(function (x) {
-      return parseInt(x);
-    });
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "row-group",
+                functional: true,
+                props: {
+                  value: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  headerClass: {
+                    type: String,
+                    default: "v-row-group__header",
+                  },
+                  contentClass: String,
+                  summaryClass: {
+                    type: String,
+                    default: "v-row-group__summary",
+                  },
+                },
+                render: function render(h, _a) {
+                  var slots = _a.slots,
+                    props = _a.props;
+                  var computedSlots = slots();
+                  var children = [];
+
+                  if (computedSlots["column.header"]) {
+                    children.push(
+                      h(
+                        "tr",
+                        {
+                          staticClass: props.headerClass,
+                        },
+                        computedSlots["column.header"]
+                      )
+                    );
+                  } else if (computedSlots["row.header"]) {
+                    children.push.apply(
+                      children,
+                      __spread(computedSlots["row.header"])
+                    );
+                  }
 
-    if (ints.length > _timestamp__WEBPACK_IMPORTED_MODULE_0__["DAYS_IN_WEEK"] || ints.length === 0) {
-      return false;
-    }
+                  if (computedSlots["row.content"] && props.value)
+                    children.push.apply(
+                      children,
+                      __spread(computedSlots["row.content"])
+                    );
+
+                  if (computedSlots["column.summary"]) {
+                    children.push(
+                      h(
+                        "tr",
+                        {
+                          staticClass: props.summaryClass,
+                        },
+                        computedSlots["column.summary"]
+                      )
+                    );
+                  } else if (computedSlots["row.summary"]) {
+                    children.push.apply(
+                      children,
+                      __spread(computedSlots["row.summary"])
+                    );
+                  }
 
-    var visited = {};
-    var wrapped = false;
+                  return children;
+                },
+              });
 
-    for (var i = 0; i < ints.length; i++) {
-      var x = ints[i];
+            /***/
+          },
 
-      if (!isFinite(x) || x < 0 || x >= _timestamp__WEBPACK_IMPORTED_MODULE_0__["DAYS_IN_WEEK"]) {
-        return false;
-      }
+        /***/ "./src/components/VDataTable/VDataTable.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VDataTable/VDataTable.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (i > 0) {
-        var d = x - ints[i - 1];
+        /***/ "./src/components/VDataTable/VDataTable.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VDataTable/VDataTable.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDataTable_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDataTable.sass */ "./src/components/VDataTable/VDataTable.sass"
+              );
+            /* harmony import */ var _VDataTable_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDataTable_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VData */ "./src/components/VData/index.ts"
+              );
+            /* harmony import */ var _VDataIterator__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VDataIterator */ "./src/components/VDataIterator/index.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _VDataTableHeader__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VDataTableHeader */ "./src/components/VDataTable/VDataTableHeader.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _Row__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./Row */ "./src/components/VDataTable/Row.ts"
+              );
+            /* harmony import */ var _RowGroup__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ./RowGroup */ "./src/components/VDataTable/RowGroup.ts"
+              );
+            /* harmony import */ var _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../VCheckbox/VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts"
+              );
+            /* harmony import */ var _VSimpleTable__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ./VSimpleTable */ "./src/components/VDataTable/VSimpleTable.ts"
+              );
+            /* harmony import */ var _MobileRow__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ./MobileRow */ "./src/components/VDataTable/MobileRow.ts"
+              );
+            /* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_13__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_14__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_15__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_16__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-        if (d < 0) {
-          if (wrapped) {
-            return false;
-          }
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-          wrapped = true;
-        } else if (d === 0) {
-          return false;
-        }
-      }
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-      if (visited[x]) {
-        return false;
-      }
-
-      visited[x] = true;
-    }
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-    return true;
-  }
+                return ar;
+              };
 
-  return false;
-}
+            // Components
 
-/***/ }),
+            // import VVirtualTable from './VVirtualTable'
 
-/***/ "./src/components/VCalendar/util/timestamp.ts":
-/*!****************************************************!*\
-  !*** ./src/components/VCalendar/util/timestamp.ts ***!
-  \****************************************************/
-/*! exports provided: PARSE_REGEX, PARSE_TIME, DAYS_IN_MONTH, DAYS_IN_MONTH_LEAP, DAYS_IN_MONTH_MIN, DAYS_IN_MONTH_MAX, MONTH_MAX, MONTH_MIN, DAY_MIN, DAYS_IN_WEEK, MINUTES_IN_HOUR, MINUTE_MAX, MINUTES_IN_DAY, HOURS_IN_DAY, HOUR_MAX, FIRST_HOUR, OFFSET_YEAR, OFFSET_MONTH, OFFSET_HOUR, OFFSET_TIME, getStartOfWeek, getEndOfWeek, getStartOfMonth, getEndOfMonth, validateTime, parseTime, validateTimestamp, parseTimestamp, parseDate, getDayIdentifier, getTimeIdentifier, getTimestampIdentifier, updateRelative, isTimedless, updateHasTime, updateMinutes, updateWeekday, updateFormatted, getWeekday, daysInMonth, copyTimestamp, padNumber, getDate, getTime, nextMinutes, nextDay, prevDay, relativeDays, diffMinutes, findWeekday, getWeekdaySkips, timestampToDate, createDayList, createIntervalList, createNativeLocaleFormatter */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PARSE_REGEX", function() { return PARSE_REGEX; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PARSE_TIME", function() { return PARSE_TIME; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DAYS_IN_MONTH", function() { return DAYS_IN_MONTH; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DAYS_IN_MONTH_LEAP", function() { return DAYS_IN_MONTH_LEAP; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DAYS_IN_MONTH_MIN", function() { return DAYS_IN_MONTH_MIN; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DAYS_IN_MONTH_MAX", function() { return DAYS_IN_MONTH_MAX; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MONTH_MAX", function() { return MONTH_MAX; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MONTH_MIN", function() { return MONTH_MIN; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DAY_MIN", function() { return DAY_MIN; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DAYS_IN_WEEK", function() { return DAYS_IN_WEEK; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MINUTES_IN_HOUR", function() { return MINUTES_IN_HOUR; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MINUTE_MAX", function() { return MINUTE_MAX; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MINUTES_IN_DAY", function() { return MINUTES_IN_DAY; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HOURS_IN_DAY", function() { return HOURS_IN_DAY; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HOUR_MAX", function() { return HOUR_MAX; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FIRST_HOUR", function() { return FIRST_HOUR; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OFFSET_YEAR", function() { return OFFSET_YEAR; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OFFSET_MONTH", function() { return OFFSET_MONTH; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OFFSET_HOUR", function() { return OFFSET_HOUR; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OFFSET_TIME", function() { return OFFSET_TIME; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getStartOfWeek", function() { return getStartOfWeek; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEndOfWeek", function() { return getEndOfWeek; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getStartOfMonth", function() { return getStartOfMonth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getEndOfMonth", function() { return getEndOfMonth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateTime", function() { return validateTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseTime", function() { return parseTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "validateTimestamp", function() { return validateTimestamp; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseTimestamp", function() { return parseTimestamp; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseDate", function() { return parseDate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDayIdentifier", function() { return getDayIdentifier; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimeIdentifier", function() { return getTimeIdentifier; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimestampIdentifier", function() { return getTimestampIdentifier; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateRelative", function() { return updateRelative; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTimedless", function() { return isTimedless; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateHasTime", function() { return updateHasTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateMinutes", function() { return updateMinutes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateWeekday", function() { return updateWeekday; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateFormatted", function() { return updateFormatted; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getWeekday", function() { return getWeekday; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "daysInMonth", function() { return daysInMonth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "copyTimestamp", function() { return copyTimestamp; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "padNumber", function() { return padNumber; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDate", function() { return getDate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTime", function() { return getTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nextMinutes", function() { return nextMinutes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nextDay", function() { return nextDay; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prevDay", function() { return prevDay; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "relativeDays", function() { return relativeDays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "diffMinutes", function() { return diffMinutes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findWeekday", function() { return findWeekday; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getWeekdaySkips", function() { return getWeekdaySkips; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timestampToDate", function() { return timestampToDate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createDayList", function() { return createDayList; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createIntervalList", function() { return createIntervalList; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createNativeLocaleFormatter", function() { return createNativeLocaleFormatter; });
-/* harmony import */ var _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/dateTimeUtils */ "./src/util/dateTimeUtils.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-
-var PARSE_REGEX = /^(\d{4})-(\d{1,2})(-(\d{1,2}))?([^\d]+(\d{1,2}))?(:(\d{1,2}))?(:(\d{1,2}))?$/;
-var PARSE_TIME = /(\d\d?)(:(\d\d?)|)(:(\d\d?)|)/;
-var DAYS_IN_MONTH = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-var DAYS_IN_MONTH_LEAP = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-var DAYS_IN_MONTH_MIN = 28;
-var DAYS_IN_MONTH_MAX = 31;
-var MONTH_MAX = 12;
-var MONTH_MIN = 1;
-var DAY_MIN = 1;
-var DAYS_IN_WEEK = 7;
-var MINUTES_IN_HOUR = 60;
-var MINUTE_MAX = 59;
-var MINUTES_IN_DAY = 24 * 60;
-var HOURS_IN_DAY = 24;
-var HOUR_MAX = 23;
-var FIRST_HOUR = 0;
-var OFFSET_YEAR = 10000;
-var OFFSET_MONTH = 100;
-var OFFSET_HOUR = 100;
-var OFFSET_TIME = 10000;
-function getStartOfWeek(timestamp, weekdays, today) {
-  var start = copyTimestamp(timestamp);
-  findWeekday(start, weekdays[0], prevDay);
-  updateFormatted(start);
-
-  if (today) {
-    updateRelative(start, today, start.hasTime);
-  }
+            // Mixins
 
-  return start;
-}
-function getEndOfWeek(timestamp, weekdays, today) {
-  var end = copyTimestamp(timestamp);
-  findWeekday(end, weekdays[weekdays.length - 1]);
-  updateFormatted(end);
+            // Directives
 
-  if (today) {
-    updateRelative(end, today, end.hasTime);
-  }
+            // Helpers
 
-  return end;
-}
-function getStartOfMonth(timestamp) {
-  var start = copyTimestamp(timestamp);
-  start.day = DAY_MIN;
-  updateWeekday(start);
-  updateFormatted(start);
-  return start;
-}
-function getEndOfMonth(timestamp) {
-  var end = copyTimestamp(timestamp);
-  end.day = daysInMonth(end.year, end.month);
-  updateWeekday(end);
-  updateFormatted(end);
-  return end;
-}
-function validateTime(input) {
-  return typeof input === 'number' && isFinite(input) || !!PARSE_TIME.exec(input) || _typeof(input) === 'object' && isFinite(input.hour) && isFinite(input.minute);
-}
-function parseTime(input) {
-  if (typeof input === 'number') {
-    // when a number is given, it's minutes since 12:00am
-    return input;
-  } else if (typeof input === 'string') {
-    // when a string is given, it's a hh:mm:ss format where seconds are optional
-    var parts = PARSE_TIME.exec(input);
-
-    if (!parts) {
-      return false;
-    }
-
-    return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0);
-  } else if (_typeof(input) === 'object') {
-    // when an object is given, it must have hour and minute
-    if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {
-      return false;
-    }
-
-    return input.hour * 60 + input.minute;
-  } else {
-    // unsupported type
-    return false;
-  }
-}
-function validateTimestamp(input) {
-  return typeof input === 'number' && isFinite(input) || typeof input === 'string' && !!PARSE_REGEX.exec(input) || input instanceof Date;
-}
-function parseTimestamp(input, required, now) {
-  if (required === void 0) {
-    required = false;
-  }
+            function filterFn(item, search, filter) {
+              return function (header) {
+                var value = Object(
+                  _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                    "getObjectValueByPath"
+                  ]
+                )(item, header.value);
+                return header.filter
+                  ? header.filter(value, search, item)
+                  : filter(value, search, item);
+              };
+            }
 
-  if (typeof input === 'number' && isFinite(input)) {
-    input = new Date(input);
-  }
+            function searchTableItems(
+              items,
+              search,
+              headersWithCustomFilters,
+              headersWithoutCustomFilters,
+              customFilter
+            ) {
+              search = typeof search === "string" ? search.trim() : null;
+              return items.filter(function (item) {
+                // Headers with custom filters are evaluated whether or not a search term has been provided.
+                // We need to match every filter to be included in the results.
+                var matchesColumnFilters = headersWithCustomFilters.every(
+                  filterFn(
+                    item,
+                    search,
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_14__["defaultFilter"]
+                  )
+                ); // Headers without custom filters are only filtered by the `search` property if it is defined.
+                // We only need a single column to match the search term to be included in the results.
+
+                var matchesSearchTerm =
+                  !search ||
+                  headersWithoutCustomFilters.some(
+                    filterFn(item, search, customFilter)
+                  );
+                return matchesColumnFilters && matchesSearchTerm;
+              });
+            }
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_13__["default"])(
+                _VDataIterator__WEBPACK_IMPORTED_MODULE_2__["VDataIterator"],
+                _mixins_loadable__WEBPACK_IMPORTED_MODULE_11__["default"]
+              ).extend({
+                name: "v-data-table",
+                // https://github.com/vuejs/vue/issues/6872
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_12__["default"],
+                },
+                props: {
+                  headers: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  showSelect: Boolean,
+                  showExpand: Boolean,
+                  showGroupBy: Boolean,
+                  // TODO: Fix
+                  // virtualRows: Boolean,
+                  height: [Number, String],
+                  hideDefaultHeader: Boolean,
+                  caption: String,
+                  dense: Boolean,
+                  headerProps: Object,
+                  calculateWidths: Boolean,
+                  fixedHeader: Boolean,
+                  headersLength: Number,
+                  expandIcon: {
+                    type: String,
+                    default: "$expand",
+                  },
+                  customFilter: {
+                    type: Function,
+                    default:
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                        "defaultFilter"
+                      ],
+                  },
+                  itemClass: {
+                    type: [String, Function],
+                    default: function _default() {
+                      return "";
+                    },
+                  },
+                  loaderHeight: {
+                    type: [Number, String],
+                    default: 4,
+                  },
+                },
+                data: function data() {
+                  return {
+                    internalGroupBy: [],
+                    openCache: {},
+                    widths: [],
+                  };
+                },
+                computed: {
+                  computedHeaders: function computedHeaders() {
+                    var _this = this;
+
+                    if (!this.headers) return [];
+                    var headers = this.headers.filter(function (h) {
+                      return (
+                        h.value === undefined ||
+                        !_this.internalGroupBy.find(function (v) {
+                          return v === h.value;
+                        })
+                      );
+                    });
+                    var defaultHeader = {
+                      text: "",
+                      sortable: false,
+                      width: "1px",
+                    };
+
+                    if (this.showSelect) {
+                      var index = headers.findIndex(function (h) {
+                        return h.value === "data-table-select";
+                      });
+                      if (index < 0)
+                        headers.unshift(
+                          __assign(__assign({}, defaultHeader), {
+                            value: "data-table-select",
+                          })
+                        );
+                      else
+                        headers.splice(
+                          index,
+                          1,
+                          __assign(__assign({}, defaultHeader), headers[index])
+                        );
+                    }
+
+                    if (this.showExpand) {
+                      var index = headers.findIndex(function (h) {
+                        return h.value === "data-table-expand";
+                      });
+                      if (index < 0)
+                        headers.unshift(
+                          __assign(__assign({}, defaultHeader), {
+                            value: "data-table-expand",
+                          })
+                        );
+                      else
+                        headers.splice(
+                          index,
+                          1,
+                          __assign(__assign({}, defaultHeader), headers[index])
+                        );
+                    }
+
+                    return headers;
+                  },
+                  colspanAttrs: function colspanAttrs() {
+                    return this.isMobile
+                      ? undefined
+                      : {
+                          colspan:
+                            this.headersLength || this.computedHeaders.length,
+                        };
+                  },
+                  columnSorters: function columnSorters() {
+                    return this.computedHeaders.reduce(function (acc, header) {
+                      if (header.sort) acc[header.value] = header.sort;
+                      return acc;
+                    }, {});
+                  },
+                  headersWithCustomFilters:
+                    function headersWithCustomFilters() {
+                      return this.headers.filter(function (header) {
+                        return (
+                          header.filter &&
+                          (!header.hasOwnProperty("filterable") ||
+                            header.filterable === true)
+                        );
+                      });
+                    },
+                  headersWithoutCustomFilters:
+                    function headersWithoutCustomFilters() {
+                      return this.headers.filter(function (header) {
+                        return (
+                          !header.filter &&
+                          (!header.hasOwnProperty("filterable") ||
+                            header.filterable === true)
+                        );
+                      });
+                    },
+                  sanitizedHeaderProps: function sanitizedHeaderProps() {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                        "camelizeObjectKeys"
+                      ]
+                    )(this.headerProps);
+                  },
+                  computedItemsPerPage: function computedItemsPerPage() {
+                    var itemsPerPage =
+                      this.options && this.options.itemsPerPage
+                        ? this.options.itemsPerPage
+                        : this.itemsPerPage;
+                    var itemsPerPageOptions =
+                      this.sanitizedFooterProps.itemsPerPageOptions;
+
+                    if (
+                      itemsPerPageOptions &&
+                      !itemsPerPageOptions.find(function (item) {
+                        return typeof item === "number"
+                          ? item === itemsPerPage
+                          : item.value === itemsPerPage;
+                      })
+                    ) {
+                      var firstOption = itemsPerPageOptions[0];
+                      return _typeof(firstOption) === "object"
+                        ? firstOption.value
+                        : firstOption;
+                    }
+
+                    return itemsPerPage;
+                  },
+                },
+                created: function created() {
+                  var _this = this;
+
+                  var breakingProps = [
+                    ["sort-icon", "header-props.sort-icon"],
+                    ["hide-headers", "hide-default-header"],
+                    ["select-all", "show-select"],
+                  ];
+                  /* istanbul ignore next */
+
+                  breakingProps.forEach(function (_a) {
+                    var _b = __read(_a, 2),
+                      original = _b[0],
+                      replacement = _b[1];
+
+                    if (_this.$attrs.hasOwnProperty(original))
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_15__["breaking"]
+                      )(original, replacement, _this);
+                  });
+                },
+                mounted: function mounted() {
+                  // if ((!this.sortBy || !this.sortBy.length) && (!this.options.sortBy || !this.options.sortBy.length)) {
+                  //   const firstSortable = this.headers.find(h => !('sortable' in h) || !!h.sortable)
+                  //   if (firstSortable) this.updateOptions({ sortBy: [firstSortable.value], sortDesc: [false] })
+                  // }
+                  if (this.calculateWidths) {
+                    window.addEventListener("resize", this.calcWidths);
+                    this.calcWidths();
+                  }
+                },
+                beforeDestroy: function beforeDestroy() {
+                  if (this.calculateWidths) {
+                    window.removeEventListener("resize", this.calcWidths);
+                  }
+                },
+                methods: {
+                  calcWidths: function calcWidths() {
+                    this.widths = Array.from(
+                      this.$el.querySelectorAll("th")
+                    ).map(function (e) {
+                      return e.clientWidth;
+                    });
+                  },
+                  customFilterWithColumns: function customFilterWithColumns(
+                    items,
+                    search
+                  ) {
+                    return searchTableItems(
+                      items,
+                      search,
+                      this.headersWithCustomFilters,
+                      this.headersWithoutCustomFilters,
+                      this.customFilter
+                    );
+                  },
+                  customSortWithHeaders: function customSortWithHeaders(
+                    items,
+                    sortBy,
+                    sortDesc,
+                    locale
+                  ) {
+                    return this.customSort(
+                      items,
+                      sortBy,
+                      sortDesc,
+                      locale,
+                      this.columnSorters
+                    );
+                  },
+                  createItemProps: function createItemProps(item) {
+                    var props = _VDataIterator__WEBPACK_IMPORTED_MODULE_2__[
+                      "VDataIterator"
+                    ].options.methods.createItemProps.call(this, item);
+                    return Object.assign(props, {
+                      headers: this.computedHeaders,
+                    });
+                  },
+                  genCaption: function genCaption(props) {
+                    if (this.caption)
+                      return [this.$createElement("caption", [this.caption])];
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"]
+                    )(this, "caption", props, true);
+                  },
+                  genColgroup: function genColgroup(props) {
+                    var _this = this;
+
+                    return this.$createElement(
+                      "colgroup",
+                      this.computedHeaders.map(function (header) {
+                        return _this.$createElement("col", {
+                          class: {
+                            divider: header.divider,
+                          },
+                        });
+                      })
+                    );
+                  },
+                  genLoading: function genLoading() {
+                    var th = this.$createElement(
+                      "th",
+                      {
+                        staticClass: "column",
+                        attrs: this.colspanAttrs,
+                      },
+                      [this.genProgress()]
+                    );
+                    var tr = this.$createElement(
+                      "tr",
+                      {
+                        staticClass: "v-data-table__progress",
+                      },
+                      [th]
+                    );
+                    return this.$createElement("thead", [tr]);
+                  },
+                  genHeaders: function genHeaders(props) {
+                    var data = {
+                      props: __assign(__assign({}, this.sanitizedHeaderProps), {
+                        headers: this.computedHeaders,
+                        options: props.options,
+                        mobile: this.isMobile,
+                        showGroupBy: this.showGroupBy,
+                        someItems: this.someItems,
+                        everyItem: this.everyItem,
+                        singleSelect: this.singleSelect,
+                        disableSort: this.disableSort,
+                      }),
+                      on: {
+                        sort: props.sort,
+                        group: props.group,
+                        "toggle-select-all": this.toggleSelectAll,
+                      },
+                    };
+                    var children = [
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"]
+                      )(this, "header", data),
+                    ];
+
+                    if (!this.hideDefaultHeader) {
+                      var scopedSlots = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                          "getPrefixedScopedSlots"
+                        ]
+                      )("header.", this.$scopedSlots);
+                      children.push(
+                        this.$createElement(
+                          _VDataTableHeader__WEBPACK_IMPORTED_MODULE_4__[
+                            "default"
+                          ],
+                          __assign(__assign({}, data), {
+                            scopedSlots: scopedSlots,
+                          })
+                        )
+                      );
+                    }
+
+                    if (this.loading) children.push(this.genLoading());
+                    return children;
+                  },
+                  genEmptyWrapper: function genEmptyWrapper(content) {
+                    return this.$createElement(
+                      "tr",
+                      {
+                        staticClass: "v-data-table__empty-wrapper",
+                      },
+                      [
+                        this.$createElement(
+                          "td",
+                          {
+                            attrs: this.colspanAttrs,
+                          },
+                          content
+                        ),
+                      ]
+                    );
+                  },
+                  genItems: function genItems(items, props) {
+                    var empty = this.genEmpty(
+                      props.originalItemsLength,
+                      props.pagination.itemsLength
+                    );
+                    if (empty) return [empty];
+                    return props.groupedItems
+                      ? this.genGroupedRows(props.groupedItems, props)
+                      : this.genRows(items, props);
+                  },
+                  genGroupedRows: function genGroupedRows(groupedItems, props) {
+                    var _this = this;
+
+                    return groupedItems.map(function (group) {
+                      if (!_this.openCache.hasOwnProperty(group.name))
+                        _this.$set(_this.openCache, group.name, true);
+
+                      if (_this.$scopedSlots.group) {
+                        return _this.$scopedSlots.group({
+                          group: group.name,
+                          options: props.options,
+                          items: group.items,
+                          headers: _this.computedHeaders,
+                        });
+                      } else {
+                        return _this.genDefaultGroupedRow(
+                          group.name,
+                          group.items,
+                          props
+                        );
+                      }
+                    });
+                  },
+                  genDefaultGroupedRow: function genDefaultGroupedRow(
+                    group,
+                    items,
+                    props
+                  ) {
+                    var _this = this;
+
+                    var isOpen = !!this.openCache[group];
+                    var children = [
+                      this.$createElement(
+                        "template",
+                        {
+                          slot: "row.content",
+                        },
+                        this.genRows(items, props)
+                      ),
+                    ];
+
+                    var toggleFn = function toggleFn() {
+                      return _this.$set(
+                        _this.openCache,
+                        group,
+                        !_this.openCache[group]
+                      );
+                    };
+
+                    var removeFn = function removeFn() {
+                      return props.updateOptions({
+                        groupBy: [],
+                        groupDesc: [],
+                      });
+                    };
+
+                    if (this.$scopedSlots["group.header"]) {
+                      children.unshift(
+                        this.$createElement(
+                          "template",
+                          {
+                            slot: "column.header",
+                          },
+                          [
+                            this.$scopedSlots["group.header"]({
+                              group: group,
+                              groupBy: props.options.groupBy,
+                              items: items,
+                              headers: this.computedHeaders,
+                              isOpen: isOpen,
+                              toggle: toggleFn,
+                              remove: removeFn,
+                            }),
+                          ]
+                        )
+                      );
+                    } else {
+                      var toggle = this.$createElement(
+                        _VBtn__WEBPACK_IMPORTED_MODULE_3__["default"],
+                        {
+                          staticClass: "ma-0",
+                          props: {
+                            icon: true,
+                            small: true,
+                          },
+                          on: {
+                            click: toggleFn,
+                          },
+                        },
+                        [
+                          this.$createElement(
+                            _VIcon__WEBPACK_IMPORTED_MODULE_5__["default"],
+                            [isOpen ? "$minus" : "$plus"]
+                          ),
+                        ]
+                      );
+                      var remove = this.$createElement(
+                        _VBtn__WEBPACK_IMPORTED_MODULE_3__["default"],
+                        {
+                          staticClass: "ma-0",
+                          props: {
+                            icon: true,
+                            small: true,
+                          },
+                          on: {
+                            click: removeFn,
+                          },
+                        },
+                        [
+                          this.$createElement(
+                            _VIcon__WEBPACK_IMPORTED_MODULE_5__["default"],
+                            ["$close"]
+                          ),
+                        ]
+                      );
+                      var column = this.$createElement(
+                        "td",
+                        {
+                          staticClass: "text-start",
+                          attrs: this.colspanAttrs,
+                        },
+                        [
+                          toggle,
+                          props.options.groupBy[0] + ": " + group,
+                          remove,
+                        ]
+                      );
+                      children.unshift(
+                        this.$createElement(
+                          "template",
+                          {
+                            slot: "column.header",
+                          },
+                          [column]
+                        )
+                      );
+                    }
+
+                    if (this.$scopedSlots["group.summary"]) {
+                      children.push(
+                        this.$createElement(
+                          "template",
+                          {
+                            slot: "column.summary",
+                          },
+                          [
+                            this.$scopedSlots["group.summary"]({
+                              group: group,
+                              groupBy: props.options.groupBy,
+                              items: items,
+                              headers: this.computedHeaders,
+                              isOpen: isOpen,
+                              toggle: toggleFn,
+                            }),
+                          ]
+                        )
+                      );
+                    }
+
+                    return this.$createElement(
+                      _RowGroup__WEBPACK_IMPORTED_MODULE_7__["default"],
+                      {
+                        key: group,
+                        props: {
+                          value: isOpen,
+                        },
+                      },
+                      children
+                    );
+                  },
+                  genRows: function genRows(items, props) {
+                    return this.$scopedSlots.item
+                      ? this.genScopedRows(items, props)
+                      : this.genDefaultRows(items, props);
+                  },
+                  genScopedRows: function genScopedRows(items, props) {
+                    var rows = [];
+
+                    for (var i = 0; i < items.length; i++) {
+                      var item = items[i];
+                      rows.push(
+                        this.$scopedSlots.item(
+                          __assign(__assign({}, this.createItemProps(item)), {
+                            index: i,
+                          })
+                        )
+                      );
+
+                      if (this.isExpanded(item)) {
+                        rows.push(
+                          this.$scopedSlots["expanded-item"]({
+                            item: item,
+                            headers: this.computedHeaders,
+                          })
+                        );
+                      }
+                    }
+
+                    return rows;
+                  },
+                  genDefaultRows: function genDefaultRows(items, props) {
+                    var _this = this;
+
+                    return this.$scopedSlots["expanded-item"]
+                      ? items.map(function (item) {
+                          return _this.genDefaultExpandedRow(item);
+                        })
+                      : items.map(function (item) {
+                          return _this.genDefaultSimpleRow(item);
+                        });
+                  },
+                  genDefaultExpandedRow: function genDefaultExpandedRow(item) {
+                    var isExpanded = this.isExpanded(item);
+                    var classes = {
+                      "v-data-table__expanded v-data-table__expanded__row":
+                        isExpanded,
+                    };
+                    var headerRow = this.genDefaultSimpleRow(item, classes);
+                    var expandedRow = this.$createElement(
+                      "tr",
+                      {
+                        staticClass:
+                          "v-data-table__expanded v-data-table__expanded__content",
+                      },
+                      [
+                        this.$scopedSlots["expanded-item"]({
+                          item: item,
+                          headers: this.computedHeaders,
+                        }),
+                      ]
+                    );
+                    return this.$createElement(
+                      _RowGroup__WEBPACK_IMPORTED_MODULE_7__["default"],
+                      {
+                        props: {
+                          value: isExpanded,
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          "template",
+                          {
+                            slot: "row.header",
+                          },
+                          [headerRow]
+                        ),
+                        this.$createElement(
+                          "template",
+                          {
+                            slot: "row.content",
+                          },
+                          [expandedRow]
+                        ),
+                      ]
+                    );
+                  },
+                  genDefaultSimpleRow: function genDefaultSimpleRow(
+                    item,
+                    classes
+                  ) {
+                    var _this = this;
+
+                    if (classes === void 0) {
+                      classes = {};
+                    }
+
+                    var scopedSlots = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                        "getPrefixedScopedSlots"
+                      ]
+                    )("item.", this.$scopedSlots);
+                    var data = this.createItemProps(item);
+
+                    if (this.showSelect) {
+                      var slot_1 = scopedSlots["data-table-select"];
+                      scopedSlots["data-table-select"] = slot_1
+                        ? function () {
+                            return slot_1(data);
+                          }
+                        : function () {
+                            return _this.$createElement(
+                              _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_8__[
+                                "default"
+                              ],
+                              {
+                                staticClass: "v-data-table__checkbox",
+                                props: {
+                                  value: data.isSelected,
+                                  disabled: !_this.isSelectable(item),
+                                },
+                                on: {
+                                  input: function input(val) {
+                                    return data.select(val);
+                                  },
+                                },
+                              }
+                            );
+                          };
+                    }
+
+                    if (this.showExpand) {
+                      var slot_2 = scopedSlots["data-table-expand"];
+                      scopedSlots["data-table-expand"] = slot_2
+                        ? function () {
+                            return slot_2(data);
+                          }
+                        : function () {
+                            return _this.$createElement(
+                              _VIcon__WEBPACK_IMPORTED_MODULE_5__["default"],
+                              {
+                                staticClass: "v-data-table__expand-icon",
+                                class: {
+                                  "v-data-table__expand-icon--active":
+                                    data.isExpanded,
+                                },
+                                on: {
+                                  click: function click(e) {
+                                    e.stopPropagation();
+                                    data.expand(!data.isExpanded);
+                                  },
+                                },
+                              },
+                              [_this.expandIcon]
+                            );
+                          };
+                    }
+
+                    return this.$createElement(
+                      this.isMobile
+                        ? _MobileRow__WEBPACK_IMPORTED_MODULE_10__["default"]
+                        : _Row__WEBPACK_IMPORTED_MODULE_6__["default"],
+                      {
+                        key: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                            "getObjectValueByPath"
+                          ]
+                        )(item, this.itemKey),
+                        class: Object(
+                          _util_mergeData__WEBPACK_IMPORTED_MODULE_16__[
+                            "mergeClasses"
+                          ]
+                        )(
+                          __assign(__assign({}, classes), {
+                            "v-data-table__selected": data.isSelected,
+                          }),
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                              "getPropertyFromItem"
+                            ]
+                          )(item, this.itemClass)
+                        ),
+                        props: {
+                          headers: this.computedHeaders,
+                          hideDefaultHeader: this.hideDefaultHeader,
+                          item: item,
+                          rtl: this.$vuetify.rtl,
+                        },
+                        scopedSlots: scopedSlots,
+                        on: {
+                          // TODO: for click, the first argument should be the event, and the second argument should be data,
+                          // but this is a breaking change so it's for v3
+                          click: function click() {
+                            return _this.$emit("click:row", item, data);
+                          },
+                          contextmenu: function contextmenu(event) {
+                            return _this.$emit("contextmenu:row", event, data);
+                          },
+                          dblclick: function dblclick(event) {
+                            return _this.$emit("dblclick:row", event, data);
+                          },
+                        },
+                      }
+                    );
+                  },
+                  genBody: function genBody(props) {
+                    var data = __assign(__assign({}, props), {
+                      expand: this.expand,
+                      headers: this.computedHeaders,
+                      isExpanded: this.isExpanded,
+                      isMobile: this.isMobile,
+                      isSelected: this.isSelected,
+                      select: this.select,
+                    });
+
+                    if (this.$scopedSlots.body) {
+                      return this.$scopedSlots.body(data);
+                    }
+
+                    return this.$createElement("tbody", [
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"]
+                      )(this, "body.prepend", data, true),
+                      this.genItems(props.items, props),
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"]
+                      )(this, "body.append", data, true),
+                    ]);
+                  },
+                  genFooters: function genFooters(props) {
+                    var data = {
+                      props: __assign(
+                        {
+                          options: props.options,
+                          pagination: props.pagination,
+                          itemsPerPageText:
+                            "$vuetify.dataTable.itemsPerPageText",
+                        },
+                        this.sanitizedFooterProps
+                      ),
+                      on: {
+                        "update:options": function updateOptions(value) {
+                          return props.updateOptions(value);
+                        },
+                      },
+                      widths: this.widths,
+                      headers: this.computedHeaders,
+                    };
+                    var children = [
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"]
+                      )(this, "footer", data, true),
+                    ];
+
+                    if (!this.hideDefaultFooter) {
+                      children.push(
+                        this.$createElement(
+                          _VDataIterator__WEBPACK_IMPORTED_MODULE_2__[
+                            "VDataFooter"
+                          ],
+                          __assign(__assign({}, data), {
+                            scopedSlots: Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                                "getPrefixedScopedSlots"
+                              ]
+                            )("footer.", this.$scopedSlots),
+                          })
+                        )
+                      );
+                    }
+
+                    return children;
+                  },
+                  genDefaultScopedSlot: function genDefaultScopedSlot(props) {
+                    var simpleProps = {
+                      height: this.height,
+                      fixedHeader: this.fixedHeader,
+                      dense: this.dense,
+                    }; // if (this.virtualRows) {
+                    //   return this.$createElement(VVirtualTable, {
+                    //     props: Object.assign(simpleProps, {
+                    //       items: props.items,
+                    //       height: this.height,
+                    //       rowHeight: this.dense ? 24 : 48,
+                    //       headerHeight: this.dense ? 32 : 48,
+                    //       // TODO: expose rest of props from virtual table?
+                    //     }),
+                    //     scopedSlots: {
+                    //       items: ({ items }) => this.genItems(items, props) as any,
+                    //     },
+                    //   }, [
+                    //     this.proxySlot('body.before', [this.genCaption(props), this.genHeaders(props)]),
+                    //     this.proxySlot('bottom', this.genFooters(props)),
+                    //   ])
+                    // }
+
+                    return this.$createElement(
+                      _VSimpleTable__WEBPACK_IMPORTED_MODULE_9__["default"],
+                      {
+                        props: simpleProps,
+                      },
+                      [
+                        this.proxySlot(
+                          "top",
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                              "getSlot"
+                            ]
+                          )(this, "top", props, true)
+                        ),
+                        this.genCaption(props),
+                        this.genColgroup(props),
+                        this.genHeaders(props),
+                        this.genBody(props),
+                        this.proxySlot("bottom", this.genFooters(props)),
+                      ]
+                    );
+                  },
+                  proxySlot: function proxySlot(slot, content) {
+                    return this.$createElement(
+                      "template",
+                      {
+                        slot: slot,
+                      },
+                      content
+                    );
+                  },
+                },
+                render: function render() {
+                  var _this = this;
+
+                  return this.$createElement(
+                    _VData__WEBPACK_IMPORTED_MODULE_1__["VData"],
+                    {
+                      props: __assign(__assign({}, this.$props), {
+                        customFilter: this.customFilterWithColumns,
+                        customSort: this.customSortWithHeaders,
+                        itemsPerPage: this.computedItemsPerPage,
+                      }),
+                      on: {
+                        "update:options": function updateOptions(v, old) {
+                          _this.internalGroupBy = v.groupBy || [];
+                          !Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                              "deepEqual"
+                            ]
+                          )(v, old) && _this.$emit("update:options", v);
+                        },
+                        "update:page": function updatePage(v) {
+                          return _this.$emit("update:page", v);
+                        },
+                        "update:items-per-page": function updateItemsPerPage(
+                          v
+                        ) {
+                          return _this.$emit("update:items-per-page", v);
+                        },
+                        "update:sort-by": function updateSortBy(v) {
+                          return _this.$emit("update:sort-by", v);
+                        },
+                        "update:sort-desc": function updateSortDesc(v) {
+                          return _this.$emit("update:sort-desc", v);
+                        },
+                        "update:group-by": function updateGroupBy(v) {
+                          return _this.$emit("update:group-by", v);
+                        },
+                        "update:group-desc": function updateGroupDesc(v) {
+                          return _this.$emit("update:group-desc", v);
+                        },
+                        pagination: function pagination(v, old) {
+                          return (
+                            !Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_14__[
+                                "deepEqual"
+                              ]
+                            )(v, old) && _this.$emit("pagination", v)
+                          );
+                        },
+                        "current-items": function currentItems(v) {
+                          _this.internalCurrentItems = v;
+
+                          _this.$emit("current-items", v);
+                        },
+                        "page-count": function pageCount(v) {
+                          return _this.$emit("page-count", v);
+                        },
+                      },
+                      scopedSlots: {
+                        default: this.genDefaultScopedSlot,
+                      },
+                    }
+                  );
+                },
+              });
 
-  if (input instanceof Date) {
-    var date = parseDate(input);
+            /***/
+          },
 
-    if (now) {
-      updateRelative(date, now, date.hasTime);
-    }
+        /***/ "./src/components/VDataTable/VDataTableHeader.sass":
+          /*!*********************************************************!*\
+  !*** ./src/components/VDataTable/VDataTableHeader.sass ***!
+  \*********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-    return date;
-  }
+        /***/ "./src/components/VDataTable/VDataTableHeader.ts":
+          /*!*******************************************************!*\
+  !*** ./src/components/VDataTable/VDataTableHeader.ts ***!
+  \*******************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDataTableHeader_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDataTableHeader.sass */ "./src/components/VDataTable/VDataTableHeader.sass"
+              );
+            /* harmony import */ var _VDataTableHeader_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDataTableHeader_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VDataTableHeaderMobile__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VDataTableHeaderMobile */ "./src/components/VDataTable/VDataTableHeaderMobile.ts"
+              );
+            /* harmony import */ var _VDataTableHeaderDesktop__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VDataTableHeaderDesktop */ "./src/components/VDataTable/VDataTableHeaderDesktop.ts"
+              );
+            /* harmony import */ var _mixins_header__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./mixins/header */ "./src/components/VDataTable/mixins/header.ts"
+              );
+            /* harmony import */ var _util_dedupeModelListeners__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/dedupeModelListeners */ "./src/util/dedupeModelListeners.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_rebuildFunctionalSlots__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/rebuildFunctionalSlots */ "./src/util/rebuildFunctionalSlots.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_7__
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            // Types
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_7___default.a.extend({
+                name: "v-data-table-header",
+                functional: true,
+                props: __assign(
+                  __assign(
+                    {},
+                    _mixins_header__WEBPACK_IMPORTED_MODULE_3__["default"]
+                      .options.props
+                  ),
+                  {
+                    mobile: Boolean,
+                  }
+                ),
+                render: function render(h, _a) {
+                  var props = _a.props,
+                    data = _a.data,
+                    slots = _a.slots;
+                  Object(
+                    _util_dedupeModelListeners__WEBPACK_IMPORTED_MODULE_4__[
+                      "default"
+                    ]
+                  )(data);
+                  var children = Object(
+                    _util_rebuildFunctionalSlots__WEBPACK_IMPORTED_MODULE_6__[
+                      "default"
+                    ]
+                  )(slots(), h);
+                  data = Object(
+                    _util_mergeData__WEBPACK_IMPORTED_MODULE_5__["default"]
+                  )(data, {
+                    props: props,
+                  });
+
+                  if (props.mobile) {
+                    return h(
+                      _VDataTableHeaderMobile__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ],
+                      data,
+                      children
+                    );
+                  } else {
+                    return h(
+                      _VDataTableHeaderDesktop__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ],
+                      data,
+                      children
+                    );
+                  }
+                },
+              });
 
-  if (typeof input !== 'string') {
-    if (required) {
-      throw new Error(input + " is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.");
-    }
+            /***/
+          },
 
-    return null;
-  } // YYYY-MM-DD hh:mm:ss
+        /***/ "./src/components/VDataTable/VDataTableHeaderDesktop.ts":
+          /*!**************************************************************!*\
+  !*** ./src/components/VDataTable/VDataTableHeaderDesktop.ts ***!
+  \**************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _mixins_header__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./mixins/header */ "./src/components/VDataTable/mixins/header.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-  var parts = PARSE_REGEX.exec(input);
+                return ar;
+              };
 
-  if (!parts) {
-    if (required) {
-      throw new Error(input + " is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.");
-    }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-    return null;
-  }
+                return ar;
+              };
 
-  var timestamp = {
-    date: input,
-    time: '',
-    year: parseInt(parts[1]),
-    month: parseInt(parts[2]),
-    day: parseInt(parts[4]) || 1,
-    hour: parseInt(parts[6]) || 0,
-    minute: parseInt(parts[8]) || 0,
-    weekday: 0,
-    hasDay: !!parts[4],
-    hasTime: !!(parts[6] && parts[8]),
-    past: false,
-    present: false,
-    future: false
-  };
-  updateWeekday(timestamp);
-  updateFormatted(timestamp);
-
-  if (now) {
-    updateRelative(timestamp, now, timestamp.hasTime);
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(
+                _mixins_header__WEBPACK_IMPORTED_MODULE_1__["default"]
+              ).extend({
+                name: "v-data-table-header-desktop",
+                methods: {
+                  genGroupByToggle: function genGroupByToggle(header) {
+                    var _this = this;
+
+                    return this.$createElement(
+                      "span",
+                      {
+                        on: {
+                          click: function click(e) {
+                            e.stopPropagation();
+
+                            _this.$emit("group", header.value);
+                          },
+                        },
+                      },
+                      ["group"]
+                    );
+                  },
+                  getAria: function getAria(beingSorted, isDesc) {
+                    var _this = this;
+
+                    var $t = function $t(key) {
+                      return _this.$vuetify.lang.t(
+                        "$vuetify.dataTable.ariaLabel." + key
+                      );
+                    };
+
+                    var ariaSort = "none";
+                    var ariaLabel = [$t("sortNone"), $t("activateAscending")];
+
+                    if (!beingSorted) {
+                      return {
+                        ariaSort: ariaSort,
+                        ariaLabel: ariaLabel.join(" "),
+                      };
+                    }
+
+                    if (isDesc) {
+                      ariaSort = "descending";
+                      ariaLabel = [
+                        $t("sortDescending"),
+                        $t(
+                          this.options.mustSort
+                            ? "activateAscending"
+                            : "activateNone"
+                        ),
+                      ];
+                    } else {
+                      ariaSort = "ascending";
+                      ariaLabel = [
+                        $t("sortAscending"),
+                        $t("activateDescending"),
+                      ];
+                    }
+
+                    return {
+                      ariaSort: ariaSort,
+                      ariaLabel: ariaLabel.join(" "),
+                    };
+                  },
+                  genHeader: function genHeader(header) {
+                    var _this = this;
+
+                    var data = {
+                      attrs: {
+                        role: "columnheader",
+                        scope: "col",
+                        "aria-label": header.text || "",
+                      },
+                      style: {
+                        width: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                            "convertToUnit"
+                          ]
+                        )(header.width),
+                        minWidth: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                            "convertToUnit"
+                          ]
+                        )(header.width),
+                      },
+                      class: __spread(
+                        ["text-" + (header.align || "start")],
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                            "wrapInArray"
+                          ]
+                        )(header.class),
+                        [header.divider && "v-data-table__divider"]
+                      ),
+                      on: {},
+                    };
+                    var children = [];
+
+                    if (
+                      header.value === "data-table-select" &&
+                      !this.singleSelect
+                    ) {
+                      return this.$createElement("th", data, [
+                        this.genSelectAll(),
+                      ]);
+                    }
+
+                    children.push(
+                      this.$scopedSlots[header.value]
+                        ? this.$scopedSlots[header.value]({
+                            header: header,
+                          })
+                        : this.$createElement("span", [header.text])
+                    );
+
+                    if (
+                      !this.disableSort &&
+                      (header.sortable || !header.hasOwnProperty("sortable"))
+                    ) {
+                      data.on.click = function () {
+                        return _this.$emit("sort", header.value);
+                      };
+
+                      var sortIndex = this.options.sortBy.findIndex(function (
+                        k
+                      ) {
+                        return k === header.value;
+                      });
+                      var beingSorted = sortIndex >= 0;
+                      var isDesc = this.options.sortDesc[sortIndex];
+                      data.class.push("sortable");
+
+                      var _a = this.getAria(beingSorted, isDesc),
+                        ariaLabel = _a.ariaLabel,
+                        ariaSort = _a.ariaSort;
+
+                      data.attrs["aria-label"] +=
+                        "" + (header.text ? ": " : "") + ariaLabel;
+                      data.attrs["aria-sort"] = ariaSort;
+
+                      if (beingSorted) {
+                        data.class.push("active");
+                        data.class.push(isDesc ? "desc" : "asc");
+                      }
+
+                      if (header.align === "end")
+                        children.unshift(this.genSortIcon());
+                      else children.push(this.genSortIcon());
+
+                      if (this.options.multiSort && beingSorted) {
+                        children.push(
+                          this.$createElement(
+                            "span",
+                            {
+                              class: "v-data-table-header__sort-badge",
+                            },
+                            [String(sortIndex + 1)]
+                          )
+                        );
+                      }
+                    }
+
+                    if (this.showGroupBy && header.groupable !== false)
+                      children.push(this.genGroupByToggle(header));
+                    return this.$createElement("th", data, children);
+                  },
+                },
+                render: function render() {
+                  var _this = this;
+
+                  return this.$createElement(
+                    "thead",
+                    {
+                      staticClass: "v-data-table-header",
+                    },
+                    [
+                      this.$createElement(
+                        "tr",
+                        this.headers.map(function (header) {
+                          return _this.genHeader(header);
+                        })
+                      ),
+                    ]
+                  );
+                },
+              });
 
-  return timestamp;
-}
-function parseDate(date) {
-  return updateFormatted({
-    date: '',
-    time: '',
-    year: date.getFullYear(),
-    month: date.getMonth() + 1,
-    day: date.getDate(),
-    weekday: date.getDay(),
-    hour: date.getHours(),
-    minute: date.getMinutes(),
-    hasDay: true,
-    hasTime: true,
-    past: false,
-    present: true,
-    future: false
-  });
-}
-function getDayIdentifier(timestamp) {
-  return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day;
-}
-function getTimeIdentifier(timestamp) {
-  return timestamp.hour * OFFSET_HOUR + timestamp.minute;
-}
-function getTimestampIdentifier(timestamp) {
-  return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp);
-}
-function updateRelative(timestamp, now, time) {
-  if (time === void 0) {
-    time = false;
-  }
+            /***/
+          },
 
-  var a = getDayIdentifier(now);
-  var b = getDayIdentifier(timestamp);
-  var present = a === b;
+        /***/ "./src/components/VDataTable/VDataTableHeaderMobile.ts":
+          /*!*************************************************************!*\
+  !*** ./src/components/VDataTable/VDataTableHeaderMobile.ts ***!
+  \*************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts"
+              );
+            /* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VChip */ "./src/components/VChip/index.ts"
+              );
+            /* harmony import */ var _mixins_header__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./mixins/header */ "./src/components/VDataTable/mixins/header.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-  if (timestamp.hasTime && time && present) {
-    a = getTimeIdentifier(now);
-    b = getTimeIdentifier(timestamp);
-    present = a === b;
-  }
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-  timestamp.past = b < a;
-  timestamp.present = present;
-  timestamp.future = b > a;
-  return timestamp;
-}
-function isTimedless(input) {
-  return input instanceof Date || typeof input === 'number' && isFinite(input);
-}
-function updateHasTime(timestamp, hasTime, now) {
-  if (timestamp.hasTime !== hasTime) {
-    timestamp.hasTime = hasTime;
-
-    if (!hasTime) {
-      timestamp.hour = HOUR_MAX;
-      timestamp.minute = MINUTE_MAX;
-      timestamp.time = getTime(timestamp);
-    }
-
-    if (now) {
-      updateRelative(timestamp, now, timestamp.hasTime);
-    }
-  }
+                return ar;
+              };
 
-  return timestamp;
-}
-function updateMinutes(timestamp, minutes, now) {
-  timestamp.hasTime = true;
-  timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR);
-  timestamp.minute = minutes % MINUTES_IN_HOUR;
-  timestamp.time = getTime(timestamp);
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-  if (now) {
-    updateRelative(timestamp, now, true);
-  }
+                return ar;
+              };
 
-  return timestamp;
-}
-function updateWeekday(timestamp) {
-  timestamp.weekday = getWeekday(timestamp);
-  return timestamp;
-}
-function updateFormatted(timestamp) {
-  timestamp.time = getTime(timestamp);
-  timestamp.date = getDate(timestamp);
-  return timestamp;
-}
-function getWeekday(timestamp) {
-  if (timestamp.hasDay) {
-    var _ = Math.floor;
-    var k = timestamp.day;
-    var m = (timestamp.month + 9) % MONTH_MAX + 1;
-
-    var C = _(timestamp.year / 100);
-
-    var Y = timestamp.year % 100 - (timestamp.month <= 2 ? 1 : 0);
-    return ((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7 + 7) % 7;
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(
+                _mixins_header__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "v-data-table-header-mobile",
+                props: {
+                  sortByText: {
+                    type: String,
+                    default: "$vuetify.dataTable.sortBy",
+                  },
+                },
+                methods: {
+                  genSortChip: function genSortChip(props) {
+                    var _this = this;
+
+                    var children = [props.item.text];
+                    var sortIndex = this.options.sortBy.findIndex(function (k) {
+                      return k === props.item.value;
+                    });
+                    var beingSorted = sortIndex >= 0;
+                    var isDesc = this.options.sortDesc[sortIndex];
+                    children.push(
+                      this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-chip__close",
+                          class: {
+                            sortable: true,
+                            active: beingSorted,
+                            asc: beingSorted && !isDesc,
+                            desc: beingSorted && isDesc,
+                          },
+                        },
+                        [this.genSortIcon()]
+                      )
+                    );
+                    return this.$createElement(
+                      _VChip__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        staticClass: "sortable",
+                        on: {
+                          click: function click(e) {
+                            e.stopPropagation();
+
+                            _this.$emit("sort", props.item.value);
+                          },
+                        },
+                      },
+                      children
+                    );
+                  },
+                  genSortSelect: function genSortSelect(items) {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        props: {
+                          label: this.$vuetify.lang.t(this.sortByText),
+                          items: items,
+                          hideDetails: true,
+                          multiple: this.options.multiSort,
+                          value: this.options.multiSort
+                            ? this.options.sortBy
+                            : this.options.sortBy[0],
+                          menuProps: {
+                            closeOnContentClick: true,
+                          },
+                        },
+                        on: {
+                          change: function change(v) {
+                            return _this.$emit("sort", v);
+                          },
+                        },
+                        scopedSlots: {
+                          selection: function selection(props) {
+                            return _this.genSortChip(props);
+                          },
+                        },
+                      }
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var children = [];
+                  var header = this.headers.find(function (h) {
+                    return h.value === "data-table-select";
+                  });
+
+                  if (header && !this.singleSelect) {
+                    children.push(
+                      this.$createElement(
+                        "div",
+                        {
+                          class: __spread(
+                            ["v-data-table-header-mobile__select"],
+                            Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                                "wrapInArray"
+                              ]
+                            )(header.class)
+                          ),
+                          attrs: {
+                            width: header.width,
+                          },
+                        },
+                        [this.genSelectAll()]
+                      )
+                    );
+                  }
 
-  return timestamp.weekday;
-}
-function daysInMonth(year, month) {
-  return Object(_util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_0__["isLeapYear"])(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month];
-}
-function copyTimestamp(timestamp) {
-  var date = timestamp.date,
-      time = timestamp.time,
-      year = timestamp.year,
-      month = timestamp.month,
-      day = timestamp.day,
-      weekday = timestamp.weekday,
-      hour = timestamp.hour,
-      minute = timestamp.minute,
-      hasDay = timestamp.hasDay,
-      hasTime = timestamp.hasTime,
-      past = timestamp.past,
-      present = timestamp.present,
-      future = timestamp.future;
-  return {
-    date: date,
-    time: time,
-    year: year,
-    month: month,
-    day: day,
-    weekday: weekday,
-    hour: hour,
-    minute: minute,
-    hasDay: hasDay,
-    hasTime: hasTime,
-    past: past,
-    present: present,
-    future: future
-  };
-}
-function padNumber(x, length) {
-  var padded = String(x);
-
-  while (padded.length < length) {
-    padded = '0' + padded;
-  }
+                  var sortHeaders = this.headers
+                    .filter(function (h) {
+                      return (
+                        h.sortable !== false && h.value !== "data-table-select"
+                      );
+                    })
+                    .map(function (h) {
+                      return {
+                        text: h.text,
+                        value: h.value,
+                      };
+                    });
+
+                  if (!this.disableSort && sortHeaders.length) {
+                    children.push(this.genSortSelect(sortHeaders));
+                  }
 
-  return padded;
-}
-function getDate(timestamp) {
-  var str = padNumber(timestamp.year, 4) + "-" + padNumber(timestamp.month, 2);
-  if (timestamp.hasDay) str += "-" + padNumber(timestamp.day, 2);
-  return str;
-}
-function getTime(timestamp) {
-  if (!timestamp.hasTime) {
-    return '';
-  }
+                  var th = h("th", [
+                    h(
+                      "div",
+                      {
+                        staticClass: "v-data-table-header-mobile__wrapper",
+                      },
+                      children
+                    ),
+                  ]);
+                  var tr = h("tr", [th]);
+                  return h(
+                    "thead",
+                    {
+                      staticClass:
+                        "v-data-table-header v-data-table-header-mobile",
+                    },
+                    [tr]
+                  );
+                },
+              });
 
-  return padNumber(timestamp.hour, 2) + ":" + padNumber(timestamp.minute, 2);
-}
-function nextMinutes(timestamp, minutes) {
-  timestamp.minute += minutes;
+            /***/
+          },
 
-  while (timestamp.minute > MINUTES_IN_HOUR) {
-    timestamp.minute -= MINUTES_IN_HOUR;
-    timestamp.hour++;
+        /***/ "./src/components/VDataTable/VEditDialog.sass":
+          /*!****************************************************!*\
+  !*** ./src/components/VDataTable/VEditDialog.sass ***!
+  \****************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-    if (timestamp.hour >= HOURS_IN_DAY) {
-      nextDay(timestamp);
-      timestamp.hour = FIRST_HOUR;
-    }
-  }
+        /***/ "./src/components/VDataTable/VEditDialog.ts":
+          /*!**************************************************!*\
+  !*** ./src/components/VDataTable/VEditDialog.ts ***!
+  \**************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VEditDialog_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VEditDialog.sass */ "./src/components/VDataTable/VEditDialog.sass"
+              );
+            /* harmony import */ var _VEditDialog_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VEditDialog_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_returnable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/returnable */ "./src/mixins/returnable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../VMenu */ "./src/components/VMenu/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Styles
+            // Mixins
+
+            // Utils
+
+            // Component
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(
+                _mixins_returnable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "v-edit-dialog",
+                props: {
+                  cancelText: {
+                    default: "Cancel",
+                  },
+                  large: Boolean,
+                  eager: Boolean,
+                  persistent: Boolean,
+                  saveText: {
+                    default: "Save",
+                  },
+                  transition: {
+                    type: String,
+                    default: "slide-x-reverse-transition",
+                  },
+                },
+                data: function data() {
+                  return {
+                    isActive: false,
+                  };
+                },
+                watch: {
+                  isActive: function isActive(val) {
+                    if (val) {
+                      this.$emit("open");
+                      setTimeout(this.focus, 50); // Give DOM time to paint
+                    } else {
+                      this.$emit("close");
+                    }
+                  },
+                },
+                methods: {
+                  cancel: function cancel() {
+                    this.isActive = false;
+                    this.$emit("cancel");
+                  },
+                  focus: function focus() {
+                    var input = this.$refs.content.querySelector("input");
+                    input && input.focus();
+                  },
+                  genButton: function genButton(fn, text) {
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_4__["default"],
+                      {
+                        props: {
+                          text: true,
+                          color: "primary",
+                          light: true,
+                        },
+                        on: {
+                          click: fn,
+                        },
+                      },
+                      text
+                    );
+                  },
+                  genActions: function genActions() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        class: "v-small-dialog__actions",
+                      },
+                      [
+                        this.genButton(this.cancel, this.cancelText),
+                        this.genButton(function () {
+                          _this.save(_this.returnValue);
+
+                          _this.$emit("save");
+                        }, this.saveText),
+                      ]
+                    );
+                  },
+                  genContent: function genContent() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-small-dialog__content",
+                        on: {
+                          keydown: function keydown(e) {
+                            e.keyCode ===
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                                "keyCodes"
+                              ].esc && _this.cancel();
+
+                            if (
+                              e.keyCode ===
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                                "keyCodes"
+                              ].enter
+                            ) {
+                              _this.save(_this.returnValue);
+
+                              _this.$emit("save");
+                            }
+                          },
+                        },
+                        ref: "content",
+                      },
+                      [this.$slots.input]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  return h(
+                    _VMenu__WEBPACK_IMPORTED_MODULE_5__["default"],
+                    {
+                      staticClass: "v-small-dialog",
+                      class: this.themeClasses,
+                      props: {
+                        contentClass: "v-small-dialog__menu-content",
+                        transition: this.transition,
+                        origin: "top right",
+                        right: true,
+                        value: this.isActive,
+                        closeOnClick: !this.persistent,
+                        closeOnContentClick: false,
+                        eager: this.eager,
+                        light: this.light,
+                        dark: this.dark,
+                      },
+                      on: {
+                        input: function input(val) {
+                          return (_this.isActive = val);
+                        },
+                      },
+                      scopedSlots: {
+                        activator: function activator(_a) {
+                          var on = _a.on;
+                          return h(
+                            "div",
+                            {
+                              staticClass: "v-small-dialog__activator",
+                              on: on,
+                            },
+                            [
+                              h(
+                                "span",
+                                {
+                                  staticClass:
+                                    "v-small-dialog__activator__content",
+                                },
+                                _this.$slots.default
+                              ),
+                            ]
+                          );
+                        },
+                      },
+                    },
+                    [this.genContent(), this.large ? this.genActions() : null]
+                  );
+                },
+              });
 
-  return timestamp;
-}
-function nextDay(timestamp) {
-  timestamp.day++;
-  timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK;
+            /***/
+          },
 
-  if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {
-    timestamp.day = DAY_MIN;
-    timestamp.month++;
+        /***/ "./src/components/VDataTable/VSimpleTable.sass":
+          /*!*****************************************************!*\
+  !*** ./src/components/VDataTable/VSimpleTable.sass ***!
+  \*****************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-    if (timestamp.month > MONTH_MAX) {
-      timestamp.month = MONTH_MIN;
-      timestamp.year++;
-    }
-  }
+        /***/ "./src/components/VDataTable/VSimpleTable.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VDataTable/VSimpleTable.ts ***!
+  \***************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSimpleTable_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSimpleTable.sass */ "./src/components/VDataTable/VSimpleTable.sass"
+              );
+            /* harmony import */ var _VSimpleTable_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSimpleTable_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  return timestamp;
-}
-function prevDay(timestamp) {
-  timestamp.day--;
-  timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK;
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "v-simple-table",
+                props: {
+                  dense: Boolean,
+                  fixedHeader: Boolean,
+                  height: [Number, String],
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-data-table--dense": this.dense,
+                        "v-data-table--fixed-height":
+                          !!this.height && !this.fixedHeader,
+                        "v-data-table--fixed-header": this.fixedHeader,
+                        "v-data-table--has-top": !!this.$slots.top,
+                        "v-data-table--has-bottom": !!this.$slots.bottom,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                },
+                methods: {
+                  genWrapper: function genWrapper() {
+                    return (
+                      this.$slots.wrapper ||
+                      this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-data-table__wrapper",
+                          style: {
+                            height: Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                                "convertToUnit"
+                              ]
+                            )(this.height),
+                          },
+                        },
+                        [this.$createElement("table", this.$slots.default)]
+                      )
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-data-table",
+                      class: this.classes,
+                    },
+                    [this.$slots.top, this.genWrapper(), this.$slots.bottom]
+                  );
+                },
+              });
 
-  if (timestamp.day < DAY_MIN) {
-    timestamp.month--;
+            /***/
+          },
 
-    if (timestamp.month < MONTH_MIN) {
-      timestamp.year--;
-      timestamp.month = MONTH_MAX;
-    }
+        /***/ "./src/components/VDataTable/VVirtualTable.sass":
+          /*!******************************************************!*\
+  !*** ./src/components/VDataTable/VVirtualTable.sass ***!
+  \******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-    timestamp.day = daysInMonth(timestamp.year, timestamp.month);
-  }
+        /***/ "./src/components/VDataTable/VVirtualTable.ts":
+          /*!****************************************************!*\
+  !*** ./src/components/VDataTable/VVirtualTable.ts ***!
+  \****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VVirtualTable_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VVirtualTable.sass */ "./src/components/VDataTable/VVirtualTable.sass"
+              );
+            /* harmony import */ var _VVirtualTable_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VVirtualTable_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSimpleTable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VSimpleTable */ "./src/components/VDataTable/VSimpleTable.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // Components
+
+            // Utiltiies
+
+            // Types
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"]
+            )(_VSimpleTable__WEBPACK_IMPORTED_MODULE_1__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-virtual-table",
+                props: {
+                  chunkSize: {
+                    type: Number,
+                    default: 25,
+                  },
+                  headerHeight: {
+                    type: Number,
+                    default: 48,
+                  },
+                  items: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  rowHeight: {
+                    type: Number,
+                    default: 48,
+                  },
+                },
+                data: function data() {
+                  return {
+                    scrollTop: 0,
+                    oldChunk: 0,
+                    scrollDebounce: null,
+                    invalidateCache: false,
+                  };
+                },
+                computed: {
+                  itemsLength: function itemsLength() {
+                    return this.items.length;
+                  },
+                  totalHeight: function totalHeight() {
+                    return (
+                      this.itemsLength * this.rowHeight + this.headerHeight
+                    );
+                  },
+                  topIndex: function topIndex() {
+                    return Math.floor(this.scrollTop / this.rowHeight);
+                  },
+                  chunkIndex: function chunkIndex() {
+                    return Math.floor(this.topIndex / this.chunkSize);
+                  },
+                  startIndex: function startIndex() {
+                    return Math.max(
+                      0,
+                      this.chunkIndex * this.chunkSize - this.chunkSize
+                    );
+                  },
+                  offsetTop: function offsetTop() {
+                    return Math.max(0, this.startIndex * this.rowHeight);
+                  },
+                  stopIndex: function stopIndex() {
+                    return Math.min(
+                      this.startIndex + this.chunkSize * 3,
+                      this.itemsLength
+                    );
+                  },
+                  offsetBottom: function offsetBottom() {
+                    return Math.max(
+                      0,
+                      (this.itemsLength - this.stopIndex - this.startIndex) *
+                        this.rowHeight
+                    );
+                  },
+                },
+                watch: {
+                  chunkIndex: function chunkIndex(newValue, oldValue) {
+                    this.oldChunk = oldValue;
+                  },
+                  items: function items() {
+                    this.cachedItems = null;
+                    this.$refs.table.scrollTop = 0;
+                  },
+                },
+                created: function created() {
+                  this.cachedItems = null;
+                },
+                mounted: function mounted() {
+                  this.scrollDebounce = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_3__["debounce"]
+                  )(this.onScroll, 50);
+                  this.$refs.table.addEventListener(
+                    "scroll",
+                    this.scrollDebounce,
+                    {
+                      passive: true,
+                    }
+                  );
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.$refs.table.removeEventListener(
+                    "scroll",
+                    this.scrollDebounce
+                  );
+                },
+                methods: {
+                  createStyleHeight: function createStyleHeight(height) {
+                    return {
+                      height: height + "px",
+                    };
+                  },
+                  genBody: function genBody() {
+                    if (
+                      this.cachedItems === null ||
+                      this.chunkIndex !== this.oldChunk
+                    ) {
+                      this.cachedItems = this.genItems();
+                      this.oldChunk = this.chunkIndex;
+                    }
+
+                    return this.$createElement("tbody", [
+                      this.$createElement("tr", {
+                        style: this.createStyleHeight(this.offsetTop),
+                      }),
+                      this.cachedItems,
+                      this.$createElement("tr", {
+                        style: this.createStyleHeight(this.offsetBottom),
+                      }),
+                    ]);
+                  },
+                  genItems: function genItems() {
+                    return this.$scopedSlots.items({
+                      items: this.items.slice(this.startIndex, this.stopIndex),
+                    });
+                  },
+                  onScroll: function onScroll(e) {
+                    var target = e.target;
+                    this.scrollTop = target.scrollTop;
+                  },
+                  genTable: function genTable() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        ref: "table",
+                        staticClass: "v-virtual-table__table",
+                      },
+                      [
+                        this.$createElement("table", [
+                          this.$slots["body.before"],
+                          this.genBody(),
+                          this.$slots["body.after"],
+                        ]),
+                      ]
+                    );
+                  },
+                  genWrapper: function genWrapper() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-virtual-table__wrapper",
+                        style: {
+                          height: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                              "convertToUnit"
+                            ]
+                          )(this.height),
+                        },
+                      },
+                      [this.genTable()]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-data-table v-virtual-table",
+                      class: this.classes,
+                    },
+                    [this.$slots.top, this.genWrapper(), this.$slots.bottom]
+                  );
+                },
+              });
 
-  return timestamp;
-}
-function relativeDays(timestamp, mover, days) {
-  if (mover === void 0) {
-    mover = nextDay;
-  }
+            /***/
+          },
 
-  if (days === void 0) {
-    days = 1;
-  }
+        /***/ "./src/components/VDataTable/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VDataTable/index.ts ***!
+  \********************************************/
+          /*! exports provided: VDataTable, VEditDialog, VTableOverflow, VDataTableHeader, VSimpleTable, VVirtualTable, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTableOverflow",
+              function () {
+                return VTableOverflow;
+              }
+            );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _VDataTable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VDataTable */ "./src/components/VDataTable/VDataTable.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataTable",
+              function () {
+                return _VDataTable__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _VDataTableHeader__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VDataTableHeader */ "./src/components/VDataTable/VDataTableHeader.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataTableHeader",
+              function () {
+                return _VDataTableHeader__WEBPACK_IMPORTED_MODULE_2__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VEditDialog__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VEditDialog */ "./src/components/VDataTable/VEditDialog.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VEditDialog",
+              function () {
+                return _VEditDialog__WEBPACK_IMPORTED_MODULE_3__["default"];
+              }
+            );
+
+            /* harmony import */ var _VSimpleTable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VSimpleTable */ "./src/components/VDataTable/VSimpleTable.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSimpleTable",
+              function () {
+                return _VSimpleTable__WEBPACK_IMPORTED_MODULE_4__["default"];
+              }
+            );
+
+            /* harmony import */ var _VVirtualTable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./VVirtualTable */ "./src/components/VDataTable/VVirtualTable.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VVirtualTable",
+              function () {
+                return _VVirtualTable__WEBPACK_IMPORTED_MODULE_5__["default"];
+              }
+            );
+
+            var VTableOverflow = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleFunctional"
+              ]
+            )("v-table__overflow");
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VDataTable: _VDataTable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VDataTableHeader:
+                  _VDataTableHeader__WEBPACK_IMPORTED_MODULE_2__["default"],
+                VEditDialog:
+                  _VEditDialog__WEBPACK_IMPORTED_MODULE_3__["default"],
+                VTableOverflow: VTableOverflow,
+                VSimpleTable:
+                  _VSimpleTable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                VVirtualTable:
+                  _VVirtualTable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              },
+            };
 
-  while (--days >= 0) {
-    mover(timestamp);
-  }
+            /***/
+          },
 
-  return timestamp;
-}
-function diffMinutes(min, max) {
-  var Y = (max.year - min.year) * 525600;
-  var M = (max.month - min.month) * 43800;
-  var D = (max.day - min.day) * 1440;
-  var h = (max.hour - min.hour) * 60;
-  var m = max.minute - min.minute;
-  return Y + M + D + h + m;
-}
-function findWeekday(timestamp, weekday, mover, maxDays) {
-  if (mover === void 0) {
-    mover = nextDay;
-  }
+        /***/ "./src/components/VDataTable/mixins/header.ts":
+          /*!****************************************************!*\
+  !*** ./src/components/VDataTable/mixins/header.ts ***!
+  \****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../VCheckbox/VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  if (maxDays === void 0) {
-    maxDays = 6;
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(
+                _util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"]
+              )().extend({
+                // https://github.com/vuejs/vue/issues/6872
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_2__["default"],
+                },
+                props: {
+                  headers: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  options: {
+                    type: Object,
+                    default: function _default() {
+                      return {
+                        page: 1,
+                        itemsPerPage: 10,
+                        sortBy: [],
+                        sortDesc: [],
+                        groupBy: [],
+                        groupDesc: [],
+                        multiSort: false,
+                        mustSort: false,
+                      };
+                    },
+                  },
+                  sortIcon: {
+                    type: String,
+                    default: "$sort",
+                  },
+                  everyItem: Boolean,
+                  someItems: Boolean,
+                  showGroupBy: Boolean,
+                  singleSelect: Boolean,
+                  disableSort: Boolean,
+                },
+                methods: {
+                  genSelectAll: function genSelectAll() {
+                    var _this = this;
+
+                    var data = {
+                      props: {
+                        value: this.everyItem,
+                        indeterminate: !this.everyItem && this.someItems,
+                      },
+                      on: {
+                        input: function input(v) {
+                          return _this.$emit("toggle-select-all", v);
+                        },
+                      },
+                    };
+
+                    if (this.$scopedSlots["data-table-select"]) {
+                      return this.$scopedSlots["data-table-select"](data);
+                    }
+
+                    return this.$createElement(
+                      _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ],
+                      __assign(
+                        {
+                          staticClass: "v-data-table__checkbox",
+                        },
+                        data
+                      )
+                    );
+                  },
+                  genSortIcon: function genSortIcon() {
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_0__["default"],
+                      {
+                        staticClass: "v-data-table-header__icon",
+                        props: {
+                          size: 18,
+                        },
+                      },
+                      [this.sortIcon]
+                    );
+                  },
+                },
+              });
 
-  while (timestamp.weekday !== weekday && --maxDays >= 0) {
-    mover(timestamp);
-  }
+            /***/
+          },
 
-  return timestamp;
-}
-function getWeekdaySkips(weekdays) {
-  var skips = [1, 1, 1, 1, 1, 1, 1];
-  var filled = [0, 0, 0, 0, 0, 0, 0];
+        /***/ "./src/components/VDatePicker/VDatePicker.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePicker.ts ***!
+  \***************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDatePickerTitle */ "./src/components/VDatePicker/VDatePickerTitle.ts"
+              );
+            /* harmony import */ var _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VDatePickerHeader */ "./src/components/VDatePicker/VDatePickerHeader.ts"
+              );
+            /* harmony import */ var _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VDatePickerDateTable */ "./src/components/VDatePicker/VDatePickerDateTable.ts"
+              );
+            /* harmony import */ var _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VDatePickerMonthTable */ "./src/components/VDatePicker/VDatePickerMonthTable.ts"
+              );
+            /* harmony import */ var _VDatePickerYears__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VDatePickerYears */ "./src/components/VDatePicker/VDatePickerYears.ts"
+              );
+            /* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/localable */ "./src/mixins/localable/index.ts"
+              );
+            /* harmony import */ var _mixins_picker__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/picker */ "./src/mixins/picker/index.ts"
+              );
+            /* harmony import */ var _util_isDateAllowed__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ./util/isDateAllowed */ "./src/components/VDatePicker/util/isDateAllowed.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _VCalendar_util_timestamp__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../VCalendar/util/timestamp */ "./src/components/VCalendar/util/timestamp.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VDatePicker/util/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  for (var i = 0; i < weekdays.length; i++) {
-    filled[weekdays[i]] = 1;
-  }
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-  for (var k = 0; k < DAYS_IN_WEEK; k++) {
-    var skip = 1;
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-    for (var j = 1; j < DAYS_IN_WEEK; j++) {
-      var next = (k + j) % DAYS_IN_WEEK;
+                return ar;
+              }; // Components
+
+            // Mixins
+
+            // Utils
+
+            // Adds leading zero to month/day if necessary, returns 'YYYY' if type = 'year',
+            // 'YYYY-MM' if 'month' and 'YYYY-MM-DD' if 'date'
+
+            function sanitizeDateString(dateString, type) {
+              var _a = __read(dateString.split("-"), 3),
+                year = _a[0],
+                _b = _a[1],
+                month = _b === void 0 ? 1 : _b,
+                _c = _a[2],
+                date = _c === void 0 ? 1 : _c;
+
+              return (
+                year +
+                "-" +
+                Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(month) +
+                "-" +
+                Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(date)
+              ).substr(
+                0,
+                {
+                  date: 10,
+                  month: 7,
+                  year: 4,
+                }[type]
+              );
+            }
 
-      if (filled[next]) {
-        break;
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(
+                _mixins_localable__WEBPACK_IMPORTED_MODULE_5__["default"],
+                _mixins_picker__WEBPACK_IMPORTED_MODULE_6__["default"]
+              ).extend({
+                name: "v-date-picker",
+                props: {
+                  allowedDates: Function,
+                  // Function formatting the day in date picker table
+                  dayFormat: Function,
+                  disabled: Boolean,
+                  events: {
+                    type: [Array, Function, Object],
+                    default: function _default() {
+                      return null;
+                    },
+                  },
+                  eventColor: {
+                    type: [Array, Function, Object, String],
+                    default: function _default() {
+                      return "warning";
+                    },
+                  },
+                  firstDayOfWeek: {
+                    type: [String, Number],
+                    default: 0,
+                  },
+                  // Function formatting the tableDate in the day/month table header
+                  headerDateFormat: Function,
+                  localeFirstDayOfYear: {
+                    type: [String, Number],
+                    default: 0,
+                  },
+                  max: String,
+                  min: String,
+                  // Function formatting month in the months table
+                  monthFormat: Function,
+                  multiple: Boolean,
+                  nextIcon: {
+                    type: String,
+                    default: "$next",
+                  },
+                  nextMonthAriaLabel: {
+                    type: String,
+                    default: "$vuetify.datePicker.nextMonthAriaLabel",
+                  },
+                  nextYearAriaLabel: {
+                    type: String,
+                    default: "$vuetify.datePicker.nextYearAriaLabel",
+                  },
+                  pickerDate: String,
+                  prevIcon: {
+                    type: String,
+                    default: "$prev",
+                  },
+                  prevMonthAriaLabel: {
+                    type: String,
+                    default: "$vuetify.datePicker.prevMonthAriaLabel",
+                  },
+                  prevYearAriaLabel: {
+                    type: String,
+                    default: "$vuetify.datePicker.prevYearAriaLabel",
+                  },
+                  range: Boolean,
+                  reactive: Boolean,
+                  readonly: Boolean,
+                  scrollable: Boolean,
+                  showCurrent: {
+                    type: [Boolean, String],
+                    default: true,
+                  },
+                  selectedItemsText: {
+                    type: String,
+                    default: "$vuetify.datePicker.itemsSelected",
+                  },
+                  showWeek: Boolean,
+                  // Function formatting currently selected date in the picker title
+                  titleDateFormat: Function,
+                  type: {
+                    type: String,
+                    default: "date",
+                    validator: function validator(type) {
+                      return ["date", "month"].includes(type);
+                    },
+                  },
+                  value: [Array, String],
+                  weekdayFormat: Function,
+                  // Function formatting the year in table header and pickup title
+                  yearFormat: Function,
+                  yearIcon: String,
+                },
+                data: function data() {
+                  var _this = this;
+
+                  var now = new Date();
+                  return {
+                    activePicker: this.type.toUpperCase(),
+                    inputDay: null,
+                    inputMonth: null,
+                    inputYear: null,
+                    isReversing: false,
+                    now: now,
+                    // tableDate is a string in 'YYYY' / 'YYYY-M' format (leading zero for month is not required)
+                    tableDate: (function () {
+                      if (_this.pickerDate) {
+                        return _this.pickerDate;
+                      }
+
+                      var multipleValue = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_9__[
+                          "wrapInArray"
+                        ]
+                      )(_this.value);
+                      var date =
+                        multipleValue[multipleValue.length - 1] ||
+                        (typeof _this.showCurrent === "string"
+                          ? _this.showCurrent
+                          : now.getFullYear() + "-" + (now.getMonth() + 1));
+                      return sanitizeDateString(
+                        date,
+                        _this.type === "date" ? "month" : "year"
+                      );
+                    })(),
+                  };
+                },
+                computed: {
+                  multipleValue: function multipleValue() {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_9__["wrapInArray"]
+                    )(this.value);
+                  },
+                  isMultiple: function isMultiple() {
+                    return this.multiple || this.range;
+                  },
+                  lastValue: function lastValue() {
+                    return this.isMultiple
+                      ? this.multipleValue[this.multipleValue.length - 1]
+                      : this.value;
+                  },
+                  selectedMonths: function selectedMonths() {
+                    if (!this.value || this.type === "month") {
+                      return this.value;
+                    } else if (this.isMultiple) {
+                      return this.multipleValue.map(function (val) {
+                        return val.substr(0, 7);
+                      });
+                    } else {
+                      return this.value.substr(0, 7);
+                    }
+                  },
+                  current: function current() {
+                    if (this.showCurrent === true) {
+                      return sanitizeDateString(
+                        this.now.getFullYear() +
+                          "-" +
+                          (this.now.getMonth() + 1) +
+                          "-" +
+                          this.now.getDate(),
+                        this.type
+                      );
+                    }
+
+                    return this.showCurrent || null;
+                  },
+                  inputDate: function inputDate() {
+                    return this.type === "date"
+                      ? this.inputYear +
+                          "-" +
+                          Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(
+                            this.inputMonth + 1
+                          ) +
+                          "-" +
+                          Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(
+                            this.inputDay
+                          )
+                      : this.inputYear +
+                          "-" +
+                          Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(
+                            this.inputMonth + 1
+                          );
+                  },
+                  tableMonth: function tableMonth() {
+                    return (
+                      Number(
+                        (this.pickerDate || this.tableDate).split("-")[1]
+                      ) - 1
+                    );
+                  },
+                  tableYear: function tableYear() {
+                    return Number(
+                      (this.pickerDate || this.tableDate).split("-")[0]
+                    );
+                  },
+                  minMonth: function minMonth() {
+                    return this.min
+                      ? sanitizeDateString(this.min, "month")
+                      : null;
+                  },
+                  maxMonth: function maxMonth() {
+                    return this.max
+                      ? sanitizeDateString(this.max, "month")
+                      : null;
+                  },
+                  minYear: function minYear() {
+                    return this.min
+                      ? sanitizeDateString(this.min, "year")
+                      : null;
+                  },
+                  maxYear: function maxYear() {
+                    return this.max
+                      ? sanitizeDateString(this.max, "year")
+                      : null;
+                  },
+                  formatters: function formatters() {
+                    return {
+                      year:
+                        this.yearFormat ||
+                        Object(
+                          _util__WEBPACK_IMPORTED_MODULE_12__[
+                            "createNativeLocaleFormatter"
+                          ]
+                        )(
+                          this.currentLocale,
+                          {
+                            year: "numeric",
+                            timeZone: "UTC",
+                          },
+                          {
+                            length: 4,
+                          }
+                        ),
+                      titleDate:
+                        this.titleDateFormat ||
+                        (this.isMultiple
+                          ? this.defaultTitleMultipleDateFormatter
+                          : this.defaultTitleDateFormatter),
+                    };
+                  },
+                  defaultTitleMultipleDateFormatter:
+                    function defaultTitleMultipleDateFormatter() {
+                      var _this = this;
+
+                      return function (dates) {
+                        if (!dates.length) {
+                          return "-";
+                        }
+
+                        if (dates.length === 1) {
+                          return _this.defaultTitleDateFormatter(dates[0]);
+                        }
+
+                        return _this.$vuetify.lang.t(
+                          _this.selectedItemsText,
+                          dates.length
+                        );
+                      };
+                    },
+                  defaultTitleDateFormatter:
+                    function defaultTitleDateFormatter() {
+                      var titleFormats = {
+                        year: {
+                          year: "numeric",
+                          timeZone: "UTC",
+                        },
+                        month: {
+                          month: "long",
+                          timeZone: "UTC",
+                        },
+                        date: {
+                          weekday: "short",
+                          month: "short",
+                          day: "numeric",
+                          timeZone: "UTC",
+                        },
+                      };
+                      var titleDateFormatter = Object(
+                        _util__WEBPACK_IMPORTED_MODULE_12__[
+                          "createNativeLocaleFormatter"
+                        ]
+                      )(this.currentLocale, titleFormats[this.type], {
+                        start: 0,
+                        length: {
+                          date: 10,
+                          month: 7,
+                          year: 4,
+                        }[this.type],
+                      });
+
+                      var landscapeFormatter = function landscapeFormatter(
+                        date
+                      ) {
+                        return titleDateFormatter(date)
+                          .replace(
+                            /([^\d\s])([\d])/g,
+                            function (match, nonDigit, digit) {
+                              return nonDigit + " " + digit;
+                            }
+                          )
+                          .replace(", ", ",<br>");
+                      };
+
+                      return this.landscape
+                        ? landscapeFormatter
+                        : titleDateFormatter;
+                    },
+                },
+                watch: {
+                  tableDate: function tableDate(val, prev) {
+                    // Make a ISO 8601 strings from val and prev for comparision, otherwise it will incorrectly
+                    // compare for example '2000-9' and '2000-10'
+                    var sanitizeType = this.type === "month" ? "year" : "month";
+                    this.isReversing =
+                      sanitizeDateString(val, sanitizeType) <
+                      sanitizeDateString(prev, sanitizeType);
+                    this.$emit("update:picker-date", val);
+                  },
+                  pickerDate: function pickerDate(val) {
+                    if (val) {
+                      this.tableDate = val;
+                    } else if (this.lastValue && this.type === "date") {
+                      this.tableDate = sanitizeDateString(
+                        this.lastValue,
+                        "month"
+                      );
+                    } else if (this.lastValue && this.type === "month") {
+                      this.tableDate = sanitizeDateString(
+                        this.lastValue,
+                        "year"
+                      );
+                    }
+                  },
+                  value: function value(newValue, oldValue) {
+                    this.checkMultipleProp();
+                    this.setInputDate();
+
+                    if (
+                      (!this.isMultiple && this.value && !this.pickerDate) ||
+                      (this.isMultiple &&
+                        this.multipleValue.length &&
+                        (!oldValue || !oldValue.length) &&
+                        !this.pickerDate)
+                    ) {
+                      this.tableDate = sanitizeDateString(
+                        this.inputDate,
+                        this.type === "month" ? "year" : "month"
+                      );
+                    }
+                  },
+                  type: function type(_type) {
+                    this.activePicker = _type.toUpperCase();
+
+                    if (this.value && this.value.length) {
+                      var output = this.multipleValue
+                        .map(function (val) {
+                          return sanitizeDateString(val, _type);
+                        })
+                        .filter(this.isDateAllowed);
+                      this.$emit("input", this.isMultiple ? output : output[0]);
+                    }
+                  },
+                },
+                created: function created() {
+                  this.checkMultipleProp();
+
+                  if (this.pickerDate !== this.tableDate) {
+                    this.$emit("update:picker-date", this.tableDate);
+                  }
 
-      skip++;
-    }
+                  this.setInputDate();
+                },
+                methods: {
+                  emitInput: function emitInput(newInput) {
+                    if (this.range) {
+                      if (this.multipleValue.length !== 1) {
+                        this.$emit("input", [newInput]);
+                      } else {
+                        var output_1 = [this.multipleValue[0], newInput];
+                        this.$emit("input", output_1);
+                        this.$emit("change", output_1);
+                      }
+
+                      return;
+                    }
+
+                    var output = this.multiple
+                      ? this.multipleValue.indexOf(newInput) === -1
+                        ? this.multipleValue.concat([newInput])
+                        : this.multipleValue.filter(function (x) {
+                            return x !== newInput;
+                          })
+                      : newInput;
+                    this.$emit("input", output);
+                    this.multiple || this.$emit("change", newInput);
+                  },
+                  checkMultipleProp: function checkMultipleProp() {
+                    if (this.value == null) return;
+                    var valueType = this.value.constructor.name;
+                    var expected = this.isMultiple ? "Array" : "String";
+
+                    if (valueType !== expected) {
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_11__[
+                          "consoleWarn"
+                        ]
+                      )(
+                        "Value must be " +
+                          (this.isMultiple ? "an" : "a") +
+                          " " +
+                          expected +
+                          ", got " +
+                          valueType,
+                        this
+                      );
+                    }
+                  },
+                  isDateAllowed: function isDateAllowed(value) {
+                    return Object(
+                      _util_isDateAllowed__WEBPACK_IMPORTED_MODULE_7__[
+                        "default"
+                      ]
+                    )(value, this.min, this.max, this.allowedDates);
+                  },
+                  yearClick: function yearClick(value) {
+                    this.inputYear = value;
+
+                    if (this.type === "month") {
+                      this.tableDate = "" + value;
+                    } else {
+                      this.tableDate =
+                        value +
+                        "-" +
+                        Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(
+                          (this.tableMonth || 0) + 1
+                        );
+                    }
+
+                    this.activePicker = "MONTH";
+
+                    if (
+                      this.reactive &&
+                      !this.readonly &&
+                      !this.isMultiple &&
+                      this.isDateAllowed(this.inputDate)
+                    ) {
+                      this.$emit("input", this.inputDate);
+                    }
+                  },
+                  monthClick: function monthClick(value) {
+                    this.inputYear = parseInt(value.split("-")[0], 10);
+                    this.inputMonth = parseInt(value.split("-")[1], 10) - 1;
+
+                    if (this.type === "date") {
+                      if (this.inputDay) {
+                        this.inputDay = Math.min(
+                          this.inputDay,
+                          Object(
+                            _VCalendar_util_timestamp__WEBPACK_IMPORTED_MODULE_10__[
+                              "daysInMonth"
+                            ]
+                          )(this.inputYear, this.inputMonth + 1)
+                        );
+                      }
+
+                      this.tableDate = value;
+                      this.activePicker = "DATE";
+
+                      if (
+                        this.reactive &&
+                        !this.readonly &&
+                        !this.isMultiple &&
+                        this.isDateAllowed(this.inputDate)
+                      ) {
+                        this.$emit("input", this.inputDate);
+                      }
+                    } else {
+                      this.emitInput(this.inputDate);
+                    }
+                  },
+                  dateClick: function dateClick(value) {
+                    this.inputYear = parseInt(value.split("-")[0], 10);
+                    this.inputMonth = parseInt(value.split("-")[1], 10) - 1;
+                    this.inputDay = parseInt(value.split("-")[2], 10);
+                    this.emitInput(this.inputDate);
+                  },
+                  genPickerTitle: function genPickerTitle() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_0__["default"],
+                      {
+                        props: {
+                          date: this.value
+                            ? this.formatters.titleDate(
+                                this.isMultiple
+                                  ? this.multipleValue
+                                  : this.value
+                              )
+                            : "",
+                          disabled: this.disabled,
+                          readonly: this.readonly,
+                          selectingYear: this.activePicker === "YEAR",
+                          year: this.formatters.year(
+                            this.multipleValue.length
+                              ? "" + this.inputYear
+                              : this.tableDate
+                          ),
+                          yearIcon: this.yearIcon,
+                          value: this.multipleValue[0],
+                        },
+                        slot: "title",
+                        on: {
+                          "update:selecting-year": function updateSelectingYear(
+                            value
+                          ) {
+                            return (_this.activePicker = value
+                              ? "YEAR"
+                              : _this.type.toUpperCase());
+                          },
+                        },
+                      }
+                    );
+                  },
+                  genTableHeader: function genTableHeader() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ],
+                      {
+                        props: {
+                          nextIcon: this.nextIcon,
+                          color: this.color,
+                          dark: this.dark,
+                          disabled: this.disabled,
+                          format: this.headerDateFormat,
+                          light: this.light,
+                          locale: this.locale,
+                          min:
+                            this.activePicker === "DATE"
+                              ? this.minMonth
+                              : this.minYear,
+                          max:
+                            this.activePicker === "DATE"
+                              ? this.maxMonth
+                              : this.maxYear,
+                          nextAriaLabel:
+                            this.activePicker === "DATE"
+                              ? this.nextMonthAriaLabel
+                              : this.nextYearAriaLabel,
+                          prevAriaLabel:
+                            this.activePicker === "DATE"
+                              ? this.prevMonthAriaLabel
+                              : this.prevYearAriaLabel,
+                          prevIcon: this.prevIcon,
+                          readonly: this.readonly,
+                          value:
+                            this.activePicker === "DATE"
+                              ? Object(
+                                  _util__WEBPACK_IMPORTED_MODULE_12__["pad"]
+                                )(this.tableYear, 4) +
+                                "-" +
+                                Object(
+                                  _util__WEBPACK_IMPORTED_MODULE_12__["pad"]
+                                )(this.tableMonth + 1)
+                              : "" +
+                                Object(
+                                  _util__WEBPACK_IMPORTED_MODULE_12__["pad"]
+                                )(this.tableYear, 4),
+                        },
+                        on: {
+                          toggle: function toggle() {
+                            return (_this.activePicker =
+                              _this.activePicker === "DATE" ? "MONTH" : "YEAR");
+                          },
+                          input: function input(value) {
+                            return (_this.tableDate = value);
+                          },
+                        },
+                      }
+                    );
+                  },
+                  genDateTable: function genDateTable() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ],
+                      {
+                        props: {
+                          allowedDates: this.allowedDates,
+                          color: this.color,
+                          current: this.current,
+                          dark: this.dark,
+                          disabled: this.disabled,
+                          events: this.events,
+                          eventColor: this.eventColor,
+                          firstDayOfWeek: this.firstDayOfWeek,
+                          format: this.dayFormat,
+                          light: this.light,
+                          locale: this.locale,
+                          localeFirstDayOfYear: this.localeFirstDayOfYear,
+                          min: this.min,
+                          max: this.max,
+                          range: this.range,
+                          readonly: this.readonly,
+                          scrollable: this.scrollable,
+                          showWeek: this.showWeek,
+                          tableDate:
+                            Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(
+                              this.tableYear,
+                              4
+                            ) +
+                            "-" +
+                            Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(
+                              this.tableMonth + 1
+                            ),
+                          value: this.value,
+                          weekdayFormat: this.weekdayFormat,
+                        },
+                        ref: "table",
+                        on: __assign(
+                          {
+                            input: this.dateClick,
+                            "update:table-date": function updateTableDate(
+                              value
+                            ) {
+                              return (_this.tableDate = value);
+                            },
+                          },
+                          Object(
+                            _util__WEBPACK_IMPORTED_MODULE_12__[
+                              "createItemTypeListeners"
+                            ]
+                          )(this, ":date")
+                        ),
+                      }
+                    );
+                  },
+                  genMonthTable: function genMonthTable() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_3__[
+                        "default"
+                      ],
+                      {
+                        props: {
+                          allowedDates:
+                            this.type === "month" ? this.allowedDates : null,
+                          color: this.color,
+                          current: this.current
+                            ? sanitizeDateString(this.current, "month")
+                            : null,
+                          dark: this.dark,
+                          disabled: this.disabled,
+                          events: this.type === "month" ? this.events : null,
+                          eventColor:
+                            this.type === "month" ? this.eventColor : null,
+                          format: this.monthFormat,
+                          light: this.light,
+                          locale: this.locale,
+                          min: this.minMonth,
+                          max: this.maxMonth,
+                          range: this.range,
+                          readonly: this.readonly && this.type === "month",
+                          scrollable: this.scrollable,
+                          value: this.selectedMonths,
+                          tableDate:
+                            "" +
+                            Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(
+                              this.tableYear,
+                              4
+                            ),
+                        },
+                        ref: "table",
+                        on: __assign(
+                          {
+                            input: this.monthClick,
+                            "update:table-date": function updateTableDate(
+                              value
+                            ) {
+                              return (_this.tableDate = value);
+                            },
+                          },
+                          Object(
+                            _util__WEBPACK_IMPORTED_MODULE_12__[
+                              "createItemTypeListeners"
+                            ]
+                          )(this, ":month")
+                        ),
+                      }
+                    );
+                  },
+                  genYears: function genYears() {
+                    return this.$createElement(
+                      _VDatePickerYears__WEBPACK_IMPORTED_MODULE_4__["default"],
+                      {
+                        props: {
+                          color: this.color,
+                          format: this.yearFormat,
+                          locale: this.locale,
+                          min: this.minYear,
+                          max: this.maxYear,
+                          value: this.tableYear,
+                        },
+                        on: __assign(
+                          {
+                            input: this.yearClick,
+                          },
+                          Object(
+                            _util__WEBPACK_IMPORTED_MODULE_12__[
+                              "createItemTypeListeners"
+                            ]
+                          )(this, ":year")
+                        ),
+                      }
+                    );
+                  },
+                  genPickerBody: function genPickerBody() {
+                    var children =
+                      this.activePicker === "YEAR"
+                        ? [this.genYears()]
+                        : [
+                            this.genTableHeader(),
+                            this.activePicker === "DATE"
+                              ? this.genDateTable()
+                              : this.genMonthTable(),
+                          ];
+                    return this.$createElement(
+                      "div",
+                      {
+                        key: this.activePicker,
+                      },
+                      children
+                    );
+                  },
+                  setInputDate: function setInputDate() {
+                    if (this.lastValue) {
+                      var array = this.lastValue.split("-");
+                      this.inputYear = parseInt(array[0], 10);
+                      this.inputMonth = parseInt(array[1], 10) - 1;
+
+                      if (this.type === "date") {
+                        this.inputDay = parseInt(array[2], 10);
+                      }
+                    } else {
+                      this.inputYear = this.inputYear || this.now.getFullYear();
+                      this.inputMonth =
+                        this.inputMonth == null
+                          ? this.inputMonth
+                          : this.now.getMonth();
+                      this.inputDay = this.inputDay || this.now.getDate();
+                    }
+                  },
+                },
+                render: function render() {
+                  return this.genPicker("v-picker--date");
+                },
+              });
 
-    skips[k] = filled[k] * skip;
-  }
+            /***/
+          },
 
-  return skips;
-}
-function timestampToDate(timestamp) {
-  var time = padNumber(timestamp.hour, 2) + ":" + padNumber(timestamp.minute, 2);
-  var date = timestamp.date;
-  return new Date(date + "T" + time + ":00+00:00");
-}
-function createDayList(start, end, now, weekdaySkips, max, min) {
-  if (max === void 0) {
-    max = 42;
-  }
+        /***/ "./src/components/VDatePicker/VDatePickerDateTable.ts":
+          /*!************************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerDateTable.ts ***!
+  \************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./mixins/date-picker-table */ "./src/components/VDatePicker/mixins/date-picker-table.ts"
+              );
+            /* harmony import */ var _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/dateTimeUtils */ "./src/util/dateTimeUtils.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VDatePicker/util/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__[
+                  "default"
+                ]
+                /* @vue/component */
+              ).extend({
+                name: "v-date-picker-date-table",
+                props: {
+                  firstDayOfWeek: {
+                    type: [String, Number],
+                    default: 0,
+                  },
+                  localeFirstDayOfYear: {
+                    type: [String, Number],
+                    default: 0,
+                  },
+                  showWeek: Boolean,
+                  weekdayFormat: Function,
+                },
+                computed: {
+                  formatter: function formatter() {
+                    return (
+                      this.format ||
+                      Object(
+                        _util__WEBPACK_IMPORTED_MODULE_2__[
+                          "createNativeLocaleFormatter"
+                        ]
+                      )(
+                        this.currentLocale,
+                        {
+                          day: "numeric",
+                          timeZone: "UTC",
+                        },
+                        {
+                          start: 8,
+                          length: 2,
+                        }
+                      )
+                    );
+                  },
+                  weekdayFormatter: function weekdayFormatter() {
+                    return (
+                      this.weekdayFormat ||
+                      Object(
+                        _util__WEBPACK_IMPORTED_MODULE_2__[
+                          "createNativeLocaleFormatter"
+                        ]
+                      )(this.currentLocale, {
+                        weekday: "narrow",
+                        timeZone: "UTC",
+                      })
+                    );
+                  },
+                  weekDays: function weekDays() {
+                    var _this = this;
+
+                    var first = parseInt(this.firstDayOfWeek, 10);
+                    return this.weekdayFormatter
+                      ? Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                            "createRange"
+                          ]
+                        )(7).map(function (i) {
+                          return _this.weekdayFormatter(
+                            "2017-01-" + (first + i + 15)
+                          );
+                        }) // 2017-01-15 is Sunday
+                      : Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                            "createRange"
+                          ]
+                        )(7).map(function (i) {
+                          return [
+                            "S",
+                            "M",
+                            "T",
+                            "W",
+                            "T",
+                            "F",
+                            "S",
+                          ][(i + first) % 7];
+                        });
+                  },
+                },
+                methods: {
+                  calculateTableDate: function calculateTableDate(delta) {
+                    return Object(
+                      _util__WEBPACK_IMPORTED_MODULE_2__["monthChange"]
+                    )(this.tableDate, Math.sign(delta || 1));
+                  },
+                  genTHead: function genTHead() {
+                    var _this = this;
+
+                    var days = this.weekDays.map(function (day) {
+                      return _this.$createElement("th", day);
+                    });
+
+                    if (this.showWeek) {
+                      days.unshift(this.$createElement("th"));
+                    }
+
+                    return this.$createElement("thead", this.genTR(days));
+                  },
+                  // Returns number of the days from the firstDayOfWeek to the first day of the current month
+                  weekDaysBeforeFirstDayOfTheMonth:
+                    function weekDaysBeforeFirstDayOfTheMonth() {
+                      var firstDayOfTheMonth = new Date(
+                        this.displayedYear +
+                          "-" +
+                          Object(_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(
+                            this.displayedMonth + 1
+                          ) +
+                          "-01T00:00:00+00:00"
+                      );
+                      var weekDay = firstDayOfTheMonth.getUTCDay();
+                      return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7;
+                    },
+                  getWeekNumber: function getWeekNumber(dayInMonth) {
+                    return Object(
+                      _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_1__[
+                        "weekNumber"
+                      ]
+                    )(
+                      this.displayedYear,
+                      this.displayedMonth,
+                      dayInMonth,
+                      parseInt(this.firstDayOfWeek),
+                      parseInt(this.localeFirstDayOfYear)
+                    );
+                  },
+                  genWeekNumber: function genWeekNumber(weekNumber) {
+                    return this.$createElement("td", [
+                      this.$createElement(
+                        "small",
+                        {
+                          staticClass: "v-date-picker-table--date__week",
+                        },
+                        String(weekNumber).padStart(2, "0")
+                      ),
+                    ]);
+                  },
+                  genTBody: function genTBody() {
+                    var children = [];
+                    var daysInMonth = new Date(
+                      this.displayedYear,
+                      this.displayedMonth + 1,
+                      0
+                    ).getDate();
+                    var rows = [];
+                    var day = this.weekDaysBeforeFirstDayOfTheMonth();
+
+                    if (this.showWeek) {
+                      rows.push(this.genWeekNumber(this.getWeekNumber(1)));
+                    }
+
+                    while (day--) {
+                      rows.push(this.$createElement("td"));
+                    }
+
+                    for (day = 1; day <= daysInMonth; day++) {
+                      var date =
+                        this.displayedYear +
+                        "-" +
+                        Object(_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(
+                          this.displayedMonth + 1
+                        ) +
+                        "-" +
+                        Object(_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(day);
+                      rows.push(
+                        this.$createElement("td", [
+                          this.genButton(date, true, "date", this.formatter),
+                        ])
+                      );
+
+                      if (rows.length % (this.showWeek ? 8 : 7) === 0) {
+                        children.push(this.genTR(rows));
+                        rows = [];
+
+                        if (this.showWeek && day < daysInMonth) {
+                          rows.push(
+                            this.genWeekNumber(this.getWeekNumber(day + 7))
+                          );
+                        }
+                      }
+                    }
+
+                    if (rows.length) {
+                      children.push(this.genTR(rows));
+                    }
+
+                    return this.$createElement("tbody", children);
+                  },
+                  genTR: function genTR(children) {
+                    return [this.$createElement("tr", children)];
+                  },
+                },
+                render: function render() {
+                  return this.genTable(
+                    "v-date-picker-table v-date-picker-table--date",
+                    [this.genTHead(), this.genTBody()],
+                    this.calculateTableDate
+                  );
+                },
+              });
 
-  if (min === void 0) {
-    min = 0;
-  }
+            /***/
+          },
 
-  var stop = getDayIdentifier(end);
-  var days = [];
-  var current = copyTimestamp(start);
-  var currentIdentifier = 0;
-  var stopped = currentIdentifier === stop;
+        /***/ "./src/components/VDatePicker/VDatePickerHeader.sass":
+          /*!***********************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerHeader.sass ***!
+  \***********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  if (stop < getDayIdentifier(start)) {
-    throw new Error('End date is earlier than start date.');
-  }
+        /***/ "./src/components/VDatePicker/VDatePickerHeader.ts":
+          /*!*********************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerHeader.ts ***!
+  \*********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDatePickerHeader_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDatePickerHeader.sass */ "./src/components/VDatePicker/VDatePickerHeader.sass"
+              );
+            /* harmony import */ var _VDatePickerHeader_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDatePickerHeader_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/localable */ "./src/mixins/localable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VDatePicker/util/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  while ((!stopped || days.length < min) && days.length < max) {
-    currentIdentifier = getDayIdentifier(current);
-    stopped = stopped || currentIdentifier === stop;
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-    if (weekdaySkips[current.weekday] === 0) {
-      current = nextDay(current);
-      continue;
-    }
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-    var day = copyTimestamp(current);
-    updateFormatted(day);
-    updateRelative(day, now);
-    days.push(day);
-    current = relativeDays(current, nextDay, weekdaySkips[current.weekday]);
-  }
+                return ar;
+              };
 
-  if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.');
-  return days;
-}
-function createIntervalList(timestamp, first, minutes, count, now) {
-  var intervals = [];
+            // Components
+
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_localable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-date-picker-header",
+                props: {
+                  disabled: Boolean,
+                  format: Function,
+                  min: String,
+                  max: String,
+                  nextAriaLabel: String,
+                  nextIcon: {
+                    type: String,
+                    default: "$next",
+                  },
+                  prevAriaLabel: String,
+                  prevIcon: {
+                    type: String,
+                    default: "$prev",
+                  },
+                  readonly: Boolean,
+                  value: {
+                    type: [Number, String],
+                    required: true,
+                  },
+                },
+                data: function data() {
+                  return {
+                    isReversing: false,
+                  };
+                },
+                computed: {
+                  formatter: function formatter() {
+                    if (this.format) {
+                      return this.format;
+                    } else if (String(this.value).split("-")[1]) {
+                      return Object(
+                        _util__WEBPACK_IMPORTED_MODULE_6__[
+                          "createNativeLocaleFormatter"
+                        ]
+                      )(
+                        this.currentLocale,
+                        {
+                          month: "long",
+                          year: "numeric",
+                          timeZone: "UTC",
+                        },
+                        {
+                          length: 7,
+                        }
+                      );
+                    } else {
+                      return Object(
+                        _util__WEBPACK_IMPORTED_MODULE_6__[
+                          "createNativeLocaleFormatter"
+                        ]
+                      )(
+                        this.currentLocale,
+                        {
+                          year: "numeric",
+                          timeZone: "UTC",
+                        },
+                        {
+                          length: 4,
+                        }
+                      );
+                    }
+                  },
+                },
+                watch: {
+                  value: function value(newVal, oldVal) {
+                    this.isReversing = newVal < oldVal;
+                  },
+                },
+                methods: {
+                  genBtn: function genBtn(change) {
+                    var _this = this;
+
+                    var ariaLabelId =
+                      change > 0 ? this.nextAriaLabel : this.prevAriaLabel;
+                    var ariaLabel = ariaLabelId
+                      ? this.$vuetify.lang.t(ariaLabelId)
+                      : undefined;
+                    var disabled =
+                      this.disabled ||
+                      (change < 0 &&
+                        this.min &&
+                        this.calculateChange(change) < this.min) ||
+                      (change > 0 &&
+                        this.max &&
+                        this.calculateChange(change) > this.max);
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        attrs: {
+                          "aria-label": ariaLabel,
+                        },
+                        props: {
+                          dark: this.dark,
+                          disabled: disabled,
+                          icon: true,
+                          light: this.light,
+                        },
+                        on: {
+                          click: function click(e) {
+                            e.stopPropagation();
+
+                            _this.$emit("input", _this.calculateChange(change));
+                          },
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          _VIcon__WEBPACK_IMPORTED_MODULE_2__["default"],
+                          change < 0 === !this.$vuetify.rtl
+                            ? this.prevIcon
+                            : this.nextIcon
+                        ),
+                      ]
+                    );
+                  },
+                  calculateChange: function calculateChange(sign) {
+                    var _a = __read(
+                        String(this.value).split("-").map(Number),
+                        2
+                      ),
+                      year = _a[0],
+                      month = _a[1];
+
+                    if (month == null) {
+                      return "" + (year + sign);
+                    } else {
+                      return Object(
+                        _util__WEBPACK_IMPORTED_MODULE_6__["monthChange"]
+                      )(String(this.value), sign);
+                    }
+                  },
+                  genHeader: function genHeader() {
+                    var _this = this;
+
+                    var color = !this.disabled && (this.color || "accent");
+                    var header = this.$createElement(
+                      "div",
+                      this.setTextColor(color, {
+                        key: String(this.value),
+                      }),
+                      [
+                        this.$createElement(
+                          "button",
+                          {
+                            attrs: {
+                              type: "button",
+                            },
+                            on: {
+                              click: function click() {
+                                return _this.$emit("toggle");
+                              },
+                            },
+                          },
+                          [
+                            this.$slots.default ||
+                              this.formatter(String(this.value)),
+                          ]
+                        ),
+                      ]
+                    );
+                    var transition = this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name:
+                            this.isReversing === !this.$vuetify.rtl
+                              ? "tab-reverse-transition"
+                              : "tab-transition",
+                        },
+                      },
+                      [header]
+                    );
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-date-picker-header__value",
+                        class: {
+                          "v-date-picker-header__value--disabled":
+                            this.disabled,
+                        },
+                      },
+                      [transition]
+                    );
+                  },
+                },
+                render: function render() {
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-date-picker-header",
+                      class: __assign(
+                        {
+                          "v-date-picker-header--disabled": this.disabled,
+                        },
+                        this.themeClasses
+                      ),
+                    },
+                    [this.genBtn(-1), this.genHeader(), this.genBtn(+1)]
+                  );
+                },
+              });
 
-  for (var i = 0; i < count; i++) {
-    var mins = first + i * minutes;
-    var int = copyTimestamp(timestamp);
-    intervals.push(updateMinutes(int, mins, now));
-  }
+            /***/
+          },
 
-  return intervals;
-}
-function createNativeLocaleFormatter(locale, getOptions) {
-  var emptyFormatter = function emptyFormatter(_t, _s) {
-    return '';
-  };
+        /***/ "./src/components/VDatePicker/VDatePickerMonthTable.ts":
+          /*!*************************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerMonthTable.ts ***!
+  \*************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./mixins/date-picker-table */ "./src/components/VDatePicker/mixins/date-picker-table.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VDatePicker/util/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__[
+                  "default"
+                ]
+                /* @vue/component */
+              ).extend({
+                name: "v-date-picker-month-table",
+                computed: {
+                  formatter: function formatter() {
+                    return (
+                      this.format ||
+                      Object(
+                        _util__WEBPACK_IMPORTED_MODULE_1__[
+                          "createNativeLocaleFormatter"
+                        ]
+                      )(
+                        this.currentLocale,
+                        {
+                          month: "short",
+                          timeZone: "UTC",
+                        },
+                        {
+                          start: 5,
+                          length: 2,
+                        }
+                      )
+                    );
+                  },
+                },
+                methods: {
+                  calculateTableDate: function calculateTableDate(delta) {
+                    return (
+                      "" +
+                      (parseInt(this.tableDate, 10) + Math.sign(delta || 1))
+                    );
+                  },
+                  genTBody: function genTBody() {
+                    var _this = this;
+
+                    var children = [];
+                    var cols = Array(3).fill(null);
+                    var rows = 12 / cols.length;
+
+                    var _loop_1 = function _loop_1(row) {
+                      var tds = cols.map(function (_, col) {
+                        var month = row * cols.length + col;
+                        var date =
+                          _this.displayedYear +
+                          "-" +
+                          Object(_util__WEBPACK_IMPORTED_MODULE_1__["pad"])(
+                            month + 1
+                          );
+                        return _this.$createElement(
+                          "td",
+                          {
+                            key: month,
+                          },
+                          [
+                            _this.genButton(
+                              date,
+                              false,
+                              "month",
+                              _this.formatter
+                            ),
+                          ]
+                        );
+                      });
+                      children.push(
+                        this_1.$createElement(
+                          "tr",
+                          {
+                            key: row,
+                          },
+                          tds
+                        )
+                      );
+                    };
+
+                    var this_1 = this;
+
+                    for (var row = 0; row < rows; row++) {
+                      _loop_1(row);
+                    }
+
+                    return this.$createElement("tbody", children);
+                  },
+                },
+                render: function render() {
+                  return this.genTable(
+                    "v-date-picker-table v-date-picker-table--month",
+                    [this.genTBody()],
+                    this.calculateTableDate
+                  );
+                },
+              });
 
-  if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {
-    return emptyFormatter;
-  }
+            /***/
+          },
 
-  return function (timestamp, short) {
-    try {
-      var intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short));
-      return intlFormatter.format(timestampToDate(timestamp));
-    } catch (e) {
-      return '';
-    }
-  };
-}
+        /***/ "./src/components/VDatePicker/VDatePickerTable.sass":
+          /*!**********************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerTable.sass ***!
+  \**********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VDatePicker/VDatePickerTitle.sass":
+          /*!**********************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerTitle.sass ***!
+  \**********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VCard/VCard.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VCard/VCard.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VDatePicker/VDatePickerTitle.ts":
+          /*!********************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerTitle.ts ***!
+  \********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDatePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDatePickerTitle.sass */ "./src/components/VDatePicker/VDatePickerTitle.sass"
+              );
+            /* harmony import */ var _VDatePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDatePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_picker_button__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/picker-button */ "./src/mixins/picker-button/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Components
+
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_picker_button__WEBPACK_IMPORTED_MODULE_2__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-date-picker-title",
+                props: {
+                  date: {
+                    type: String,
+                    default: "",
+                  },
+                  disabled: Boolean,
+                  readonly: Boolean,
+                  selectingYear: Boolean,
+                  value: {
+                    type: String,
+                  },
+                  year: {
+                    type: [Number, String],
+                    default: "",
+                  },
+                  yearIcon: {
+                    type: String,
+                  },
+                },
+                data: function data() {
+                  return {
+                    isReversing: false,
+                  };
+                },
+                computed: {
+                  computedTransition: function computedTransition() {
+                    return this.isReversing
+                      ? "picker-reverse-transition"
+                      : "picker-transition";
+                  },
+                },
+                watch: {
+                  value: function value(val, prev) {
+                    this.isReversing = val < prev;
+                  },
+                },
+                methods: {
+                  genYearIcon: function genYearIcon() {
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        props: {
+                          dark: true,
+                        },
+                      },
+                      this.yearIcon
+                    );
+                  },
+                  getYearBtn: function getYearBtn() {
+                    return this.genPickerButton(
+                      "selectingYear",
+                      true,
+                      [
+                        String(this.year),
+                        this.yearIcon ? this.genYearIcon() : null,
+                      ],
+                      false,
+                      "v-date-picker-title__year"
+                    );
+                  },
+                  genTitleText: function genTitleText() {
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.computedTransition,
+                        },
+                      },
+                      [
+                        this.$createElement("div", {
+                          domProps: {
+                            innerHTML: this.date || "&nbsp;",
+                          },
+                          key: this.value,
+                        }),
+                      ]
+                    );
+                  },
+                  genTitleDate: function genTitleDate() {
+                    return this.genPickerButton(
+                      "selectingYear",
+                      false,
+                      [this.genTitleText()],
+                      false,
+                      "v-date-picker-title__date"
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-date-picker-title",
+                      class: {
+                        "v-date-picker-title--disabled": this.disabled,
+                      },
+                    },
+                    [this.getYearBtn(), this.genTitleDate()]
+                  );
+                },
+              });
 
-// extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VDatePicker/VDatePickerYears.sass":
+          /*!**********************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerYears.sass ***!
+  \**********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VCard/VCard.ts":
-/*!***************************************!*\
-  !*** ./src/components/VCard/VCard.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCard_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCard.sass */ "./src/components/VCard/VCard.sass");
-/* harmony import */ var _VCard_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCard_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet */ "./src/components/VSheet/index.ts");
-/* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts");
-/* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/routable */ "./src/mixins/routable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
- // Mixins
-
-
- // Helpers
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_loadable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_routable__WEBPACK_IMPORTED_MODULE_3__["default"], _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"]).extend({
-  name: 'v-card',
-  props: {
-    flat: Boolean,
-    hover: Boolean,
-    img: String,
-    link: Boolean,
-    loaderHeight: {
-      type: [Number, String],
-      default: 4
-    },
-    raised: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign({
-        'v-card': true
-      }, _mixins_routable__WEBPACK_IMPORTED_MODULE_3__["default"].options.computed.classes.call(this)), {
-        'v-card--flat': this.flat,
-        'v-card--hover': this.hover,
-        'v-card--link': this.isClickable,
-        'v-card--loading': this.loading,
-        'v-card--disabled': this.disabled,
-        'v-card--raised': this.raised
-      }), _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this));
-    },
-    styles: function styles() {
-      var style = __assign({}, _VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.styles.call(this));
-
-      if (this.img) {
-        style.background = "url(\"" + this.img + "\") center center / cover no-repeat";
-      }
+        /***/ "./src/components/VDatePicker/VDatePickerYears.ts":
+          /*!********************************************************!*\
+  !*** ./src/components/VDatePicker/VDatePickerYears.ts ***!
+  \********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDatePickerYears_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDatePickerYears.sass */ "./src/components/VDatePicker/VDatePickerYears.sass"
+              );
+            /* harmony import */ var _VDatePickerYears_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDatePickerYears_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/localable */ "./src/mixins/localable/index.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./util */ "./src/components/VDatePicker/util/index.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_localable__WEBPACK_IMPORTED_MODULE_2__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-date-picker-years",
+                props: {
+                  format: Function,
+                  min: [Number, String],
+                  max: [Number, String],
+                  readonly: Boolean,
+                  value: [Number, String],
+                },
+                data: function data() {
+                  return {
+                    defaultColor: "primary",
+                  };
+                },
+                computed: {
+                  formatter: function formatter() {
+                    return (
+                      this.format ||
+                      Object(
+                        _util__WEBPACK_IMPORTED_MODULE_3__[
+                          "createNativeLocaleFormatter"
+                        ]
+                      )(
+                        this.currentLocale,
+                        {
+                          year: "numeric",
+                          timeZone: "UTC",
+                        },
+                        {
+                          length: 4,
+                        }
+                      )
+                    );
+                  },
+                },
+                mounted: function mounted() {
+                  var _this = this;
+
+                  setTimeout(function () {
+                    var activeItem =
+                      _this.$el.getElementsByClassName("active")[0];
+
+                    if (activeItem) {
+                      _this.$el.scrollTop =
+                        activeItem.offsetTop -
+                        _this.$el.offsetHeight / 2 +
+                        activeItem.offsetHeight / 2;
+                    } else if (_this.min && !_this.max) {
+                      _this.$el.scrollTop = _this.$el.scrollHeight;
+                    } else if (!_this.min && _this.max) {
+                      _this.$el.scrollTop = 0;
+                    } else {
+                      _this.$el.scrollTop =
+                        _this.$el.scrollHeight / 2 - _this.$el.offsetHeight / 2;
+                    }
+                  });
+                },
+                methods: {
+                  genYearItem: function genYearItem(year) {
+                    var _this = this;
+
+                    var formatted = this.formatter("" + year);
+                    var active = parseInt(this.value, 10) === year;
+                    var color = active && (this.color || "primary");
+                    return this.$createElement(
+                      "li",
+                      this.setTextColor(color, {
+                        key: year,
+                        class: {
+                          active: active,
+                        },
+                        on: Object(
+                          _util_mergeData__WEBPACK_IMPORTED_MODULE_4__[
+                            "mergeListeners"
+                          ]
+                        )(
+                          {
+                            click: function click() {
+                              return _this.$emit("input", year);
+                            },
+                          },
+                          Object(
+                            _util__WEBPACK_IMPORTED_MODULE_3__[
+                              "createItemTypeNativeListeners"
+                            ]
+                          )(this, ":year", year)
+                        ),
+                      }),
+                      formatted
+                    );
+                  },
+                  genYearItems: function genYearItems() {
+                    var children = [];
+                    var selectedYear = this.value
+                      ? parseInt(this.value, 10)
+                      : new Date().getFullYear();
+                    var maxYear = this.max
+                      ? parseInt(this.max, 10)
+                      : selectedYear + 100;
+                    var minYear = Math.min(
+                      maxYear,
+                      this.min ? parseInt(this.min, 10) : selectedYear - 100
+                    );
+
+                    for (var year = maxYear; year >= minYear; year--) {
+                      children.push(this.genYearItem(year));
+                    }
+
+                    return children;
+                  },
+                },
+                render: function render() {
+                  return this.$createElement(
+                    "ul",
+                    {
+                      staticClass: "v-date-picker-years",
+                      ref: "years",
+                    },
+                    this.genYearItems()
+                  );
+                },
+              });
 
-      return style;
-    }
-  },
-  methods: {
-    genProgress: function genProgress() {
-      var render = _mixins_loadable__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genProgress.call(this);
-      if (!render) return null;
-      return this.$createElement('div', {
-        staticClass: 'v-card__progress',
-        key: 'progress'
-      }, [render]);
-    }
-  },
-  render: function render(h) {
-    var _a = this.generateRouteLink(),
-        tag = _a.tag,
-        data = _a.data;
-
-    data.style = this.styles;
-
-    if (this.isClickable) {
-      data.attrs = data.attrs || {};
-      data.attrs.tabindex = 0;
-    }
-
-    return h(tag, this.setBackgroundColor(this.color, data), [this.genProgress(), this.$slots.default]);
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VDatePicker/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VDatePicker/index.ts ***!
+  \*********************************************/
+          /*! exports provided: VDatePicker, VDatePickerTitle, VDatePickerHeader, VDatePickerDateTable, VDatePickerMonthTable, VDatePickerYears, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDatePicker__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDatePicker */ "./src/components/VDatePicker/VDatePicker.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePicker",
+              function () {
+                return _VDatePicker__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VDatePickerTitle */ "./src/components/VDatePicker/VDatePickerTitle.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerTitle",
+              function () {
+                return _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_1__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VDatePickerHeader */ "./src/components/VDatePicker/VDatePickerHeader.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerHeader",
+              function () {
+                return _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_2__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VDatePickerDateTable */ "./src/components/VDatePicker/VDatePickerDateTable.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerDateTable",
+              function () {
+                return _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_3__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VDatePickerMonthTable */ "./src/components/VDatePicker/VDatePickerMonthTable.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerMonthTable",
+              function () {
+                return _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_4__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VDatePickerYears__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./VDatePickerYears */ "./src/components/VDatePicker/VDatePickerYears.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerYears",
+              function () {
+                return _VDatePickerYears__WEBPACK_IMPORTED_MODULE_5__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VDatePicker:
+                  _VDatePicker__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VDatePickerTitle:
+                  _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VDatePickerHeader:
+                  _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_2__["default"],
+                VDatePickerDateTable:
+                  _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                VDatePickerMonthTable:
+                  _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_4__[
+                    "default"
+                  ],
+                VDatePickerYears:
+                  _VDatePickerYears__WEBPACK_IMPORTED_MODULE_5__["default"],
+              },
+            };
 
-/***/ "./src/components/VCard/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VCard/index.ts ***!
-  \***************************************/
-/*! exports provided: VCard, VCardActions, VCardSubtitle, VCardText, VCardTitle, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VCardActions", function() { return VCardActions; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VCardSubtitle", function() { return VCardSubtitle; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VCardText", function() { return VCardText; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VCardTitle", function() { return VCardTitle; });
-/* harmony import */ var _VCard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCard */ "./src/components/VCard/VCard.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCard", function() { return _VCard__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-
-
-var VCardActions = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["createSimpleFunctional"])('v-card__actions');
-var VCardSubtitle = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["createSimpleFunctional"])('v-card__subtitle');
-var VCardText = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["createSimpleFunctional"])('v-card__text');
-var VCardTitle = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["createSimpleFunctional"])('v-card__title');
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VCard: _VCard__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VCardActions: VCardActions,
-    VCardSubtitle: VCardSubtitle,
-    VCardText: VCardText,
-    VCardTitle: VCardTitle
-  }
-});
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VDatePicker/mixins/date-picker-table.ts":
+          /*!****************************************************************!*\
+  !*** ./src/components/VDatePicker/mixins/date-picker-table.ts ***!
+  \****************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDatePickerTable_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VDatePickerTable.sass */ "./src/components/VDatePicker/VDatePickerTable.sass"
+              );
+            /* harmony import */ var _VDatePickerTable_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDatePickerTable_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../../directives/touch */ "./src/directives/touch/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../../mixins/localable */ "./src/mixins/localable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../util */ "./src/components/VDatePicker/util/index.ts"
+              );
+            /* harmony import */ var _util_isDateAllowed__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../util/isDateAllowed */ "./src/components/VDatePicker/util/isDateAllowed.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ "./src/components/VCarousel/VCarousel.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VCarousel/VCarousel.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-// extracted by mini-css-extract-plugin
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ }),
+                return ar;
+              };
 
-/***/ "./src/components/VCarousel/VCarousel.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VCarousel/VCarousel.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCarousel_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCarousel.sass */ "./src/components/VCarousel/VCarousel.sass");
-/* harmony import */ var _VCarousel_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCarousel_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VWindow/VWindow */ "./src/components/VWindow/VWindow.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VProgressLinear__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../VProgressLinear */ "./src/components/VProgressLinear/index.ts");
-/* harmony import */ var _mixins_button_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/button-group */ "./src/mixins/button-group/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-    return t;
-  };
+                return ar;
+              };
 
-  return __assign.apply(this, arguments);
-}; // Styles
+            // Directives
+
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_localable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"]
+                /* @vue/component */
+              ).extend({
+                directives: {
+                  Touch:
+                    _directives_touch__WEBPACK_IMPORTED_MODULE_1__["default"],
+                },
+                props: {
+                  allowedDates: Function,
+                  current: String,
+                  disabled: Boolean,
+                  format: Function,
+                  events: {
+                    type: [Array, Function, Object],
+                    default: function _default() {
+                      return null;
+                    },
+                  },
+                  eventColor: {
+                    type: [Array, Function, Object, String],
+                    default: function _default() {
+                      return "warning";
+                    },
+                  },
+                  min: String,
+                  max: String,
+                  range: Boolean,
+                  readonly: Boolean,
+                  scrollable: Boolean,
+                  tableDate: {
+                    type: String,
+                    required: true,
+                  },
+                  value: [String, Array],
+                },
+                data: function data() {
+                  return {
+                    isReversing: false,
+                    wheelThrottle: null,
+                  };
+                },
+                computed: {
+                  computedTransition: function computedTransition() {
+                    return this.isReversing === !this.$vuetify.rtl
+                      ? "tab-reverse-transition"
+                      : "tab-transition";
+                  },
+                  displayedMonth: function displayedMonth() {
+                    return Number(this.tableDate.split("-")[1]) - 1;
+                  },
+                  displayedYear: function displayedYear() {
+                    return Number(this.tableDate.split("-")[0]);
+                  },
+                },
+                watch: {
+                  tableDate: function tableDate(newVal, oldVal) {
+                    this.isReversing = newVal < oldVal;
+                  },
+                },
+                mounted: function mounted() {
+                  this.wheelThrottle = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_9__["throttle"]
+                  )(this.wheel, 250);
+                },
+                methods: {
+                  genButtonClasses: function genButtonClasses(
+                    isAllowed,
+                    isFloating,
+                    isSelected,
+                    isCurrent
+                  ) {
+                    return __assign(
+                      {
+                        "v-size--default": !isFloating,
+                        "v-date-picker-table__current": isCurrent,
+                        "v-btn--active": isSelected,
+                        "v-btn--flat": !isAllowed || this.disabled,
+                        "v-btn--text": isSelected === isCurrent,
+                        "v-btn--rounded": isFloating,
+                        "v-btn--disabled": !isAllowed || this.disabled,
+                        "v-btn--outlined": isCurrent && !isSelected,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  genButtonEvents: function genButtonEvents(
+                    value,
+                    isAllowed,
+                    mouseEventType
+                  ) {
+                    var _this = this;
+
+                    if (this.disabled) return undefined;
+                    return Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_7__[
+                        "mergeListeners"
+                      ]
+                    )(
+                      {
+                        click: function click() {
+                          if (isAllowed && !_this.readonly)
+                            _this.$emit("input", value);
+                        },
+                      },
+                      Object(
+                        _util__WEBPACK_IMPORTED_MODULE_5__[
+                          "createItemTypeNativeListeners"
+                        ]
+                      )(this, ":" + mouseEventType, value)
+                    );
+                  },
+                  genButton: function genButton(
+                    value,
+                    isFloating,
+                    mouseEventType,
+                    formatter
+                  ) {
+                    var isAllowed = Object(
+                      _util_isDateAllowed__WEBPACK_IMPORTED_MODULE_6__[
+                        "default"
+                      ]
+                    )(value, this.min, this.max, this.allowedDates);
+                    var isSelected = this.isSelected(value) && isAllowed;
+                    var isCurrent = value === this.current;
+                    var setColor = isSelected
+                      ? this.setBackgroundColor
+                      : this.setTextColor;
+                    var color =
+                      (isSelected || isCurrent) && (this.color || "accent");
+                    return this.$createElement(
+                      "button",
+                      setColor(color, {
+                        staticClass: "v-btn",
+                        class: this.genButtonClasses(
+                          isAllowed,
+                          isFloating,
+                          isSelected,
+                          isCurrent
+                        ),
+                        attrs: {
+                          type: "button",
+                        },
+                        domProps: {
+                          disabled: this.disabled || !isAllowed,
+                        },
+                        on: this.genButtonEvents(
+                          value,
+                          isAllowed,
+                          mouseEventType
+                        ),
+                      }),
+                      [
+                        this.$createElement(
+                          "div",
+                          {
+                            staticClass: "v-btn__content",
+                          },
+                          [formatter(value)]
+                        ),
+                        this.genEvents(value),
+                      ]
+                    );
+                  },
+                  getEventColors: function getEventColors(date) {
+                    var arrayize = function arrayize(v) {
+                      return Array.isArray(v) ? v : [v];
+                    };
+
+                    var eventData;
+                    var eventColors = [];
+
+                    if (Array.isArray(this.events)) {
+                      eventData = this.events.includes(date);
+                    } else if (this.events instanceof Function) {
+                      eventData = this.events(date) || false;
+                    } else if (this.events) {
+                      eventData = this.events[date] || false;
+                    } else {
+                      eventData = false;
+                    }
+
+                    if (!eventData) {
+                      return [];
+                    } else if (eventData !== true) {
+                      eventColors = arrayize(eventData);
+                    } else if (typeof this.eventColor === "string") {
+                      eventColors = [this.eventColor];
+                    } else if (typeof this.eventColor === "function") {
+                      eventColors = arrayize(this.eventColor(date));
+                    } else if (Array.isArray(this.eventColor)) {
+                      eventColors = this.eventColor;
+                    } else {
+                      eventColors = arrayize(this.eventColor[date]);
+                    }
+
+                    return eventColors.filter(function (v) {
+                      return v;
+                    });
+                  },
+                  genEvents: function genEvents(date) {
+                    var _this = this;
+
+                    var eventColors = this.getEventColors(date);
+                    return eventColors.length
+                      ? this.$createElement(
+                          "div",
+                          {
+                            staticClass: "v-date-picker-table__events",
+                          },
+                          eventColors.map(function (color) {
+                            return _this.$createElement(
+                              "div",
+                              _this.setBackgroundColor(color)
+                            );
+                          })
+                        )
+                      : null;
+                  },
+                  wheel: function wheel(e, calculateTableDate) {
+                    this.$emit(
+                      "update:table-date",
+                      calculateTableDate(e.deltaY)
+                    );
+                  },
+                  touch: function touch(value, calculateTableDate) {
+                    this.$emit("update:table-date", calculateTableDate(value));
+                  },
+                  genTable: function genTable(
+                    staticClass,
+                    children,
+                    calculateTableDate
+                  ) {
+                    var _this = this;
+
+                    var transition = this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.computedTransition,
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          "table",
+                          {
+                            key: this.tableDate,
+                          },
+                          children
+                        ),
+                      ]
+                    );
+                    var touchDirective = {
+                      name: "touch",
+                      value: {
+                        left: function left(e) {
+                          return (
+                            e.offsetX < -15 &&
+                            _this.touch(1, calculateTableDate)
+                          );
+                        },
+                        right: function right(e) {
+                          return (
+                            e.offsetX > 15 &&
+                            _this.touch(-1, calculateTableDate)
+                          );
+                        },
+                      },
+                    };
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: staticClass,
+                        class: __assign(
+                          {
+                            "v-date-picker-table--disabled": this.disabled,
+                          },
+                          this.themeClasses
+                        ),
+                        on:
+                          !this.disabled && this.scrollable
+                            ? {
+                                wheel: function wheel(e) {
+                                  e.preventDefault();
+
+                                  _this.wheelThrottle(e, calculateTableDate);
+                                },
+                              }
+                            : undefined,
+                        directives: [touchDirective],
+                      },
+                      [transition]
+                    );
+                  },
+                  isSelected: function isSelected(value) {
+                    if (Array.isArray(this.value)) {
+                      if (this.range && this.value.length === 2) {
+                        var _a = __read(__spread(this.value).sort(), 2),
+                          from = _a[0],
+                          to = _a[1];
+
+                        return from <= value && value <= to;
+                      } else {
+                        return this.value.indexOf(value) !== -1;
+                      }
+                    }
+
+                    return value === this.value;
+                  },
+                },
+              });
 
+            /***/
+          },
 
- // Extensions
+        /***/ "./src/components/VDatePicker/util/createNativeLocaleFormatter.ts":
+          /*!************************************************************************!*\
+  !*** ./src/components/VDatePicker/util/createNativeLocaleFormatter.ts ***!
+  \************************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./pad */ "./src/components/VDatePicker/util/pad.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
- // Components
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
+            function createNativeLocaleFormatter(
+              locale,
+              options,
+              substrOptions
+            ) {
+              if (substrOptions === void 0) {
+                substrOptions = {
+                  start: 0,
+                  length: 0,
+                };
+              }
 
- // Mixins
-// TODO: Move this into core components v2.0
+              var makeIsoString = function makeIsoString(dateString) {
+                var _a = __read(dateString.trim().split(" ")[0].split("-"), 3),
+                  year = _a[0],
+                  month = _a[1],
+                  date = _a[2];
+
+                return [
+                  Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(year, 4),
+                  Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(
+                    month || 1
+                  ),
+                  Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(
+                    date || 1
+                  ),
+                ].join("-");
+              };
 
- // Utilities
+              try {
+                var intlFormatter_1 = new Intl.DateTimeFormat(
+                  locale || undefined,
+                  options
+                );
+                return function (dateString) {
+                  return intlFormatter_1.format(
+                    new Date(makeIsoString(dateString) + "T00:00:00+00:00")
+                  );
+                };
+              } catch (e) {
+                return substrOptions.start || substrOptions.length
+                  ? function (dateString) {
+                      return makeIsoString(dateString).substr(
+                        substrOptions.start || 0,
+                        substrOptions.length
+                      );
+                    }
+                  : undefined;
+              }
+            }
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              createNativeLocaleFormatter;
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (_VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-carousel',
-  props: {
-    continuous: {
-      type: Boolean,
-      default: true
-    },
-    cycle: Boolean,
-    delimiterIcon: {
-      type: String,
-      default: '$delimiter'
-    },
-    height: {
-      type: [Number, String],
-      default: 500
-    },
-    hideDelimiters: Boolean,
-    hideDelimiterBackground: Boolean,
-    interval: {
-      type: [Number, String],
-      default: 6000,
-      validator: function validator(value) {
-        return value > 0;
-      }
-    },
-    mandatory: {
-      type: Boolean,
-      default: true
-    },
-    progress: Boolean,
-    progressColor: String,
-    showArrows: {
-      type: Boolean,
-      default: true
-    },
-    verticalDelimiters: {
-      type: String,
-      default: undefined
-    }
-  },
-  data: function data() {
-    return {
-      internalHeight: this.height,
-      slideTimeout: undefined
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-carousel': true,
-        'v-carousel--hide-delimiter-background': this.hideDelimiterBackground,
-        'v-carousel--vertical-delimiters': this.isVertical
-      });
-    },
-    isDark: function isDark() {
-      return this.dark || !this.light;
-    },
-    isVertical: function isVertical() {
-      return this.verticalDelimiters != null;
-    }
-  },
-  watch: {
-    internalValue: 'restartTimeout',
-    interval: 'restartTimeout',
-    height: function height(val, oldVal) {
-      if (val === oldVal || !val) return;
-      this.internalHeight = val;
-    },
-    cycle: function cycle(val) {
-      if (val) {
-        this.restartTimeout();
-      } else {
-        clearTimeout(this.slideTimeout);
-        this.slideTimeout = undefined;
-      }
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('hide-controls')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_7__["breaking"])('hide-controls', ':show-arrows="false"', this);
-    }
-  },
-  mounted: function mounted() {
-    this.startTimeout();
-  },
-  methods: {
-    genControlIcons: function genControlIcons() {
-      if (this.isVertical) return null;
-      return _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genControlIcons.call(this);
-    },
-    genDelimiters: function genDelimiters() {
-      return this.$createElement('div', {
-        staticClass: 'v-carousel__controls',
-        style: {
-          left: this.verticalDelimiters === 'left' && this.isVertical ? 0 : 'auto',
-          right: this.verticalDelimiters === 'right' ? 0 : 'auto'
-        }
-      }, [this.genItems()]);
-    },
-    genItems: function genItems() {
-      var _this = this;
-
-      var length = this.items.length;
-      var children = [];
-
-      for (var i = 0; i < length; i++) {
-        var child = this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_2__["default"], {
-          staticClass: 'v-carousel__controls__item',
-          attrs: {
-            'aria-label': this.$vuetify.lang.t('$vuetify.carousel.ariaLabel.delimiter', i + 1, length)
-          },
-          props: {
-            icon: true,
-            small: true,
-            value: this.getValue(this.items[i], i)
-          }
-        }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-          props: {
-            size: 18
-          }
-        }, this.delimiterIcon)]);
-        children.push(child);
-      }
+        /***/ "./src/components/VDatePicker/util/eventHelpers.ts":
+          /*!*********************************************************!*\
+  !*** ./src/components/VDatePicker/util/eventHelpers.ts ***!
+  \*********************************************************/
+          /*! exports provided: createItemTypeNativeListeners, createItemTypeListeners */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createItemTypeNativeListeners",
+              function () {
+                return createItemTypeNativeListeners;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createItemTypeListeners",
+              function () {
+                return createItemTypeListeners;
+              }
+            );
+            function createItemTypeNativeListeners(
+              instance,
+              itemTypeSuffix,
+              value
+            ) {
+              return Object.keys(instance.$listeners).reduce(function (
+                on,
+                eventName
+              ) {
+                if (eventName.endsWith(itemTypeSuffix)) {
+                  on[eventName.slice(0, -itemTypeSuffix.length)] = function (
+                    event
+                  ) {
+                    return instance.$emit(eventName, value, event);
+                  };
+                }
 
-      return this.$createElement(_mixins_button_group__WEBPACK_IMPORTED_MODULE_5__["default"], {
-        props: {
-          value: this.internalValue,
-          mandatory: this.mandatory
-        },
-        on: {
-          change: function change(val) {
-            _this.internalValue = val;
-          }
-        }
-      }, children);
-    },
-    genProgress: function genProgress() {
-      return this.$createElement(_VProgressLinear__WEBPACK_IMPORTED_MODULE_4__["default"], {
-        staticClass: 'v-carousel__progress',
-        props: {
-          color: this.progressColor,
-          value: (this.internalIndex + 1) / this.items.length * 100
-        }
-      });
-    },
-    restartTimeout: function restartTimeout() {
-      this.slideTimeout && clearTimeout(this.slideTimeout);
-      this.slideTimeout = undefined;
-      window.requestAnimationFrame(this.startTimeout);
-    },
-    startTimeout: function startTimeout() {
-      if (!this.cycle) return;
-      this.slideTimeout = window.setTimeout(this.next, +this.interval > 0 ? +this.interval : 6000);
-    }
-  },
-  render: function render(h) {
-    var render = _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_1__["default"].options.render.call(this, h);
-    render.data.style = "height: " + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.height) + ";";
-    /* istanbul ignore else */
-
-    if (!this.hideDelimiters) {
-      render.children.push(this.genDelimiters());
-    }
-    /* istanbul ignore else */
-
-
-    if (this.progress || this.progressColor) {
-      render.children.push(this.genProgress());
-    }
-
-    return render;
-  }
-}));
+                return on;
+              },
+              {});
+            }
+            function createItemTypeListeners(instance, itemTypeSuffix) {
+              return Object.keys(instance.$listeners).reduce(function (
+                on,
+                eventName
+              ) {
+                if (eventName.endsWith(itemTypeSuffix)) {
+                  on[eventName] = instance.$listeners[eventName];
+                }
 
-/***/ }),
+                return on;
+              },
+              {});
+            }
 
-/***/ "./src/components/VCarousel/VCarouselItem.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VCarousel/VCarouselItem.ts ***!
-  \***************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VWindow/VWindowItem */ "./src/components/VWindow/VWindowItem.ts");
-/* harmony import */ var _VImg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VImg */ "./src/components/VImg/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/routable */ "./src/mixins/routable/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+            /***/
+          },
 
-    return t;
-  };
+        /***/ "./src/components/VDatePicker/util/index.ts":
+          /*!**************************************************!*\
+  !*** ./src/components/VDatePicker/util/index.ts ***!
+  \**************************************************/
+          /*! exports provided: createItemTypeListeners, createItemTypeNativeListeners, createNativeLocaleFormatter, monthChange, pad */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _eventHelpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./eventHelpers */ "./src/components/VDatePicker/util/eventHelpers.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createItemTypeListeners",
+              function () {
+                return _eventHelpers__WEBPACK_IMPORTED_MODULE_0__[
+                  "createItemTypeListeners"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createItemTypeNativeListeners",
+              function () {
+                return _eventHelpers__WEBPACK_IMPORTED_MODULE_0__[
+                  "createItemTypeNativeListeners"
+                ];
+              }
+            );
+
+            /* harmony import */ var _createNativeLocaleFormatter__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./createNativeLocaleFormatter */ "./src/components/VDatePicker/util/createNativeLocaleFormatter.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createNativeLocaleFormatter",
+              function () {
+                return _createNativeLocaleFormatter__WEBPACK_IMPORTED_MODULE_1__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _monthChange__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./monthChange */ "./src/components/VDatePicker/util/monthChange.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "monthChange",
+              function () {
+                return _monthChange__WEBPACK_IMPORTED_MODULE_2__["default"];
+              }
+            );
+
+            /* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./pad */ "./src/components/VDatePicker/util/pad.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "pad",
+              function () {
+                return _pad__WEBPACK_IMPORTED_MODULE_3__["default"];
+              }
+            );
 
-  return __assign.apply(this, arguments);
-}; // Extensions
+            /***/
+          },
 
+        /***/ "./src/components/VDatePicker/util/isDateAllowed.ts":
+          /*!**********************************************************!*\
+  !*** ./src/components/VDatePicker/util/isDateAllowed.ts ***!
+  \**********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return isDateAllowed;
+              }
+            );
+            function isDateAllowed(date, min, max, allowedFn) {
+              return (
+                (!allowedFn || allowedFn(date)) &&
+                (!min || date >= min.substr(0, 10)) &&
+                (!max || date <= max)
+              );
+            }
 
- // Components
+            /***/
+          },
 
- // Utilities
+        /***/ "./src/components/VDatePicker/util/monthChange.ts":
+          /*!********************************************************!*\
+  !*** ./src/components/VDatePicker/util/monthChange.ts ***!
+  \********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./pad */ "./src/components/VDatePicker/util/pad.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
- // Types
+            /**
+             * @param {String} value YYYY-MM format
+             * @param {Number} sign -1 or +1
+             */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              function (value, sign) {
+                var _a = __read(value.split("-").map(Number), 2),
+                  year = _a[0],
+                  month = _a[1];
+
+                if (month + sign === 0) {
+                  return year - 1 + "-12";
+                } else if (month + sign === 13) {
+                  return year + 1 + "-01";
+                } else {
+                  return (
+                    year +
+                    "-" +
+                    Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(
+                      month + sign
+                    )
+                  );
+                }
+              };
 
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__["default"], _mixins_routable__WEBPACK_IMPORTED_MODULE_4__["default"]);
-/* @vue/component */
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-carousel-item',
-  inheritAttrs: false,
-  methods: {
-    genDefaultSlot: function genDefaultSlot() {
-      return [this.$createElement(_VImg__WEBPACK_IMPORTED_MODULE_1__["VImg"], {
-        staticClass: 'v-carousel__item',
-        props: __assign(__assign({}, this.$attrs), {
-          height: this.windowGroup.internalHeight
-        }),
-        on: this.$listeners,
-        scopedSlots: {
-          placeholder: this.$scopedSlots.placeholder
-        }
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this))];
-    },
-    genWindowItem: function genWindowItem() {
-      var _a = this.generateRouteLink(),
-          tag = _a.tag,
-          data = _a.data;
-
-      data.staticClass = 'v-window-item';
-      data.directives.push({
-        name: 'show',
-        value: this.isActive
-      });
-      return this.$createElement(tag, data, this.genDefaultSlot());
-    }
-  }
-}));
+        /***/ "./src/components/VDatePicker/util/pad.ts":
+          /*!************************************************!*\
+  !*** ./src/components/VDatePicker/util/pad.ts ***!
+  \************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            var padStart = function padStart(string, targetLength, padString) {
+              targetLength = targetLength >> 0;
+              string = String(string);
+              padString = String(padString);
+
+              if (string.length > targetLength) {
+                return String(string);
+              }
 
-/***/ }),
+              targetLength = targetLength - string.length;
 
-/***/ "./src/components/VCarousel/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VCarousel/index.ts ***!
-  \*******************************************/
-/*! exports provided: VCarousel, VCarouselItem, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+              if (targetLength > padString.length) {
+                padString += padString.repeat(targetLength / padString.length);
+              }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCarousel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCarousel */ "./src/components/VCarousel/VCarousel.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCarousel", function() { return _VCarousel__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+              return padString.slice(0, targetLength) + String(string);
+            };
 
-/* harmony import */ var _VCarouselItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VCarouselItem */ "./src/components/VCarousel/VCarouselItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCarouselItem", function() { return _VCarouselItem__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+            /* harmony default export */ __webpack_exports__["default"] =
+              function (n, length) {
+                if (length === void 0) {
+                  length = 2;
+                }
 
+                return padStart(n, length, "0");
+              };
 
+            /***/
+          },
 
+        /***/ "./src/components/VDialog/VDialog.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VDialog/VDialog.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VCarousel: _VCarousel__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VCarouselItem: _VCarouselItem__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
+        /***/ "./src/components/VDialog/VDialog.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VDialog/VDialog.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDialog_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDialog.sass */ "./src/components/VDialog/VDialog.sass"
+              );
+            /* harmony import */ var _VDialog_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDialog_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VThemeProvider */ "./src/components/VThemeProvider/index.ts"
+              );
+            /* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/activatable */ "./src/mixins/activatable/index.ts"
+              );
+            /* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts"
+              );
+            /* harmony import */ var _mixins_detachable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/detachable */ "./src/mixins/detachable/index.ts"
+              );
+            /* harmony import */ var _mixins_overlayable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/overlayable */ "./src/mixins/overlayable/index.ts"
+              );
+            /* harmony import */ var _mixins_returnable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/returnable */ "./src/mixins/returnable/index.ts"
+              );
+            /* harmony import */ var _mixins_stackable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/stackable */ "./src/mixins/stackable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ }),
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/***/ "./src/components/VCheckbox/VCheckbox.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VCheckbox/VCheckbox.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-// extracted by mini-css-extract-plugin
+                return ar;
+              };
 
-/***/ }),
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-/***/ "./src/components/VCheckbox/VCheckbox.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VCheckbox/VCheckbox.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCheckbox.sass */ "./src/components/VCheckbox/VCheckbox.sass");
-/* harmony import */ var _VCheckbox_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../styles/components/_selection-controls.sass */ "./src/styles/components/_selection-controls.sass");
-/* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _mixins_selectable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/selectable */ "./src/mixins/selectable/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
-
- // Components
-
-
- // Mixins
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_selectable__WEBPACK_IMPORTED_MODULE_4__["default"].extend({
-  name: 'v-checkbox',
-  props: {
-    indeterminate: Boolean,
-    indeterminateIcon: {
-      type: String,
-      default: '$checkboxIndeterminate'
-    },
-    offIcon: {
-      type: String,
-      default: '$checkboxOff'
-    },
-    onIcon: {
-      type: String,
-      default: '$checkboxOn'
-    }
-  },
-  data: function data() {
-    return {
-      inputIndeterminate: this.indeterminate
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VInput__WEBPACK_IMPORTED_MODULE_3__["default"].options.computed.classes.call(this)), {
-        'v-input--selection-controls': true,
-        'v-input--checkbox': true,
-        'v-input--indeterminate': this.inputIndeterminate
-      });
-    },
-    computedIcon: function computedIcon() {
-      if (this.inputIndeterminate) {
-        return this.indeterminateIcon;
-      } else if (this.isActive) {
-        return this.onIcon;
-      } else {
-        return this.offIcon;
-      }
-    },
-    // Do not return undefined if disabled,
-    // according to spec, should still show
-    // a color when disabled and active
-    validationState: function validationState() {
-      if (this.isDisabled && !this.inputIndeterminate) return undefined;
-      if (this.hasError && this.shouldValidate) return 'error';
-      if (this.hasSuccess) return 'success';
-      if (this.hasColor !== null) return this.computedColor;
-      return undefined;
-    }
-  },
-  watch: {
-    indeterminate: function indeterminate(val) {
-      var _this = this; // https://github.com/vuetifyjs/vuetify/issues/8270
-
-
-      this.$nextTick(function () {
-        return _this.inputIndeterminate = val;
-      });
-    },
-    inputIndeterminate: function inputIndeterminate(val) {
-      this.$emit('update:indeterminate', val);
-    },
-    isActive: function isActive() {
-      if (!this.indeterminate) return;
-      this.inputIndeterminate = false;
-    }
-  },
-  methods: {
-    genCheckbox: function genCheckbox() {
-      return this.$createElement('div', {
-        staticClass: 'v-input--selection-controls__input'
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_2__["default"], this.setTextColor(this.validationState, {
-        props: {
-          dense: this.dense,
-          dark: this.dark,
-          light: this.light
-        }
-      }), this.computedIcon), this.genInput('checkbox', __assign(__assign({}, this.attrs$), {
-        'aria-checked': this.inputIndeterminate ? 'mixed' : this.isActive.toString()
-      })), this.genRipple(this.setTextColor(this.rippleState))]);
-    },
-    genDefaultSlot: function genDefaultSlot() {
-      return [this.genCheckbox(), this.genLabel()];
-    }
-  }
-}));
+                return ar;
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Directives
+
+            // Helpers
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_10__["default"]
+            )(
+              _mixins_activatable__WEBPACK_IMPORTED_MODULE_2__["default"],
+              _mixins_dependent__WEBPACK_IMPORTED_MODULE_3__["default"],
+              _mixins_detachable__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_overlayable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_returnable__WEBPACK_IMPORTED_MODULE_6__["default"],
+              _mixins_stackable__WEBPACK_IMPORTED_MODULE_7__["default"],
+              _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-dialog",
+                directives: {
+                  ClickOutside:
+                    _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__[
+                      "default"
+                    ],
+                },
+                props: {
+                  dark: Boolean,
+                  disabled: Boolean,
+                  fullscreen: Boolean,
+                  light: Boolean,
+                  maxWidth: {
+                    type: [String, Number],
+                    default: "none",
+                  },
+                  noClickAnimation: Boolean,
+                  origin: {
+                    type: String,
+                    default: "center center",
+                  },
+                  persistent: Boolean,
+                  retainFocus: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  scrollable: Boolean,
+                  transition: {
+                    type: [String, Boolean],
+                    default: "dialog-transition",
+                  },
+                  width: {
+                    type: [String, Number],
+                    default: "auto",
+                  },
+                },
+                data: function data() {
+                  return {
+                    activatedBy: null,
+                    animate: false,
+                    animateTimeout: -1,
+                    isActive: !!this.value,
+                    stackMinZIndex: 200,
+                    previousActiveElement: null,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    var _a;
+
+                    return (
+                      (_a = {}),
+                      (_a[("v-dialog " + this.contentClass).trim()] = true),
+                      (_a["v-dialog--active"] = this.isActive),
+                      (_a["v-dialog--persistent"] = this.persistent),
+                      (_a["v-dialog--fullscreen"] = this.fullscreen),
+                      (_a["v-dialog--scrollable"] = this.scrollable),
+                      (_a["v-dialog--animated"] = this.animate),
+                      _a
+                    );
+                  },
+                  contentClasses: function contentClasses() {
+                    return {
+                      "v-dialog__content": true,
+                      "v-dialog__content--active": this.isActive,
+                    };
+                  },
+                  hasActivator: function hasActivator() {
+                    return Boolean(
+                      !!this.$slots.activator || !!this.$scopedSlots.activator
+                    );
+                  },
+                },
+                watch: {
+                  isActive: function isActive(val) {
+                    var _a;
+
+                    if (val) {
+                      this.show();
+                      this.hideScroll();
+                    } else {
+                      this.removeOverlay();
+                      this.unbind();
+                      (_a = this.previousActiveElement) === null ||
+                      _a === void 0
+                        ? void 0
+                        : _a.focus();
+                    }
+                  },
+                  fullscreen: function fullscreen(val) {
+                    if (!this.isActive) return;
+
+                    if (val) {
+                      this.hideScroll();
+                      this.removeOverlay(false);
+                    } else {
+                      this.showScroll();
+                      this.genOverlay();
+                    }
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("full-width")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_11__["removed"]
+                    )("full-width", this);
+                  }
+                },
+                beforeMount: function beforeMount() {
+                  var _this = this;
+
+                  this.$nextTick(function () {
+                    _this.isBooted = _this.isActive;
+                    _this.isActive && _this.show();
+                  });
+                },
+                beforeDestroy: function beforeDestroy() {
+                  if (typeof window !== "undefined") this.unbind();
+                },
+                methods: {
+                  animateClick: function animateClick() {
+                    var _this = this;
+
+                    this.animate = false; // Needed for when clicking very fast
+                    // outside of the dialog
+
+                    this.$nextTick(function () {
+                      _this.animate = true;
+                      window.clearTimeout(_this.animateTimeout);
+                      _this.animateTimeout = window.setTimeout(function () {
+                        return (_this.animate = false);
+                      }, 150);
+                    });
+                  },
+                  closeConditional: function closeConditional(e) {
+                    var target = e.target; // Ignore the click if the dialog is closed or destroyed,
+                    // if it was on an element inside the content,
+                    // if it was dragged onto the overlay (#6969),
+                    // or if this isn't the topmost dialog (#9907)
+
+                    return (
+                      !(
+                        this._isDestroyed ||
+                        !this.isActive ||
+                        this.$refs.content.contains(target) ||
+                        (this.overlay &&
+                          target &&
+                          !this.overlay.$el.contains(target))
+                      ) && this.activeZIndex >= this.getMaxZIndex()
+                    );
+                  },
+                  hideScroll: function hideScroll() {
+                    if (this.fullscreen) {
+                      document.documentElement.classList.add(
+                        "overflow-y-hidden"
+                      );
+                    } else {
+                      _mixins_overlayable__WEBPACK_IMPORTED_MODULE_5__[
+                        "default"
+                      ].options.methods.hideScroll.call(this);
+                    }
+                  },
+                  show: function show() {
+                    var _this = this;
+
+                    !this.fullscreen && !this.hideOverlay && this.genOverlay(); // Double nextTick to wait for lazy content to be generated
+
+                    this.$nextTick(function () {
+                      _this.$nextTick(function () {
+                        _this.previousActiveElement = document.activeElement;
+
+                        _this.$refs.content.focus();
+
+                        _this.bind();
+                      });
+                    });
+                  },
+                  bind: function bind() {
+                    window.addEventListener("focusin", this.onFocusin);
+                  },
+                  unbind: function unbind() {
+                    window.removeEventListener("focusin", this.onFocusin);
+                  },
+                  onClickOutside: function onClickOutside(e) {
+                    this.$emit("click:outside", e);
+
+                    if (this.persistent) {
+                      this.noClickAnimation || this.animateClick();
+                    } else {
+                      this.isActive = false;
+                    }
+                  },
+                  onKeydown: function onKeydown(e) {
+                    if (
+                      e.keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                          .esc &&
+                      !this.getOpenDependents().length
+                    ) {
+                      if (!this.persistent) {
+                        this.isActive = false;
+                        var activator_1 = this.getActivator();
+                        this.$nextTick(function () {
+                          return activator_1 && activator_1.focus();
+                        });
+                      } else if (!this.noClickAnimation) {
+                        this.animateClick();
+                      }
+                    }
+
+                    this.$emit("keydown", e);
+                  },
+                  // On focus change, wrap focus to stay inside the dialog
+                  // https://github.com/vuetifyjs/vuetify/issues/6892
+                  onFocusin: function onFocusin(e) {
+                    if (!e || !this.retainFocus) return;
+                    var target = e.target;
+
+                    if (
+                      !!target && // It isn't the document or the dialog body
+                      ![document, this.$refs.content].includes(target) && // It isn't inside the dialog body
+                      !this.$refs.content.contains(target) && // We're the topmost dialog
+                      this.activeZIndex >= this.getMaxZIndex() && // It isn't inside a dependent element (like a menu)
+                      !this.getOpenDependentElements().some(function (el) {
+                        return el.contains(target);
+                      }) // So we must have focused something outside the dialog and its children
+                    ) {
+                      // Find and focus the first available element inside the dialog
+                      var focusable = this.$refs.content.querySelectorAll(
+                        'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
+                      );
+
+                      var el = __spread(focusable).find(function (el) {
+                        return !el.hasAttribute("disabled");
+                      });
+
+                      el && el.focus();
+                    }
+                  },
+                  genContent: function genContent() {
+                    var _this = this;
+
+                    return this.showLazyContent(function () {
+                      return [
+                        _this.$createElement(
+                          _VThemeProvider__WEBPACK_IMPORTED_MODULE_1__[
+                            "VThemeProvider"
+                          ],
+                          {
+                            props: {
+                              root: true,
+                              light: _this.light,
+                              dark: _this.dark,
+                            },
+                          },
+                          [
+                            _this.$createElement(
+                              "div",
+                              {
+                                class: _this.contentClasses,
+                                attrs: __assign(
+                                  {
+                                    role: "document",
+                                    tabindex: _this.isActive ? 0 : undefined,
+                                  },
+                                  _this.getScopeIdAttrs()
+                                ),
+                                on: {
+                                  keydown: _this.onKeydown,
+                                },
+                                style: {
+                                  zIndex: _this.activeZIndex,
+                                },
+                                ref: "content",
+                              },
+                              [_this.genTransition()]
+                            ),
+                          ]
+                        ),
+                      ];
+                    });
+                  },
+                  genTransition: function genTransition() {
+                    var content = this.genInnerContent();
+                    if (!this.transition) return content;
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.transition,
+                          origin: this.origin,
+                          appear: true,
+                        },
+                      },
+                      [content]
+                    );
+                  },
+                  genInnerContent: function genInnerContent() {
+                    var data = {
+                      class: this.classes,
+                      ref: "dialog",
+                      directives: [
+                        {
+                          name: "click-outside",
+                          value: {
+                            handler: this.onClickOutside,
+                            closeConditional: this.closeConditional,
+                            include: this.getOpenDependentElements,
+                          },
+                        },
+                        {
+                          name: "show",
+                          value: this.isActive,
+                        },
+                      ],
+                      style: {
+                        transformOrigin: this.origin,
+                      },
+                    };
+
+                    if (!this.fullscreen) {
+                      data.style = __assign(__assign({}, data.style), {
+                        maxWidth:
+                          this.maxWidth === "none"
+                            ? undefined
+                            : Object(
+                                _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                                  "convertToUnit"
+                                ]
+                              )(this.maxWidth),
+                        width:
+                          this.width === "auto"
+                            ? undefined
+                            : Object(
+                                _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                                  "convertToUnit"
+                                ]
+                              )(this.width),
+                      });
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      data,
+                      this.getContentSlot()
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-dialog__container",
+                      class: {
+                        "v-dialog__container--attached":
+                          this.attach === "" ||
+                          this.attach === true ||
+                          this.attach === "attach",
+                      },
+                      attrs: {
+                        role: "dialog",
+                      },
+                    },
+                    [this.genActivator(), this.genContent()]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VCheckbox/VSimpleCheckbox.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VCheckbox/VSimpleCheckbox.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VDialog/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VDialog/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VDialog, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDialog__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDialog */ "./src/components/VDialog/VDialog.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDialog",
+              function () {
+                return _VDialog__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-// extracted by mini-css-extract-plugin
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VDialog__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VCheckbox/VSimpleCheckbox.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VCheckbox/VSimpleCheckbox.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSimpleCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSimpleCheckbox.sass */ "./src/components/VCheckbox/VSimpleCheckbox.sass");
-/* harmony import */ var _VSimpleCheckbox_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSimpleCheckbox_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
-
-
- // Mixins
-
-
- // Utilities
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
-  name: 'v-simple-checkbox',
-  functional: true,
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_1__["default"]
-  },
-  props: __assign(__assign(__assign({}, _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"].options.props), _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"].options.props), {
-    disabled: Boolean,
-    ripple: {
-      type: Boolean,
-      default: true
-    },
-    value: Boolean,
-    indeterminate: Boolean,
-    indeterminateIcon: {
-      type: String,
-      default: '$checkboxIndeterminate'
-    },
-    onIcon: {
-      type: String,
-      default: '$checkboxOn'
-    },
-    offIcon: {
-      type: String,
-      default: '$checkboxOff'
-    }
-  }),
-  render: function render(h, _a) {
-    var props = _a.props,
-        data = _a.data,
-        listeners = _a.listeners;
-    var children = [];
-
-    if (props.ripple && !props.disabled) {
-      var ripple_1 = h('div', _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"].options.methods.setTextColor(props.color, {
-        staticClass: 'v-input--selection-controls__ripple',
-        directives: [{
-          name: 'ripple',
-          value: {
-            center: true
-          }
-        }]
-      }));
-      children.push(ripple_1);
-    }
-
-    var icon = props.offIcon;
-    if (props.indeterminate) icon = props.indeterminateIcon;else if (props.value) icon = props.onIcon;
-    children.push(h(_VIcon__WEBPACK_IMPORTED_MODULE_3__["VIcon"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"].options.methods.setTextColor(props.value && props.color, {
-      props: {
-        disabled: props.disabled,
-        dark: props.dark,
-        light: props.light
-      }
-    }), icon));
-    var classes = {
-      'v-simple-checkbox': true,
-      'v-simple-checkbox--disabled': props.disabled
-    };
-    return h('div', Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_6__["default"])(data, {
-      class: classes,
-      on: {
-        click: function click(e) {
-          e.stopPropagation();
-
-          if (data.on && data.on.input && !props.disabled) {
-            Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["wrapInArray"])(data.on.input).forEach(function (f) {
-              return f(!props.value);
-            });
-          }
-        }
-      }
-    }), children);
-  }
-}));
+        /***/ "./src/components/VDivider/VDivider.sass":
+          /*!***********************************************!*\
+  !*** ./src/components/VDivider/VDivider.sass ***!
+  \***********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VDivider/VDivider.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VDivider/VDivider.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDivider_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDivider.sass */ "./src/components/VDivider/VDivider.sass"
+              );
+            /* harmony import */ var _VDivider_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VDivider_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-divider",
+                props: {
+                  inset: Boolean,
+                  vertical: Boolean,
+                },
+                render: function render(h) {
+                  // WAI-ARIA attributes
+                  var orientation;
+
+                  if (!this.$attrs.role || this.$attrs.role === "separator") {
+                    orientation = this.vertical ? "vertical" : "horizontal";
+                  }
 
-/***/ "./src/components/VCheckbox/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VCheckbox/index.ts ***!
-  \*******************************************/
-/*! exports provided: VCheckbox, VSimpleCheckbox, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                  return h("hr", {
+                    class: __assign(
+                      {
+                        "v-divider": true,
+                        "v-divider--inset": this.inset,
+                        "v-divider--vertical": this.vertical,
+                      },
+                      this.themeClasses
+                    ),
+                    attrs: __assign(
+                      {
+                        role: "separator",
+                        "aria-orientation": orientation,
+                      },
+                      this.$attrs
+                    ),
+                    on: this.$listeners,
+                  });
+                },
+              });
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCheckbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCheckbox */ "./src/components/VCheckbox/VCheckbox.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCheckbox", function() { return _VCheckbox__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSimpleCheckbox", function() { return _VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+        /***/ "./src/components/VDivider/index.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VDivider/index.ts ***!
+  \******************************************/
+          /*! exports provided: VDivider, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VDivider__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VDivider */ "./src/components/VDivider/VDivider.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDivider",
+              function () {
+                return _VDivider__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VDivider__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VExpansionPanel/VExpansionPanel.sass":
+          /*!*************************************************************!*\
+  !*** ./src/components/VExpansionPanel/VExpansionPanel.sass ***!
+  \*************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VCheckbox: _VCheckbox__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VSimpleCheckbox: _VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
+        /***/ "./src/components/VExpansionPanel/VExpansionPanel.ts":
+          /*!***********************************************************!*\
+  !*** ./src/components/VExpansionPanel/VExpansionPanel.ts ***!
+  \***********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                Object(
+                  _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__["factory"]
+                )("expansionPanels", "v-expansion-panel", "v-expansion-panels"),
+                Object(
+                  _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__["provide"]
+                )("expansionPanel", true)
+                /* @vue/component */
+              ).extend({
+                name: "v-expansion-panel",
+                props: {
+                  disabled: Boolean,
+                  readonly: Boolean,
+                },
+                data: function data() {
+                  return {
+                    content: null,
+                    header: null,
+                    nextIsActive: false,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-expansion-panel--active": this.isActive,
+                        "v-expansion-panel--next-active": this.nextIsActive,
+                        "v-expansion-panel--disabled": this.isDisabled,
+                      },
+                      this.groupClasses
+                    );
+                  },
+                  isDisabled: function isDisabled() {
+                    return this.expansionPanels.disabled || this.disabled;
+                  },
+                  isReadonly: function isReadonly() {
+                    return this.expansionPanels.readonly || this.readonly;
+                  },
+                },
+                methods: {
+                  registerContent: function registerContent(vm) {
+                    this.content = vm;
+                  },
+                  unregisterContent: function unregisterContent() {
+                    this.content = null;
+                  },
+                  registerHeader: function registerHeader(vm) {
+                    this.header = vm;
+                    vm.$on("click", this.onClick);
+                  },
+                  unregisterHeader: function unregisterHeader() {
+                    this.header = null;
+                  },
+                  onClick: function onClick(e) {
+                    if (e.detail) this.header.$el.blur();
+                    this.$emit("click", e);
+                    this.isReadonly || this.isDisabled || this.toggle();
+                  },
+                  toggle: function toggle() {
+                    var _this = this;
+                    /* istanbul ignore else */
+
+                    if (this.content) this.content.isBooted = true;
+                    this.$nextTick(function () {
+                      return _this.$emit("change");
+                    });
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-expansion-panel",
+                      class: this.classes,
+                      attrs: {
+                        "aria-expanded": String(this.isActive),
+                      },
+                    },
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"]
+                    )(this)
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VChip/VChip.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VChip/VChip.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VExpansionPanel/VExpansionPanelContent.ts":
+          /*!******************************************************************!*\
+  !*** ./src/components/VExpansionPanel/VExpansionPanelContent.ts ***!
+  \******************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _mixins_bootable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/bootable */ "./src/mixins/bootable/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"]
+            )(
+              _mixins_bootable__WEBPACK_IMPORTED_MODULE_1__["default"],
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+              Object(
+                _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__["inject"]
+              )(
+                "expansionPanel",
+                "v-expansion-panel-content",
+                "v-expansion-panel"
+              )
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-expansion-panel-content",
+                computed: {
+                  isActive: function isActive() {
+                    return this.expansionPanel.isActive;
+                  },
+                },
+                created: function created() {
+                  this.expansionPanel.registerContent(this);
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.expansionPanel.unregisterContent();
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  return h(
+                    _transitions__WEBPACK_IMPORTED_MODULE_0__[
+                      "VExpandTransition"
+                    ],
+                    this.showLazyContent(function () {
+                      return [
+                        h(
+                          "div",
+                          _this.setBackgroundColor(_this.color, {
+                            staticClass: "v-expansion-panel-content",
+                            directives: [
+                              {
+                                name: "show",
+                                value: _this.isActive,
+                              },
+                            ],
+                          }),
+                          [
+                            h(
+                              "div",
+                              {
+                                class: "v-expansion-panel-content__wrap",
+                              },
+                              Object(
+                                _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                                  "getSlot"
+                                ]
+                              )(_this)
+                            ),
+                          ]
+                        ),
+                      ];
+                    })
+                  );
+                },
+              });
 
-// extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VExpansionPanel/VExpansionPanelHeader.ts":
+          /*!*****************************************************************!*\
+  !*** ./src/components/VExpansionPanel/VExpansionPanelHeader.ts ***!
+  \*****************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Components
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"]
+            )(
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+              Object(
+                _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__["inject"]
+              )(
+                "expansionPanel",
+                "v-expansion-panel-header",
+                "v-expansion-panel"
+              )
+            );
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-expansion-panel-header",
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_4__["default"],
+                },
+                props: {
+                  disableIconRotate: Boolean,
+                  expandIcon: {
+                    type: String,
+                    default: "$expand",
+                  },
+                  hideActions: Boolean,
+                  ripple: {
+                    type: [Boolean, Object],
+                    default: false,
+                  },
+                },
+                data: function data() {
+                  return {
+                    hasMousedown: false,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return {
+                      "v-expansion-panel-header--active": this.isActive,
+                      "v-expansion-panel-header--mousedown": this.hasMousedown,
+                    };
+                  },
+                  isActive: function isActive() {
+                    return this.expansionPanel.isActive;
+                  },
+                  isDisabled: function isDisabled() {
+                    return this.expansionPanel.isDisabled;
+                  },
+                  isReadonly: function isReadonly() {
+                    return this.expansionPanel.isReadonly;
+                  },
+                },
+                created: function created() {
+                  this.expansionPanel.registerHeader(this);
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.expansionPanel.unregisterHeader();
+                },
+                methods: {
+                  onClick: function onClick(e) {
+                    this.$emit("click", e);
+                  },
+                  genIcon: function genIcon() {
+                    var icon = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"]
+                    )(this, "actions") || [
+                      this.$createElement(
+                        _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                        this.expandIcon
+                      ),
+                    ];
+                    return this.$createElement(
+                      _transitions__WEBPACK_IMPORTED_MODULE_0__[
+                        "VFadeTransition"
+                      ],
+                      [
+                        this.$createElement(
+                          "div",
+                          {
+                            staticClass: "v-expansion-panel-header__icon",
+                            class: {
+                              "v-expansion-panel-header__icon--disable-rotate":
+                                this.disableIconRotate,
+                            },
+                            directives: [
+                              {
+                                name: "show",
+                                value: !this.isDisabled,
+                              },
+                            ],
+                          },
+                          icon
+                        ),
+                      ]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  return h(
+                    "button",
+                    this.setBackgroundColor(this.color, {
+                      staticClass: "v-expansion-panel-header",
+                      class: this.classes,
+                      attrs: {
+                        tabindex: this.isDisabled ? -1 : null,
+                        type: "button",
+                      },
+                      directives: [
+                        {
+                          name: "ripple",
+                          value: this.ripple,
+                        },
+                      ],
+                      on: __assign(__assign({}, this.$listeners), {
+                        click: this.onClick,
+                        mousedown: function mousedown() {
+                          return (_this.hasMousedown = true);
+                        },
+                        mouseup: function mouseup() {
+                          return (_this.hasMousedown = false);
+                        },
+                      }),
+                    }),
+                    [
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"]
+                      )(
+                        this,
+                        "default",
+                        {
+                          open: this.isActive,
+                        },
+                        true
+                      ),
+                      this.hideActions || this.genIcon(),
+                    ]
+                  );
+                },
+              });
 
-/***/ "./src/components/VChip/VChip.ts":
-/*!***************************************!*\
-  !*** ./src/components/VChip/VChip.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VChip_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VChip.sass */ "./src/components/VChip/VChip.sass");
-/* harmony import */ var _VChip_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VChip_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/routable */ "./src/mixins/routable/index.ts");
-/* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            /***/
+          },
 
-  return ar;
-}; // Styles
+        /***/ "./src/components/VExpansionPanel/VExpansionPanels.ts":
+          /*!************************************************************!*\
+  !*** ./src/components/VExpansionPanel/VExpansionPanels.ts ***!
+  \************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VExpansionPanel_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VExpansionPanel.sass */ "./src/components/VExpansionPanel/VExpansionPanel.sass"
+              );
+            /* harmony import */ var _VExpansionPanel_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VExpansionPanel_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__[
+                "BaseItemGroup"
+              ].extend({
+                name: "v-expansion-panels",
+                provide: function provide() {
+                  return {
+                    expansionPanels: this,
+                  };
+                },
+                props: {
+                  accordion: Boolean,
+                  disabled: Boolean,
+                  flat: Boolean,
+                  hover: Boolean,
+                  focusable: Boolean,
+                  inset: Boolean,
+                  popout: Boolean,
+                  readonly: Boolean,
+                  tile: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__[
+                          "BaseItemGroup"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-expansion-panels": true,
+                        "v-expansion-panels--accordion": this.accordion,
+                        "v-expansion-panels--flat": this.flat,
+                        "v-expansion-panels--hover": this.hover,
+                        "v-expansion-panels--focusable": this.focusable,
+                        "v-expansion-panels--inset": this.inset,
+                        "v-expansion-panels--popout": this.popout,
+                        "v-expansion-panels--tile": this.tile,
+                      }
+                    );
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("expand")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_2__["breaking"]
+                    )("expand", "multiple", this);
+                  }
+                  /* istanbul ignore next */
+
+                  if (
+                    Array.isArray(this.value) &&
+                    this.value.length > 0 &&
+                    typeof this.value[0] === "boolean"
+                  ) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_2__["breaking"]
+                    )(':value="[true, false, true]"', ':value="[0, 2]"', this);
+                  }
+                },
+                methods: {
+                  updateItem: function updateItem(item, index) {
+                    var value = this.getValue(item, index);
+                    var nextValue = this.getValue(item, index + 1);
+                    item.isActive = this.toggleMethod(value);
+                    item.nextIsActive = this.toggleMethod(nextValue);
+                  },
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VExpansionPanel/index.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VExpansionPanel/index.ts ***!
+  \*************************************************/
+          /*! exports provided: VExpansionPanels, VExpansionPanel, VExpansionPanelHeader, VExpansionPanelContent, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VExpansionPanels__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VExpansionPanels */ "./src/components/VExpansionPanel/VExpansionPanels.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanels",
+              function () {
+                return _VExpansionPanels__WEBPACK_IMPORTED_MODULE_0__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VExpansionPanel__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VExpansionPanel */ "./src/components/VExpansionPanel/VExpansionPanel.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanel",
+              function () {
+                return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _VExpansionPanelContent__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VExpansionPanelContent */ "./src/components/VExpansionPanel/VExpansionPanelContent.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanelContent",
+              function () {
+                return _VExpansionPanelContent__WEBPACK_IMPORTED_MODULE_2__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VExpansionPanelHeader__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VExpansionPanelHeader */ "./src/components/VExpansionPanel/VExpansionPanelHeader.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanelHeader",
+              function () {
+                return _VExpansionPanelHeader__WEBPACK_IMPORTED_MODULE_3__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VExpansionPanels:
+                  _VExpansionPanels__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VExpansionPanel:
+                  _VExpansionPanel__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VExpansionPanelHeader:
+                  _VExpansionPanelHeader__WEBPACK_IMPORTED_MODULE_3__[
+                    "default"
+                  ],
+                VExpansionPanelContent:
+                  _VExpansionPanelContent__WEBPACK_IMPORTED_MODULE_2__[
+                    "default"
+                  ],
+              },
+            };
 
- // Components
+            /***/
+          },
 
+        /***/ "./src/components/VFileInput/VFileInput.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VFileInput/VFileInput.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
- // Mixins
+        /***/ "./src/components/VFileInput/VFileInput.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VFileInput/VFileInput.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VFileInput_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VFileInput.sass */ "./src/components/VFileInput/VFileInput.sass"
+              );
+            /* harmony import */ var _VFileInput_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VFileInput_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VTextField__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VTextField */ "./src/components/VTextField/index.ts"
+              );
+            /* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VChip */ "./src/components/VChip/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
- // Utilities
+                return ar;
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-file-input",
+                model: {
+                  prop: "value",
+                  event: "change",
+                },
+                props: {
+                  chips: Boolean,
+                  clearable: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  counterSizeString: {
+                    type: String,
+                    default: "$vuetify.fileInput.counterSize",
+                  },
+                  counterString: {
+                    type: String,
+                    default: "$vuetify.fileInput.counter",
+                  },
+                  hideInput: Boolean,
+                  placeholder: String,
+                  prependIcon: {
+                    type: String,
+                    default: "$file",
+                  },
+                  readonly: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  showSize: {
+                    type: [Boolean, Number],
+                    default: false,
+                    validator: function validator(v) {
+                      return typeof v === "boolean" || [1000, 1024].includes(v);
+                    },
+                  },
+                  smallChips: Boolean,
+                  truncateLength: {
+                    type: [Number, String],
+                    default: 22,
+                  },
+                  type: {
+                    type: String,
+                    default: "file",
+                  },
+                  value: {
+                    default: undefined,
+                    validator: function validator(val) {
+                      return Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                          "wrapInArray"
+                        ]
+                      )(val).every(function (v) {
+                        return v != null && _typeof(v) === "object";
+                      });
+                    },
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VTextField__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-file-input": true,
+                      }
+                    );
+                  },
+                  computedCounterValue: function computedCounterValue() {
+                    var fileCount =
+                      this.isMultiple && this.lazyValue
+                        ? this.lazyValue.length
+                        : this.lazyValue instanceof File
+                        ? 1
+                        : 0;
+                    if (!this.showSize)
+                      return this.$vuetify.lang.t(
+                        this.counterString,
+                        fileCount
+                      );
+                    var bytes = this.internalArrayValue.reduce(function (
+                      bytes,
+                      _a
+                    ) {
+                      var _b = _a.size,
+                        size = _b === void 0 ? 0 : _b;
+                      return bytes + size;
+                    },
+                    0);
+                    return this.$vuetify.lang.t(
+                      this.counterSizeString,
+                      fileCount,
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                          "humanReadableFileSize"
+                        ]
+                      )(bytes, this.base === 1024)
+                    );
+                  },
+                  internalArrayValue: function internalArrayValue() {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_3__["wrapInArray"]
+                    )(this.internalValue);
+                  },
+                  internalValue: {
+                    get: function get() {
+                      return this.lazyValue;
+                    },
+                    set: function set(val) {
+                      this.lazyValue = val;
+                      this.$emit("change", this.lazyValue);
+                    },
+                  },
+                  isDirty: function isDirty() {
+                    return this.internalArrayValue.length > 0;
+                  },
+                  isLabelActive: function isLabelActive() {
+                    return this.isDirty;
+                  },
+                  isMultiple: function isMultiple() {
+                    return this.$attrs.hasOwnProperty("multiple");
+                  },
+                  text: function text() {
+                    var _this = this;
+
+                    if (!this.isDirty) return [this.placeholder];
+                    return this.internalArrayValue.map(function (file) {
+                      var _a = file.name,
+                        name = _a === void 0 ? "" : _a,
+                        _b = file.size,
+                        size = _b === void 0 ? 0 : _b;
+
+                      var truncatedText = _this.truncateText(name);
+
+                      return !_this.showSize
+                        ? truncatedText
+                        : truncatedText +
+                            " (" +
+                            Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                                "humanReadableFileSize"
+                              ]
+                            )(size, _this.base === 1024) +
+                            ")";
+                    });
+                  },
+                  base: function base() {
+                    return typeof this.showSize !== "boolean"
+                      ? this.showSize
+                      : undefined;
+                  },
+                  hasChips: function hasChips() {
+                    return this.chips || this.smallChips;
+                  },
+                },
+                watch: {
+                  readonly: {
+                    handler: function handler(v) {
+                      if (v === true)
+                        Object(
+                          _util_console__WEBPACK_IMPORTED_MODULE_4__[
+                            "consoleError"
+                          ]
+                        )("readonly is not supported on <v-file-input>", this);
+                    },
+                    immediate: true,
+                  },
+                  value: function value(v) {
+                    var value = this.isMultiple ? v : v ? [v] : [];
+
+                    if (
+                      !Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__["deepEqual"]
+                      )(value, this.$refs.input.files)
+                    ) {
+                      // When the input value is changed programatically, clear the
+                      // internal input's value so that the `onInput` handler
+                      // can be triggered again if the user re-selects the exact
+                      // same file(s). Ideally, `input.files` should be
+                      // manipulated directly but that property is readonly.
+                      this.$refs.input.value = "";
+                    }
+                  },
+                },
+                methods: {
+                  clearableCallback: function clearableCallback() {
+                    this.internalValue = this.isMultiple ? [] : undefined;
+                    this.$refs.input.value = "";
+                  },
+                  genChips: function genChips() {
+                    var _this = this;
+
+                    if (!this.isDirty) return [];
+                    return this.text.map(function (text, index) {
+                      return _this.$createElement(
+                        _VChip__WEBPACK_IMPORTED_MODULE_2__["VChip"],
+                        {
+                          props: {
+                            small: _this.smallChips,
+                          },
+                          on: {
+                            "click:close": function clickClose() {
+                              var internalValue = _this.internalValue;
+                              internalValue.splice(index, 1);
+                              _this.internalValue = internalValue; // Trigger the watcher
+                            },
+                          },
+                        },
+                        [text]
+                      );
+                    });
+                  },
+                  genControl: function genControl() {
+                    var render =
+                      _VTextField__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genControl.call(this);
+
+                    if (this.hideInput) {
+                      render.data.style = Object(
+                        _util_mergeData__WEBPACK_IMPORTED_MODULE_5__[
+                          "mergeStyles"
+                        ]
+                      )(render.data.style, {
+                        display: "none",
+                      });
+                    }
+
+                    return render;
+                  },
+                  genInput: function genInput() {
+                    var input =
+                      _VTextField__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genInput.call(this); // We should not be setting value
+                    // programmatically on the input
+                    // when it is using type="file"
+
+                    delete input.data.domProps.value; // This solves an issue in Safari where
+                    // nothing happens when adding a file
+                    // do to the input event not firing
+                    // https://github.com/vuetifyjs/vuetify/issues/7941
+
+                    delete input.data.on.input;
+                    input.data.on.change = this.onInput;
+                    return [this.genSelections(), input];
+                  },
+                  genPrependSlot: function genPrependSlot() {
+                    var _this = this;
+
+                    if (!this.prependIcon) return null;
+                    var icon = this.genIcon("prepend", function () {
+                      _this.$refs.input.click();
+                    });
+                    return this.genSlot("prepend", "outer", [icon]);
+                  },
+                  genSelectionText: function genSelectionText() {
+                    var length = this.text.length;
+                    if (length < 2) return this.text;
+                    if (this.showSize && !this.counter)
+                      return [this.computedCounterValue];
+                    return [this.$vuetify.lang.t(this.counterString, length)];
+                  },
+                  genSelections: function genSelections() {
+                    var _this = this;
+
+                    var children = [];
+
+                    if (this.isDirty && this.$scopedSlots.selection) {
+                      this.internalArrayValue.forEach(function (file, index) {
+                        if (!_this.$scopedSlots.selection) return;
+                        children.push(
+                          _this.$scopedSlots.selection({
+                            text: _this.text[index],
+                            file: file,
+                            index: index,
+                          })
+                        );
+                      });
+                    } else {
+                      children.push(
+                        this.hasChips && this.isDirty
+                          ? this.genChips()
+                          : this.genSelectionText()
+                      );
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-file-input__text",
+                        class: {
+                          "v-file-input__text--placeholder":
+                            this.placeholder && !this.isDirty,
+                          "v-file-input__text--chips":
+                            this.hasChips && !this.$scopedSlots.selection,
+                        },
+                      },
+                      children
+                    );
+                  },
+                  genTextFieldSlot: function genTextFieldSlot() {
+                    var _this = this;
+
+                    var node =
+                      _VTextField__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genTextFieldSlot.call(this);
+                    node.data.on = __assign(__assign({}, node.data.on || {}), {
+                      click: function click() {
+                        return _this.$refs.input.click();
+                      },
+                    });
+                    return node;
+                  },
+                  onInput: function onInput(e) {
+                    var files = __spread(e.target.files || []);
+
+                    this.internalValue = this.isMultiple ? files : files[0]; // Set initialValue here otherwise isFocused
+                    // watcher in VTextField will emit a change
+                    // event whenever the component is blurred
+
+                    this.initialValue = this.internalValue;
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    this.$emit("keydown", e);
+                  },
+                  truncateText: function truncateText(str) {
+                    if (str.length < Number(this.truncateLength)) return str;
+                    var charsKeepOneSide = Math.floor(
+                      (Number(this.truncateLength) - 1) / 2
+                    );
+                    return (
+                      str.slice(0, charsKeepOneSide) +
+                      "\u2026" +
+                      str.slice(str.length - charsKeepOneSide)
+                    );
+                  },
+                },
+              });
 
+            /***/
+          },
 
-/* @vue/component */
+        /***/ "./src/components/VFileInput/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VFileInput/index.ts ***!
+  \********************************************/
+          /*! exports provided: VFileInput, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VFileInput__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VFileInput */ "./src/components/VFileInput/VFileInput.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFileInput",
+              function () {
+                return _VFileInput__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_sizeable__WEBPACK_IMPORTED_MODULE_9__["default"], _mixins_routable__WEBPACK_IMPORTED_MODULE_8__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_5__["factory"])('chipGroup'), Object(_mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__["factory"])('inputValue')).extend({
-  name: 'v-chip',
-  props: {
-    active: {
-      type: Boolean,
-      default: true
-    },
-    activeClass: {
-      type: String,
-      default: function _default() {
-        if (!this.chipGroup) return '';
-        return this.chipGroup.activeClass;
-      }
-    },
-    close: Boolean,
-    closeIcon: {
-      type: String,
-      default: '$delete'
-    },
-    disabled: Boolean,
-    draggable: Boolean,
-    filter: Boolean,
-    filterIcon: {
-      type: String,
-      default: '$complete'
-    },
-    label: Boolean,
-    link: Boolean,
-    outlined: Boolean,
-    pill: Boolean,
-    tag: {
-      type: String,
-      default: 'span'
-    },
-    textColor: String,
-    value: null
-  },
-  data: function data() {
-    return {
-      proxyClass: 'v-chip--active'
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign(__assign(__assign({
-        'v-chip': true
-      }, _mixins_routable__WEBPACK_IMPORTED_MODULE_8__["default"].options.computed.classes.call(this)), {
-        'v-chip--clickable': this.isClickable,
-        'v-chip--disabled': this.disabled,
-        'v-chip--draggable': this.draggable,
-        'v-chip--label': this.label,
-        'v-chip--link': this.isLink,
-        'v-chip--no-color': !this.color,
-        'v-chip--outlined': this.outlined,
-        'v-chip--pill': this.pill,
-        'v-chip--removable': this.hasClose
-      }), this.themeClasses), this.sizeableClasses), this.groupClasses);
-    },
-    hasClose: function hasClose() {
-      return Boolean(this.close);
-    },
-    isClickable: function isClickable() {
-      return Boolean(_mixins_routable__WEBPACK_IMPORTED_MODULE_8__["default"].options.computed.isClickable.call(this) || this.chipGroup);
-    }
-  },
-  created: function created() {
-    var _this = this;
-
-    var breakingProps = [['outline', 'outlined'], ['selected', 'input-value'], ['value', 'active'], ['@input', '@active.sync']];
-    /* istanbul ignore next */
-
-    breakingProps.forEach(function (_a) {
-      var _b = __read(_a, 2),
-          original = _b[0],
-          replacement = _b[1];
-
-      if (_this.$attrs.hasOwnProperty(original)) Object(_util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"])(original, replacement, _this);
-    });
-  },
-  methods: {
-    click: function click(e) {
-      this.$emit('click', e);
-      this.chipGroup && this.toggle();
-    },
-    genFilter: function genFilter() {
-      var children = [];
-
-      if (this.isActive) {
-        children.push(this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-          staticClass: 'v-chip__filter',
-          props: {
-            left: true
-          }
-        }, this.filterIcon));
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VFileInput__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      return this.$createElement(_transitions__WEBPACK_IMPORTED_MODULE_2__["VExpandXTransition"], children);
-    },
-    genClose: function genClose() {
-      var _this = this;
-
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        staticClass: 'v-chip__close',
-        props: {
-          right: true,
-          size: 18
-        },
-        on: {
-          click: function click(e) {
-            e.stopPropagation();
-            e.preventDefault();
-
-            _this.$emit('click:close');
-
-            _this.$emit('update:active', false);
-          }
-        }
-      }, this.closeIcon);
-    },
-    genContent: function genContent() {
-      return this.$createElement('span', {
-        staticClass: 'v-chip__content'
-      }, [this.filter && this.genFilter(), this.$slots.default, this.hasClose && this.genClose()]);
-    }
-  },
-  render: function render(h) {
-    var children = [this.genContent()];
-
-    var _a = this.generateRouteLink(),
-        tag = _a.tag,
-        data = _a.data;
-
-    data.attrs = __assign(__assign({}, data.attrs), {
-      draggable: this.draggable ? 'true' : undefined,
-      tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs.tabindex
-    });
-    data.directives.push({
-      name: 'show',
-      value: this.active
-    });
-    data = this.setBackgroundColor(this.color, data);
-    var color = this.textColor || this.outlined && this.color;
-    return h(tag, this.setTextColor(color, data), children);
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VFooter/VFooter.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VFooter/VFooter.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VChip/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VChip/index.ts ***!
-  \***************************************/
-/*! exports provided: VChip, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+        /***/ "./src/components/VFooter/VFooter.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VFooter/VFooter.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VFooter_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VFooter.sass */ "./src/components/VFooter/VFooter.sass"
+              );
+            /* harmony import */ var _VFooter_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VFooter_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts"
+              );
+            /* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts"
+              );
+            /* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"],
+                Object(
+                  _mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__[
+                    "default"
+                  ]
+                )("footer", ["height", "inset"]),
+                _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "v-footer",
+                props: {
+                  height: {
+                    default: "auto",
+                    type: [Number, String],
+                  },
+                  inset: Boolean,
+                  padless: Boolean,
+                  tag: {
+                    type: String,
+                    default: "footer",
+                  },
+                },
+                computed: {
+                  applicationProperty: function applicationProperty() {
+                    return this.inset ? "insetFooter" : "footer";
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-footer--absolute": this.absolute,
+                        "v-footer--fixed":
+                          !this.absolute && (this.app || this.fixed),
+                        "v-footer--padless": this.padless,
+                        "v-footer--inset": this.inset,
+                      }
+                    );
+                  },
+                  computedBottom: function computedBottom() {
+                    if (!this.isPositioned) return undefined;
+                    return this.app ? this.$vuetify.application.bottom : 0;
+                  },
+                  computedLeft: function computedLeft() {
+                    if (!this.isPositioned) return undefined;
+                    return this.app && this.inset
+                      ? this.$vuetify.application.left
+                      : 0;
+                  },
+                  computedRight: function computedRight() {
+                    if (!this.isPositioned) return undefined;
+                    return this.app && this.inset
+                      ? this.$vuetify.application.right
+                      : 0;
+                  },
+                  isPositioned: function isPositioned() {
+                    return Boolean(this.absolute || this.fixed || this.app);
+                  },
+                  styles: function styles() {
+                    var height = parseInt(this.height);
+                    return __assign(
+                      __assign(
+                        {},
+                        _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.styles.call(this)
+                      ),
+                      {
+                        height: isNaN(height)
+                          ? height
+                          : Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                                "convertToUnit"
+                              ]
+                            )(height),
+                        left: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedLeft),
+                        right: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedRight),
+                        bottom: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedBottom),
+                      }
+                    );
+                  },
+                },
+                methods: {
+                  updateApplication: function updateApplication() {
+                    var height = parseInt(this.height);
+                    return isNaN(height)
+                      ? this.$el
+                        ? this.$el.clientHeight
+                        : 0
+                      : height;
+                  },
+                },
+                render: function render(h) {
+                  var data = this.setBackgroundColor(this.color, {
+                    staticClass: "v-footer",
+                    class: this.classes,
+                    style: this.styles,
+                  });
+                  return h(this.tag, data, this.$slots.default);
+                },
+              });
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VChip */ "./src/components/VChip/VChip.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VChip", function() { return _VChip__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            /***/
+          },
 
+        /***/ "./src/components/VFooter/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VFooter/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VFooter, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VFooter__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VFooter */ "./src/components/VFooter/VFooter.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFooter",
+              function () {
+                return _VFooter__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VFooter__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/* harmony default export */ __webpack_exports__["default"] = (_VChip__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VForm/VForm.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VForm/VForm.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Mixins
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(
+                _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__["default"],
+                Object(
+                  _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__["provide"]
+                )("form")
+                /* @vue/component */
+              ).extend({
+                name: "v-form",
+                provide: function provide() {
+                  return {
+                    form: this,
+                  };
+                },
+                inheritAttrs: false,
+                props: {
+                  disabled: Boolean,
+                  lazyValidation: Boolean,
+                  readonly: Boolean,
+                  value: Boolean,
+                },
+                data: function data() {
+                  return {
+                    inputs: [],
+                    watchers: [],
+                    errorBag: {},
+                  };
+                },
+                watch: {
+                  errorBag: {
+                    handler: function handler(val) {
+                      var errors = Object.values(val).includes(true);
+                      this.$emit("input", !errors);
+                    },
+                    deep: true,
+                    immediate: true,
+                  },
+                },
+                methods: {
+                  watchInput: function watchInput(input) {
+                    var _this = this;
+
+                    var watcher = function watcher(input) {
+                      return input.$watch(
+                        "hasError",
+                        function (val) {
+                          _this.$set(_this.errorBag, input._uid, val);
+                        },
+                        {
+                          immediate: true,
+                        }
+                      );
+                    };
+
+                    var watchers = {
+                      _uid: input._uid,
+                      valid: function valid() {},
+                      shouldValidate: function shouldValidate() {},
+                    };
+
+                    if (this.lazyValidation) {
+                      // Only start watching inputs if we need to
+                      watchers.shouldValidate = input.$watch(
+                        "shouldValidate",
+                        function (val) {
+                          if (!val) return; // Only watch if we're not already doing it
+
+                          if (_this.errorBag.hasOwnProperty(input._uid)) return;
+                          watchers.valid = watcher(input);
+                        }
+                      );
+                    } else {
+                      watchers.valid = watcher(input);
+                    }
+
+                    return watchers;
+                  },
+
+                  /** @public */
+                  validate: function validate() {
+                    return (
+                      this.inputs.filter(function (input) {
+                        return !input.validate(true);
+                      }).length === 0
+                    );
+                  },
+
+                  /** @public */
+                  reset: function reset() {
+                    this.inputs.forEach(function (input) {
+                      return input.reset();
+                    });
+                    this.resetErrorBag();
+                  },
+                  resetErrorBag: function resetErrorBag() {
+                    var _this = this;
+
+                    if (this.lazyValidation) {
+                      // Account for timeout in validatable
+                      setTimeout(function () {
+                        _this.errorBag = {};
+                      }, 0);
+                    }
+                  },
+
+                  /** @public */
+                  resetValidation: function resetValidation() {
+                    this.inputs.forEach(function (input) {
+                      return input.resetValidation();
+                    });
+                    this.resetErrorBag();
+                  },
+                  register: function register(input) {
+                    this.inputs.push(input);
+                    this.watchers.push(this.watchInput(input));
+                  },
+                  unregister: function unregister(input) {
+                    var found = this.inputs.find(function (i) {
+                      return i._uid === input._uid;
+                    });
+                    if (!found) return;
+                    var unwatch = this.watchers.find(function (i) {
+                      return i._uid === found._uid;
+                    });
+
+                    if (unwatch) {
+                      unwatch.valid();
+                      unwatch.shouldValidate();
+                    }
+
+                    this.watchers = this.watchers.filter(function (i) {
+                      return i._uid !== found._uid;
+                    });
+                    this.inputs = this.inputs.filter(function (i) {
+                      return i._uid !== found._uid;
+                    });
+                    this.$delete(this.errorBag, found._uid);
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  return h(
+                    "form",
+                    {
+                      staticClass: "v-form",
+                      attrs: __assign(
+                        {
+                          novalidate: true,
+                        },
+                        this.attrs$
+                      ),
+                      on: {
+                        submit: function submit(e) {
+                          return _this.$emit("submit", e);
+                        },
+                      },
+                    },
+                    this.$slots.default
+                  );
+                },
+              });
 
-/***/ "./src/components/VChipGroup/VChipGroup.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VChipGroup/VChipGroup.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+            /***/
+          },
 
-// extracted by mini-css-extract-plugin
+        /***/ "./src/components/VForm/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VForm/index.ts ***!
+  \***************************************/
+          /*! exports provided: VForm, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VForm__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VForm */ "./src/components/VForm/VForm.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VForm",
+              function () {
+                return _VForm__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/***/ }),
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VForm__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ "./src/components/VChipGroup/VChipGroup.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VChipGroup/VChipGroup.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VChipGroup_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VChipGroup.sass */ "./src/components/VChipGroup/VChipGroup.sass");
-/* harmony import */ var _VChipGroup_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VChipGroup_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSlideGroup/VSlideGroup */ "./src/components/VSlideGroup/VSlideGroup.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
- // Mixins
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__["BaseSlideGroup"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'v-chip-group',
-  provide: function provide() {
-    return {
-      chipGroup: this
-    };
-  },
-  props: {
-    column: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__["BaseSlideGroup"].options.computed.classes.call(this)), {
-        'v-chip-group': true,
-        'v-chip-group--column': this.column
-      });
-    }
-  },
-  watch: {
-    column: function column(val) {
-      if (val) this.scrollOffset = 0;
-      this.$nextTick(this.onResize);
-    }
-  },
-  methods: {
-    genData: function genData() {
-      return this.setTextColor(this.color, __assign({}, _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_1__["BaseSlideGroup"].options.methods.genData.call(this)));
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VGrid/VCol.ts":
+          /*!**************************************!*\
+  !*** ./src/components/VGrid/VCol.ts ***!
+  \**************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VGrid.sass */ "./src/components/VGrid/VGrid.sass"
+              );
+            /* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VGrid_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ "./src/components/VChipGroup/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VChipGroup/index.ts ***!
-  \********************************************/
-/*! exports provided: VChipGroup, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            // no xs
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VChipGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VChipGroup */ "./src/components/VChipGroup/VChipGroup.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VChipGroup", function() { return _VChipGroup__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            var breakpoints = ["sm", "md", "lg", "xl"];
 
+            var breakpointProps = (function () {
+              return breakpoints.reduce(function (props, val) {
+                props[val] = {
+                  type: [Boolean, String, Number],
+                  default: false,
+                };
+                return props;
+              }, {});
+            })();
+
+            var offsetProps = (function () {
+              return breakpoints.reduce(function (props, val) {
+                props[
+                  "offset" +
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_3__["upperFirst"]
+                    )(val)
+                ] = {
+                  type: [String, Number],
+                  default: null,
+                };
+                return props;
+              }, {});
+            })();
+
+            var orderProps = (function () {
+              return breakpoints.reduce(function (props, val) {
+                props[
+                  "order" +
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_3__["upperFirst"]
+                    )(val)
+                ] = {
+                  type: [String, Number],
+                  default: null,
+                };
+                return props;
+              }, {});
+            })();
+
+            var propMap = {
+              col: Object.keys(breakpointProps),
+              offset: Object.keys(offsetProps),
+              order: Object.keys(orderProps),
+            };
 
+            function breakpointClass(type, prop, val) {
+              var className = type;
 
-/* harmony default export */ __webpack_exports__["default"] = (_VChipGroup__WEBPACK_IMPORTED_MODULE_0__["default"]);
+              if (val == null || val === false) {
+                return undefined;
+              }
 
-/***/ }),
+              if (prop) {
+                var breakpoint = prop.replace(type, "");
+                className += "-" + breakpoint;
+              } // Handling the boolean style prop when accepting [Boolean, String, Number]
+              // means Vue will not convert <v-col sm></v-col> to sm: true for us.
+              // Since the default is false, an empty string indicates the prop's presence.
 
-/***/ "./src/components/VColorPicker/VColorPicker.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPicker.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+              if (type === "col" && (val === "" || val === true)) {
+                // .col-md
+                return className.toLowerCase();
+              } // .order-md-6
 
-// extracted by mini-css-extract-plugin
+              className += "-" + val;
+              return className.toLowerCase();
+            }
 
-/***/ }),
+            var cache = new Map();
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
+                name: "v-col",
+                functional: true,
+                props: __assign(
+                  __assign(
+                    __assign(
+                      __assign(
+                        __assign(
+                          __assign(
+                            {
+                              cols: {
+                                type: [Boolean, String, Number],
+                                default: false,
+                              },
+                            },
+                            breakpointProps
+                          ),
+                          {
+                            offset: {
+                              type: [String, Number],
+                              default: null,
+                            },
+                          }
+                        ),
+                        offsetProps
+                      ),
+                      {
+                        order: {
+                          type: [String, Number],
+                          default: null,
+                        },
+                      }
+                    ),
+                    orderProps
+                  ),
+                  {
+                    alignSelf: {
+                      type: String,
+                      default: null,
+                      validator: function validator(str) {
+                        return [
+                          "auto",
+                          "start",
+                          "end",
+                          "center",
+                          "baseline",
+                          "stretch",
+                        ].includes(str);
+                      },
+                    },
+                    tag: {
+                      type: String,
+                      default: "div",
+                    },
+                  }
+                ),
+                render: function render(h, _a) {
+                  var _b;
 
-/***/ "./src/components/VColorPicker/VColorPicker.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPicker.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VColorPicker_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VColorPicker.sass */ "./src/components/VColorPicker/VColorPicker.sass");
-/* harmony import */ var _VColorPicker_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VColorPicker_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts");
-/* harmony import */ var _VColorPickerPreview__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VColorPickerPreview */ "./src/components/VColorPicker/VColorPickerPreview.ts");
-/* harmony import */ var _VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VColorPickerCanvas */ "./src/components/VColorPicker/VColorPickerCanvas.ts");
-/* harmony import */ var _VColorPickerEdit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VColorPickerEdit */ "./src/components/VColorPicker/VColorPickerEdit.ts");
-/* harmony import */ var _VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VColorPickerSwatches */ "./src/components/VColorPicker/VColorPickerSwatches.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/components/VColorPicker/util/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+                  var props = _a.props,
+                    data = _a.data,
+                    children = _a.children,
+                    parent = _a.parent; // Super-fast memoization based on props, 5x faster than JSON.stringify
 
-    return t;
-  };
+                  var cacheKey = "";
 
-  return __assign.apply(this, arguments);
-}; // Styles
+                  for (var prop in props) {
+                    cacheKey += String(props[prop]);
+                  }
 
+                  var classList = cache.get(cacheKey);
+
+                  if (!classList) {
+                    classList = []; // Loop through `col`, `offset`, `order` breakpoint props
+
+                    var type_1;
+
+                    for (type_1 in propMap) {
+                      propMap[type_1].forEach(function (prop) {
+                        var value = props[prop];
+                        var className = breakpointClass(type_1, prop, value);
+                        if (className) classList.push(className);
+                      });
+                    }
+
+                    var hasColClasses = classList.some(function (className) {
+                      return className.startsWith("col-");
+                    });
+                    classList.push(
+                      ((_b = {
+                        // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.
+                        col: !hasColClasses || !props.cols,
+                      }),
+                      (_b["col-" + props.cols] = props.cols),
+                      (_b["offset-" + props.offset] = props.offset),
+                      (_b["order-" + props.order] = props.order),
+                      (_b["align-self-" + props.alignSelf] = props.alignSelf),
+                      _b)
+                    );
+                    cache.set(cacheKey, classList);
+                  }
 
- // Components
+                  return h(
+                    props.tag,
+                    Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_2__["default"]
+                    )(data, {
+                      class: classList,
+                    }),
+                    children
+                  );
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VGrid/VContainer.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VGrid/VContainer.ts ***!
+  \********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./_grid.sass */ "./src/components/VGrid/_grid.sass"
+              );
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _grid_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VGrid.sass */ "./src/components/VGrid/VGrid.sass"
+              );
+            /* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VGrid_sass__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./grid */ "./src/components/VGrid/grid.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_grid__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                "container"
+              ).extend({
+                name: "v-container",
+                functional: true,
+                props: {
+                  id: String,
+                  tag: {
+                    type: String,
+                    default: "div",
+                  },
+                  fluid: {
+                    type: Boolean,
+                    default: false,
+                  },
+                },
+                render: function render(h, _a) {
+                  var props = _a.props,
+                    data = _a.data,
+                    children = _a.children;
+                  var classes;
+                  var attrs = data.attrs;
+
+                  if (attrs) {
+                    // reset attrs to extract utility clases like pa-3
+                    data.attrs = {};
+                    classes = Object.keys(attrs).filter(function (key) {
+                      // TODO: Remove once resolved
+                      // https://github.com/vuejs/vue/issues/7841
+                      if (key === "slot") return false;
+                      var value = attrs[key]; // add back data attributes like data-test="foo" but do not
+                      // add them as classes
+
+                      if (key.startsWith("data-")) {
+                        data.attrs[key] = value;
+                        return false;
+                      }
+
+                      return value || typeof value === "string";
+                    });
+                  }
 
+                  if (props.id) {
+                    data.domProps = data.domProps || {};
+                    data.domProps.id = props.id;
+                  }
 
+                  return h(
+                    props.tag,
+                    Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_3__["default"]
+                    )(data, {
+                      staticClass: "container",
+                      class: Array({
+                        "container--fluid": props.fluid,
+                      }).concat(classes || []),
+                    }),
+                    children
+                  );
+                },
+              });
 
- // Helpers
+            /***/
+          },
 
+        /***/ "./src/components/VGrid/VFlex.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VGrid/VFlex.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./_grid.sass */ "./src/components/VGrid/_grid.sass"
+              );
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _grid_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./grid */ "./src/components/VGrid/grid.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_grid__WEBPACK_IMPORTED_MODULE_1__["default"])("flex");
+
+            /***/
+          },
 
+        /***/ "./src/components/VGrid/VGrid.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VGrid/VGrid.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
- // Mixins
+        /***/ "./src/components/VGrid/VLayout.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VGrid/VLayout.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./_grid.sass */ "./src/components/VGrid/_grid.sass"
+              );
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _grid_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./grid */ "./src/components/VGrid/grid.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_grid__WEBPACK_IMPORTED_MODULE_1__["default"])("layout");
+
+            /***/
+          },
 
+        /***/ "./src/components/VGrid/VRow.ts":
+          /*!**************************************!*\
+  !*** ./src/components/VGrid/VRow.ts ***!
+  \**************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VGrid.sass */ "./src/components/VGrid/VGrid.sass"
+              );
+            /* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VGrid_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_mixins_elevatable__WEBPACK_IMPORTED_MODULE_9__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__["default"]).extend({
-  name: 'v-color-picker',
-  props: {
-    canvasHeight: {
-      type: [String, Number],
-      default: 150
-    },
-    disabled: Boolean,
-    dotSize: {
-      type: [Number, String],
-      default: 10
-    },
-    flat: Boolean,
-    hideCanvas: Boolean,
-    hideInputs: Boolean,
-    hideModeSwitch: Boolean,
-    mode: {
-      type: String,
-      default: 'rgba',
-      validator: function validator(v) {
-        return Object.keys(_VColorPickerEdit__WEBPACK_IMPORTED_MODULE_4__["modes"]).includes(v);
-      }
-    },
-    showSwatches: Boolean,
-    swatches: Array,
-    swatchesMaxHeight: {
-      type: [Number, String],
-      default: 150
-    },
-    value: {
-      type: [Object, String]
-    },
-    width: {
-      type: [Number, String],
-      default: 300
-    }
-  },
-  data: function data() {
-    return {
-      internalValue: Object(_util__WEBPACK_IMPORTED_MODULE_6__["fromRGBA"])({
-        r: 255,
-        g: 0,
-        b: 0,
-        a: 1
-      })
-    };
-  },
-  computed: {
-    hideAlpha: function hideAlpha() {
-      if (!this.value) return false;
-      return !Object(_util__WEBPACK_IMPORTED_MODULE_6__["hasAlpha"])(this.value);
-    }
-  },
-  watch: {
-    value: {
-      handler: function handler(color) {
-        this.updateColor(Object(_util__WEBPACK_IMPORTED_MODULE_6__["parseColor"])(color, this.internalValue));
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    updateColor: function updateColor(color) {
-      this.internalValue = color;
-      var value = Object(_util__WEBPACK_IMPORTED_MODULE_6__["extractColor"])(this.internalValue, this.value);
-
-      if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["deepEqual"])(value, this.value)) {
-        this.$emit('input', value);
-        this.$emit('update:color', this.internalValue);
-      }
-    },
-    genCanvas: function genCanvas() {
-      return this.$createElement(_VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        props: {
-          color: this.internalValue,
-          disabled: this.disabled,
-          dotSize: this.dotSize,
-          width: this.width,
-          height: this.canvasHeight
-        },
-        on: {
-          'update:color': this.updateColor
-        }
-      });
-    },
-    genControls: function genControls() {
-      return this.$createElement('div', {
-        staticClass: 'v-color-picker__controls'
-      }, [this.genPreview(), !this.hideInputs && this.genEdit()]);
-    },
-    genEdit: function genEdit() {
-      var _this = this;
-
-      return this.$createElement(_VColorPickerEdit__WEBPACK_IMPORTED_MODULE_4__["default"], {
-        props: {
-          color: this.internalValue,
-          disabled: this.disabled,
-          hideAlpha: this.hideAlpha,
-          hideModeSwitch: this.hideModeSwitch,
-          mode: this.mode
-        },
-        on: {
-          'update:color': this.updateColor,
-          'update:mode': function updateMode(v) {
-            return _this.$emit('update:mode', v);
-          }
-        }
-      });
-    },
-    genPreview: function genPreview() {
-      return this.$createElement(_VColorPickerPreview__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          color: this.internalValue,
-          disabled: this.disabled,
-          hideAlpha: this.hideAlpha
-        },
-        on: {
-          'update:color': this.updateColor
-        }
-      });
-    },
-    genSwatches: function genSwatches() {
-      return this.$createElement(_VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_5__["default"], {
-        props: {
-          dark: this.dark,
-          light: this.light,
-          swatches: this.swatches,
-          color: this.internalValue,
-          maxHeight: this.swatchesMaxHeight
-        },
-        on: {
-          'update:color': this.updateColor
-        }
-      });
-    }
-  },
-  render: function render(h) {
-    return h(_VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"], {
-      staticClass: 'v-color-picker',
-      class: __assign(__assign({
-        'v-color-picker--flat': this.flat
-      }, this.themeClasses), this.elevationClasses),
-      props: {
-        maxWidth: this.width
-      }
-    }, [!this.hideCanvas && this.genCanvas(), this.genControls(), this.showSwatches && this.genSwatches()]);
-  }
-}));
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ }),
+                return ar;
+              };
 
-/***/ "./src/components/VColorPicker/VColorPickerCanvas.sass":
-/*!*************************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerCanvas.sass ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-// extracted by mini-css-extract-plugin
+                return ar;
+              };
 
-/***/ }),
+            // no xs
+
+            var breakpoints = ["sm", "md", "lg", "xl"];
+            var ALIGNMENT = ["start", "end", "center"];
+
+            function makeProps(prefix, def) {
+              return breakpoints.reduce(function (props, val) {
+                props[
+                  prefix +
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_3__["upperFirst"]
+                    )(val)
+                ] = def();
+                return props;
+              }, {});
+            }
 
-/***/ "./src/components/VColorPicker/VColorPickerCanvas.ts":
-/*!***********************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerCanvas.ts ***!
-  \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VColorPickerCanvas_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VColorPickerCanvas.sass */ "./src/components/VColorPicker/VColorPickerCanvas.sass");
-/* harmony import */ var _VColorPickerCanvas_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VColorPickerCanvas_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/components/VColorPicker/util/index.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);
-// Styles
- // Helpers
-
-
- // Types
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_3___default.a.extend({
-  name: 'v-color-picker-canvas',
-  props: {
-    color: {
-      type: Object,
-      default: function _default() {
-        return Object(_util__WEBPACK_IMPORTED_MODULE_2__["fromRGBA"])({
-          r: 255,
-          g: 0,
-          b: 0,
-          a: 1
-        });
-      }
-    },
-    disabled: Boolean,
-    dotSize: {
-      type: [Number, String],
-      default: 10
-    },
-    height: {
-      type: [Number, String],
-      default: 150
-    },
-    width: {
-      type: [Number, String],
-      default: 300
-    }
-  },
-  data: function data() {
-    return {
-      boundingRect: {
-        width: 0,
-        height: 0,
-        left: 0,
-        top: 0
-      }
-    };
-  },
-  computed: {
-    dot: function dot() {
-      if (!this.color) return {
-        x: 0,
-        y: 0
-      };
-      return {
-        x: this.color.hsva.s * parseInt(this.width, 10),
-        y: (1 - this.color.hsva.v) * parseInt(this.height, 10)
-      };
-    }
-  },
-  watch: {
-    'color.hue': 'updateCanvas'
-  },
-  mounted: function mounted() {
-    this.updateCanvas();
-  },
-  methods: {
-    emitColor: function emitColor(x, y) {
-      var _a = this.boundingRect,
-          left = _a.left,
-          top = _a.top,
-          width = _a.width,
-          height = _a.height;
-      this.$emit('update:color', Object(_util__WEBPACK_IMPORTED_MODULE_2__["fromHSVA"])({
-        h: this.color.hue,
-        s: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["clamp"])(x - left, 0, width) / width,
-        v: 1 - Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["clamp"])(y - top, 0, height) / height,
-        a: this.color.alpha
-      }));
-    },
-    updateCanvas: function updateCanvas() {
-      if (!this.color) return;
-      var canvas = this.$refs.canvas;
-      var ctx = canvas.getContext('2d');
-      if (!ctx) return;
-      var saturationGradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
-      saturationGradient.addColorStop(0, 'hsla(0, 0%, 100%, 1)'); // white
-
-      saturationGradient.addColorStop(1, "hsla(" + this.color.hue + ", 100%, 50%, 1)");
-      ctx.fillStyle = saturationGradient;
-      ctx.fillRect(0, 0, canvas.width, canvas.height);
-      var valueGradient = ctx.createLinearGradient(0, 0, 0, canvas.height);
-      valueGradient.addColorStop(0, 'hsla(0, 0%, 100%, 0)'); // transparent
-
-      valueGradient.addColorStop(1, 'hsla(0, 0%, 0%, 1)'); // black
-
-      ctx.fillStyle = valueGradient;
-      ctx.fillRect(0, 0, canvas.width, canvas.height);
-    },
-    handleClick: function handleClick(e) {
-      if (this.disabled) return;
-      this.boundingRect = this.$el.getBoundingClientRect();
-      this.emitColor(e.clientX, e.clientY);
-    },
-    handleMouseDown: function handleMouseDown(e) {
-      // To prevent selection while moving cursor
-      e.preventDefault();
-      if (this.disabled) return;
-      this.boundingRect = this.$el.getBoundingClientRect();
-      window.addEventListener('mousemove', this.handleMouseMove);
-      window.addEventListener('mouseup', this.handleMouseUp);
-    },
-    handleMouseMove: function handleMouseMove(e) {
-      if (this.disabled) return;
-      this.emitColor(e.clientX, e.clientY);
-    },
-    handleMouseUp: function handleMouseUp() {
-      window.removeEventListener('mousemove', this.handleMouseMove);
-      window.removeEventListener('mouseup', this.handleMouseUp);
-    },
-    genCanvas: function genCanvas() {
-      return this.$createElement('canvas', {
-        ref: 'canvas',
-        attrs: {
-          width: this.width,
-          height: this.height
-        }
-      });
-    },
-    genDot: function genDot() {
-      var radius = parseInt(this.dotSize, 10) / 2;
-      var x = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["convertToUnit"])(this.dot.x - radius);
-      var y = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["convertToUnit"])(this.dot.y - radius);
-      return this.$createElement('div', {
-        staticClass: 'v-color-picker__canvas-dot',
-        class: {
-          'v-color-picker__canvas-dot--disabled': this.disabled
-        },
-        style: {
-          width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["convertToUnit"])(this.dotSize),
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["convertToUnit"])(this.dotSize),
-          transform: "translate(" + x + ", " + y + ")"
-        }
-      });
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-color-picker__canvas',
-      style: {
-        width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["convertToUnit"])(this.width),
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["convertToUnit"])(this.height)
-      },
-      on: {
-        click: this.handleClick,
-        mousedown: this.handleMouseDown
-      }
-    }, [this.genCanvas(), this.genDot()]);
-  }
-}));
+            var alignValidator = function alignValidator(str) {
+              return __spread(ALIGNMENT, ["baseline", "stretch"]).includes(str);
+            };
 
-/***/ }),
+            var alignProps = makeProps("align", function () {
+              return {
+                type: String,
+                default: null,
+                validator: alignValidator,
+              };
+            });
 
-/***/ "./src/components/VColorPicker/VColorPickerEdit.sass":
-/*!***********************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerEdit.sass ***!
-  \***********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+            var justifyValidator = function justifyValidator(str) {
+              return __spread(ALIGNMENT, [
+                "space-between",
+                "space-around",
+              ]).includes(str);
+            };
 
-// extracted by mini-css-extract-plugin
+            var justifyProps = makeProps("justify", function () {
+              return {
+                type: String,
+                default: null,
+                validator: justifyValidator,
+              };
+            });
 
-/***/ }),
+            var alignContentValidator = function alignContentValidator(str) {
+              return __spread(ALIGNMENT, [
+                "space-between",
+                "space-around",
+                "stretch",
+              ]).includes(str);
+            };
 
-/***/ "./src/components/VColorPicker/VColorPickerEdit.ts":
-/*!*********************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerEdit.ts ***!
-  \*********************************************************/
-/*! exports provided: modes, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "modes", function() { return modes; });
-/* harmony import */ var _VColorPickerEdit_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VColorPickerEdit.sass */ "./src/components/VColorPicker/VColorPickerEdit.sass");
-/* harmony import */ var _VColorPickerEdit_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VColorPickerEdit_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/colorUtils */ "./src/util/colorUtils.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util */ "./src/components/VColorPicker/util/index.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            var alignContentProps = makeProps("alignContent", function () {
+              return {
+                type: String,
+                default: null,
+                validator: alignContentValidator,
+              };
+            });
+            var propMap = {
+              align: Object.keys(alignProps),
+              justify: Object.keys(justifyProps),
+              alignContent: Object.keys(alignContentProps),
+            };
+            var classMap = {
+              align: "align",
+              justify: "justify",
+              alignContent: "align-content",
+            };
 
-  return ar;
-}; // Styles
+            function breakpointClass(type, prop, val) {
+              var className = classMap[type];
 
+              if (val == null) {
+                return undefined;
+              }
 
- // Components
-
+              if (prop) {
+                // alignSm -> Sm
+                var breakpoint = prop.replace(type, "");
+                className += "-" + breakpoint;
+              } // .align-items-sm-center
 
- // Helpers
+              className += "-" + val;
+              return className.toLowerCase();
+            }
 
- // Types
+            var cache = new Map();
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
+                name: "v-row",
+                functional: true,
+                props: __assign(
+                  __assign(
+                    __assign(
+                      __assign(
+                        __assign(
+                          {
+                            tag: {
+                              type: String,
+                              default: "div",
+                            },
+                            dense: Boolean,
+                            noGutters: Boolean,
+                            align: {
+                              type: String,
+                              default: null,
+                              validator: alignValidator,
+                            },
+                          },
+                          alignProps
+                        ),
+                        {
+                          justify: {
+                            type: String,
+                            default: null,
+                            validator: justifyValidator,
+                          },
+                        }
+                      ),
+                      justifyProps
+                    ),
+                    {
+                      alignContent: {
+                        type: String,
+                        default: null,
+                        validator: alignContentValidator,
+                      },
+                    }
+                  ),
+                  alignContentProps
+                ),
+                render: function render(h, _a) {
+                  var _b;
+
+                  var props = _a.props,
+                    data = _a.data,
+                    children = _a.children; // Super-fast memoization based on props, 5x faster than JSON.stringify
+
+                  var cacheKey = "";
+
+                  for (var prop in props) {
+                    cacheKey += String(props[prop]);
+                  }
 
+                  var classList = cache.get(cacheKey);
+
+                  if (!classList) {
+                    classList = []; // Loop through `align`, `justify`, `alignContent` breakpoint props
+
+                    var type_1;
+
+                    for (type_1 in propMap) {
+                      propMap[type_1].forEach(function (prop) {
+                        var value = props[prop];
+                        var className = breakpointClass(type_1, prop, value);
+                        if (className) classList.push(className);
+                      });
+                    }
+
+                    classList.push(
+                      ((_b = {
+                        "no-gutters": props.noGutters,
+                        "row--dense": props.dense,
+                      }),
+                      (_b["align-" + props.align] = props.align),
+                      (_b["justify-" + props.justify] = props.justify),
+                      (_b["align-content-" + props.alignContent] =
+                        props.alignContent),
+                      _b)
+                    );
+                    cache.set(cacheKey, classList);
+                  }
 
+                  return h(
+                    props.tag,
+                    Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_2__["default"]
+                    )(data, {
+                      staticClass: "row",
+                      class: classList,
+                    }),
+                    children
+                  );
+                },
+              });
 
-var modes = {
-  rgba: {
-    inputs: [['r', 255, 'int'], ['g', 255, 'int'], ['b', 255, 'int'], ['a', 1, 'float']],
-    from: _util__WEBPACK_IMPORTED_MODULE_5__["fromRGBA"]
-  },
-  hsla: {
-    inputs: [['h', 360, 'int'], ['s', 1, 'float'], ['l', 1, 'float'], ['a', 1, 'float']],
-    from: _util__WEBPACK_IMPORTED_MODULE_5__["fromHSLA"]
-  },
-  hexa: {
-    from: _util__WEBPACK_IMPORTED_MODULE_5__["fromHexa"]
-  }
-};
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_4___default.a.extend({
-  name: 'v-color-picker-edit',
-  props: {
-    color: Object,
-    disabled: Boolean,
-    hideAlpha: Boolean,
-    hideModeSwitch: Boolean,
-    mode: {
-      type: String,
-      default: 'rgba',
-      validator: function validator(v) {
-        return Object.keys(modes).includes(v);
-      }
-    }
-  },
-  data: function data() {
-    return {
-      modes: modes,
-      internalMode: this.mode
-    };
-  },
-  computed: {
-    currentMode: function currentMode() {
-      return this.modes[this.internalMode];
-    }
-  },
-  watch: {
-    mode: function mode(_mode) {
-      this.internalMode = _mode;
-    }
-  },
-  created: function created() {
-    this.internalMode = this.mode;
-  },
-  methods: {
-    getValue: function getValue(v, type) {
-      if (type === 'float') return Math.round(v * 100) / 100;else if (type === 'int') return Math.round(v);else return 0;
-    },
-    parseValue: function parseValue(v, type) {
-      if (type === 'float') return parseFloat(v);else if (type === 'int') return parseInt(v, 10) || 0;else return 0;
-    },
-    changeMode: function changeMode() {
-      var modes = Object.keys(this.modes);
-      var index = modes.indexOf(this.internalMode);
-      var newMode = modes[(index + 1) % modes.length];
-      this.internalMode = newMode;
-      this.$emit('update:mode', newMode);
-    },
-    genInput: function genInput(target, attrs, value, on) {
-      return this.$createElement('div', {
-        staticClass: 'v-color-picker__input'
-      }, [this.$createElement('input', {
-        key: target,
-        attrs: attrs,
-        domProps: {
-          value: value
-        },
-        on: on
-      }), this.$createElement('span', target.toUpperCase())]);
-    },
-    genInputs: function genInputs() {
-      var _this = this;
-
-      if (this.internalMode === 'hexa') {
-        var hex = this.color.hexa;
-        var value = this.hideAlpha && hex.endsWith('FF') ? hex.substr(0, 7) : hex;
-        return this.genInput('hex', {
-          maxlength: this.hideAlpha ? 7 : 9,
-          disabled: this.disabled
-        }, value, {
-          change: function change(e) {
-            var el = e.target;
-
-            _this.$emit('update:color', _this.currentMode.from(Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_3__["parseHex"])(el.value)));
-          }
-        });
-      } else {
-        var inputs = this.hideAlpha ? this.currentMode.inputs.slice(0, -1) : this.currentMode.inputs;
-        return inputs.map(function (_a) {
-          var _b = __read(_a, 3),
-              target = _b[0],
-              max = _b[1],
-              type = _b[2];
-
-          var value = _this.color[_this.internalMode];
-          return _this.genInput(target, {
-            type: 'number',
-            min: 0,
-            max: max,
-            step: type === 'float' ? '0.01' : type === 'int' ? '1' : undefined,
-            disabled: _this.disabled
-          }, _this.getValue(value[target], type), {
-            input: function input(e) {
-              var _a;
+            /***/
+          },
 
-              var el = e.target;
+        /***/ "./src/components/VGrid/VSpacer.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VGrid/VSpacer.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./_grid.sass */ "./src/components/VGrid/_grid.sass"
+              );
+            /* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _grid_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(
+                _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                  "createSimpleFunctional"
+                ]
+              )("spacer", "div", "v-spacer");
+
+            /***/
+          },
 
-              var newVal = _this.parseValue(el.value || '0', type);
+        /***/ "./src/components/VGrid/_grid.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VGrid/_grid.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-              _this.$emit('update:color', _this.currentMode.from(Object.assign({}, value, (_a = {}, _a[target] = newVal, _a)), _this.color.alpha));
-            }
-          });
-        });
-      }
-    },
-    genSwitch: function genSwitch() {
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          small: true,
-          icon: true,
-          disabled: this.disabled
-        },
-        on: {
-          click: this.changeMode
-        }
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_2__["default"], '$unfold')]);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-color-picker__edit'
-    }, [this.genInputs(), !this.hideModeSwitch && this.genSwitch()]);
-  }
-}));
+        /***/ "./src/components/VGrid/grid.ts":
+          /*!**************************************!*\
+  !*** ./src/components/VGrid/grid.ts ***!
+  \**************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return VGrid;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            // Types
+
+            function VGrid(name) {
+              /* @vue/component */
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "v-" + name,
+                functional: true,
+                props: {
+                  id: String,
+                  tag: {
+                    type: String,
+                    default: "div",
+                  },
+                },
+                render: function render(h, _a) {
+                  var props = _a.props,
+                    data = _a.data,
+                    children = _a.children;
+                  data.staticClass = (
+                    name +
+                    " " +
+                    (data.staticClass || "")
+                  ).trim();
+                  var attrs = data.attrs;
+
+                  if (attrs) {
+                    // reset attrs to extract utility clases like pa-3
+                    data.attrs = {};
+                    var classes = Object.keys(attrs).filter(function (key) {
+                      // TODO: Remove once resolved
+                      // https://github.com/vuejs/vue/issues/7841
+                      if (key === "slot") return false;
+                      var value = attrs[key]; // add back data attributes like data-test="foo" but do not
+                      // add them as classes
+
+                      if (key.startsWith("data-")) {
+                        data.attrs[key] = value;
+                        return false;
+                      }
+
+                      return value || typeof value === "string";
+                    });
+                    if (classes.length)
+                      data.staticClass += " " + classes.join(" ");
+                  }
 
-/***/ }),
+                  if (props.id) {
+                    data.domProps = data.domProps || {};
+                    data.domProps.id = props.id;
+                  }
 
-/***/ "./src/components/VColorPicker/VColorPickerPreview.sass":
-/*!**************************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerPreview.sass ***!
-  \**************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+                  return h(props.tag, data, children);
+                },
+              });
+            }
 
-// extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VGrid/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VGrid/index.ts ***!
+  \***************************************/
+          /*! exports provided: VContainer, VCol, VRow, VSpacer, VLayout, VFlex, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VContainer__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VContainer */ "./src/components/VGrid/VContainer.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VContainer",
+              function () {
+                return _VContainer__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VCol__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VCol */ "./src/components/VGrid/VCol.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCol",
+              function () {
+                return _VCol__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _VRow__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VRow */ "./src/components/VGrid/VRow.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRow",
+              function () {
+                return _VRow__WEBPACK_IMPORTED_MODULE_2__["default"];
+              }
+            );
+
+            /* harmony import */ var _VSpacer__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VSpacer */ "./src/components/VGrid/VSpacer.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSpacer",
+              function () {
+                return _VSpacer__WEBPACK_IMPORTED_MODULE_3__["default"];
+              }
+            );
+
+            /* harmony import */ var _VLayout__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VLayout */ "./src/components/VGrid/VLayout.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VLayout",
+              function () {
+                return _VLayout__WEBPACK_IMPORTED_MODULE_4__["default"];
+              }
+            );
+
+            /* harmony import */ var _VFlex__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./VFlex */ "./src/components/VGrid/VFlex.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFlex",
+              function () {
+                return _VFlex__WEBPACK_IMPORTED_MODULE_5__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VContainer: _VContainer__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VCol: _VCol__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VRow: _VRow__WEBPACK_IMPORTED_MODULE_2__["default"],
+                VSpacer: _VSpacer__WEBPACK_IMPORTED_MODULE_3__["default"],
+                VLayout: _VLayout__WEBPACK_IMPORTED_MODULE_4__["default"],
+                VFlex: _VFlex__WEBPACK_IMPORTED_MODULE_5__["default"],
+              },
+            };
 
-/***/ "./src/components/VColorPicker/VColorPickerPreview.ts":
-/*!************************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerPreview.ts ***!
-  \************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VColorPickerPreview_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VColorPickerPreview.sass */ "./src/components/VColorPicker/VColorPickerPreview.sass");
-/* harmony import */ var _VColorPickerPreview_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VColorPickerPreview_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSlider_VSlider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSlider/VSlider */ "./src/components/VSlider/VSlider.ts");
-/* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/colorUtils */ "./src/util/colorUtils.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./util */ "./src/components/VColorPicker/util/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
- // Utilities
-
- // Types
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_3___default.a.extend({
-  name: 'v-color-picker-preview',
-  props: {
-    color: Object,
-    disabled: Boolean,
-    hideAlpha: Boolean
-  },
-  methods: {
-    genAlpha: function genAlpha() {
-      var _this = this;
-
-      return this.genTrack({
-        staticClass: 'v-color-picker__alpha',
-        props: {
-          thumbColor: 'grey lighten-2',
-          hideDetails: true,
-          value: this.color.alpha,
-          step: 0,
-          min: 0,
-          max: 1
-        },
-        style: {
-          backgroundImage: this.disabled ? undefined : "linear-gradient(to " + (this.$vuetify.rtl ? 'left' : 'right') + ", transparent, " + Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_2__["RGBtoCSS"])(this.color.rgba) + ")"
-        },
-        on: {
-          input: function input(val) {
-            return _this.color.alpha !== val && _this.$emit('update:color', Object(_util__WEBPACK_IMPORTED_MODULE_4__["fromHSVA"])(__assign(__assign({}, _this.color.hsva), {
-              a: val
-            })));
-          }
-        }
-      });
-    },
-    genSliders: function genSliders() {
-      return this.$createElement('div', {
-        staticClass: 'v-color-picker__sliders'
-      }, [this.genHue(), !this.hideAlpha && this.genAlpha()]);
-    },
-    genDot: function genDot() {
-      return this.$createElement('div', {
-        staticClass: 'v-color-picker__dot'
-      }, [this.$createElement('div', {
-        style: {
-          background: Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_2__["RGBAtoCSS"])(this.color.rgba)
-        }
-      })]);
-    },
-    genHue: function genHue() {
-      var _this = this;
-
-      return this.genTrack({
-        staticClass: 'v-color-picker__hue',
-        props: {
-          thumbColor: 'grey lighten-2',
-          hideDetails: true,
-          value: this.color.hue,
-          step: 0,
-          min: 0,
-          max: 360
-        },
-        on: {
-          input: function input(val) {
-            return _this.color.hue !== val && _this.$emit('update:color', Object(_util__WEBPACK_IMPORTED_MODULE_4__["fromHSVA"])(__assign(__assign({}, _this.color.hsva), {
-              h: val
-            })));
-          }
-        }
-      });
-    },
-    genTrack: function genTrack(options) {
-      return this.$createElement(_VSlider_VSlider__WEBPACK_IMPORTED_MODULE_1__["default"], __assign(__assign({
-        class: 'v-color-picker__track'
-      }, options), {
-        props: __assign({
-          disabled: this.disabled
-        }, options.props)
-      }));
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-color-picker__preview',
-      class: {
-        'v-color-picker__preview--hide-alpha': this.hideAlpha
-      }
-    }, [this.genDot(), this.genSliders()]);
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VHover/VHover.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VHover/VHover.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _mixins_delayable__WEBPACK_IMPORTED_MODULE_0__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-hover",
+                props: {
+                  disabled: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  value: {
+                    type: Boolean,
+                    default: undefined,
+                  },
+                },
+                methods: {
+                  onMouseEnter: function onMouseEnter() {
+                    this.runDelay("open");
+                  },
+                  onMouseLeave: function onMouseLeave() {
+                    this.runDelay("close");
+                  },
+                },
+                render: function render() {
+                  if (!this.$scopedSlots.default && this.value === undefined) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_3__["consoleWarn"]
+                    )(
+                      "v-hover is missing a default scopedSlot or bound value",
+                      this
+                    );
+                    return null;
+                  }
 
-/***/ "./src/components/VColorPicker/VColorPickerSwatches.sass":
-/*!***************************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerSwatches.sass ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+                  var element;
+                  /* istanbul ignore else */
 
-// extracted by mini-css-extract-plugin
+                  if (this.$scopedSlots.default) {
+                    element = this.$scopedSlots.default({
+                      hover: this.isActive,
+                    });
+                  }
 
-/***/ }),
+                  if (Array.isArray(element) && element.length === 1) {
+                    element = element[0];
+                  }
 
-/***/ "./src/components/VColorPicker/VColorPickerSwatches.ts":
-/*!*************************************************************!*\
-  !*** ./src/components/VColorPicker/VColorPickerSwatches.ts ***!
-  \*************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                  if (!element || Array.isArray(element) || !element.tag) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_3__["consoleWarn"]
+                    )("v-hover should only contain a single element", this);
+                    return element;
+                  }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VColorPickerSwatches_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VColorPickerSwatches.sass */ "./src/components/VColorPicker/VColorPickerSwatches.sass");
-/* harmony import */ var _VColorPickerSwatches_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VColorPickerSwatches_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _util_colors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/colors */ "./src/util/colors.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/components/VColorPicker/util/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/colorUtils */ "./src/util/colorUtils.ts");
-// Styles
- // Components
+                  if (!this.disabled) {
+                    element.data = element.data || {};
 
- // Helpers
+                    this._g(element.data, {
+                      mouseenter: this.onMouseEnter,
+                      mouseleave: this.onMouseLeave,
+                    });
+                  }
 
+                  return element;
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VHover/index.ts":
+          /*!****************************************!*\
+  !*** ./src/components/VHover/index.ts ***!
+  \****************************************/
+          /*! exports provided: VHover, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VHover__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VHover */ "./src/components/VHover/VHover.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VHover",
+              function () {
+                return _VHover__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VHover__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VIcon/VIcon.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VIcon/VIcon.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VIcon/VIcon.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VIcon/VIcon.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VIcon_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VIcon.sass */ "./src/components/VIcon/VIcon.sass"
+              );
+            /* harmony import */ var _VIcon_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VIcon_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_6__
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-function parseDefaultColors(colors) {
-  return Object.keys(colors).map(function (key) {
-    var color = colors[key];
-    return color.base ? [color.base, color.darken4, color.darken3, color.darken2, color.darken1, color.lighten1, color.lighten2, color.lighten3, color.lighten4, color.lighten5] : [color.black, color.white, color.transparent];
-  });
-}
+            // Mixins
 
-var white = Object(_util__WEBPACK_IMPORTED_MODULE_3__["fromHex"])('#FFFFFF').rgba;
-var black = Object(_util__WEBPACK_IMPORTED_MODULE_3__["fromHex"])('#000000').rgba;
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]).extend({
-  name: 'v-color-picker-swatches',
-  props: {
-    swatches: {
-      type: Array,
-      default: function _default() {
-        return parseDefaultColors(_util_colors__WEBPACK_IMPORTED_MODULE_2__["default"]);
-      }
-    },
-    color: Object,
-    maxWidth: [Number, String],
-    maxHeight: [Number, String]
-  },
-  methods: {
-    genColor: function genColor(color) {
-      var _this = this;
-
-      var content = this.$createElement('div', {
-        style: {
-          background: color
-        }
-      }, [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["deepEqual"])(this.color, Object(_util__WEBPACK_IMPORTED_MODULE_3__["parseColor"])(color, null)) && this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          small: true,
-          dark: Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_7__["contrastRatio"])(this.color.rgba, white) > 2 && this.color.alpha > 0.5,
-          light: Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_7__["contrastRatio"])(this.color.rgba, black) > 2 && this.color.alpha > 0.5
-        }
-      }, '$success')]);
-      return this.$createElement('div', {
-        staticClass: 'v-color-picker__color',
-        on: {
-          // TODO: Less hacky way of catching transparent
-          click: function click() {
-            return _this.$emit('update:color', Object(_util__WEBPACK_IMPORTED_MODULE_3__["fromHex"])(color === 'transparent' ? '#00000000' : color));
-          }
-        }
-      }, [content]);
-    },
-    genSwatches: function genSwatches() {
-      var _this = this;
-
-      return this.swatches.map(function (swatch) {
-        var colors = swatch.map(_this.genColor);
-        return _this.$createElement('div', {
-          staticClass: 'v-color-picker__swatch'
-        }, colors);
-      });
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-color-picker__swatches',
-      style: {
-        maxWidth: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.maxWidth),
-        maxHeight: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.maxHeight)
-      }
-    }, [this.$createElement('div', this.genSwatches())]);
-  }
-}));
+            // Util
 
-/***/ }),
+            // Types
 
-/***/ "./src/components/VColorPicker/index.ts":
-/*!**********************************************!*\
-  !*** ./src/components/VColorPicker/index.ts ***!
-  \**********************************************/
-/*! exports provided: VColorPicker, VColorPickerSwatches, VColorPickerCanvas, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            var SIZE_MAP;
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VColorPicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VColorPicker */ "./src/components/VColorPicker/VColorPicker.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VColorPicker", function() { return _VColorPicker__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            (function (SIZE_MAP) {
+              SIZE_MAP["xSmall"] = "12px";
+              SIZE_MAP["small"] = "16px";
+              SIZE_MAP["default"] = "24px";
+              SIZE_MAP["medium"] = "28px";
+              SIZE_MAP["large"] = "36px";
+              SIZE_MAP["xLarge"] = "40px";
+            })(SIZE_MAP || (SIZE_MAP = {}));
 
-/* harmony import */ var _VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VColorPickerSwatches */ "./src/components/VColorPicker/VColorPickerSwatches.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VColorPickerSwatches", function() { return _VColorPickerSwatches__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+            function isFontAwesome5(iconType) {
+              return ["fas", "far", "fal", "fab", "fad"].some(function (val) {
+                return iconType.includes(val);
+              });
+            }
 
-/* harmony import */ var _VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VColorPickerCanvas */ "./src/components/VColorPicker/VColorPickerCanvas.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VColorPickerCanvas", function() { return _VColorPickerCanvas__WEBPACK_IMPORTED_MODULE_2__["default"]; });
+            function isSvgPath(icon) {
+              return (
+                /^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) &&
+                /[\dz]$/i.test(icon) &&
+                icon.length > 4
+              );
+            }
 
+            var VIcon = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"]
+            )(
+              _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__["default"],
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+              _mixins_sizeable__WEBPACK_IMPORTED_MODULE_3__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"]
+              /* @vue/component */
+            ).extend({
+              name: "v-icon",
+              props: {
+                dense: Boolean,
+                disabled: Boolean,
+                left: Boolean,
+                right: Boolean,
+                size: [Number, String],
+                tag: {
+                  type: String,
+                  required: false,
+                  default: "i",
+                },
+              },
+              computed: {
+                medium: function medium() {
+                  return false;
+                },
+                hasClickListener: function hasClickListener() {
+                  return Boolean(
+                    this.listeners$.click || this.listeners$["!click"]
+                  );
+                },
+              },
+              methods: {
+                getIcon: function getIcon() {
+                  var iconName = "";
+                  if (this.$slots.default)
+                    iconName = this.$slots.default[0].text.trim();
+                  return Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                      "remapInternalIcon"
+                    ]
+                  )(this, iconName);
+                },
+                getSize: function getSize() {
+                  var sizes = {
+                    xSmall: this.xSmall,
+                    small: this.small,
+                    medium: this.medium,
+                    large: this.large,
+                    xLarge: this.xLarge,
+                  };
+                  var explicitSize = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_5__["keys"]
+                  )(sizes).find(function (key) {
+                    return sizes[key];
+                  });
+                  return (
+                    (explicitSize && SIZE_MAP[explicitSize]) ||
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                        "convertToUnit"
+                      ]
+                    )(this.size)
+                  );
+                },
+                // Component data for both font icon and SVG wrapper span
+                getDefaultData: function getDefaultData() {
+                  return {
+                    staticClass: "v-icon notranslate",
+                    class: {
+                      "v-icon--disabled": this.disabled,
+                      "v-icon--left": this.left,
+                      "v-icon--link": this.hasClickListener,
+                      "v-icon--right": this.right,
+                      "v-icon--dense": this.dense,
+                    },
+                    attrs: __assign(
+                      {
+                        "aria-hidden": !this.hasClickListener,
+                        disabled: this.hasClickListener && this.disabled,
+                        type: this.hasClickListener ? "button" : undefined,
+                      },
+                      this.attrs$
+                    ),
+                    on: this.listeners$,
+                  };
+                },
+                getSvgWrapperData: function getSvgWrapperData() {
+                  var fontSize = this.getSize();
+
+                  var wrapperData = __assign(
+                    __assign({}, this.getDefaultData()),
+                    {
+                      style: fontSize
+                        ? {
+                            fontSize: fontSize,
+                            height: fontSize,
+                            width: fontSize,
+                          }
+                        : undefined,
+                    }
+                  );
+
+                  this.applyColors(wrapperData);
+                  return wrapperData;
+                },
+                applyColors: function applyColors(data) {
+                  data.class = __assign(
+                    __assign({}, data.class),
+                    this.themeClasses
+                  );
+                  this.setTextColor(this.color, data);
+                },
+                renderFontIcon: function renderFontIcon(icon, h) {
+                  var newChildren = [];
+                  var data = this.getDefaultData();
+                  var iconType = "material-icons"; // Material Icon delimiter is _
+                  // https://material.io/icons/
+
+                  var delimiterIndex = icon.indexOf("-");
+                  var isMaterialIcon = delimiterIndex <= -1;
+
+                  if (isMaterialIcon) {
+                    // Material icon uses ligatures.
+                    newChildren.push(icon);
+                  } else {
+                    iconType = icon.slice(0, delimiterIndex);
+                    if (isFontAwesome5(iconType)) iconType = "";
+                  }
 
+                  data.class[iconType] = true;
+                  data.class[icon] = !isMaterialIcon;
+                  var fontSize = this.getSize();
+                  if (fontSize)
+                    data.style = {
+                      fontSize: fontSize,
+                    };
+                  this.applyColors(data);
+                  return h(
+                    this.hasClickListener ? "button" : this.tag,
+                    data,
+                    newChildren
+                  );
+                },
+                renderSvgIcon: function renderSvgIcon(icon, h) {
+                  var svgData = {
+                    class: "v-icon__svg",
+                    attrs: {
+                      xmlns: "http://www.w3.org/2000/svg",
+                      viewBox: "0 0 24 24",
+                      role: "img",
+                      "aria-hidden": true,
+                    },
+                  };
+                  var size = this.getSize();
+
+                  if (size) {
+                    svgData.style = {
+                      fontSize: size,
+                      height: size,
+                      width: size,
+                    };
+                  }
 
+                  return h(
+                    this.hasClickListener ? "button" : "span",
+                    this.getSvgWrapperData(),
+                    [
+                      h("svg", svgData, [
+                        h("path", {
+                          attrs: {
+                            d: icon,
+                          },
+                        }),
+                      ]),
+                    ]
+                  );
+                },
+                renderSvgIconComponent: function renderSvgIconComponent(
+                  icon,
+                  h
+                ) {
+                  var data = {
+                    class: {
+                      "v-icon__component": true,
+                    },
+                  };
+                  var size = this.getSize();
+
+                  if (size) {
+                    data.style = {
+                      fontSize: size,
+                      height: size,
+                      width: size,
+                    };
+                  }
 
+                  this.applyColors(data);
+                  var component = icon.component;
+                  data.props = icon.props;
+                  data.nativeOn = data.on;
+                  return h(
+                    this.hasClickListener ? "button" : "span",
+                    this.getSvgWrapperData(),
+                    [h(component, data)]
+                  );
+                },
+              },
+              render: function render(h) {
+                var icon = this.getIcon();
+
+                if (typeof icon === "string") {
+                  if (isSvgPath(icon)) {
+                    return this.renderSvgIcon(icon, h);
+                  }
 
-/* harmony default export */ __webpack_exports__["default"] = (_VColorPicker__WEBPACK_IMPORTED_MODULE_0__["default"]);
+                  return this.renderFontIcon(icon, h);
+                }
 
-/***/ }),
+                return this.renderSvgIconComponent(icon, h);
+              },
+            });
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_6___default.a.extend({
+                name: "v-icon",
+                $_wrapperFor: VIcon,
+                functional: true,
+                render: function render(h, _a) {
+                  var data = _a.data,
+                    children = _a.children;
+                  var iconName = ""; // Support usage of v-text and v-html
+
+                  if (data.domProps) {
+                    iconName =
+                      data.domProps.textContent ||
+                      data.domProps.innerHTML ||
+                      iconName; // Remove nodes so it doesn't
+                    // overwrite our changes
+
+                    delete data.domProps.textContent;
+                    delete data.domProps.innerHTML;
+                  }
 
-/***/ "./src/components/VColorPicker/util/index.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VColorPicker/util/index.ts ***!
-  \***************************************************/
-/*! exports provided: fromHSVA, fromHSLA, fromRGBA, fromHexa, fromHex, parseColor, extractColor, hasAlpha */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromHSVA", function() { return fromHSVA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromHSLA", function() { return fromHSLA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromRGBA", function() { return fromRGBA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromHexa", function() { return fromHexa; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromHex", function() { return fromHex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseColor", function() { return parseColor; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extractColor", function() { return extractColor; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasAlpha", function() { return hasAlpha; });
-/* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/colorUtils */ "./src/util/colorUtils.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+                  return h(VIcon, data, iconName ? [iconName] : children);
+                },
+              });
 
-    return t;
-  };
+            /***/
+          },
 
-  return __assign.apply(this, arguments);
-};
+        /***/ "./src/components/VIcon/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VIcon/index.ts ***!
+  \***************************************/
+          /*! exports provided: VIcon, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VIcon */ "./src/components/VIcon/VIcon.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VIcon",
+              function () {
+                return _VIcon__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-var __rest = undefined && undefined.__rest || function (s, e) {
-  var t = {};
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VIcon__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  for (var p in s) {
-    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
-  }
+            /***/
+          },
 
-  if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
-    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
-  }
-  return t;
-}; // Utilities
-
-
-
-function fromHSVA(hsva) {
-  hsva = __assign({}, hsva);
-  var hexa = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHex"])(hsva);
-  var hsla = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHSLA"])(hsva);
-  var rgba = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoRGBA"])(hsva);
-  return {
-    alpha: hsva.a,
-    hex: hexa.substr(0, 7),
-    hexa: hexa,
-    hsla: hsla,
-    hsva: hsva,
-    hue: hsva.h,
-    rgba: rgba
-  };
-}
-function fromHSLA(hsla) {
-  var hsva = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSLAtoHSVA"])(hsla);
-  var hexa = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHex"])(hsva);
-  var rgba = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoRGBA"])(hsva);
-  return {
-    alpha: hsva.a,
-    hex: hexa.substr(0, 7),
-    hexa: hexa,
-    hsla: hsla,
-    hsva: hsva,
-    hue: hsva.h,
-    rgba: rgba
-  };
-}
-function fromRGBA(rgba) {
-  var hsva = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["RGBAtoHSVA"])(rgba);
-  var hexa = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["RGBAtoHex"])(rgba);
-  var hsla = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHSLA"])(hsva);
-  return {
-    alpha: hsva.a,
-    hex: hexa.substr(0, 7),
-    hexa: hexa,
-    hsla: hsla,
-    hsva: hsva,
-    hue: hsva.h,
-    rgba: rgba
-  };
-}
-function fromHexa(hexa) {
-  var hsva = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HexToHSVA"])(hexa);
-  var hsla = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoHSLA"])(hsva);
-  var rgba = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["HSVAtoRGBA"])(hsva);
-  return {
-    alpha: hsva.a,
-    hex: hexa.substr(0, 7),
-    hexa: hexa,
-    hsla: hsla,
-    hsva: hsva,
-    hue: hsva.h,
-    rgba: rgba
-  };
-}
-function fromHex(hex) {
-  return fromHexa(Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["parseHex"])(hex));
-}
-
-function has(obj, key) {
-  return key.every(function (k) {
-    return obj.hasOwnProperty(k);
-  });
-}
-
-function parseColor(color, oldColor) {
-  if (!color) return fromRGBA({
-    r: 255,
-    g: 0,
-    b: 0,
-    a: 1
-  });
-
-  if (typeof color === 'string') {
-    if (color === 'transparent') return fromHexa('#00000000');
-    var hex = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["parseHex"])(color);
-    if (oldColor && hex === oldColor.hexa) return oldColor;else return fromHexa(hex);
-  }
+        /***/ "./src/components/VImg/VImg.sass":
+          /*!***************************************!*\
+  !*** ./src/components/VImg/VImg.sass ***!
+  \***************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  if (_typeof(color) === 'object') {
-    if (color.hasOwnProperty('alpha')) return color;
-    var a = color.hasOwnProperty('a') ? parseFloat(color.a) : 1;
-
-    if (has(color, ['r', 'g', 'b'])) {
-      if (oldColor && color === oldColor.rgba) return oldColor;else return fromRGBA(__assign(__assign({}, color), {
-        a: a
-      }));
-    } else if (has(color, ['h', 's', 'l'])) {
-      if (oldColor && color === oldColor.hsla) return oldColor;else return fromHSLA(__assign(__assign({}, color), {
-        a: a
-      }));
-    } else if (has(color, ['h', 's', 'v'])) {
-      if (oldColor && color === oldColor.hsva) return oldColor;else return fromHSVA(__assign(__assign({}, color), {
-        a: a
-      }));
-    }
-  }
+        /***/ "./src/components/VImg/VImg.ts":
+          /*!*************************************!*\
+  !*** ./src/components/VImg/VImg.ts ***!
+  \*************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VImg_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VImg.sass */ "./src/components/VImg/VImg.sass"
+              );
+            /* harmony import */ var _VImg_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VImg_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _directives_intersect__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../directives/intersect */ "./src/directives/intersect/index.ts"
+              );
+            /* harmony import */ var _VResponsive__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VResponsive */ "./src/components/VResponsive/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-  return fromRGBA({
-    r: 255,
-    g: 0,
-    b: 0,
-    a: 1
-  });
-}
+            // Styles
+            // Directives
+
+            // Components
+
+            // Mixins
+
+            // Utils
+
+            var hasIntersect =
+              typeof window !== "undefined" && "IntersectionObserver" in window;
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _VResponsive__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "v-img",
+                directives: {
+                  intersect:
+                    _directives_intersect__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ],
+                },
+                props: {
+                  alt: String,
+                  contain: Boolean,
+                  eager: Boolean,
+                  gradient: String,
+                  lazySrc: String,
+                  options: {
+                    type: Object,
+                    // For more information on types, navigate to:
+                    // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
+                    default: function _default() {
+                      return {
+                        root: undefined,
+                        rootMargin: undefined,
+                        threshold: undefined,
+                      };
+                    },
+                  },
+                  position: {
+                    type: String,
+                    default: "center center",
+                  },
+                  sizes: String,
+                  src: {
+                    type: [String, Object],
+                    default: "",
+                  },
+                  srcset: String,
+                  transition: {
+                    type: [Boolean, String],
+                    default: "fade-transition",
+                  },
+                },
+                data: function data() {
+                  return {
+                    currentSrc: "",
+                    image: null,
+                    isLoading: true,
+                    calculatedAspectRatio: undefined,
+                    naturalWidth: undefined,
+                    hasError: false,
+                  };
+                },
+                computed: {
+                  computedAspectRatio: function computedAspectRatio() {
+                    return Number(
+                      this.normalisedSrc.aspect || this.calculatedAspectRatio
+                    );
+                  },
+                  normalisedSrc: function normalisedSrc() {
+                    return this.src && _typeof(this.src) === "object"
+                      ? {
+                          src: this.src.src,
+                          srcset: this.srcset || this.src.srcset,
+                          lazySrc: this.lazySrc || this.src.lazySrc,
+                          aspect: Number(this.aspectRatio || this.src.aspect),
+                        }
+                      : {
+                          src: this.src,
+                          srcset: this.srcset,
+                          lazySrc: this.lazySrc,
+                          aspect: Number(this.aspectRatio || 0),
+                        };
+                  },
+                  __cachedImage: function __cachedImage() {
+                    if (
+                      !(
+                        this.normalisedSrc.src ||
+                        this.normalisedSrc.lazySrc ||
+                        this.gradient
+                      )
+                    )
+                      return [];
+                    var backgroundImage = [];
+                    var src = this.isLoading
+                      ? this.normalisedSrc.lazySrc
+                      : this.currentSrc;
+                    if (this.gradient)
+                      backgroundImage.push(
+                        "linear-gradient(" + this.gradient + ")"
+                      );
+                    if (src) backgroundImage.push('url("' + src + '")');
+                    var image = this.$createElement("div", {
+                      staticClass: "v-image__image",
+                      class: {
+                        "v-image__image--preload": this.isLoading,
+                        "v-image__image--contain": this.contain,
+                        "v-image__image--cover": !this.contain,
+                      },
+                      style: {
+                        backgroundImage: backgroundImage.join(", "),
+                        backgroundPosition: this.position,
+                      },
+                      key: +this.isLoading,
+                    });
+                    /* istanbul ignore if */
+
+                    if (!this.transition) return image;
+                    return this.$createElement(
+                      "transition",
+                      {
+                        attrs: {
+                          name: this.transition,
+                          mode: "in-out",
+                        },
+                      },
+                      [image]
+                    );
+                  },
+                },
+                watch: {
+                  src: function src() {
+                    // Force re-init when src changes
+                    if (!this.isLoading) this.init(undefined, undefined, true);
+                    else this.loadImage();
+                  },
+                  "$vuetify.breakpoint.width": "getSrc",
+                },
+                mounted: function mounted() {
+                  this.init();
+                },
+                methods: {
+                  init: function init(entries, observer, isIntersecting) {
+                    // If the current browser supports the intersection
+                    // observer api, the image is not observable, and
+                    // the eager prop isn't being used, do not load
+                    if (hasIntersect && !isIntersecting && !this.eager) return;
+
+                    if (this.normalisedSrc.lazySrc) {
+                      var lazyImg = new Image();
+                      lazyImg.src = this.normalisedSrc.lazySrc;
+                      this.pollForSize(lazyImg, null);
+                    }
+                    /* istanbul ignore else */
+
+                    if (this.normalisedSrc.src) this.loadImage();
+                  },
+                  onLoad: function onLoad() {
+                    this.getSrc();
+                    this.isLoading = false;
+                    this.$emit("load", this.src);
+                  },
+                  onError: function onError() {
+                    this.hasError = true;
+                    this.$emit("error", this.src);
+                  },
+                  getSrc: function getSrc() {
+                    /* istanbul ignore else */
+                    if (this.image)
+                      this.currentSrc = this.image.currentSrc || this.image.src;
+                  },
+                  loadImage: function loadImage() {
+                    var _this = this;
+
+                    var image = new Image();
+                    this.image = image;
+
+                    image.onload = function () {
+                      /* istanbul ignore if */
+                      if (image.decode) {
+                        image
+                          .decode()
+                          .catch(function (err) {
+                            Object(
+                              _util_console__WEBPACK_IMPORTED_MODULE_6__[
+                                "consoleWarn"
+                              ]
+                            )(
+                              "Failed to decode image, trying to render anyway\n\n" +
+                                ("src: " + _this.normalisedSrc.src) +
+                                (err.message
+                                  ? "\nOriginal error: " + err.message
+                                  : ""),
+                              _this
+                            );
+                          })
+                          .then(_this.onLoad);
+                      } else {
+                        _this.onLoad();
+                      }
+                    };
+
+                    image.onerror = this.onError;
+                    this.hasError = false;
+                    image.src = this.normalisedSrc.src;
+                    this.sizes && (image.sizes = this.sizes);
+                    this.normalisedSrc.srcset &&
+                      (image.srcset = this.normalisedSrc.srcset);
+                    this.aspectRatio || this.pollForSize(image);
+                    this.getSrc();
+                  },
+                  pollForSize: function pollForSize(img, timeout) {
+                    var _this = this;
+
+                    if (timeout === void 0) {
+                      timeout = 100;
+                    }
+
+                    var poll = function poll() {
+                      var naturalHeight = img.naturalHeight,
+                        naturalWidth = img.naturalWidth;
+
+                      if (naturalHeight || naturalWidth) {
+                        _this.naturalWidth = naturalWidth;
+                        _this.calculatedAspectRatio =
+                          naturalWidth / naturalHeight;
+                      } else {
+                        timeout != null &&
+                          !_this.hasError &&
+                          setTimeout(poll, timeout);
+                      }
+                    };
+
+                    poll();
+                  },
+                  genContent: function genContent() {
+                    var content =
+                      _VResponsive__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genContent.call(this);
+
+                    if (this.naturalWidth) {
+                      this._b(content.data, "div", {
+                        style: {
+                          width: this.naturalWidth + "px",
+                        },
+                      });
+                    }
+
+                    return content;
+                  },
+                  __genPlaceholder: function __genPlaceholder() {
+                    if (this.$slots.placeholder) {
+                      var placeholder = this.isLoading
+                        ? [
+                            this.$createElement(
+                              "div",
+                              {
+                                staticClass: "v-image__placeholder",
+                              },
+                              this.$slots.placeholder
+                            ),
+                          ]
+                        : [];
+                      if (!this.transition) return placeholder[0];
+                      return this.$createElement(
+                        "transition",
+                        {
+                          props: {
+                            appear: true,
+                            name: this.transition,
+                          },
+                        },
+                        placeholder
+                      );
+                    }
+                  },
+                },
+                render: function render(h) {
+                  var node = _VResponsive__WEBPACK_IMPORTED_MODULE_2__[
+                    "default"
+                  ].options.render.call(this, h);
+                  var data = Object(
+                    _util_mergeData__WEBPACK_IMPORTED_MODULE_5__["default"]
+                  )(node.data, {
+                    staticClass: "v-image",
+                    attrs: {
+                      "aria-label": this.alt,
+                      role: this.alt ? "img" : undefined,
+                    },
+                    class: this.themeClasses,
+                    // Only load intersect directive if it
+                    // will work in the current browser.
+                    directives: hasIntersect
+                      ? [
+                          {
+                            name: "intersect",
+                            modifiers: {
+                              once: true,
+                            },
+                            value: {
+                              handler: this.init,
+                              options: this.options,
+                            },
+                          },
+                        ]
+                      : undefined,
+                  });
+                  node.children = [
+                    this.__cachedSizer,
+                    this.__cachedImage,
+                    this.__genPlaceholder(),
+                    this.genContent(),
+                  ];
+                  return h(node.tag, data, node.children);
+                },
+              });
 
-function stripAlpha(color, stripAlpha) {
-  if (stripAlpha) {
-    var a = color.a,
-        rest = __rest(color, ["a"]);
+            /***/
+          },
 
-    return rest;
-  }
+        /***/ "./src/components/VImg/index.ts":
+          /*!**************************************!*\
+  !*** ./src/components/VImg/index.ts ***!
+  \**************************************/
+          /*! exports provided: VImg, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VImg__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VImg */ "./src/components/VImg/VImg.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VImg",
+              function () {
+                return _VImg__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-  return color;
-}
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VImg__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-function extractColor(color, input) {
-  if (input == null) return color;
+            /***/
+          },
 
-  if (typeof input === 'string') {
-    return input.length === 7 ? color.hex : color.hexa;
-  }
+        /***/ "./src/components/VInput/VInput.sass":
+          /*!*******************************************!*\
+  !*** ./src/components/VInput/VInput.sass ***!
+  \*******************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  if (_typeof(input) === 'object') {
-    var shouldStrip = typeof input.a === 'number' && input.a === 0 ? !!input.a : !input.a;
-    if (has(input, ['r', 'g', 'b'])) return stripAlpha(color.rgba, shouldStrip);else if (has(input, ['h', 's', 'l'])) return stripAlpha(color.hsla, shouldStrip);else if (has(input, ['h', 's', 'v'])) return stripAlpha(color.hsva, shouldStrip);
-  }
+        /***/ "./src/components/VInput/VInput.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VInput/VInput.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VInput_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VInput.sass */ "./src/components/VInput/VInput.sass"
+              );
+            /* harmony import */ var _VInput_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VInput_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VLabel */ "./src/components/VLabel/index.ts"
+              );
+            /* harmony import */ var _VMessages__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VMessages */ "./src/components/VMessages/index.ts"
+              );
+            /* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts"
+              );
+            /* harmony import */ var _mixins_validatable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/validatable */ "./src/mixins/validatable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"]
+            )(
+              _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_validatable__WEBPACK_IMPORTED_MODULE_5__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-input",
+                inheritAttrs: false,
+                props: {
+                  appendIcon: String,
+                  backgroundColor: {
+                    type: String,
+                    default: "",
+                  },
+                  dense: Boolean,
+                  height: [Number, String],
+                  hideDetails: [Boolean, String],
+                  hint: String,
+                  id: String,
+                  label: String,
+                  loading: Boolean,
+                  persistentHint: Boolean,
+                  prependIcon: String,
+                  value: null,
+                },
+                data: function data() {
+                  return {
+                    lazyValue: this.value,
+                    hasMouseDown: false,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-input--has-state": this.hasState,
+                        "v-input--hide-details": !this.showDetails,
+                        "v-input--is-label-active": this.isLabelActive,
+                        "v-input--is-dirty": this.isDirty,
+                        "v-input--is-disabled": this.isDisabled,
+                        "v-input--is-focused": this.isFocused,
+                        // <v-switch loading>.loading === '' so we can't just cast to boolean
+                        "v-input--is-loading":
+                          this.loading !== false && this.loading != null,
+                        "v-input--is-readonly": this.isReadonly,
+                        "v-input--dense": this.dense,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  computedId: function computedId() {
+                    return this.id || "input-" + this._uid;
+                  },
+                  hasDetails: function hasDetails() {
+                    return this.messagesToDisplay.length > 0;
+                  },
+                  hasHint: function hasHint() {
+                    return (
+                      !this.hasMessages &&
+                      !!this.hint &&
+                      (this.persistentHint || this.isFocused)
+                    );
+                  },
+                  hasLabel: function hasLabel() {
+                    return !!(this.$slots.label || this.label);
+                  },
+                  // Proxy for `lazyValue`
+                  // This allows an input
+                  // to function without
+                  // a provided model
+                  internalValue: {
+                    get: function get() {
+                      return this.lazyValue;
+                    },
+                    set: function set(val) {
+                      this.lazyValue = val;
+                      this.$emit(this.$_modelEvent, val);
+                    },
+                  },
+                  isDirty: function isDirty() {
+                    return !!this.lazyValue;
+                  },
+                  isLabelActive: function isLabelActive() {
+                    return this.isDirty;
+                  },
+                  messagesToDisplay: function messagesToDisplay() {
+                    var _this = this;
+
+                    if (this.hasHint) return [this.hint];
+                    if (!this.hasMessages) return [];
+                    return this.validations
+                      .map(function (validation) {
+                        if (typeof validation === "string") return validation;
+                        var validationResult = validation(_this.internalValue);
+                        return typeof validationResult === "string"
+                          ? validationResult
+                          : "";
+                      })
+                      .filter(function (message) {
+                        return message !== "";
+                      });
+                  },
+                  showDetails: function showDetails() {
+                    return (
+                      this.hideDetails === false ||
+                      (this.hideDetails === "auto" && this.hasDetails)
+                    );
+                  },
+                },
+                watch: {
+                  value: function value(val) {
+                    this.lazyValue = val;
+                  },
+                },
+                beforeCreate: function beforeCreate() {
+                  // v-radio-group needs to emit a different event
+                  // https://github.com/vuetifyjs/vuetify/issues/4752
+                  this.$_modelEvent =
+                    (this.$options.model && this.$options.model.event) ||
+                    "input";
+                },
+                methods: {
+                  genContent: function genContent() {
+                    return [
+                      this.genPrependSlot(),
+                      this.genControl(),
+                      this.genAppendSlot(),
+                    ];
+                  },
+                  genControl: function genControl() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-input__control",
+                      },
+                      [this.genInputSlot(), this.genMessages()]
+                    );
+                  },
+                  genDefaultSlot: function genDefaultSlot() {
+                    return [this.genLabel(), this.$slots.default];
+                  },
+                  genIcon: function genIcon(type, cb, extraData) {
+                    var _this = this;
+
+                    if (extraData === void 0) {
+                      extraData = {};
+                    }
+
+                    var icon = this[type + "Icon"];
+                    var eventName =
+                      "click:" +
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["kebabCase"]
+                      )(type);
+                    var hasListener = !!(this.listeners$[eventName] || cb);
+                    var data = Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_7__["default"]
+                    )(
+                      {
+                        attrs: {
+                          "aria-label": hasListener
+                            ? Object(
+                                _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                                  "kebabCase"
+                                ]
+                              )(type).split("-")[0] + " icon"
+                            : undefined,
+                          color: this.validationState,
+                          dark: this.dark,
+                          disabled: this.isDisabled,
+                          light: this.light,
+                        },
+                        on: !hasListener
+                          ? undefined
+                          : {
+                              click: function click(e) {
+                                e.preventDefault();
+                                e.stopPropagation();
+
+                                _this.$emit(eventName, e);
+
+                                cb && cb(e);
+                              },
+                              // Container has g event that will
+                              // trigger menu open if enclosed
+                              mouseup: function mouseup(e) {
+                                e.preventDefault();
+                                e.stopPropagation();
+                              },
+                            },
+                      },
+                      extraData
+                    );
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-input__icon",
+                        class: type
+                          ? "v-input__icon--" +
+                            Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                                "kebabCase"
+                              ]
+                            )(type)
+                          : undefined,
+                      },
+                      [
+                        this.$createElement(
+                          _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                          data,
+                          icon
+                        ),
+                      ]
+                    );
+                  },
+                  genInputSlot: function genInputSlot() {
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(this.backgroundColor, {
+                        staticClass: "v-input__slot",
+                        style: {
+                          height: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                              "convertToUnit"
+                            ]
+                          )(this.height),
+                        },
+                        on: {
+                          click: this.onClick,
+                          mousedown: this.onMouseDown,
+                          mouseup: this.onMouseUp,
+                        },
+                        ref: "input-slot",
+                      }),
+                      [this.genDefaultSlot()]
+                    );
+                  },
+                  genLabel: function genLabel() {
+                    if (!this.hasLabel) return null;
+                    return this.$createElement(
+                      _VLabel__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        props: {
+                          color: this.validationState,
+                          dark: this.dark,
+                          disabled: this.isDisabled,
+                          focused: this.hasState,
+                          for: this.computedId,
+                          light: this.light,
+                        },
+                      },
+                      this.$slots.label || this.label
+                    );
+                  },
+                  genMessages: function genMessages() {
+                    var _this = this;
+
+                    if (!this.showDetails) return null;
+                    return this.$createElement(
+                      _VMessages__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      {
+                        props: {
+                          color: this.hasHint ? "" : this.validationState,
+                          dark: this.dark,
+                          light: this.light,
+                          value: this.messagesToDisplay,
+                        },
+                        attrs: {
+                          role: this.hasMessages ? "alert" : null,
+                        },
+                        scopedSlots: {
+                          default: function _default(props) {
+                            return Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                                "getSlot"
+                              ]
+                            )(_this, "message", props);
+                          },
+                        },
+                      }
+                    );
+                  },
+                  genSlot: function genSlot(type, location, slot) {
+                    if (!slot.length) return null;
+                    var ref = type + "-" + location;
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-input__" + ref,
+                        ref: ref,
+                      },
+                      slot
+                    );
+                  },
+                  genPrependSlot: function genPrependSlot() {
+                    var slot = [];
+
+                    if (this.$slots.prepend) {
+                      slot.push(this.$slots.prepend);
+                    } else if (this.prependIcon) {
+                      slot.push(this.genIcon("prepend"));
+                    }
+
+                    return this.genSlot("prepend", "outer", slot);
+                  },
+                  genAppendSlot: function genAppendSlot() {
+                    var slot = []; // Append icon for text field was really
+                    // an appended inner icon, v-text-field
+                    // will overwrite this method in order to obtain
+                    // backwards compat
+
+                    if (this.$slots.append) {
+                      slot.push(this.$slots.append);
+                    } else if (this.appendIcon) {
+                      slot.push(this.genIcon("append"));
+                    }
+
+                    return this.genSlot("append", "outer", slot);
+                  },
+                  onClick: function onClick(e) {
+                    this.$emit("click", e);
+                  },
+                  onMouseDown: function onMouseDown(e) {
+                    this.hasMouseDown = true;
+                    this.$emit("mousedown", e);
+                  },
+                  onMouseUp: function onMouseUp(e) {
+                    this.hasMouseDown = false;
+                    this.$emit("mouseup", e);
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    this.setTextColor(this.validationState, {
+                      staticClass: "v-input",
+                      class: this.classes,
+                    }),
+                    this.genContent()
+                  );
+                },
+              });
 
-  return color;
-}
-function hasAlpha(color) {
-  if (!color) return false;
+            /***/
+          },
 
-  if (typeof color === 'string') {
-    return color.length > 7;
-  }
+        /***/ "./src/components/VInput/index.ts":
+          /*!****************************************!*\
+  !*** ./src/components/VInput/index.ts ***!
+  \****************************************/
+          /*! exports provided: VInput, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VInput */ "./src/components/VInput/VInput.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VInput",
+              function () {
+                return _VInput__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-  if (_typeof(color) === 'object') {
-    return has(color, ['a']) || has(color, ['alpha']);
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VInput__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return false;
-}
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VItemGroup/VItem.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VItemGroup/VItem.ts ***!
+  \********************************************/
+          /*! exports provided: BaseItem, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "BaseItem",
+              function () {
+                return BaseItem;
+              }
+            );
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_3__
+              );
+            // Mixins
+            // Utilities
+
+            // Types
+
+            /* @vue/component */
+
+            var BaseItem = vue__WEBPACK_IMPORTED_MODULE_3___default.a.extend({
+              props: {
+                activeClass: String,
+                value: {
+                  required: false,
+                },
+              },
+              data: function data() {
+                return {
+                  isActive: false,
+                };
+              },
+              methods: {
+                toggle: function toggle() {
+                  this.isActive = !this.isActive;
+                },
+              },
+              render: function render() {
+                var _a;
+
+                if (!this.$scopedSlots.default) {
+                  Object(
+                    _util_console__WEBPACK_IMPORTED_MODULE_2__["consoleWarn"]
+                  )("v-item is missing a default scopedSlot", this);
+                  return null;
+                }
 
-/***/ "./src/components/VCombobox/VCombobox.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VCombobox/VCombobox.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAutocomplete_VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VAutocomplete/VAutocomplete.sass */ "./src/components/VAutocomplete/VAutocomplete.sass");
-/* harmony import */ var _VAutocomplete_VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VAutocomplete_VAutocomplete_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts");
-/* harmony import */ var _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VAutocomplete/VAutocomplete */ "./src/components/VAutocomplete/VAutocomplete.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+                var element;
+                /* istanbul ignore else */
 
-    return t;
-  };
+                if (this.$scopedSlots.default) {
+                  element = this.$scopedSlots.default({
+                    active: this.isActive,
+                    toggle: this.toggle,
+                  });
+                }
 
-  return __assign.apply(this, arguments);
-}; // Styles
+                if (Array.isArray(element) && element.length === 1) {
+                  element = element[0];
+                }
 
+                if (!element || Array.isArray(element) || !element.tag) {
+                  Object(
+                    _util_console__WEBPACK_IMPORTED_MODULE_2__["consoleWarn"]
+                  )("v-item should only contain a single element", this);
+                  return element;
+                }
 
- // Extensions
+                element.data = this._b(element.data || {}, element.tag, {
+                  class:
+                    ((_a = {}), (_a[this.activeClass] = this.isActive), _a),
+                });
+                return element;
+              },
+            });
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(
+                BaseItem,
+                Object(
+                  _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__["factory"]
+                )("itemGroup", "v-item", "v-item-group")
+              ).extend({
+                name: "v-item",
+              });
 
+            /***/
+          },
 
- // Utils
+        /***/ "./src/components/VItemGroup/VItemGroup.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VItemGroup/VItemGroup.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VItemGroup/VItemGroup.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VItemGroup/VItemGroup.ts ***!
+  \*************************************************/
+          /*! exports provided: BaseItemGroup, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "BaseItemGroup",
+              function () {
+                return BaseItemGroup;
+              }
+            );
+            /* harmony import */ var _VItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VItemGroup.sass */ "./src/components/VItemGroup/VItemGroup.sass"
+              );
+            /* harmony import */ var _VItemGroup_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Utilities
+
+            var BaseItemGroup = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"]
+            )(
+              _mixins_proxyable__WEBPACK_IMPORTED_MODULE_1__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+            ).extend({
+              name: "base-item-group",
+              props: {
+                activeClass: {
+                  type: String,
+                  default: "v-item--active",
+                },
+                mandatory: Boolean,
+                max: {
+                  type: [Number, String],
+                  default: null,
+                },
+                multiple: Boolean,
+              },
+              data: function data() {
+                return {
+                  // As long as a value is defined, show it
+                  // Otherwise, check if multiple
+                  // to determine which default to provide
+                  internalLazyValue:
+                    this.value !== undefined
+                      ? this.value
+                      : this.multiple
+                      ? []
+                      : undefined,
+                  items: [],
+                };
+              },
+              computed: {
+                classes: function classes() {
+                  return __assign(
+                    {
+                      "v-item-group": true,
+                    },
+                    this.themeClasses
+                  );
+                },
+                selectedIndex: function selectedIndex() {
+                  return (
+                    (this.selectedItem &&
+                      this.items.indexOf(this.selectedItem)) ||
+                    -1
+                  );
+                },
+                selectedItem: function selectedItem() {
+                  if (this.multiple) return undefined;
+                  return this.selectedItems[0];
+                },
+                selectedItems: function selectedItems() {
+                  var _this = this;
+
+                  return this.items.filter(function (item, index) {
+                    return _this.toggleMethod(_this.getValue(item, index));
+                  });
+                },
+                selectedValues: function selectedValues() {
+                  if (this.internalValue == null) return [];
+                  return Array.isArray(this.internalValue)
+                    ? this.internalValue
+                    : [this.internalValue];
+                },
+                toggleMethod: function toggleMethod() {
+                  var _this = this;
+
+                  if (!this.multiple) {
+                    return function (v) {
+                      return _this.internalValue === v;
+                    };
+                  }
 
-/* @vue/component */
+                  var internalValue = this.internalValue;
 
-/* harmony default export */ __webpack_exports__["default"] = (_VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].extend({
-  name: 'v-combobox',
-  props: {
-    delimiters: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    returnObject: {
-      type: Boolean,
-      default: true
-    }
-  },
-  data: function data() {
-    return {
-      editingIndex: -1
-    };
-  },
-  computed: {
-    computedCounterValue: function computedCounterValue() {
-      return this.multiple ? this.selectedItems.length : (this.internalSearch || '').toString().length;
-    },
-    hasSlot: function hasSlot() {
-      return _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.hasSlot.call(this) || this.multiple;
-    },
-    isAnyValueAllowed: function isAnyValueAllowed() {
-      return true;
-    },
-    menuCanShow: function menuCanShow() {
-      if (!this.isFocused) return false;
-      return this.hasDisplayedItems || !!this.$slots['no-data'] && !this.hideNoData;
-    }
-  },
-  methods: {
-    onInternalSearchChanged: function onInternalSearchChanged(val) {
-      if (val && this.multiple && this.delimiters.length) {
-        var delimiter = this.delimiters.find(function (d) {
-          return val.endsWith(d);
-        });
+                  if (Array.isArray(internalValue)) {
+                    return function (v) {
+                      return internalValue.includes(v);
+                    };
+                  }
 
-        if (delimiter != null) {
-          this.internalSearch = val.slice(0, val.length - delimiter.length);
-          this.updateTags();
-        }
-      }
+                  return function () {
+                    return false;
+                  };
+                },
+              },
+              watch: {
+                internalValue: "updateItemsState",
+                items: "updateItemsState",
+              },
+              created: function created() {
+                if (this.multiple && !Array.isArray(this.internalValue)) {
+                  Object(
+                    _util_console__WEBPACK_IMPORTED_MODULE_4__["consoleWarn"]
+                  )(
+                    "Model must be bound to an array if the multiple property is true.",
+                    this
+                  );
+                }
+              },
+              methods: {
+                genData: function genData() {
+                  return {
+                    class: this.classes,
+                  };
+                },
+                getValue: function getValue(item, i) {
+                  return item.value == null || item.value === ""
+                    ? i
+                    : item.value;
+                },
+                onClick: function onClick(item) {
+                  this.updateInternalValue(
+                    this.getValue(item, this.items.indexOf(item))
+                  );
+                },
+                register: function register(item) {
+                  var _this = this;
+
+                  var index = this.items.push(item) - 1;
+                  item.$on("change", function () {
+                    return _this.onClick(item);
+                  }); // If no value provided and mandatory,
+                  // assign first registered item
+
+                  if (this.mandatory && !this.selectedValues.length) {
+                    this.updateMandatory();
+                  }
 
-      this.updateMenuDimensions();
-    },
-    genInput: function genInput() {
-      var input = _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genInput.call(this);
-      delete input.data.attrs.name;
-      input.data.on.paste = this.onPaste;
-      return input;
-    },
-    genChipSelection: function genChipSelection(item, index) {
-      var _this = this;
-
-      var chip = _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genChipSelection.call(this, item, index); // Allow user to update an existing value
-
-      if (this.multiple) {
-        chip.componentOptions.listeners = __assign(__assign({}, chip.componentOptions.listeners), {
-          dblclick: function dblclick() {
-            _this.editingIndex = index;
-            _this.internalSearch = _this.getText(item);
-            _this.selectedIndex = -1;
-          }
-        });
-      }
+                  this.updateItem(item, index);
+                },
+                unregister: function unregister(item) {
+                  if (this._isDestroyed) return;
+                  var index = this.items.indexOf(item);
+                  var value = this.getValue(item, index);
+                  this.items.splice(index, 1);
+                  var valueIndex = this.selectedValues.indexOf(value); // Items is not selected, do nothing
+
+                  if (valueIndex < 0) return; // If not mandatory, use regular update process
+
+                  if (!this.mandatory) {
+                    return this.updateInternalValue(value);
+                  } // Remove the value
+
+                  if (this.multiple && Array.isArray(this.internalValue)) {
+                    this.internalValue = this.internalValue.filter(function (
+                      v
+                    ) {
+                      return v !== value;
+                    });
+                  } else {
+                    this.internalValue = undefined;
+                  } // If mandatory and we have no selection
+                  // add the last item as value
+
+                  /* istanbul ignore else */
+
+                  if (!this.selectedItems.length) {
+                    this.updateMandatory(true);
+                  }
+                },
+                updateItem: function updateItem(item, index) {
+                  var value = this.getValue(item, index);
+                  item.isActive = this.toggleMethod(value);
+                },
+                // https://github.com/vuetifyjs/vuetify/issues/5352
+                updateItemsState: function updateItemsState() {
+                  var _this = this;
+
+                  this.$nextTick(function () {
+                    if (_this.mandatory && !_this.selectedItems.length) {
+                      return _this.updateMandatory();
+                    } // TODO: Make this smarter so it
+                    // doesn't have to iterate every
+                    // child in an update
+
+                    _this.items.forEach(_this.updateItem);
+                  });
+                },
+                updateInternalValue: function updateInternalValue(value) {
+                  this.multiple
+                    ? this.updateMultiple(value)
+                    : this.updateSingle(value);
+                },
+                updateMandatory: function updateMandatory(last) {
+                  if (!this.items.length) return;
+                  var items = this.items.slice();
+                  if (last) items.reverse();
+                  var item = items.find(function (item) {
+                    return !item.disabled;
+                  }); // If no tabs are available
+                  // aborts mandatory value
+
+                  if (!item) return;
+                  var index = this.items.indexOf(item);
+                  this.updateInternalValue(this.getValue(item, index));
+                },
+                updateMultiple: function updateMultiple(value) {
+                  var defaultValue = Array.isArray(this.internalValue)
+                    ? this.internalValue
+                    : [];
+                  var internalValue = defaultValue.slice();
+                  var index = internalValue.findIndex(function (val) {
+                    return val === value;
+                  });
+                  if (
+                    this.mandatory && // Item already exists
+                    index > -1 && // value would be reduced below min
+                    internalValue.length - 1 < 1
+                  )
+                    return;
+                  if (
+                    // Max is set
+                    this.max != null && // Item doesn't exist
+                    index < 0 && // value would be increased above max
+                    internalValue.length + 1 > this.max
+                  )
+                    return;
+                  index > -1
+                    ? internalValue.splice(index, 1)
+                    : internalValue.push(value);
+                  this.internalValue = internalValue;
+                },
+                updateSingle: function updateSingle(value) {
+                  var isSame = value === this.internalValue;
+                  if (this.mandatory && isSame) return;
+                  this.internalValue = isSame ? undefined : value;
+                },
+              },
+              render: function render(h) {
+                return h("div", this.genData(), this.$slots.default);
+              },
+            });
+            /* harmony default export */ __webpack_exports__["default"] =
+              BaseItemGroup.extend({
+                name: "v-item-group",
+                provide: function provide() {
+                  return {
+                    itemGroup: this,
+                  };
+                },
+              });
 
-      return chip;
-    },
-    onChipInput: function onChipInput(item) {
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.onChipInput.call(this, item);
-      this.editingIndex = -1;
-    },
-    // Requires a manual definition
-    // to overwrite removal in v-autocomplete
-    onEnterDown: function onEnterDown(e) {
-      e.preventDefault(); // If has menu index, let v-select-list handle
-
-      if (this.getMenuIndex() > -1) return;
-      this.$nextTick(this.updateSelf);
-    },
-    onFilteredItemsChanged: function onFilteredItemsChanged(val, oldVal) {
-      if (!this.autoSelectFirst) return;
-      _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.onFilteredItemsChanged.call(this, val, oldVal);
-    },
-    onKeyDown: function onKeyDown(e) {
-      var keyCode = e.keyCode;
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.onKeyDown.call(this, e); // If user is at selection index of 0
-      // create a new tag
-
-      if (this.multiple && keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"].left && this.$refs.input.selectionStart === 0) {
-        this.updateSelf();
-      } else if (keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"].enter) {
-        this.onEnterDown(e);
-      } // The ordering is important here
-      // allows new value to be updated
-      // and then moves the index to the
-      // proper location
-
-
-      this.changeSelectedIndex(keyCode);
-    },
-    onTabDown: function onTabDown(e) {
-      // When adding tags, if searching and
-      // there is not a filtered options,
-      // add the value to the tags list
-      if (this.multiple && this.internalSearch && this.getMenuIndex() === -1) {
-        e.preventDefault();
-        e.stopPropagation();
-        return this.updateTags();
-      }
+            /***/
+          },
 
-      _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.onTabDown.call(this, e);
-    },
-    selectItem: function selectItem(item) {
-      // Currently only supports items:<string[]>
-      if (this.editingIndex > -1) {
-        this.updateEditing();
-      } else {
-        _VAutocomplete_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.selectItem.call(this, item);
-      }
-    },
-    setSelectedItems: function setSelectedItems() {
-      if (this.internalValue == null || this.internalValue === '') {
-        this.selectedItems = [];
-      } else {
-        this.selectedItems = this.multiple ? this.internalValue : [this.internalValue];
-      }
-    },
-    setValue: function setValue(value) {
-      _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.setValue.call(this, value !== null && value !== void 0 ? value : this.internalSearch);
-    },
-    updateEditing: function updateEditing() {
-      var value = this.internalValue.slice();
-      value[this.editingIndex] = this.internalSearch;
-      this.setValue(value);
-      this.editingIndex = -1;
-    },
-    updateCombobox: function updateCombobox() {
-      // If search is not dirty, do nothing
-      if (!this.searchIsDirty) return; // The internal search is not matching
-      // the internal value, update the input
-
-      if (this.internalSearch !== this.getText(this.internalValue)) this.setValue(); // Reset search if using slot to avoid a double input
-
-      var isUsingSlot = Boolean(this.$scopedSlots.selection) || this.hasChips;
-      if (isUsingSlot) this.internalSearch = undefined;
-    },
-    updateSelf: function updateSelf() {
-      this.multiple ? this.updateTags() : this.updateCombobox();
-    },
-    updateTags: function updateTags() {
-      var menuIndex = this.getMenuIndex(); // If the user is not searching
-      // and no menu item is selected
-      // do nothing
-
-      if (menuIndex < 0 && !this.searchIsDirty) return;
-
-      if (this.editingIndex > -1) {
-        return this.updateEditing();
-      }
+        /***/ "./src/components/VItemGroup/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VItemGroup/index.ts ***!
+  \********************************************/
+          /*! exports provided: VItem, VItemGroup, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VItem__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VItem */ "./src/components/VItemGroup/VItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VItem",
+              function () {
+                return _VItem__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VItemGroup__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VItemGroup",
+              function () {
+                return _VItemGroup__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
 
-      var index = this.selectedItems.indexOf(this.internalSearch); // If it already exists, do nothing
-      // this might need to change to bring
-      // the duplicated item to the last entered
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VItem: _VItem__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VItemGroup: _VItemGroup__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
-      if (index > -1) {
-        var internalValue = this.internalValue.slice();
-        internalValue.splice(index, 1);
-        this.setValue(internalValue);
-      } // If menu index is greater than 1
-      // the selection is handled elsewhere
-      // TODO: find out where
+            /***/
+          },
 
+        /***/ "./src/components/VLabel/VLabel.sass":
+          /*!*******************************************!*\
+  !*** ./src/components/VLabel/VLabel.sass ***!
+  \*******************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (menuIndex > -1) return this.internalSearch = null;
-      this.selectItem(this.internalSearch);
-      this.internalSearch = null;
-    },
-    onPaste: function onPaste(event) {
-      var _a;
+        /***/ "./src/components/VLabel/VLabel.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VLabel/VLabel.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VLabel_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VLabel.sass */ "./src/components/VLabel/VLabel.sass"
+              );
+            /* harmony import */ var _VLabel_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VLabel_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "v-label",
+                functional: true,
+                props: {
+                  absolute: Boolean,
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  disabled: Boolean,
+                  focused: Boolean,
+                  for: String,
+                  left: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  right: {
+                    type: [Number, String],
+                    default: "auto",
+                  },
+                  value: Boolean,
+                },
+                render: function render(h, ctx) {
+                  var children = ctx.children,
+                    listeners = ctx.listeners,
+                    props = ctx.props;
+                  var data = {
+                    staticClass: "v-label",
+                    class: __assign(
+                      {
+                        "v-label--active": props.value,
+                        "v-label--is-disabled": props.disabled,
+                      },
+                      Object(
+                        _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__[
+                          "functionalThemeClasses"
+                        ]
+                      )(ctx)
+                    ),
+                    attrs: {
+                      for: props.for,
+                      "aria-hidden": !props.for,
+                    },
+                    on: listeners,
+                    style: {
+                      left: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                          "convertToUnit"
+                        ]
+                      )(props.left),
+                      right: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                          "convertToUnit"
+                        ]
+                      )(props.right),
+                      position: props.absolute ? "absolute" : "relative",
+                    },
+                    ref: "label",
+                  };
+                  return h(
+                    "label",
+                    _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.setTextColor(
+                      props.focused && props.color,
+                      data
+                    ),
+                    children
+                  );
+                },
+              });
 
-      if (!this.multiple || this.searchIsDirty) return;
-      var pastedItemText = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/vnd.vuetify.autocomplete.item+plain');
+            /***/
+          },
 
-      if (pastedItemText && this.findExistingIndex(pastedItemText) === -1) {
-        event.preventDefault();
-        _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.selectItem.call(this, pastedItemText);
-      }
-    }
-  }
-}));
+        /***/ "./src/components/VLabel/index.ts":
+          /*!****************************************!*\
+  !*** ./src/components/VLabel/index.ts ***!
+  \****************************************/
+          /*! exports provided: VLabel, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VLabel */ "./src/components/VLabel/VLabel.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VLabel",
+              function () {
+                return _VLabel__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/***/ }),
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VLabel__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ "./src/components/VCombobox/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VCombobox/index.ts ***!
-  \*******************************************/
-/*! exports provided: VCombobox, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            /***/
+          },
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCombobox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCombobox */ "./src/components/VCombobox/VCombobox.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCombobox", function() { return _VCombobox__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+        /***/ "./src/components/VLazy/VLazy.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VLazy/VLazy.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _directives_intersect__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../directives/intersect */ "./src/directives/intersect/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Mixins
+
+            // Directives
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_measurable__WEBPACK_IMPORTED_MODULE_0__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__["default"]
+              ).extend({
+                name: "VLazy",
+                directives: {
+                  intersect:
+                    _directives_intersect__WEBPACK_IMPORTED_MODULE_2__[
+                      "default"
+                    ],
+                },
+                props: {
+                  options: {
+                    type: Object,
+                    // For more information on types, navigate to:
+                    // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
+                    default: function _default() {
+                      return {
+                        root: undefined,
+                        rootMargin: undefined,
+                        threshold: undefined,
+                      };
+                    },
+                  },
+                  tag: {
+                    type: String,
+                    default: "div",
+                  },
+                  transition: {
+                    type: String,
+                    default: "fade-transition",
+                  },
+                },
+                computed: {
+                  styles: function styles() {
+                    return __assign({}, this.measurableStyles);
+                  },
+                },
+                methods: {
+                  genContent: function genContent() {
+                    var slot = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"]
+                    )(this);
+                    /* istanbul ignore if */
+
+                    if (!this.transition) return slot;
+                    var children = [];
+                    if (this.isActive) children.push(slot);
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.transition,
+                        },
+                      },
+                      children
+                    );
+                  },
+                  onObserve: function onObserve(
+                    entries,
+                    observer,
+                    isIntersecting
+                  ) {
+                    if (this.isActive) return;
+                    this.isActive = isIntersecting;
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    this.tag,
+                    {
+                      staticClass: "v-lazy",
+                      attrs: this.$attrs,
+                      directives: [
+                        {
+                          name: "intersect",
+                          value: {
+                            handler: this.onObserve,
+                            options: this.options,
+                          },
+                        },
+                      ],
+                      on: this.$listeners,
+                      style: this.styles,
+                    },
+                    [this.genContent()]
+                  );
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VLazy/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VLazy/index.ts ***!
+  \***************************************/
+          /*! exports provided: VLazy, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VLazy__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VLazy */ "./src/components/VLazy/VLazy.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VLazy",
+              function () {
+                return _VLazy__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/* harmony default export */ __webpack_exports__["default"] = (_VCombobox__WEBPACK_IMPORTED_MODULE_0__["default"]);
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VLazy__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VContent/VContent.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VContent/VContent.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VMain_VMain__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VMain/VMain */ "./src/components/VMain/VMain.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-// Extensions
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VMain_VMain__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
-  name: 'v-main',
-  created: function created() {
-    Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["deprecate"])('v-content', 'v-main', this);
-  },
-  render: function render(h) {
-    // Add the legacy class names
-    var node = _VMain_VMain__WEBPACK_IMPORTED_MODULE_0__["default"].options.render.call(this, h);
-    node.data.staticClass += ' v-content';
-    node.children[0].data.staticClass += ' v-content__wrap';
-    return h(node.tag, node.data, node.children);
-  }
-}));
+        /***/ "./src/components/VList/VList.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VList/VList.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VList/VList.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VList/VList.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VList_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VList.sass */ "./src/components/VList/VList.sass"
+              );
+            /* harmony import */ var _VList_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VList_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ "./src/components/VContent/index.ts":
-/*!******************************************!*\
-  !*** ./src/components/VContent/index.ts ***!
-  \******************************************/
-/*! exports provided: VContent, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              }; // Styles
+
+            // Components
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"]
+                .extend()
+                .extend({
+                  name: "v-list",
+                  provide: function provide() {
+                    return {
+                      isInList: true,
+                      list: this,
+                    };
+                  },
+                  inject: {
+                    isInMenu: {
+                      default: false,
+                    },
+                    isInNav: {
+                      default: false,
+                    },
+                  },
+                  props: {
+                    dense: Boolean,
+                    disabled: Boolean,
+                    expand: Boolean,
+                    flat: Boolean,
+                    nav: Boolean,
+                    rounded: Boolean,
+                    subheader: Boolean,
+                    threeLine: Boolean,
+                    twoLine: Boolean,
+                  },
+                  data: function data() {
+                    return {
+                      groups: [],
+                    };
+                  },
+                  computed: {
+                    classes: function classes() {
+                      return __assign(
+                        __assign(
+                          {},
+                          _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                            "default"
+                          ].options.computed.classes.call(this)
+                        ),
+                        {
+                          "v-list--dense": this.dense,
+                          "v-list--disabled": this.disabled,
+                          "v-list--flat": this.flat,
+                          "v-list--nav": this.nav,
+                          "v-list--rounded": this.rounded,
+                          "v-list--subheader": this.subheader,
+                          "v-list--two-line": this.twoLine,
+                          "v-list--three-line": this.threeLine,
+                        }
+                      );
+                    },
+                  },
+                  methods: {
+                    register: function register(content) {
+                      this.groups.push(content);
+                    },
+                    unregister: function unregister(content) {
+                      var index = this.groups.findIndex(function (g) {
+                        return g._uid === content._uid;
+                      });
+                      if (index > -1) this.groups.splice(index, 1);
+                    },
+                    listClick: function listClick(uid) {
+                      var e_1, _a;
+
+                      if (this.expand) return;
+
+                      try {
+                        for (
+                          var _b = __values(this.groups), _c = _b.next();
+                          !_c.done;
+                          _c = _b.next()
+                        ) {
+                          var group = _c.value;
+                          group.toggle(uid);
+                        }
+                      } catch (e_1_1) {
+                        e_1 = {
+                          error: e_1_1,
+                        };
+                      } finally {
+                        try {
+                          if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
+                        } finally {
+                          if (e_1) throw e_1.error;
+                        }
+                      }
+                    },
+                  },
+                  render: function render(h) {
+                    var data = {
+                      staticClass: "v-list",
+                      class: this.classes,
+                      style: this.styles,
+                      attrs: __assign(
+                        {
+                          role:
+                            this.isInNav || this.isInMenu ? undefined : "list",
+                        },
+                        this.attrs$
+                      ),
+                    };
+                    return h(
+                      this.tag,
+                      this.setBackgroundColor(this.color, data),
+                      [this.$slots.default]
+                    );
+                  },
+                });
+
+            /***/
+          },
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VContent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VContent */ "./src/components/VContent/VContent.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VContent", function() { return _VContent__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+        /***/ "./src/components/VList/VListGroup.sass":
+          /*!**********************************************!*\
+  !*** ./src/components/VList/VListGroup.sass ***!
+  \**********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VList/VListGroup.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VList/VListGroup.ts ***!
+  \********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VListGroup_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VListGroup.sass */ "./src/components/VList/VListGroup.sass"
+              );
+            /* harmony import */ var _VListGroup_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VListGroup_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VListItem__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VListItem */ "./src/components/VList/VListItem.ts"
+              );
+            /* harmony import */ var _VListItemIcon__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VListItemIcon */ "./src/components/VList/VListItemIcon.ts"
+              );
+            /* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts"
+              );
+            /* harmony import */ var _mixins_bootable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/bootable */ "./src/mixins/bootable/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Directives
+
+            // Transitions
+
+            // Utils
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_11__["default"]
+            )(
+              _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_bootable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_6__["default"],
+              Object(
+                _mixins_registrable__WEBPACK_IMPORTED_MODULE_8__["inject"]
+              )("list"),
+              _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__["default"]
+            );
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-list-group",
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_9__["default"],
+                },
+                props: {
+                  activeClass: {
+                    type: String,
+                    default: "",
+                  },
+                  appendIcon: {
+                    type: String,
+                    default: "$expand",
+                  },
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  disabled: Boolean,
+                  group: String,
+                  noAction: Boolean,
+                  prependIcon: String,
+                  ripple: {
+                    type: [Boolean, Object],
+                    default: true,
+                  },
+                  subGroup: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return {
+                      "v-list-group--active": this.isActive,
+                      "v-list-group--disabled": this.disabled,
+                      "v-list-group--no-action": this.noAction,
+                      "v-list-group--sub-group": this.subGroup,
+                    };
+                  },
+                },
+                watch: {
+                  isActive: function isActive(val) {
+                    /* istanbul ignore else */
+                    if (!this.subGroup && val) {
+                      this.list && this.list.listClick(this._uid);
+                    }
+                  },
+                  $route: "onRouteChange",
+                },
+                created: function created() {
+                  this.list && this.list.register(this);
+
+                  if (this.group && this.$route && this.value == null) {
+                    this.isActive = this.matchRoute(this.$route.path);
+                  }
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.list && this.list.unregister(this);
+                },
+                methods: {
+                  click: function click(e) {
+                    var _this = this;
+
+                    if (this.disabled) return;
+                    this.isBooted = true;
+                    this.$emit("click", e);
+                    this.$nextTick(function () {
+                      return (_this.isActive = !_this.isActive);
+                    });
+                  },
+                  genIcon: function genIcon(icon) {
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      icon
+                    );
+                  },
+                  genAppendIcon: function genAppendIcon() {
+                    var icon = !this.subGroup ? this.appendIcon : false;
+                    if (!icon && !this.$slots.appendIcon) return null;
+                    return this.$createElement(
+                      _VListItemIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      {
+                        staticClass: "v-list-group__header__append-icon",
+                      },
+                      [this.$slots.appendIcon || this.genIcon(icon)]
+                    );
+                  },
+                  genHeader: function genHeader() {
+                    var _a;
+
+                    return this.$createElement(
+                      _VListItem__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        staticClass: "v-list-group__header",
+                        attrs: {
+                          "aria-expanded": String(this.isActive),
+                          role: "button",
+                        },
+                        class:
+                          ((_a = {}),
+                          (_a[this.activeClass] = this.isActive),
+                          _a),
+                        props: {
+                          inputValue: this.isActive,
+                        },
+                        directives: [
+                          {
+                            name: "ripple",
+                            value: this.ripple,
+                          },
+                        ],
+                        on: __assign(__assign({}, this.listeners$), {
+                          click: this.click,
+                        }),
+                      },
+                      [
+                        this.genPrependIcon(),
+                        this.$slots.activator,
+                        this.genAppendIcon(),
+                      ]
+                    );
+                  },
+                  genItems: function genItems() {
+                    var _this = this;
+
+                    return this.showLazyContent(function () {
+                      return [
+                        _this.$createElement(
+                          "div",
+                          {
+                            staticClass: "v-list-group__items",
+                            directives: [
+                              {
+                                name: "show",
+                                value: _this.isActive,
+                              },
+                            ],
+                          },
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                              "getSlot"
+                            ]
+                          )(_this)
+                        ),
+                      ];
+                    });
+                  },
+                  genPrependIcon: function genPrependIcon() {
+                    var icon =
+                      this.subGroup && this.prependIcon == null
+                        ? "$subgroup"
+                        : this.prependIcon;
+                    if (!icon && !this.$slots.prependIcon) return null;
+                    return this.$createElement(
+                      _VListItemIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      {
+                        staticClass: "v-list-group__header__prepend-icon",
+                      },
+                      [this.$slots.prependIcon || this.genIcon(icon)]
+                    );
+                  },
+                  onRouteChange: function onRouteChange(to) {
+                    /* istanbul ignore if */
+                    if (!this.group) return;
+                    var isActive = this.matchRoute(to.path);
+                    /* istanbul ignore else */
+
+                    if (isActive && this.isActive !== isActive) {
+                      this.list && this.list.listClick(this._uid);
+                    }
+
+                    this.isActive = isActive;
+                  },
+                  toggle: function toggle(uid) {
+                    var _this = this;
+
+                    var isActive = this._uid === uid;
+                    if (isActive) this.isBooted = true;
+                    this.$nextTick(function () {
+                      return (_this.isActive = isActive);
+                    });
+                  },
+                  matchRoute: function matchRoute(to) {
+                    return to.match(this.group) !== null;
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    this.setTextColor(this.isActive && this.color, {
+                      staticClass: "v-list-group",
+                      class: this.classes,
+                    }),
+                    [
+                      this.genHeader(),
+                      h(
+                        _transitions__WEBPACK_IMPORTED_MODULE_10__[
+                          "VExpandTransition"
+                        ],
+                        this.genItems()
+                      ),
+                    ]
+                  );
+                },
+              });
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (_VContent__WEBPACK_IMPORTED_MODULE_0__["default"]);
+        /***/ "./src/components/VList/VListItem.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VList/VListItem.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VList/VListItem.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VList/VListItem.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VListItem_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VListItem.sass */ "./src/components/VList/VListItem.sass"
+              );
+            /* harmony import */ var _VListItem_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VListItem_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/routable */ "./src/mixins/routable/index.ts"
+              );
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ./../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            // Types
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_9__["default"]
+            )(
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+              _mixins_routable__WEBPACK_IMPORTED_MODULE_2__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"],
+              Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_3__["factory"])(
+                "listItemGroup"
+              ),
+              Object(
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_5__["factory"]
+              )("inputValue")
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-list-item",
+                directives: {
+                  Ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_6__["default"],
+                },
+                inject: {
+                  isInGroup: {
+                    default: false,
+                  },
+                  isInList: {
+                    default: false,
+                  },
+                  isInMenu: {
+                    default: false,
+                  },
+                  isInNav: {
+                    default: false,
+                  },
+                },
+                inheritAttrs: false,
+                props: {
+                  activeClass: {
+                    type: String,
+                    default: function _default() {
+                      if (!this.listItemGroup) return "";
+                      return this.listItemGroup.activeClass;
+                    },
+                  },
+                  dense: Boolean,
+                  inactive: Boolean,
+                  link: Boolean,
+                  selectable: {
+                    type: Boolean,
+                  },
+                  tag: {
+                    type: String,
+                    default: "div",
+                  },
+                  threeLine: Boolean,
+                  twoLine: Boolean,
+                  value: null,
+                },
+                data: function data() {
+                  return {
+                    proxyClass: "v-list-item--active",
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        __assign(
+                          {
+                            "v-list-item": true,
+                          },
+                          _mixins_routable__WEBPACK_IMPORTED_MODULE_2__[
+                            "default"
+                          ].options.computed.classes.call(this)
+                        ),
+                        {
+                          "v-list-item--dense": this.dense,
+                          "v-list-item--disabled": this.disabled,
+                          "v-list-item--link":
+                            this.isClickable && !this.inactive,
+                          "v-list-item--selectable": this.selectable,
+                          "v-list-item--three-line": this.threeLine,
+                          "v-list-item--two-line": this.twoLine,
+                        }
+                      ),
+                      this.themeClasses
+                    );
+                  },
+                  isClickable: function isClickable() {
+                    return Boolean(
+                      _mixins_routable__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.computed.isClickable.call(this) ||
+                        this.listItemGroup
+                    );
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("avatar")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_8__["removed"]
+                    )("avatar", this);
+                  }
+                },
+                methods: {
+                  click: function click(e) {
+                    if (e.detail) this.$el.blur();
+                    this.$emit("click", e);
+                    this.to || this.toggle();
+                  },
+                  genAttrs: function genAttrs() {
+                    var attrs = __assign(
+                      {
+                        "aria-disabled": this.disabled ? true : undefined,
+                        tabindex: this.isClickable && !this.disabled ? 0 : -1,
+                      },
+                      this.$attrs
+                    );
+
+                    if (this.$attrs.hasOwnProperty("role")) {
+                      // do nothing, role already provided
+                    } else if (this.isInNav) {
+                      // do nothing, role is inherit
+                    } else if (this.isInGroup) {
+                      attrs.role = "listitem";
+                      attrs["aria-selected"] = String(this.isActive);
+                    } else if (this.isInMenu) {
+                      attrs.role = this.isClickable ? "menuitem" : undefined;
+                      attrs.id = attrs.id || "list-item-" + this._uid;
+                    } else if (this.isInList) {
+                      attrs.role = "listitem";
+                    }
+
+                    return attrs;
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var _a = this.generateRouteLink(),
+                    tag = _a.tag,
+                    data = _a.data;
+
+                  data.attrs = __assign(
+                    __assign({}, data.attrs),
+                    this.genAttrs()
+                  );
+                  data[this.to ? "nativeOn" : "on"] = __assign(
+                    __assign({}, data[this.to ? "nativeOn" : "on"]),
+                    {
+                      keydown: function keydown(e) {
+                        /* istanbul ignore else */
+                        if (
+                          e.keyCode ===
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__["keyCodes"]
+                            .enter
+                        )
+                          _this.click(e);
+
+                        _this.$emit("keydown", e);
+                      },
+                    }
+                  );
+                  if (this.inactive) tag = "div";
+
+                  if (this.inactive && this.to) {
+                    data.on = data.nativeOn;
+                    delete data.nativeOn;
+                  }
 
-/***/ "./src/components/VCounter/VCounter.sass":
-/*!***********************************************!*\
-  !*** ./src/components/VCounter/VCounter.sass ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+                  var children = this.$scopedSlots.default
+                    ? this.$scopedSlots.default({
+                        active: this.isActive,
+                        toggle: this.toggle,
+                      })
+                    : this.$slots.default;
+                  return h(tag, this.setTextColor(this.color, data), children);
+                },
+              });
 
-// extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VList/VListItemAction.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VList/VListItemAction.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            // Types
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "v-list-item-action",
+                functional: true,
+                render: function render(h, _a) {
+                  var data = _a.data,
+                    _b = _a.children,
+                    children = _b === void 0 ? [] : _b;
+                  data.staticClass = data.staticClass
+                    ? "v-list-item__action " + data.staticClass
+                    : "v-list-item__action";
+                  var filteredChild = children.filter(function (VNode) {
+                    return VNode.isComment === false && VNode.text !== " ";
+                  });
+                  if (filteredChild.length > 1)
+                    data.staticClass += " v-list-item__action--stack";
+                  return h("div", data, children);
+                },
+              });
 
-/***/ "./src/components/VCounter/VCounter.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VCounter/VCounter.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCounter_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCounter.sass */ "./src/components/VCounter/VCounter.sass");
-/* harmony import */ var _VCounter_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VCounter_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]).extend({
-  name: 'v-counter',
-  functional: true,
-  props: {
-    value: {
-      type: [Number, String],
-      default: ''
-    },
-    max: [Number, String]
-  },
-  render: function render(h, ctx) {
-    var props = ctx.props;
-    var max = parseInt(props.max, 10);
-    var value = parseInt(props.value, 10);
-    var content = max ? value + " / " + max : String(props.value);
-    var isGreater = max && value > max;
-    return h('div', {
-      staticClass: 'v-counter',
-      class: __assign({
-        'error--text': isGreater
-      }, Object(_mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["functionalThemeClasses"])(ctx))
-    }, content);
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VList/VListItemAvatar.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VList/VListItemAvatar.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VAvatar */ "./src/components/VAvatar/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Components
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
+                name: "v-list-item-avatar",
+                props: {
+                  horizontal: Boolean,
+                  size: {
+                    type: [Number, String],
+                    default: 40,
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {
+                          "v-list-item__avatar--horizontal": this.horizontal,
+                        },
+                        _VAvatar__WEBPACK_IMPORTED_MODULE_0__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-avatar--tile": this.tile || this.horizontal,
+                      }
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var render = _VAvatar__WEBPACK_IMPORTED_MODULE_0__[
+                    "default"
+                  ].options.render.call(this, h);
+                  render.data = render.data || {};
+                  render.data.staticClass += " v-list-item__avatar";
+                  return render;
+                },
+              });
 
-/***/ "./src/components/VCounter/index.ts":
-/*!******************************************!*\
-  !*** ./src/components/VCounter/index.ts ***!
-  \******************************************/
-/*! exports provided: VCounter, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            /***/
+          },
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCounter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VCounter */ "./src/components/VCounter/VCounter.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCounter", function() { return _VCounter__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+        /***/ "./src/components/VList/VListItemGroup.sass":
+          /*!**************************************************!*\
+  !*** ./src/components/VList/VListItemGroup.sass ***!
+  \**************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VList/VListItemGroup.ts":
+          /*!************************************************!*\
+  !*** ./src/components/VList/VListItemGroup.ts ***!
+  \************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VListItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VListItemGroup.sass */ "./src/components/VList/VListItemGroup.sass"
+              );
+            /* harmony import */ var _VListItemGroup_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VListItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__[
+                  "BaseItemGroup"
+                ],
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "v-list-item-group",
+                provide: function provide() {
+                  return {
+                    isInGroup: true,
+                    listItemGroup: this,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__[
+                          "BaseItemGroup"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-list-item-group": true,
+                      }
+                    );
+                  },
+                },
+                methods: {
+                  genData: function genData() {
+                    return this.setTextColor(
+                      this.color,
+                      __assign(
+                        __assign(
+                          {},
+                          _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__[
+                            "BaseItemGroup"
+                          ].options.methods.genData.call(this)
+                        ),
+                        {
+                          attrs: {
+                            role: "listbox",
+                          },
+                        }
+                      )
+                    );
+                  },
+                },
+              });
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (_VCounter__WEBPACK_IMPORTED_MODULE_0__["default"]);
+        /***/ "./src/components/VList/VListItemIcon.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VList/VListItemIcon.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            // Types
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "v-list-item-icon",
+                functional: true,
+                render: function render(h, _a) {
+                  var data = _a.data,
+                    children = _a.children;
+                  data.staticClass = (
+                    "v-list-item__icon " + (data.staticClass || "")
+                  ).trim();
+                  return h("div", data, children);
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VData/VData.ts":
-/*!***************************************!*\
-  !*** ./src/components/VData/VData.ts ***!
+        /***/ "./src/components/VList/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VList/index.ts ***!
   \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Helpers
-
-
+          /*! exports provided: VListItemActionText, VListItemContent, VListItemTitle, VListItemSubtitle, VList, VListGroup, VListItem, VListItemAction, VListItemAvatar, VListItemIcon, VListItemGroup, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemActionText",
+              function () {
+                return VListItemActionText;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemContent",
+              function () {
+                return VListItemContent;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemTitle",
+              function () {
+                return VListItemTitle;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemSubtitle",
+              function () {
+                return VListItemSubtitle;
+              }
+            );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _VList__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VList */ "./src/components/VList/VList.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VList",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _VListGroup__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VListGroup */ "./src/components/VList/VListGroup.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListGroup",
+              function () {
+                return _VListGroup__WEBPACK_IMPORTED_MODULE_2__["default"];
+              }
+            );
+
+            /* harmony import */ var _VListItem__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VListItem */ "./src/components/VList/VListItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItem",
+              function () {
+                return _VListItem__WEBPACK_IMPORTED_MODULE_3__["default"];
+              }
+            );
+
+            /* harmony import */ var _VListItemGroup__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VListItemGroup */ "./src/components/VList/VListItemGroup.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemGroup",
+              function () {
+                return _VListItemGroup__WEBPACK_IMPORTED_MODULE_4__["default"];
+              }
+            );
+
+            /* harmony import */ var _VListItemAction__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./VListItemAction */ "./src/components/VList/VListItemAction.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemAction",
+              function () {
+                return _VListItemAction__WEBPACK_IMPORTED_MODULE_5__["default"];
+              }
+            );
+
+            /* harmony import */ var _VListItemAvatar__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./VListItemAvatar */ "./src/components/VList/VListItemAvatar.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemAvatar",
+              function () {
+                return _VListItemAvatar__WEBPACK_IMPORTED_MODULE_6__["default"];
+              }
+            );
+
+            /* harmony import */ var _VListItemIcon__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ./VListItemIcon */ "./src/components/VList/VListItemIcon.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemIcon",
+              function () {
+                return _VListItemIcon__WEBPACK_IMPORTED_MODULE_7__["default"];
+              }
+            );
+
+            var VListItemActionText = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleFunctional"
+              ]
+            )("v-list-item__action-text", "span");
+            var VListItemContent = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleFunctional"
+              ]
+            )("v-list-item__content", "div");
+            var VListItemTitle = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleFunctional"
+              ]
+            )("v-list-item__title", "div");
+            var VListItemSubtitle = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleFunctional"
+              ]
+            )("v-list-item__subtitle", "div");
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VList: _VList__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VListGroup: _VListGroup__WEBPACK_IMPORTED_MODULE_2__["default"],
+                VListItem: _VListItem__WEBPACK_IMPORTED_MODULE_3__["default"],
+                VListItemAction:
+                  _VListItemAction__WEBPACK_IMPORTED_MODULE_5__["default"],
+                VListItemActionText: VListItemActionText,
+                VListItemAvatar:
+                  _VListItemAvatar__WEBPACK_IMPORTED_MODULE_6__["default"],
+                VListItemContent: VListItemContent,
+                VListItemGroup:
+                  _VListItemGroup__WEBPACK_IMPORTED_MODULE_4__["default"],
+                VListItemIcon:
+                  _VListItemIcon__WEBPACK_IMPORTED_MODULE_7__["default"],
+                VListItemSubtitle: VListItemSubtitle,
+                VListItemTitle: VListItemTitle,
+              },
+            };
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
-  name: 'v-data',
-  inheritAttrs: false,
-  props: {
-    items: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    options: {
-      type: Object,
-      default: function _default() {
-        return {};
-      }
-    },
-    sortBy: {
-      type: [String, Array],
-      default: function _default() {
-        return [];
-      }
-    },
-    sortDesc: {
-      type: [Boolean, Array],
-      default: function _default() {
-        return [];
-      }
-    },
-    customSort: {
-      type: Function,
-      default: _util_helpers__WEBPACK_IMPORTED_MODULE_0__["sortItems"]
-    },
-    mustSort: Boolean,
-    multiSort: Boolean,
-    page: {
-      type: Number,
-      default: 1
-    },
-    itemsPerPage: {
-      type: Number,
-      default: 10
-    },
-    groupBy: {
-      type: [String, Array],
-      default: function _default() {
-        return [];
-      }
-    },
-    groupDesc: {
-      type: [Boolean, Array],
-      default: function _default() {
-        return [];
-      }
-    },
-    customGroup: {
-      type: Function,
-      default: _util_helpers__WEBPACK_IMPORTED_MODULE_0__["groupItems"]
-    },
-    locale: {
-      type: String,
-      default: 'en-US'
-    },
-    disableSort: Boolean,
-    disablePagination: Boolean,
-    disableFiltering: Boolean,
-    search: String,
-    customFilter: {
-      type: Function,
-      default: _util_helpers__WEBPACK_IMPORTED_MODULE_0__["searchItems"]
-    },
-    serverItemsLength: {
-      type: Number,
-      default: -1
-    }
-  },
-  data: function data() {
-    var _a, _b;
-
-    var internalOptions = {
-      page: this.page,
-      itemsPerPage: this.itemsPerPage,
-      sortBy: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(this.sortBy),
-      sortDesc: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(this.sortDesc),
-      groupBy: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(this.groupBy),
-      groupDesc: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(this.groupDesc),
-      mustSort: this.mustSort,
-      multiSort: this.multiSort
-    };
-
-    if (this.options) {
-      internalOptions = Object.assign(internalOptions, this.options);
-    }
-
-    var sortBy = internalOptions.sortBy,
-        sortDesc = internalOptions.sortDesc,
-        groupBy = internalOptions.groupBy,
-        groupDesc = internalOptions.groupDesc;
-    var sortDiff = sortBy.length - sortDesc.length;
-    var groupDiff = groupBy.length - groupDesc.length;
-
-    if (sortDiff > 0) {
-      (_a = internalOptions.sortDesc).push.apply(_a, __spread(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["fillArray"])(sortDiff, false)));
-    }
-
-    if (groupDiff > 0) {
-      (_b = internalOptions.groupDesc).push.apply(_b, __spread(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["fillArray"])(groupDiff, false)));
-    }
-
-    return {
-      internalOptions: internalOptions
-    };
-  },
-  computed: {
-    itemsLength: function itemsLength() {
-      return this.serverItemsLength >= 0 ? this.serverItemsLength : this.filteredItems.length;
-    },
-    pageCount: function pageCount() {
-      return this.internalOptions.itemsPerPage <= 0 ? 1 : Math.ceil(this.itemsLength / this.internalOptions.itemsPerPage);
-    },
-    pageStart: function pageStart() {
-      if (this.internalOptions.itemsPerPage === -1 || !this.items.length) return 0;
-      return (this.internalOptions.page - 1) * this.internalOptions.itemsPerPage;
-    },
-    pageStop: function pageStop() {
-      if (this.internalOptions.itemsPerPage === -1) return this.itemsLength;
-      if (!this.items.length) return 0;
-      return Math.min(this.itemsLength, this.internalOptions.page * this.internalOptions.itemsPerPage);
-    },
-    isGrouped: function isGrouped() {
-      return !!this.internalOptions.groupBy.length;
-    },
-    pagination: function pagination() {
-      return {
-        page: this.internalOptions.page,
-        itemsPerPage: this.internalOptions.itemsPerPage,
-        pageStart: this.pageStart,
-        pageStop: this.pageStop,
-        pageCount: this.pageCount,
-        itemsLength: this.itemsLength
-      };
-    },
-    filteredItems: function filteredItems() {
-      var items = this.items.slice();
+        /***/ "./src/components/VMain/VMain.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VMain/VMain.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (!this.disableFiltering && this.serverItemsLength <= 0) {
-        items = this.customFilter(items, this.search);
-      }
+        /***/ "./src/components/VMain/VMain.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VMain/VMain.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VMain_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VMain.sass */ "./src/components/VMain/VMain.sass"
+              );
+            /* harmony import */ var _VMain_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VMain_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts"
+              );
+            // Styles
+            // Mixins
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_1__[
+                "default"
+              ].extend({
+                name: "v-main",
+                props: {
+                  tag: {
+                    type: String,
+                    default: "main",
+                  },
+                },
+                computed: {
+                  styles: function styles() {
+                    var _a = this.$vuetify.application,
+                      bar = _a.bar,
+                      top = _a.top,
+                      right = _a.right,
+                      footer = _a.footer,
+                      insetFooter = _a.insetFooter,
+                      bottom = _a.bottom,
+                      left = _a.left;
+                    return {
+                      paddingTop: top + bar + "px",
+                      paddingRight: right + "px",
+                      paddingBottom: footer + insetFooter + bottom + "px",
+                      paddingLeft: left + "px",
+                    };
+                  },
+                },
+                render: function render(h) {
+                  var data = {
+                    staticClass: "v-main",
+                    style: this.styles,
+                    ref: "main",
+                  };
+                  return h(this.tag, data, [
+                    h(
+                      "div",
+                      {
+                        staticClass: "v-main__wrap",
+                      },
+                      this.$slots.default
+                    ),
+                  ]);
+                },
+              });
 
-      return items;
-    },
-    computedItems: function computedItems() {
-      var items = this.filteredItems.slice();
+            /***/
+          },
 
-      if (!this.disableSort && this.serverItemsLength <= 0) {
-        items = this.sortItems(items);
-      }
+        /***/ "./src/components/VMain/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VMain/index.ts ***!
+  \***************************************/
+          /*! exports provided: VMain, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VMain__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VMain */ "./src/components/VMain/VMain.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMain",
+              function () {
+                return _VMain__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      if (!this.disablePagination && this.serverItemsLength <= 0) {
-        items = this.paginateItems(items);
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VMain__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      return items;
-    },
-    groupedItems: function groupedItems() {
-      return this.isGrouped ? this.groupItems(this.computedItems) : null;
-    },
-    scopedProps: function scopedProps() {
-      return {
-        sort: this.sort,
-        sortArray: this.sortArray,
-        group: this.group,
-        items: this.computedItems,
-        options: this.internalOptions,
-        updateOptions: this.updateOptions,
-        pagination: this.pagination,
-        groupedItems: this.groupedItems,
-        originalItemsLength: this.items.length
-      };
-    },
-    computedOptions: function computedOptions() {
-      return __assign({}, this.options);
-    }
-  },
-  watch: {
-    computedOptions: {
-      handler: function handler(options, old) {
-        if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(options, old)) return;
-        this.updateOptions(options);
-      },
-      deep: true,
-      immediate: true
-    },
-    internalOptions: {
-      handler: function handler(options, old) {
-        if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(options, old)) return;
-        this.$emit('update:options', options);
-      },
-      deep: true,
-      immediate: true
-    },
-    page: function page(_page) {
-      this.updateOptions({
-        page: _page
-      });
-    },
-    'internalOptions.page': function internalOptionsPage(page) {
-      this.$emit('update:page', page);
-    },
-    itemsPerPage: function itemsPerPage(_itemsPerPage) {
-      this.updateOptions({
-        itemsPerPage: _itemsPerPage
-      });
-    },
-    'internalOptions.itemsPerPage': function internalOptionsItemsPerPage(itemsPerPage) {
-      this.$emit('update:items-per-page', itemsPerPage);
-    },
-    sortBy: function sortBy(_sortBy) {
-      this.updateOptions({
-        sortBy: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(_sortBy)
-      });
-    },
-    'internalOptions.sortBy': function internalOptionsSortBy(sortBy, old) {
-      !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(sortBy, old) && this.$emit('update:sort-by', Array.isArray(this.sortBy) ? sortBy : sortBy[0]);
-    },
-    sortDesc: function sortDesc(_sortDesc) {
-      this.updateOptions({
-        sortDesc: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(_sortDesc)
-      });
-    },
-    'internalOptions.sortDesc': function internalOptionsSortDesc(sortDesc, old) {
-      !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(sortDesc, old) && this.$emit('update:sort-desc', Array.isArray(this.sortDesc) ? sortDesc : sortDesc[0]);
-    },
-    groupBy: function groupBy(_groupBy) {
-      this.updateOptions({
-        groupBy: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(_groupBy)
-      });
-    },
-    'internalOptions.groupBy': function internalOptionsGroupBy(groupBy, old) {
-      !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(groupBy, old) && this.$emit('update:group-by', Array.isArray(this.groupBy) ? groupBy : groupBy[0]);
-    },
-    groupDesc: function groupDesc(_groupDesc) {
-      this.updateOptions({
-        groupDesc: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(_groupDesc)
-      });
-    },
-    'internalOptions.groupDesc': function internalOptionsGroupDesc(groupDesc, old) {
-      !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(groupDesc, old) && this.$emit('update:group-desc', Array.isArray(this.groupDesc) ? groupDesc : groupDesc[0]);
-    },
-    multiSort: function multiSort(_multiSort) {
-      this.updateOptions({
-        multiSort: _multiSort
-      });
-    },
-    'internalOptions.multiSort': function internalOptionsMultiSort(multiSort) {
-      this.$emit('update:multi-sort', multiSort);
-    },
-    mustSort: function mustSort(_mustSort) {
-      this.updateOptions({
-        mustSort: _mustSort
-      });
-    },
-    'internalOptions.mustSort': function internalOptionsMustSort(mustSort) {
-      this.$emit('update:must-sort', mustSort);
-    },
-    pageCount: {
-      handler: function handler(pageCount) {
-        this.$emit('page-count', pageCount);
-      },
-      immediate: true
-    },
-    computedItems: {
-      handler: function handler(computedItems) {
-        this.$emit('current-items', computedItems);
-      },
-      immediate: true
-    },
-    pagination: {
-      handler: function handler(pagination, old) {
-        if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(pagination, old)) return;
-        this.$emit('pagination', this.pagination);
-      },
-      immediate: true
-    }
-  },
-  methods: {
-    toggle: function toggle(key, oldBy, oldDesc, page, mustSort, multiSort) {
-      var by = oldBy.slice();
-      var desc = oldDesc.slice();
-      var byIndex = by.findIndex(function (k) {
-        return k === key;
-      });
-
-      if (byIndex < 0) {
-        if (!multiSort) {
-          by = [];
-          desc = [];
-        }
+            /***/
+          },
 
-        by.push(key);
-        desc.push(false);
-      } else if (byIndex >= 0 && !desc[byIndex]) {
-        desc[byIndex] = true;
-      } else if (!mustSort) {
-        by.splice(byIndex, 1);
-        desc.splice(byIndex, 1);
-      } else {
-        desc[byIndex] = false;
-      } // Reset page to 1 if sortBy or sortDesc have changed
+        /***/ "./src/components/VMenu/VMenu.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VMenu/VMenu.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VMenu/VMenu.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VMenu/VMenu.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VMenu_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VMenu.sass */ "./src/components/VMenu/VMenu.sass"
+              );
+            /* harmony import */ var _VMenu_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VMenu_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VThemeProvider */ "./src/components/VThemeProvider/index.ts"
+              );
+            /* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/activatable */ "./src/mixins/activatable/index.ts"
+              );
+            /* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts"
+              );
+            /* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts"
+              );
+            /* harmony import */ var _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/detachable */ "./src/mixins/detachable/index.ts"
+              );
+            /* harmony import */ var _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/menuable */ "./src/mixins/menuable/index.ts"
+              );
+            /* harmony import */ var _mixins_returnable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/returnable */ "./src/mixins/returnable/index.ts"
+              );
+            /* harmony import */ var _mixins_roundable__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/roundable */ "./src/mixins/roundable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts"
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_13__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_14__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_15__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(by, oldBy) || !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["deepEqual"])(desc, oldDesc)) {
-        page = 1;
-      }
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-      return {
-        by: by,
-        desc: desc,
-        page: page
-      };
-    },
-    group: function group(key) {
-      var _a = this.toggle(key, this.internalOptions.groupBy, this.internalOptions.groupDesc, this.internalOptions.page, true, false),
-          groupBy = _a.by,
-          groupDesc = _a.desc,
-          page = _a.page;
-
-      this.updateOptions({
-        groupBy: groupBy,
-        groupDesc: groupDesc,
-        page: page
-      });
-    },
-    sort: function sort(key) {
-      if (Array.isArray(key)) return this.sortArray(key);
-
-      var _a = this.toggle(key, this.internalOptions.sortBy, this.internalOptions.sortDesc, this.internalOptions.page, this.internalOptions.mustSort, this.internalOptions.multiSort),
-          sortBy = _a.by,
-          sortDesc = _a.desc,
-          page = _a.page;
-
-      this.updateOptions({
-        sortBy: sortBy,
-        sortDesc: sortDesc,
-        page: page
-      });
-    },
-    sortArray: function sortArray(sortBy) {
-      var _this = this;
-
-      var sortDesc = sortBy.map(function (s) {
-        var i = _this.internalOptions.sortBy.findIndex(function (k) {
-          return k === s;
-        });
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-        return i > -1 ? _this.internalOptions.sortDesc[i] : false;
-      });
-      this.updateOptions({
-        sortBy: sortBy,
-        sortDesc: sortDesc
-      });
-    },
-    updateOptions: function updateOptions(options) {
-      this.internalOptions = __assign(__assign(__assign({}, this.internalOptions), options), {
-        page: this.serverItemsLength < 0 ? Math.max(1, Math.min(options.page || this.internalOptions.page, this.pageCount)) : options.page || this.internalOptions.page
-      });
-    },
-    sortItems: function sortItems(items) {
-      var sortBy = this.internalOptions.sortBy;
-      var sortDesc = this.internalOptions.sortDesc;
-
-      if (this.internalOptions.groupBy.length) {
-        sortBy = __spread(this.internalOptions.groupBy, sortBy);
-        sortDesc = __spread(this.internalOptions.groupDesc, sortDesc);
-      }
+                return ar;
+              };
 
-      return this.customSort(items, sortBy, sortDesc, this.locale);
-    },
-    groupItems: function groupItems(items) {
-      return this.customGroup(items, this.internalOptions.groupBy, this.internalOptions.groupDesc);
-    },
-    paginateItems: function paginateItems(items) {
-      // Make sure we don't try to display non-existant page if items suddenly change
-      // TODO: Could possibly move this to pageStart/pageStop?
-      if (this.serverItemsLength === -1 && items.length <= this.pageStart) {
-        this.internalOptions.page = Math.max(1, this.internalOptions.page - 1);
-      }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-      return items.slice(this.pageStart, this.pageStop);
-    }
-  },
-  render: function render() {
-    return this.$scopedSlots.default && this.$scopedSlots.default(this.scopedProps);
-  }
-}));
+                return ar;
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_13__["default"]
+            )(
+              _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__["default"],
+              _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__["default"],
+              _mixins_returnable__WEBPACK_IMPORTED_MODULE_7__["default"],
+              _mixins_roundable__WEBPACK_IMPORTED_MODULE_8__["default"],
+              _mixins_toggleable__WEBPACK_IMPORTED_MODULE_9__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-menu",
+                directives: {
+                  ClickOutside:
+                    _directives_click_outside__WEBPACK_IMPORTED_MODULE_11__[
+                      "default"
+                    ],
+                  Resize:
+                    _directives_resize__WEBPACK_IMPORTED_MODULE_12__["default"],
+                },
+                provide: function provide() {
+                  return {
+                    isInMenu: true,
+                    // Pass theme through to default slot
+                    theme: this.theme,
+                  };
+                },
+                props: {
+                  auto: Boolean,
+                  closeOnClick: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  closeOnContentClick: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  disabled: Boolean,
+                  disableKeys: Boolean,
+                  maxHeight: {
+                    type: [Number, String],
+                    default: "auto",
+                  },
+                  offsetX: Boolean,
+                  offsetY: Boolean,
+                  openOnClick: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  openOnHover: Boolean,
+                  origin: {
+                    type: String,
+                    default: "top left",
+                  },
+                  transition: {
+                    type: [Boolean, String],
+                    default: "v-menu-transition",
+                  },
+                },
+                data: function data() {
+                  return {
+                    calculatedTopAuto: 0,
+                    defaultOffset: 8,
+                    hasJustFocused: false,
+                    listIndex: -1,
+                    resizeTimeout: 0,
+                    selectedIndex: null,
+                    tiles: [],
+                  };
+                },
+                computed: {
+                  activeTile: function activeTile() {
+                    return this.tiles[this.listIndex];
+                  },
+                  calculatedLeft: function calculatedLeft() {
+                    var menuWidth = Math.max(
+                      this.dimensions.content.width,
+                      parseFloat(this.calculatedMinWidth)
+                    );
+                    if (!this.auto) return this.calcLeft(menuWidth) || "0";
+                    return (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_15__[
+                          "convertToUnit"
+                        ]
+                      )(this.calcXOverflow(this.calcLeftAuto(), menuWidth)) ||
+                      "0"
+                    );
+                  },
+                  calculatedMaxHeight: function calculatedMaxHeight() {
+                    var height = this.auto
+                      ? "200px"
+                      : Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_15__[
+                            "convertToUnit"
+                          ]
+                        )(this.maxHeight);
+                    return height || "0";
+                  },
+                  calculatedMaxWidth: function calculatedMaxWidth() {
+                    return (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_15__[
+                          "convertToUnit"
+                        ]
+                      )(this.maxWidth) || "0"
+                    );
+                  },
+                  calculatedMinWidth: function calculatedMinWidth() {
+                    if (this.minWidth) {
+                      return (
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_15__[
+                            "convertToUnit"
+                          ]
+                        )(this.minWidth) || "0"
+                      );
+                    }
+
+                    var minWidth = Math.min(
+                      this.dimensions.activator.width +
+                        Number(this.nudgeWidth) +
+                        (this.auto ? 16 : 0),
+                      Math.max(this.pageWidth - 24, 0)
+                    );
+                    var calculatedMaxWidth = isNaN(
+                      parseInt(this.calculatedMaxWidth)
+                    )
+                      ? minWidth
+                      : parseInt(this.calculatedMaxWidth);
+                    return (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_15__[
+                          "convertToUnit"
+                        ]
+                      )(Math.min(calculatedMaxWidth, minWidth)) || "0"
+                    );
+                  },
+                  calculatedTop: function calculatedTop() {
+                    var top = !this.auto
+                      ? this.calcTop()
+                      : Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_15__[
+                            "convertToUnit"
+                          ]
+                        )(this.calcYOverflow(this.calculatedTopAuto));
+                    return top || "0";
+                  },
+                  hasClickableTiles: function hasClickableTiles() {
+                    return Boolean(
+                      this.tiles.find(function (tile) {
+                        return tile.tabIndex > -1;
+                      })
+                    );
+                  },
+                  styles: function styles() {
+                    return {
+                      maxHeight: this.calculatedMaxHeight,
+                      minWidth: this.calculatedMinWidth,
+                      maxWidth: this.calculatedMaxWidth,
+                      top: this.calculatedTop,
+                      left: this.calculatedLeft,
+                      transformOrigin: this.origin,
+                      zIndex: this.zIndex || this.activeZIndex,
+                    };
+                  },
+                },
+                watch: {
+                  isActive: function isActive(val) {
+                    if (!val) this.listIndex = -1;
+                  },
+                  isContentActive: function isContentActive(val) {
+                    this.hasJustFocused = val;
+                  },
+                  listIndex: function listIndex(next, prev) {
+                    if (next in this.tiles) {
+                      var tile = this.tiles[next];
+                      tile.classList.add("v-list-item--highlighted");
+                      this.$refs.content.scrollTop =
+                        tile.offsetTop - tile.clientHeight;
+                    }
+
+                    prev in this.tiles &&
+                      this.tiles[prev].classList.remove(
+                        "v-list-item--highlighted"
+                      );
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("full-width")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_14__["removed"]
+                    )("full-width", this);
+                  }
+                },
+                mounted: function mounted() {
+                  this.isActive && this.callActivate();
+                },
+                methods: {
+                  activate: function activate() {
+                    var _this = this; // Update coordinates and dimensions of menu
+                    // and its activator
+
+                    this.updateDimensions(); // Start the transition
+
+                    requestAnimationFrame(function () {
+                      // Once transitioning, calculate scroll and top position
+                      _this.startTransition().then(function () {
+                        if (_this.$refs.content) {
+                          _this.calculatedTopAuto = _this.calcTopAuto();
+                          _this.auto &&
+                            (_this.$refs.content.scrollTop =
+                              _this.calcScrollPosition());
+                        }
+                      });
+                    });
+                  },
+                  calcScrollPosition: function calcScrollPosition() {
+                    var $el = this.$refs.content;
+                    var activeTile = $el.querySelector(".v-list-item--active");
+                    var maxScrollTop = $el.scrollHeight - $el.offsetHeight;
+                    return activeTile
+                      ? Math.min(
+                          maxScrollTop,
+                          Math.max(
+                            0,
+                            activeTile.offsetTop -
+                              $el.offsetHeight / 2 +
+                              activeTile.offsetHeight / 2
+                          )
+                        )
+                      : $el.scrollTop;
+                  },
+                  calcLeftAuto: function calcLeftAuto() {
+                    return parseInt(
+                      this.dimensions.activator.left - this.defaultOffset * 2
+                    );
+                  },
+                  calcTopAuto: function calcTopAuto() {
+                    var $el = this.$refs.content;
+                    var activeTile = $el.querySelector(".v-list-item--active");
+
+                    if (!activeTile) {
+                      this.selectedIndex = null;
+                    }
+
+                    if (this.offsetY || !activeTile) {
+                      return this.computedTop;
+                    }
+
+                    this.selectedIndex = Array.from(this.tiles).indexOf(
+                      activeTile
+                    );
+                    var tileDistanceFromMenuTop =
+                      activeTile.offsetTop - this.calcScrollPosition();
+                    var firstTileOffsetTop =
+                      $el.querySelector(".v-list-item").offsetTop;
+                    return (
+                      this.computedTop -
+                      tileDistanceFromMenuTop -
+                      firstTileOffsetTop -
+                      1
+                    );
+                  },
+                  changeListIndex: function changeListIndex(e) {
+                    // For infinite scroll and autocomplete, re-evaluate children
+                    this.getTiles();
+
+                    if (!this.isActive || !this.hasClickableTiles) {
+                      return;
+                    } else if (
+                      e.keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"]
+                        .tab
+                    ) {
+                      this.isActive = false;
+                      return;
+                    } else if (
+                      e.keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"]
+                        .down
+                    ) {
+                      this.nextTile();
+                    } else if (
+                      e.keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].up
+                    ) {
+                      this.prevTile();
+                    } else if (
+                      e.keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"]
+                          .enter &&
+                      this.listIndex !== -1
+                    ) {
+                      this.tiles[this.listIndex].click();
+                    } else {
+                      return;
+                    } // One of the conditions was met, prevent default action (#2988)
+
+                    e.preventDefault();
+                  },
+                  closeConditional: function closeConditional(e) {
+                    var target = e.target;
+                    return (
+                      this.isActive &&
+                      !this._isDestroyed &&
+                      this.closeOnClick &&
+                      !this.$refs.content.contains(target)
+                    );
+                  },
+                  genActivatorAttributes: function genActivatorAttributes() {
+                    var attributes =
+                      _mixins_activatable__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genActivatorAttributes.call(this);
+
+                    if (this.activeTile && this.activeTile.id) {
+                      return __assign(__assign({}, attributes), {
+                        "aria-activedescendant": this.activeTile.id,
+                      });
+                    }
+
+                    return attributes;
+                  },
+                  genActivatorListeners: function genActivatorListeners() {
+                    var listeners =
+                      _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__[
+                        "default"
+                      ].options.methods.genActivatorListeners.call(this);
+
+                    if (!this.disableKeys) {
+                      listeners.keydown = this.onKeyDown;
+                    }
+
+                    return listeners;
+                  },
+                  genTransition: function genTransition() {
+                    var content = this.genContent();
+                    if (!this.transition) return content;
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.transition,
+                        },
+                      },
+                      [content]
+                    );
+                  },
+                  genDirectives: function genDirectives() {
+                    var _this = this;
+
+                    var directives = [
+                      {
+                        name: "show",
+                        value: this.isContentActive,
+                      },
+                    ]; // Do not add click outside for hover menu
+
+                    if (!this.openOnHover && this.closeOnClick) {
+                      directives.push({
+                        name: "click-outside",
+                        value: {
+                          handler: function handler() {
+                            _this.isActive = false;
+                          },
+                          closeConditional: this.closeConditional,
+                          include: function include() {
+                            return __spread(
+                              [_this.$el],
+                              _this.getOpenDependentElements()
+                            );
+                          },
+                        },
+                      });
+                    }
+
+                    return directives;
+                  },
+                  genContent: function genContent() {
+                    var _a;
+
+                    var _this = this;
+
+                    var options = {
+                      attrs: __assign(__assign({}, this.getScopeIdAttrs()), {
+                        role: "role" in this.$attrs ? this.$attrs.role : "menu",
+                      }),
+                      staticClass: "v-menu__content",
+                      class: __assign(
+                        __assign(
+                          __assign({}, this.rootThemeClasses),
+                          this.roundedClasses
+                        ),
+                        ((_a = {
+                          "v-menu__content--auto": this.auto,
+                          "v-menu__content--fixed": this.activatorFixed,
+                          menuable__content__active: this.isActive,
+                        }),
+                        (_a[this.contentClass.trim()] = true),
+                        _a)
+                      ),
+                      style: this.styles,
+                      directives: this.genDirectives(),
+                      ref: "content",
+                      on: {
+                        click: function click(e) {
+                          var target = e.target;
+                          if (target.getAttribute("disabled")) return;
+                          if (_this.closeOnContentClick) _this.isActive = false;
+                        },
+                        keydown: this.onKeyDown,
+                      },
+                    };
+
+                    if (this.$listeners.scroll) {
+                      options.on = options.on || {};
+                      options.on.scroll = this.$listeners.scroll;
+                    }
+
+                    if (!this.disabled && this.openOnHover) {
+                      options.on = options.on || {};
+                      options.on.mouseenter = this.mouseEnterHandler;
+                    }
+
+                    if (this.openOnHover) {
+                      options.on = options.on || {};
+                      options.on.mouseleave = this.mouseLeaveHandler;
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      options,
+                      this.getContentSlot()
+                    );
+                  },
+                  getTiles: function getTiles() {
+                    if (!this.$refs.content) return;
+                    this.tiles = Array.from(
+                      this.$refs.content.querySelectorAll(".v-list-item")
+                    );
+                  },
+                  mouseEnterHandler: function mouseEnterHandler() {
+                    var _this = this;
+
+                    this.runDelay("open", function () {
+                      if (_this.hasJustFocused) return;
+                      _this.hasJustFocused = true;
+                    });
+                  },
+                  mouseLeaveHandler: function mouseLeaveHandler(e) {
+                    var _this = this; // Prevent accidental re-activation
+
+                    this.runDelay("close", function () {
+                      if (_this.$refs.content.contains(e.relatedTarget)) return;
+                      requestAnimationFrame(function () {
+                        _this.isActive = false;
+
+                        _this.callDeactivate();
+                      });
+                    });
+                  },
+                  nextTile: function nextTile() {
+                    var tile = this.tiles[this.listIndex + 1];
+
+                    if (!tile) {
+                      if (!this.tiles.length) return;
+                      this.listIndex = -1;
+                      this.nextTile();
+                      return;
+                    }
+
+                    this.listIndex++;
+                    if (tile.tabIndex === -1) this.nextTile();
+                  },
+                  prevTile: function prevTile() {
+                    var tile = this.tiles[this.listIndex - 1];
+
+                    if (!tile) {
+                      if (!this.tiles.length) return;
+                      this.listIndex = this.tiles.length;
+                      this.prevTile();
+                      return;
+                    }
+
+                    this.listIndex--;
+                    if (tile.tabIndex === -1) this.prevTile();
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    var _this = this;
+
+                    if (
+                      e.keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"]
+                        .esc
+                    ) {
+                      // Wait for dependent elements to close first
+                      setTimeout(function () {
+                        _this.isActive = false;
+                      });
+                      var activator_1 = this.getActivator();
+                      this.$nextTick(function () {
+                        return activator_1 && activator_1.focus();
+                      });
+                    } else if (
+                      !this.isActive &&
+                      [
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"]
+                          .up,
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"]
+                          .down,
+                      ].includes(e.keyCode)
+                    ) {
+                      this.isActive = true;
+                    } // Allow for isActive watcher to generate tile list
+
+                    this.$nextTick(function () {
+                      return _this.changeListIndex(e);
+                    });
+                  },
+                  onResize: function onResize() {
+                    if (!this.isActive) return; // Account for screen resize
+                    // and orientation change
+                    // eslint-disable-next-line no-unused-expressions
+
+                    this.$refs.content.offsetWidth;
+                    this.updateDimensions(); // When resizing to a smaller width
+                    // content width is evaluated before
+                    // the new activator width has been
+                    // set, causing it to not size properly
+                    // hacky but will revisit in the future
+
+                    clearTimeout(this.resizeTimeout);
+                    this.resizeTimeout = window.setTimeout(
+                      this.updateDimensions,
+                      100
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var data = {
+                    staticClass: "v-menu",
+                    class: {
+                      "v-menu--attached":
+                        this.attach === "" ||
+                        this.attach === true ||
+                        this.attach === "attach",
+                    },
+                    directives: [
+                      {
+                        arg: "500",
+                        name: "resize",
+                        value: this.onResize,
+                      },
+                    ],
+                  };
+                  return h("div", data, [
+                    !this.activator && this.genActivator(),
+                    this.showLazyContent(function () {
+                      return [
+                        _this.$createElement(
+                          _VThemeProvider__WEBPACK_IMPORTED_MODULE_1__[
+                            "VThemeProvider"
+                          ],
+                          {
+                            props: {
+                              root: true,
+                              light: _this.light,
+                              dark: _this.dark,
+                            },
+                          },
+                          [_this.genTransition()]
+                        ),
+                      ];
+                    }),
+                  ]);
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VData/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VData/index.ts ***!
+        /***/ "./src/components/VMenu/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VMenu/index.ts ***!
   \***************************************/
-/*! exports provided: VData, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+          /*! exports provided: VMenu, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VMenu */ "./src/components/VMenu/VMenu.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMenu",
+              function () {
+                return _VMenu__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VData */ "./src/components/VData/VData.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VData", function() { return _VData__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VMenu__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VMessages/VMessages.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VMessages/VMessages.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (_VData__WEBPACK_IMPORTED_MODULE_0__["default"]);
+        /***/ "./src/components/VMessages/VMessages.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VMessages/VMessages.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VMessages_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VMessages.sass */ "./src/components/VMessages/VMessages.sass"
+              );
+            /* harmony import */ var _VMessages_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VMessages_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // Styles
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "v-messages",
+                props: {
+                  value: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                },
+                methods: {
+                  genChildren: function genChildren() {
+                    return this.$createElement(
+                      "transition-group",
+                      {
+                        staticClass: "v-messages__wrapper",
+                        attrs: {
+                          name: "message-transition",
+                          tag: "div",
+                        },
+                      },
+                      this.value.map(this.genMessage)
+                    );
+                  },
+                  genMessage: function genMessage(message, key) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-messages__message",
+                        key: key,
+                      },
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"]
+                      )(this, "default", {
+                        message: message,
+                        key: key,
+                      }) || [message]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    this.setTextColor(this.color, {
+                      staticClass: "v-messages",
+                      class: this.themeClasses,
+                    }),
+                    [this.genChildren()]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataIterator/VDataFooter.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VDataIterator/VDataFooter.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VMessages/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VMessages/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VMessages, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VMessages__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VMessages */ "./src/components/VMessages/VMessages.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMessages",
+              function () {
+                return _VMessages__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-// extracted by mini-css-extract-plugin
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VMessages__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataIterator/VDataFooter.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VDataIterator/VDataFooter.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDataFooter_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDataFooter.sass */ "./src/components/VDataIterator/VDataFooter.sass");
-/* harmony import */ var _VDataFooter_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDataFooter_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_4__);
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
- // Components
-
-
-
- // Types
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_4___default.a.extend({
-  name: 'v-data-footer',
-  props: {
-    options: {
-      type: Object,
-      required: true
-    },
-    pagination: {
-      type: Object,
-      required: true
-    },
-    itemsPerPageOptions: {
-      type: Array,
-      default: function _default() {
-        return [5, 10, 15, -1];
-      }
-    },
-    prevIcon: {
-      type: String,
-      default: '$prev'
-    },
-    nextIcon: {
-      type: String,
-      default: '$next'
-    },
-    firstIcon: {
-      type: String,
-      default: '$first'
-    },
-    lastIcon: {
-      type: String,
-      default: '$last'
-    },
-    itemsPerPageText: {
-      type: String,
-      default: '$vuetify.dataFooter.itemsPerPageText'
-    },
-    itemsPerPageAllText: {
-      type: String,
-      default: '$vuetify.dataFooter.itemsPerPageAll'
-    },
-    showFirstLastPage: Boolean,
-    showCurrentPage: Boolean,
-    disablePagination: Boolean,
-    disableItemsPerPage: Boolean,
-    pageText: {
-      type: String,
-      default: '$vuetify.dataFooter.pageText'
-    }
-  },
-  computed: {
-    disableNextPageIcon: function disableNextPageIcon() {
-      return this.options.itemsPerPage <= 0 || this.options.page * this.options.itemsPerPage >= this.pagination.itemsLength || this.pagination.pageStop < 0;
-    },
-    computedDataItemsPerPageOptions: function computedDataItemsPerPageOptions() {
-      var _this = this;
-
-      return this.itemsPerPageOptions.map(function (option) {
-        if (_typeof(option) === 'object') return option;else return _this.genDataItemsPerPageOption(option);
-      });
-    }
-  },
-  methods: {
-    updateOptions: function updateOptions(obj) {
-      this.$emit('update:options', Object.assign({}, this.options, obj));
-    },
-    onFirstPage: function onFirstPage() {
-      this.updateOptions({
-        page: 1
-      });
-    },
-    onPreviousPage: function onPreviousPage() {
-      this.updateOptions({
-        page: this.options.page - 1
-      });
-    },
-    onNextPage: function onNextPage() {
-      this.updateOptions({
-        page: this.options.page + 1
-      });
-    },
-    onLastPage: function onLastPage() {
-      this.updateOptions({
-        page: this.pagination.pageCount
-      });
-    },
-    onChangeItemsPerPage: function onChangeItemsPerPage(itemsPerPage) {
-      this.updateOptions({
-        itemsPerPage: itemsPerPage,
-        page: 1
-      });
-    },
-    genDataItemsPerPageOption: function genDataItemsPerPageOption(option) {
-      return {
-        text: option === -1 ? this.$vuetify.lang.t(this.itemsPerPageAllText) : String(option),
-        value: option
-      };
-    },
-    genItemsPerPageSelect: function genItemsPerPageSelect() {
-      var value = this.options.itemsPerPage;
-      var computedIPPO = this.computedDataItemsPerPageOptions;
-      if (computedIPPO.length <= 1) return null;
-      if (!computedIPPO.find(function (ippo) {
-        return ippo.value === value;
-      })) value = computedIPPO[0];
-      return this.$createElement('div', {
-        staticClass: 'v-data-footer__select'
-      }, [this.$vuetify.lang.t(this.itemsPerPageText), this.$createElement(_VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        attrs: {
-          'aria-label': this.$vuetify.lang.t(this.itemsPerPageText)
-        },
-        props: {
-          disabled: this.disableItemsPerPage,
-          items: computedIPPO,
-          value: value,
-          hideDetails: true,
-          auto: true,
-          minWidth: '75px'
-        },
-        on: {
-          input: this.onChangeItemsPerPage
-        }
-      })]);
-    },
-    genPaginationInfo: function genPaginationInfo() {
-      var children = ['–'];
-      var itemsLength = this.pagination.itemsLength;
-      var pageStart = this.pagination.pageStart;
-      var pageStop = this.pagination.pageStop;
-
-      if (this.pagination.itemsLength && this.pagination.itemsPerPage) {
-        pageStart = this.pagination.pageStart + 1;
-        pageStop = itemsLength < this.pagination.pageStop || this.pagination.pageStop < 0 ? itemsLength : this.pagination.pageStop;
-        children = this.$scopedSlots['page-text'] ? [this.$scopedSlots['page-text']({
-          pageStart: pageStart,
-          pageStop: pageStop,
-          itemsLength: itemsLength
-        })] : [this.$vuetify.lang.t(this.pageText, pageStart, pageStop, itemsLength)];
-      } else if (this.$scopedSlots['page-text']) {
-        children = [this.$scopedSlots['page-text']({
-          pageStart: pageStart,
-          pageStop: pageStop,
-          itemsLength: itemsLength
-        })];
-      }
+        /***/ "./src/components/VNavigationDrawer/VNavigationDrawer.sass":
+          /*!*****************************************************************!*\
+  !*** ./src/components/VNavigationDrawer/VNavigationDrawer.sass ***!
+  \*****************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      return this.$createElement('div', {
-        class: 'v-data-footer__pagination'
-      }, children);
-    },
-    genIcon: function genIcon(click, disabled, label, icon) {
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        props: {
-          disabled: disabled || this.disablePagination,
-          icon: true,
-          text: true
-        },
-        on: {
-          click: click
-        },
-        attrs: {
-          'aria-label': label
-        }
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_2__["default"], icon)]);
-    },
-    genIcons: function genIcons() {
-      var before = [];
-      var after = [];
-      before.push(this.genIcon(this.onPreviousPage, this.options.page === 1, this.$vuetify.lang.t('$vuetify.dataFooter.prevPage'), this.$vuetify.rtl ? this.nextIcon : this.prevIcon));
-      after.push(this.genIcon(this.onNextPage, this.disableNextPageIcon, this.$vuetify.lang.t('$vuetify.dataFooter.nextPage'), this.$vuetify.rtl ? this.prevIcon : this.nextIcon));
-
-      if (this.showFirstLastPage) {
-        before.unshift(this.genIcon(this.onFirstPage, this.options.page === 1, this.$vuetify.lang.t('$vuetify.dataFooter.firstPage'), this.$vuetify.rtl ? this.lastIcon : this.firstIcon));
-        after.push(this.genIcon(this.onLastPage, this.options.page >= this.pagination.pageCount || this.options.itemsPerPage === -1, this.$vuetify.lang.t('$vuetify.dataFooter.lastPage'), this.$vuetify.rtl ? this.firstIcon : this.lastIcon));
-      }
+        /***/ "./src/components/VNavigationDrawer/VNavigationDrawer.ts":
+          /*!***************************************************************!*\
+  !*** ./src/components/VNavigationDrawer/VNavigationDrawer.ts ***!
+  \***************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VNavigationDrawer_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VNavigationDrawer.sass */ "./src/components/VNavigationDrawer/VNavigationDrawer.sass"
+              );
+            /* harmony import */ var _VNavigationDrawer_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VNavigationDrawer_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VImg_VImg__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VImg/VImg */ "./src/components/VImg/VImg.ts"
+              );
+            /* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts"
+              );
+            /* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts"
+              );
+            /* harmony import */ var _mixins_overlayable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/overlayable */ "./src/mixins/overlayable/index.ts"
+              );
+            /* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts"
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../directives/touch */ "./src/directives/touch/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_13__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_13__["default"]
+            )(
+              Object(
+                _mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              )("left", [
+                "isActive",
+                "isMobile",
+                "miniVariant",
+                "expandOnHover",
+                "permanent",
+                "right",
+                "temporary",
+                "width",
+              ]),
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"],
+              _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_overlayable__WEBPACK_IMPORTED_MODULE_6__["default"],
+              _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_7__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-navigation-drawer",
+                directives: {
+                  ClickOutside:
+                    _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__[
+                      "default"
+                    ],
+                  Resize:
+                    _directives_resize__WEBPACK_IMPORTED_MODULE_10__["default"],
+                  Touch:
+                    _directives_touch__WEBPACK_IMPORTED_MODULE_11__["default"],
+                },
+                provide: function provide() {
+                  return {
+                    isInNav: this.tag === "nav",
+                  };
+                },
+                props: {
+                  bottom: Boolean,
+                  clipped: Boolean,
+                  disableResizeWatcher: Boolean,
+                  disableRouteWatcher: Boolean,
+                  expandOnHover: Boolean,
+                  floating: Boolean,
+                  height: {
+                    type: [Number, String],
+                    default: function _default() {
+                      return this.app ? "100vh" : "100%";
+                    },
+                  },
+                  miniVariant: Boolean,
+                  miniVariantWidth: {
+                    type: [Number, String],
+                    default: 56,
+                  },
+                  permanent: Boolean,
+                  right: Boolean,
+                  src: {
+                    type: [String, Object],
+                    default: "",
+                  },
+                  stateless: Boolean,
+                  tag: {
+                    type: String,
+                    default: function _default() {
+                      return this.app ? "nav" : "aside";
+                    },
+                  },
+                  temporary: Boolean,
+                  touchless: Boolean,
+                  width: {
+                    type: [Number, String],
+                    default: 256,
+                  },
+                  value: null,
+                },
+                data: function data() {
+                  return {
+                    isMouseover: false,
+                    touchArea: {
+                      left: 0,
+                      right: 0,
+                    },
+                    stackMinZIndex: 6,
+                  };
+                },
+                computed: {
+                  /**
+                   * Used for setting an app value from a dynamic
+                   * property. Called from applicationable.js
+                   */
+                  applicationProperty: function applicationProperty() {
+                    return this.right ? "right" : "left";
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-navigation-drawer": true,
+                        "v-navigation-drawer--absolute": this.absolute,
+                        "v-navigation-drawer--bottom": this.bottom,
+                        "v-navigation-drawer--clipped": this.clipped,
+                        "v-navigation-drawer--close": !this.isActive,
+                        "v-navigation-drawer--fixed":
+                          !this.absolute && (this.app || this.fixed),
+                        "v-navigation-drawer--floating": this.floating,
+                        "v-navigation-drawer--is-mobile": this.isMobile,
+                        "v-navigation-drawer--is-mouseover": this.isMouseover,
+                        "v-navigation-drawer--mini-variant": this.isMiniVariant,
+                        "v-navigation-drawer--custom-mini-variant":
+                          Number(this.miniVariantWidth) !== 56,
+                        "v-navigation-drawer--open": this.isActive,
+                        "v-navigation-drawer--open-on-hover":
+                          this.expandOnHover,
+                        "v-navigation-drawer--right": this.right,
+                        "v-navigation-drawer--temporary": this.temporary,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  computedMaxHeight: function computedMaxHeight() {
+                    if (!this.hasApp) return null;
+                    var computedMaxHeight =
+                      this.$vuetify.application.bottom +
+                      this.$vuetify.application.footer +
+                      this.$vuetify.application.bar;
+                    if (!this.clipped) return computedMaxHeight;
+                    return computedMaxHeight + this.$vuetify.application.top;
+                  },
+                  computedTop: function computedTop() {
+                    if (!this.hasApp) return 0;
+                    var computedTop = this.$vuetify.application.bar;
+                    computedTop += this.clipped
+                      ? this.$vuetify.application.top
+                      : 0;
+                    return computedTop;
+                  },
+                  computedTransform: function computedTransform() {
+                    if (this.isActive) return 0;
+                    if (this.isBottom) return 100;
+                    return this.right ? 100 : -100;
+                  },
+                  computedWidth: function computedWidth() {
+                    return this.isMiniVariant
+                      ? this.miniVariantWidth
+                      : this.width;
+                  },
+                  hasApp: function hasApp() {
+                    return this.app && !this.isMobile && !this.temporary;
+                  },
+                  isBottom: function isBottom() {
+                    return this.bottom && this.isMobile;
+                  },
+                  isMiniVariant: function isMiniVariant() {
+                    return (
+                      (!this.expandOnHover && this.miniVariant) ||
+                      (this.expandOnHover && !this.isMouseover)
+                    );
+                  },
+                  isMobile: function isMobile() {
+                    return (
+                      !this.stateless &&
+                      !this.permanent &&
+                      _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__[
+                        "default"
+                      ].options.computed.isMobile.call(this)
+                    );
+                  },
+                  reactsToClick: function reactsToClick() {
+                    return (
+                      !this.stateless &&
+                      !this.permanent &&
+                      (this.isMobile || this.temporary)
+                    );
+                  },
+                  reactsToMobile: function reactsToMobile() {
+                    return (
+                      this.app &&
+                      !this.disableResizeWatcher &&
+                      !this.permanent &&
+                      !this.stateless &&
+                      !this.temporary
+                    );
+                  },
+                  reactsToResize: function reactsToResize() {
+                    return !this.disableResizeWatcher && !this.stateless;
+                  },
+                  reactsToRoute: function reactsToRoute() {
+                    return (
+                      !this.disableRouteWatcher &&
+                      !this.stateless &&
+                      (this.temporary || this.isMobile)
+                    );
+                  },
+                  showOverlay: function showOverlay() {
+                    return (
+                      !this.hideOverlay &&
+                      this.isActive &&
+                      (this.isMobile || this.temporary)
+                    );
+                  },
+                  styles: function styles() {
+                    var translate = this.isBottom ? "translateY" : "translateX";
+                    return {
+                      height: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                          "convertToUnit"
+                        ]
+                      )(this.height),
+                      top: !this.isBottom
+                        ? Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                              "convertToUnit"
+                            ]
+                          )(this.computedTop)
+                        : "auto",
+                      maxHeight:
+                        this.computedMaxHeight != null
+                          ? "calc(100% - " +
+                            Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                                "convertToUnit"
+                              ]
+                            )(this.computedMaxHeight) +
+                            ")"
+                          : undefined,
+                      transform:
+                        translate +
+                        "(" +
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                            "convertToUnit"
+                          ]
+                        )(this.computedTransform, "%") +
+                        ")",
+                      width: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                          "convertToUnit"
+                        ]
+                      )(this.computedWidth),
+                    };
+                  },
+                },
+                watch: {
+                  $route: "onRouteChange",
+                  isActive: function isActive(val) {
+                    this.$emit("input", val);
+                  },
+
+                  /**
+                   * When mobile changes, adjust the active state
+                   * only when there has been a previous value
+                   */
+                  isMobile: function isMobile(val, prev) {
+                    !val &&
+                      this.isActive &&
+                      !this.temporary &&
+                      this.removeOverlay();
+                    if (
+                      prev == null ||
+                      !this.reactsToResize ||
+                      !this.reactsToMobile
+                    )
+                      return;
+                    this.isActive = !val;
+                  },
+                  permanent: function permanent(val) {
+                    // If enabling prop enable the drawer
+                    if (val) this.isActive = true;
+                  },
+                  showOverlay: function showOverlay(val) {
+                    if (val) this.genOverlay();
+                    else this.removeOverlay();
+                  },
+                  value: function value(val) {
+                    if (this.permanent) return;
+
+                    if (val == null) {
+                      this.init();
+                      return;
+                    }
+
+                    if (val !== this.isActive) this.isActive = val;
+                  },
+                  expandOnHover: "updateMiniVariant",
+                  isMouseover: function isMouseover(val) {
+                    this.updateMiniVariant(!val);
+                  },
+                },
+                beforeMount: function beforeMount() {
+                  this.init();
+                },
+                methods: {
+                  calculateTouchArea: function calculateTouchArea() {
+                    var parent = this.$el.parentNode;
+                    if (!parent) return;
+                    var parentRect = parent.getBoundingClientRect();
+                    this.touchArea = {
+                      left: parentRect.left + 50,
+                      right: parentRect.right - 50,
+                    };
+                  },
+                  closeConditional: function closeConditional() {
+                    return (
+                      this.isActive && !this._isDestroyed && this.reactsToClick
+                    );
+                  },
+                  genAppend: function genAppend() {
+                    return this.genPosition("append");
+                  },
+                  genBackground: function genBackground() {
+                    var props = {
+                      height: "100%",
+                      width: "100%",
+                      src: this.src,
+                    };
+                    var image = this.$scopedSlots.img
+                      ? this.$scopedSlots.img(props)
+                      : this.$createElement(
+                          _VImg_VImg__WEBPACK_IMPORTED_MODULE_1__["default"],
+                          {
+                            props: props,
+                          }
+                        );
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-navigation-drawer__image",
+                      },
+                      [image]
+                    );
+                  },
+                  genDirectives: function genDirectives() {
+                    var _this = this;
+
+                    var directives = [
+                      {
+                        name: "click-outside",
+                        value: {
+                          handler: function handler() {
+                            _this.isActive = false;
+                          },
+                          closeConditional: this.closeConditional,
+                          include: this.getOpenDependentElements,
+                        },
+                      },
+                    ];
+
+                    if (!this.touchless && !this.stateless) {
+                      directives.push({
+                        name: "touch",
+                        value: {
+                          parent: true,
+                          left: this.swipeLeft,
+                          right: this.swipeRight,
+                        },
+                      });
+                    }
+
+                    return directives;
+                  },
+                  genListeners: function genListeners() {
+                    var _this = this;
+
+                    var on = {
+                      transitionend: function transitionend(e) {
+                        if (e.target !== e.currentTarget) return;
+
+                        _this.$emit("transitionend", e); // IE11 does not support new Event('resize')
+
+                        var resizeEvent = document.createEvent("UIEvents");
+                        resizeEvent.initUIEvent(
+                          "resize",
+                          true,
+                          false,
+                          window,
+                          0
+                        );
+                        window.dispatchEvent(resizeEvent);
+                      },
+                    };
+
+                    if (this.miniVariant) {
+                      on.click = function () {
+                        return _this.$emit("update:mini-variant", false);
+                      };
+                    }
+
+                    if (this.expandOnHover) {
+                      on.mouseenter = function () {
+                        return (_this.isMouseover = true);
+                      };
+
+                      on.mouseleave = function () {
+                        return (_this.isMouseover = false);
+                      };
+                    }
+
+                    return on;
+                  },
+                  genPosition: function genPosition(name) {
+                    var slot = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__["getSlot"]
+                    )(this, name);
+                    if (!slot) return slot;
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-navigation-drawer__" + name,
+                      },
+                      slot
+                    );
+                  },
+                  genPrepend: function genPrepend() {
+                    return this.genPosition("prepend");
+                  },
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-navigation-drawer__content",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                  genBorder: function genBorder() {
+                    return this.$createElement("div", {
+                      staticClass: "v-navigation-drawer__border",
+                    });
+                  },
+                  init: function init() {
+                    if (this.permanent) {
+                      this.isActive = true;
+                    } else if (this.stateless || this.value != null) {
+                      this.isActive = this.value;
+                    } else if (!this.temporary) {
+                      this.isActive = !this.isMobile;
+                    }
+                  },
+                  onRouteChange: function onRouteChange() {
+                    if (this.reactsToRoute && this.closeConditional()) {
+                      this.isActive = false;
+                    }
+                  },
+                  swipeLeft: function swipeLeft(e) {
+                    if (this.isActive && this.right) return;
+                    this.calculateTouchArea();
+                    if (Math.abs(e.touchendX - e.touchstartX) < 100) return;
+                    if (this.right && e.touchstartX >= this.touchArea.right)
+                      this.isActive = true;
+                    else if (!this.right && this.isActive)
+                      this.isActive = false;
+                  },
+                  swipeRight: function swipeRight(e) {
+                    if (this.isActive && !this.right) return;
+                    this.calculateTouchArea();
+                    if (Math.abs(e.touchendX - e.touchstartX) < 100) return;
+                    if (!this.right && e.touchstartX <= this.touchArea.left)
+                      this.isActive = true;
+                    else if (this.right && this.isActive) this.isActive = false;
+                  },
+
+                  /**
+                   * Update the application layout
+                   */
+                  updateApplication: function updateApplication() {
+                    if (
+                      !this.isActive ||
+                      this.isMobile ||
+                      this.temporary ||
+                      !this.$el
+                    )
+                      return 0;
+                    var width = Number(this.computedWidth);
+                    return isNaN(width) ? this.$el.clientWidth : width;
+                  },
+                  updateMiniVariant: function updateMiniVariant(val) {
+                    if (this.miniVariant !== val)
+                      this.$emit("update:mini-variant", val);
+                  },
+                },
+                render: function render(h) {
+                  var children = [
+                    this.genPrepend(),
+                    this.genContent(),
+                    this.genAppend(),
+                    this.genBorder(),
+                  ];
+                  if (
+                    this.src ||
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__["getSlot"]
+                    )(this, "img")
+                  )
+                    children.unshift(this.genBackground());
+                  return h(
+                    this.tag,
+                    this.setBackgroundColor(this.color, {
+                      class: this.classes,
+                      style: this.styles,
+                      directives: this.genDirectives(),
+                      on: this.genListeners(),
+                    }),
+                    children
+                  );
+                },
+              });
 
-      return [this.$createElement('div', {
-        staticClass: 'v-data-footer__icons-before'
-      }, before), this.showCurrentPage && this.$createElement('span', [this.options.page.toString()]), this.$createElement('div', {
-        staticClass: 'v-data-footer__icons-after'
-      }, after)];
-    }
-  },
-  render: function render() {
-    return this.$createElement('div', {
-      staticClass: 'v-data-footer'
-    }, [this.genItemsPerPageSelect(), this.genPaginationInfo(), this.genIcons()]);
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VNavigationDrawer/index.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VNavigationDrawer/index.ts ***!
+  \***************************************************/
+          /*! exports provided: VNavigationDrawer, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VNavigationDrawer */ "./src/components/VNavigationDrawer/VNavigationDrawer.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VNavigationDrawer",
+              function () {
+                return _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_0__[
+                  "default"
+                ];
+              }
+            );
 
-/***/ "./src/components/VDataIterator/VDataIterator.ts":
-/*!*******************************************************!*\
-  !*** ./src/components/VDataIterator/VDataIterator.ts ***!
-  \*******************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VData */ "./src/components/VData/index.ts");
-/* harmony import */ var _VDataFooter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VDataFooter */ "./src/components/VDataIterator/VDataFooter.ts");
-/* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return ar;
-}; // Components
+            /***/
+          },
 
+        /***/ "./src/components/VOverflowBtn/VOverflowBtn.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VOverflowBtn/VOverflowBtn.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VOverflowBtn/VOverflowBtn.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VOverflowBtn/VOverflowBtn.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VOverflowBtn_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VOverflowBtn.sass */ "./src/components/VOverflowBtn/VOverflowBtn.sass"
+              );
+            /* harmony import */ var _VOverflowBtn_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VOverflowBtn_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts"
+              );
+            /* harmony import */ var _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VAutocomplete */ "./src/components/VAutocomplete/index.ts"
+              );
+            /* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].extend({
+                name: "v-overflow-btn",
+                props: {
+                  editable: Boolean,
+                  segmented: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-overflow-btn": true,
+                        "v-overflow-btn--segmented": this.segmented,
+                        "v-overflow-btn--editable": this.editable,
+                      }
+                    );
+                  },
+                  isAnyValueAllowed: function isAnyValueAllowed() {
+                    return (
+                      this.editable ||
+                      _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.computed.isAnyValueAllowed.call(this)
+                    );
+                  },
+                  isSingle: function isSingle() {
+                    return true;
+                  },
+                  computedItems: function computedItems() {
+                    return this.segmented ? this.allItems : this.filteredItems;
+                  },
+                },
+                methods: {
+                  genSelections: function genSelections() {
+                    return this.editable
+                      ? _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__[
+                          "default"
+                        ].options.methods.genSelections.call(this)
+                      : _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.methods.genSelections.call(this); // Override v-autocomplete's override
+                  },
+                  genCommaSelection: function genCommaSelection(
+                    item,
+                    index,
+                    last
+                  ) {
+                    return this.segmented
+                      ? this.genSegmentedBtn(item)
+                      : _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.methods.genCommaSelection.call(
+                          this,
+                          item,
+                          index,
+                          last
+                        );
+                  },
+                  genInput: function genInput() {
+                    var input =
+                      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_3__[
+                        "default"
+                      ].options.methods.genInput.call(this);
+                    input.data = input.data || {};
+                    input.data.domProps.value = this.editable
+                      ? this.internalSearch
+                      : "";
+                    input.data.attrs.readonly = !this.isAnyValueAllowed;
+                    return input;
+                  },
+                  genLabel: function genLabel() {
+                    if (this.editable && this.isFocused) return null;
+                    var label =
+                      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_3__[
+                        "default"
+                      ].options.methods.genLabel.call(this);
+                    if (!label) return label;
+                    label.data = label.data || {}; // Reset previously set styles from parent
+
+                    label.data.style = {};
+                    return label;
+                  },
+                  genSegmentedBtn: function genSegmentedBtn(item) {
+                    var _this = this;
+
+                    var itemValue = this.getValue(item);
+                    var itemObj =
+                      this.computedItems.find(function (i) {
+                        return _this.getValue(i) === itemValue;
+                      }) || item;
+
+                    if (!itemObj.text || !itemObj.callback) {
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_5__[
+                          "consoleWarn"
+                        ]
+                      )(
+                        'When using "segmented" prop without a selection slot, items must contain both a text and callback property',
+                        this
+                      );
+                      return null;
+                    }
+
+                    return this.$createElement(
+                      _VBtn__WEBPACK_IMPORTED_MODULE_4__["default"],
+                      {
+                        props: {
+                          text: true,
+                        },
+                        on: {
+                          click: function click(e) {
+                            e.stopPropagation();
+                            itemObj.callback(e);
+                          },
+                        },
+                      },
+                      [itemObj.text]
+                    );
+                  },
+                  updateValue: function updateValue(val) {
+                    if (val) {
+                      this.initialValue = this.lazyValue;
+                    } else if (this.initialValue !== this.lazyValue) {
+                      this.$emit("change", this.lazyValue);
+                    }
+                  },
+                },
+              });
 
- // Mixins
+            /***/
+          },
 
+        /***/ "./src/components/VOverflowBtn/index.ts":
+          /*!**********************************************!*\
+  !*** ./src/components/VOverflowBtn/index.ts ***!
+  \**********************************************/
+          /*! exports provided: VOverflowBtn, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VOverflowBtn__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VOverflowBtn */ "./src/components/VOverflowBtn/VOverflowBtn.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VOverflowBtn",
+              function () {
+                return _VOverflowBtn__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
- // Helpers
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VOverflowBtn__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VOverlay/VOverlay.sass":
+          /*!***********************************************!*\
+  !*** ./src/components/VOverlay/VOverlay.sass ***!
+  \***********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VOverlay/VOverlay.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VOverlay/VOverlay.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VOverlay_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VOverlay.sass */ "./src/components/VOverlay/VOverlay.sass"
+              );
+            /* harmony import */ var _VOverlay_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VOverlay_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "v-overlay",
+                props: {
+                  absolute: Boolean,
+                  color: {
+                    type: String,
+                    default: "#212121",
+                  },
+                  dark: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  opacity: {
+                    type: [Number, String],
+                    default: 0.46,
+                  },
+                  value: {
+                    default: true,
+                  },
+                  zIndex: {
+                    type: [Number, String],
+                    default: 5,
+                  },
+                },
+                computed: {
+                  __scrim: function __scrim() {
+                    var data = this.setBackgroundColor(this.color, {
+                      staticClass: "v-overlay__scrim",
+                      style: {
+                        opacity: this.computedOpacity,
+                      },
+                    });
+                    return this.$createElement("div", data);
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-overlay--absolute": this.absolute,
+                        "v-overlay--active": this.isActive,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  computedOpacity: function computedOpacity() {
+                    return Number(this.isActive ? this.opacity : 0);
+                  },
+                  styles: function styles() {
+                    return {
+                      zIndex: this.zIndex,
+                    };
+                  },
+                },
+                methods: {
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-overlay__content",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var children = [this.__scrim];
+                  if (this.isActive) children.push(this.genContent());
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-overlay",
+                      class: this.classes,
+                      style: this.styles,
+                    },
+                    children
+                  );
+                },
+              });
 
-/* @vue/component */
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_mobile__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'v-data-iterator',
-  props: __assign(__assign({}, _VData__WEBPACK_IMPORTED_MODULE_0__["VData"].options.props), {
-    itemKey: {
-      type: String,
-      default: 'id'
-    },
-    value: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    singleSelect: Boolean,
-    expanded: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    mobileBreakpoint: __assign(__assign({}, _mixins_mobile__WEBPACK_IMPORTED_MODULE_2__["default"].options.props.mobileBreakpoint), {
-      default: 600
-    }),
-    singleExpand: Boolean,
-    loading: [Boolean, String],
-    noResultsText: {
-      type: String,
-      default: '$vuetify.dataIterator.noResultsText'
-    },
-    noDataText: {
-      type: String,
-      default: '$vuetify.noDataText'
-    },
-    loadingText: {
-      type: String,
-      default: '$vuetify.dataIterator.loadingText'
-    },
-    hideDefaultFooter: Boolean,
-    footerProps: Object,
-    selectableKey: {
-      type: String,
-      default: 'isSelectable'
-    }
-  }),
-  data: function data() {
-    return {
-      selection: {},
-      expansion: {},
-      internalCurrentItems: []
-    };
-  },
-  computed: {
-    everyItem: function everyItem() {
-      var _this = this;
-
-      return !!this.selectableItems.length && this.selectableItems.every(function (i) {
-        return _this.isSelected(i);
-      });
-    },
-    someItems: function someItems() {
-      var _this = this;
-
-      return this.selectableItems.some(function (i) {
-        return _this.isSelected(i);
-      });
-    },
-    sanitizedFooterProps: function sanitizedFooterProps() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["camelizeObjectKeys"])(this.footerProps);
-    },
-    selectableItems: function selectableItems() {
-      var _this = this;
-
-      return this.internalCurrentItems.filter(function (item) {
-        return _this.isSelectable(item);
-      });
-    }
-  },
-  watch: {
-    value: {
-      handler: function handler(value) {
-        var _this = this;
-
-        this.selection = value.reduce(function (selection, item) {
-          selection[Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, _this.itemKey)] = item;
-          return selection;
-        }, {});
-      },
-      immediate: true
-    },
-    selection: function selection(value, old) {
-      if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["deepEqual"])(Object.keys(value), Object.keys(old))) return;
-      this.$emit('input', Object.values(value));
-    },
-    expanded: {
-      handler: function handler(value) {
-        var _this = this;
-
-        this.expansion = value.reduce(function (expansion, item) {
-          expansion[Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, _this.itemKey)] = true;
-          return expansion;
-        }, {});
-      },
-      immediate: true
-    },
-    expansion: function expansion(value, old) {
-      var _this = this;
-
-      if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["deepEqual"])(value, old)) return;
-      var keys = Object.keys(value).filter(function (k) {
-        return value[k];
-      });
-      var expanded = !keys.length ? [] : this.items.filter(function (i) {
-        return keys.includes(String(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(i, _this.itemKey)));
-      });
-      this.$emit('update:expanded', expanded);
-    }
-  },
-  created: function created() {
-    var _this = this;
-
-    var breakingProps = [['disable-initial-sort', 'sort-by'], ['filter', 'custom-filter'], ['pagination', 'options'], ['total-items', 'server-items-length'], ['hide-actions', 'hide-default-footer'], ['rows-per-page-items', 'footer-props.items-per-page-options'], ['rows-per-page-text', 'footer-props.items-per-page-text'], ['prev-icon', 'footer-props.prev-icon'], ['next-icon', 'footer-props.next-icon']];
-    /* istanbul ignore next */
-
-    breakingProps.forEach(function (_a) {
-      var _b = __read(_a, 2),
-          original = _b[0],
-          replacement = _b[1];
-
-      if (_this.$attrs.hasOwnProperty(original)) Object(_util_console__WEBPACK_IMPORTED_MODULE_6__["breaking"])(original, replacement, _this);
-    });
-    var removedProps = ['expand', 'content-class', 'content-props', 'content-tag'];
-    /* istanbul ignore next */
-
-    removedProps.forEach(function (prop) {
-      if (_this.$attrs.hasOwnProperty(prop)) Object(_util_console__WEBPACK_IMPORTED_MODULE_6__["removed"])(prop);
-    });
-  },
-  methods: {
-    toggleSelectAll: function toggleSelectAll(value) {
-      var selection = Object.assign({}, this.selection);
-
-      for (var i = 0; i < this.selectableItems.length; i++) {
-        var item = this.selectableItems[i];
-        if (!this.isSelectable(item)) continue;
-        var key = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, this.itemKey);
-        if (value) selection[key] = item;else delete selection[key];
-      }
+        /***/ "./src/components/VOverlay/index.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VOverlay/index.ts ***!
+  \******************************************/
+          /*! exports provided: VOverlay, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VOverlay__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VOverlay */ "./src/components/VOverlay/VOverlay.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VOverlay",
+              function () {
+                return _VOverlay__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      this.selection = selection;
-      this.$emit('toggle-select-all', {
-        items: this.internalCurrentItems,
-        value: value
-      });
-    },
-    isSelectable: function isSelectable(item) {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, this.selectableKey) !== false;
-    },
-    isSelected: function isSelected(item) {
-      return !!this.selection[Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, this.itemKey)] || false;
-    },
-    select: function select(item, value, emit) {
-      if (value === void 0) {
-        value = true;
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VOverlay__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      if (emit === void 0) {
-        emit = true;
-      }
+            /***/
+          },
 
-      if (!this.isSelectable(item)) return;
-      var selection = this.singleSelect ? {} : Object.assign({}, this.selection);
-      var key = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, this.itemKey);
-      if (value) selection[key] = item;else delete selection[key];
-
-      if (this.singleSelect && emit) {
-        var keys = Object.keys(this.selection);
-        var old = keys.length && Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(this.selection[keys[0]], this.itemKey);
-        old && old !== key && this.$emit('item-selected', {
-          item: this.selection[old],
-          value: false
-        });
-      }
+        /***/ "./src/components/VPagination/VPagination.sass":
+          /*!*****************************************************!*\
+  !*** ./src/components/VPagination/VPagination.sass ***!
+  \*****************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      this.selection = selection;
-      emit && this.$emit('item-selected', {
-        item: item,
-        value: value
-      });
-    },
-    isExpanded: function isExpanded(item) {
-      return this.expansion[Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, this.itemKey)] || false;
-    },
-    expand: function expand(item, value) {
-      if (value === void 0) {
-        value = true;
-      }
+        /***/ "./src/components/VPagination/VPagination.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VPagination/VPagination.ts ***!
+  \***************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VPagination_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VPagination.sass */ "./src/components/VPagination/VPagination.sass"
+              );
+            /* harmony import */ var _VPagination_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VPagination_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/intersectable */ "./src/mixins/intersectable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      var expansion = this.singleExpand ? {} : Object.assign({}, this.expansion);
-      var key = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, this.itemKey);
-      if (value) expansion[key] = true;else delete expansion[key];
-      this.expansion = expansion;
-      this.$emit('item-expanded', {
-        item: item,
-        value: value
-      });
-    },
-    createItemProps: function createItemProps(item) {
-      var _this = this;
-
-      return {
-        item: item,
-        select: function select(v) {
-          return _this.select(item, v);
-        },
-        isSelected: this.isSelected(item),
-        expand: function expand(v) {
-          return _this.expand(item, v);
-        },
-        isExpanded: this.isExpanded(item),
-        isMobile: this.isMobile
-      };
-    },
-    genEmptyWrapper: function genEmptyWrapper(content) {
-      return this.$createElement('div', content);
-    },
-    genEmpty: function genEmpty(originalItemsLength, filteredItemsLength) {
-      if (originalItemsLength === 0 && this.loading) {
-        var loading = this.$slots.loading || this.$vuetify.lang.t(this.loadingText);
-        return this.genEmptyWrapper(loading);
-      } else if (originalItemsLength === 0) {
-        var noData = this.$slots['no-data'] || this.$vuetify.lang.t(this.noDataText);
-        return this.genEmptyWrapper(noData);
-      } else if (filteredItemsLength === 0) {
-        var noResults = this.$slots['no-results'] || this.$vuetify.lang.t(this.noResultsText);
-        return this.genEmptyWrapper(noResults);
-      }
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-      return null;
-    },
-    genItems: function genItems(props) {
-      var _this = this;
-
-      var empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength);
-      if (empty) return [empty];
-
-      if (this.$scopedSlots.default) {
-        return this.$scopedSlots.default(__assign(__assign({}, props), {
-          isSelected: this.isSelected,
-          select: this.select,
-          isExpanded: this.isExpanded,
-          expand: this.expand
-        }));
-      }
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-      if (this.$scopedSlots.item) {
-        return props.items.map(function (item) {
-          return _this.$scopedSlots.item(_this.createItemProps(item));
-        });
-      }
+                return ar;
+              };
 
-      return [];
-    },
-    genFooter: function genFooter(props) {
-      if (this.hideDefaultFooter) return null;
-      var data = {
-        props: __assign(__assign({}, this.sanitizedFooterProps), {
-          options: props.options,
-          pagination: props.pagination
-        }),
-        on: {
-          'update:options': function updateOptions(value) {
-            return props.updateOptions(value);
-          }
-        }
-      };
-      var scopedSlots = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getPrefixedScopedSlots"])('footer.', this.$scopedSlots);
-      return this.$createElement(_VDataFooter__WEBPACK_IMPORTED_MODULE_1__["default"], __assign({
-        scopedSlots: scopedSlots
-      }, data));
-    },
-    genDefaultScopedSlot: function genDefaultScopedSlot(props) {
-      var outerProps = __assign(__assign({}, props), {
-        someItems: this.someItems,
-        everyItem: this.everyItem,
-        toggleSelectAll: this.toggleSelectAll
-      });
-
-      return this.$createElement('div', {
-        staticClass: 'v-data-iterator'
-      }, [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"])(this, 'header', outerProps, true), this.genItems(props), this.genFooter(props), Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"])(this, 'footer', outerProps, true)]);
-    }
-  },
-  render: function render() {
-    var _this = this;
-
-    return this.$createElement(_VData__WEBPACK_IMPORTED_MODULE_0__["VData"], {
-      props: this.$props,
-      on: {
-        'update:options': function updateOptions(v, old) {
-          return !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["deepEqual"])(v, old) && _this.$emit('update:options', v);
-        },
-        'update:page': function updatePage(v) {
-          return _this.$emit('update:page', v);
-        },
-        'update:items-per-page': function updateItemsPerPage(v) {
-          return _this.$emit('update:items-per-page', v);
-        },
-        'update:sort-by': function updateSortBy(v) {
-          return _this.$emit('update:sort-by', v);
-        },
-        'update:sort-desc': function updateSortDesc(v) {
-          return _this.$emit('update:sort-desc', v);
-        },
-        'update:group-by': function updateGroupBy(v) {
-          return _this.$emit('update:group-by', v);
-        },
-        'update:group-desc': function updateGroupDesc(v) {
-          return _this.$emit('update:group-desc', v);
-        },
-        pagination: function pagination(v, old) {
-          return !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["deepEqual"])(v, old) && _this.$emit('pagination', v);
-        },
-        'current-items': function currentItems(v) {
-          _this.internalCurrentItems = v;
-
-          _this.$emit('current-items', v);
-        },
-        'page-count': function pageCount(v) {
-          return _this.$emit('page-count', v);
-        }
-      },
-      scopedSlots: {
-        default: this.genDefaultScopedSlot
-      }
-    });
-  }
-}));
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-/***/ }),
+                return ar;
+              };
 
-/***/ "./src/components/VDataIterator/index.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VDataIterator/index.ts ***!
-  \***********************************************/
-/*! exports provided: VDataIterator, VDataFooter, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            // Directives
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                Object(
+                  _mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__["default"]
+                )({
+                  onVisible: ["init"],
+                }),
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"]
+              ).extend({
+                name: "v-pagination",
+                directives: {
+                  Resize:
+                    _directives_resize__WEBPACK_IMPORTED_MODULE_2__["default"],
+                },
+                props: {
+                  circle: Boolean,
+                  disabled: Boolean,
+                  length: {
+                    type: Number,
+                    default: 0,
+                    validator: function validator(val) {
+                      return val % 1 === 0;
+                    },
+                  },
+                  nextIcon: {
+                    type: String,
+                    default: "$next",
+                  },
+                  prevIcon: {
+                    type: String,
+                    default: "$prev",
+                  },
+                  totalVisible: [Number, String],
+                  value: {
+                    type: Number,
+                    default: 0,
+                  },
+                  pageAriaLabel: {
+                    type: String,
+                    default: "$vuetify.pagination.ariaLabel.page",
+                  },
+                  currentPageAriaLabel: {
+                    type: String,
+                    default: "$vuetify.pagination.ariaLabel.currentPage",
+                  },
+                  previousAriaLabel: {
+                    type: String,
+                    default: "$vuetify.pagination.ariaLabel.previous",
+                  },
+                  nextAriaLabel: {
+                    type: String,
+                    default: "$vuetify.pagination.ariaLabel.next",
+                  },
+                  wrapperAriaLabel: {
+                    type: String,
+                    default: "$vuetify.pagination.ariaLabel.wrapper",
+                  },
+                },
+                data: function data() {
+                  return {
+                    maxButtons: 0,
+                    selected: null,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-pagination": true,
+                        "v-pagination--circle": this.circle,
+                        "v-pagination--disabled": this.disabled,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  items: function items() {
+                    var totalVisible = parseInt(this.totalVisible, 10);
+
+                    if (totalVisible === 0) {
+                      return [];
+                    }
+
+                    var maxLength = Math.min(
+                      Math.max(0, totalVisible) || this.length,
+                      Math.max(0, this.maxButtons) || this.length,
+                      this.length
+                    );
+
+                    if (this.length <= maxLength) {
+                      return this.range(1, this.length);
+                    }
+
+                    var even = maxLength % 2 === 0 ? 1 : 0;
+                    var left = Math.floor(maxLength / 2);
+                    var right = this.length - left + 1 + even;
+
+                    if (this.value > left && this.value < right) {
+                      var start = this.value - left + 2;
+                      var end = this.value + left - 2 - even;
+                      return __spread([1, "..."], this.range(start, end), [
+                        "...",
+                        this.length,
+                      ]);
+                    } else if (this.value === left) {
+                      var end = this.value + left - 1 - even;
+                      return __spread(this.range(1, end), ["...", this.length]);
+                    } else if (this.value === right) {
+                      var start = this.value - left + 1;
+                      return __spread(
+                        [1, "..."],
+                        this.range(start, this.length)
+                      );
+                    } else {
+                      return __spread(
+                        this.range(1, left),
+                        ["..."],
+                        this.range(right, this.length)
+                      );
+                    }
+                  },
+                },
+                watch: {
+                  value: function value() {
+                    this.init();
+                  },
+                },
+                mounted: function mounted() {
+                  this.init();
+                },
+                methods: {
+                  init: function init() {
+                    var _this = this;
+
+                    this.selected = null;
+                    this.$nextTick(this.onResize); // TODO: Change this (f75dee3a, cbdf7caa)
+
+                    setTimeout(function () {
+                      return (_this.selected = _this.value);
+                    }, 100);
+                  },
+                  onResize: function onResize() {
+                    var width =
+                      this.$el && this.$el.parentElement
+                        ? this.$el.parentElement.clientWidth
+                        : window.innerWidth;
+                    this.maxButtons = Math.floor((width - 96) / 42);
+                  },
+                  next: function next(e) {
+                    e.preventDefault();
+                    this.$emit("input", this.value + 1);
+                    this.$emit("next");
+                  },
+                  previous: function previous(e) {
+                    e.preventDefault();
+                    this.$emit("input", this.value - 1);
+                    this.$emit("previous");
+                  },
+                  range: function range(from, to) {
+                    var range = [];
+                    from = from > 0 ? from : 1;
+
+                    for (var i = from; i <= to; i++) {
+                      range.push(i);
+                    }
+
+                    return range;
+                  },
+                  genIcon: function genIcon(h, icon, disabled, fn, label) {
+                    return h("li", [
+                      h(
+                        "button",
+                        {
+                          staticClass: "v-pagination__navigation",
+                          class: {
+                            "v-pagination__navigation--disabled": disabled,
+                          },
+                          attrs: {
+                            type: "button",
+                            "aria-label": label,
+                          },
+                          on: disabled
+                            ? {}
+                            : {
+                                click: fn,
+                              },
+                        },
+                        [
+                          h(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], [
+                            icon,
+                          ]),
+                        ]
+                      ),
+                    ]);
+                  },
+                  genItem: function genItem(h, i) {
+                    var _this = this;
+
+                    var color = i === this.value && (this.color || "primary");
+                    var isCurrentPage = i === this.value;
+                    var ariaLabel = isCurrentPage
+                      ? this.currentPageAriaLabel
+                      : this.pageAriaLabel;
+                    return h(
+                      "button",
+                      this.setBackgroundColor(color, {
+                        staticClass: "v-pagination__item",
+                        class: {
+                          "v-pagination__item--active": i === this.value,
+                        },
+                        attrs: {
+                          type: "button",
+                          "aria-current": isCurrentPage,
+                          "aria-label": this.$vuetify.lang.t(ariaLabel, i),
+                        },
+                        on: {
+                          click: function click() {
+                            return _this.$emit("input", i);
+                          },
+                        },
+                      }),
+                      [i.toString()]
+                    );
+                  },
+                  genItems: function genItems(h) {
+                    var _this = this;
+
+                    return this.items.map(function (i, index) {
+                      return h(
+                        "li",
+                        {
+                          key: index,
+                        },
+                        [
+                          isNaN(Number(i))
+                            ? h(
+                                "span",
+                                {
+                                  class: "v-pagination__more",
+                                },
+                                [i.toString()]
+                              )
+                            : _this.genItem(h, i),
+                        ]
+                      );
+                    });
+                  },
+                  genList: function genList(h, children) {
+                    return h(
+                      "ul",
+                      {
+                        directives: [
+                          {
+                            modifiers: {
+                              quiet: true,
+                            },
+                            name: "resize",
+                            value: this.onResize,
+                          },
+                        ],
+                        class: this.classes,
+                      },
+                      children
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var children = [
+                    this.genIcon(
+                      h,
+                      this.$vuetify.rtl ? this.nextIcon : this.prevIcon,
+                      this.value <= 1,
+                      this.previous,
+                      this.$vuetify.lang.t(this.previousAriaLabel)
+                    ),
+                    this.genItems(h),
+                    this.genIcon(
+                      h,
+                      this.$vuetify.rtl ? this.prevIcon : this.nextIcon,
+                      this.value >= this.length,
+                      this.next,
+                      this.$vuetify.lang.t(this.nextAriaLabel)
+                    ),
+                  ];
+                  return h(
+                    "nav",
+                    {
+                      attrs: {
+                        role: "navigation",
+                        "aria-label": this.$vuetify.lang.t(
+                          this.wrapperAriaLabel
+                        ),
+                      },
+                    },
+                    [this.genList(h, children)]
+                  );
+                },
+              });
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDataIterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDataIterator */ "./src/components/VDataIterator/VDataIterator.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataIterator", function() { return _VDataIterator__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _VDataFooter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VDataFooter */ "./src/components/VDataIterator/VDataFooter.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataFooter", function() { return _VDataFooter__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+        /***/ "./src/components/VPagination/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VPagination/index.ts ***!
+  \*********************************************/
+          /*! exports provided: VPagination, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VPagination__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VPagination */ "./src/components/VPagination/VPagination.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VPagination",
+              function () {
+                return _VPagination__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VPagination__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VParallax/VParallax.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VParallax/VParallax.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VDataIterator: _VDataIterator__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VDataFooter: _VDataFooter__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
+        /***/ "./src/components/VParallax/VParallax.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VParallax/VParallax.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VParallax_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VParallax.sass */ "./src/components/VParallax/VParallax.sass"
+              );
+            /* harmony import */ var _VParallax_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VParallax_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_translatable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/translatable */ "./src/mixins/translatable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Style
+            // Mixins
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"]
+            )(_mixins_translatable__WEBPACK_IMPORTED_MODULE_1__["default"]);
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-parallax",
+                props: {
+                  alt: {
+                    type: String,
+                    default: "",
+                  },
+                  height: {
+                    type: [String, Number],
+                    default: 500,
+                  },
+                  src: String,
+                  srcset: String,
+                },
+                data: function data() {
+                  return {
+                    isBooted: false,
+                  };
+                },
+                computed: {
+                  styles: function styles() {
+                    return {
+                      display: "block",
+                      opacity: this.isBooted ? 1 : 0,
+                      transform: "translate(-50%, " + this.parallax + "px)",
+                    };
+                  },
+                },
+                mounted: function mounted() {
+                  this.init();
+                },
+                methods: {
+                  init: function init() {
+                    var _this = this;
+
+                    var img = this.$refs.img;
+                    if (!img) return;
+
+                    if (img.complete) {
+                      this.translate();
+                      this.listeners();
+                    } else {
+                      img.addEventListener(
+                        "load",
+                        function () {
+                          _this.translate();
+
+                          _this.listeners();
+                        },
+                        false
+                      );
+                    }
+
+                    this.isBooted = true;
+                  },
+                  objHeight: function objHeight() {
+                    return this.$refs.img.naturalHeight;
+                  },
+                },
+                render: function render(h) {
+                  var imgData = {
+                    staticClass: "v-parallax__image",
+                    style: this.styles,
+                    attrs: {
+                      src: this.src,
+                      srcset: this.srcset,
+                      alt: this.alt,
+                    },
+                    ref: "img",
+                  };
+                  var container = h(
+                    "div",
+                    {
+                      staticClass: "v-parallax__image-container",
+                    },
+                    [h("img", imgData)]
+                  );
+                  var content = h(
+                    "div",
+                    {
+                      staticClass: "v-parallax__content",
+                    },
+                    this.$slots.default
+                  );
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-parallax",
+                      style: {
+                        height: this.height + "px",
+                      },
+                      on: this.$listeners,
+                    },
+                    [container, content]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/MobileRow.ts":
-/*!************************************************!*\
-  !*** ./src/components/VDataTable/MobileRow.ts ***!
-  \************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'row',
-  functional: true,
-  props: {
-    headers: Array,
-    hideDefaultHeader: Boolean,
-    item: Object,
-    rtl: Boolean
-  },
-  render: function render(h, _a) {
-    var props = _a.props,
-        slots = _a.slots,
-        data = _a.data;
-    var computedSlots = slots();
-    var columns = props.headers.map(function (header) {
-      var classes = {
-        'v-data-table__mobile-row': true
-      };
-      var children = [];
-      var value = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getObjectValueByPath"])(props.item, header.value);
-      var slotName = header.value;
-      var scopedSlot = data.scopedSlots && data.scopedSlots[slotName];
-      var regularSlot = computedSlots[slotName];
-
-      if (scopedSlot) {
-        children.push(scopedSlot({
-          item: props.item,
-          header: header,
-          value: value
-        }));
-      } else if (regularSlot) {
-        children.push(regularSlot);
-      } else {
-        children.push(value == null ? value : String(value));
-      }
+        /***/ "./src/components/VParallax/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VParallax/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VParallax, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VParallax__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VParallax */ "./src/components/VParallax/VParallax.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VParallax",
+              function () {
+                return _VParallax__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      var mobileRowChildren = [h('div', {
-        staticClass: 'v-data-table__mobile-row__cell'
-      }, children)];
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VParallax__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      if (header.value !== 'dataTableSelect' && !props.hideDefaultHeader) {
-        mobileRowChildren.unshift(h('div', {
-          staticClass: 'v-data-table__mobile-row__header'
-        }, [header.text]));
-      }
+            /***/
+          },
 
-      return h('td', {
-        class: classes
-      }, mobileRowChildren);
-    });
-    return h('tr', __assign(__assign({}, data), {
-      staticClass: 'v-data-table__mobile-table-row'
-    }), columns);
-  }
-}));
+        /***/ "./src/components/VPicker/VPicker.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VPicker/VPicker.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VPicker/VPicker.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VPicker/VPicker.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VPicker_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VPicker.sass */ "./src/components/VPicker/VPicker.sass"
+              );
+            /* harmony import */ var _VPicker_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VPicker_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VCard_VCard_sass__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VCard/VCard.sass */ "./src/components/VCard/VCard.sass"
+              );
+            /* harmony import */ var _VCard_VCard_sass__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VCard_VCard_sass__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ "./src/components/VDataTable/Row.ts":
-/*!******************************************!*\
-  !*** ./src/components/VDataTable/Row.ts ***!
-  \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-// Types
- // Utils
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'row',
-  functional: true,
-  props: {
-    headers: Array,
-    item: Object,
-    rtl: Boolean
-  },
-  render: function render(h, _a) {
-    var props = _a.props,
-        slots = _a.slots,
-        data = _a.data;
-    var computedSlots = slots();
-    var columns = props.headers.map(function (header) {
-      var _a;
-
-      var children = [];
-      var value = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getObjectValueByPath"])(props.item, header.value);
-      var slotName = header.value;
-      var scopedSlot = data.scopedSlots && data.scopedSlots[slotName];
-      var regularSlot = computedSlots[slotName];
-
-      if (scopedSlot) {
-        children.push(scopedSlot({
-          item: props.item,
-          header: header,
-          value: value
-        }));
-      } else if (regularSlot) {
-        children.push(regularSlot);
-      } else {
-        children.push(value == null ? value : String(value));
-      }
+            // Mixins
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"]
+              ).extend({
+                name: "v-picker",
+                props: {
+                  flat: Boolean,
+                  fullWidth: Boolean,
+                  landscape: Boolean,
+                  noTitle: Boolean,
+                  transition: {
+                    type: String,
+                    default: "fade-transition",
+                  },
+                  width: {
+                    type: [Number, String],
+                    default: 290,
+                  },
+                },
+                computed: {
+                  computedTitleColor: function computedTitleColor() {
+                    var defaultTitleColor = this.isDark
+                      ? false
+                      : this.color || "primary";
+                    return this.color || defaultTitleColor;
+                  },
+                },
+                methods: {
+                  genTitle: function genTitle() {
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(this.computedTitleColor, {
+                        staticClass: "v-picker__title",
+                        class: {
+                          "v-picker__title--landscape": this.landscape,
+                        },
+                      }),
+                      this.$slots.title
+                    );
+                  },
+                  genBodyTransition: function genBodyTransition() {
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.transition,
+                        },
+                      },
+                      this.$slots.default
+                    );
+                  },
+                  genBody: function genBody() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-picker__body",
+                        class: __assign(
+                          {
+                            "v-picker__body--no-title": this.noTitle,
+                          },
+                          this.themeClasses
+                        ),
+                        style: this.fullWidth
+                          ? undefined
+                          : {
+                              width: Object(
+                                _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                                  "convertToUnit"
+                                ]
+                              )(this.width),
+                            },
+                      },
+                      [this.genBodyTransition()]
+                    );
+                  },
+                  genActions: function genActions() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-picker__actions v-card__actions",
+                        class: {
+                          "v-picker__actions--no-title": this.noTitle,
+                        },
+                      },
+                      this.$slots.actions
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-picker v-card",
+                      class: __assign(
+                        __assign(
+                          {
+                            "v-picker--flat": this.flat,
+                            "v-picker--landscape": this.landscape,
+                            "v-picker--full-width": this.fullWidth,
+                          },
+                          this.themeClasses
+                        ),
+                        this.elevationClasses
+                      ),
+                    },
+                    [
+                      this.$slots.title ? this.genTitle() : null,
+                      this.genBody(),
+                      this.$slots.actions ? this.genActions() : null,
+                    ]
+                  );
+                },
+              });
 
-      var textAlign = "text-" + (header.align || 'start');
-      return h('td', {
-        class: (_a = {}, _a[textAlign] = true, _a['v-data-table__divider'] = header.divider, _a)
-      }, children);
-    });
-    return h('tr', data, columns);
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VPicker/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VPicker/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VPicker, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VPicker__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VPicker */ "./src/components/VPicker/VPicker.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VPicker",
+              function () {
+                return _VPicker__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/***/ "./src/components/VDataTable/RowGroup.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VDataTable/RowGroup.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VPicker__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return ar;
-};
+            /***/
+          },
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+        /***/ "./src/components/VProgressCircular/VProgressCircular.sass":
+          /*!*****************************************************************!*\
+  !*** ./src/components/VProgressCircular/VProgressCircular.sass ***!
+  \*****************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  return ar;
-};
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'row-group',
-  functional: true,
-  props: {
-    value: {
-      type: Boolean,
-      default: true
-    },
-    headerClass: {
-      type: String,
-      default: 'v-row-group__header'
-    },
-    contentClass: String,
-    summaryClass: {
-      type: String,
-      default: 'v-row-group__summary'
-    }
-  },
-  render: function render(h, _a) {
-    var slots = _a.slots,
-        props = _a.props;
-    var computedSlots = slots();
-    var children = [];
-
-    if (computedSlots['column.header']) {
-      children.push(h('tr', {
-        staticClass: props.headerClass
-      }, computedSlots['column.header']));
-    } else if (computedSlots['row.header']) {
-      children.push.apply(children, __spread(computedSlots['row.header']));
-    }
-
-    if (computedSlots['row.content'] && props.value) children.push.apply(children, __spread(computedSlots['row.content']));
-
-    if (computedSlots['column.summary']) {
-      children.push(h('tr', {
-        staticClass: props.summaryClass
-      }, computedSlots['column.summary']));
-    } else if (computedSlots['row.summary']) {
-      children.push.apply(children, __spread(computedSlots['row.summary']));
-    }
-
-    return children;
-  }
-}));
+        /***/ "./src/components/VProgressCircular/VProgressCircular.ts":
+          /*!***************************************************************!*\
+  !*** ./src/components/VProgressCircular/VProgressCircular.ts ***!
+  \***************************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VProgressCircular_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VProgressCircular.sass */ "./src/components/VProgressCircular/VProgressCircular.sass"
+              );
+            /* harmony import */ var _VProgressCircular_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VProgressCircular_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // Styles
+            // Mixins
+
+            // Utils
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-progress-circular",
+                props: {
+                  button: Boolean,
+                  indeterminate: Boolean,
+                  rotate: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  size: {
+                    type: [Number, String],
+                    default: 32,
+                  },
+                  width: {
+                    type: [Number, String],
+                    default: 4,
+                  },
+                  value: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                },
+                data: function data() {
+                  return {
+                    radius: 20,
+                  };
+                },
+                computed: {
+                  calculatedSize: function calculatedSize() {
+                    return Number(this.size) + (this.button ? 8 : 0);
+                  },
+                  circumference: function circumference() {
+                    return 2 * Math.PI * this.radius;
+                  },
+                  classes: function classes() {
+                    return {
+                      "v-progress-circular--indeterminate": this.indeterminate,
+                      "v-progress-circular--button": this.button,
+                    };
+                  },
+                  normalizedValue: function normalizedValue() {
+                    if (this.value < 0) {
+                      return 0;
+                    }
+
+                    if (this.value > 100) {
+                      return 100;
+                    }
+
+                    return parseFloat(this.value);
+                  },
+                  strokeDashArray: function strokeDashArray() {
+                    return Math.round(this.circumference * 1000) / 1000;
+                  },
+                  strokeDashOffset: function strokeDashOffset() {
+                    return (
+                      ((100 - this.normalizedValue) / 100) *
+                        this.circumference +
+                      "px"
+                    );
+                  },
+                  strokeWidth: function strokeWidth() {
+                    return (
+                      (Number(this.width) / +this.size) * this.viewBoxSize * 2
+                    );
+                  },
+                  styles: function styles() {
+                    return {
+                      height: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                          "convertToUnit"
+                        ]
+                      )(this.calculatedSize),
+                      width: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                          "convertToUnit"
+                        ]
+                      )(this.calculatedSize),
+                    };
+                  },
+                  svgStyles: function svgStyles() {
+                    return {
+                      transform: "rotate(" + Number(this.rotate) + "deg)",
+                    };
+                  },
+                  viewBoxSize: function viewBoxSize() {
+                    return this.radius / (1 - Number(this.width) / +this.size);
+                  },
+                },
+                methods: {
+                  genCircle: function genCircle(name, offset) {
+                    return this.$createElement("circle", {
+                      class: "v-progress-circular__" + name,
+                      attrs: {
+                        fill: "transparent",
+                        cx: 2 * this.viewBoxSize,
+                        cy: 2 * this.viewBoxSize,
+                        r: this.radius,
+                        "stroke-width": this.strokeWidth,
+                        "stroke-dasharray": this.strokeDashArray,
+                        "stroke-dashoffset": offset,
+                      },
+                    });
+                  },
+                  genSvg: function genSvg() {
+                    var children = [
+                      this.indeterminate || this.genCircle("underlay", 0),
+                      this.genCircle("overlay", this.strokeDashOffset),
+                    ];
+                    return this.$createElement(
+                      "svg",
+                      {
+                        style: this.svgStyles,
+                        attrs: {
+                          xmlns: "http://www.w3.org/2000/svg",
+                          viewBox:
+                            this.viewBoxSize +
+                            " " +
+                            this.viewBoxSize +
+                            " " +
+                            2 * this.viewBoxSize +
+                            " " +
+                            2 * this.viewBoxSize,
+                        },
+                      },
+                      children
+                    );
+                  },
+                  genInfo: function genInfo() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-progress-circular__info",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    this.setTextColor(this.color, {
+                      staticClass: "v-progress-circular",
+                      attrs: {
+                        role: "progressbar",
+                        "aria-valuemin": 0,
+                        "aria-valuemax": 100,
+                        "aria-valuenow": this.indeterminate
+                          ? undefined
+                          : this.normalizedValue,
+                      },
+                      class: this.classes,
+                      style: this.styles,
+                      on: this.$listeners,
+                    }),
+                    [this.genSvg(), this.genInfo()]
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VDataTable.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VDataTable/VDataTable.sass ***!
+        /***/ "./src/components/VProgressCircular/index.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VProgressCircular/index.ts ***!
   \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+          /*! exports provided: VProgressCircular, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VProgressCircular__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VProgressCircular */ "./src/components/VProgressCircular/VProgressCircular.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VProgressCircular",
+              function () {
+                return _VProgressCircular__WEBPACK_IMPORTED_MODULE_0__[
+                  "default"
+                ];
+              }
+            );
 
-// extracted by mini-css-extract-plugin
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VProgressCircular__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VDataTable.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VDataTable/VDataTable.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDataTable_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDataTable.sass */ "./src/components/VDataTable/VDataTable.sass");
-/* harmony import */ var _VDataTable_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDataTable_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VData */ "./src/components/VData/index.ts");
-/* harmony import */ var _VDataIterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VDataIterator */ "./src/components/VDataIterator/index.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _VDataTableHeader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VDataTableHeader */ "./src/components/VDataTable/VDataTableHeader.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _Row__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./Row */ "./src/components/VDataTable/Row.ts");
-/* harmony import */ var _RowGroup__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./RowGroup */ "./src/components/VDataTable/RowGroup.ts");
-/* harmony import */ var _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../VCheckbox/VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts");
-/* harmony import */ var _VSimpleTable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./VSimpleTable */ "./src/components/VDataTable/VSimpleTable.ts");
-/* harmony import */ var _MobileRow__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./MobileRow */ "./src/components/VDataTable/MobileRow.ts");
-/* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+        /***/ "./src/components/VProgressLinear/VProgressLinear.sass":
+          /*!*************************************************************!*\
+  !*** ./src/components/VProgressLinear/VProgressLinear.sass ***!
+  \*************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  return ar;
-};
+        /***/ "./src/components/VProgressLinear/VProgressLinear.ts":
+          /*!***********************************************************!*\
+  !*** ./src/components/VProgressLinear/VProgressLinear.ts ***!
+  \***********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VProgressLinear_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VProgressLinear.sass */ "./src/components/VProgressLinear/VProgressLinear.sass"
+              );
+            /* harmony import */ var _VProgressLinear_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VProgressLinear_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts"
+              );
+            /* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
- // Components
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"]
+            )(
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+              Object(
+                _mixins_positionable__WEBPACK_IMPORTED_MODULE_3__["factory"]
+              )(["absolute", "fixed", "top", "bottom"]),
+              _mixins_proxyable__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-progress-linear",
+                props: {
+                  active: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  backgroundColor: {
+                    type: String,
+                    default: null,
+                  },
+                  backgroundOpacity: {
+                    type: [Number, String],
+                    default: null,
+                  },
+                  bufferValue: {
+                    type: [Number, String],
+                    default: 100,
+                  },
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  height: {
+                    type: [Number, String],
+                    default: 4,
+                  },
+                  indeterminate: Boolean,
+                  query: Boolean,
+                  reverse: Boolean,
+                  rounded: Boolean,
+                  stream: Boolean,
+                  striped: Boolean,
+                  value: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                },
+                data: function data() {
+                  return {
+                    internalLazyValue: this.value || 0,
+                  };
+                },
+                computed: {
+                  __cachedBackground: function __cachedBackground() {
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(
+                        this.backgroundColor || this.color,
+                        {
+                          staticClass: "v-progress-linear__background",
+                          style: this.backgroundStyle,
+                        }
+                      )
+                    );
+                  },
+                  __cachedBar: function __cachedBar() {
+                    return this.$createElement(this.computedTransition, [
+                      this.__cachedBarType,
+                    ]);
+                  },
+                  __cachedBarType: function __cachedBarType() {
+                    return this.indeterminate
+                      ? this.__cachedIndeterminate
+                      : this.__cachedDeterminate;
+                  },
+                  __cachedBuffer: function __cachedBuffer() {
+                    return this.$createElement("div", {
+                      staticClass: "v-progress-linear__buffer",
+                      style: this.styles,
+                    });
+                  },
+                  __cachedDeterminate: function __cachedDeterminate() {
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(this.color, {
+                        staticClass: "v-progress-linear__determinate",
+                        style: {
+                          width: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                              "convertToUnit"
+                            ]
+                          )(this.normalizedValue, "%"),
+                        },
+                      })
+                    );
+                  },
+                  __cachedIndeterminate: function __cachedIndeterminate() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-progress-linear__indeterminate",
+                        class: {
+                          "v-progress-linear__indeterminate--active":
+                            this.active,
+                        },
+                      },
+                      [
+                        this.genProgressBar("long"),
+                        this.genProgressBar("short"),
+                      ]
+                    );
+                  },
+                  __cachedStream: function __cachedStream() {
+                    if (!this.stream) return null;
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(this.color, {
+                        staticClass: "v-progress-linear__stream",
+                        style: {
+                          width: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                              "convertToUnit"
+                            ]
+                          )(100 - this.normalizedBuffer, "%"),
+                        },
+                      })
+                    );
+                  },
+                  backgroundStyle: function backgroundStyle() {
+                    var _a;
+
+                    var backgroundOpacity =
+                      this.backgroundOpacity == null
+                        ? this.backgroundColor
+                          ? 1
+                          : 0.3
+                        : parseFloat(this.backgroundOpacity);
+                    return (
+                      (_a = {
+                        opacity: backgroundOpacity,
+                      }),
+                      (_a[this.isReversed ? "right" : "left"] = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                          "convertToUnit"
+                        ]
+                      )(this.normalizedValue, "%")),
+                      (_a.width = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                          "convertToUnit"
+                        ]
+                      )(this.normalizedBuffer - this.normalizedValue, "%")),
+                      _a
+                    );
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-progress-linear--absolute": this.absolute,
+                        "v-progress-linear--fixed": this.fixed,
+                        "v-progress-linear--query": this.query,
+                        "v-progress-linear--reactive": this.reactive,
+                        "v-progress-linear--reverse": this.isReversed,
+                        "v-progress-linear--rounded": this.rounded,
+                        "v-progress-linear--striped": this.striped,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  computedTransition: function computedTransition() {
+                    return this.indeterminate
+                      ? _transitions__WEBPACK_IMPORTED_MODULE_1__[
+                          "VFadeTransition"
+                        ]
+                      : _transitions__WEBPACK_IMPORTED_MODULE_1__[
+                          "VSlideXTransition"
+                        ];
+                  },
+                  isReversed: function isReversed() {
+                    return this.$vuetify.rtl !== this.reverse;
+                  },
+                  normalizedBuffer: function normalizedBuffer() {
+                    return this.normalize(this.bufferValue);
+                  },
+                  normalizedValue: function normalizedValue() {
+                    return this.normalize(this.internalLazyValue);
+                  },
+                  reactive: function reactive() {
+                    return Boolean(this.$listeners.change);
+                  },
+                  styles: function styles() {
+                    var styles = {};
+
+                    if (!this.active) {
+                      styles.height = 0;
+                    }
+
+                    if (
+                      !this.indeterminate &&
+                      parseFloat(this.normalizedBuffer) !== 100
+                    ) {
+                      styles.width = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                          "convertToUnit"
+                        ]
+                      )(this.normalizedBuffer, "%");
+                    }
+
+                    return styles;
+                  },
+                },
+                methods: {
+                  genContent: function genContent() {
+                    var slot = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_6__["getSlot"]
+                    )(this, "default", {
+                      value: this.internalLazyValue,
+                    });
+                    if (!slot) return null;
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-progress-linear__content",
+                      },
+                      slot
+                    );
+                  },
+                  genListeners: function genListeners() {
+                    var listeners = this.$listeners;
+
+                    if (this.reactive) {
+                      listeners.click = this.onClick;
+                    }
+
+                    return listeners;
+                  },
+                  genProgressBar: function genProgressBar(name) {
+                    var _a;
+
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(this.color, {
+                        staticClass: "v-progress-linear__indeterminate",
+                        class: ((_a = {}), (_a[name] = true), _a),
+                      })
+                    );
+                  },
+                  onClick: function onClick(e) {
+                    if (!this.reactive) return;
+                    var width = this.$el.getBoundingClientRect().width;
+                    this.internalValue = (e.offsetX / width) * 100;
+                  },
+                  normalize: function normalize(value) {
+                    if (value < 0) return 0;
+                    if (value > 100) return 100;
+                    return parseFloat(value);
+                  },
+                },
+                render: function render(h) {
+                  var data = {
+                    staticClass: "v-progress-linear",
+                    attrs: {
+                      role: "progressbar",
+                      "aria-valuemin": 0,
+                      "aria-valuemax": this.normalizedBuffer,
+                      "aria-valuenow": this.indeterminate
+                        ? undefined
+                        : this.normalizedValue,
+                    },
+                    class: this.classes,
+                    style: {
+                      bottom: this.bottom ? 0 : undefined,
+                      height: this.active
+                        ? Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                              "convertToUnit"
+                            ]
+                          )(this.height)
+                        : 0,
+                      top: this.top ? 0 : undefined,
+                    },
+                    on: this.genListeners(),
+                  };
+                  return h("div", data, [
+                    this.__cachedStream,
+                    this.__cachedBackground,
+                    this.__cachedBuffer,
+                    this.__cachedBar,
+                    this.genContent(),
+                  ]);
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VProgressLinear/index.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VProgressLinear/index.ts ***!
+  \*************************************************/
+          /*! exports provided: VProgressLinear, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VProgressLinear__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VProgressLinear */ "./src/components/VProgressLinear/VProgressLinear.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VProgressLinear",
+              function () {
+                return _VProgressLinear__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VProgressLinear__WEBPACK_IMPORTED_MODULE_0__["default"];
 
- // import VVirtualTable from './VVirtualTable'
+            /***/
+          },
 
+        /***/ "./src/components/VRadioGroup/VRadio.sass":
+          /*!************************************************!*\
+  !*** ./src/components/VRadioGroup/VRadio.sass ***!
+  \************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VRadioGroup/VRadio.ts":
+          /*!**********************************************!*\
+  !*** ./src/components/VRadioGroup/VRadio.ts ***!
+  \**********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VRadio_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VRadio.sass */ "./src/components/VRadioGroup/VRadio.sass"
+              );
+            /* harmony import */ var _VRadio_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VRadio_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VLabel */ "./src/components/VLabel/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _mixins_rippleable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/rippleable */ "./src/mixins/rippleable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../mixins/selectable */ "./src/mixins/selectable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_11__["default"]
+            )(
+              _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_rippleable__WEBPACK_IMPORTED_MODULE_7__["default"],
+              Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_6__["factory"])(
+                "radioGroup"
+              ),
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-radio",
+                inheritAttrs: false,
+                props: {
+                  disabled: Boolean,
+                  id: String,
+                  label: String,
+                  name: String,
+                  offIcon: {
+                    type: String,
+                    default: "$radioOff",
+                  },
+                  onIcon: {
+                    type: String,
+                    default: "$radioOn",
+                  },
+                  readonly: Boolean,
+                  value: {
+                    default: null,
+                  },
+                },
+                data: function data() {
+                  return {
+                    isFocused: false,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {
+                          "v-radio--is-disabled": this.isDisabled,
+                          "v-radio--is-focused": this.isFocused,
+                        },
+                        this.themeClasses
+                      ),
+                      this.groupClasses
+                    );
+                  },
+                  computedColor: function computedColor() {
+                    return _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__[
+                      "default"
+                    ].options.computed.computedColor.call(this);
+                  },
+                  computedIcon: function computedIcon() {
+                    return this.isActive ? this.onIcon : this.offIcon;
+                  },
+                  computedId: function computedId() {
+                    return _VInput__WEBPACK_IMPORTED_MODULE_3__[
+                      "default"
+                    ].options.computed.computedId.call(this);
+                  },
+                  hasLabel:
+                    _VInput__WEBPACK_IMPORTED_MODULE_3__["default"].options
+                      .computed.hasLabel,
+                  hasState: function hasState() {
+                    return (this.radioGroup || {}).hasState;
+                  },
+                  isDisabled: function isDisabled() {
+                    return (
+                      this.disabled ||
+                      (!!this.radioGroup && this.radioGroup.isDisabled)
+                    );
+                  },
+                  isReadonly: function isReadonly() {
+                    return (
+                      this.readonly ||
+                      (!!this.radioGroup && this.radioGroup.isReadonly)
+                    );
+                  },
+                  computedName: function computedName() {
+                    if (this.name || !this.radioGroup) {
+                      return this.name;
+                    }
+
+                    return (
+                      this.radioGroup.name || "radio-" + this.radioGroup._uid
+                    );
+                  },
+                  rippleState: function rippleState() {
+                    return _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__[
+                      "default"
+                    ].options.computed.rippleState.call(this);
+                  },
+                  validationState: function validationState() {
+                    return (
+                      (this.radioGroup || {}).validationState ||
+                      this.computedColor
+                    );
+                  },
+                },
+                methods: {
+                  genInput: function genInput(args) {
+                    // We can't actually use the mixin directly because
+                    // it's made for standalone components, but its
+                    // genInput method is exactly what we need
+                    return _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__[
+                      "default"
+                    ].options.methods.genInput.call(this, "radio", args);
+                  },
+                  genLabel: function genLabel() {
+                    if (!this.hasLabel) return null;
+                    return this.$createElement(
+                      _VLabel__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        on: {
+                          // Label shouldn't cause the input to focus
+                          click:
+                            _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__[
+                              "prevent"
+                            ],
+                        },
+                        attrs: {
+                          for: this.computedId,
+                        },
+                        props: {
+                          color: this.validationState,
+                          focused: this.hasState,
+                        },
+                      },
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_10__["getSlot"]
+                      )(this, "label") || this.label
+                    );
+                  },
+                  genRadio: function genRadio() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-input--selection-controls__input",
+                      },
+                      [
+                        this.$createElement(
+                          _VIcon__WEBPACK_IMPORTED_MODULE_2__["default"],
+                          this.setTextColor(this.validationState, {
+                            props: {
+                              dense: this.radioGroup && this.radioGroup.dense,
+                            },
+                          }),
+                          this.computedIcon
+                        ),
+                        this.genInput(
+                          __assign(
+                            {
+                              name: this.computedName,
+                              value: this.value,
+                            },
+                            this.attrs$
+                          )
+                        ),
+                        this.genRipple(this.setTextColor(this.rippleState)),
+                      ]
+                    );
+                  },
+                  onFocus: function onFocus(e) {
+                    this.isFocused = true;
+                    this.$emit("focus", e);
+                  },
+                  onBlur: function onBlur(e) {
+                    this.isFocused = false;
+                    this.$emit("blur", e);
+                  },
+                  onChange: function onChange() {
+                    if (this.isDisabled || this.isReadonly || this.isActive)
+                      return;
+                    this.toggle();
+                  },
+                  onKeydown: function onKeydown() {},
+                },
+                render: function render(h) {
+                  var data = {
+                    staticClass: "v-radio",
+                    class: this.classes,
+                    on: Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_12__[
+                        "mergeListeners"
+                      ]
+                    )(
+                      {
+                        click: this.onChange,
+                      },
+                      this.listeners$
+                    ),
+                  };
+                  return h("div", data, [this.genRadio(), this.genLabel()]);
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VRadioGroup/VRadioGroup.sass":
+          /*!*****************************************************!*\
+  !*** ./src/components/VRadioGroup/VRadioGroup.sass ***!
+  \*****************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VRadioGroup/VRadioGroup.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VRadioGroup/VRadioGroup.ts ***!
+  \***************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../styles/components/_selection-controls.sass */ "./src/styles/components/_selection-controls.sass"
+              );
+            /* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VRadioGroup_sass__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VRadioGroup.sass */ "./src/components/VRadioGroup/VRadioGroup.sass"
+              );
+            /* harmony import */ var _VRadioGroup_sass__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VRadioGroup_sass__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            /* harmony import */ var _mixins_comparable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/comparable */ "./src/mixins/comparable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Mixins
+
+            // Types
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"]
+            )(
+              _mixins_comparable__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__[
+                "BaseItemGroup"
+              ],
+              _VInput__WEBPACK_IMPORTED_MODULE_2__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-radio-group",
+                provide: function provide() {
+                  return {
+                    radioGroup: this,
+                  };
+                },
+                props: {
+                  column: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  height: {
+                    type: [Number, String],
+                    default: "auto",
+                  },
+                  name: String,
+                  row: Boolean,
+                  // If no value set on VRadio
+                  // will match valueComparator
+                  // force default to null
+                  value: null,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VInput__WEBPACK_IMPORTED_MODULE_2__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-input--selection-controls v-input--radio-group": true,
+                        "v-input--radio-group--column":
+                          this.column && !this.row,
+                        "v-input--radio-group--row": this.row,
+                      }
+                    );
+                  },
+                },
+                methods: {
+                  genDefaultSlot: function genDefaultSlot() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-input--radio-group__input",
+                        attrs: {
+                          id: this.id,
+                          role: "radiogroup",
+                          "aria-labelledby": this.computedId,
+                        },
+                      },
+                      _VInput__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genDefaultSlot.call(this)
+                    );
+                  },
+                  genInputSlot: function genInputSlot() {
+                    var render =
+                      _VInput__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genInputSlot.call(this);
+                    delete render.data.on.click;
+                    return render;
+                  },
+                  genLabel: function genLabel() {
+                    var label =
+                      _VInput__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genLabel.call(this);
+                    if (!label) return null;
+                    label.data.attrs.id = this.computedId; // WAI considers this an orphaned label
+
+                    delete label.data.attrs.for;
+                    label.tag = "legend";
+                    return label;
+                  },
+                  onClick:
+                    _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__[
+                      "BaseItemGroup"
+                    ].options.methods.onClick,
+                },
+              });
 
- // Mixins
-
- // Directives
+            /***/
+          },
 
- // Helpers
+        /***/ "./src/components/VRadioGroup/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VRadioGroup/index.ts ***!
+  \*********************************************/
+          /*! exports provided: VRadioGroup, VRadio, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VRadioGroup__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VRadioGroup */ "./src/components/VRadioGroup/VRadioGroup.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRadioGroup",
+              function () {
+                return _VRadioGroup__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VRadio__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VRadio */ "./src/components/VRadioGroup/VRadio.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRadio",
+              function () {
+                return _VRadio__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VRadioGroup:
+                  _VRadioGroup__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VRadio: _VRadio__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/components/VRangeSlider/VRangeSlider.sass":
+          /*!*******************************************************!*\
+  !*** ./src/components/VRangeSlider/VRangeSlider.sass ***!
+  \*******************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VRangeSlider/VRangeSlider.ts":
+          /*!*****************************************************!*\
+  !*** ./src/components/VRangeSlider/VRangeSlider.ts ***!
+  \*****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VRangeSlider_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VRangeSlider.sass */ "./src/components/VRangeSlider/VRangeSlider.sass"
+              );
+            /* harmony import */ var _VRangeSlider_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VRangeSlider_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSlider__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSlider */ "./src/components/VSlider/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-function filterFn(item, search, filter) {
-  return function (header) {
-    var value = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getObjectValueByPath"])(item, header.value);
-    return header.filter ? header.filter(value, search, item) : filter(value, search, item);
-  };
-}
+                return ar;
+              };
 
-function searchTableItems(items, search, headersWithCustomFilters, headersWithoutCustomFilters, customFilter) {
-  search = typeof search === 'string' ? search.trim() : null;
-  return items.filter(function (item) {
-    // Headers with custom filters are evaluated whether or not a search term has been provided.
-    // We need to match every filter to be included in the results.
-    var matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, _util_helpers__WEBPACK_IMPORTED_MODULE_14__["defaultFilter"])); // Headers without custom filters are only filtered by the `search` property if it is defined.
-    // We only need a single column to match the search term to be included in the results.
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-    var matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter));
-    return matchesColumnFilters && matchesSearchTerm;
-  });
-}
-/* @vue/component */
+                return ar;
+              }; // Styles
+
+            // Components
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSlider__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-range-slider",
+                props: {
+                  value: {
+                    type: Array,
+                    default: function _default() {
+                      return [0, 0];
+                    },
+                  },
+                },
+                data: function data() {
+                  return {
+                    activeThumb: null,
+                    lazyValue: this.value,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VSlider__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-input--range-slider": true,
+                      }
+                    );
+                  },
+                  internalValue: {
+                    get: function get() {
+                      return this.lazyValue;
+                    },
+                    set: function set(val) {
+                      var _this = this; // Round value to ensure the
+                      // entire slider range can
+                      // be selected with step
+
+                      var value = val.map(function (v) {
+                        if (v === void 0) {
+                          v = 0;
+                        }
+
+                        return _this.roundValue(
+                          Math.min(Math.max(v, _this.minValue), _this.maxValue)
+                        );
+                      }); // Switch values if range and wrong order
+
+                      if (value[0] > value[1] || value[1] < value[0]) {
+                        if (this.activeThumb !== null) {
+                          var toFocus = this.activeThumb === 1 ? 0 : 1;
+                          var el = this.$refs["thumb_" + toFocus];
+                          el.focus();
+                        }
+
+                        value = [value[1], value[0]];
+                      }
+
+                      this.lazyValue = value;
+                      if (
+                        !Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                            "deepEqual"
+                          ]
+                        )(value, this.value)
+                      )
+                        this.$emit("input", value);
+                      this.validate();
+                    },
+                  },
+                  inputWidth: function inputWidth() {
+                    var _this = this;
+
+                    return this.internalValue.map(function (v) {
+                      return (
+                        ((_this.roundValue(v) - _this.minValue) /
+                          (_this.maxValue - _this.minValue)) *
+                        100
+                      );
+                    });
+                  },
+                },
+                methods: {
+                  getTrackStyle: function getTrackStyle(
+                    startLength,
+                    endLength,
+                    startPadding,
+                    endPadding
+                  ) {
+                    var _a;
+
+                    if (startPadding === void 0) {
+                      startPadding = 0;
+                    }
+
+                    if (endPadding === void 0) {
+                      endPadding = 0;
+                    }
+
+                    var startDir = this.vertical
+                      ? this.$vuetify.rtl
+                        ? "top"
+                        : "bottom"
+                      : this.$vuetify.rtl
+                      ? "right"
+                      : "left";
+                    var endDir = this.vertical ? "height" : "width";
+                    var start =
+                      "calc(" + startLength + "% + " + startPadding + "px)";
+                    var end = "calc(" + endLength + "% + " + endPadding + "px)";
+                    return (
+                      (_a = {
+                        transition: this.trackTransition,
+                      }),
+                      (_a[startDir] = start),
+                      (_a[endDir] = end),
+                      _a
+                    );
+                  },
+                  getIndexOfClosestValue: function getIndexOfClosestValue(
+                    arr,
+                    v
+                  ) {
+                    if (Math.abs(arr[0] - v) < Math.abs(arr[1] - v)) return 0;
+                    else return 1;
+                  },
+                  genInput: function genInput() {
+                    var _this = this;
+
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_2__["createRange"]
+                    )(2).map(function (i) {
+                      var input =
+                        _VSlider__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.methods.genInput.call(_this);
+                      input.data = input.data || {};
+                      input.data.attrs = input.data.attrs || {};
+                      input.data.attrs.value = _this.internalValue[i];
+                      input.data.attrs.id =
+                        "input-" + (i ? "max" : "min") + "-" + _this._uid;
+                      return input;
+                    });
+                  },
+                  genTrackContainer: function genTrackContainer() {
+                    var _this = this;
+
+                    var children = [];
+                    var padding = this.isDisabled ? 10 : 0;
+                    var sections = [
+                      {
+                        class: "v-slider__track-background",
+                        color: this.computedTrackColor,
+                        styles: [0, this.inputWidth[0], 0, -padding],
+                      },
+                      {
+                        class: this.isDisabled
+                          ? "v-slider__track-background"
+                          : "v-slider__track-fill",
+                        color: this.isDisabled
+                          ? this.computedTrackColor
+                          : this.computedColor,
+                        styles: [
+                          this.inputWidth[0],
+                          Math.abs(this.inputWidth[1] - this.inputWidth[0]),
+                          padding,
+                          padding * -2,
+                        ],
+                      },
+                      {
+                        class: "v-slider__track-background",
+                        color: this.computedTrackColor,
+                        styles: [
+                          this.inputWidth[1],
+                          Math.abs(100 - this.inputWidth[1]),
+                          padding,
+                          -padding,
+                        ],
+                      },
+                    ];
+                    if (this.$vuetify.rtl) sections.reverse();
+                    children.push.apply(
+                      children,
+                      __spread(
+                        sections.map(function (section) {
+                          return _this.$createElement(
+                            "div",
+                            _this.setBackgroundColor(section.color, {
+                              staticClass: section.class,
+                              style: _this.getTrackStyle.apply(
+                                _this,
+                                __spread(section.styles)
+                              ),
+                            })
+                          );
+                        })
+                      )
+                    );
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-slider__track-container",
+                        ref: "track",
+                      },
+                      children
+                    );
+                  },
+                  genChildren: function genChildren() {
+                    var _this = this;
+
+                    return [
+                      this.genInput(),
+                      this.genTrackContainer(),
+                      this.genSteps(),
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                          "createRange"
+                        ]
+                      )(2).map(function (index) {
+                        var value = _this.internalValue[index];
+
+                        var onDrag = function onDrag(e) {
+                          _this.isActive = true;
+                          _this.activeThumb = index;
+
+                          _this.onThumbMouseDown(e);
+                        };
+
+                        var onFocus = function onFocus(e) {
+                          _this.isFocused = true;
+                          _this.activeThumb = index;
+
+                          _this.$emit("focus", e);
+                        };
+
+                        var onBlur = function onBlur(e) {
+                          _this.isFocused = false;
+                          _this.activeThumb = null;
+
+                          _this.$emit("blur", e);
+                        };
+
+                        var valueWidth = _this.inputWidth[index];
+                        var isActive =
+                          _this.isActive && _this.activeThumb === index;
+                        var isFocused =
+                          _this.isFocused && _this.activeThumb === index;
+                        return _this.genThumbContainer(
+                          value,
+                          valueWidth,
+                          isActive,
+                          isFocused,
+                          onDrag,
+                          onFocus,
+                          onBlur,
+                          "thumb_" + index
+                        );
+                      }),
+                    ];
+                  },
+                  onSliderClick: function onSliderClick(e) {
+                    if (!this.isActive) {
+                      if (this.noClick) {
+                        this.noClick = false;
+                        return;
+                      }
+
+                      var _a = this.parseMouseMove(e),
+                        value = _a.value,
+                        isInsideTrack = _a.isInsideTrack;
+
+                      if (isInsideTrack) {
+                        this.activeThumb = this.getIndexOfClosestValue(
+                          this.internalValue,
+                          value
+                        );
+                        var refName = "thumb_" + this.activeThumb;
+                        var thumbRef = this.$refs[refName];
+                        thumbRef.focus();
+                      }
+
+                      this.setInternalValue(value);
+                      this.$emit("change", this.internalValue);
+                    }
+                  },
+                  onMouseMove: function onMouseMove(e) {
+                    var _a = this.parseMouseMove(e),
+                      value = _a.value,
+                      isInsideTrack = _a.isInsideTrack;
+
+                    if (isInsideTrack && this.activeThumb === null) {
+                      this.activeThumb = this.getIndexOfClosestValue(
+                        this.internalValue,
+                        value
+                      );
+                    }
+
+                    this.setInternalValue(value);
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    if (this.activeThumb === null) return;
+                    var value = this.parseKeyDown(
+                      e,
+                      this.internalValue[this.activeThumb]
+                    );
+                    if (value == null) return;
+                    this.setInternalValue(value);
+                    this.$emit("change", this.internalValue);
+                  },
+                  setInternalValue: function setInternalValue(value) {
+                    var _this = this;
+
+                    this.internalValue = this.internalValue.map(function (
+                      v,
+                      i
+                    ) {
+                      if (i === _this.activeThumb) return value;
+                      else return Number(v);
+                    });
+                  },
+                },
+              });
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_13__["default"])(_VDataIterator__WEBPACK_IMPORTED_MODULE_2__["VDataIterator"], _mixins_loadable__WEBPACK_IMPORTED_MODULE_11__["default"]).extend({
-  name: 'v-data-table',
-  // https://github.com/vuejs/vue/issues/6872
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_12__["default"]
-  },
-  props: {
-    headers: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    showSelect: Boolean,
-    showExpand: Boolean,
-    showGroupBy: Boolean,
-    // TODO: Fix
-    // virtualRows: Boolean,
-    height: [Number, String],
-    hideDefaultHeader: Boolean,
-    caption: String,
-    dense: Boolean,
-    headerProps: Object,
-    calculateWidths: Boolean,
-    fixedHeader: Boolean,
-    headersLength: Number,
-    expandIcon: {
-      type: String,
-      default: '$expand'
-    },
-    customFilter: {
-      type: Function,
-      default: _util_helpers__WEBPACK_IMPORTED_MODULE_14__["defaultFilter"]
-    },
-    itemClass: {
-      type: [String, Function],
-      default: function _default() {
-        return '';
-      }
-    },
-    loaderHeight: {
-      type: [Number, String],
-      default: 4
-    }
-  },
-  data: function data() {
-    return {
-      internalGroupBy: [],
-      openCache: {},
-      widths: []
-    };
-  },
-  computed: {
-    computedHeaders: function computedHeaders() {
-      var _this = this;
-
-      if (!this.headers) return [];
-      var headers = this.headers.filter(function (h) {
-        return h.value === undefined || !_this.internalGroupBy.find(function (v) {
-          return v === h.value;
-        });
-      });
-      var defaultHeader = {
-        text: '',
-        sortable: false,
-        width: '1px'
-      };
+        /***/ "./src/components/VRangeSlider/index.ts":
+          /*!**********************************************!*\
+  !*** ./src/components/VRangeSlider/index.ts ***!
+  \**********************************************/
+          /*! exports provided: VRangeSlider, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VRangeSlider__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VRangeSlider */ "./src/components/VRangeSlider/VRangeSlider.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRangeSlider",
+              function () {
+                return _VRangeSlider__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      if (this.showSelect) {
-        var index = headers.findIndex(function (h) {
-          return h.value === 'data-table-select';
-        });
-        if (index < 0) headers.unshift(__assign(__assign({}, defaultHeader), {
-          value: 'data-table-select'
-        }));else headers.splice(index, 1, __assign(__assign({}, defaultHeader), headers[index]));
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VRangeSlider__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      if (this.showExpand) {
-        var index = headers.findIndex(function (h) {
-          return h.value === 'data-table-expand';
-        });
-        if (index < 0) headers.unshift(__assign(__assign({}, defaultHeader), {
-          value: 'data-table-expand'
-        }));else headers.splice(index, 1, __assign(__assign({}, defaultHeader), headers[index]));
-      }
+            /***/
+          },
 
-      return headers;
-    },
-    colspanAttrs: function colspanAttrs() {
-      return this.isMobile ? undefined : {
-        colspan: this.headersLength || this.computedHeaders.length
-      };
-    },
-    columnSorters: function columnSorters() {
-      return this.computedHeaders.reduce(function (acc, header) {
-        if (header.sort) acc[header.value] = header.sort;
-        return acc;
-      }, {});
-    },
-    headersWithCustomFilters: function headersWithCustomFilters() {
-      return this.headers.filter(function (header) {
-        return header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true);
-      });
-    },
-    headersWithoutCustomFilters: function headersWithoutCustomFilters() {
-      return this.headers.filter(function (header) {
-        return !header.filter && (!header.hasOwnProperty('filterable') || header.filterable === true);
-      });
-    },
-    sanitizedHeaderProps: function sanitizedHeaderProps() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["camelizeObjectKeys"])(this.headerProps);
-    },
-    computedItemsPerPage: function computedItemsPerPage() {
-      var itemsPerPage = this.options && this.options.itemsPerPage ? this.options.itemsPerPage : this.itemsPerPage;
-      var itemsPerPageOptions = this.sanitizedFooterProps.itemsPerPageOptions;
-
-      if (itemsPerPageOptions && !itemsPerPageOptions.find(function (item) {
-        return typeof item === 'number' ? item === itemsPerPage : item.value === itemsPerPage;
-      })) {
-        var firstOption = itemsPerPageOptions[0];
-        return _typeof(firstOption) === 'object' ? firstOption.value : firstOption;
-      }
+        /***/ "./src/components/VRating/VRating.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VRating/VRating.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      return itemsPerPage;
-    }
-  },
-  created: function created() {
-    var _this = this;
-
-    var breakingProps = [['sort-icon', 'header-props.sort-icon'], ['hide-headers', 'hide-default-header'], ['select-all', 'show-select']];
-    /* istanbul ignore next */
-
-    breakingProps.forEach(function (_a) {
-      var _b = __read(_a, 2),
-          original = _b[0],
-          replacement = _b[1];
-
-      if (_this.$attrs.hasOwnProperty(original)) Object(_util_console__WEBPACK_IMPORTED_MODULE_15__["breaking"])(original, replacement, _this);
-    });
-  },
-  mounted: function mounted() {
-    // if ((!this.sortBy || !this.sortBy.length) && (!this.options.sortBy || !this.options.sortBy.length)) {
-    //   const firstSortable = this.headers.find(h => !('sortable' in h) || !!h.sortable)
-    //   if (firstSortable) this.updateOptions({ sortBy: [firstSortable.value], sortDesc: [false] })
-    // }
-    if (this.calculateWidths) {
-      window.addEventListener('resize', this.calcWidths);
-      this.calcWidths();
-    }
-  },
-  beforeDestroy: function beforeDestroy() {
-    if (this.calculateWidths) {
-      window.removeEventListener('resize', this.calcWidths);
-    }
-  },
-  methods: {
-    calcWidths: function calcWidths() {
-      this.widths = Array.from(this.$el.querySelectorAll('th')).map(function (e) {
-        return e.clientWidth;
-      });
-    },
-    customFilterWithColumns: function customFilterWithColumns(items, search) {
-      return searchTableItems(items, search, this.headersWithCustomFilters, this.headersWithoutCustomFilters, this.customFilter);
-    },
-    customSortWithHeaders: function customSortWithHeaders(items, sortBy, sortDesc, locale) {
-      return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters);
-    },
-    createItemProps: function createItemProps(item) {
-      var props = _VDataIterator__WEBPACK_IMPORTED_MODULE_2__["VDataIterator"].options.methods.createItemProps.call(this, item);
-      return Object.assign(props, {
-        headers: this.computedHeaders
-      });
-    },
-    genCaption: function genCaption(props) {
-      if (this.caption) return [this.$createElement('caption', [this.caption])];
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"])(this, 'caption', props, true);
-    },
-    genColgroup: function genColgroup(props) {
-      var _this = this;
-
-      return this.$createElement('colgroup', this.computedHeaders.map(function (header) {
-        return _this.$createElement('col', {
-          class: {
-            divider: header.divider
-          }
-        });
-      }));
-    },
-    genLoading: function genLoading() {
-      var th = this.$createElement('th', {
-        staticClass: 'column',
-        attrs: this.colspanAttrs
-      }, [this.genProgress()]);
-      var tr = this.$createElement('tr', {
-        staticClass: 'v-data-table__progress'
-      }, [th]);
-      return this.$createElement('thead', [tr]);
-    },
-    genHeaders: function genHeaders(props) {
-      var data = {
-        props: __assign(__assign({}, this.sanitizedHeaderProps), {
-          headers: this.computedHeaders,
-          options: props.options,
-          mobile: this.isMobile,
-          showGroupBy: this.showGroupBy,
-          someItems: this.someItems,
-          everyItem: this.everyItem,
-          singleSelect: this.singleSelect,
-          disableSort: this.disableSort
-        }),
-        on: {
-          sort: props.sort,
-          group: props.group,
-          'toggle-select-all': this.toggleSelectAll
-        }
-      };
-      var children = [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"])(this, 'header', data)];
+        /***/ "./src/components/VRating/VRating.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VRating/VRating.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VRating_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VRating.sass */ "./src/components/VRating/VRating.sass"
+              );
+            /* harmony import */ var _VRating_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VRating_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts"
+              );
+            /* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts"
+              );
+            /* harmony import */ var _mixins_rippleable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/rippleable */ "./src/mixins/rippleable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Styles
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_rippleable__WEBPACK_IMPORTED_MODULE_5__["default"],
+                _mixins_sizeable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]
+              ).extend({
+                name: "v-rating",
+                props: {
+                  backgroundColor: {
+                    type: String,
+                    default: "accent",
+                  },
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  clearable: Boolean,
+                  dense: Boolean,
+                  emptyIcon: {
+                    type: String,
+                    default: "$ratingEmpty",
+                  },
+                  fullIcon: {
+                    type: String,
+                    default: "$ratingFull",
+                  },
+                  halfIcon: {
+                    type: String,
+                    default: "$ratingHalf",
+                  },
+                  halfIncrements: Boolean,
+                  hover: Boolean,
+                  length: {
+                    type: [Number, String],
+                    default: 5,
+                  },
+                  readonly: Boolean,
+                  size: [Number, String],
+                  value: {
+                    type: Number,
+                    default: 0,
+                  },
+                  iconLabel: {
+                    type: String,
+                    default: "$vuetify.rating.ariaLabel.icon",
+                  },
+                },
+                data: function data() {
+                  return {
+                    hoverIndex: -1,
+                    internalValue: this.value,
+                  };
+                },
+                computed: {
+                  directives: function directives() {
+                    if (this.readonly || !this.ripple) return [];
+                    return [
+                      {
+                        name: "ripple",
+                        value: {
+                          circle: true,
+                        },
+                      },
+                    ];
+                  },
+                  iconProps: function iconProps() {
+                    var _a = this.$props,
+                      dark = _a.dark,
+                      large = _a.large,
+                      light = _a.light,
+                      medium = _a.medium,
+                      small = _a.small,
+                      size = _a.size,
+                      xLarge = _a.xLarge,
+                      xSmall = _a.xSmall;
+                    return {
+                      dark: dark,
+                      large: large,
+                      light: light,
+                      medium: medium,
+                      size: size,
+                      small: small,
+                      xLarge: xLarge,
+                      xSmall: xSmall,
+                    };
+                  },
+                  isHovering: function isHovering() {
+                    return this.hover && this.hoverIndex >= 0;
+                  },
+                },
+                watch: {
+                  internalValue: function internalValue(val) {
+                    val !== this.value && this.$emit("input", val);
+                  },
+                  value: function value(val) {
+                    this.internalValue = val;
+                  },
+                },
+                methods: {
+                  createClickFn: function createClickFn(i) {
+                    var _this = this;
+
+                    return function (e) {
+                      if (_this.readonly) return;
+
+                      var newValue = _this.genHoverIndex(e, i);
+
+                      if (_this.clearable && _this.internalValue === newValue) {
+                        _this.internalValue = 0;
+                      } else {
+                        _this.internalValue = newValue;
+                      }
+                    };
+                  },
+                  createProps: function createProps(i) {
+                    var props = {
+                      index: i,
+                      value: this.internalValue,
+                      click: this.createClickFn(i),
+                      isFilled: Math.floor(this.internalValue) > i,
+                      isHovered: Math.floor(this.hoverIndex) > i,
+                    };
+
+                    if (this.halfIncrements) {
+                      props.isHalfHovered =
+                        !props.isHovered && (this.hoverIndex - i) % 1 > 0;
+                      props.isHalfFilled =
+                        !props.isFilled && (this.internalValue - i) % 1 > 0;
+                    }
+
+                    return props;
+                  },
+                  genHoverIndex: function genHoverIndex(e, i) {
+                    var isHalf = this.isHalfEvent(e);
+
+                    if (this.halfIncrements && this.$vuetify.rtl) {
+                      isHalf = !isHalf;
+                    }
+
+                    return i + (isHalf ? 0.5 : 1);
+                  },
+                  getIconName: function getIconName(props) {
+                    var isFull = this.isHovering
+                      ? props.isHovered
+                      : props.isFilled;
+                    var isHalf = this.isHovering
+                      ? props.isHalfHovered
+                      : props.isHalfFilled;
+                    return isFull
+                      ? this.fullIcon
+                      : isHalf
+                      ? this.halfIcon
+                      : this.emptyIcon;
+                  },
+                  getColor: function getColor(props) {
+                    if (this.isHovering) {
+                      if (props.isHovered || props.isHalfHovered)
+                        return this.color;
+                    } else {
+                      if (props.isFilled || props.isHalfFilled)
+                        return this.color;
+                    }
+
+                    return this.backgroundColor;
+                  },
+                  isHalfEvent: function isHalfEvent(e) {
+                    if (this.halfIncrements) {
+                      var rect = e.target && e.target.getBoundingClientRect();
+                      if (rect && e.pageX - rect.left < rect.width / 2)
+                        return true;
+                    }
+
+                    return false;
+                  },
+                  onMouseEnter: function onMouseEnter(e, i) {
+                    var _this = this;
+
+                    this.runDelay("open", function () {
+                      _this.hoverIndex = _this.genHoverIndex(e, i);
+                    });
+                  },
+                  onMouseLeave: function onMouseLeave() {
+                    var _this = this;
+
+                    this.runDelay("close", function () {
+                      return (_this.hoverIndex = -1);
+                    });
+                  },
+                  genItem: function genItem(i) {
+                    var _this = this;
+
+                    var props = this.createProps(i);
+                    if (this.$scopedSlots.item)
+                      return this.$scopedSlots.item(props);
+                    var listeners = {
+                      click: props.click,
+                    };
+
+                    if (this.hover) {
+                      listeners.mouseenter = function (e) {
+                        return _this.onMouseEnter(e, i);
+                      };
+
+                      listeners.mouseleave = this.onMouseLeave;
+
+                      if (this.halfIncrements) {
+                        listeners.mousemove = function (e) {
+                          return _this.onMouseEnter(e, i);
+                        };
+                      }
+                    }
+
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      this.setTextColor(this.getColor(props), {
+                        attrs: {
+                          tabindex: -1,
+                          "aria-label": this.$vuetify.lang.t(
+                            this.iconLabel,
+                            i + 1,
+                            Number(this.length)
+                          ),
+                        },
+                        directives: this.directives,
+                        props: this.iconProps,
+                        on: listeners,
+                      }),
+                      [this.getIconName(props)]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var children = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_7__["createRange"]
+                  )(Number(this.length)).map(function (i) {
+                    return _this.genItem(i);
+                  });
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-rating",
+                      class: {
+                        "v-rating--readonly": this.readonly,
+                        "v-rating--dense": this.dense,
+                      },
+                    },
+                    children
+                  );
+                },
+              });
 
-      if (!this.hideDefaultHeader) {
-        var scopedSlots = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getPrefixedScopedSlots"])('header.', this.$scopedSlots);
-        children.push(this.$createElement(_VDataTableHeader__WEBPACK_IMPORTED_MODULE_4__["default"], __assign(__assign({}, data), {
-          scopedSlots: scopedSlots
-        })));
-      }
+            /***/
+          },
 
-      if (this.loading) children.push(this.genLoading());
-      return children;
-    },
-    genEmptyWrapper: function genEmptyWrapper(content) {
-      return this.$createElement('tr', {
-        staticClass: 'v-data-table__empty-wrapper'
-      }, [this.$createElement('td', {
-        attrs: this.colspanAttrs
-      }, content)]);
-    },
-    genItems: function genItems(items, props) {
-      var empty = this.genEmpty(props.originalItemsLength, props.pagination.itemsLength);
-      if (empty) return [empty];
-      return props.groupedItems ? this.genGroupedRows(props.groupedItems, props) : this.genRows(items, props);
-    },
-    genGroupedRows: function genGroupedRows(groupedItems, props) {
-      var _this = this;
-
-      return groupedItems.map(function (group) {
-        if (!_this.openCache.hasOwnProperty(group.name)) _this.$set(_this.openCache, group.name, true);
-
-        if (_this.$scopedSlots.group) {
-          return _this.$scopedSlots.group({
-            group: group.name,
-            options: props.options,
-            items: group.items,
-            headers: _this.computedHeaders
-          });
-        } else {
-          return _this.genDefaultGroupedRow(group.name, group.items, props);
-        }
-      });
-    },
-    genDefaultGroupedRow: function genDefaultGroupedRow(group, items, props) {
-      var _this = this;
-
-      var isOpen = !!this.openCache[group];
-      var children = [this.$createElement('template', {
-        slot: 'row.content'
-      }, this.genRows(items, props))];
-
-      var toggleFn = function toggleFn() {
-        return _this.$set(_this.openCache, group, !_this.openCache[group]);
-      };
+        /***/ "./src/components/VRating/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VRating/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VRating, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VRating__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VRating */ "./src/components/VRating/VRating.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRating",
+              function () {
+                return _VRating__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      var removeFn = function removeFn() {
-        return props.updateOptions({
-          groupBy: [],
-          groupDesc: []
-        });
-      };
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VRating__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      if (this.$scopedSlots['group.header']) {
-        children.unshift(this.$createElement('template', {
-          slot: 'column.header'
-        }, [this.$scopedSlots['group.header']({
-          group: group,
-          groupBy: props.options.groupBy,
-          items: items,
-          headers: this.computedHeaders,
-          isOpen: isOpen,
-          toggle: toggleFn,
-          remove: removeFn
-        })]));
-      } else {
-        var toggle = this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_3__["default"], {
-          staticClass: 'ma-0',
-          props: {
-            icon: true,
-            small: true
-          },
-          on: {
-            click: toggleFn
-          }
-        }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_5__["default"], [isOpen ? '$minus' : '$plus'])]);
-        var remove = this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_3__["default"], {
-          staticClass: 'ma-0',
-          props: {
-            icon: true,
-            small: true
-          },
-          on: {
-            click: removeFn
-          }
-        }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_5__["default"], ['$close'])]);
-        var column = this.$createElement('td', {
-          staticClass: 'text-start',
-          attrs: this.colspanAttrs
-        }, [toggle, props.options.groupBy[0] + ": " + group, remove]);
-        children.unshift(this.$createElement('template', {
-          slot: 'column.header'
-        }, [column]));
-      }
+            /***/
+          },
 
-      if (this.$scopedSlots['group.summary']) {
-        children.push(this.$createElement('template', {
-          slot: 'column.summary'
-        }, [this.$scopedSlots['group.summary']({
-          group: group,
-          groupBy: props.options.groupBy,
-          items: items,
-          headers: this.computedHeaders,
-          isOpen: isOpen,
-          toggle: toggleFn
-        })]));
-      }
+        /***/ "./src/components/VResponsive/VResponsive.sass":
+          /*!*****************************************************!*\
+  !*** ./src/components/VResponsive/VResponsive.sass ***!
+  \*****************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      return this.$createElement(_RowGroup__WEBPACK_IMPORTED_MODULE_7__["default"], {
-        key: group,
-        props: {
-          value: isOpen
-        }
-      }, children);
-    },
-    genRows: function genRows(items, props) {
-      return this.$scopedSlots.item ? this.genScopedRows(items, props) : this.genDefaultRows(items, props);
-    },
-    genScopedRows: function genScopedRows(items, props) {
-      var rows = [];
-
-      for (var i = 0; i < items.length; i++) {
-        var item = items[i];
-        rows.push(this.$scopedSlots.item(__assign(__assign({}, this.createItemProps(item)), {
-          index: i
-        })));
-
-        if (this.isExpanded(item)) {
-          rows.push(this.$scopedSlots['expanded-item']({
-            item: item,
-            headers: this.computedHeaders
-          }));
-        }
-      }
+        /***/ "./src/components/VResponsive/VResponsive.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VResponsive/VResponsive.ts ***!
+  \***************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VResponsive_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VResponsive.sass */ "./src/components/VResponsive/VResponsive.sass"
+              );
+            /* harmony import */ var _VResponsive_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VResponsive_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+
+            // Utils
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _mixins_measurable__WEBPACK_IMPORTED_MODULE_1__["default"]
+              ).extend({
+                name: "v-responsive",
+                props: {
+                  aspectRatio: [String, Number],
+                },
+                computed: {
+                  computedAspectRatio: function computedAspectRatio() {
+                    return Number(this.aspectRatio);
+                  },
+                  aspectStyle: function aspectStyle() {
+                    return this.computedAspectRatio
+                      ? {
+                          paddingBottom:
+                            (1 / this.computedAspectRatio) * 100 + "%",
+                        }
+                      : undefined;
+                  },
+                  __cachedSizer: function __cachedSizer() {
+                    if (!this.aspectStyle) return [];
+                    return this.$createElement("div", {
+                      style: this.aspectStyle,
+                      staticClass: "v-responsive__sizer",
+                    });
+                  },
+                },
+                methods: {
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-responsive__content",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-responsive",
+                      style: this.measurableStyles,
+                      on: this.$listeners,
+                    },
+                    [this.__cachedSizer, this.genContent()]
+                  );
+                },
+              });
 
-      return rows;
-    },
-    genDefaultRows: function genDefaultRows(items, props) {
-      var _this = this;
-
-      return this.$scopedSlots['expanded-item'] ? items.map(function (item) {
-        return _this.genDefaultExpandedRow(item);
-      }) : items.map(function (item) {
-        return _this.genDefaultSimpleRow(item);
-      });
-    },
-    genDefaultExpandedRow: function genDefaultExpandedRow(item) {
-      var isExpanded = this.isExpanded(item);
-      var classes = {
-        'v-data-table__expanded v-data-table__expanded__row': isExpanded
-      };
-      var headerRow = this.genDefaultSimpleRow(item, classes);
-      var expandedRow = this.$createElement('tr', {
-        staticClass: 'v-data-table__expanded v-data-table__expanded__content'
-      }, [this.$scopedSlots['expanded-item']({
-        item: item,
-        headers: this.computedHeaders
-      })]);
-      return this.$createElement(_RowGroup__WEBPACK_IMPORTED_MODULE_7__["default"], {
-        props: {
-          value: isExpanded
-        }
-      }, [this.$createElement('template', {
-        slot: 'row.header'
-      }, [headerRow]), this.$createElement('template', {
-        slot: 'row.content'
-      }, [expandedRow])]);
-    },
-    genDefaultSimpleRow: function genDefaultSimpleRow(item, classes) {
-      var _this = this;
-
-      if (classes === void 0) {
-        classes = {};
-      }
+            /***/
+          },
 
-      var scopedSlots = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getPrefixedScopedSlots"])('item.', this.$scopedSlots);
-      var data = this.createItemProps(item);
-
-      if (this.showSelect) {
-        var slot_1 = scopedSlots['data-table-select'];
-        scopedSlots['data-table-select'] = slot_1 ? function () {
-          return slot_1(data);
-        } : function () {
-          return _this.$createElement(_VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_8__["default"], {
-            staticClass: 'v-data-table__checkbox',
-            props: {
-              value: data.isSelected,
-              disabled: !_this.isSelectable(item)
-            },
-            on: {
-              input: function input(val) {
-                return data.select(val);
+        /***/ "./src/components/VResponsive/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VResponsive/index.ts ***!
+  \*********************************************/
+          /*! exports provided: VResponsive, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VResponsive__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VResponsive */ "./src/components/VResponsive/VResponsive.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VResponsive",
+              function () {
+                return _VResponsive__WEBPACK_IMPORTED_MODULE_0__["default"];
               }
-            }
-          });
-        };
-      }
+            );
 
-      if (this.showExpand) {
-        var slot_2 = scopedSlots['data-table-expand'];
-        scopedSlots['data-table-expand'] = slot_2 ? function () {
-          return slot_2(data);
-        } : function () {
-          return _this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_5__["default"], {
-            staticClass: 'v-data-table__expand-icon',
-            class: {
-              'v-data-table__expand-icon--active': data.isExpanded
-            },
-            on: {
-              click: function click(e) {
-                e.stopPropagation();
-                data.expand(!data.isExpanded);
-              }
-            }
-          }, [_this.expandIcon]);
-        };
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VResponsive__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      return this.$createElement(this.isMobile ? _MobileRow__WEBPACK_IMPORTED_MODULE_10__["default"] : _Row__WEBPACK_IMPORTED_MODULE_6__["default"], {
-        key: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getObjectValueByPath"])(item, this.itemKey),
-        class: Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_16__["mergeClasses"])(__assign(__assign({}, classes), {
-          'v-data-table__selected': data.isSelected
-        }), Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getPropertyFromItem"])(item, this.itemClass)),
-        props: {
-          headers: this.computedHeaders,
-          hideDefaultHeader: this.hideDefaultHeader,
-          item: item,
-          rtl: this.$vuetify.rtl
-        },
-        scopedSlots: scopedSlots,
-        on: {
-          // TODO: for click, the first argument should be the event, and the second argument should be data,
-          // but this is a breaking change so it's for v3
-          click: function click() {
-            return _this.$emit('click:row', item, data);
-          },
-          contextmenu: function contextmenu(event) {
-            return _this.$emit('contextmenu:row', event, data);
-          },
-          dblclick: function dblclick(event) {
-            return _this.$emit('dblclick:row', event, data);
-          }
-        }
-      });
-    },
-    genBody: function genBody(props) {
-      var data = __assign(__assign({}, props), {
-        expand: this.expand,
-        headers: this.computedHeaders,
-        isExpanded: this.isExpanded,
-        isMobile: this.isMobile,
-        isSelected: this.isSelected,
-        select: this.select
-      });
-
-      if (this.$scopedSlots.body) {
-        return this.$scopedSlots.body(data);
-      }
+            /***/
+          },
 
-      return this.$createElement('tbody', [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"])(this, 'body.prepend', data, true), this.genItems(props.items, props), Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"])(this, 'body.append', data, true)]);
-    },
-    genFooters: function genFooters(props) {
-      var data = {
-        props: __assign({
-          options: props.options,
-          pagination: props.pagination,
-          itemsPerPageText: '$vuetify.dataTable.itemsPerPageText'
-        }, this.sanitizedFooterProps),
-        on: {
-          'update:options': function updateOptions(value) {
-            return props.updateOptions(value);
-          }
-        },
-        widths: this.widths,
-        headers: this.computedHeaders
-      };
-      var children = [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"])(this, 'footer', data, true)];
+        /***/ "./src/components/VSelect/VSelect.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VSelect/VSelect.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (!this.hideDefaultFooter) {
-        children.push(this.$createElement(_VDataIterator__WEBPACK_IMPORTED_MODULE_2__["VDataFooter"], __assign(__assign({}, data), {
-          scopedSlots: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getPrefixedScopedSlots"])('footer.', this.$scopedSlots)
-        })));
-      }
+        /***/ "./src/components/VSelect/VSelect.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VSelect/VSelect.ts ***!
+  \*******************************************/
+          /*! exports provided: defaultMenuProps, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "defaultMenuProps",
+              function () {
+                return defaultMenuProps;
+              }
+            );
+            /* harmony import */ var _VTextField_VTextField_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VTextField/VTextField.sass */ "./src/components/VTextField/VTextField.sass"
+              );
+            /* harmony import */ var _VTextField_VTextField_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTextField_VTextField_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSelect_sass__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VSelect.sass */ "./src/components/VSelect/VSelect.sass"
+              );
+            /* harmony import */ var _VSelect_sass__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSelect_sass__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VChip */ "./src/components/VChip/index.ts"
+              );
+            /* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VMenu */ "./src/components/VMenu/index.ts"
+              );
+            /* harmony import */ var _VSelectList__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VSelectList */ "./src/components/VSelect/VSelectList.ts"
+              );
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts"
+              );
+            /* harmony import */ var _mixins_comparable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/comparable */ "./src/mixins/comparable/index.ts"
+              );
+            /* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts"
+              );
+            /* harmony import */ var _mixins_filterable__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../mixins/filterable */ "./src/mixins/filterable/index.ts"
+              );
+            /* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts"
+              );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_13__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_14__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      return children;
-    },
-    genDefaultScopedSlot: function genDefaultScopedSlot(props) {
-      var simpleProps = {
-        height: this.height,
-        fixedHeader: this.fixedHeader,
-        dense: this.dense
-      }; // if (this.virtualRows) {
-      //   return this.$createElement(VVirtualTable, {
-      //     props: Object.assign(simpleProps, {
-      //       items: props.items,
-      //       height: this.height,
-      //       rowHeight: this.dense ? 24 : 48,
-      //       headerHeight: this.dense ? 32 : 48,
-      //       // TODO: expose rest of props from virtual table?
-      //     }),
-      //     scopedSlots: {
-      //       items: ({ items }) => this.genItems(items, props) as any,
-      //     },
-      //   }, [
-      //     this.proxySlot('body.before', [this.genCaption(props), this.genHeaders(props)]),
-      //     this.proxySlot('bottom', this.genFooters(props)),
-      //   ])
-      // }
-
-      return this.$createElement(_VSimpleTable__WEBPACK_IMPORTED_MODULE_9__["default"], {
-        props: simpleProps
-      }, [this.proxySlot('top', Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["getSlot"])(this, 'top', props, true)), this.genCaption(props), this.genColgroup(props), this.genHeaders(props), this.genBody(props), this.proxySlot('bottom', this.genFooters(props))]);
-    },
-    proxySlot: function proxySlot(slot, content) {
-      return this.$createElement('template', {
-        slot: slot
-      }, content);
-    }
-  },
-  render: function render() {
-    var _this = this;
-
-    return this.$createElement(_VData__WEBPACK_IMPORTED_MODULE_1__["VData"], {
-      props: __assign(__assign({}, this.$props), {
-        customFilter: this.customFilterWithColumns,
-        customSort: this.customSortWithHeaders,
-        itemsPerPage: this.computedItemsPerPage
-      }),
-      on: {
-        'update:options': function updateOptions(v, old) {
-          _this.internalGroupBy = v.groupBy || [];
-          !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["deepEqual"])(v, old) && _this.$emit('update:options', v);
-        },
-        'update:page': function updatePage(v) {
-          return _this.$emit('update:page', v);
-        },
-        'update:items-per-page': function updateItemsPerPage(v) {
-          return _this.$emit('update:items-per-page', v);
-        },
-        'update:sort-by': function updateSortBy(v) {
-          return _this.$emit('update:sort-by', v);
-        },
-        'update:sort-desc': function updateSortDesc(v) {
-          return _this.$emit('update:sort-desc', v);
-        },
-        'update:group-by': function updateGroupBy(v) {
-          return _this.$emit('update:group-by', v);
-        },
-        'update:group-desc': function updateGroupDesc(v) {
-          return _this.$emit('update:group-desc', v);
-        },
-        pagination: function pagination(v, old) {
-          return !Object(_util_helpers__WEBPACK_IMPORTED_MODULE_14__["deepEqual"])(v, old) && _this.$emit('pagination', v);
-        },
-        'current-items': function currentItems(v) {
-          _this.internalCurrentItems = v;
-
-          _this.$emit('current-items', v);
-        },
-        'page-count': function pageCount(v) {
-          return _this.$emit('page-count', v);
-        }
-      },
-      scopedSlots: {
-        default: this.genDefaultScopedSlot
-      }
-    });
-  }
-}));
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              }; // Styles
+
+            // Components
+
+            // Extensions
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            // Types
+
+            var defaultMenuProps = {
+              closeOnClick: false,
+              closeOnContentClick: false,
+              disableKeys: true,
+              openOnClick: false,
+              maxHeight: 304,
+            }; // Types
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_14__["default"]
+            )(
+              _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__["default"],
+              _mixins_comparable__WEBPACK_IMPORTED_MODULE_7__["default"],
+              _mixins_dependent__WEBPACK_IMPORTED_MODULE_8__["default"],
+              _mixins_filterable__WEBPACK_IMPORTED_MODULE_9__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-select",
+                directives: {
+                  ClickOutside:
+                    _directives_click_outside__WEBPACK_IMPORTED_MODULE_10__[
+                      "default"
+                    ],
+                },
+                props: {
+                  appendIcon: {
+                    type: String,
+                    default: "$dropdown",
+                  },
+                  attach: {
+                    type: null,
+                    default: false,
+                  },
+                  cacheItems: Boolean,
+                  chips: Boolean,
+                  clearable: Boolean,
+                  deletableChips: Boolean,
+                  disableLookup: Boolean,
+                  eager: Boolean,
+                  hideSelected: Boolean,
+                  items: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  itemColor: {
+                    type: String,
+                    default: "primary",
+                  },
+                  itemDisabled: {
+                    type: [String, Array, Function],
+                    default: "disabled",
+                  },
+                  itemText: {
+                    type: [String, Array, Function],
+                    default: "text",
+                  },
+                  itemValue: {
+                    type: [String, Array, Function],
+                    default: "value",
+                  },
+                  menuProps: {
+                    type: [String, Array, Object],
+                    default: function _default() {
+                      return defaultMenuProps;
+                    },
+                  },
+                  multiple: Boolean,
+                  openOnClear: Boolean,
+                  returnObject: Boolean,
+                  smallChips: Boolean,
+                },
+                data: function data() {
+                  return {
+                    cachedItems: this.cacheItems ? this.items : [],
+                    menuIsBooted: false,
+                    isMenuActive: false,
+                    lastItem: 20,
+                    // As long as a value is defined, show it
+                    // Otherwise, check if multiple
+                    // to determine which default to provide
+                    lazyValue:
+                      this.value !== undefined
+                        ? this.value
+                        : this.multiple
+                        ? []
+                        : undefined,
+                    selectedIndex: -1,
+                    selectedItems: [],
+                    keyboardLookupPrefix: "",
+                    keyboardLookupLastTime: 0,
+                  };
+                },
+                computed: {
+                  /* All items that the select has */
+                  allItems: function allItems() {
+                    return this.filterDuplicates(
+                      this.cachedItems.concat(this.items)
+                    );
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-select": true,
+                        "v-select--chips": this.hasChips,
+                        "v-select--chips--small": this.smallChips,
+                        "v-select--is-menu-active": this.isMenuActive,
+                        "v-select--is-multi": this.multiple,
+                      }
+                    );
+                  },
+
+                  /* Used by other components to overwrite */
+                  computedItems: function computedItems() {
+                    return this.allItems;
+                  },
+                  computedOwns: function computedOwns() {
+                    return "list-" + this._uid;
+                  },
+                  computedCounterValue: function computedCounterValue() {
+                    return this.multiple
+                      ? this.selectedItems.length
+                      : (this.getText(this.selectedItems[0]) || "").toString()
+                          .length;
+                  },
+                  directives: function directives() {
+                    var _this = this;
+
+                    return this.isFocused
+                      ? [
+                          {
+                            name: "click-outside",
+                            value: {
+                              handler: this.blur,
+                              closeConditional: this.closeConditional,
+                              include: function include() {
+                                return _this.getOpenDependentElements();
+                              },
+                            },
+                          },
+                        ]
+                      : undefined;
+                  },
+                  dynamicHeight: function dynamicHeight() {
+                    return "auto";
+                  },
+                  hasChips: function hasChips() {
+                    return this.chips || this.smallChips;
+                  },
+                  hasSlot: function hasSlot() {
+                    return Boolean(
+                      this.hasChips || this.$scopedSlots.selection
+                    );
+                  },
+                  isDirty: function isDirty() {
+                    return this.selectedItems.length > 0;
+                  },
+                  listData: function listData() {
+                    var _a;
+
+                    var scopeId =
+                      this.$vnode && this.$vnode.context.$options._scopeId;
+                    var attrs = scopeId
+                      ? ((_a = {}), (_a[scopeId] = true), _a)
+                      : {};
+                    return {
+                      attrs: __assign(__assign({}, attrs), {
+                        id: this.computedOwns,
+                      }),
+                      props: {
+                        action: this.multiple,
+                        color: this.itemColor,
+                        dense: this.dense,
+                        hideSelected: this.hideSelected,
+                        items: this.virtualizedItems,
+                        itemDisabled: this.itemDisabled,
+                        itemText: this.itemText,
+                        itemValue: this.itemValue,
+                        noDataText: this.$vuetify.lang.t(this.noDataText),
+                        selectedItems: this.selectedItems,
+                      },
+                      on: {
+                        select: this.selectItem,
+                      },
+                      scopedSlots: {
+                        item: this.$scopedSlots.item,
+                      },
+                    };
+                  },
+                  staticList: function staticList() {
+                    if (
+                      this.$slots["no-data"] ||
+                      this.$slots["prepend-item"] ||
+                      this.$slots["append-item"]
+                    ) {
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_13__[
+                          "consoleError"
+                        ]
+                      )(
+                        "assert: staticList should not be called if slots are used"
+                      );
+                    }
+
+                    return this.$createElement(
+                      _VSelectList__WEBPACK_IMPORTED_MODULE_4__["default"],
+                      this.listData
+                    );
+                  },
+                  virtualizedItems: function virtualizedItems() {
+                    return this.$_menuProps.auto
+                      ? this.computedItems
+                      : this.computedItems.slice(0, this.lastItem);
+                  },
+                  menuCanShow: function menuCanShow() {
+                    return true;
+                  },
+                  $_menuProps: function $_menuProps() {
+                    var normalisedProps =
+                      typeof this.menuProps === "string"
+                        ? this.menuProps.split(",")
+                        : this.menuProps;
+
+                    if (Array.isArray(normalisedProps)) {
+                      normalisedProps = normalisedProps.reduce(function (
+                        acc,
+                        p
+                      ) {
+                        acc[p.trim()] = true;
+                        return acc;
+                      },
+                      {});
+                    }
+
+                    return __assign(
+                      __assign(__assign({}, defaultMenuProps), {
+                        eager: this.eager,
+                        value: this.menuCanShow && this.isMenuActive,
+                        nudgeBottom: normalisedProps.offsetY ? 1 : 0,
+                      }),
+                      normalisedProps
+                    );
+                  },
+                },
+                watch: {
+                  internalValue: function internalValue(val) {
+                    this.initialValue = val;
+                    this.setSelectedItems();
+                  },
+                  isMenuActive: function isMenuActive(val) {
+                    var _this = this;
+
+                    window.setTimeout(function () {
+                      return _this.onMenuActiveChange(val);
+                    });
+                  },
+                  items: {
+                    immediate: true,
+                    handler: function handler(val) {
+                      var _this = this;
+
+                      if (this.cacheItems) {
+                        // Breaks vue-test-utils if
+                        // this isn't calculated
+                        // on the next tick
+                        this.$nextTick(function () {
+                          _this.cachedItems = _this.filterDuplicates(
+                            _this.cachedItems.concat(val)
+                          );
+                        });
+                      }
+
+                      this.setSelectedItems();
+                    },
+                  },
+                },
+                methods: {
+                  /** @public */
+                  blur: function blur(e) {
+                    _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__[
+                      "default"
+                    ].options.methods.blur.call(this, e);
+                    this.isMenuActive = false;
+                    this.isFocused = false;
+                    this.selectedIndex = -1;
+                  },
+
+                  /** @public */
+                  activateMenu: function activateMenu() {
+                    if (!this.isInteractive || this.isMenuActive) return;
+                    this.isMenuActive = true;
+                  },
+                  clearableCallback: function clearableCallback() {
+                    var _this = this;
+
+                    this.setValue(this.multiple ? [] : undefined);
+                    this.setMenuIndex(-1);
+                    this.$nextTick(function () {
+                      return _this.$refs.input && _this.$refs.input.focus();
+                    });
+                    if (this.openOnClear) this.isMenuActive = true;
+                  },
+                  closeConditional: function closeConditional(e) {
+                    if (!this.isMenuActive) return true;
+                    return (
+                      !this._isDestroyed && // Click originates from outside the menu content
+                      // Multiple selects don't close when an item is clicked
+                      (!this.getContent() ||
+                        !this.getContent().contains(e.target)) && // Click originates from outside the element
+                      this.$el &&
+                      !this.$el.contains(e.target) &&
+                      e.target !== this.$el
+                    );
+                  },
+                  filterDuplicates: function filterDuplicates(arr) {
+                    var uniqueValues = new Map();
+
+                    for (var index = 0; index < arr.length; ++index) {
+                      var item = arr[index]; // Do not deduplicate headers or dividers (#12517)
+
+                      if (item.header || item.divider) {
+                        uniqueValues.set(item, item);
+                        continue;
+                      }
+
+                      var val = this.getValue(item); // TODO: comparator
+
+                      !uniqueValues.has(val) && uniqueValues.set(val, item);
+                    }
+
+                    return Array.from(uniqueValues.values());
+                  },
+                  findExistingIndex: function findExistingIndex(item) {
+                    var _this = this;
+
+                    var itemValue = this.getValue(item);
+                    return (this.internalValue || []).findIndex(function (i) {
+                      return _this.valueComparator(
+                        _this.getValue(i),
+                        itemValue
+                      );
+                    });
+                  },
+                  getContent: function getContent() {
+                    return this.$refs.menu && this.$refs.menu.$refs.content;
+                  },
+                  genChipSelection: function genChipSelection(item, index) {
+                    var _this = this;
+
+                    var isDisabled =
+                      !this.isInteractive || this.getDisabled(item);
+                    return this.$createElement(
+                      _VChip__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        staticClass: "v-chip--select",
+                        attrs: {
+                          tabindex: -1,
+                        },
+                        props: {
+                          close: this.deletableChips && !isDisabled,
+                          disabled: isDisabled,
+                          inputValue: index === this.selectedIndex,
+                          small: this.smallChips,
+                        },
+                        on: {
+                          click: function click(e) {
+                            if (isDisabled) return;
+                            e.stopPropagation();
+                            _this.selectedIndex = index;
+                          },
+                          "click:close": function clickClose() {
+                            return _this.onChipInput(item);
+                          },
+                        },
+                        key: JSON.stringify(this.getValue(item)),
+                      },
+                      this.getText(item)
+                    );
+                  },
+                  genCommaSelection: function genCommaSelection(
+                    item,
+                    index,
+                    last
+                  ) {
+                    var color =
+                      index === this.selectedIndex && this.computedColor;
+                    var isDisabled =
+                      !this.isInteractive || this.getDisabled(item);
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(color, {
+                        staticClass:
+                          "v-select__selection v-select__selection--comma",
+                        class: {
+                          "v-select__selection--disabled": isDisabled,
+                        },
+                        key: JSON.stringify(this.getValue(item)),
+                      }),
+                      "" + this.getText(item) + (last ? "" : ", ")
+                    );
+                  },
+                  genDefaultSlot: function genDefaultSlot() {
+                    var selections = this.genSelections();
+                    var input = this.genInput(); // If the return is an empty array
+                    // push the input
+
+                    if (Array.isArray(selections)) {
+                      selections.push(input); // Otherwise push it into children
+                    } else {
+                      selections.children = selections.children || [];
+                      selections.children.push(input);
+                    }
+
+                    return [
+                      this.genFieldset(),
+                      this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-select__slot",
+                          directives: this.directives,
+                        },
+                        [
+                          this.genLabel(),
+                          this.prefix ? this.genAffix("prefix") : null,
+                          selections,
+                          this.suffix ? this.genAffix("suffix") : null,
+                          this.genClearIcon(),
+                          this.genIconSlot(),
+                          this.genHiddenInput(),
+                        ]
+                      ),
+                      this.genMenu(),
+                      this.genProgress(),
+                    ];
+                  },
+                  genIcon: function genIcon(type, cb, extraData) {
+                    var icon = _VInput__WEBPACK_IMPORTED_MODULE_5__[
+                      "default"
+                    ].options.methods.genIcon.call(this, type, cb, extraData);
+
+                    if (type === "append") {
+                      // Don't allow the dropdown icon to be focused
+                      icon.children[0].data = Object(
+                        _util_mergeData__WEBPACK_IMPORTED_MODULE_11__["default"]
+                      )(icon.children[0].data, {
+                        attrs: {
+                          tabindex:
+                            icon.children[0].componentOptions.listeners && "-1",
+                          "aria-hidden": "true",
+                          "aria-label": undefined,
+                        },
+                      });
+                    }
+
+                    return icon;
+                  },
+                  genInput: function genInput() {
+                    var input =
+                      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__[
+                        "default"
+                      ].options.methods.genInput.call(this);
+                    delete input.data.attrs.name;
+                    input.data = Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_11__["default"]
+                    )(input.data, {
+                      domProps: {
+                        value: null,
+                      },
+                      attrs: {
+                        readonly: true,
+                        type: "text",
+                        "aria-readonly": String(this.isReadonly),
+                        "aria-activedescendant": Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                            "getObjectValueByPath"
+                          ]
+                        )(this.$refs.menu, "activeTile.id"),
+                        autocomplete: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                            "getObjectValueByPath"
+                          ]
+                        )(input.data, "attrs.autocomplete", "off"),
+                      },
+                      on: {
+                        keypress: this.onKeyPress,
+                      },
+                    });
+                    return input;
+                  },
+                  genHiddenInput: function genHiddenInput() {
+                    return this.$createElement("input", {
+                      domProps: {
+                        value: this.lazyValue,
+                      },
+                      attrs: {
+                        type: "hidden",
+                        name: this.attrs$.name,
+                      },
+                    });
+                  },
+                  genInputSlot: function genInputSlot() {
+                    var render =
+                      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__[
+                        "default"
+                      ].options.methods.genInputSlot.call(this);
+                    render.data.attrs = __assign(
+                      __assign({}, render.data.attrs),
+                      {
+                        role: "button",
+                        "aria-haspopup": "listbox",
+                        "aria-expanded": String(this.isMenuActive),
+                        "aria-owns": this.computedOwns,
+                      }
+                    );
+                    return render;
+                  },
+                  genList: function genList() {
+                    // If there's no slots, we can use a cached VNode to improve performance
+                    if (
+                      this.$slots["no-data"] ||
+                      this.$slots["prepend-item"] ||
+                      this.$slots["append-item"]
+                    ) {
+                      return this.genListWithSlot();
+                    } else {
+                      return this.staticList;
+                    }
+                  },
+                  genListWithSlot: function genListWithSlot() {
+                    var _this = this;
+
+                    var slots = ["prepend-item", "no-data", "append-item"]
+                      .filter(function (slotName) {
+                        return _this.$slots[slotName];
+                      })
+                      .map(function (slotName) {
+                        return _this.$createElement(
+                          "template",
+                          {
+                            slot: slotName,
+                          },
+                          _this.$slots[slotName]
+                        );
+                      }); // Requires destructuring due to Vue
+                    // modifying the `on` property when passed
+                    // as a referenced object
+
+                    return this.$createElement(
+                      _VSelectList__WEBPACK_IMPORTED_MODULE_4__["default"],
+                      __assign({}, this.listData),
+                      slots
+                    );
+                  },
+                  genMenu: function genMenu() {
+                    var _this = this;
+
+                    var props = this.$_menuProps;
+                    props.activator = this.$refs["input-slot"]; // Attach to root el so that
+                    // menu covers prepend/append icons
+
+                    if (
+                      // TODO: make this a computed property or helper or something
+                      this.attach === "" || // If used as a boolean prop (<v-menu attach>)
+                      this.attach === true || // If bound to a boolean (<v-menu :attach="true">)
+                      this.attach === "attach" // If bound as boolean prop in pug (v-menu(attach))
+                    ) {
+                      props.attach = this.$el;
+                    } else {
+                      props.attach = this.attach;
+                    }
+
+                    return this.$createElement(
+                      _VMenu__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      {
+                        attrs: {
+                          role: undefined,
+                        },
+                        props: props,
+                        on: {
+                          input: function input(val) {
+                            _this.isMenuActive = val;
+                            _this.isFocused = val;
+                          },
+                          scroll: this.onScroll,
+                        },
+                        ref: "menu",
+                      },
+                      [this.genList()]
+                    );
+                  },
+                  genSelections: function genSelections() {
+                    var length = this.selectedItems.length;
+                    var children = new Array(length);
+                    var genSelection;
+
+                    if (this.$scopedSlots.selection) {
+                      genSelection = this.genSlotSelection;
+                    } else if (this.hasChips) {
+                      genSelection = this.genChipSelection;
+                    } else {
+                      genSelection = this.genCommaSelection;
+                    }
+
+                    while (length--) {
+                      children[length] = genSelection(
+                        this.selectedItems[length],
+                        length,
+                        length === children.length - 1
+                      );
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-select__selections",
+                      },
+                      children
+                    );
+                  },
+                  genSlotSelection: function genSlotSelection(item, index) {
+                    var _this = this;
+
+                    return this.$scopedSlots.selection({
+                      attrs: {
+                        class: "v-chip--select",
+                      },
+                      parent: this,
+                      item: item,
+                      index: index,
+                      select: function select(e) {
+                        e.stopPropagation();
+                        _this.selectedIndex = index;
+                      },
+                      selected: index === this.selectedIndex,
+                      disabled: !this.isInteractive,
+                    });
+                  },
+                  getMenuIndex: function getMenuIndex() {
+                    return this.$refs.menu ? this.$refs.menu.listIndex : -1;
+                  },
+                  getDisabled: function getDisabled(item) {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                        "getPropertyFromItem"
+                      ]
+                    )(item, this.itemDisabled, false);
+                  },
+                  getText: function getText(item) {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                        "getPropertyFromItem"
+                      ]
+                    )(item, this.itemText, item);
+                  },
+                  getValue: function getValue(item) {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__[
+                        "getPropertyFromItem"
+                      ]
+                    )(item, this.itemValue, this.getText(item));
+                  },
+                  onBlur: function onBlur(e) {
+                    e && this.$emit("blur", e);
+                  },
+                  onChipInput: function onChipInput(item) {
+                    if (this.multiple) this.selectItem(item);
+                    else this.setValue(null); // If all items have been deleted,
+                    // open `v-menu`
+
+                    if (this.selectedItems.length === 0) {
+                      this.isMenuActive = true;
+                    } else {
+                      this.isMenuActive = false;
+                    }
+
+                    this.selectedIndex = -1;
+                  },
+                  onClick: function onClick(e) {
+                    if (!this.isInteractive) return;
+
+                    if (!this.isAppendInner(e.target)) {
+                      this.isMenuActive = true;
+                    }
+
+                    if (!this.isFocused) {
+                      this.isFocused = true;
+                      this.$emit("focus");
+                    }
+
+                    this.$emit("click", e);
+                  },
+                  onEscDown: function onEscDown(e) {
+                    e.preventDefault();
+
+                    if (this.isMenuActive) {
+                      e.stopPropagation();
+                      this.isMenuActive = false;
+                    }
+                  },
+                  onKeyPress: function onKeyPress(e) {
+                    var _this = this;
+
+                    if (
+                      this.multiple ||
+                      !this.isInteractive ||
+                      this.disableLookup
+                    )
+                      return;
+                    var KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
+
+                    var now = performance.now();
+
+                    if (
+                      now - this.keyboardLookupLastTime >
+                      KEYBOARD_LOOKUP_THRESHOLD
+                    ) {
+                      this.keyboardLookupPrefix = "";
+                    }
+
+                    this.keyboardLookupPrefix += e.key.toLowerCase();
+                    this.keyboardLookupLastTime = now;
+                    var index = this.allItems.findIndex(function (item) {
+                      var text = (_this.getText(item) || "").toString();
+                      return text
+                        .toLowerCase()
+                        .startsWith(_this.keyboardLookupPrefix);
+                    });
+                    var item = this.allItems[index];
+
+                    if (index !== -1) {
+                      this.lastItem = Math.max(this.lastItem, index + 5);
+                      this.setValue(
+                        this.returnObject ? item : this.getValue(item)
+                      );
+                      this.$nextTick(function () {
+                        return _this.$refs.menu.getTiles();
+                      });
+                      setTimeout(function () {
+                        return _this.setMenuIndex(index);
+                      });
+                    }
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    var _this = this;
+
+                    if (
+                      this.isReadonly &&
+                      e.keyCode !==
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                          .tab
+                    )
+                      return;
+                    var keyCode = e.keyCode;
+                    var menu = this.$refs.menu; // If enter, space, open menu
+
+                    if (
+                      [
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                          .enter,
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                          .space,
+                      ].includes(keyCode)
+                    )
+                      this.activateMenu();
+                    this.$emit("keydown", e);
+                    if (!menu) return; // If menu is active, allow default
+                    // listIndex change from menu
+
+                    if (
+                      this.isMenuActive &&
+                      keyCode !==
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                          .tab
+                    ) {
+                      this.$nextTick(function () {
+                        menu.changeListIndex(e);
+
+                        _this.$emit("update:list-index", menu.listIndex);
+                      });
+                    } // If menu is not active, up and down can do
+                    // one of 2 things. If multiple, opens the
+                    // menu, if not, will cycle through all
+                    // available options
+
+                    if (
+                      !this.isMenuActive &&
+                      [
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                          .up,
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                          .down,
+                      ].includes(keyCode)
+                    )
+                      return this.onUpDown(e); // If escape deactivate the menu
+
+                    if (
+                      keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                        .esc
+                    )
+                      return this.onEscDown(e); // If tab - select item or close menu
+
+                    if (
+                      keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                        .tab
+                    )
+                      return this.onTabDown(e); // If space preventDefault
+
+                    if (
+                      keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                        .space
+                    )
+                      return this.onSpaceDown(e);
+                  },
+                  onMenuActiveChange: function onMenuActiveChange(val) {
+                    // If menu is closing and mulitple
+                    // or menuIndex is already set
+                    // skip menu index recalculation
+                    if ((this.multiple && !val) || this.getMenuIndex() > -1)
+                      return;
+                    var menu = this.$refs.menu;
+                    if (!menu || !this.isDirty) return; // When menu opens, set index of first active item
+
+                    for (var i = 0; i < menu.tiles.length; i++) {
+                      if (
+                        menu.tiles[i].getAttribute("aria-selected") === "true"
+                      ) {
+                        this.setMenuIndex(i);
+                        break;
+                      }
+                    }
+                  },
+                  onMouseUp: function onMouseUp(e) {
+                    var _this = this; // eslint-disable-next-line sonarjs/no-collapsible-if
+
+                    if (
+                      this.hasMouseDown &&
+                      e.which !== 3 &&
+                      this.isInteractive
+                    ) {
+                      // If append inner is present
+                      // and the target is itself
+                      // or inside, toggle menu
+                      if (this.isAppendInner(e.target)) {
+                        this.$nextTick(function () {
+                          return (_this.isMenuActive = !_this.isMenuActive);
+                        });
+                      }
+                    }
+
+                    _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__[
+                      "default"
+                    ].options.methods.onMouseUp.call(this, e);
+                  },
+                  onScroll: function onScroll() {
+                    var _this = this;
+
+                    if (!this.isMenuActive) {
+                      requestAnimationFrame(function () {
+                        return (_this.getContent().scrollTop = 0);
+                      });
+                    } else {
+                      if (this.lastItem > this.computedItems.length) return;
+                      var showMoreItems =
+                        this.getContent().scrollHeight -
+                          (this.getContent().scrollTop +
+                            this.getContent().clientHeight) <
+                        200;
+
+                      if (showMoreItems) {
+                        this.lastItem += 20;
+                      }
+                    }
+                  },
+                  onSpaceDown: function onSpaceDown(e) {
+                    e.preventDefault();
+                  },
+                  onTabDown: function onTabDown(e) {
+                    var menu = this.$refs.menu;
+                    if (!menu) return;
+                    var activeTile = menu.activeTile; // An item that is selected by
+                    // menu-index should toggled
+
+                    if (!this.multiple && activeTile && this.isMenuActive) {
+                      e.preventDefault();
+                      e.stopPropagation();
+                      activeTile.click();
+                    } else {
+                      // If we make it here,
+                      // the user has no selected indexes
+                      // and is probably tabbing out
+                      this.blur(e);
+                    }
+                  },
+                  onUpDown: function onUpDown(e) {
+                    var menu = this.$refs.menu;
+                    if (!menu) return;
+                    e.preventDefault(); // Multiple selects do not cycle their value
+                    // when pressing up or down, instead activate
+                    // the menu
+
+                    if (this.multiple) return this.activateMenu();
+                    var keyCode = e.keyCode; // Cycle through available values to achieve
+                    // select native behavior
+
+                    menu.isBooted = true;
+                    window.requestAnimationFrame(function () {
+                      menu.getTiles();
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"]
+                        .up === keyCode
+                        ? menu.prevTile()
+                        : menu.nextTile();
+                      menu.activeTile && menu.activeTile.click();
+                    });
+                  },
+                  selectItem: function selectItem(item) {
+                    var _this = this;
+
+                    if (!this.multiple) {
+                      this.setValue(
+                        this.returnObject ? item : this.getValue(item)
+                      );
+                      this.isMenuActive = false;
+                    } else {
+                      var internalValue = (this.internalValue || []).slice();
+                      var i = this.findExistingIndex(item);
+                      i !== -1
+                        ? internalValue.splice(i, 1)
+                        : internalValue.push(item);
+                      this.setValue(
+                        internalValue.map(function (i) {
+                          return _this.returnObject ? i : _this.getValue(i);
+                        })
+                      ); // When selecting multiple
+                      // adjust menu after each
+                      // selection
+
+                      this.$nextTick(function () {
+                        _this.$refs.menu && _this.$refs.menu.updateDimensions();
+                      }); // We only need to reset list index for multiple
+                      // to keep highlight when an item is toggled
+                      // on and off
+
+                      if (!this.multiple) return;
+                      var listIndex_1 = this.getMenuIndex();
+                      this.setMenuIndex(-1); // There is no item to re-highlight
+                      // when selections are hidden
+
+                      if (this.hideSelected) return;
+                      this.$nextTick(function () {
+                        return _this.setMenuIndex(listIndex_1);
+                      });
+                    }
+                  },
+                  setMenuIndex: function setMenuIndex(index) {
+                    this.$refs.menu && (this.$refs.menu.listIndex = index);
+                  },
+                  setSelectedItems: function setSelectedItems() {
+                    var e_1, _a;
+
+                    var _this = this;
+
+                    var selectedItems = [];
+                    var values =
+                      !this.multiple || !Array.isArray(this.internalValue)
+                        ? [this.internalValue]
+                        : this.internalValue;
+
+                    var _loop_1 = function _loop_1(value) {
+                      var index = this_1.allItems.findIndex(function (v) {
+                        return _this.valueComparator(
+                          _this.getValue(v),
+                          _this.getValue(value)
+                        );
+                      });
+
+                      if (index > -1) {
+                        selectedItems.push(this_1.allItems[index]);
+                      }
+                    };
+
+                    var this_1 = this;
+
+                    try {
+                      for (
+                        var values_1 = __values(values),
+                          values_1_1 = values_1.next();
+                        !values_1_1.done;
+                        values_1_1 = values_1.next()
+                      ) {
+                        var value = values_1_1.value;
+
+                        _loop_1(value);
+                      }
+                    } catch (e_1_1) {
+                      e_1 = {
+                        error: e_1_1,
+                      };
+                    } finally {
+                      try {
+                        if (
+                          values_1_1 &&
+                          !values_1_1.done &&
+                          (_a = values_1.return)
+                        )
+                          _a.call(values_1);
+                      } finally {
+                        if (e_1) throw e_1.error;
+                      }
+                    }
+
+                    this.selectedItems = selectedItems;
+                  },
+                  setValue: function setValue(value) {
+                    var oldValue = this.internalValue;
+                    this.internalValue = value;
+                    value !== oldValue && this.$emit("change", value);
+                  },
+                  isAppendInner: function isAppendInner(target) {
+                    // return true if append inner is present
+                    // and the target is itself or inside
+                    var appendInner = this.$refs["append-inner"];
+                    return (
+                      appendInner &&
+                      (appendInner === target || appendInner.contains(target))
+                    );
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VDataTableHeader.sass":
-/*!*********************************************************!*\
-  !*** ./src/components/VDataTable/VDataTableHeader.sass ***!
-  \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VSelect/VSelectList.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VSelect/VSelectList.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VCheckbox/VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts"
+              );
+            /* harmony import */ var _VDivider__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VDivider */ "./src/components/VDivider/index.ts"
+              );
+            /* harmony import */ var _VSubheader__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VSubheader */ "./src/components/VSubheader/index.ts"
+              );
+            /* harmony import */ var _VList__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VList */ "./src/components/VList/index.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Components
+
+            // Directives
+
+            // Mixins
+
+            // Helpers
+
+            // Types
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]
+              ).extend({
+                name: "v-select-list",
+                // https://github.com/vuejs/vue/issues/6872
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_4__["default"],
+                },
+                props: {
+                  action: Boolean,
+                  dense: Boolean,
+                  hideSelected: Boolean,
+                  items: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  itemDisabled: {
+                    type: [String, Array, Function],
+                    default: "disabled",
+                  },
+                  itemText: {
+                    type: [String, Array, Function],
+                    default: "text",
+                  },
+                  itemValue: {
+                    type: [String, Array, Function],
+                    default: "value",
+                  },
+                  noDataText: String,
+                  noFilter: Boolean,
+                  searchInput: null,
+                  selectedItems: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                },
+                computed: {
+                  parsedItems: function parsedItems() {
+                    var _this = this;
+
+                    return this.selectedItems.map(function (item) {
+                      return _this.getValue(item);
+                    });
+                  },
+                  tileActiveClass: function tileActiveClass() {
+                    return Object.keys(
+                      this.setTextColor(this.color).class || {}
+                    ).join(" ");
+                  },
+                  staticNoDataTile: function staticNoDataTile() {
+                    var tile = {
+                      attrs: {
+                        role: undefined,
+                      },
+                      on: {
+                        mousedown: function mousedown(e) {
+                          return e.preventDefault();
+                        },
+                      },
+                    };
+                    return this.$createElement(
+                      _VList__WEBPACK_IMPORTED_MODULE_3__["VListItem"],
+                      tile,
+                      [this.genTileContent(this.noDataText)]
+                    );
+                  },
+                },
+                methods: {
+                  genAction: function genAction(item, inputValue) {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VList__WEBPACK_IMPORTED_MODULE_3__["VListItemAction"],
+                      [
+                        this.$createElement(
+                          _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_0__[
+                            "default"
+                          ],
+                          {
+                            props: {
+                              color: this.color,
+                              value: inputValue,
+                            },
+                            on: {
+                              input: function input() {
+                                return _this.$emit("select", item);
+                              },
+                            },
+                          }
+                        ),
+                      ]
+                    );
+                  },
+                  genDivider: function genDivider(props) {
+                    return this.$createElement(
+                      _VDivider__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        props: props,
+                      }
+                    );
+                  },
+                  genFilteredText: function genFilteredText(text) {
+                    text = text || "";
+                    if (!this.searchInput || this.noFilter)
+                      return Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"]
+                      )(text);
+
+                    var _a = this.getMaskedCharacters(text),
+                      start = _a.start,
+                      middle = _a.middle,
+                      end = _a.end;
+
+                    return (
+                      "" +
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"]
+                      )(start) +
+                      this.genHighlight(middle) +
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"]
+                      )(end)
+                    );
+                  },
+                  genHeader: function genHeader(props) {
+                    return this.$createElement(
+                      _VSubheader__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        props: props,
+                      },
+                      props.header
+                    );
+                  },
+                  genHighlight: function genHighlight(text) {
+                    return (
+                      '<span class="v-list-item__mask">' +
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"]
+                      )(text) +
+                      "</span>"
+                    );
+                  },
+                  getMaskedCharacters: function getMaskedCharacters(text) {
+                    var searchInput = (this.searchInput || "")
+                      .toString()
+                      .toLocaleLowerCase();
+                    var index = text.toLocaleLowerCase().indexOf(searchInput);
+                    if (index < 0)
+                      return {
+                        start: text,
+                        middle: "",
+                        end: "",
+                      };
+                    var start = text.slice(0, index);
+                    var middle = text.slice(index, index + searchInput.length);
+                    var end = text.slice(index + searchInput.length);
+                    return {
+                      start: start,
+                      middle: middle,
+                      end: end,
+                    };
+                  },
+                  genTile: function genTile(_a) {
+                    var _this = this;
+
+                    var item = _a.item,
+                      index = _a.index,
+                      _b = _a.disabled,
+                      disabled = _b === void 0 ? null : _b,
+                      _c = _a.value,
+                      value = _c === void 0 ? false : _c;
+                    if (!value) value = this.hasItem(item);
+
+                    if (item === Object(item)) {
+                      disabled =
+                        disabled !== null ? disabled : this.getDisabled(item);
+                    }
+
+                    var tile = {
+                      attrs: {
+                        // Default behavior in list does not
+                        // contain aria-selected by default
+                        "aria-selected": String(value),
+                        id: "list-item-" + this._uid + "-" + index,
+                        role: "option",
+                      },
+                      on: {
+                        mousedown: function mousedown(e) {
+                          // Prevent onBlur from being called
+                          e.preventDefault();
+                        },
+                        click: function click() {
+                          return disabled || _this.$emit("select", item);
+                        },
+                      },
+                      props: {
+                        activeClass: this.tileActiveClass,
+                        disabled: disabled,
+                        ripple: true,
+                        inputValue: value,
+                      },
+                    };
+
+                    if (!this.$scopedSlots.item) {
+                      return this.$createElement(
+                        _VList__WEBPACK_IMPORTED_MODULE_3__["VListItem"],
+                        tile,
+                        [
+                          this.action &&
+                          !this.hideSelected &&
+                          this.items.length > 0
+                            ? this.genAction(item, value)
+                            : null,
+                          this.genTileContent(item, index),
+                        ]
+                      );
+                    }
+
+                    var parent = this;
+                    var scopedSlot = this.$scopedSlots.item({
+                      parent: parent,
+                      item: item,
+                      attrs: __assign(__assign({}, tile.attrs), tile.props),
+                      on: tile.on,
+                    });
+                    return this.needsTile(scopedSlot)
+                      ? this.$createElement(
+                          _VList__WEBPACK_IMPORTED_MODULE_3__["VListItem"],
+                          tile,
+                          scopedSlot
+                        )
+                      : scopedSlot;
+                  },
+                  genTileContent: function genTileContent(item, index) {
+                    if (index === void 0) {
+                      index = 0;
+                    }
+
+                    var innerHTML = this.genFilteredText(this.getText(item));
+                    return this.$createElement(
+                      _VList__WEBPACK_IMPORTED_MODULE_3__["VListItemContent"],
+                      [
+                        this.$createElement(
+                          _VList__WEBPACK_IMPORTED_MODULE_3__["VListItemTitle"],
+                          {
+                            domProps: {
+                              innerHTML: innerHTML,
+                            },
+                          }
+                        ),
+                      ]
+                    );
+                  },
+                  hasItem: function hasItem(item) {
+                    return this.parsedItems.indexOf(this.getValue(item)) > -1;
+                  },
+                  needsTile: function needsTile(slot) {
+                    return (
+                      slot.length !== 1 ||
+                      slot[0].componentOptions == null ||
+                      slot[0].componentOptions.Ctor.options.name !==
+                        "v-list-item"
+                    );
+                  },
+                  getDisabled: function getDisabled(item) {
+                    return Boolean(
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                          "getPropertyFromItem"
+                        ]
+                      )(item, this.itemDisabled, false)
+                    );
+                  },
+                  getText: function getText(item) {
+                    return String(
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                          "getPropertyFromItem"
+                        ]
+                      )(item, this.itemText, item)
+                    );
+                  },
+                  getValue: function getValue(item) {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                        "getPropertyFromItem"
+                      ]
+                    )(item, this.itemValue, this.getText(item));
+                  },
+                },
+                render: function render() {
+                  var children = [];
+                  var itemsLength = this.items.length;
+
+                  for (var index = 0; index < itemsLength; index++) {
+                    var item = this.items[index];
+                    if (this.hideSelected && this.hasItem(item)) continue;
+                    if (item == null)
+                      children.push(
+                        this.genTile({
+                          item: item,
+                          index: index,
+                        })
+                      );
+                    else if (item.header) children.push(this.genHeader(item));
+                    else if (item.divider) children.push(this.genDivider(item));
+                    else
+                      children.push(
+                        this.genTile({
+                          item: item,
+                          index: index,
+                        })
+                      );
+                  }
 
-// extracted by mini-css-extract-plugin
+                  children.length ||
+                    children.push(
+                      this.$slots["no-data"] || this.staticNoDataTile
+                    );
+                  this.$slots["prepend-item"] &&
+                    children.unshift(this.$slots["prepend-item"]);
+                  this.$slots["append-item"] &&
+                    children.push(this.$slots["append-item"]);
+                  return this.$createElement(
+                    _VList__WEBPACK_IMPORTED_MODULE_3__["VList"],
+                    {
+                      staticClass: "v-select-list",
+                      class: this.themeClasses,
+                      attrs: {
+                        role: "listbox",
+                        tabindex: -1,
+                      },
+                      props: {
+                        dense: this.dense,
+                      },
+                    },
+                    children
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VDataTableHeader.ts":
-/*!*******************************************************!*\
-  !*** ./src/components/VDataTable/VDataTableHeader.ts ***!
-  \*******************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDataTableHeader_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDataTableHeader.sass */ "./src/components/VDataTable/VDataTableHeader.sass");
-/* harmony import */ var _VDataTableHeader_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDataTableHeader_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VDataTableHeaderMobile__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VDataTableHeaderMobile */ "./src/components/VDataTable/VDataTableHeaderMobile.ts");
-/* harmony import */ var _VDataTableHeaderDesktop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VDataTableHeaderDesktop */ "./src/components/VDataTable/VDataTableHeaderDesktop.ts");
-/* harmony import */ var _mixins_header__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mixins/header */ "./src/components/VDataTable/mixins/header.ts");
-/* harmony import */ var _util_dedupeModelListeners__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/dedupeModelListeners */ "./src/util/dedupeModelListeners.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_rebuildFunctionalSlots__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/rebuildFunctionalSlots */ "./src/util/rebuildFunctionalSlots.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_7__);
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+        /***/ "./src/components/VSelect/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VSelect/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VSelect, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSelect__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSelect */ "./src/components/VSelect/VSelect.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSelect",
+              function () {
+                return _VSelect__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-    return t;
-  };
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSelect__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return __assign.apply(this, arguments);
-}; // Styles
+            /***/
+          },
 
+        /***/ "./src/components/VSheet/VSheet.sass":
+          /*!*******************************************!*\
+  !*** ./src/components/VSheet/VSheet.sass ***!
+  \*******************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
- // Components
+        /***/ "./src/components/VSheet/VSheet.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VSheet/VSheet.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSheet_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSheet.sass */ "./src/components/VSheet/VSheet.sass"
+              );
+            /* harmony import */ var _VSheet_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSheet_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts"
+              );
+            /* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts"
+              );
+            /* harmony import */ var _mixins_roundable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/roundable */ "./src/mixins/roundable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(
+                _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _mixins_roundable__WEBPACK_IMPORTED_MODULE_5__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]
+              ).extend({
+                name: "v-sheet",
+                props: {
+                  outlined: Boolean,
+                  shaped: Boolean,
+                  tag: {
+                    type: String,
+                    default: "div",
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        __assign(
+                          {
+                            "v-sheet": true,
+                            "v-sheet--outlined": this.outlined,
+                            "v-sheet--shaped": this.shaped,
+                          },
+                          this.themeClasses
+                        ),
+                        this.elevationClasses
+                      ),
+                      this.roundedClasses
+                    );
+                  },
+                  styles: function styles() {
+                    return this.measurableStyles;
+                  },
+                },
+                render: function render(h) {
+                  var data = {
+                    class: this.classes,
+                    style: this.styles,
+                    on: this.listeners$,
+                  };
+                  return h(
+                    this.tag,
+                    this.setBackgroundColor(this.color, data),
+                    this.$slots.default
+                  );
+                },
+              });
 
+            /***/
+          },
 
- // Mixins
+        /***/ "./src/components/VSheet/index.ts":
+          /*!****************************************!*\
+  !*** ./src/components/VSheet/index.ts ***!
+  \****************************************/
+          /*! exports provided: VSheet, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSheet */ "./src/components/VSheet/VSheet.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSheet",
+              function () {
+                return _VSheet__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
- // Utilities
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSheet__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VSkeletonLoader/VSkeletonLoader.sass":
+          /*!*************************************************************!*\
+  !*** ./src/components/VSkeletonLoader/VSkeletonLoader.sass ***!
+  \*************************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
- // Types
+        /***/ "./src/components/VSkeletonLoader/VSkeletonLoader.ts":
+          /*!***********************************************************!*\
+  !*** ./src/components/VSkeletonLoader/VSkeletonLoader.ts ***!
+  \***********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSkeletonLoader_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSkeletonLoader.sass */ "./src/components/VSkeletonLoader/VSkeletonLoader.sass"
+              );
+            /* harmony import */ var _VSkeletonLoader_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSkeletonLoader_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts"
+              );
+            /* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/* @vue/component */
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_7___default.a.extend({
-  name: 'v-data-table-header',
-  functional: true,
-  props: __assign(__assign({}, _mixins_header__WEBPACK_IMPORTED_MODULE_3__["default"].options.props), {
-    mobile: Boolean
-  }),
-  render: function render(h, _a) {
-    var props = _a.props,
-        data = _a.data,
-        slots = _a.slots;
-    Object(_util_dedupeModelListeners__WEBPACK_IMPORTED_MODULE_4__["default"])(data);
-    var children = Object(_util_rebuildFunctionalSlots__WEBPACK_IMPORTED_MODULE_6__["default"])(slots(), h);
-    data = Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_5__["default"])(data, {
-      props: props
-    });
+                return ar;
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _mixins_elevatable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "VSkeletonLoader",
+                props: {
+                  boilerplate: Boolean,
+                  loading: Boolean,
+                  tile: Boolean,
+                  transition: String,
+                  type: String,
+                  types: {
+                    type: Object,
+                    default: function _default() {
+                      return {};
+                    },
+                  },
+                },
+                computed: {
+                  attrs: function attrs() {
+                    if (!this.isLoading) return this.$attrs;
+                    return !this.boilerplate
+                      ? __assign(
+                          {
+                            "aria-busy": true,
+                            "aria-live": "polite",
+                            role: "alert",
+                          },
+                          this.$attrs
+                        )
+                      : {};
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {
+                          "v-skeleton-loader--boilerplate": this.boilerplate,
+                          "v-skeleton-loader--is-loading": this.isLoading,
+                          "v-skeleton-loader--tile": this.tile,
+                        },
+                        this.themeClasses
+                      ),
+                      this.elevationClasses
+                    );
+                  },
+                  isLoading: function isLoading() {
+                    return !("default" in this.$scopedSlots) || this.loading;
+                  },
+                  rootTypes: function rootTypes() {
+                    return __assign(
+                      {
+                        actions: "button@2",
+                        article: "heading, paragraph",
+                        avatar: "avatar",
+                        button: "button",
+                        card: "image, card-heading",
+                        "card-avatar": "image, list-item-avatar",
+                        "card-heading": "heading",
+                        chip: "chip",
+                        "date-picker":
+                          "list-item, card-heading, divider, date-picker-options, date-picker-days, actions",
+                        "date-picker-options": "text, avatar@2",
+                        "date-picker-days": "avatar@28",
+                        heading: "heading",
+                        image: "image",
+                        "list-item": "text",
+                        "list-item-avatar": "avatar, text",
+                        "list-item-two-line": "sentences",
+                        "list-item-avatar-two-line": "avatar, sentences",
+                        "list-item-three-line": "paragraph",
+                        "list-item-avatar-three-line": "avatar, paragraph",
+                        paragraph: "text@3",
+                        sentences: "text@2",
+                        table:
+                          "table-heading, table-thead, table-tbody, table-tfoot",
+                        "table-heading": "heading, text",
+                        "table-thead": "heading@6",
+                        "table-tbody": "table-row-divider@6",
+                        "table-row-divider": "table-row, divider",
+                        "table-row": "table-cell@6",
+                        "table-cell": "text",
+                        "table-tfoot": "text@2, avatar@2",
+                        text: "text",
+                      },
+                      this.types
+                    );
+                  },
+                },
+                methods: {
+                  genBone: function genBone(text, children) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass:
+                          "v-skeleton-loader__" +
+                          text +
+                          " v-skeleton-loader__bone",
+                      },
+                      children
+                    );
+                  },
+                  genBones: function genBones(bone) {
+                    var _this = this; // e.g. 'text@3'
+
+                    var _a = __read(bone.split("@"), 2),
+                      type = _a[0],
+                      length = _a[1];
+
+                    var generator = function generator() {
+                      return _this.genStructure(type);
+                    }; // Generate a length array based upon
+                    // value after @ in the bone string
+
+                    return Array.from({
+                      length: length,
+                    }).map(generator);
+                  },
+                  // Fix type when this is merged
+                  // https://github.com/microsoft/TypeScript/pull/33050
+                  genStructure: function genStructure(type) {
+                    var children = [];
+                    type = type || this.type || "";
+                    var bone = this.rootTypes[type] || ""; // End of recursion, do nothing
+
+                    /* eslint-disable-next-line no-empty, brace-style */
+
+                    if (type === bone) {
+                    } // Array of values - e.g. 'heading, paragraph, text@2'
+                    else if (type.indexOf(",") > -1) return this.mapBones(type);
+                    // Array of values - e.g. 'paragraph@4'
+                    else if (type.indexOf("@") > -1) return this.genBones(type);
+                    // Array of values - e.g. 'card@2'
+                    else if (bone.indexOf(",") > -1)
+                      children = this.mapBones(bone);
+                    // Array of values - e.g. 'list-item@2'
+                    else if (bone.indexOf("@") > -1)
+                      children = this.genBones(bone);
+                    // Single value - e.g. 'card-heading'
+                    else if (bone) children.push(this.genStructure(bone));
+
+                    return [this.genBone(type, children)];
+                  },
+                  genSkeleton: function genSkeleton() {
+                    var children = [];
+                    if (!this.isLoading)
+                      children.push(
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"]
+                        )(this)
+                      );
+                    else children.push(this.genStructure());
+                    /* istanbul ignore else */
+
+                    if (!this.transition) return children;
+                    /* istanbul ignore next */
+
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.transition,
+                        },
+                        // Only show transition when
+                        // content has been loaded
+                        on: {
+                          afterEnter: this.resetStyles,
+                          beforeEnter: this.onBeforeEnter,
+                          beforeLeave: this.onBeforeLeave,
+                          leaveCancelled: this.resetStyles,
+                        },
+                      },
+                      children
+                    );
+                  },
+                  mapBones: function mapBones(bones) {
+                    // Remove spaces and return array of structures
+                    return bones
+                      .replace(/\s/g, "")
+                      .split(",")
+                      .map(this.genStructure);
+                  },
+                  onBeforeEnter: function onBeforeEnter(el) {
+                    this.resetStyles(el);
+                    if (!this.isLoading) return;
+                    el._initialStyle = {
+                      display: el.style.display,
+                      transition: el.style.transition,
+                    };
+                    el.style.setProperty("transition", "none", "important");
+                  },
+                  onBeforeLeave: function onBeforeLeave(el) {
+                    el.style.setProperty("display", "none", "important");
+                  },
+                  resetStyles: function resetStyles(el) {
+                    if (!el._initialStyle) return;
+                    el.style.display = el._initialStyle.display || "";
+                    el.style.transition = el._initialStyle.transition;
+                    delete el._initialStyle;
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-skeleton-loader",
+                      attrs: this.attrs,
+                      on: this.$listeners,
+                      class: this.classes,
+                      style: this.isLoading ? this.measurableStyles : undefined,
+                    },
+                    [this.genSkeleton()]
+                  );
+                },
+              });
 
-    if (props.mobile) {
-      return h(_VDataTableHeaderMobile__WEBPACK_IMPORTED_MODULE_1__["default"], data, children);
-    } else {
-      return h(_VDataTableHeaderDesktop__WEBPACK_IMPORTED_MODULE_2__["default"], data, children);
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VSkeletonLoader/index.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VSkeletonLoader/index.ts ***!
+  \*************************************************/
+          /*! exports provided: VSkeletonLoader, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSkeletonLoader */ "./src/components/VSkeletonLoader/VSkeletonLoader.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSkeletonLoader",
+              function () {
+                return _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/***/ "./src/components/VDataTable/VDataTableHeaderDesktop.ts":
-/*!**************************************************************!*\
-  !*** ./src/components/VDataTable/VDataTableHeaderDesktop.ts ***!
-  \**************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _mixins_header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mixins/header */ "./src/components/VDataTable/mixins/header.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return ar;
-};
+            /***/
+          },
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+        /***/ "./src/components/VSlideGroup/VSlideGroup.sass":
+          /*!*****************************************************!*\
+  !*** ./src/components/VSlideGroup/VSlideGroup.sass ***!
+  \*****************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  return ar;
-};
+        /***/ "./src/components/VSlideGroup/VSlideGroup.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VSlideGroup/VSlideGroup.ts ***!
+  \***************************************************/
+          /*! exports provided: BaseSlideGroup, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "BaseSlideGroup",
+              function () {
+                return BaseSlideGroup;
+              }
+            );
+            /* harmony import */ var _VSlideGroup_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSlideGroup.sass */ "./src/components/VSlideGroup/VSlideGroup.sass"
+              );
+            /* harmony import */ var _VSlideGroup_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSlideGroup_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            /* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts"
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../directives/touch */ "./src/directives/touch/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Extensions
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            var BaseSlideGroup = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"]
+            )(
+              _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__[
+                "BaseItemGroup"
+              ],
+              _mixins_mobile__WEBPACK_IMPORTED_MODULE_4__["default"]
+            ).extend({
+              name: "base-slide-group",
+              directives: {
+                Resize:
+                  _directives_resize__WEBPACK_IMPORTED_MODULE_5__["default"],
+                Touch:
+                  _directives_touch__WEBPACK_IMPORTED_MODULE_6__["default"],
+              },
+              props: {
+                activeClass: {
+                  type: String,
+                  default: "v-slide-item--active",
+                },
+                centerActive: Boolean,
+                nextIcon: {
+                  type: String,
+                  default: "$next",
+                },
+                prevIcon: {
+                  type: String,
+                  default: "$prev",
+                },
+                showArrows: {
+                  type: [Boolean, String],
+                  validator: function validator(v) {
+                    return (
+                      typeof v === "boolean" ||
+                      ["always", "desktop", "mobile"].includes(v)
+                    );
+                  },
+                },
+              },
+              data: function data() {
+                return {
+                  internalItemsLength: 0,
+                  isOverflowing: false,
+                  resizeTimeout: 0,
+                  startX: 0,
+                  scrollOffset: 0,
+                  widths: {
+                    content: 0,
+                    wrapper: 0,
+                  },
+                };
+              },
+              computed: {
+                __cachedNext: function __cachedNext() {
+                  return this.genTransition("next");
+                },
+                __cachedPrev: function __cachedPrev() {
+                  return this.genTransition("prev");
+                },
+                classes: function classes() {
+                  return __assign(
+                    __assign(
+                      {},
+                      _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__[
+                        "BaseItemGroup"
+                      ].options.computed.classes.call(this)
+                    ),
+                    {
+                      "v-slide-group": true,
+                      "v-slide-group--has-affixes": this.hasAffixes,
+                      "v-slide-group--is-overflowing": this.isOverflowing,
+                    }
+                  );
+                },
+                hasAffixes: function hasAffixes() {
+                  switch (this.showArrows) {
+                    // Always show arrows on desktop & mobile
+                    case "always":
+                      return true;
+                    // Always show arrows on desktop
+
+                    case "desktop":
+                      return !this.isMobile;
+                    // Show arrows on mobile when overflowing.
+                    // This matches the default 2.2 behavior
+
+                    case true:
+                      return this.isOverflowing;
+                    // Always show on mobile
+
+                    case "mobile":
+                      return this.isMobile || this.isOverflowing;
+                    // https://material.io/components/tabs#scrollable-tabs
+                    // Always show arrows when
+                    // overflowed on desktop
+
+                    default:
+                      return !this.isMobile && this.isOverflowing;
+                  }
+                },
+                hasNext: function hasNext() {
+                  if (!this.hasAffixes) return false;
+                  var _a = this.widths,
+                    content = _a.content,
+                    wrapper = _a.wrapper; // Check one scroll ahead to know the width of right-most item
+
+                  return content > Math.abs(this.scrollOffset) + wrapper;
+                },
+                hasPrev: function hasPrev() {
+                  return this.hasAffixes && this.scrollOffset !== 0;
+                },
+              },
+              watch: {
+                internalValue: "setWidths",
+                // When overflow changes, the arrows alter
+                // the widths of the content and wrapper
+                // and need to be recalculated
+                isOverflowing: "setWidths",
+                scrollOffset: function scrollOffset(val) {
+                  this.$refs.content.style.transform =
+                    "translateX(" + -val + "px)";
+                },
+              },
+              beforeUpdate: function beforeUpdate() {
+                this.internalItemsLength = (this.$children || []).length;
+              },
+              updated: function updated() {
+                if (this.internalItemsLength === (this.$children || []).length)
+                  return;
+                this.setWidths();
+              },
+              methods: {
+                // Always generate next for scrollable hint
+                genNext: function genNext() {
+                  var _this = this;
+
+                  var slot = this.$scopedSlots.next
+                    ? this.$scopedSlots.next({})
+                    : this.$slots.next || this.__cachedNext;
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-slide-group__next",
+                      class: {
+                        "v-slide-group__next--disabled": !this.hasNext,
+                      },
+                      on: {
+                        click: function click() {
+                          return _this.onAffixClick("next");
+                        },
+                      },
+                      key: "next",
+                    },
+                    [slot]
+                  );
+                },
+                genContent: function genContent() {
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-slide-group__content",
+                      ref: "content",
+                    },
+                    this.$slots.default
+                  );
+                },
+                genData: function genData() {
+                  return {
+                    class: this.classes,
+                    directives: [
+                      {
+                        name: "resize",
+                        value: this.onResize,
+                      },
+                    ],
+                  };
+                },
+                genIcon: function genIcon(location) {
+                  var icon = location;
+
+                  if (this.$vuetify.rtl && location === "prev") {
+                    icon = "next";
+                  } else if (this.$vuetify.rtl && location === "next") {
+                    icon = "prev";
+                  }
 
+                  var upperLocation =
+                    "" + location[0].toUpperCase() + location.slice(1);
+                  var hasAffix = this["has" + upperLocation];
+                  if (!this.showArrows && !hasAffix) return null;
+                  return this.$createElement(
+                    _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                    {
+                      props: {
+                        disabled: !hasAffix,
+                      },
+                    },
+                    this[icon + "Icon"]
+                  );
+                },
+                // Always generate prev for scrollable hint
+                genPrev: function genPrev() {
+                  var _this = this;
+
+                  var slot = this.$scopedSlots.prev
+                    ? this.$scopedSlots.prev({})
+                    : this.$slots.prev || this.__cachedPrev;
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-slide-group__prev",
+                      class: {
+                        "v-slide-group__prev--disabled": !this.hasPrev,
+                      },
+                      on: {
+                        click: function click() {
+                          return _this.onAffixClick("prev");
+                        },
+                      },
+                      key: "prev",
+                    },
+                    [slot]
+                  );
+                },
+                genTransition: function genTransition(location) {
+                  return this.$createElement(
+                    _transitions__WEBPACK_IMPORTED_MODULE_2__[
+                      "VFadeTransition"
+                    ],
+                    [this.genIcon(location)]
+                  );
+                },
+                genWrapper: function genWrapper() {
+                  var _this = this;
+
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-slide-group__wrapper",
+                      directives: [
+                        {
+                          name: "touch",
+                          value: {
+                            start: function start(e) {
+                              return _this.overflowCheck(e, _this.onTouchStart);
+                            },
+                            move: function move(e) {
+                              return _this.overflowCheck(e, _this.onTouchMove);
+                            },
+                            end: function end(e) {
+                              return _this.overflowCheck(e, _this.onTouchEnd);
+                            },
+                          },
+                        },
+                      ],
+                      ref: "wrapper",
+                    },
+                    [this.genContent()]
+                  );
+                },
+                calculateNewOffset: function calculateNewOffset(
+                  direction,
+                  widths,
+                  rtl,
+                  currentScrollOffset
+                ) {
+                  var sign = rtl ? -1 : 1;
+                  var newAbosluteOffset =
+                    sign * currentScrollOffset +
+                    (direction === "prev" ? -1 : 1) * widths.wrapper;
+                  return (
+                    sign *
+                    Math.max(
+                      Math.min(
+                        newAbosluteOffset,
+                        widths.content - widths.wrapper
+                      ),
+                      0
+                    )
+                  );
+                },
+                onAffixClick: function onAffixClick(location) {
+                  this.$emit("click:" + location);
+                  this.scrollTo(location);
+                },
+                onResize: function onResize() {
+                  /* istanbul ignore next */
+                  if (this._isDestroyed) return;
+                  this.setWidths();
+                },
+                onTouchStart: function onTouchStart(e) {
+                  var content = this.$refs.content;
+                  this.startX = this.scrollOffset + e.touchstartX;
+                  content.style.setProperty("transition", "none");
+                  content.style.setProperty("willChange", "transform");
+                },
+                onTouchMove: function onTouchMove(e) {
+                  this.scrollOffset = this.startX - e.touchmoveX;
+                },
+                onTouchEnd: function onTouchEnd() {
+                  var _a = this.$refs,
+                    content = _a.content,
+                    wrapper = _a.wrapper;
+                  var maxScrollOffset =
+                    content.clientWidth - wrapper.clientWidth;
+                  content.style.setProperty("transition", null);
+                  content.style.setProperty("willChange", null);
+
+                  if (this.$vuetify.rtl) {
+                    /* istanbul ignore else */
+                    if (this.scrollOffset > 0 || !this.isOverflowing) {
+                      this.scrollOffset = 0;
+                    } else if (this.scrollOffset <= -maxScrollOffset) {
+                      this.scrollOffset = -maxScrollOffset;
+                    }
+                  } else {
+                    /* istanbul ignore else */
+                    if (this.scrollOffset < 0 || !this.isOverflowing) {
+                      this.scrollOffset = 0;
+                    } else if (this.scrollOffset >= maxScrollOffset) {
+                      this.scrollOffset = maxScrollOffset;
+                    }
+                  }
+                },
+                overflowCheck: function overflowCheck(e, fn) {
+                  e.stopPropagation();
+                  this.isOverflowing && fn(e);
+                },
+                scrollIntoView:
+                  /* istanbul ignore next */
+                  function scrollIntoView() {
+                    if (!this.selectedItem) {
+                      return;
+                    }
+
+                    if (
+                      this.selectedIndex === 0 ||
+                      (!this.centerActive && !this.isOverflowing)
+                    ) {
+                      this.scrollOffset = 0;
+                    } else if (this.centerActive) {
+                      this.scrollOffset = this.calculateCenteredOffset(
+                        this.selectedItem.$el,
+                        this.widths,
+                        this.$vuetify.rtl
+                      );
+                    } else if (this.isOverflowing) {
+                      this.scrollOffset = this.calculateUpdatedOffset(
+                        this.selectedItem.$el,
+                        this.widths,
+                        this.$vuetify.rtl,
+                        this.scrollOffset
+                      );
+                    }
+                  },
+                calculateUpdatedOffset: function calculateUpdatedOffset(
+                  selectedElement,
+                  widths,
+                  rtl,
+                  currentScrollOffset
+                ) {
+                  var clientWidth = selectedElement.clientWidth;
+                  var offsetLeft = rtl
+                    ? widths.content - selectedElement.offsetLeft - clientWidth
+                    : selectedElement.offsetLeft;
+
+                  if (rtl) {
+                    currentScrollOffset = -currentScrollOffset;
+                  }
 
+                  var totalWidth = widths.wrapper + currentScrollOffset;
+                  var itemOffset = clientWidth + offsetLeft;
+                  var additionalOffset = clientWidth * 0.4;
+
+                  if (offsetLeft <= currentScrollOffset) {
+                    currentScrollOffset = Math.max(
+                      offsetLeft - additionalOffset,
+                      0
+                    );
+                  } else if (totalWidth <= itemOffset) {
+                    currentScrollOffset = Math.min(
+                      currentScrollOffset -
+                        (totalWidth - itemOffset - additionalOffset),
+                      widths.content - widths.wrapper
+                    );
+                  }
 
+                  return rtl ? -currentScrollOffset : currentScrollOffset;
+                },
+                calculateCenteredOffset: function calculateCenteredOffset(
+                  selectedElement,
+                  widths,
+                  rtl
+                ) {
+                  var offsetLeft = selectedElement.offsetLeft,
+                    clientWidth = selectedElement.clientWidth;
+
+                  if (rtl) {
+                    var offsetCentered =
+                      widths.content -
+                      offsetLeft -
+                      clientWidth / 2 -
+                      widths.wrapper / 2;
+                    return -Math.min(
+                      widths.content - widths.wrapper,
+                      Math.max(0, offsetCentered)
+                    );
+                  } else {
+                    var offsetCentered =
+                      offsetLeft + clientWidth / 2 - widths.wrapper / 2;
+                    return Math.min(
+                      widths.content - widths.wrapper,
+                      Math.max(0, offsetCentered)
+                    );
+                  }
+                },
+                scrollTo:
+                  /* istanbul ignore next */
+                  function scrollTo(location) {
+                    this.scrollOffset = this.calculateNewOffset(
+                      location,
+                      {
+                        // Force reflow
+                        content: this.$refs.content
+                          ? this.$refs.content.clientWidth
+                          : 0,
+                        wrapper: this.$refs.wrapper
+                          ? this.$refs.wrapper.clientWidth
+                          : 0,
+                      },
+                      this.$vuetify.rtl,
+                      this.scrollOffset
+                    );
+                  },
+                setWidths:
+                  /* istanbul ignore next */
+                  function setWidths() {
+                    var _this = this;
+
+                    window.requestAnimationFrame(function () {
+                      var _a = _this.$refs,
+                        content = _a.content,
+                        wrapper = _a.wrapper;
+                      _this.widths = {
+                        content: content ? content.clientWidth : 0,
+                        wrapper: wrapper ? wrapper.clientWidth : 0,
+                      };
+                      _this.isOverflowing =
+                        _this.widths.wrapper < _this.widths.content;
+
+                      _this.scrollIntoView();
+                    });
+                  },
+              },
+              render: function render(h) {
+                return h("div", this.genData(), [
+                  this.genPrev(),
+                  this.genWrapper(),
+                  this.genNext(),
+                ]);
+              },
+            });
+            /* harmony default export */ __webpack_exports__["default"] =
+              BaseSlideGroup.extend({
+                name: "v-slide-group",
+                provide: function provide() {
+                  return {
+                    slideGroup: this,
+                  };
+                },
+              });
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(_mixins_header__WEBPACK_IMPORTED_MODULE_1__["default"]).extend({
-  name: 'v-data-table-header-desktop',
-  methods: {
-    genGroupByToggle: function genGroupByToggle(header) {
-      var _this = this;
+            /***/
+          },
 
-      return this.$createElement('span', {
-        on: {
-          click: function click(e) {
-            e.stopPropagation();
+        /***/ "./src/components/VSlideGroup/VSlideItem.ts":
+          /*!**************************************************!*\
+  !*** ./src/components/VSlideGroup/VSlideItem.ts ***!
+  \**************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VItemGroup_VItem__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VItemGroup/VItem */ "./src/components/VItemGroup/VItem.ts"
+              );
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Extensions
+            // Mixins
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _VItemGroup_VItem__WEBPACK_IMPORTED_MODULE_0__["BaseItem"],
+                Object(
+                  _mixins_groupable__WEBPACK_IMPORTED_MODULE_1__["factory"]
+                )("slideGroup")
+                /* @vue/component */
+              ).extend({
+                name: "v-slide-item",
+              });
 
-            _this.$emit('group', header.value);
-          }
-        }
-      }, ['group']);
-    },
-    getAria: function getAria(beingSorted, isDesc) {
-      var _this = this;
+            /***/
+          },
 
-      var $t = function $t(key) {
-        return _this.$vuetify.lang.t("$vuetify.dataTable.ariaLabel." + key);
-      };
+        /***/ "./src/components/VSlideGroup/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VSlideGroup/index.ts ***!
+  \*********************************************/
+          /*! exports provided: VSlideGroup, VSlideItem, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSlideGroup__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSlideGroup */ "./src/components/VSlideGroup/VSlideGroup.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideGroup",
+              function () {
+                return _VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VSlideItem__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VSlideItem */ "./src/components/VSlideGroup/VSlideItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideItem",
+              function () {
+                return _VSlideItem__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VSlideGroup:
+                  _VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VSlideItem: _VSlideItem__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
-      var ariaSort = 'none';
-      var ariaLabel = [$t('sortNone'), $t('activateAscending')];
+            /***/
+          },
 
-      if (!beingSorted) {
-        return {
-          ariaSort: ariaSort,
-          ariaLabel: ariaLabel.join(' ')
-        };
-      }
+        /***/ "./src/components/VSlider/VSlider.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VSlider/VSlider.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (isDesc) {
-        ariaSort = 'descending';
-        ariaLabel = [$t('sortDescending'), $t(this.options.mustSort ? 'activateAscending' : 'activateNone')];
-      } else {
-        ariaSort = 'ascending';
-        ariaLabel = [$t('sortAscending'), $t('activateDescending')];
-      }
+        /***/ "./src/components/VSlider/VSlider.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VSlider/VSlider.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSlider_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSlider.sass */ "./src/components/VSlider/VSlider.sass"
+              );
+            /* harmony import */ var _VSlider_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSlider_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts"
+              );
+            /* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      return {
-        ariaSort: ariaSort,
-        ariaLabel: ariaLabel.join(' ')
-      };
-    },
-    genHeader: function genHeader(header) {
-      var _this = this;
-
-      var data = {
-        attrs: {
-          role: 'columnheader',
-          scope: 'col',
-          'aria-label': header.text || ''
-        },
-        style: {
-          width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["convertToUnit"])(header.width),
-          minWidth: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["convertToUnit"])(header.width)
-        },
-        class: __spread(["text-" + (header.align || 'start')], Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["wrapInArray"])(header.class), [header.divider && 'v-data-table__divider']),
-        on: {}
-      };
-      var children = [];
+            // Components
+
+            // Mixins
+
+            // Directives
+
+            // Helpers
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _VInput__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_loadable__WEBPACK_IMPORTED_MODULE_4__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-slider",
+                directives: {
+                  ClickOutside:
+                    _directives_click_outside__WEBPACK_IMPORTED_MODULE_5__[
+                      "default"
+                    ],
+                },
+                mixins: [
+                  _mixins_loadable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                ],
+                props: {
+                  disabled: Boolean,
+                  inverseLabel: Boolean,
+                  max: {
+                    type: [Number, String],
+                    default: 100,
+                  },
+                  min: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  step: {
+                    type: [Number, String],
+                    default: 1,
+                  },
+                  thumbColor: String,
+                  thumbLabel: {
+                    type: [Boolean, String],
+                    default: undefined,
+                    validator: function validator(v) {
+                      return typeof v === "boolean" || v === "always";
+                    },
+                  },
+                  thumbSize: {
+                    type: [Number, String],
+                    default: 32,
+                  },
+                  tickLabels: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  ticks: {
+                    type: [Boolean, String],
+                    default: false,
+                    validator: function validator(v) {
+                      return typeof v === "boolean" || v === "always";
+                    },
+                  },
+                  tickSize: {
+                    type: [Number, String],
+                    default: 2,
+                  },
+                  trackColor: String,
+                  trackFillColor: String,
+                  value: [Number, String],
+                  vertical: Boolean,
+                },
+                data: function data() {
+                  return {
+                    app: null,
+                    oldValue: null,
+                    keyPressed: 0,
+                    isFocused: false,
+                    isActive: false,
+                    noClick: false,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-input__slider": true,
+                        "v-input__slider--vertical": this.vertical,
+                        "v-input__slider--inverse-label": this.inverseLabel,
+                      }
+                    );
+                  },
+                  internalValue: {
+                    get: function get() {
+                      return this.lazyValue;
+                    },
+                    set: function set(val) {
+                      val = isNaN(val) ? this.minValue : val; // Round value to ensure the
+                      // entire slider range can
+                      // be selected with step
+
+                      var value = this.roundValue(
+                        Math.min(Math.max(val, this.minValue), this.maxValue)
+                      );
+                      if (value === this.lazyValue) return;
+                      this.lazyValue = value;
+                      this.$emit("input", value);
+                    },
+                  },
+                  trackTransition: function trackTransition() {
+                    return this.keyPressed >= 2 ? "none" : "";
+                  },
+                  minValue: function minValue() {
+                    return parseFloat(this.min);
+                  },
+                  maxValue: function maxValue() {
+                    return parseFloat(this.max);
+                  },
+                  stepNumeric: function stepNumeric() {
+                    return this.step > 0 ? parseFloat(this.step) : 0;
+                  },
+                  inputWidth: function inputWidth() {
+                    return (
+                      ((this.roundValue(this.internalValue) - this.minValue) /
+                        (this.maxValue - this.minValue)) *
+                      100
+                    );
+                  },
+                  trackFillStyles: function trackFillStyles() {
+                    var _a;
+
+                    var startDir = this.vertical ? "bottom" : "left";
+                    var endDir = this.vertical ? "top" : "right";
+                    var valueDir = this.vertical ? "height" : "width";
+                    var start = this.$vuetify.rtl ? "auto" : "0";
+                    var end = this.$vuetify.rtl ? "0" : "auto";
+                    var value = this.isDisabled
+                      ? "calc(" + this.inputWidth + "% - 10px)"
+                      : this.inputWidth + "%";
+                    return (
+                      (_a = {
+                        transition: this.trackTransition,
+                      }),
+                      (_a[startDir] = start),
+                      (_a[endDir] = end),
+                      (_a[valueDir] = value),
+                      _a
+                    );
+                  },
+                  trackStyles: function trackStyles() {
+                    var _a;
+
+                    var startDir = this.vertical
+                      ? this.$vuetify.rtl
+                        ? "bottom"
+                        : "top"
+                      : this.$vuetify.rtl
+                      ? "left"
+                      : "right";
+                    var endDir = this.vertical ? "height" : "width";
+                    var start = "0px";
+                    var end = this.isDisabled
+                      ? "calc(" + (100 - this.inputWidth) + "% - 10px)"
+                      : "calc(" + (100 - this.inputWidth) + "%)";
+                    return (
+                      (_a = {
+                        transition: this.trackTransition,
+                      }),
+                      (_a[startDir] = start),
+                      (_a[endDir] = end),
+                      _a
+                    );
+                  },
+                  showTicks: function showTicks() {
+                    return (
+                      this.tickLabels.length > 0 ||
+                      !!(!this.isDisabled && this.stepNumeric && this.ticks)
+                    );
+                  },
+                  numTicks: function numTicks() {
+                    return Math.ceil(
+                      (this.maxValue - this.minValue) / this.stepNumeric
+                    );
+                  },
+                  showThumbLabel: function showThumbLabel() {
+                    return (
+                      !this.isDisabled &&
+                      !!(this.thumbLabel || this.$scopedSlots["thumb-label"])
+                    );
+                  },
+                  computedTrackColor: function computedTrackColor() {
+                    if (this.isDisabled) return undefined;
+                    if (this.trackColor) return this.trackColor;
+                    if (this.isDark) return this.validationState;
+                    return this.validationState || "primary lighten-3";
+                  },
+                  computedTrackFillColor: function computedTrackFillColor() {
+                    if (this.isDisabled) return undefined;
+                    if (this.trackFillColor) return this.trackFillColor;
+                    return this.validationState || this.computedColor;
+                  },
+                  computedThumbColor: function computedThumbColor() {
+                    if (this.thumbColor) return this.thumbColor;
+                    return this.validationState || this.computedColor;
+                  },
+                },
+                watch: {
+                  min: function min(val) {
+                    var parsed = parseFloat(val);
+                    parsed > this.internalValue && this.$emit("input", parsed);
+                  },
+                  max: function max(val) {
+                    var parsed = parseFloat(val);
+                    parsed < this.internalValue && this.$emit("input", parsed);
+                  },
+                  value: {
+                    handler: function handler(v) {
+                      this.internalValue = v;
+                    },
+                  },
+                },
+                // If done in as immediate in
+                // value watcher, causes issues
+                // with vue-test-utils
+                beforeMount: function beforeMount() {
+                  this.internalValue = this.value;
+                },
+                mounted: function mounted() {
+                  // Without a v-app, iOS does not work with body selectors
+                  this.app =
+                    document.querySelector("[data-app]") ||
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_7__["consoleWarn"]
+                    )(
+                      "Missing v-app or a non-body wrapping element with the [data-app] attribute",
+                      this
+                    );
+                },
+                methods: {
+                  genDefaultSlot: function genDefaultSlot() {
+                    var children = [this.genLabel()];
+                    var slider = this.genSlider();
+                    this.inverseLabel
+                      ? children.unshift(slider)
+                      : children.push(slider);
+                    children.push(this.genProgress());
+                    return children;
+                  },
+                  genSlider: function genSlider() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        class: __assign(
+                          {
+                            "v-slider": true,
+                            "v-slider--horizontal": !this.vertical,
+                            "v-slider--vertical": this.vertical,
+                            "v-slider--focused": this.isFocused,
+                            "v-slider--active": this.isActive,
+                            "v-slider--disabled": this.isDisabled,
+                            "v-slider--readonly": this.isReadonly,
+                          },
+                          this.themeClasses
+                        ),
+                        directives: [
+                          {
+                            name: "click-outside",
+                            value: this.onBlur,
+                          },
+                        ],
+                        on: {
+                          click: this.onSliderClick,
+                        },
+                      },
+                      this.genChildren()
+                    );
+                  },
+                  genChildren: function genChildren() {
+                    return [
+                      this.genInput(),
+                      this.genTrackContainer(),
+                      this.genSteps(),
+                      this.genThumbContainer(
+                        this.internalValue,
+                        this.inputWidth,
+                        this.isActive,
+                        this.isFocused,
+                        this.onThumbMouseDown,
+                        this.onFocus,
+                        this.onBlur
+                      ),
+                    ];
+                  },
+                  genInput: function genInput() {
+                    return this.$createElement("input", {
+                      attrs: __assign(
+                        {
+                          value: this.internalValue,
+                          id: this.computedId,
+                          disabled: true,
+                          readonly: true,
+                          tabindex: -1,
+                        },
+                        this.$attrs
+                      ),
+                    });
+                  },
+                  genTrackContainer: function genTrackContainer() {
+                    var children = [
+                      this.$createElement(
+                        "div",
+                        this.setBackgroundColor(this.computedTrackColor, {
+                          staticClass: "v-slider__track-background",
+                          style: this.trackStyles,
+                        })
+                      ),
+                      this.$createElement(
+                        "div",
+                        this.setBackgroundColor(this.computedTrackFillColor, {
+                          staticClass: "v-slider__track-fill",
+                          style: this.trackFillStyles,
+                        })
+                      ),
+                    ];
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-slider__track-container",
+                        ref: "track",
+                      },
+                      children
+                    );
+                  },
+                  genSteps: function genSteps() {
+                    var _this = this;
+
+                    if (!this.step || !this.showTicks) return null;
+                    var tickSize = parseFloat(this.tickSize);
+                    var range = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_6__["createRange"]
+                    )(this.numTicks + 1);
+                    var direction = this.vertical
+                      ? "bottom"
+                      : this.$vuetify.rtl
+                      ? "right"
+                      : "left";
+                    var offsetDirection = this.vertical
+                      ? this.$vuetify.rtl
+                        ? "left"
+                        : "right"
+                      : "top";
+                    if (this.vertical) range.reverse();
+                    var ticks = range.map(function (index) {
+                      var _a;
+
+                      var children = [];
+
+                      if (_this.tickLabels[index]) {
+                        children.push(
+                          _this.$createElement(
+                            "div",
+                            {
+                              staticClass: "v-slider__tick-label",
+                            },
+                            _this.tickLabels[index]
+                          )
+                        );
+                      }
+
+                      var width = index * (100 / _this.numTicks);
+                      var filled = _this.$vuetify.rtl
+                        ? 100 - _this.inputWidth < width
+                        : width < _this.inputWidth;
+                      return _this.$createElement(
+                        "span",
+                        {
+                          key: index,
+                          staticClass: "v-slider__tick",
+                          class: {
+                            "v-slider__tick--filled": filled,
+                          },
+                          style:
+                            ((_a = {
+                              width: tickSize + "px",
+                              height: tickSize + "px",
+                            }),
+                            (_a[direction] =
+                              "calc(" + width + "% - " + tickSize / 2 + "px)"),
+                            (_a[offsetDirection] =
+                              "calc(50% - " + tickSize / 2 + "px)"),
+                            _a),
+                        },
+                        children
+                      );
+                    });
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-slider__ticks-container",
+                        class: {
+                          "v-slider__ticks-container--always-show":
+                            this.ticks === "always" ||
+                            this.tickLabels.length > 0,
+                        },
+                      },
+                      ticks
+                    );
+                  },
+                  genThumbContainer: function genThumbContainer(
+                    value,
+                    valueWidth,
+                    isActive,
+                    isFocused,
+                    onDrag,
+                    onFocus,
+                    onBlur,
+                    ref
+                  ) {
+                    if (ref === void 0) {
+                      ref = "thumb";
+                    }
+
+                    var children = [this.genThumb()];
+                    var thumbLabelContent = this.genThumbLabelContent(value);
+                    this.showThumbLabel &&
+                      children.push(this.genThumbLabel(thumbLabelContent));
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(this.computedThumbColor, {
+                        ref: ref,
+                        key: ref,
+                        staticClass: "v-slider__thumb-container",
+                        class: {
+                          "v-slider__thumb-container--active": isActive,
+                          "v-slider__thumb-container--focused": isFocused,
+                          "v-slider__thumb-container--show-label":
+                            this.showThumbLabel,
+                        },
+                        style: this.getThumbContainerStyles(valueWidth),
+                        attrs: __assign(
+                          {
+                            role: "slider",
+                            tabindex: this.isDisabled
+                              ? -1
+                              : this.$attrs.tabindex
+                              ? this.$attrs.tabindex
+                              : 0,
+                            "aria-label": this.label,
+                            "aria-valuemin": this.min,
+                            "aria-valuemax": this.max,
+                            "aria-valuenow": this.internalValue,
+                            "aria-readonly": String(this.isReadonly),
+                            "aria-orientation": this.vertical
+                              ? "vertical"
+                              : "horizontal",
+                          },
+                          this.$attrs
+                        ),
+                        on: {
+                          focus: onFocus,
+                          blur: onBlur,
+                          keydown: this.onKeyDown,
+                          keyup: this.onKeyUp,
+                          touchstart: onDrag,
+                          mousedown: onDrag,
+                        },
+                      }),
+                      children
+                    );
+                  },
+                  genThumbLabelContent: function genThumbLabelContent(value) {
+                    return this.$scopedSlots["thumb-label"]
+                      ? this.$scopedSlots["thumb-label"]({
+                          value: value,
+                        })
+                      : [this.$createElement("span", [String(value)])];
+                  },
+                  genThumbLabel: function genThumbLabel(content) {
+                    var size = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                        "convertToUnit"
+                      ]
+                    )(this.thumbSize);
+                    var transform = this.vertical
+                      ? "translateY(20%) translateY(" +
+                        (Number(this.thumbSize) / 3 - 1) +
+                        "px) translateX(55%) rotate(135deg)"
+                      : "translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg)";
+                    return this.$createElement(
+                      _transitions__WEBPACK_IMPORTED_MODULE_2__[
+                        "VScaleTransition"
+                      ],
+                      {
+                        props: {
+                          origin: "bottom center",
+                        },
+                      },
+                      [
+                        this.$createElement(
+                          "div",
+                          {
+                            staticClass: "v-slider__thumb-label-container",
+                            directives: [
+                              {
+                                name: "show",
+                                value:
+                                  this.isFocused ||
+                                  this.isActive ||
+                                  this.thumbLabel === "always",
+                              },
+                            ],
+                          },
+                          [
+                            this.$createElement(
+                              "div",
+                              this.setBackgroundColor(this.computedThumbColor, {
+                                staticClass: "v-slider__thumb-label",
+                                style: {
+                                  height: size,
+                                  width: size,
+                                  transform: transform,
+                                },
+                              }),
+                              [this.$createElement("div", content)]
+                            ),
+                          ]
+                        ),
+                      ]
+                    );
+                  },
+                  genThumb: function genThumb() {
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(this.computedThumbColor, {
+                        staticClass: "v-slider__thumb",
+                      })
+                    );
+                  },
+                  getThumbContainerStyles: function getThumbContainerStyles(
+                    width
+                  ) {
+                    var _a;
+
+                    var direction = this.vertical ? "top" : "left";
+                    var value = this.$vuetify.rtl ? 100 - width : width;
+                    value = this.vertical ? 100 - value : value;
+                    return (
+                      (_a = {
+                        transition: this.trackTransition,
+                      }),
+                      (_a[direction] = value + "%"),
+                      _a
+                    );
+                  },
+                  onThumbMouseDown: function onThumbMouseDown(e) {
+                    e.preventDefault();
+                    this.oldValue = this.internalValue;
+                    this.keyPressed = 2;
+                    this.isActive = true;
+                    var mouseUpOptions =
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                        "passiveSupported"
+                      ]
+                        ? {
+                            passive: true,
+                            capture: true,
+                          }
+                        : true;
+                    var mouseMoveOptions =
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                        "passiveSupported"
+                      ]
+                        ? {
+                            passive: true,
+                          }
+                        : false;
+
+                    if ("touches" in e) {
+                      this.app.addEventListener(
+                        "touchmove",
+                        this.onMouseMove,
+                        mouseMoveOptions
+                      );
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                          "addOnceEventListener"
+                        ]
+                      )(
+                        this.app,
+                        "touchend",
+                        this.onSliderMouseUp,
+                        mouseUpOptions
+                      );
+                    } else {
+                      this.app.addEventListener(
+                        "mousemove",
+                        this.onMouseMove,
+                        mouseMoveOptions
+                      );
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                          "addOnceEventListener"
+                        ]
+                      )(
+                        this.app,
+                        "mouseup",
+                        this.onSliderMouseUp,
+                        mouseUpOptions
+                      );
+                    }
+
+                    this.$emit("start", this.internalValue);
+                  },
+                  onSliderMouseUp: function onSliderMouseUp(e) {
+                    e.stopPropagation();
+                    this.keyPressed = 0;
+                    var mouseMoveOptions =
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_6__[
+                        "passiveSupported"
+                      ]
+                        ? {
+                            passive: true,
+                          }
+                        : false;
+                    this.app.removeEventListener(
+                      "touchmove",
+                      this.onMouseMove,
+                      mouseMoveOptions
+                    );
+                    this.app.removeEventListener(
+                      "mousemove",
+                      this.onMouseMove,
+                      mouseMoveOptions
+                    );
+                    this.$emit("mouseup", e);
+                    this.$emit("end", this.internalValue);
+
+                    if (
+                      !Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["deepEqual"]
+                      )(this.oldValue, this.internalValue)
+                    ) {
+                      this.$emit("change", this.internalValue);
+                      this.noClick = true;
+                    }
+
+                    this.isActive = false;
+                  },
+                  onMouseMove: function onMouseMove(e) {
+                    var value = this.parseMouseMove(e).value;
+                    this.internalValue = value;
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    if (!this.isInteractive) return;
+                    var value = this.parseKeyDown(e, this.internalValue);
+                    if (
+                      value == null ||
+                      value < this.minValue ||
+                      value > this.maxValue
+                    )
+                      return;
+                    this.internalValue = value;
+                    this.$emit("change", value);
+                  },
+                  onKeyUp: function onKeyUp() {
+                    this.keyPressed = 0;
+                  },
+                  onSliderClick: function onSliderClick(e) {
+                    if (this.noClick) {
+                      this.noClick = false;
+                      return;
+                    }
+
+                    var thumb = this.$refs.thumb;
+                    thumb.focus();
+                    this.onMouseMove(e);
+                    this.$emit("change", this.internalValue);
+                  },
+                  onBlur: function onBlur(e) {
+                    this.isFocused = false;
+                    this.$emit("blur", e);
+                  },
+                  onFocus: function onFocus(e) {
+                    this.isFocused = true;
+                    this.$emit("focus", e);
+                  },
+                  parseMouseMove: function parseMouseMove(e) {
+                    var start = this.vertical ? "top" : "left";
+                    var length = this.vertical ? "height" : "width";
+                    var click = this.vertical ? "clientY" : "clientX";
+
+                    var _a = this.$refs.track.getBoundingClientRect(),
+                      _b = start,
+                      trackStart = _a[_b],
+                      _c = length,
+                      trackLength = _a[_c];
+
+                    var clickOffset =
+                      "touches" in e ? e.touches[0][click] : e[click]; // Can we get rid of any here?
+                    // It is possible for left to be NaN, force to number
+
+                    var clickPos =
+                      Math.min(
+                        Math.max((clickOffset - trackStart) / trackLength, 0),
+                        1
+                      ) || 0;
+                    if (this.vertical) clickPos = 1 - clickPos;
+                    if (this.$vuetify.rtl) clickPos = 1 - clickPos;
+                    var isInsideTrack =
+                      clickOffset >= trackStart &&
+                      clickOffset <= trackStart + trackLength;
+                    var value =
+                      parseFloat(this.min) +
+                      clickPos * (this.maxValue - this.minValue);
+                    return {
+                      value: value,
+                      isInsideTrack: isInsideTrack,
+                    };
+                  },
+                  parseKeyDown: function parseKeyDown(e, value) {
+                    if (!this.isInteractive) return;
+                    var pageup =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .pageup,
+                      pagedown =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .pagedown,
+                      end =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .end,
+                      home =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .home,
+                      left =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .left,
+                      right =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .right,
+                      down =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .down,
+                      up =
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"]
+                          .up;
+                    if (
+                      ![
+                        pageup,
+                        pagedown,
+                        end,
+                        home,
+                        left,
+                        right,
+                        down,
+                        up,
+                      ].includes(e.keyCode)
+                    )
+                      return;
+                    e.preventDefault();
+                    var step = this.stepNumeric || 1;
+                    var steps = (this.maxValue - this.minValue) / step;
+
+                    if ([left, right, down, up].includes(e.keyCode)) {
+                      this.keyPressed += 1;
+                      var increase = this.$vuetify.rtl
+                        ? [left, up]
+                        : [right, up];
+                      var direction = increase.includes(e.keyCode) ? 1 : -1;
+                      var multiplier = e.shiftKey ? 3 : e.ctrlKey ? 2 : 1;
+                      value = value + direction * step * multiplier;
+                    } else if (e.keyCode === home) {
+                      value = this.minValue;
+                    } else if (e.keyCode === end) {
+                      value = this.maxValue;
+                    } else {
+                      var direction = e.keyCode === pagedown ? 1 : -1;
+                      value =
+                        value -
+                        direction * step * (steps > 100 ? steps / 10 : 10);
+                    }
+
+                    return value;
+                  },
+                  roundValue: function roundValue(value) {
+                    if (!this.stepNumeric) return value; // Format input value using the same number
+                    // of decimals places as in the step prop
+
+                    var trimmedStep = this.step.toString().trim();
+                    var decimals =
+                      trimmedStep.indexOf(".") > -1
+                        ? trimmedStep.length - trimmedStep.indexOf(".") - 1
+                        : 0;
+                    var offset = this.minValue % this.stepNumeric;
+                    var newValue =
+                      Math.round((value - offset) / this.stepNumeric) *
+                        this.stepNumeric +
+                      offset;
+                    return parseFloat(
+                      Math.min(newValue, this.maxValue).toFixed(decimals)
+                    );
+                  },
+                },
+              });
 
-      if (header.value === 'data-table-select' && !this.singleSelect) {
-        return this.$createElement('th', data, [this.genSelectAll()]);
-      }
+            /***/
+          },
 
-      children.push(this.$scopedSlots[header.value] ? this.$scopedSlots[header.value]({
-        header: header
-      }) : this.$createElement('span', [header.text]));
+        /***/ "./src/components/VSlider/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VSlider/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VSlider, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSlider__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSlider */ "./src/components/VSlider/VSlider.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlider",
+              function () {
+                return _VSlider__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      if (!this.disableSort && (header.sortable || !header.hasOwnProperty('sortable'))) {
-        data.on.click = function () {
-          return _this.$emit('sort', header.value);
-        };
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSlider__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-        var sortIndex = this.options.sortBy.findIndex(function (k) {
-          return k === header.value;
-        });
-        var beingSorted = sortIndex >= 0;
-        var isDesc = this.options.sortDesc[sortIndex];
-        data.class.push('sortable');
+            /***/
+          },
 
-        var _a = this.getAria(beingSorted, isDesc),
-            ariaLabel = _a.ariaLabel,
-            ariaSort = _a.ariaSort;
+        /***/ "./src/components/VSnackbar/VSnackbar.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VSnackbar/VSnackbar.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-        data.attrs['aria-label'] += "" + (header.text ? ': ' : '') + ariaLabel;
-        data.attrs['aria-sort'] = ariaSort;
+        /***/ "./src/components/VSnackbar/VSnackbar.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VSnackbar/VSnackbar.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSnackbar_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSnackbar.sass */ "./src/components/VSnackbar/VSnackbar.sass"
+              );
+            /* harmony import */ var _VSnackbar_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSnackbar_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            // Styles
+            // Components
+
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(
+                _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["default"],
+                Object(
+                  _mixins_positionable__WEBPACK_IMPORTED_MODULE_5__["factory"]
+                )(["absolute", "bottom", "left", "right", "top"])
+                /* @vue/component */
+              ).extend({
+                name: "v-snackbar",
+                props: {
+                  app: Boolean,
+                  centered: Boolean,
+                  contentClass: {
+                    type: String,
+                    default: "",
+                  },
+                  multiLine: Boolean,
+                  text: Boolean,
+                  timeout: {
+                    type: [Number, String],
+                    default: 5000,
+                  },
+                  transition: {
+                    type: [Boolean, String],
+                    default: "v-snack-transition",
+                    validator: function validator(v) {
+                      return typeof v === "string" || v === false;
+                    },
+                  },
+                  vertical: Boolean,
+                },
+                data: function data() {
+                  return {
+                    activeTimeout: -1,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return {
+                      "v-snack--absolute": this.absolute,
+                      "v-snack--active": this.isActive,
+                      "v-snack--bottom": this.bottom || !this.top,
+                      "v-snack--centered": this.centered,
+                      "v-snack--has-background": this.hasBackground,
+                      "v-snack--left": this.left,
+                      "v-snack--multi-line": this.multiLine && !this.vertical,
+                      "v-snack--right": this.right,
+                      "v-snack--text": this.text,
+                      "v-snack--top": this.top,
+                      "v-snack--vertical": this.vertical,
+                    };
+                  },
+                  // Text and outlined styles both
+                  // use transparent backgrounds
+                  hasBackground: function hasBackground() {
+                    return !this.text && !this.outlined;
+                  },
+                  // Snackbar is dark by default
+                  // override themeable logic.
+                  isDark: function isDark() {
+                    return this.hasBackground
+                      ? !this.light
+                      : _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__[
+                          "default"
+                        ].options.computed.isDark.call(this);
+                  },
+                  styles: function styles() {
+                    // Styles are not needed when
+                    // using the absolute prop.
+                    if (this.absolute) return {};
+                    var _a = this.$vuetify.application,
+                      bar = _a.bar,
+                      bottom = _a.bottom,
+                      footer = _a.footer,
+                      insetFooter = _a.insetFooter,
+                      left = _a.left,
+                      right = _a.right,
+                      top = _a.top; // Should always move for y-axis
+                    // applicationable components.
+
+                    return {
+                      paddingBottom: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                          "convertToUnit"
+                        ]
+                      )(bottom + footer + insetFooter),
+                      paddingLeft: !this.app
+                        ? undefined
+                        : Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                              "convertToUnit"
+                            ]
+                          )(left),
+                      paddingRight: !this.app
+                        ? undefined
+                        : Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                              "convertToUnit"
+                            ]
+                          )(right),
+                      paddingTop: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_7__[
+                          "convertToUnit"
+                        ]
+                      )(bar + top),
+                    };
+                  },
+                },
+                watch: {
+                  isActive: "setTimeout",
+                  timeout: "setTimeout",
+                },
+                mounted: function mounted() {
+                  if (this.isActive) this.setTimeout();
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("auto-height")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_8__["removed"]
+                    )("auto-height", this);
+                  }
+                  /* istanbul ignore next */
+                  // eslint-disable-next-line eqeqeq
 
-        if (beingSorted) {
-          data.class.push('active');
-          data.class.push(isDesc ? 'desc' : 'asc');
-        }
+                  if (this.timeout == 0) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_8__["deprecate"]
+                    )('timeout="0"', "-1", this);
+                  }
+                },
+                methods: {
+                  genActions: function genActions() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-snack__action ",
+                      },
+                      [
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__["getSlot"]
+                        )(this, "action", {
+                          attrs: {
+                            class: "v-snack__btn",
+                          },
+                        }),
+                      ]
+                    );
+                  },
+                  genContent: function genContent() {
+                    var _a;
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-snack__content",
+                        class: ((_a = {}), (_a[this.contentClass] = true), _a),
+                        attrs: {
+                          role: "status",
+                          "aria-live": "polite",
+                        },
+                      },
+                      [
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__["getSlot"]
+                        )(this),
+                      ]
+                    );
+                  },
+                  genWrapper: function genWrapper() {
+                    var setColor = this.hasBackground
+                      ? this.setBackgroundColor
+                      : this.setTextColor;
+                    var data = setColor(this.color, {
+                      staticClass: "v-snack__wrapper",
+                      class:
+                        _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this),
+                      directives: [
+                        {
+                          name: "show",
+                          value: this.isActive,
+                        },
+                      ],
+                    });
+                    return this.$createElement("div", data, [
+                      this.genContent(),
+                      this.genActions(),
+                    ]);
+                  },
+                  genTransition: function genTransition() {
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.transition,
+                        },
+                      },
+                      [this.genWrapper()]
+                    );
+                  },
+                  setTimeout: function setTimeout() {
+                    var _this = this;
+
+                    window.clearTimeout(this.activeTimeout);
+                    var timeout = Number(this.timeout);
+
+                    if (
+                      !this.isActive || // TODO: remove 0 in v3
+                      [0, -1].includes(timeout)
+                    ) {
+                      return;
+                    }
+
+                    this.activeTimeout = window.setTimeout(function () {
+                      _this.isActive = false;
+                    }, timeout);
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-snack",
+                      class: this.classes,
+                      style: this.styles,
+                    },
+                    [
+                      this.transition !== false
+                        ? this.genTransition()
+                        : this.genWrapper(),
+                    ]
+                  );
+                },
+              });
 
-        if (header.align === 'end') children.unshift(this.genSortIcon());else children.push(this.genSortIcon());
+            /***/
+          },
 
-        if (this.options.multiSort && beingSorted) {
-          children.push(this.$createElement('span', {
-            class: 'v-data-table-header__sort-badge'
-          }, [String(sortIndex + 1)]));
-        }
-      }
+        /***/ "./src/components/VSnackbar/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VSnackbar/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VSnackbar, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSnackbar__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSnackbar */ "./src/components/VSnackbar/VSnackbar.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSnackbar",
+              function () {
+                return _VSnackbar__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      if (this.showGroupBy && header.groupable !== false) children.push(this.genGroupByToggle(header));
-      return this.$createElement('th', data, children);
-    }
-  },
-  render: function render() {
-    var _this = this;
-
-    return this.$createElement('thead', {
-      staticClass: 'v-data-table-header'
-    }, [this.$createElement('tr', this.headers.map(function (header) {
-      return _this.genHeader(header);
-    }))]);
-  }
-}));
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSnackbar__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VDataTableHeaderMobile.ts":
-/*!*************************************************************!*\
-  !*** ./src/components/VDataTable/VDataTableHeaderMobile.ts ***!
-  \*************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts");
-/* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VChip */ "./src/components/VChip/index.ts");
-/* harmony import */ var _mixins_header__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mixins/header */ "./src/components/VDataTable/mixins/header.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+        /***/ "./src/components/VSparkline/VSparkline.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VSparkline/VSparkline.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _helpers_core__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./helpers/core */ "./src/components/VSparkline/helpers/core.ts"
+              );
+            /* harmony import */ var _helpers_path__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./helpers/path */ "./src/components/VSparkline/helpers/path.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-  return ar;
-};
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_0__["default"]
+              ).extend({
+                name: "VSparkline",
+                inheritAttrs: false,
+                props: {
+                  autoDraw: Boolean,
+                  autoDrawDuration: {
+                    type: Number,
+                    default: 2000,
+                  },
+                  autoDrawEasing: {
+                    type: String,
+                    default: "ease",
+                  },
+                  autoLineWidth: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  fill: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  gradient: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  gradientDirection: {
+                    type: String,
+                    validator: function validator(val) {
+                      return ["top", "bottom", "left", "right"].includes(val);
+                    },
+                    default: "top",
+                  },
+                  height: {
+                    type: [String, Number],
+                    default: 75,
+                  },
+                  labels: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  labelSize: {
+                    type: [Number, String],
+                    default: 7,
+                  },
+                  lineWidth: {
+                    type: [String, Number],
+                    default: 4,
+                  },
+                  padding: {
+                    type: [String, Number],
+                    default: 8,
+                  },
+                  showLabels: Boolean,
+                  smooth: {
+                    type: [Boolean, Number, String],
+                    default: false,
+                  },
+                  type: {
+                    type: String,
+                    default: "trend",
+                    validator: function validator(val) {
+                      return ["trend", "bar"].includes(val);
+                    },
+                  },
+                  value: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  width: {
+                    type: [Number, String],
+                    default: 300,
+                  },
+                },
+                data: function data() {
+                  return {
+                    lastLength: 0,
+                  };
+                },
+                computed: {
+                  parsedPadding: function parsedPadding() {
+                    return Number(this.padding);
+                  },
+                  parsedWidth: function parsedWidth() {
+                    return Number(this.width);
+                  },
+                  parsedHeight: function parsedHeight() {
+                    return parseInt(this.height, 10);
+                  },
+                  parsedLabelSize: function parsedLabelSize() {
+                    return parseInt(this.labelSize, 10) || 7;
+                  },
+                  totalHeight: function totalHeight() {
+                    var height = this.parsedHeight;
+                    if (this.hasLabels)
+                      height += parseInt(this.labelSize, 10) * 1.5;
+                    return height;
+                  },
+                  totalWidth: function totalWidth() {
+                    var width = this.parsedWidth;
+                    if (this.type === "bar")
+                      width = Math.max(
+                        this.value.length * this._lineWidth,
+                        width
+                      );
+                    return width;
+                  },
+                  totalValues: function totalValues() {
+                    return this.value.length;
+                  },
+                  _lineWidth: function _lineWidth() {
+                    if (this.autoLineWidth && this.type !== "trend") {
+                      var totalPadding =
+                        this.parsedPadding * (this.totalValues + 1);
+                      return (
+                        (this.parsedWidth - totalPadding) / this.totalValues
+                      );
+                    } else {
+                      return parseFloat(this.lineWidth) || 4;
+                    }
+                  },
+                  boundary: function boundary() {
+                    if (this.type === "bar")
+                      return {
+                        minX: 0,
+                        maxX: this.totalWidth,
+                        minY: 0,
+                        maxY: this.parsedHeight,
+                      };
+                    var padding = this.parsedPadding;
+                    return {
+                      minX: padding,
+                      maxX: this.totalWidth - padding,
+                      minY: padding,
+                      maxY: this.parsedHeight - padding,
+                    };
+                  },
+                  hasLabels: function hasLabels() {
+                    return Boolean(
+                      this.showLabels ||
+                        this.labels.length > 0 ||
+                        this.$scopedSlots.label
+                    );
+                  },
+                  parsedLabels: function parsedLabels() {
+                    var labels = [];
+                    var points = this._values;
+                    var len = points.length;
+
+                    for (var i = 0; labels.length < len; i++) {
+                      var item = points[i];
+                      var value = this.labels[i];
+
+                      if (!value) {
+                        value = _typeof(item) === "object" ? item.value : item;
+                      }
+
+                      labels.push({
+                        x: item.x,
+                        value: String(value),
+                      });
+                    }
+
+                    return labels;
+                  },
+                  normalizedValues: function normalizedValues() {
+                    return this.value.map(function (item) {
+                      return typeof item === "number" ? item : item.value;
+                    });
+                  },
+                  _values: function _values() {
+                    return this.type === "trend"
+                      ? Object(
+                          _helpers_core__WEBPACK_IMPORTED_MODULE_2__[
+                            "genPoints"
+                          ]
+                        )(this.normalizedValues, this.boundary)
+                      : Object(
+                          _helpers_core__WEBPACK_IMPORTED_MODULE_2__["genBars"]
+                        )(this.normalizedValues, this.boundary);
+                  },
+                  textY: function textY() {
+                    var y = this.parsedHeight;
+                    if (this.type === "trend") y -= 4;
+                    return y;
+                  },
+                  _radius: function _radius() {
+                    return this.smooth === true ? 8 : Number(this.smooth);
+                  },
+                },
+                watch: {
+                  value: {
+                    immediate: true,
+                    handler: function handler() {
+                      var _this = this;
+
+                      this.$nextTick(function () {
+                        if (
+                          !_this.autoDraw ||
+                          _this.type === "bar" ||
+                          !_this.$refs.path
+                        )
+                          return;
+                        var path = _this.$refs.path;
+                        var length = path.getTotalLength();
+
+                        if (!_this.fill) {
+                          path.style.transition = "none";
+                          path.style.strokeDasharray = length + " " + length;
+                          path.style.strokeDashoffset = Math.abs(
+                            length - (_this.lastLength || 0)
+                          ).toString();
+                          path.getBoundingClientRect();
+                          path.style.transition =
+                            "stroke-dashoffset " +
+                            _this.autoDrawDuration +
+                            "ms " +
+                            _this.autoDrawEasing;
+                          path.style.strokeDashoffset = "0";
+                        } else {
+                          path.style.transformOrigin = "bottom center";
+                          path.style.transition = "none";
+                          path.style.transform = "scaleY(0)";
+                          path.getBoundingClientRect();
+                          path.style.transition =
+                            "transform " +
+                            _this.autoDrawDuration +
+                            "ms " +
+                            _this.autoDrawEasing;
+                          path.style.transform = "scaleY(1)";
+                        }
+
+                        _this.lastLength = length;
+                      });
+                    },
+                  },
+                },
+                methods: {
+                  genGradient: function genGradient() {
+                    var _this = this;
+
+                    var gradientDirection = this.gradientDirection;
+                    var gradient = this.gradient.slice(); // Pushes empty string to force
+                    // a fallback to currentColor
+
+                    if (!gradient.length) gradient.push("");
+                    var len = Math.max(gradient.length - 1, 1);
+                    var stops = gradient.reverse().map(function (color, index) {
+                      return _this.$createElement("stop", {
+                        attrs: {
+                          offset: index / len,
+                          "stop-color": color || "currentColor",
+                        },
+                      });
+                    });
+                    return this.$createElement("defs", [
+                      this.$createElement(
+                        "linearGradient",
+                        {
+                          attrs: {
+                            id: this._uid,
+                            gradientUnits: "userSpaceOnUse",
+                            x1: gradientDirection === "left" ? "100%" : "0",
+                            y1: gradientDirection === "top" ? "100%" : "0",
+                            x2: gradientDirection === "right" ? "100%" : "0",
+                            y2: gradientDirection === "bottom" ? "100%" : "0",
+                          },
+                        },
+                        stops
+                      ),
+                    ]);
+                  },
+                  genG: function genG(children) {
+                    return this.$createElement(
+                      "g",
+                      {
+                        style: {
+                          fontSize: "8",
+                          textAnchor: "middle",
+                          dominantBaseline: "mathematical",
+                          fill: "currentColor",
+                        },
+                      },
+                      children
+                    );
+                  },
+                  genPath: function genPath() {
+                    var points = Object(
+                      _helpers_core__WEBPACK_IMPORTED_MODULE_2__["genPoints"]
+                    )(this.normalizedValues, this.boundary);
+                    return this.$createElement("path", {
+                      attrs: {
+                        d: Object(
+                          _helpers_path__WEBPACK_IMPORTED_MODULE_3__["genPath"]
+                        )(points, this._radius, this.fill, this.parsedHeight),
+                        fill: this.fill ? "url(#" + this._uid + ")" : "none",
+                        stroke: this.fill ? "none" : "url(#" + this._uid + ")",
+                      },
+                      ref: "path",
+                    });
+                  },
+                  genLabels: function genLabels(offsetX) {
+                    var _this = this;
+
+                    var children = this.parsedLabels.map(function (item, i) {
+                      return _this.$createElement(
+                        "text",
+                        {
+                          attrs: {
+                            x: item.x + offsetX + _this._lineWidth / 2,
+                            y: _this.textY + _this.parsedLabelSize * 0.75,
+                            "font-size": Number(_this.labelSize) || 7,
+                          },
+                        },
+                        [_this.genLabel(item, i)]
+                      );
+                    });
+                    return this.genG(children);
+                  },
+                  genLabel: function genLabel(item, index) {
+                    return this.$scopedSlots.label
+                      ? this.$scopedSlots.label({
+                          index: index,
+                          value: item.value,
+                        })
+                      : item.value;
+                  },
+                  genBars: function genBars() {
+                    if (!this.value || this.totalValues < 2) return undefined;
+
+                    var bars = Object(
+                      _helpers_core__WEBPACK_IMPORTED_MODULE_2__["genBars"]
+                    )(this.normalizedValues, this.boundary);
+
+                    var offsetX =
+                      (Math.abs(bars[0].x - bars[1].x) - this._lineWidth) / 2;
+                    return this.$createElement(
+                      "svg",
+                      {
+                        attrs: {
+                          display: "block",
+                          viewBox:
+                            "0 0 " + this.totalWidth + " " + this.totalHeight,
+                        },
+                      },
+                      [
+                        this.genGradient(),
+                        this.genClipPath(
+                          bars,
+                          offsetX,
+                          this._lineWidth,
+                          "sparkline-bar-" + this._uid
+                        ),
+                        this.hasLabels ? this.genLabels(offsetX) : undefined,
+                        this.$createElement(
+                          "g",
+                          {
+                            attrs: {
+                              "clip-path":
+                                "url(#sparkline-bar-" + this._uid + "-clip)",
+                              fill: "url(#" + this._uid + ")",
+                            },
+                          },
+                          [
+                            this.$createElement("rect", {
+                              attrs: {
+                                x: 0,
+                                y: 0,
+                                width: this.totalWidth,
+                                height: this.height,
+                              },
+                            }),
+                          ]
+                        ),
+                      ]
+                    );
+                  },
+                  genClipPath: function genClipPath(
+                    bars,
+                    offsetX,
+                    lineWidth,
+                    id
+                  ) {
+                    var _this = this;
+
+                    var rounding =
+                      typeof this.smooth === "number"
+                        ? this.smooth
+                        : this.smooth
+                        ? 2
+                        : 0;
+                    return this.$createElement(
+                      "clipPath",
+                      {
+                        attrs: {
+                          id: id + "-clip",
+                        },
+                      },
+                      bars.map(function (item) {
+                        return _this.$createElement(
+                          "rect",
+                          {
+                            attrs: {
+                              x: item.x + offsetX,
+                              y: item.y,
+                              width: lineWidth,
+                              height: item.height,
+                              rx: rounding,
+                              ry: rounding,
+                            },
+                          },
+                          [
+                            _this.autoDraw
+                              ? _this.$createElement("animate", {
+                                  attrs: {
+                                    attributeName: "height",
+                                    from: 0,
+                                    to: item.height,
+                                    dur: _this.autoDrawDuration + "ms",
+                                    fill: "freeze",
+                                  },
+                                })
+                              : undefined,
+                          ]
+                        );
+                      })
+                    );
+                  },
+                  genTrend: function genTrend() {
+                    return this.$createElement(
+                      "svg",
+                      this.setTextColor(this.color, {
+                        attrs: __assign(__assign({}, this.$attrs), {
+                          display: "block",
+                          "stroke-width": this._lineWidth || 1,
+                          viewBox: "0 0 " + this.width + " " + this.totalHeight,
+                        }),
+                      }),
+                      [
+                        this.genGradient(),
+                        this.hasLabels &&
+                          this.genLabels(-(this._lineWidth / 2)),
+                        this.genPath(),
+                      ]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  if (this.totalValues < 2) return undefined;
+                  return this.type === "trend"
+                    ? this.genTrend()
+                    : this.genBars();
+                },
+              });
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+            /***/
+          },
 
-  return ar;
-};
+        /***/ "./src/components/VSparkline/helpers/core.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VSparkline/helpers/core.ts ***!
+  \***************************************************/
+          /*! exports provided: genPoints, genBars */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "genPoints",
+              function () {
+                return genPoints;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "genBars",
+              function () {
+                return genBars;
+              }
+            );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
+                return ar;
+              };
 
+            function genPoints(values, boundary) {
+              var minX = boundary.minX,
+                maxX = boundary.maxX,
+                minY = boundary.minY,
+                maxY = boundary.maxY;
+              var totalValues = values.length;
+              var maxValue = Math.max.apply(Math, __spread(values));
+              var minValue = Math.min.apply(Math, __spread(values));
+              var gridX = (maxX - minX) / (totalValues - 1);
+              var gridY = (maxY - minY) / (maxValue - minValue || 1);
+              return values.map(function (value, index) {
+                return {
+                  x: minX + index * gridX,
+                  y: maxY - (value - minValue) * gridY,
+                  value: value,
+                };
+              });
+            }
+            function genBars(values, boundary) {
+              var minX = boundary.minX,
+                maxX = boundary.maxX,
+                minY = boundary.minY,
+                maxY = boundary.maxY;
+              var totalValues = values.length;
+              var maxValue = Math.max.apply(Math, __spread(values));
+              var minValue = Math.min.apply(Math, __spread(values));
+              if (minValue > 0) minValue = 0;
+              if (maxValue < 0) maxValue = 0;
+              var gridX = maxX / totalValues;
+              var gridY = (maxY - minY) / (maxValue - minValue || 1);
+              var horizonY = maxY - Math.abs(minValue * gridY);
+              return values.map(function (value, index) {
+                var height = Math.abs(gridY * value);
+                return {
+                  x: minX + index * gridX,
+                  y: horizonY - height + +(value < 0) * height,
+                  height: height,
+                  value: value,
+                };
+              });
+            }
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(_mixins_header__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'v-data-table-header-mobile',
-  props: {
-    sortByText: {
-      type: String,
-      default: '$vuetify.dataTable.sortBy'
-    }
-  },
-  methods: {
-    genSortChip: function genSortChip(props) {
-      var _this = this;
+            /***/
+          },
 
-      var children = [props.item.text];
-      var sortIndex = this.options.sortBy.findIndex(function (k) {
-        return k === props.item.value;
-      });
-      var beingSorted = sortIndex >= 0;
-      var isDesc = this.options.sortDesc[sortIndex];
-      children.push(this.$createElement('div', {
-        staticClass: 'v-chip__close',
-        class: {
-          sortable: true,
-          active: beingSorted,
-          asc: beingSorted && !isDesc,
-          desc: beingSorted && isDesc
-        }
-      }, [this.genSortIcon()]));
-      return this.$createElement(_VChip__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        staticClass: 'sortable',
-        on: {
-          click: function click(e) {
-            e.stopPropagation();
-
-            _this.$emit('sort', props.item.value);
-          }
-        }
-      }, children);
-    },
-    genSortSelect: function genSortSelect(items) {
-      var _this = this;
-
-      return this.$createElement(_VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          label: this.$vuetify.lang.t(this.sortByText),
-          items: items,
-          hideDetails: true,
-          multiple: this.options.multiSort,
-          value: this.options.multiSort ? this.options.sortBy : this.options.sortBy[0],
-          menuProps: {
-            closeOnContentClick: true
-          }
-        },
-        on: {
-          change: function change(v) {
-            return _this.$emit('sort', v);
-          }
-        },
-        scopedSlots: {
-          selection: function selection(props) {
-            return _this.genSortChip(props);
-          }
-        }
-      });
-    }
-  },
-  render: function render(h) {
-    var children = [];
-    var header = this.headers.find(function (h) {
-      return h.value === 'data-table-select';
-    });
-
-    if (header && !this.singleSelect) {
-      children.push(this.$createElement('div', {
-        class: __spread(['v-data-table-header-mobile__select'], Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["wrapInArray"])(header.class)),
-        attrs: {
-          width: header.width
-        }
-      }, [this.genSelectAll()]));
-    }
-
-    var sortHeaders = this.headers.filter(function (h) {
-      return h.sortable !== false && h.value !== 'data-table-select';
-    }).map(function (h) {
-      return {
-        text: h.text,
-        value: h.value
-      };
-    });
-
-    if (!this.disableSort && sortHeaders.length) {
-      children.push(this.genSortSelect(sortHeaders));
-    }
-
-    var th = h('th', [h('div', {
-      staticClass: 'v-data-table-header-mobile__wrapper'
-    }, children)]);
-    var tr = h('tr', [th]);
-    return h('thead', {
-      staticClass: 'v-data-table-header v-data-table-header-mobile'
-    }, [tr]);
-  }
-}));
+        /***/ "./src/components/VSparkline/helpers/math.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VSparkline/helpers/math.ts ***!
+  \***************************************************/
+          /*! exports provided: checkCollinear, getDistance, moveTo */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "checkCollinear",
+              function () {
+                return checkCollinear;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getDistance",
+              function () {
+                return getDistance;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "moveTo",
+              function () {
+                return moveTo;
+              }
+            );
+            function int(value) {
+              return parseInt(value, 10);
+            }
+            /**
+             * https://en.wikipedia.org/wiki/Collinearity
+             * x=(x1+x2)/2
+             * y=(y1+y2)/2
+             */
+
+            function checkCollinear(p0, p1, p2) {
+              return (
+                int(p0.x + p2.x) === int(2 * p1.x) &&
+                int(p0.y + p2.y) === int(2 * p1.y)
+              );
+            }
+            function getDistance(p1, p2) {
+              return Math.sqrt(
+                Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)
+              );
+            }
+            function moveTo(to, from, radius) {
+              var vector = {
+                x: to.x - from.x,
+                y: to.y - from.y,
+              };
+              var length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
+              var unitVector = {
+                x: vector.x / length,
+                y: vector.y / length,
+              };
+              return {
+                x: from.x + unitVector.x * radius,
+                y: from.y + unitVector.y * radius,
+              };
+            }
 
-/***/ }),
-
-/***/ "./src/components/VDataTable/VEditDialog.sass":
-/*!****************************************************!*\
-  !*** ./src/components/VDataTable/VEditDialog.sass ***!
-  \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+            /***/
+          },
 
-// extracted by mini-css-extract-plugin
+        /***/ "./src/components/VSparkline/helpers/path.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VSparkline/helpers/path.ts ***!
+  \***************************************************/
+          /*! exports provided: genPath */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "genPath",
+              function () {
+                return genPath;
+              }
+            );
+            /* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./math */ "./src/components/VSparkline/helpers/math.ts"
+              );
+
+            /**
+             * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
+             */
+
+            function genPath(points, radius, fill, height) {
+              if (fill === void 0) {
+                fill = false;
+              }
 
-/***/ }),
+              if (height === void 0) {
+                height = 75;
+              }
 
-/***/ "./src/components/VDataTable/VEditDialog.ts":
-/*!**************************************************!*\
-  !*** ./src/components/VDataTable/VEditDialog.ts ***!
-  \**************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VEditDialog_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VEditDialog.sass */ "./src/components/VDataTable/VEditDialog.sass");
-/* harmony import */ var _VEditDialog_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VEditDialog_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_returnable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/returnable */ "./src/mixins/returnable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../VMenu */ "./src/components/VMenu/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Styles
- // Mixins
-
-
- // Utils
-
- // Component
-
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(_mixins_returnable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'v-edit-dialog',
-  props: {
-    cancelText: {
-      default: 'Cancel'
-    },
-    large: Boolean,
-    eager: Boolean,
-    persistent: Boolean,
-    saveText: {
-      default: 'Save'
-    },
-    transition: {
-      type: String,
-      default: 'slide-x-reverse-transition'
-    }
-  },
-  data: function data() {
-    return {
-      isActive: false
-    };
-  },
-  watch: {
-    isActive: function isActive(val) {
-      if (val) {
-        this.$emit('open');
-        setTimeout(this.focus, 50); // Give DOM time to paint
-      } else {
-        this.$emit('close');
-      }
-    }
-  },
-  methods: {
-    cancel: function cancel() {
-      this.isActive = false;
-      this.$emit('cancel');
-    },
-    focus: function focus() {
-      var input = this.$refs.content.querySelector('input');
-      input && input.focus();
-    },
-    genButton: function genButton(fn, text) {
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_4__["default"], {
-        props: {
-          text: true,
-          color: 'primary',
-          light: true
-        },
-        on: {
-          click: fn
-        }
-      }, text);
-    },
-    genActions: function genActions() {
-      var _this = this;
-
-      return this.$createElement('div', {
-        class: 'v-small-dialog__actions'
-      }, [this.genButton(this.cancel, this.cancelText), this.genButton(function () {
-        _this.save(_this.returnValue);
-
-        _this.$emit('save');
-      }, this.saveText)]);
-    },
-    genContent: function genContent() {
-      var _this = this;
-
-      return this.$createElement('div', {
-        staticClass: 'v-small-dialog__content',
-        on: {
-          keydown: function keydown(e) {
-            e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"].esc && _this.cancel();
-
-            if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"].enter) {
-              _this.save(_this.returnValue);
-
-              _this.$emit('save');
+              var start = points.shift();
+              var end = points[points.length - 1];
+              return (
+                (fill
+                  ? "M" +
+                    start.x +
+                    " " +
+                    (height - start.x + 2) +
+                    " L" +
+                    start.x +
+                    " " +
+                    start.y
+                  : "M" + start.x + " " + start.y) +
+                points
+                  .map(function (point, index) {
+                    var next = points[index + 1];
+                    var prev = points[index - 1] || start;
+                    var isCollinear =
+                      next &&
+                      Object(
+                        _math__WEBPACK_IMPORTED_MODULE_0__["checkCollinear"]
+                      )(next, point, prev);
+
+                    if (!next || isCollinear) {
+                      return "L" + point.x + " " + point.y;
+                    }
+
+                    var threshold = Math.min(
+                      Object(_math__WEBPACK_IMPORTED_MODULE_0__["getDistance"])(
+                        prev,
+                        point
+                      ),
+                      Object(_math__WEBPACK_IMPORTED_MODULE_0__["getDistance"])(
+                        next,
+                        point
+                      )
+                    );
+                    var isTooCloseForRadius = threshold / 2 < radius;
+                    var radiusForPoint = isTooCloseForRadius
+                      ? threshold / 2
+                      : radius;
+                    var before = Object(
+                      _math__WEBPACK_IMPORTED_MODULE_0__["moveTo"]
+                    )(prev, point, radiusForPoint);
+                    var after = Object(
+                      _math__WEBPACK_IMPORTED_MODULE_0__["moveTo"]
+                    )(next, point, radiusForPoint);
+                    return (
+                      "L" +
+                      before.x +
+                      " " +
+                      before.y +
+                      "S" +
+                      point.x +
+                      " " +
+                      point.y +
+                      " " +
+                      after.x +
+                      " " +
+                      after.y
+                    );
+                  })
+                  .join("") +
+                (fill ? "L" + end.x + " " + (height - start.x + 2) + " Z" : "")
+              );
             }
-          }
-        },
-        ref: 'content'
-      }, [this.$slots.input]);
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    return h(_VMenu__WEBPACK_IMPORTED_MODULE_5__["default"], {
-      staticClass: 'v-small-dialog',
-      class: this.themeClasses,
-      props: {
-        contentClass: 'v-small-dialog__menu-content',
-        transition: this.transition,
-        origin: 'top right',
-        right: true,
-        value: this.isActive,
-        closeOnClick: !this.persistent,
-        closeOnContentClick: false,
-        eager: this.eager,
-        light: this.light,
-        dark: this.dark
-      },
-      on: {
-        input: function input(val) {
-          return _this.isActive = val;
-        }
-      },
-      scopedSlots: {
-        activator: function activator(_a) {
-          var on = _a.on;
-          return h('div', {
-            staticClass: 'v-small-dialog__activator',
-            on: on
-          }, [h('span', {
-            staticClass: 'v-small-dialog__activator__content'
-          }, _this.$slots.default)]);
-        }
-      }
-    }, [this.genContent(), this.large ? this.genActions() : null]);
-  }
-}));
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VSimpleTable.sass":
-/*!*****************************************************!*\
-  !*** ./src/components/VDataTable/VSimpleTable.sass ***!
-  \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/components/VSparkline/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VSparkline/index.ts ***!
+  \********************************************/
+          /*! exports provided: VSparkline, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSparkline__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSparkline */ "./src/components/VSparkline/VSparkline.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSparkline",
+              function () {
+                return _VSparkline__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-// extracted by mini-css-extract-plugin
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSparkline__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VSimpleTable.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VDataTable/VSimpleTable.ts ***!
+        /***/ "./src/components/VSpeedDial/VSpeedDial.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VSpeedDial/VSpeedDial.sass ***!
   \***************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSimpleTable_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSimpleTable.sass */ "./src/components/VDataTable/VSimpleTable.sass");
-/* harmony import */ var _VSimpleTable_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSimpleTable_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'v-simple-table',
-  props: {
-    dense: Boolean,
-    fixedHeader: Boolean,
-    height: [Number, String]
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-data-table--dense': this.dense,
-        'v-data-table--fixed-height': !!this.height && !this.fixedHeader,
-        'v-data-table--fixed-header': this.fixedHeader,
-        'v-data-table--has-top': !!this.$slots.top,
-        'v-data-table--has-bottom': !!this.$slots.bottom
-      }, this.themeClasses);
-    }
-  },
-  methods: {
-    genWrapper: function genWrapper() {
-      return this.$slots.wrapper || this.$createElement('div', {
-        staticClass: 'v-data-table__wrapper',
-        style: {
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["convertToUnit"])(this.height)
-        }
-      }, [this.$createElement('table', this.$slots.default)]);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-data-table',
-      class: this.classes
-    }, [this.$slots.top, this.genWrapper(), this.$slots.bottom]);
-  }
-}));
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VSpeedDial/VSpeedDial.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VSpeedDial/VSpeedDial.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSpeedDial_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSpeedDial.sass */ "./src/components/VSpeedDial/VSpeedDial.sass"
+              );
+            /* harmony import */ var _VSpeedDial_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSpeedDial_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts"
+              );
+            /* harmony import */ var _mixins_transitionable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/transitionable */ "./src/mixins/transitionable/index.ts"
+              );
+            /* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Styles
+            // Mixins
+
+            // Directives
+
+            // Types
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(
+                _mixins_positionable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_transitionable__WEBPACK_IMPORTED_MODULE_3__["default"]
+              ).extend({
+                name: "v-speed-dial",
+                directives: {
+                  ClickOutside:
+                    _directives_click_outside__WEBPACK_IMPORTED_MODULE_4__[
+                      "default"
+                    ],
+                },
+                props: {
+                  direction: {
+                    type: String,
+                    default: "top",
+                    validator: function validator(val) {
+                      return ["top", "right", "bottom", "left"].includes(val);
+                    },
+                  },
+                  openOnHover: Boolean,
+                  transition: {
+                    type: String,
+                    default: "scale-transition",
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    var _a;
+
+                    return (
+                      (_a = {
+                        "v-speed-dial": true,
+                        "v-speed-dial--top": this.top,
+                        "v-speed-dial--right": this.right,
+                        "v-speed-dial--bottom": this.bottom,
+                        "v-speed-dial--left": this.left,
+                        "v-speed-dial--absolute": this.absolute,
+                        "v-speed-dial--fixed": this.fixed,
+                      }),
+                      (_a["v-speed-dial--direction-" + this.direction] = true),
+                      (_a["v-speed-dial--is-active"] = this.isActive),
+                      _a
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var children = [];
+                  var data = {
+                    class: this.classes,
+                    directives: [
+                      {
+                        name: "click-outside",
+                        value: function value() {
+                          return (_this.isActive = false);
+                        },
+                      },
+                    ],
+                    on: {
+                      click: function click() {
+                        return (_this.isActive = !_this.isActive);
+                      },
+                    },
+                  };
+
+                  if (this.openOnHover) {
+                    data.on.mouseenter = function () {
+                      return (_this.isActive = true);
+                    };
+
+                    data.on.mouseleave = function () {
+                      return (_this.isActive = false);
+                    };
+                  }
 
-/***/ "./src/components/VDataTable/VVirtualTable.sass":
-/*!******************************************************!*\
-  !*** ./src/components/VDataTable/VVirtualTable.sass ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+                  if (this.isActive) {
+                    var btnCount_1 = 0;
+                    children = (this.$slots.default || []).map(function (b, i) {
+                      if (
+                        b.tag &&
+                        typeof b.componentOptions !== "undefined" &&
+                        (b.componentOptions.Ctor.options.name === "v-btn" ||
+                          b.componentOptions.Ctor.options.name === "v-tooltip")
+                      ) {
+                        btnCount_1++;
+                        return h(
+                          "div",
+                          {
+                            style: {
+                              transitionDelay: btnCount_1 * 0.05 + "s",
+                            },
+                            key: i,
+                          },
+                          [b]
+                        );
+                      } else {
+                        b.key = i;
+                        return b;
+                      }
+                    });
+                  }
 
-// extracted by mini-css-extract-plugin
+                  var list = h(
+                    "transition-group",
+                    {
+                      class: "v-speed-dial__list",
+                      props: {
+                        name: this.transition,
+                        mode: this.mode,
+                        origin: this.origin,
+                        tag: "div",
+                      },
+                    },
+                    children
+                  );
+                  return h("div", data, [this.$slots.activator, list]);
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/VVirtualTable.ts":
-/*!****************************************************!*\
-  !*** ./src/components/VDataTable/VVirtualTable.ts ***!
-  \****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VVirtualTable_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VVirtualTable.sass */ "./src/components/VDataTable/VVirtualTable.sass");
-/* harmony import */ var _VVirtualTable_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VVirtualTable_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSimpleTable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VSimpleTable */ "./src/components/VDataTable/VSimpleTable.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
- // Components
-
-
- // Utiltiies
-
- // Types
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_VSimpleTable__WEBPACK_IMPORTED_MODULE_1__["default"]);
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-virtual-table',
-  props: {
-    chunkSize: {
-      type: Number,
-      default: 25
-    },
-    headerHeight: {
-      type: Number,
-      default: 48
-    },
-    items: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    rowHeight: {
-      type: Number,
-      default: 48
-    }
-  },
-  data: function data() {
-    return {
-      scrollTop: 0,
-      oldChunk: 0,
-      scrollDebounce: null,
-      invalidateCache: false
-    };
-  },
-  computed: {
-    itemsLength: function itemsLength() {
-      return this.items.length;
-    },
-    totalHeight: function totalHeight() {
-      return this.itemsLength * this.rowHeight + this.headerHeight;
-    },
-    topIndex: function topIndex() {
-      return Math.floor(this.scrollTop / this.rowHeight);
-    },
-    chunkIndex: function chunkIndex() {
-      return Math.floor(this.topIndex / this.chunkSize);
-    },
-    startIndex: function startIndex() {
-      return Math.max(0, this.chunkIndex * this.chunkSize - this.chunkSize);
-    },
-    offsetTop: function offsetTop() {
-      return Math.max(0, this.startIndex * this.rowHeight);
-    },
-    stopIndex: function stopIndex() {
-      return Math.min(this.startIndex + this.chunkSize * 3, this.itemsLength);
-    },
-    offsetBottom: function offsetBottom() {
-      return Math.max(0, (this.itemsLength - this.stopIndex - this.startIndex) * this.rowHeight);
-    }
-  },
-  watch: {
-    chunkIndex: function chunkIndex(newValue, oldValue) {
-      this.oldChunk = oldValue;
-    },
-    items: function items() {
-      this.cachedItems = null;
-      this.$refs.table.scrollTop = 0;
-    }
-  },
-  created: function created() {
-    this.cachedItems = null;
-  },
-  mounted: function mounted() {
-    this.scrollDebounce = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["debounce"])(this.onScroll, 50);
-    this.$refs.table.addEventListener('scroll', this.scrollDebounce, {
-      passive: true
-    });
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.$refs.table.removeEventListener('scroll', this.scrollDebounce);
-  },
-  methods: {
-    createStyleHeight: function createStyleHeight(height) {
-      return {
-        height: height + "px"
-      };
-    },
-    genBody: function genBody() {
-      if (this.cachedItems === null || this.chunkIndex !== this.oldChunk) {
-        this.cachedItems = this.genItems();
-        this.oldChunk = this.chunkIndex;
-      }
+        /***/ "./src/components/VSpeedDial/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VSpeedDial/index.ts ***!
+  \********************************************/
+          /*! exports provided: VSpeedDial, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSpeedDial__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSpeedDial */ "./src/components/VSpeedDial/VSpeedDial.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSpeedDial",
+              function () {
+                return _VSpeedDial__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      return this.$createElement('tbody', [this.$createElement('tr', {
-        style: this.createStyleHeight(this.offsetTop)
-      }), this.cachedItems, this.$createElement('tr', {
-        style: this.createStyleHeight(this.offsetBottom)
-      })]);
-    },
-    genItems: function genItems() {
-      return this.$scopedSlots.items({
-        items: this.items.slice(this.startIndex, this.stopIndex)
-      });
-    },
-    onScroll: function onScroll(e) {
-      var target = e.target;
-      this.scrollTop = target.scrollTop;
-    },
-    genTable: function genTable() {
-      return this.$createElement('div', {
-        ref: 'table',
-        staticClass: 'v-virtual-table__table'
-      }, [this.$createElement('table', [this.$slots['body.before'], this.genBody(), this.$slots['body.after']])]);
-    },
-    genWrapper: function genWrapper() {
-      return this.$createElement('div', {
-        staticClass: 'v-virtual-table__wrapper',
-        style: {
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(this.height)
-        }
-      }, [this.genTable()]);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-data-table v-virtual-table',
-      class: this.classes
-    }, [this.$slots.top, this.genWrapper(), this.$slots.bottom]);
-  }
-}));
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSpeedDial__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDataTable/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VDataTable/index.ts ***!
-  \********************************************/
-/*! exports provided: VDataTable, VEditDialog, VTableOverflow, VDataTableHeader, VSimpleTable, VVirtualTable, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+        /***/ "./src/components/VStepper/VStepper.sass":
+          /*!***********************************************!*\
+  !*** ./src/components/VStepper/VStepper.sass ***!
+  \***********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VTableOverflow", function() { return VTableOverflow; });
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _VDataTable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VDataTable */ "./src/components/VDataTable/VDataTable.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataTable", function() { return _VDataTable__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+        /***/ "./src/components/VStepper/VStepper.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VStepper/VStepper.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VStepper_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VStepper.sass */ "./src/components/VStepper/VStepper.sass"
+              );
+            /* harmony import */ var _VStepper_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VStepper_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"]
+            )(
+              Object(
+                _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__["provide"]
+              )("stepper"),
+              _mixins_proxyable__WEBPACK_IMPORTED_MODULE_2__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-stepper",
+                provide: function provide() {
+                  return {
+                    stepClick: this.stepClick,
+                    isVertical: this.vertical,
+                  };
+                },
+                props: {
+                  altLabels: Boolean,
+                  nonLinear: Boolean,
+                  vertical: Boolean,
+                },
+                data: function data() {
+                  var data = {
+                    isBooted: false,
+                    steps: [],
+                    content: [],
+                    isReverse: false,
+                  };
+                  data.internalLazyValue =
+                    this.value != null ? this.value : (data[0] || {}).step || 1;
+                  return data;
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-stepper--is-booted": this.isBooted,
+                        "v-stepper--vertical": this.vertical,
+                        "v-stepper--alt-labels": this.altLabels,
+                        "v-stepper--non-linear": this.nonLinear,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                },
+                watch: {
+                  internalValue: function internalValue(val, oldVal) {
+                    this.isReverse = Number(val) < Number(oldVal);
+                    oldVal && (this.isBooted = true);
+                    this.updateView();
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$listeners.input) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_5__["breaking"]
+                    )("@input", "@change", this);
+                  }
+                },
+                mounted: function mounted() {
+                  this.updateView();
+                },
+                methods: {
+                  register: function register(item) {
+                    if (item.$options.name === "v-stepper-step") {
+                      this.steps.push(item);
+                    } else if (item.$options.name === "v-stepper-content") {
+                      item.isVertical = this.vertical;
+                      this.content.push(item);
+                    }
+                  },
+                  unregister: function unregister(item) {
+                    if (item.$options.name === "v-stepper-step") {
+                      this.steps = this.steps.filter(function (i) {
+                        return i !== item;
+                      });
+                    } else if (item.$options.name === "v-stepper-content") {
+                      item.isVertical = this.vertical;
+                      this.content = this.content.filter(function (i) {
+                        return i !== item;
+                      });
+                    }
+                  },
+                  stepClick: function stepClick(step) {
+                    var _this = this;
+
+                    this.$nextTick(function () {
+                      return (_this.internalValue = step);
+                    });
+                  },
+                  updateView: function updateView() {
+                    for (var index = this.steps.length; --index >= 0; ) {
+                      this.steps[index].toggle(this.internalValue);
+                    }
+
+                    for (var index = this.content.length; --index >= 0; ) {
+                      this.content[index].toggle(
+                        this.internalValue,
+                        this.isReverse
+                      );
+                    }
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-stepper",
+                      class: this.classes,
+                    },
+                    this.$slots.default
+                  );
+                },
+              });
 
-/* harmony import */ var _VDataTableHeader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VDataTableHeader */ "./src/components/VDataTable/VDataTableHeader.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataTableHeader", function() { return _VDataTableHeader__WEBPACK_IMPORTED_MODULE_2__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _VEditDialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VEditDialog */ "./src/components/VDataTable/VEditDialog.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VEditDialog", function() { return _VEditDialog__WEBPACK_IMPORTED_MODULE_3__["default"]; });
+        /***/ "./src/components/VStepper/VStepperContent.ts":
+          /*!****************************************************!*\
+  !*** ./src/components/VStepper/VStepperContent.ts ***!
+  \****************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Components
+            // Mixins
+
+            // Helpers
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"]
+            )(
+              Object(
+                _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__["inject"]
+              )("stepper", "v-stepper-content", "v-stepper")
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-stepper-content",
+                inject: {
+                  isVerticalProvided: {
+                    from: "isVertical",
+                  },
+                },
+                props: {
+                  step: {
+                    type: [Number, String],
+                    required: true,
+                  },
+                },
+                data: function data() {
+                  return {
+                    height: 0,
+                    // Must be null to allow
+                    // previous comparison
+                    isActive: null,
+                    isReverse: false,
+                    isVertical: this.isVerticalProvided,
+                  };
+                },
+                computed: {
+                  computedTransition: function computedTransition() {
+                    // Fix for #8978
+                    var reverse = this.$vuetify.rtl
+                      ? !this.isReverse
+                      : this.isReverse;
+                    return reverse
+                      ? _transitions__WEBPACK_IMPORTED_MODULE_0__[
+                          "VTabReverseTransition"
+                        ]
+                      : _transitions__WEBPACK_IMPORTED_MODULE_0__[
+                          "VTabTransition"
+                        ];
+                  },
+                  styles: function styles() {
+                    if (!this.isVertical) return {};
+                    return {
+                      height: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                          "convertToUnit"
+                        ]
+                      )(this.height),
+                    };
+                  },
+                },
+                watch: {
+                  isActive: function isActive(current, previous) {
+                    // If active and the previous state
+                    // was null, is just booting up
+                    if (current && previous == null) {
+                      this.height = "auto";
+                      return;
+                    }
+
+                    if (!this.isVertical) return;
+                    if (this.isActive) this.enter();
+                    else this.leave();
+                  },
+                },
+                mounted: function mounted() {
+                  this.$refs.wrapper.addEventListener(
+                    "transitionend",
+                    this.onTransition,
+                    false
+                  );
+                  this.stepper && this.stepper.register(this);
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.$refs.wrapper.removeEventListener(
+                    "transitionend",
+                    this.onTransition,
+                    false
+                  );
+                  this.stepper && this.stepper.unregister(this);
+                },
+                methods: {
+                  onTransition: function onTransition(e) {
+                    if (!this.isActive || e.propertyName !== "height") return;
+                    this.height = "auto";
+                  },
+                  enter: function enter() {
+                    var _this = this;
+
+                    var scrollHeight = 0; // Render bug with height
+
+                    requestAnimationFrame(function () {
+                      scrollHeight = _this.$refs.wrapper.scrollHeight;
+                    });
+                    this.height = 0; // Give the collapsing element time to collapse
+
+                    setTimeout(function () {
+                      return (
+                        _this.isActive &&
+                        (_this.height = scrollHeight || "auto")
+                      );
+                    }, 450);
+                  },
+                  leave: function leave() {
+                    var _this = this;
+
+                    this.height = this.$refs.wrapper.clientHeight;
+                    setTimeout(function () {
+                      return (_this.height = 0);
+                    }, 10);
+                  },
+                  toggle: function toggle(step, reverse) {
+                    this.isActive = step.toString() === this.step.toString();
+                    this.isReverse = reverse;
+                  },
+                },
+                render: function render(h) {
+                  var contentData = {
+                    staticClass: "v-stepper__content",
+                  };
+                  var wrapperData = {
+                    staticClass: "v-stepper__wrapper",
+                    style: this.styles,
+                    ref: "wrapper",
+                  };
+
+                  if (!this.isVertical) {
+                    contentData.directives = [
+                      {
+                        name: "show",
+                        value: this.isActive,
+                      },
+                    ];
+                  }
 
-/* harmony import */ var _VSimpleTable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VSimpleTable */ "./src/components/VDataTable/VSimpleTable.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSimpleTable", function() { return _VSimpleTable__WEBPACK_IMPORTED_MODULE_4__["default"]; });
+                  var wrapper = h("div", wrapperData, [this.$slots.default]);
+                  var content = h("div", contentData, [wrapper]);
+                  return h(
+                    this.computedTransition,
+                    {
+                      on: this.$listeners,
+                    },
+                    [content]
+                  );
+                },
+              });
 
-/* harmony import */ var _VVirtualTable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VVirtualTable */ "./src/components/VDataTable/VVirtualTable.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VVirtualTable", function() { return _VVirtualTable__WEBPACK_IMPORTED_MODULE_5__["default"]; });
+            /***/
+          },
 
+        /***/ "./src/components/VStepper/VStepperStep.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VStepper/VStepperStep.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Components
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"]
+            )(
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+              Object(
+                _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__["inject"]
+              )("stepper", "v-stepper-step", "v-stepper")
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-stepper-step",
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_3__["default"],
+                },
+                inject: ["stepClick"],
+                props: {
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  complete: Boolean,
+                  completeIcon: {
+                    type: String,
+                    default: "$complete",
+                  },
+                  editable: Boolean,
+                  editIcon: {
+                    type: String,
+                    default: "$edit",
+                  },
+                  errorIcon: {
+                    type: String,
+                    default: "$error",
+                  },
+                  rules: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  step: [Number, String],
+                },
+                data: function data() {
+                  return {
+                    isActive: false,
+                    isInactive: true,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return {
+                      "v-stepper__step--active": this.isActive,
+                      "v-stepper__step--editable": this.editable,
+                      "v-stepper__step--inactive": this.isInactive,
+                      "v-stepper__step--error error--text": this.hasError,
+                      "v-stepper__step--complete": this.complete,
+                    };
+                  },
+                  hasError: function hasError() {
+                    return this.rules.some(function (validate) {
+                      return validate() !== true;
+                    });
+                  },
+                },
+                mounted: function mounted() {
+                  this.stepper && this.stepper.register(this);
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.stepper && this.stepper.unregister(this);
+                },
+                methods: {
+                  click: function click(e) {
+                    e.stopPropagation();
+                    this.$emit("click", e);
+
+                    if (this.editable) {
+                      this.stepClick(this.step);
+                    }
+                  },
+                  genIcon: function genIcon(icon) {
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_0__["default"],
+                      icon
+                    );
+                  },
+                  genLabel: function genLabel() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-stepper__label",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                  genStep: function genStep() {
+                    var color =
+                      !this.hasError && (this.complete || this.isActive)
+                        ? this.color
+                        : false;
+                    return this.$createElement(
+                      "span",
+                      this.setBackgroundColor(color, {
+                        staticClass: "v-stepper__step__step",
+                      }),
+                      this.genStepContent()
+                    );
+                  },
+                  genStepContent: function genStepContent() {
+                    var children = [];
+
+                    if (this.hasError) {
+                      children.push(this.genIcon(this.errorIcon));
+                    } else if (this.complete) {
+                      if (this.editable) {
+                        children.push(this.genIcon(this.editIcon));
+                      } else {
+                        children.push(this.genIcon(this.completeIcon));
+                      }
+                    } else {
+                      children.push(String(this.step));
+                    }
+
+                    return children;
+                  },
+                  toggle: function toggle(step) {
+                    this.isActive = step.toString() === this.step.toString();
+                    this.isInactive = Number(step) < Number(this.step);
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-stepper__step",
+                      class: this.classes,
+                      directives: [
+                        {
+                          name: "ripple",
+                          value: this.editable,
+                        },
+                      ],
+                      on: {
+                        click: this.click,
+                      },
+                    },
+                    [this.genStep(), this.genLabel()]
+                  );
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VStepper/index.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VStepper/index.ts ***!
+  \******************************************/
+          /*! exports provided: VStepper, VStepperContent, VStepperStep, VStepperHeader, VStepperItems, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperHeader",
+              function () {
+                return VStepperHeader;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperItems",
+              function () {
+                return VStepperItems;
+              }
+            );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _VStepper__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VStepper */ "./src/components/VStepper/VStepper.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepper",
+              function () {
+                return _VStepper__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _VStepperStep__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VStepperStep */ "./src/components/VStepper/VStepperStep.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperStep",
+              function () {
+                return _VStepperStep__WEBPACK_IMPORTED_MODULE_2__["default"];
+              }
+            );
+
+            /* harmony import */ var _VStepperContent__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VStepperContent */ "./src/components/VStepper/VStepperContent.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperContent",
+              function () {
+                return _VStepperContent__WEBPACK_IMPORTED_MODULE_3__["default"];
+              }
+            );
+
+            var VStepperHeader = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleFunctional"
+              ]
+            )("v-stepper__header");
+            var VStepperItems = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleFunctional"
+              ]
+            )("v-stepper__items");
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VStepper: _VStepper__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VStepperContent:
+                  _VStepperContent__WEBPACK_IMPORTED_MODULE_3__["default"],
+                VStepperStep:
+                  _VStepperStep__WEBPACK_IMPORTED_MODULE_2__["default"],
+                VStepperHeader: VStepperHeader,
+                VStepperItems: VStepperItems,
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/components/VSubheader/VSubheader.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VSubheader/VSubheader.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VSubheader/VSubheader.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VSubheader/VSubheader.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSubheader_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSubheader.sass */ "./src/components/VSubheader/VSubheader.sass"
+              );
+            /* harmony import */ var _VSubheader_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSubheader_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-subheader",
+                props: {
+                  inset: Boolean,
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-subheader",
+                      class: __assign(
+                        {
+                          "v-subheader--inset": this.inset,
+                        },
+                        this.themeClasses
+                      ),
+                      attrs: this.$attrs,
+                      on: this.$listeners,
+                    },
+                    this.$slots.default
+                  );
+                },
+              });
 
-var VTableOverflow = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-table__overflow');
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VDataTable: _VDataTable__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VDataTableHeader: _VDataTableHeader__WEBPACK_IMPORTED_MODULE_2__["default"],
-    VEditDialog: _VEditDialog__WEBPACK_IMPORTED_MODULE_3__["default"],
-    VTableOverflow: VTableOverflow,
-    VSimpleTable: _VSimpleTable__WEBPACK_IMPORTED_MODULE_4__["default"],
-    VVirtualTable: _VVirtualTable__WEBPACK_IMPORTED_MODULE_5__["default"]
-  }
-});
+        /***/ "./src/components/VSubheader/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VSubheader/index.ts ***!
+  \********************************************/
+          /*! exports provided: VSubheader, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSubheader__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSubheader */ "./src/components/VSubheader/VSubheader.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSubheader",
+              function () {
+                return _VSubheader__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/***/ }),
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSubheader__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-/***/ "./src/components/VDataTable/mixins/header.ts":
-/*!****************************************************!*\
-  !*** ./src/components/VDataTable/mixins/header.ts ***!
-  \****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../VCheckbox/VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
+            /***/
+          },
 
-    return t;
-  };
+        /***/ "./src/components/VSwitch/VSwitch.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VSwitch/VSwitch.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  return __assign.apply(this, arguments);
-};
+        /***/ "./src/components/VSwitch/VSwitch.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VSwitch/VSwitch.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../styles/components/_selection-controls.sass */ "./src/styles/components/_selection-controls.sass"
+              );
+            /* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSwitch_sass__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VSwitch.sass */ "./src/components/VSwitch/VSwitch.sass"
+              );
+            /* harmony import */ var _VSwitch_sass__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSwitch_sass__WEBPACK_IMPORTED_MODULE_1__
+              );
+            /* harmony import */ var _mixins_selectable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/selectable */ "./src/mixins/selectable/index.ts"
+              );
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../directives/touch */ "./src/directives/touch/index.ts"
+              );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _VProgressCircular_VProgressCircular__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../VProgressCircular/VProgressCircular */ "./src/components/VProgressCircular/VProgressCircular.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Directives
+
+            // Components
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_selectable__WEBPACK_IMPORTED_MODULE_2__["default"].extend(
+                {
+                  name: "v-switch",
+                  directives: {
+                    Touch:
+                      _directives_touch__WEBPACK_IMPORTED_MODULE_4__["default"],
+                  },
+                  props: {
+                    inset: Boolean,
+                    loading: {
+                      type: [Boolean, String],
+                      default: false,
+                    },
+                    flat: {
+                      type: Boolean,
+                      default: false,
+                    },
+                  },
+                  computed: {
+                    classes: function classes() {
+                      return __assign(
+                        __assign(
+                          {},
+                          _VInput__WEBPACK_IMPORTED_MODULE_3__[
+                            "default"
+                          ].options.computed.classes.call(this)
+                        ),
+                        {
+                          "v-input--selection-controls v-input--switch": true,
+                          "v-input--switch--flat": this.flat,
+                          "v-input--switch--inset": this.inset,
+                        }
+                      );
+                    },
+                    attrs: function attrs() {
+                      return {
+                        "aria-checked": String(this.isActive),
+                        "aria-disabled": String(this.isDisabled),
+                        role: "switch",
+                      };
+                    },
+                    // Do not return undefined if disabled,
+                    // according to spec, should still show
+                    // a color when disabled and active
+                    validationState: function validationState() {
+                      if (this.hasError && this.shouldValidate) return "error";
+                      if (this.hasSuccess) return "success";
+                      if (this.hasColor !== null) return this.computedColor;
+                      return undefined;
+                    },
+                    switchData: function switchData() {
+                      return this.setTextColor(
+                        this.loading ? undefined : this.validationState,
+                        {
+                          class: this.themeClasses,
+                        }
+                      );
+                    },
+                  },
+                  methods: {
+                    genDefaultSlot: function genDefaultSlot() {
+                      return [this.genSwitch(), this.genLabel()];
+                    },
+                    genSwitch: function genSwitch() {
+                      return this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-input--selection-controls__input",
+                        },
+                        [
+                          this.genInput(
+                            "checkbox",
+                            __assign(__assign({}, this.attrs), this.attrs$)
+                          ),
+                          this.genRipple(
+                            this.setTextColor(this.validationState, {
+                              directives: [
+                                {
+                                  name: "touch",
+                                  value: {
+                                    left: this.onSwipeLeft,
+                                    right: this.onSwipeRight,
+                                  },
+                                },
+                              ],
+                            })
+                          ),
+                          this.$createElement(
+                            "div",
+                            __assign(
+                              {
+                                staticClass: "v-input--switch__track",
+                              },
+                              this.switchData
+                            )
+                          ),
+                          this.$createElement(
+                            "div",
+                            __assign(
+                              {
+                                staticClass: "v-input--switch__thumb",
+                              },
+                              this.switchData
+                            ),
+                            [this.genProgress()]
+                          ),
+                        ]
+                      );
+                    },
+                    genProgress: function genProgress() {
+                      return this.$createElement(
+                        _transitions__WEBPACK_IMPORTED_MODULE_5__[
+                          "VFabTransition"
+                        ],
+                        {},
+                        [
+                          this.loading === false
+                            ? null
+                            : this.$slots.progress ||
+                              this.$createElement(
+                                _VProgressCircular_VProgressCircular__WEBPACK_IMPORTED_MODULE_6__[
+                                  "default"
+                                ],
+                                {
+                                  props: {
+                                    color:
+                                      this.loading === true ||
+                                      this.loading === ""
+                                        ? this.color || "primary"
+                                        : this.loading,
+                                    size: 16,
+                                    width: 2,
+                                    indeterminate: true,
+                                  },
+                                }
+                              ),
+                        ]
+                      );
+                    },
+                    onSwipeLeft: function onSwipeLeft() {
+                      if (this.isActive) this.onChange();
+                    },
+                    onSwipeRight: function onSwipeRight() {
+                      if (!this.isActive) this.onChange();
+                    },
+                    onKeydown: function onKeydown(e) {
+                      if (
+                        (e.keyCode ===
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__["keyCodes"]
+                            .left &&
+                          this.isActive) ||
+                        (e.keyCode ===
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_7__["keyCodes"]
+                            .right &&
+                          !this.isActive)
+                      )
+                        this.onChange();
+                    },
+                  },
+                }
+              );
 
+            /***/
+          },
 
+        /***/ "./src/components/VSwitch/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VSwitch/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VSwitch, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSwitch__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSwitch */ "./src/components/VSwitch/VSwitch.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSwitch",
+              function () {
+                return _VSwitch__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSwitch__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])().extend({
-  // https://github.com/vuejs/vue/issues/6872
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_2__["default"]
-  },
-  props: {
-    headers: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    options: {
-      type: Object,
-      default: function _default() {
-        return {
-          page: 1,
-          itemsPerPage: 10,
-          sortBy: [],
-          sortDesc: [],
-          groupBy: [],
-          groupDesc: [],
-          multiSort: false,
-          mustSort: false
-        };
-      }
-    },
-    sortIcon: {
-      type: String,
-      default: '$sort'
-    },
-    everyItem: Boolean,
-    someItems: Boolean,
-    showGroupBy: Boolean,
-    singleSelect: Boolean,
-    disableSort: Boolean
-  },
-  methods: {
-    genSelectAll: function genSelectAll() {
-      var _this = this;
-
-      var data = {
-        props: {
-          value: this.everyItem,
-          indeterminate: !this.everyItem && this.someItems
-        },
-        on: {
-          input: function input(v) {
-            return _this.$emit('toggle-select-all', v);
-          }
-        }
-      };
+        /***/ "./src/components/VSystemBar/VSystemBar.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VSystemBar/VSystemBar.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-      if (this.$scopedSlots['data-table-select']) {
-        return this.$scopedSlots['data-table-select'](data);
-      }
+        /***/ "./src/components/VSystemBar/VSystemBar.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VSystemBar/VSystemBar.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSystemBar_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSystemBar.sass */ "./src/components/VSystemBar/VSystemBar.sass"
+              );
+            /* harmony import */ var _VSystemBar_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VSystemBar_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                Object(
+                  _mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__[
+                    "default"
+                  ]
+                )("bar", ["height", "window"]),
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-system-bar",
+                props: {
+                  height: [Number, String],
+                  lightsOut: Boolean,
+                  window: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-system-bar--lights-out": this.lightsOut,
+                        "v-system-bar--absolute": this.absolute,
+                        "v-system-bar--fixed":
+                          !this.absolute && (this.app || this.fixed),
+                        "v-system-bar--window": this.window,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  computedHeight: function computedHeight() {
+                    if (this.height) {
+                      return isNaN(parseInt(this.height))
+                        ? this.height
+                        : parseInt(this.height);
+                    }
+
+                    return this.window ? 32 : 24;
+                  },
+                  styles: function styles() {
+                    return {
+                      height: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                          "convertToUnit"
+                        ]
+                      )(this.computedHeight),
+                    };
+                  },
+                },
+                methods: {
+                  updateApplication: function updateApplication() {
+                    return this.$el
+                      ? this.$el.clientHeight
+                      : this.computedHeight;
+                  },
+                },
+                render: function render(h) {
+                  var data = {
+                    staticClass: "v-system-bar",
+                    class: this.classes,
+                    style: this.styles,
+                    on: this.$listeners,
+                  };
+                  return h(
+                    "div",
+                    this.setBackgroundColor(this.color, data),
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"]
+                    )(this)
+                  );
+                },
+              });
 
-      return this.$createElement(_VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_1__["default"], __assign({
-        staticClass: 'v-data-table__checkbox'
-      }, data));
-    },
-    genSortIcon: function genSortIcon() {
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_0__["default"], {
-        staticClass: 'v-data-table-header__icon',
-        props: {
-          size: 18
-        }
-      }, [this.sortIcon]);
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VSystemBar/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VSystemBar/index.ts ***!
+  \********************************************/
+          /*! exports provided: VSystemBar, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSystemBar__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VSystemBar */ "./src/components/VSystemBar/VSystemBar.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSystemBar",
+              function () {
+                return _VSystemBar__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/***/ "./src/components/VDatePicker/VDatePicker.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePicker.ts ***!
-  \***************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDatePickerTitle */ "./src/components/VDatePicker/VDatePickerTitle.ts");
-/* harmony import */ var _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VDatePickerHeader */ "./src/components/VDatePicker/VDatePickerHeader.ts");
-/* harmony import */ var _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VDatePickerDateTable */ "./src/components/VDatePicker/VDatePickerDateTable.ts");
-/* harmony import */ var _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VDatePickerMonthTable */ "./src/components/VDatePicker/VDatePickerMonthTable.ts");
-/* harmony import */ var _VDatePickerYears__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VDatePickerYears */ "./src/components/VDatePicker/VDatePickerYears.ts");
-/* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/localable */ "./src/mixins/localable/index.ts");
-/* harmony import */ var _mixins_picker__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/picker */ "./src/mixins/picker/index.ts");
-/* harmony import */ var _util_isDateAllowed__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util/isDateAllowed */ "./src/components/VDatePicker/util/isDateAllowed.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _VCalendar_util_timestamp__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../VCalendar/util/timestamp */ "./src/components/VCalendar/util/timestamp.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./util */ "./src/components/VDatePicker/util/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSystemBar__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-  return ar;
-}; // Components
+            /***/
+          },
 
+        /***/ "./src/components/VTabs/VTab.ts":
+          /*!**************************************!*\
+  !*** ./src/components/VTabs/VTab.ts ***!
+  \**************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/routable */ "./src/mixins/routable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"]
+            )(
+              _mixins_routable__WEBPACK_IMPORTED_MODULE_1__["default"], // Must be after routable
+              // to overwrite activeClass
+              Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_0__["factory"])(
+                "tabsBar"
+              ),
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+            );
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins
+                .extend()
+                .extend()
+                .extend({
+                  name: "v-tab",
+                  props: {
+                    ripple: {
+                      type: [Boolean, Object],
+                      default: true,
+                    },
+                  },
+                  data: function data() {
+                    return {
+                      proxyClass: "v-tab--active",
+                    };
+                  },
+                  computed: {
+                    classes: function classes() {
+                      return __assign(
+                        __assign(
+                          __assign(
+                            {
+                              "v-tab": true,
+                            },
+                            _mixins_routable__WEBPACK_IMPORTED_MODULE_1__[
+                              "default"
+                            ].options.computed.classes.call(this)
+                          ),
+                          {
+                            "v-tab--disabled": this.disabled,
+                          }
+                        ),
+                        this.groupClasses
+                      );
+                    },
+                    value: function value() {
+                      var to = this.to || this.href || "";
+
+                      if (this.$router && this.to === Object(this.to)) {
+                        var resolve = this.$router.resolve(
+                          this.to,
+                          this.$route,
+                          this.append
+                        );
+                        to = resolve.href;
+                      }
+
+                      return to.replace("#", "");
+                    },
+                  },
+                  mounted: function mounted() {
+                    this.onRouteChange();
+                  },
+                  methods: {
+                    click: function click(e) {
+                      // If user provides an
+                      // actual link, do not
+                      // prevent default
+                      if (this.href && this.href.indexOf("#") > -1)
+                        e.preventDefault();
+                      if (e.detail) this.$el.blur();
+                      this.$emit("click", e);
+                      this.to || this.toggle();
+                    },
+                  },
+                  render: function render(h) {
+                    var _this = this;
+
+                    var _a = this.generateRouteLink(),
+                      tag = _a.tag,
+                      data = _a.data;
+
+                    data.attrs = __assign(__assign({}, data.attrs), {
+                      "aria-selected": String(this.isActive),
+                      role: "tab",
+                      tabindex: 0,
+                    });
+                    data.on = __assign(__assign({}, data.on), {
+                      keydown: function keydown(e) {
+                        if (
+                          e.keyCode ===
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"]
+                            .enter
+                        )
+                          _this.click(e);
+
+                        _this.$emit("keydown", e);
+                      },
+                    });
+                    return h(tag, data, this.$slots.default);
+                  },
+                });
+
+            /***/
+          },
 
+        /***/ "./src/components/VTabs/VTabItem.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VTabs/VTabItem.ts ***!
+  \******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VWindow/VWindowItem */ "./src/components/VWindow/VWindowItem.ts"
+              );
+            // Extensions
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__[
+                "default"
+              ].extend({
+                name: "v-tab-item",
+                props: {
+                  id: String,
+                },
+                methods: {
+                  genWindowItem: function genWindowItem() {
+                    var item =
+                      _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__[
+                        "default"
+                      ].options.methods.genWindowItem.call(this);
+                    item.data.domProps = item.data.domProps || {};
+                    item.data.domProps.id = this.id || this.value;
+                    return item;
+                  },
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VTabs/VTabs.sass":
+          /*!*****************************************!*\
+  !*** ./src/components/VTabs/VTabs.sass ***!
+  \*****************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VTabs/VTabs.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VTabs/VTabs.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTabs_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTabs.sass */ "./src/components/VTabs/VTabs.sass"
+              );
+            /* harmony import */ var _VTabs_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTabs_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VTabsBar__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VTabsBar */ "./src/components/VTabs/VTabsBar.ts"
+              );
+            /* harmony import */ var _VTabsItems__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VTabsItems */ "./src/components/VTabs/VTabsItems.ts"
+              );
+            /* harmony import */ var _VTabsSlider__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VTabsSlider */ "./src/components/VTabs/VTabsSlider.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_9__["default"]
+            )(
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"],
+              _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]
+            );
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-tabs",
+                directives: {
+                  Resize:
+                    _directives_resize__WEBPACK_IMPORTED_MODULE_7__["default"],
+                },
+                props: {
+                  activeClass: {
+                    type: String,
+                    default: "",
+                  },
+                  alignWithTitle: Boolean,
+                  backgroundColor: String,
+                  centerActive: Boolean,
+                  centered: Boolean,
+                  fixedTabs: Boolean,
+                  grow: Boolean,
+                  height: {
+                    type: [Number, String],
+                    default: undefined,
+                  },
+                  hideSlider: Boolean,
+                  iconsAndText: Boolean,
+                  mobileBreakpoint: [String, Number],
+                  nextIcon: {
+                    type: String,
+                    default: "$next",
+                  },
+                  optional: Boolean,
+                  prevIcon: {
+                    type: String,
+                    default: "$prev",
+                  },
+                  right: Boolean,
+                  showArrows: [Boolean, String],
+                  sliderColor: String,
+                  sliderSize: {
+                    type: [Number, String],
+                    default: 2,
+                  },
+                  vertical: Boolean,
+                },
+                data: function data() {
+                  return {
+                    resizeTimeout: 0,
+                    slider: {
+                      height: null,
+                      left: null,
+                      right: null,
+                      top: null,
+                      width: null,
+                    },
+                    transitionTime: 300,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-tabs--align-with-title": this.alignWithTitle,
+                        "v-tabs--centered": this.centered,
+                        "v-tabs--fixed-tabs": this.fixedTabs,
+                        "v-tabs--grow": this.grow,
+                        "v-tabs--icons-and-text": this.iconsAndText,
+                        "v-tabs--right": this.right,
+                        "v-tabs--vertical": this.vertical,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                  isReversed: function isReversed() {
+                    return this.$vuetify.rtl && this.vertical;
+                  },
+                  sliderStyles: function sliderStyles() {
+                    return {
+                      height: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                          "convertToUnit"
+                        ]
+                      )(this.slider.height),
+                      left: this.isReversed
+                        ? undefined
+                        : Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                              "convertToUnit"
+                            ]
+                          )(this.slider.left),
+                      right: this.isReversed
+                        ? Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                              "convertToUnit"
+                            ]
+                          )(this.slider.right)
+                        : undefined,
+                      top: this.vertical
+                        ? Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                              "convertToUnit"
+                            ]
+                          )(this.slider.top)
+                        : undefined,
+                      transition: this.slider.left != null ? null : "none",
+                      width: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                          "convertToUnit"
+                        ]
+                      )(this.slider.width),
+                    };
+                  },
+                  computedColor: function computedColor() {
+                    if (this.color) return this.color;
+                    else if (this.isDark && !this.appIsDark) return "white";
+                    else return "primary";
+                  },
+                },
+                watch: {
+                  alignWithTitle: "callSlider",
+                  centered: "callSlider",
+                  centerActive: "callSlider",
+                  fixedTabs: "callSlider",
+                  grow: "callSlider",
+                  iconsAndText: "callSlider",
+                  right: "callSlider",
+                  showArrows: "callSlider",
+                  vertical: "callSlider",
+                  "$vuetify.application.left": "onResize",
+                  "$vuetify.application.right": "onResize",
+                  "$vuetify.rtl": "onResize",
+                },
+                mounted: function mounted() {
+                  var _this = this;
+
+                  this.$nextTick(function () {
+                    window.setTimeout(_this.callSlider, 30);
+                  });
+                },
+                methods: {
+                  callSlider: function callSlider() {
+                    var _this = this;
+
+                    if (
+                      this.hideSlider ||
+                      !this.$refs.items ||
+                      !this.$refs.items.selectedItems.length
+                    ) {
+                      this.slider.width = 0;
+                      return false;
+                    }
+
+                    this.$nextTick(function () {
+                      // Give screen time to paint
+                      var activeTab = _this.$refs.items.selectedItems[0];
+                      /* istanbul ignore if */
+
+                      if (!activeTab || !activeTab.$el) {
+                        _this.slider.width = 0;
+                        _this.slider.left = 0;
+                        return;
+                      }
+
+                      var el = activeTab.$el;
+                      _this.slider = {
+                        height: !_this.vertical
+                          ? Number(_this.sliderSize)
+                          : el.scrollHeight,
+                        left: _this.vertical ? 0 : el.offsetLeft,
+                        right: _this.vertical
+                          ? 0
+                          : el.offsetLeft + el.offsetWidth,
+                        top: el.offsetTop,
+                        width: _this.vertical
+                          ? Number(_this.sliderSize)
+                          : el.scrollWidth,
+                      };
+                    });
+                    return true;
+                  },
+                  genBar: function genBar(items, slider) {
+                    var _this = this;
+
+                    var data = {
+                      style: {
+                        height: Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                            "convertToUnit"
+                          ]
+                        )(this.height),
+                      },
+                      props: {
+                        activeClass: this.activeClass,
+                        centerActive: this.centerActive,
+                        dark: this.dark,
+                        light: this.light,
+                        mandatory: !this.optional,
+                        mobileBreakpoint: this.mobileBreakpoint,
+                        nextIcon: this.nextIcon,
+                        prevIcon: this.prevIcon,
+                        showArrows: this.showArrows,
+                        value: this.internalValue,
+                      },
+                      on: {
+                        "call:slider": this.callSlider,
+                        change: function change(val) {
+                          _this.internalValue = val;
+                        },
+                      },
+                      ref: "items",
+                    };
+                    this.setTextColor(this.computedColor, data);
+                    this.setBackgroundColor(this.backgroundColor, data);
+                    return this.$createElement(
+                      _VTabsBar__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      data,
+                      [this.genSlider(slider), items]
+                    );
+                  },
+                  genItems: function genItems(items, item) {
+                    var _this = this; // If user provides items
+                    // opt to use theirs
+
+                    if (items) return items; // If no tabs are provided
+                    // render nothing
+
+                    if (!item.length) return null;
+                    return this.$createElement(
+                      _VTabsItems__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        props: {
+                          value: this.internalValue,
+                        },
+                        on: {
+                          change: function change(val) {
+                            _this.internalValue = val;
+                          },
+                        },
+                      },
+                      item
+                    );
+                  },
+                  genSlider: function genSlider(slider) {
+                    if (this.hideSlider) return null;
+
+                    if (!slider) {
+                      slider = this.$createElement(
+                        _VTabsSlider__WEBPACK_IMPORTED_MODULE_3__["default"],
+                        {
+                          props: {
+                            color: this.sliderColor,
+                          },
+                        }
+                      );
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-tabs-slider-wrapper",
+                        style: this.sliderStyles,
+                      },
+                      [slider]
+                    );
+                  },
+                  onResize: function onResize() {
+                    if (this._isDestroyed) return;
+                    clearTimeout(this.resizeTimeout);
+                    this.resizeTimeout = window.setTimeout(this.callSlider, 0);
+                  },
+                  parseNodes: function parseNodes() {
+                    var items = null;
+                    var slider = null;
+                    var item = [];
+                    var tab = [];
+                    var slot = this.$slots.default || [];
+                    var length = slot.length;
+
+                    for (var i = 0; i < length; i++) {
+                      var vnode = slot[i];
+
+                      if (vnode.componentOptions) {
+                        switch (vnode.componentOptions.Ctor.options.name) {
+                          case "v-tabs-slider":
+                            slider = vnode;
+                            break;
+
+                          case "v-tabs-items":
+                            items = vnode;
+                            break;
+
+                          case "v-tab-item":
+                            item.push(vnode);
+                            break;
+                          // case 'v-tab' - intentionally omitted
+
+                          default:
+                            tab.push(vnode);
+                        }
+                      } else {
+                        tab.push(vnode);
+                      }
+                    }
+                    /**
+                     * tab: array of `v-tab`
+                     * slider: single `v-tabs-slider`
+                     * items: single `v-tabs-items`
+                     * item: array of `v-tab-item`
+                     */
+
+                    return {
+                      tab: tab,
+                      slider: slider,
+                      items: items,
+                      item: item,
+                    };
+                  },
+                },
+                render: function render(h) {
+                  var _a = this.parseNodes(),
+                    tab = _a.tab,
+                    slider = _a.slider,
+                    items = _a.items,
+                    item = _a.item;
+
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-tabs",
+                      class: this.classes,
+                      directives: [
+                        {
+                          name: "resize",
+                          modifiers: {
+                            quiet: true,
+                          },
+                          value: this.onResize,
+                        },
+                      ],
+                    },
+                    [this.genBar(tab, slider), this.genItems(items, item)]
+                  );
+                },
+              });
 
- // Mixins
+            /***/
+          },
 
+        /***/ "./src/components/VTabs/VTabsBar.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VTabs/VTabsBar.ts ***!
+  \******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VSlideGroup/VSlideGroup */ "./src/components/VSlideGroup/VSlideGroup.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
- // Utils
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              }; // Extensions
+
+            // Mixins
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__[
+                  "BaseSlideGroup"
+                ],
+                _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-tabs-bar",
+                provide: function provide() {
+                  return {
+                    tabsBar: this,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        __assign(
+                          {},
+                          _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__[
+                            "BaseSlideGroup"
+                          ].options.computed.classes.call(this)
+                        ),
+                        {
+                          "v-tabs-bar": true,
+                          "v-tabs-bar--is-mobile": this.isMobile,
+                          // TODO: Remove this and move to v-slide-group
+                          "v-tabs-bar--show-arrows": this.showArrows,
+                        }
+                      ),
+                      this.themeClasses
+                    );
+                  },
+                },
+                watch: {
+                  items: "callSlider",
+                  internalValue: "callSlider",
+                  $route: "onRouteChange",
+                },
+                methods: {
+                  callSlider: function callSlider() {
+                    if (!this.isBooted) return;
+                    this.$emit("call:slider");
+                  },
+                  genContent: function genContent() {
+                    var render =
+                      _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__[
+                        "BaseSlideGroup"
+                      ].options.methods.genContent.call(this);
+                    render.data = render.data || {};
+                    render.data.staticClass += " v-tabs-bar__content";
+                    return render;
+                  },
+                  onRouteChange: function onRouteChange(val, oldVal) {
+                    var e_1, _a;
+                    /* istanbul ignore next */
+
+                    if (this.mandatory) return;
+                    var items = this.items;
+                    var newPath = val.path;
+                    var oldPath = oldVal.path;
+                    var hasNew = false;
+                    var hasOld = false;
+
+                    try {
+                      for (
+                        var items_1 = __values(items),
+                          items_1_1 = items_1.next();
+                        !items_1_1.done;
+                        items_1_1 = items_1.next()
+                      ) {
+                        var item = items_1_1.value;
+                        if (item.to === newPath) hasNew = true;
+                        else if (item.to === oldPath) hasOld = true;
+                        if (hasNew && hasOld) break;
+                      }
+                    } catch (e_1_1) {
+                      e_1 = {
+                        error: e_1_1,
+                      };
+                    } finally {
+                      try {
+                        if (
+                          items_1_1 &&
+                          !items_1_1.done &&
+                          (_a = items_1.return)
+                        )
+                          _a.call(items_1);
+                      } finally {
+                        if (e_1) throw e_1.error;
+                      }
+                    } // If we have an old item and not a new one
+                    // it's assumed that the user navigated to
+                    // a path that is not present in the items
+
+                    if (!hasNew && hasOld) this.internalValue = undefined;
+                  },
+                },
+                render: function render(h) {
+                  var render =
+                    _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__[
+                      "BaseSlideGroup"
+                    ].options.render.call(this, h);
+                  render.data.attrs = {
+                    role: "tablist",
+                  };
+                  return render;
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VTabs/VTabsItems.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VTabs/VTabsItems.ts ***!
+  \********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../VWindow/VWindow */ "./src/components/VWindow/VWindow.ts"
+              );
+            /* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Extensions
+
+            // Types & Components
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
+                name: "v-tabs-items",
+                props: {
+                  mandatory: {
+                    type: Boolean,
+                    default: false,
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_0__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-tabs-items": true,
+                      }
+                    );
+                  },
+                  isDark: function isDark() {
+                    return this.rootIsDark;
+                  },
+                },
+                methods: {
+                  getValue: function getValue(item, i) {
+                    return (
+                      item.id ||
+                      _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__[
+                        "BaseItemGroup"
+                      ].options.methods.getValue.call(this, item, i)
+                    );
+                  },
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VTabs/VTabsSlider.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VTabs/VTabsSlider.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_0__["default"]
+              ).extend({
+                name: "v-tabs-slider",
+                render: function render(h) {
+                  return h(
+                    "div",
+                    this.setBackgroundColor(this.color, {
+                      staticClass: "v-tabs-slider",
+                    })
+                  );
+                },
+              });
 
+            /***/
+          },
 
- // Adds leading zero to month/day if necessary, returns 'YYYY' if type = 'year',
-// 'YYYY-MM' if 'month' and 'YYYY-MM-DD' if 'date'
+        /***/ "./src/components/VTabs/index.ts":
+          /*!***************************************!*\
+  !*** ./src/components/VTabs/index.ts ***!
+  \***************************************/
+          /*! exports provided: VTabs, VTab, VTabItem, VTabsItems, VTabsSlider, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTabs__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTabs */ "./src/components/VTabs/VTabs.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabs",
+              function () {
+                return _VTabs__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VTab__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VTab */ "./src/components/VTabs/VTab.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTab",
+              function () {
+                return _VTab__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _VTabsItems__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VTabsItems */ "./src/components/VTabs/VTabsItems.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabsItems",
+              function () {
+                return _VTabsItems__WEBPACK_IMPORTED_MODULE_2__["default"];
+              }
+            );
+
+            /* harmony import */ var _VTabItem__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VTabItem */ "./src/components/VTabs/VTabItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabItem",
+              function () {
+                return _VTabItem__WEBPACK_IMPORTED_MODULE_3__["default"];
+              }
+            );
+
+            /* harmony import */ var _VTabsSlider__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VTabsSlider */ "./src/components/VTabs/VTabsSlider.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabsSlider",
+              function () {
+                return _VTabsSlider__WEBPACK_IMPORTED_MODULE_4__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VTabs: _VTabs__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VTab: _VTab__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VTabsItems: _VTabsItems__WEBPACK_IMPORTED_MODULE_2__["default"],
+                VTabItem: _VTabItem__WEBPACK_IMPORTED_MODULE_3__["default"],
+                VTabsSlider:
+                  _VTabsSlider__WEBPACK_IMPORTED_MODULE_4__["default"],
+              },
+            };
 
-function sanitizeDateString(dateString, type) {
-  var _a = __read(dateString.split('-'), 3),
-      year = _a[0],
-      _b = _a[1],
-      month = _b === void 0 ? 1 : _b,
-      _c = _a[2],
-      date = _c === void 0 ? 1 : _c;
+            /***/
+          },
 
-  return (year + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(month) + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(date)).substr(0, {
-    date: 10,
-    month: 7,
-    year: 4
-  }[type]);
-}
+        /***/ "./src/components/VTextField/VTextField.sass":
+          /*!***************************************************!*\
+  !*** ./src/components/VTextField/VTextField.sass ***!
+  \***************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(_mixins_localable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_picker__WEBPACK_IMPORTED_MODULE_6__["default"]).extend({
-  name: 'v-date-picker',
-  props: {
-    allowedDates: Function,
-    // Function formatting the day in date picker table
-    dayFormat: Function,
-    disabled: Boolean,
-    events: {
-      type: [Array, Function, Object],
-      default: function _default() {
-        return null;
-      }
-    },
-    eventColor: {
-      type: [Array, Function, Object, String],
-      default: function _default() {
-        return 'warning';
-      }
-    },
-    firstDayOfWeek: {
-      type: [String, Number],
-      default: 0
-    },
-    // Function formatting the tableDate in the day/month table header
-    headerDateFormat: Function,
-    localeFirstDayOfYear: {
-      type: [String, Number],
-      default: 0
-    },
-    max: String,
-    min: String,
-    // Function formatting month in the months table
-    monthFormat: Function,
-    multiple: Boolean,
-    nextIcon: {
-      type: String,
-      default: '$next'
-    },
-    nextMonthAriaLabel: {
-      type: String,
-      default: '$vuetify.datePicker.nextMonthAriaLabel'
-    },
-    nextYearAriaLabel: {
-      type: String,
-      default: '$vuetify.datePicker.nextYearAriaLabel'
-    },
-    pickerDate: String,
-    prevIcon: {
-      type: String,
-      default: '$prev'
-    },
-    prevMonthAriaLabel: {
-      type: String,
-      default: '$vuetify.datePicker.prevMonthAriaLabel'
-    },
-    prevYearAriaLabel: {
-      type: String,
-      default: '$vuetify.datePicker.prevYearAriaLabel'
-    },
-    range: Boolean,
-    reactive: Boolean,
-    readonly: Boolean,
-    scrollable: Boolean,
-    showCurrent: {
-      type: [Boolean, String],
-      default: true
-    },
-    selectedItemsText: {
-      type: String,
-      default: '$vuetify.datePicker.itemsSelected'
-    },
-    showWeek: Boolean,
-    // Function formatting currently selected date in the picker title
-    titleDateFormat: Function,
-    type: {
-      type: String,
-      default: 'date',
-      validator: function validator(type) {
-        return ['date', 'month'].includes(type);
-      }
-    },
-    value: [Array, String],
-    weekdayFormat: Function,
-    // Function formatting the year in table header and pickup title
-    yearFormat: Function,
-    yearIcon: String
-  },
-  data: function data() {
-    var _this = this;
-
-    var now = new Date();
-    return {
-      activePicker: this.type.toUpperCase(),
-      inputDay: null,
-      inputMonth: null,
-      inputYear: null,
-      isReversing: false,
-      now: now,
-      // tableDate is a string in 'YYYY' / 'YYYY-M' format (leading zero for month is not required)
-      tableDate: function () {
-        if (_this.pickerDate) {
-          return _this.pickerDate;
-        }
+        /***/ "./src/components/VTextField/VTextField.ts":
+          /*!*************************************************!*\
+  !*** ./src/components/VTextField/VTextField.ts ***!
+  \*************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTextField_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTextField.sass */ "./src/components/VTextField/VTextField.sass"
+              );
+            /* harmony import */ var _VTextField_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTextField_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _VCounter__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VCounter */ "./src/components/VCounter/index.ts"
+              );
+            /* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VLabel */ "./src/components/VLabel/index.ts"
+              );
+            /* harmony import */ var _mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/intersectable */ "./src/mixins/intersectable/index.ts"
+              );
+            /* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts"
+              );
+            /* harmony import */ var _mixins_validatable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/validatable */ "./src/mixins/validatable/index.ts"
+              );
+            /* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../directives/resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-        var multipleValue = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_9__["wrapInArray"])(_this.value);
-        var date = multipleValue[multipleValue.length - 1] || (typeof _this.showCurrent === 'string' ? _this.showCurrent : now.getFullYear() + "-" + (now.getMonth() + 1));
-        return sanitizeDateString(date, _this.type === 'date' ? 'month' : 'year');
-      }()
-    };
-  },
-  computed: {
-    multipleValue: function multipleValue() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_9__["wrapInArray"])(this.value);
-    },
-    isMultiple: function isMultiple() {
-      return this.multiple || this.range;
-    },
-    lastValue: function lastValue() {
-      return this.isMultiple ? this.multipleValue[this.multipleValue.length - 1] : this.value;
-    },
-    selectedMonths: function selectedMonths() {
-      if (!this.value || this.type === 'month') {
-        return this.value;
-      } else if (this.isMultiple) {
-        return this.multipleValue.map(function (val) {
-          return val.substr(0, 7);
-        });
-      } else {
-        return this.value.substr(0, 7);
-      }
-    },
-    current: function current() {
-      if (this.showCurrent === true) {
-        return sanitizeDateString(this.now.getFullYear() + "-" + (this.now.getMonth() + 1) + "-" + this.now.getDate(), this.type);
-      }
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-      return this.showCurrent || null;
-    },
-    inputDate: function inputDate() {
-      return this.type === 'date' ? this.inputYear + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.inputMonth + 1) + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.inputDay) : this.inputYear + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.inputMonth + 1);
-    },
-    tableMonth: function tableMonth() {
-      return Number((this.pickerDate || this.tableDate).split('-')[1]) - 1;
-    },
-    tableYear: function tableYear() {
-      return Number((this.pickerDate || this.tableDate).split('-')[0]);
-    },
-    minMonth: function minMonth() {
-      return this.min ? sanitizeDateString(this.min, 'month') : null;
-    },
-    maxMonth: function maxMonth() {
-      return this.max ? sanitizeDateString(this.max, 'month') : null;
-    },
-    minYear: function minYear() {
-      return this.min ? sanitizeDateString(this.min, 'year') : null;
-    },
-    maxYear: function maxYear() {
-      return this.max ? sanitizeDateString(this.max, 'year') : null;
-    },
-    formatters: function formatters() {
-      return {
-        year: this.yearFormat || Object(_util__WEBPACK_IMPORTED_MODULE_12__["createNativeLocaleFormatter"])(this.currentLocale, {
-          year: 'numeric',
-          timeZone: 'UTC'
-        }, {
-          length: 4
-        }),
-        titleDate: this.titleDateFormat || (this.isMultiple ? this.defaultTitleMultipleDateFormatter : this.defaultTitleDateFormatter)
-      };
-    },
-    defaultTitleMultipleDateFormatter: function defaultTitleMultipleDateFormatter() {
-      var _this = this;
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-      return function (dates) {
-        if (!dates.length) {
-          return '-';
-        }
+                return ar;
+              };
 
-        if (dates.length === 1) {
-          return _this.defaultTitleDateFormatter(dates[0]);
-        }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-        return _this.$vuetify.lang.t(_this.selectedItemsText, dates.length);
-      };
-    },
-    defaultTitleDateFormatter: function defaultTitleDateFormatter() {
-      var titleFormats = {
-        year: {
-          year: 'numeric',
-          timeZone: 'UTC'
-        },
-        month: {
-          month: 'long',
-          timeZone: 'UTC'
-        },
-        date: {
-          weekday: 'short',
-          month: 'short',
-          day: 'numeric',
-          timeZone: 'UTC'
-        }
-      };
-      var titleDateFormatter = Object(_util__WEBPACK_IMPORTED_MODULE_12__["createNativeLocaleFormatter"])(this.currentLocale, titleFormats[this.type], {
-        start: 0,
-        length: {
-          date: 10,
-          month: 7,
-          year: 4
-        }[this.type]
-      });
-
-      var landscapeFormatter = function landscapeFormatter(date) {
-        return titleDateFormatter(date).replace(/([^\d\s])([\d])/g, function (match, nonDigit, digit) {
-          return nonDigit + " " + digit;
-        }).replace(', ', ',<br>');
-      };
+                return ar;
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            // Types
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_11__["default"]
+            )(
+              _VInput__WEBPACK_IMPORTED_MODULE_1__["default"],
+              Object(
+                _mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__["default"]
+              )({
+                onVisible: ["onResize", "tryAutofocus"],
+              }),
+              _mixins_loadable__WEBPACK_IMPORTED_MODULE_5__["default"]
+            );
+            var dirtyTypes = [
+              "color",
+              "file",
+              "time",
+              "date",
+              "datetime-local",
+              "week",
+              "month",
+            ];
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-text-field",
+                directives: {
+                  resize:
+                    _directives_resize__WEBPACK_IMPORTED_MODULE_7__["default"],
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_8__["default"],
+                },
+                inheritAttrs: false,
+                props: {
+                  appendOuterIcon: String,
+                  autofocus: Boolean,
+                  clearable: Boolean,
+                  clearIcon: {
+                    type: String,
+                    default: "$clear",
+                  },
+                  counter: [Boolean, Number, String],
+                  counterValue: Function,
+                  filled: Boolean,
+                  flat: Boolean,
+                  fullWidth: Boolean,
+                  label: String,
+                  outlined: Boolean,
+                  placeholder: String,
+                  prefix: String,
+                  prependInnerIcon: String,
+                  reverse: Boolean,
+                  rounded: Boolean,
+                  shaped: Boolean,
+                  singleLine: Boolean,
+                  solo: Boolean,
+                  soloInverted: Boolean,
+                  suffix: String,
+                  type: {
+                    type: String,
+                    default: "text",
+                  },
+                },
+                data: function data() {
+                  return {
+                    badInput: false,
+                    labelWidth: 0,
+                    prefixWidth: 0,
+                    prependWidth: 0,
+                    initialValue: null,
+                    isBooted: false,
+                    isClearing: false,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-text-field": true,
+                        "v-text-field--full-width": this.fullWidth,
+                        "v-text-field--prefix": this.prefix,
+                        "v-text-field--single-line": this.isSingle,
+                        "v-text-field--solo": this.isSolo,
+                        "v-text-field--solo-inverted": this.soloInverted,
+                        "v-text-field--solo-flat": this.flat,
+                        "v-text-field--filled": this.filled,
+                        "v-text-field--is-booted": this.isBooted,
+                        "v-text-field--enclosed": this.isEnclosed,
+                        "v-text-field--reverse": this.reverse,
+                        "v-text-field--outlined": this.outlined,
+                        "v-text-field--placeholder": this.placeholder,
+                        "v-text-field--rounded": this.rounded,
+                        "v-text-field--shaped": this.shaped,
+                      }
+                    );
+                  },
+                  computedColor: function computedColor() {
+                    var computedColor =
+                      _mixins_validatable__WEBPACK_IMPORTED_MODULE_6__[
+                        "default"
+                      ].options.computed.computedColor.call(this);
+                    if (!this.soloInverted || !this.isFocused)
+                      return computedColor;
+                    return this.color || "primary";
+                  },
+                  computedCounterValue: function computedCounterValue() {
+                    if (typeof this.counterValue === "function") {
+                      return this.counterValue(this.internalValue);
+                    }
+
+                    return __spread((this.internalValue || "").toString())
+                      .length;
+                  },
+                  hasCounter: function hasCounter() {
+                    return this.counter !== false && this.counter != null;
+                  },
+                  hasDetails: function hasDetails() {
+                    return (
+                      _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.hasDetails.call(this) ||
+                      this.hasCounter
+                    );
+                  },
+                  internalValue: {
+                    get: function get() {
+                      return this.lazyValue;
+                    },
+                    set: function set(val) {
+                      this.lazyValue = val;
+                      this.$emit("input", this.lazyValue);
+                    },
+                  },
+                  isDirty: function isDirty() {
+                    var _a;
+
+                    return (
+                      ((_a = this.lazyValue) === null || _a === void 0
+                        ? void 0
+                        : _a.toString().length) > 0 || this.badInput
+                    );
+                  },
+                  isEnclosed: function isEnclosed() {
+                    return this.filled || this.isSolo || this.outlined;
+                  },
+                  isLabelActive: function isLabelActive() {
+                    return this.isDirty || dirtyTypes.includes(this.type);
+                  },
+                  isSingle: function isSingle() {
+                    return (
+                      this.isSolo ||
+                      this.singleLine ||
+                      this.fullWidth || // https://material.io/components/text-fields/#filled-text-field
+                      (this.filled && !this.hasLabel)
+                    );
+                  },
+                  isSolo: function isSolo() {
+                    return this.solo || this.soloInverted;
+                  },
+                  labelPosition: function labelPosition() {
+                    var offset =
+                      this.prefix && !this.labelValue ? this.prefixWidth : 0;
+                    if (this.labelValue && this.prependWidth)
+                      offset -= this.prependWidth;
+                    return this.$vuetify.rtl === this.reverse
+                      ? {
+                          left: offset,
+                          right: "auto",
+                        }
+                      : {
+                          left: "auto",
+                          right: offset,
+                        };
+                  },
+                  showLabel: function showLabel() {
+                    return (
+                      this.hasLabel &&
+                      (!this.isSingle ||
+                        (!this.isLabelActive && !this.placeholder))
+                    );
+                  },
+                  labelValue: function labelValue() {
+                    return (
+                      !this.isSingle &&
+                      Boolean(
+                        this.isFocused || this.isLabelActive || this.placeholder
+                      )
+                    );
+                  },
+                },
+                watch: {
+                  // labelValue: 'setLabelWidth', // moved to mounted, see #11533
+                  outlined: "setLabelWidth",
+                  label: function label() {
+                    this.$nextTick(this.setLabelWidth);
+                  },
+                  prefix: function prefix() {
+                    this.$nextTick(this.setPrefixWidth);
+                  },
+                  isFocused: "updateValue",
+                  value: function value(val) {
+                    this.lazyValue = val;
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("box")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"]
+                    )("box", "filled", this);
+                  }
+                  /* istanbul ignore next */
 
-      return this.landscape ? landscapeFormatter : titleDateFormatter;
-    }
-  },
-  watch: {
-    tableDate: function tableDate(val, prev) {
-      // Make a ISO 8601 strings from val and prev for comparision, otherwise it will incorrectly
-      // compare for example '2000-9' and '2000-10'
-      var sanitizeType = this.type === 'month' ? 'year' : 'month';
-      this.isReversing = sanitizeDateString(val, sanitizeType) < sanitizeDateString(prev, sanitizeType);
-      this.$emit('update:picker-date', val);
-    },
-    pickerDate: function pickerDate(val) {
-      if (val) {
-        this.tableDate = val;
-      } else if (this.lastValue && this.type === 'date') {
-        this.tableDate = sanitizeDateString(this.lastValue, 'month');
-      } else if (this.lastValue && this.type === 'month') {
-        this.tableDate = sanitizeDateString(this.lastValue, 'year');
-      }
-    },
-    value: function value(newValue, oldValue) {
-      this.checkMultipleProp();
-      this.setInputDate();
+                  if (this.$attrs.hasOwnProperty("browser-autocomplete")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"]
+                    )("browser-autocomplete", "autocomplete", this);
+                  }
+                  /* istanbul ignore if */
+
+                  if (
+                    this.shaped &&
+                    !(this.filled || this.outlined || this.isSolo)
+                  ) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_10__["consoleWarn"]
+                    )(
+                      "shaped should be used with either filled or outlined",
+                      this
+                    );
+                  }
+                },
+                mounted: function mounted() {
+                  var _this = this; // #11533
+
+                  this.$watch(function () {
+                    return _this.labelValue;
+                  }, this.setLabelWidth);
+                  this.autofocus && this.tryAutofocus();
+                  requestAnimationFrame(function () {
+                    return (_this.isBooted = true);
+                  });
+                },
+                methods: {
+                  /** @public */
+                  focus: function focus() {
+                    this.onFocus();
+                  },
+
+                  /** @public */
+                  blur: function blur(e) {
+                    var _this = this; // https://github.com/vuetifyjs/vuetify/issues/5913
+                    // Safari tab order gets broken if called synchronous
+
+                    window.requestAnimationFrame(function () {
+                      _this.$refs.input && _this.$refs.input.blur();
+                    });
+                  },
+                  clearableCallback: function clearableCallback() {
+                    var _this = this;
+
+                    this.$refs.input && this.$refs.input.focus();
+                    this.$nextTick(function () {
+                      return (_this.internalValue = null);
+                    });
+                  },
+                  genAppendSlot: function genAppendSlot() {
+                    var slot = [];
+
+                    if (this.$slots["append-outer"]) {
+                      slot.push(this.$slots["append-outer"]);
+                    } else if (this.appendOuterIcon) {
+                      slot.push(this.genIcon("appendOuter"));
+                    }
+
+                    return this.genSlot("append", "outer", slot);
+                  },
+                  genPrependInnerSlot: function genPrependInnerSlot() {
+                    var slot = [];
+
+                    if (this.$slots["prepend-inner"]) {
+                      slot.push(this.$slots["prepend-inner"]);
+                    } else if (this.prependInnerIcon) {
+                      slot.push(this.genIcon("prependInner"));
+                    }
+
+                    return this.genSlot("prepend", "inner", slot);
+                  },
+                  genIconSlot: function genIconSlot() {
+                    var slot = [];
+
+                    if (this.$slots.append) {
+                      slot.push(this.$slots.append);
+                    } else if (this.appendIcon) {
+                      slot.push(this.genIcon("append"));
+                    }
+
+                    return this.genSlot("append", "inner", slot);
+                  },
+                  genInputSlot: function genInputSlot() {
+                    var input =
+                      _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genInputSlot.call(this);
+                    var prepend = this.genPrependInnerSlot();
+
+                    if (prepend) {
+                      input.children = input.children || [];
+                      input.children.unshift(prepend);
+                    }
+
+                    return input;
+                  },
+                  genClearIcon: function genClearIcon() {
+                    if (!this.clearable) return null;
+                    var data = this.isDirty
+                      ? undefined
+                      : {
+                          attrs: {
+                            disabled: true,
+                          },
+                        };
+                    return this.genSlot("append", "inner", [
+                      this.genIcon("clear", this.clearableCallback, data),
+                    ]);
+                  },
+                  genCounter: function genCounter() {
+                    if (!this.hasCounter) return null;
+                    var max =
+                      this.counter === true
+                        ? this.attrs$.maxlength
+                        : this.counter;
+                    return this.$createElement(
+                      _VCounter__WEBPACK_IMPORTED_MODULE_2__["default"],
+                      {
+                        props: {
+                          dark: this.dark,
+                          light: this.light,
+                          max: max,
+                          value: this.computedCounterValue,
+                        },
+                      }
+                    );
+                  },
+                  genControl: function genControl() {
+                    return _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.genControl.call(this);
+                  },
+                  genDefaultSlot: function genDefaultSlot() {
+                    return [
+                      this.genFieldset(),
+                      this.genTextFieldSlot(),
+                      this.genClearIcon(),
+                      this.genIconSlot(),
+                      this.genProgress(),
+                    ];
+                  },
+                  genFieldset: function genFieldset() {
+                    if (!this.outlined) return null;
+                    return this.$createElement(
+                      "fieldset",
+                      {
+                        attrs: {
+                          "aria-hidden": true,
+                        },
+                      },
+                      [this.genLegend()]
+                    );
+                  },
+                  genLabel: function genLabel() {
+                    if (!this.showLabel) return null;
+                    var data = {
+                      props: {
+                        absolute: true,
+                        color: this.validationState,
+                        dark: this.dark,
+                        disabled: this.isDisabled,
+                        focused:
+                          !this.isSingle &&
+                          (this.isFocused || !!this.validationState),
+                        for: this.computedId,
+                        left: this.labelPosition.left,
+                        light: this.light,
+                        right: this.labelPosition.right,
+                        value: this.labelValue,
+                      },
+                    };
+                    return this.$createElement(
+                      _VLabel__WEBPACK_IMPORTED_MODULE_3__["default"],
+                      data,
+                      this.$slots.label || this.label
+                    );
+                  },
+                  genLegend: function genLegend() {
+                    var width =
+                      !this.singleLine && (this.labelValue || this.isDirty)
+                        ? this.labelWidth
+                        : 0;
+                    var span = this.$createElement("span", {
+                      domProps: {
+                        innerHTML: "&#8203;",
+                      },
+                    });
+                    return this.$createElement(
+                      "legend",
+                      {
+                        style: {
+                          width: !this.isSingle
+                            ? Object(
+                                _util_helpers__WEBPACK_IMPORTED_MODULE_9__[
+                                  "convertToUnit"
+                                ]
+                              )(width)
+                            : undefined,
+                        },
+                      },
+                      [span]
+                    );
+                  },
+                  genInput: function genInput() {
+                    var listeners = Object.assign({}, this.listeners$);
+                    delete listeners.change; // Change should not be bound externally
+
+                    return this.$createElement("input", {
+                      style: {},
+                      domProps: {
+                        value:
+                          this.type === "number" &&
+                          Object.is(this.lazyValue, -0)
+                            ? "-0"
+                            : this.lazyValue,
+                      },
+                      attrs: __assign(__assign({}, this.attrs$), {
+                        autofocus: this.autofocus,
+                        disabled: this.isDisabled,
+                        id: this.computedId,
+                        placeholder: this.placeholder,
+                        readonly: this.isReadonly,
+                        type: this.type,
+                      }),
+                      on: Object.assign(listeners, {
+                        blur: this.onBlur,
+                        input: this.onInput,
+                        focus: this.onFocus,
+                        keydown: this.onKeyDown,
+                      }),
+                      ref: "input",
+                      directives: [
+                        {
+                          name: "resize",
+                          modifiers: {
+                            quiet: true,
+                          },
+                          value: this.onResize,
+                        },
+                      ],
+                    });
+                  },
+                  genMessages: function genMessages() {
+                    if (!this.showDetails) return null;
+                    var messagesNode =
+                      _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genMessages.call(this);
+                    var counterNode = this.genCounter();
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-text-field__details",
+                      },
+                      [messagesNode, counterNode]
+                    );
+                  },
+                  genTextFieldSlot: function genTextFieldSlot() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-text-field__slot",
+                      },
+                      [
+                        this.genLabel(),
+                        this.prefix ? this.genAffix("prefix") : null,
+                        this.genInput(),
+                        this.suffix ? this.genAffix("suffix") : null,
+                      ]
+                    );
+                  },
+                  genAffix: function genAffix(type) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        class: "v-text-field__" + type,
+                        ref: type,
+                      },
+                      this[type]
+                    );
+                  },
+                  onBlur: function onBlur(e) {
+                    var _this = this;
+
+                    this.isFocused = false;
+                    e &&
+                      this.$nextTick(function () {
+                        return _this.$emit("blur", e);
+                      });
+                  },
+                  onClick: function onClick() {
+                    if (this.isFocused || this.isDisabled || !this.$refs.input)
+                      return;
+                    this.$refs.input.focus();
+                  },
+                  onFocus: function onFocus(e) {
+                    if (!this.$refs.input) return;
+
+                    if (document.activeElement !== this.$refs.input) {
+                      return this.$refs.input.focus();
+                    }
+
+                    if (!this.isFocused) {
+                      this.isFocused = true;
+                      e && this.$emit("focus", e);
+                    }
+                  },
+                  onInput: function onInput(e) {
+                    var target = e.target;
+                    this.internalValue = target.value;
+                    this.badInput = target.validity && target.validity.badInput;
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    if (
+                      e.keyCode ===
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_9__["keyCodes"]
+                        .enter
+                    )
+                      this.$emit("change", this.internalValue);
+                    this.$emit("keydown", e);
+                  },
+                  onMouseDown: function onMouseDown(e) {
+                    // Prevent input from being blurred
+                    if (e.target !== this.$refs.input) {
+                      e.preventDefault();
+                      e.stopPropagation();
+                    }
+
+                    _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.onMouseDown.call(this, e);
+                  },
+                  onMouseUp: function onMouseUp(e) {
+                    if (this.hasMouseDown) this.focus();
+                    _VInput__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.onMouseUp.call(this, e);
+                  },
+                  setLabelWidth: function setLabelWidth() {
+                    if (!this.outlined) return;
+                    this.labelWidth = this.$refs.label
+                      ? Math.min(
+                          this.$refs.label.scrollWidth * 0.75 + 6,
+                          this.$el.offsetWidth - 24
+                        )
+                      : 0;
+                  },
+                  setPrefixWidth: function setPrefixWidth() {
+                    if (!this.$refs.prefix) return;
+                    this.prefixWidth = this.$refs.prefix.offsetWidth;
+                  },
+                  setPrependWidth: function setPrependWidth() {
+                    if (!this.outlined || !this.$refs["prepend-inner"]) return;
+                    this.prependWidth = this.$refs["prepend-inner"].offsetWidth;
+                  },
+                  tryAutofocus: function tryAutofocus() {
+                    if (
+                      !this.autofocus ||
+                      typeof document === "undefined" ||
+                      !this.$refs.input ||
+                      document.activeElement === this.$refs.input
+                    )
+                      return false;
+                    this.$refs.input.focus();
+                    return true;
+                  },
+                  updateValue: function updateValue(val) {
+                    // Sets validationState from validatable
+                    this.hasColor = val;
+
+                    if (val) {
+                      this.initialValue = this.lazyValue;
+                    } else if (this.initialValue !== this.lazyValue) {
+                      this.$emit("change", this.lazyValue);
+                    }
+                  },
+                  onResize: function onResize() {
+                    this.setLabelWidth();
+                    this.setPrefixWidth();
+                    this.setPrependWidth();
+                  },
+                },
+              });
 
-      if (!this.isMultiple && this.value && !this.pickerDate || this.isMultiple && this.multipleValue.length && (!oldValue || !oldValue.length) && !this.pickerDate) {
-        this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month');
-      }
-    },
-    type: function type(_type) {
-      this.activePicker = _type.toUpperCase();
-
-      if (this.value && this.value.length) {
-        var output = this.multipleValue.map(function (val) {
-          return sanitizeDateString(val, _type);
-        }).filter(this.isDateAllowed);
-        this.$emit('input', this.isMultiple ? output : output[0]);
-      }
-    }
-  },
-  created: function created() {
-    this.checkMultipleProp();
-
-    if (this.pickerDate !== this.tableDate) {
-      this.$emit('update:picker-date', this.tableDate);
-    }
-
-    this.setInputDate();
-  },
-  methods: {
-    emitInput: function emitInput(newInput) {
-      if (this.range) {
-        if (this.multipleValue.length !== 1) {
-          this.$emit('input', [newInput]);
-        } else {
-          var output_1 = [this.multipleValue[0], newInput];
-          this.$emit('input', output_1);
-          this.$emit('change', output_1);
-        }
+            /***/
+          },
 
-        return;
-      }
+        /***/ "./src/components/VTextField/index.ts":
+          /*!********************************************!*\
+  !*** ./src/components/VTextField/index.ts ***!
+  \********************************************/
+          /*! exports provided: VTextField, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTextField__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTextField */ "./src/components/VTextField/VTextField.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTextField",
+              function () {
+                return _VTextField__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-      var output = this.multiple ? this.multipleValue.indexOf(newInput) === -1 ? this.multipleValue.concat([newInput]) : this.multipleValue.filter(function (x) {
-        return x !== newInput;
-      }) : newInput;
-      this.$emit('input', output);
-      this.multiple || this.$emit('change', newInput);
-    },
-    checkMultipleProp: function checkMultipleProp() {
-      if (this.value == null) return;
-      var valueType = this.value.constructor.name;
-      var expected = this.isMultiple ? 'Array' : 'String';
-
-      if (valueType !== expected) {
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_11__["consoleWarn"])("Value must be " + (this.isMultiple ? 'an' : 'a') + " " + expected + ", got " + valueType, this);
-      }
-    },
-    isDateAllowed: function isDateAllowed(value) {
-      return Object(_util_isDateAllowed__WEBPACK_IMPORTED_MODULE_7__["default"])(value, this.min, this.max, this.allowedDates);
-    },
-    yearClick: function yearClick(value) {
-      this.inputYear = value;
-
-      if (this.type === 'month') {
-        this.tableDate = "" + value;
-      } else {
-        this.tableDate = value + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])((this.tableMonth || 0) + 1);
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VTextField__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      this.activePicker = 'MONTH';
+            /***/
+          },
 
-      if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {
-        this.$emit('input', this.inputDate);
-      }
-    },
-    monthClick: function monthClick(value) {
-      this.inputYear = parseInt(value.split('-')[0], 10);
-      this.inputMonth = parseInt(value.split('-')[1], 10) - 1;
-
-      if (this.type === 'date') {
-        if (this.inputDay) {
-          this.inputDay = Math.min(this.inputDay, Object(_VCalendar_util_timestamp__WEBPACK_IMPORTED_MODULE_10__["daysInMonth"])(this.inputYear, this.inputMonth + 1));
-        }
+        /***/ "./src/components/VTextarea/VTextarea.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VTextarea/VTextarea.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-        this.tableDate = value;
-        this.activePicker = 'DATE';
+        /***/ "./src/components/VTextarea/VTextarea.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VTextarea/VTextarea.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTextarea_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTextarea.sass */ "./src/components/VTextarea/VTextarea.sass"
+              );
+            /* harmony import */ var _VTextarea_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTextarea_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Extensions
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"]
+            )(_VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__["default"]);
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "v-textarea",
+                props: {
+                  autoGrow: Boolean,
+                  noResize: Boolean,
+                  rowHeight: {
+                    type: [Number, String],
+                    default: 24,
+                    validator: function validator(v) {
+                      return !isNaN(parseFloat(v));
+                    },
+                  },
+                  rows: {
+                    type: [Number, String],
+                    default: 5,
+                    validator: function validator(v) {
+                      return !isNaN(parseInt(v, 10));
+                    },
+                  },
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-textarea": true,
+                        "v-textarea--auto-grow": this.autoGrow,
+                        "v-textarea--no-resize": this.noResizeHandle,
+                      },
+                      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.computed.classes.call(this)
+                    );
+                  },
+                  noResizeHandle: function noResizeHandle() {
+                    return this.noResize || this.autoGrow;
+                  },
+                },
+                watch: {
+                  lazyValue: function lazyValue() {
+                    this.autoGrow && this.$nextTick(this.calculateInputHeight);
+                  },
+                  rowHeight: function rowHeight() {
+                    this.autoGrow && this.$nextTick(this.calculateInputHeight);
+                  },
+                },
+                mounted: function mounted() {
+                  var _this = this;
+
+                  setTimeout(function () {
+                    _this.autoGrow && _this.calculateInputHeight();
+                  }, 0);
+                },
+                methods: {
+                  calculateInputHeight: function calculateInputHeight() {
+                    var input = this.$refs.input;
+                    if (!input) return;
+                    input.style.height = "0";
+                    var height = input.scrollHeight;
+                    var minHeight =
+                      parseInt(this.rows, 10) * parseFloat(this.rowHeight); // This has to be done ASAP, waiting for Vue
+                    // to update the DOM causes ugly layout jumping
+
+                    input.style.height = Math.max(minHeight, height) + "px";
+                  },
+                  genInput: function genInput() {
+                    var input =
+                      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genInput.call(this);
+                    input.tag = "textarea";
+                    delete input.data.attrs.type;
+                    input.data.attrs.rows = this.rows;
+                    return input;
+                  },
+                  onInput: function onInput(e) {
+                    _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__[
+                      "default"
+                    ].options.methods.onInput.call(this, e);
+                    this.autoGrow && this.calculateInputHeight();
+                  },
+                  onKeyDown: function onKeyDown(e) {
+                    // Prevents closing of a
+                    // dialog when pressing
+                    // enter
+                    if (this.isFocused && e.keyCode === 13) {
+                      e.stopPropagation();
+                    }
+
+                    this.$emit("keydown", e);
+                  },
+                },
+              });
 
-        if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {
-          this.$emit('input', this.inputDate);
-        }
-      } else {
-        this.emitInput(this.inputDate);
-      }
-    },
-    dateClick: function dateClick(value) {
-      this.inputYear = parseInt(value.split('-')[0], 10);
-      this.inputMonth = parseInt(value.split('-')[1], 10) - 1;
-      this.inputDay = parseInt(value.split('-')[2], 10);
-      this.emitInput(this.inputDate);
-    },
-    genPickerTitle: function genPickerTitle() {
-      var _this = this;
-
-      return this.$createElement(_VDatePickerTitle__WEBPACK_IMPORTED_MODULE_0__["default"], {
-        props: {
-          date: this.value ? this.formatters.titleDate(this.isMultiple ? this.multipleValue : this.value) : '',
-          disabled: this.disabled,
-          readonly: this.readonly,
-          selectingYear: this.activePicker === 'YEAR',
-          year: this.formatters.year(this.multipleValue.length ? "" + this.inputYear : this.tableDate),
-          yearIcon: this.yearIcon,
-          value: this.multipleValue[0]
-        },
-        slot: 'title',
-        on: {
-          'update:selecting-year': function updateSelectingYear(value) {
-            return _this.activePicker = value ? 'YEAR' : _this.type.toUpperCase();
-          }
-        }
-      });
-    },
-    genTableHeader: function genTableHeader() {
-      var _this = this;
-
-      return this.$createElement(_VDatePickerHeader__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          nextIcon: this.nextIcon,
-          color: this.color,
-          dark: this.dark,
-          disabled: this.disabled,
-          format: this.headerDateFormat,
-          light: this.light,
-          locale: this.locale,
-          min: this.activePicker === 'DATE' ? this.minMonth : this.minYear,
-          max: this.activePicker === 'DATE' ? this.maxMonth : this.maxYear,
-          nextAriaLabel: this.activePicker === 'DATE' ? this.nextMonthAriaLabel : this.nextYearAriaLabel,
-          prevAriaLabel: this.activePicker === 'DATE' ? this.prevMonthAriaLabel : this.prevYearAriaLabel,
-          prevIcon: this.prevIcon,
-          readonly: this.readonly,
-          value: this.activePicker === 'DATE' ? Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.tableYear, 4) + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.tableMonth + 1) : "" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.tableYear, 4)
-        },
-        on: {
-          toggle: function toggle() {
-            return _this.activePicker = _this.activePicker === 'DATE' ? 'MONTH' : 'YEAR';
-          },
-          input: function input(value) {
-            return _this.tableDate = value;
-          }
-        }
-      });
-    },
-    genDateTable: function genDateTable() {
-      var _this = this;
-
-      return this.$createElement(_VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          allowedDates: this.allowedDates,
-          color: this.color,
-          current: this.current,
-          dark: this.dark,
-          disabled: this.disabled,
-          events: this.events,
-          eventColor: this.eventColor,
-          firstDayOfWeek: this.firstDayOfWeek,
-          format: this.dayFormat,
-          light: this.light,
-          locale: this.locale,
-          localeFirstDayOfYear: this.localeFirstDayOfYear,
-          min: this.min,
-          max: this.max,
-          range: this.range,
-          readonly: this.readonly,
-          scrollable: this.scrollable,
-          showWeek: this.showWeek,
-          tableDate: Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.tableYear, 4) + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.tableMonth + 1),
-          value: this.value,
-          weekdayFormat: this.weekdayFormat
-        },
-        ref: 'table',
-        on: __assign({
-          input: this.dateClick,
-          'update:table-date': function updateTableDate(value) {
-            return _this.tableDate = value;
-          }
-        }, Object(_util__WEBPACK_IMPORTED_MODULE_12__["createItemTypeListeners"])(this, ':date'))
-      });
-    },
-    genMonthTable: function genMonthTable() {
-      var _this = this;
-
-      return this.$createElement(_VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        props: {
-          allowedDates: this.type === 'month' ? this.allowedDates : null,
-          color: this.color,
-          current: this.current ? sanitizeDateString(this.current, 'month') : null,
-          dark: this.dark,
-          disabled: this.disabled,
-          events: this.type === 'month' ? this.events : null,
-          eventColor: this.type === 'month' ? this.eventColor : null,
-          format: this.monthFormat,
-          light: this.light,
-          locale: this.locale,
-          min: this.minMonth,
-          max: this.maxMonth,
-          range: this.range,
-          readonly: this.readonly && this.type === 'month',
-          scrollable: this.scrollable,
-          value: this.selectedMonths,
-          tableDate: "" + Object(_util__WEBPACK_IMPORTED_MODULE_12__["pad"])(this.tableYear, 4)
-        },
-        ref: 'table',
-        on: __assign({
-          input: this.monthClick,
-          'update:table-date': function updateTableDate(value) {
-            return _this.tableDate = value;
-          }
-        }, Object(_util__WEBPACK_IMPORTED_MODULE_12__["createItemTypeListeners"])(this, ':month'))
-      });
-    },
-    genYears: function genYears() {
-      return this.$createElement(_VDatePickerYears__WEBPACK_IMPORTED_MODULE_4__["default"], {
-        props: {
-          color: this.color,
-          format: this.yearFormat,
-          locale: this.locale,
-          min: this.minYear,
-          max: this.maxYear,
-          value: this.tableYear
-        },
-        on: __assign({
-          input: this.yearClick
-        }, Object(_util__WEBPACK_IMPORTED_MODULE_12__["createItemTypeListeners"])(this, ':year'))
-      });
-    },
-    genPickerBody: function genPickerBody() {
-      var children = this.activePicker === 'YEAR' ? [this.genYears()] : [this.genTableHeader(), this.activePicker === 'DATE' ? this.genDateTable() : this.genMonthTable()];
-      return this.$createElement('div', {
-        key: this.activePicker
-      }, children);
-    },
-    setInputDate: function setInputDate() {
-      if (this.lastValue) {
-        var array = this.lastValue.split('-');
-        this.inputYear = parseInt(array[0], 10);
-        this.inputMonth = parseInt(array[1], 10) - 1;
-
-        if (this.type === 'date') {
-          this.inputDay = parseInt(array[2], 10);
-        }
-      } else {
-        this.inputYear = this.inputYear || this.now.getFullYear();
-        this.inputMonth = this.inputMonth == null ? this.inputMonth : this.now.getMonth();
-        this.inputDay = this.inputDay || this.now.getDate();
-      }
-    }
-  },
-  render: function render() {
-    return this.genPicker('v-picker--date');
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VTextarea/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VTextarea/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VTextarea, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTextarea__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTextarea */ "./src/components/VTextarea/VTextarea.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTextarea",
+              function () {
+                return _VTextarea__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-/***/ "./src/components/VDatePicker/VDatePickerDateTable.ts":
-/*!************************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerDateTable.ts ***!
-  \************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mixins/date-picker-table */ "./src/components/VDatePicker/mixins/date-picker-table.ts");
-/* harmony import */ var _util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/dateTimeUtils */ "./src/util/dateTimeUtils.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/components/VDatePicker/util/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Mixins
- // Utils
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-date-picker-date-table',
-  props: {
-    firstDayOfWeek: {
-      type: [String, Number],
-      default: 0
-    },
-    localeFirstDayOfYear: {
-      type: [String, Number],
-      default: 0
-    },
-    showWeek: Boolean,
-    weekdayFormat: Function
-  },
-  computed: {
-    formatter: function formatter() {
-      return this.format || Object(_util__WEBPACK_IMPORTED_MODULE_2__["createNativeLocaleFormatter"])(this.currentLocale, {
-        day: 'numeric',
-        timeZone: 'UTC'
-      }, {
-        start: 8,
-        length: 2
-      });
-    },
-    weekdayFormatter: function weekdayFormatter() {
-      return this.weekdayFormat || Object(_util__WEBPACK_IMPORTED_MODULE_2__["createNativeLocaleFormatter"])(this.currentLocale, {
-        weekday: 'narrow',
-        timeZone: 'UTC'
-      });
-    },
-    weekDays: function weekDays() {
-      var _this = this;
-
-      var first = parseInt(this.firstDayOfWeek, 10);
-      return this.weekdayFormatter ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["createRange"])(7).map(function (i) {
-        return _this.weekdayFormatter("2017-01-" + (first + i + 15));
-      }) // 2017-01-15 is Sunday
-      : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["createRange"])(7).map(function (i) {
-        return ['S', 'M', 'T', 'W', 'T', 'F', 'S'][(i + first) % 7];
-      });
-    }
-  },
-  methods: {
-    calculateTableDate: function calculateTableDate(delta) {
-      return Object(_util__WEBPACK_IMPORTED_MODULE_2__["monthChange"])(this.tableDate, Math.sign(delta || 1));
-    },
-    genTHead: function genTHead() {
-      var _this = this;
-
-      var days = this.weekDays.map(function (day) {
-        return _this.$createElement('th', day);
-      });
-
-      if (this.showWeek) {
-        days.unshift(this.$createElement('th'));
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VTextarea__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      return this.$createElement('thead', this.genTR(days));
-    },
-    // Returns number of the days from the firstDayOfWeek to the first day of the current month
-    weekDaysBeforeFirstDayOfTheMonth: function weekDaysBeforeFirstDayOfTheMonth() {
-      var firstDayOfTheMonth = new Date(this.displayedYear + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(this.displayedMonth + 1) + "-01T00:00:00+00:00");
-      var weekDay = firstDayOfTheMonth.getUTCDay();
-      return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7;
-    },
-    getWeekNumber: function getWeekNumber(dayInMonth) {
-      return Object(_util_dateTimeUtils__WEBPACK_IMPORTED_MODULE_1__["weekNumber"])(this.displayedYear, this.displayedMonth, dayInMonth, parseInt(this.firstDayOfWeek), parseInt(this.localeFirstDayOfYear));
-    },
-    genWeekNumber: function genWeekNumber(weekNumber) {
-      return this.$createElement('td', [this.$createElement('small', {
-        staticClass: 'v-date-picker-table--date__week'
-      }, String(weekNumber).padStart(2, '0'))]);
-    },
-    genTBody: function genTBody() {
-      var children = [];
-      var daysInMonth = new Date(this.displayedYear, this.displayedMonth + 1, 0).getDate();
-      var rows = [];
-      var day = this.weekDaysBeforeFirstDayOfTheMonth();
-
-      if (this.showWeek) {
-        rows.push(this.genWeekNumber(this.getWeekNumber(1)));
-      }
+            /***/
+          },
 
-      while (day--) {
-        rows.push(this.$createElement('td'));
-      }
+        /***/ "./src/components/VThemeProvider/VThemeProvider.ts":
+          /*!*********************************************************!*\
+  !*** ./src/components/VThemeProvider/VThemeProvider.ts ***!
+  \*********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            // Mixins
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
+                name: "v-theme-provider",
+                props: {
+                  root: Boolean,
+                },
+                computed: {
+                  isDark: function isDark() {
+                    return this.root
+                      ? this.rootIsDark
+                      : _mixins_themeable__WEBPACK_IMPORTED_MODULE_0__[
+                          "default"
+                        ].options.computed.isDark.call(this);
+                  },
+                },
+                render: function render() {
+                  /* istanbul ignore next */
+                  return (
+                    this.$slots.default &&
+                    this.$slots.default.find(function (node) {
+                      return !node.isComment && node.text !== " ";
+                    })
+                  );
+                },
+              });
 
-      for (day = 1; day <= daysInMonth; day++) {
-        var date = this.displayedYear + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(this.displayedMonth + 1) + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(day);
-        rows.push(this.$createElement('td', [this.genButton(date, true, 'date', this.formatter)]));
+            /***/
+          },
 
-        if (rows.length % (this.showWeek ? 8 : 7) === 0) {
-          children.push(this.genTR(rows));
-          rows = [];
+        /***/ "./src/components/VThemeProvider/index.ts":
+          /*!************************************************!*\
+  !*** ./src/components/VThemeProvider/index.ts ***!
+  \************************************************/
+          /*! exports provided: VThemeProvider, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VThemeProvider */ "./src/components/VThemeProvider/VThemeProvider.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VThemeProvider",
+              function () {
+                return _VThemeProvider__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
-          if (this.showWeek && day < daysInMonth) {
-            rows.push(this.genWeekNumber(this.getWeekNumber(day + 7)));
-          }
-        }
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VThemeProvider__WEBPACK_IMPORTED_MODULE_0__["default"];
 
-      if (rows.length) {
-        children.push(this.genTR(rows));
-      }
+            /***/
+          },
 
-      return this.$createElement('tbody', children);
-    },
-    genTR: function genTR(children) {
-      return [this.$createElement('tr', children)];
-    }
-  },
-  render: function render() {
-    return this.genTable('v-date-picker-table v-date-picker-table--date', [this.genTHead(), this.genTBody()], this.calculateTableDate);
-  }
-}));
+        /***/ "./src/components/VTimePicker/SelectingTimes.ts":
+          /*!******************************************************!*\
+  !*** ./src/components/VTimePicker/SelectingTimes.ts ***!
+  \******************************************************/
+          /*! exports provided: SelectingTimes */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "SelectingTimes",
+              function () {
+                return SelectingTimes;
+              }
+            );
+            var SelectingTimes;
 
-/***/ }),
+            (function (SelectingTimes) {
+              SelectingTimes[(SelectingTimes["Hour"] = 1)] = "Hour";
+              SelectingTimes[(SelectingTimes["Minute"] = 2)] = "Minute";
+              SelectingTimes[(SelectingTimes["Second"] = 3)] = "Second";
+            })(SelectingTimes || (SelectingTimes = {}));
 
-/***/ "./src/components/VDatePicker/VDatePickerHeader.sass":
-/*!***********************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerHeader.sass ***!
-  \***********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+            /***/
+          },
 
-// extracted by mini-css-extract-plugin
+        /***/ "./src/components/VTimePicker/VTimePicker.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VTimePicker/VTimePicker.ts ***!
+  \***************************************************/
+          /*! exports provided: SelectingTimes, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTimePickerTitle */ "./src/components/VTimePicker/VTimePickerTitle.ts"
+              );
+            /* harmony import */ var _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VTimePickerClock */ "./src/components/VTimePicker/VTimePickerClock.ts"
+              );
+            /* harmony import */ var _mixins_picker__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/picker */ "./src/mixins/picker/index.ts"
+              );
+            /* harmony import */ var _mixins_picker_button__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/picker-button */ "./src/mixins/picker-button/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../VDatePicker/util/pad */ "./src/components/VDatePicker/util/pad.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ./SelectingTimes */ "./src/components/VTimePicker/SelectingTimes.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "SelectingTimes",
+              function () {
+                return _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                  "SelectingTimes"
+                ];
+              }
+            );
+
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/***/ }),
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ "./src/components/VDatePicker/VDatePickerHeader.ts":
-/*!*********************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerHeader.ts ***!
-  \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDatePickerHeader_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDatePickerHeader.sass */ "./src/components/VDatePicker/VDatePickerHeader.sass");
-/* harmony import */ var _VDatePickerHeader_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDatePickerHeader_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/localable */ "./src/mixins/localable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util */ "./src/components/VDatePicker/util/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
- // Components
-
-
- // Mixins
-
-
-
- // Utils
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_localable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-date-picker-header',
-  props: {
-    disabled: Boolean,
-    format: Function,
-    min: String,
-    max: String,
-    nextAriaLabel: String,
-    nextIcon: {
-      type: String,
-      default: '$next'
-    },
-    prevAriaLabel: String,
-    prevIcon: {
-      type: String,
-      default: '$prev'
-    },
-    readonly: Boolean,
-    value: {
-      type: [Number, String],
-      required: true
-    }
-  },
-  data: function data() {
-    return {
-      isReversing: false
-    };
-  },
-  computed: {
-    formatter: function formatter() {
-      if (this.format) {
-        return this.format;
-      } else if (String(this.value).split('-')[1]) {
-        return Object(_util__WEBPACK_IMPORTED_MODULE_6__["createNativeLocaleFormatter"])(this.currentLocale, {
-          month: 'long',
-          year: 'numeric',
-          timeZone: 'UTC'
-        }, {
-          length: 7
-        });
-      } else {
-        return Object(_util__WEBPACK_IMPORTED_MODULE_6__["createNativeLocaleFormatter"])(this.currentLocale, {
-          year: 'numeric',
-          timeZone: 'UTC'
-        }, {
-          length: 4
-        });
-      }
-    }
-  },
-  watch: {
-    value: function value(newVal, oldVal) {
-      this.isReversing = newVal < oldVal;
-    }
-  },
-  methods: {
-    genBtn: function genBtn(change) {
-      var _this = this;
-
-      var ariaLabelId = change > 0 ? this.nextAriaLabel : this.prevAriaLabel;
-      var ariaLabel = ariaLabelId ? this.$vuetify.lang.t(ariaLabelId) : undefined;
-      var disabled = this.disabled || change < 0 && this.min && this.calculateChange(change) < this.min || change > 0 && this.max && this.calculateChange(change) > this.max;
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        attrs: {
-          'aria-label': ariaLabel
-        },
-        props: {
-          dark: this.dark,
-          disabled: disabled,
-          icon: true,
-          light: this.light
-        },
-        on: {
-          click: function click(e) {
-            e.stopPropagation();
-
-            _this.$emit('input', _this.calculateChange(change));
-          }
-        }
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_2__["default"], change < 0 === !this.$vuetify.rtl ? this.prevIcon : this.nextIcon)]);
-    },
-    calculateChange: function calculateChange(sign) {
-      var _a = __read(String(this.value).split('-').map(Number), 2),
-          year = _a[0],
-          month = _a[1];
-
-      if (month == null) {
-        return "" + (year + sign);
-      } else {
-        return Object(_util__WEBPACK_IMPORTED_MODULE_6__["monthChange"])(String(this.value), sign);
-      }
-    },
-    genHeader: function genHeader() {
-      var _this = this;
-
-      var color = !this.disabled && (this.color || 'accent');
-      var header = this.$createElement('div', this.setTextColor(color, {
-        key: String(this.value)
-      }), [this.$createElement('button', {
-        attrs: {
-          type: 'button'
-        },
-        on: {
-          click: function click() {
-            return _this.$emit('toggle');
-          }
-        }
-      }, [this.$slots.default || this.formatter(String(this.value))])]);
-      var transition = this.$createElement('transition', {
-        props: {
-          name: this.isReversing === !this.$vuetify.rtl ? 'tab-reverse-transition' : 'tab-transition'
-        }
-      }, [header]);
-      return this.$createElement('div', {
-        staticClass: 'v-date-picker-header__value',
-        class: {
-          'v-date-picker-header__value--disabled': this.disabled
-        }
-      }, [transition]);
-    }
-  },
-  render: function render() {
-    return this.$createElement('div', {
-      staticClass: 'v-date-picker-header',
-      class: __assign({
-        'v-date-picker-header--disabled': this.disabled
-      }, this.themeClasses)
-    }, [this.genBtn(-1), this.genHeader(), this.genBtn(+1)]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VDatePicker/VDatePickerMonthTable.ts":
-/*!*************************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerMonthTable.ts ***!
-  \*************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mixins/date-picker-table */ "./src/components/VDatePicker/mixins/date-picker-table.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./src/components/VDatePicker/util/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Mixins
- // Utils
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_mixins_date_picker_table__WEBPACK_IMPORTED_MODULE_0__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-date-picker-month-table',
-  computed: {
-    formatter: function formatter() {
-      return this.format || Object(_util__WEBPACK_IMPORTED_MODULE_1__["createNativeLocaleFormatter"])(this.currentLocale, {
-        month: 'short',
-        timeZone: 'UTC'
-      }, {
-        start: 5,
-        length: 2
-      });
-    }
-  },
-  methods: {
-    calculateTableDate: function calculateTableDate(delta) {
-      return "" + (parseInt(this.tableDate, 10) + Math.sign(delta || 1));
-    },
-    genTBody: function genTBody() {
-      var _this = this;
-
-      var children = [];
-      var cols = Array(3).fill(null);
-      var rows = 12 / cols.length;
-
-      var _loop_1 = function _loop_1(row) {
-        var tds = cols.map(function (_, col) {
-          var month = row * cols.length + col;
-          var date = _this.displayedYear + "-" + Object(_util__WEBPACK_IMPORTED_MODULE_1__["pad"])(month + 1);
-          return _this.$createElement('td', {
-            key: month
-          }, [_this.genButton(date, false, 'month', _this.formatter)]);
-        });
-        children.push(this_1.$createElement('tr', {
-          key: row
-        }, tds));
-      };
-
-      var this_1 = this;
+                return ar;
+              }; // Components
 
-      for (var row = 0; row < rows; row++) {
-        _loop_1(row);
-      }
-
-      return this.$createElement('tbody', children);
-    }
-  },
-  render: function render() {
-    return this.genTable('v-date-picker-table v-date-picker-table--month', [this.genTBody()], this.calculateTableDate);
-  }
-}));
+            // Mixins
 
-/***/ }),
+            // Utils
 
-/***/ "./src/components/VDatePicker/VDatePickerTable.sass":
-/*!**********************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerTable.sass ***!
-  \**********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+            var rangeHours24 = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_4__["createRange"]
+            )(24);
+            var rangeHours12am = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_4__["createRange"]
+            )(12);
+            var rangeHours12pm = rangeHours12am.map(function (v) {
+              return v + 12;
+            });
+            var range60 = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_4__["createRange"]
+            )(60);
+            var selectingNames = {
+              1: "hour",
+              2: "minute",
+              3: "second",
+            };
 
-// extracted by mini-css-extract-plugin
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(
+                _mixins_picker__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_picker_button__WEBPACK_IMPORTED_MODULE_3__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-time-picker",
+                props: {
+                  allowedHours: [Function, Array],
+                  allowedMinutes: [Function, Array],
+                  allowedSeconds: [Function, Array],
+                  disabled: Boolean,
+                  format: {
+                    type: String,
+                    default: "ampm",
+                    validator: function validator(val) {
+                      return ["ampm", "24hr"].includes(val);
+                    },
+                  },
+                  min: String,
+                  max: String,
+                  readonly: Boolean,
+                  scrollable: Boolean,
+                  useSeconds: Boolean,
+                  value: null,
+                  ampmInTitle: Boolean,
+                },
+                data: function data() {
+                  return {
+                    inputHour: null,
+                    inputMinute: null,
+                    inputSecond: null,
+                    lazyInputHour: null,
+                    lazyInputMinute: null,
+                    lazyInputSecond: null,
+                    period: "am",
+                    selecting:
+                      _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                        "SelectingTimes"
+                      ].Hour,
+                  };
+                },
+                computed: {
+                  selectingHour: {
+                    get: function get() {
+                      return (
+                        this.selecting ===
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Hour
+                      );
+                    },
+                    set: function set(v) {
+                      this.selecting =
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Hour;
+                    },
+                  },
+                  selectingMinute: {
+                    get: function get() {
+                      return (
+                        this.selecting ===
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Minute
+                      );
+                    },
+                    set: function set(v) {
+                      this.selecting =
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Minute;
+                    },
+                  },
+                  selectingSecond: {
+                    get: function get() {
+                      return (
+                        this.selecting ===
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Second
+                      );
+                    },
+                    set: function set(v) {
+                      this.selecting =
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Second;
+                    },
+                  },
+                  isAllowedHourCb: function isAllowedHourCb() {
+                    var _this = this;
+
+                    var cb;
+
+                    if (this.allowedHours instanceof Array) {
+                      cb = function cb(val) {
+                        return _this.allowedHours.includes(val);
+                      };
+                    } else {
+                      cb = this.allowedHours;
+                    }
+
+                    if (!this.min && !this.max) return cb;
+                    var minHour = this.min ? Number(this.min.split(":")[0]) : 0;
+                    var maxHour = this.max
+                      ? Number(this.max.split(":")[0])
+                      : 23;
+                    return function (val) {
+                      return (
+                        val >= minHour * 1 &&
+                        val <= maxHour * 1 &&
+                        (!cb || cb(val))
+                      );
+                    };
+                  },
+                  isAllowedMinuteCb: function isAllowedMinuteCb() {
+                    var _this = this;
+
+                    var cb;
+                    var isHourAllowed =
+                      !this.isAllowedHourCb ||
+                      this.inputHour === null ||
+                      this.isAllowedHourCb(this.inputHour);
+
+                    if (this.allowedMinutes instanceof Array) {
+                      cb = function cb(val) {
+                        return _this.allowedMinutes.includes(val);
+                      };
+                    } else {
+                      cb = this.allowedMinutes;
+                    }
+
+                    if (!this.min && !this.max) {
+                      return isHourAllowed
+                        ? cb
+                        : function () {
+                            return false;
+                          };
+                    }
+
+                    var _a = __read(
+                        this.min ? this.min.split(":").map(Number) : [0, 0],
+                        2
+                      ),
+                      minHour = _a[0],
+                      minMinute = _a[1];
+
+                    var _b = __read(
+                        this.max ? this.max.split(":").map(Number) : [23, 59],
+                        2
+                      ),
+                      maxHour = _b[0],
+                      maxMinute = _b[1];
+
+                    var minTime = minHour * 60 + minMinute * 1;
+                    var maxTime = maxHour * 60 + maxMinute * 1;
+                    return function (val) {
+                      var time = 60 * _this.inputHour + val;
+                      return (
+                        time >= minTime &&
+                        time <= maxTime &&
+                        isHourAllowed &&
+                        (!cb || cb(val))
+                      );
+                    };
+                  },
+                  isAllowedSecondCb: function isAllowedSecondCb() {
+                    var _this = this;
+
+                    var cb;
+                    var isHourAllowed =
+                      !this.isAllowedHourCb ||
+                      this.inputHour === null ||
+                      this.isAllowedHourCb(this.inputHour);
+                    var isMinuteAllowed =
+                      isHourAllowed &&
+                      (!this.isAllowedMinuteCb ||
+                        this.inputMinute === null ||
+                        this.isAllowedMinuteCb(this.inputMinute));
+
+                    if (this.allowedSeconds instanceof Array) {
+                      cb = function cb(val) {
+                        return _this.allowedSeconds.includes(val);
+                      };
+                    } else {
+                      cb = this.allowedSeconds;
+                    }
+
+                    if (!this.min && !this.max) {
+                      return isMinuteAllowed
+                        ? cb
+                        : function () {
+                            return false;
+                          };
+                    }
+
+                    var _a = __read(
+                        this.min ? this.min.split(":").map(Number) : [0, 0, 0],
+                        3
+                      ),
+                      minHour = _a[0],
+                      minMinute = _a[1],
+                      minSecond = _a[2];
+
+                    var _b = __read(
+                        this.max
+                          ? this.max.split(":").map(Number)
+                          : [23, 59, 59],
+                        3
+                      ),
+                      maxHour = _b[0],
+                      maxMinute = _b[1],
+                      maxSecond = _b[2];
+
+                    var minTime =
+                      minHour * 3600 + minMinute * 60 + (minSecond || 0) * 1;
+                    var maxTime =
+                      maxHour * 3600 + maxMinute * 60 + (maxSecond || 0) * 1;
+                    return function (val) {
+                      var time =
+                        3600 * _this.inputHour + 60 * _this.inputMinute + val;
+                      return (
+                        time >= minTime &&
+                        time <= maxTime &&
+                        isMinuteAllowed &&
+                        (!cb || cb(val))
+                      );
+                    };
+                  },
+                  isAmPm: function isAmPm() {
+                    return this.format === "ampm";
+                  },
+                },
+                watch: {
+                  value: "setInputData",
+                },
+                mounted: function mounted() {
+                  this.setInputData(this.value);
+                  this.$on("update:period", this.setPeriod);
+                },
+                methods: {
+                  genValue: function genValue() {
+                    if (
+                      this.inputHour != null &&
+                      this.inputMinute != null &&
+                      (!this.useSeconds || this.inputSecond != null)
+                    ) {
+                      return (
+                        Object(
+                          _VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__[
+                            "default"
+                          ]
+                        )(this.inputHour) +
+                        ":" +
+                        Object(
+                          _VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__[
+                            "default"
+                          ]
+                        )(this.inputMinute) +
+                        (this.useSeconds
+                          ? ":" +
+                            Object(
+                              _VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__[
+                                "default"
+                              ]
+                            )(this.inputSecond)
+                          : "")
+                      );
+                    }
+
+                    return null;
+                  },
+                  emitValue: function emitValue() {
+                    var value = this.genValue();
+                    if (value !== null) this.$emit("input", value);
+                  },
+                  setPeriod: function setPeriod(period) {
+                    this.period = period;
+
+                    if (this.inputHour != null) {
+                      var newHour =
+                        this.inputHour + (period === "am" ? -12 : 12);
+                      this.inputHour = this.firstAllowed("hour", newHour);
+                      this.emitValue();
+                    }
+                  },
+                  setInputData: function setInputData(value) {
+                    if (value == null || value === "") {
+                      this.inputHour = null;
+                      this.inputMinute = null;
+                      this.inputSecond = null;
+                    } else if (value instanceof Date) {
+                      this.inputHour = value.getHours();
+                      this.inputMinute = value.getMinutes();
+                      this.inputSecond = value.getSeconds();
+                    } else {
+                      var _a = __read(
+                          value
+                            .trim()
+                            .toLowerCase()
+                            .match(/^(\d+):(\d+)(:(\d+))?([ap]m)?$/) ||
+                            new Array(6),
+                          6
+                        ),
+                        hour = _a[1],
+                        minute = _a[2],
+                        second = _a[4],
+                        period = _a[5];
+
+                      this.inputHour = period
+                        ? this.convert12to24(parseInt(hour, 10), period)
+                        : parseInt(hour, 10);
+                      this.inputMinute = parseInt(minute, 10);
+                      this.inputSecond = parseInt(second || 0, 10);
+                    }
+
+                    this.period =
+                      this.inputHour == null || this.inputHour < 12
+                        ? "am"
+                        : "pm";
+                  },
+                  convert24to12: function convert24to12(hour) {
+                    return hour ? ((hour - 1) % 12) + 1 : 12;
+                  },
+                  convert12to24: function convert12to24(hour, period) {
+                    return (hour % 12) + (period === "pm" ? 12 : 0);
+                  },
+                  onInput: function onInput(value) {
+                    if (
+                      this.selecting ===
+                      _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                        "SelectingTimes"
+                      ].Hour
+                    ) {
+                      this.inputHour = this.isAmPm
+                        ? this.convert12to24(value, this.period)
+                        : value;
+                    } else if (
+                      this.selecting ===
+                      _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                        "SelectingTimes"
+                      ].Minute
+                    ) {
+                      this.inputMinute = value;
+                    } else {
+                      this.inputSecond = value;
+                    }
+
+                    this.emitValue();
+                  },
+                  onChange: function onChange(value) {
+                    this.$emit(
+                      "click:" + selectingNames[this.selecting],
+                      value
+                    );
+                    var emitChange =
+                      this.selecting ===
+                      (this.useSeconds
+                        ? _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                            "SelectingTimes"
+                          ].Second
+                        : _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                            "SelectingTimes"
+                          ].Minute);
+
+                    if (
+                      this.selecting ===
+                      _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                        "SelectingTimes"
+                      ].Hour
+                    ) {
+                      this.selecting =
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Minute;
+                    } else if (
+                      this.useSeconds &&
+                      this.selecting ===
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Minute
+                    ) {
+                      this.selecting =
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                          "SelectingTimes"
+                        ].Second;
+                    }
+
+                    if (
+                      this.inputHour === this.lazyInputHour &&
+                      this.inputMinute === this.lazyInputMinute &&
+                      (!this.useSeconds ||
+                        this.inputSecond === this.lazyInputSecond)
+                    )
+                      return;
+                    var time = this.genValue();
+                    if (time === null) return;
+                    this.lazyInputHour = this.inputHour;
+                    this.lazyInputMinute = this.inputMinute;
+                    this.useSeconds &&
+                      (this.lazyInputSecond = this.inputSecond);
+                    emitChange && this.$emit("change", time);
+                  },
+                  firstAllowed: function firstAllowed(type, value) {
+                    var allowedFn =
+                      type === "hour"
+                        ? this.isAllowedHourCb
+                        : type === "minute"
+                        ? this.isAllowedMinuteCb
+                        : this.isAllowedSecondCb;
+                    if (!allowedFn) return value; // TODO: clean up
+
+                    var range =
+                      type === "minute"
+                        ? range60
+                        : type === "second"
+                        ? range60
+                        : this.isAmPm
+                        ? value < 12
+                          ? rangeHours12am
+                          : rangeHours12pm
+                        : rangeHours24;
+                    var first = range.find(function (v) {
+                      return allowedFn(((v + value) % range.length) + range[0]);
+                    });
+                    return (((first || 0) + value) % range.length) + range[0];
+                  },
+                  genClock: function genClock() {
+                    return this.$createElement(
+                      _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        props: {
+                          allowedValues:
+                            this.selecting ===
+                            _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                              "SelectingTimes"
+                            ].Hour
+                              ? this.isAllowedHourCb
+                              : this.selecting ===
+                                _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                                  "SelectingTimes"
+                                ].Minute
+                              ? this.isAllowedMinuteCb
+                              : this.isAllowedSecondCb,
+                          color: this.color,
+                          dark: this.dark,
+                          disabled: this.disabled,
+                          double:
+                            this.selecting ===
+                              _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                                "SelectingTimes"
+                              ].Hour && !this.isAmPm,
+                          format:
+                            this.selecting ===
+                            _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                              "SelectingTimes"
+                            ].Hour
+                              ? this.isAmPm
+                                ? this.convert24to12
+                                : function (val) {
+                                    return val;
+                                  }
+                              : function (val) {
+                                  return Object(
+                                    _VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__[
+                                      "default"
+                                    ]
+                                  )(val, 2);
+                                },
+                          light: this.light,
+                          max:
+                            this.selecting ===
+                            _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                              "SelectingTimes"
+                            ].Hour
+                              ? this.isAmPm && this.period === "am"
+                                ? 11
+                                : 23
+                              : 59,
+                          min:
+                            this.selecting ===
+                              _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                                "SelectingTimes"
+                              ].Hour &&
+                            this.isAmPm &&
+                            this.period === "pm"
+                              ? 12
+                              : 0,
+                          readonly: this.readonly,
+                          scrollable: this.scrollable,
+                          size:
+                            Number(this.width) -
+                            (!this.fullWidth && this.landscape ? 80 : 20),
+                          step:
+                            this.selecting ===
+                            _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                              "SelectingTimes"
+                            ].Hour
+                              ? 1
+                              : 5,
+                          value:
+                            this.selecting ===
+                            _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                              "SelectingTimes"
+                            ].Hour
+                              ? this.inputHour
+                              : this.selecting ===
+                                _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__[
+                                  "SelectingTimes"
+                                ].Minute
+                              ? this.inputMinute
+                              : this.inputSecond,
+                        },
+                        on: {
+                          input: this.onInput,
+                          change: this.onChange,
+                        },
+                        ref: "clock",
+                      }
+                    );
+                  },
+                  genClockAmPm: function genClockAmPm() {
+                    return this.$createElement(
+                      "div",
+                      this.setTextColor(this.color || "primary", {
+                        staticClass: "v-time-picker-clock__ampm",
+                      }),
+                      [
+                        this.genPickerButton(
+                          "period",
+                          "am",
+                          this.$vuetify.lang.t("$vuetify.timePicker.am"),
+                          this.disabled || this.readonly
+                        ),
+                        this.genPickerButton(
+                          "period",
+                          "pm",
+                          this.$vuetify.lang.t("$vuetify.timePicker.pm"),
+                          this.disabled || this.readonly
+                        ),
+                      ]
+                    );
+                  },
+                  genPickerBody: function genPickerBody() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-time-picker-clock__container",
+                        key: this.selecting,
+                      },
+                      [
+                        !this.ampmInTitle && this.isAmPm && this.genClockAmPm(),
+                        this.genClock(),
+                      ]
+                    );
+                  },
+                  genPickerTitle: function genPickerTitle() {
+                    var _this = this;
+
+                    return this.$createElement(
+                      _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_0__["default"],
+                      {
+                        props: {
+                          ampm: this.isAmPm,
+                          ampmReadonly: this.isAmPm && !this.ampmInTitle,
+                          disabled: this.disabled,
+                          hour: this.inputHour,
+                          minute: this.inputMinute,
+                          second: this.inputSecond,
+                          period: this.period,
+                          readonly: this.readonly,
+                          useSeconds: this.useSeconds,
+                          selecting: this.selecting,
+                        },
+                        on: {
+                          "update:selecting": function updateSelecting(value) {
+                            return (_this.selecting = value);
+                          },
+                          "update:period": function updatePeriod(period) {
+                            return _this.$emit("update:period", period);
+                          },
+                        },
+                        ref: "title",
+                        slot: "title",
+                      }
+                    );
+                  },
+                },
+                render: function render() {
+                  return this.genPicker("v-picker--time");
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDatePicker/VDatePickerTitle.sass":
-/*!**********************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerTitle.sass ***!
+        /***/ "./src/components/VTimePicker/VTimePickerClock.sass":
+          /*!**********************************************************!*\
+  !*** ./src/components/VTimePicker/VTimePickerClock.sass ***!
   \**********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VDatePicker/VDatePickerTitle.ts":
-/*!********************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerTitle.ts ***!
+        /***/ "./src/components/VTimePicker/VTimePickerClock.ts":
+          /*!********************************************************!*\
+  !*** ./src/components/VTimePicker/VTimePickerClock.ts ***!
   \********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDatePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDatePickerTitle.sass */ "./src/components/VDatePicker/VDatePickerTitle.sass");
-/* harmony import */ var _VDatePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDatePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_picker_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/picker-button */ "./src/mixins/picker-button/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
- // Components
-
- // Mixins
-
- // Utils
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_picker_button__WEBPACK_IMPORTED_MODULE_2__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-date-picker-title',
-  props: {
-    date: {
-      type: String,
-      default: ''
-    },
-    disabled: Boolean,
-    readonly: Boolean,
-    selectingYear: Boolean,
-    value: {
-      type: String
-    },
-    year: {
-      type: [Number, String],
-      default: ''
-    },
-    yearIcon: {
-      type: String
-    }
-  },
-  data: function data() {
-    return {
-      isReversing: false
-    };
-  },
-  computed: {
-    computedTransition: function computedTransition() {
-      return this.isReversing ? 'picker-reverse-transition' : 'picker-transition';
-    }
-  },
-  watch: {
-    value: function value(val, prev) {
-      this.isReversing = val < prev;
-    }
-  },
-  methods: {
-    genYearIcon: function genYearIcon() {
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          dark: true
-        }
-      }, this.yearIcon);
-    },
-    getYearBtn: function getYearBtn() {
-      return this.genPickerButton('selectingYear', true, [String(this.year), this.yearIcon ? this.genYearIcon() : null], false, 'v-date-picker-title__year');
-    },
-    genTitleText: function genTitleText() {
-      return this.$createElement('transition', {
-        props: {
-          name: this.computedTransition
-        }
-      }, [this.$createElement('div', {
-        domProps: {
-          innerHTML: this.date || '&nbsp;'
-        },
-        key: this.value
-      })]);
-    },
-    genTitleDate: function genTitleDate() {
-      return this.genPickerButton('selectingYear', false, [this.genTitleText()], false, 'v-date-picker-title__date');
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-date-picker-title',
-      class: {
-        'v-date-picker-title--disabled': this.disabled
-      }
-    }, [this.getYearBtn(), this.genTitleDate()]);
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTimePickerClock_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTimePickerClock.sass */ "./src/components/VTimePicker/VTimePickerClock.sass"
+              );
+            /* harmony import */ var _VTimePickerClock_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTimePickerClock_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/***/ }),
+            // Mixins
+
+            // Types
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-time-picker-clock",
+                props: {
+                  allowedValues: Function,
+                  ampm: Boolean,
+                  disabled: Boolean,
+                  double: Boolean,
+                  format: {
+                    type: Function,
+                    default: function _default(val) {
+                      return val;
+                    },
+                  },
+                  max: {
+                    type: Number,
+                    required: true,
+                  },
+                  min: {
+                    type: Number,
+                    required: true,
+                  },
+                  scrollable: Boolean,
+                  readonly: Boolean,
+                  rotate: {
+                    type: Number,
+                    default: 0,
+                  },
+                  step: {
+                    type: Number,
+                    default: 1,
+                  },
+                  value: Number,
+                },
+                data: function data() {
+                  return {
+                    inputValue: this.value,
+                    isDragging: false,
+                    valueOnMouseDown: null,
+                    valueOnMouseUp: null,
+                  };
+                },
+                computed: {
+                  count: function count() {
+                    return this.max - this.min + 1;
+                  },
+                  degreesPerUnit: function degreesPerUnit() {
+                    return 360 / this.roundCount;
+                  },
+                  degrees: function degrees() {
+                    return (this.degreesPerUnit * Math.PI) / 180;
+                  },
+                  displayedValue: function displayedValue() {
+                    return this.value == null ? this.min : this.value;
+                  },
+                  innerRadiusScale: function innerRadiusScale() {
+                    return 0.62;
+                  },
+                  roundCount: function roundCount() {
+                    return this.double ? this.count / 2 : this.count;
+                  },
+                },
+                watch: {
+                  value: function value(_value) {
+                    this.inputValue = _value;
+                  },
+                },
+                methods: {
+                  wheel: function wheel(e) {
+                    e.preventDefault();
+                    var delta = Math.sign(-e.deltaY || 1);
+                    var value = this.displayedValue;
+
+                    do {
+                      value = value + delta;
+                      value =
+                        ((value - this.min + this.count) % this.count) +
+                        this.min;
+                    } while (
+                      !this.isAllowed(value) &&
+                      value !== this.displayedValue
+                    );
+
+                    if (value !== this.displayedValue) {
+                      this.update(value);
+                    }
+                  },
+                  isInner: function isInner(value) {
+                    return this.double && value - this.min >= this.roundCount;
+                  },
+                  handScale: function handScale(value) {
+                    return this.isInner(value) ? this.innerRadiusScale : 1;
+                  },
+                  isAllowed: function isAllowed(value) {
+                    return !this.allowedValues || this.allowedValues(value);
+                  },
+                  genValues: function genValues() {
+                    var children = [];
+
+                    for (
+                      var value = this.min;
+                      value <= this.max;
+                      value = value + this.step
+                    ) {
+                      var color =
+                        value === this.value && (this.color || "accent");
+                      children.push(
+                        this.$createElement(
+                          "span",
+                          this.setBackgroundColor(color, {
+                            staticClass: "v-time-picker-clock__item",
+                            class: {
+                              "v-time-picker-clock__item--active":
+                                value === this.displayedValue,
+                              "v-time-picker-clock__item--disabled":
+                                this.disabled || !this.isAllowed(value),
+                            },
+                            style: this.getTransform(value),
+                            domProps: {
+                              innerHTML:
+                                "<span>" + this.format(value) + "</span>",
+                            },
+                          })
+                        )
+                      );
+                    }
+
+                    return children;
+                  },
+                  genHand: function genHand() {
+                    var scale =
+                      "scaleY(" + this.handScale(this.displayedValue) + ")";
+                    var angle =
+                      this.rotate +
+                      this.degreesPerUnit * (this.displayedValue - this.min);
+                    var color = this.value != null && (this.color || "accent");
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(color, {
+                        staticClass: "v-time-picker-clock__hand",
+                        class: {
+                          "v-time-picker-clock__hand--inner": this.isInner(
+                            this.value
+                          ),
+                        },
+                        style: {
+                          transform: "rotate(" + angle + "deg) " + scale,
+                        },
+                      })
+                    );
+                  },
+                  getTransform: function getTransform(i) {
+                    var _a = this.getPosition(i),
+                      x = _a.x,
+                      y = _a.y;
+
+                    return {
+                      left: 50 + x * 50 + "%",
+                      top: 50 + y * 50 + "%",
+                    };
+                  },
+                  getPosition: function getPosition(value) {
+                    var rotateRadians = (this.rotate * Math.PI) / 180;
+                    return {
+                      x:
+                        Math.sin(
+                          (value - this.min) * this.degrees + rotateRadians
+                        ) * this.handScale(value),
+                      y:
+                        -Math.cos(
+                          (value - this.min) * this.degrees + rotateRadians
+                        ) * this.handScale(value),
+                    };
+                  },
+                  onMouseDown: function onMouseDown(e) {
+                    e.preventDefault();
+                    this.valueOnMouseDown = null;
+                    this.valueOnMouseUp = null;
+                    this.isDragging = true;
+                    this.onDragMove(e);
+                  },
+                  onMouseUp: function onMouseUp(e) {
+                    e.stopPropagation();
+                    this.isDragging = false;
+
+                    if (
+                      this.valueOnMouseUp !== null &&
+                      this.isAllowed(this.valueOnMouseUp)
+                    ) {
+                      this.$emit("change", this.valueOnMouseUp);
+                    }
+                  },
+                  onDragMove: function onDragMove(e) {
+                    e.preventDefault();
+                    if (!this.isDragging && e.type !== "click") return;
+
+                    var _a = this.$refs.clock.getBoundingClientRect(),
+                      width = _a.width,
+                      top = _a.top,
+                      left = _a.left;
+
+                    var innerWidth =
+                      this.$refs.innerClock.getBoundingClientRect().width;
+
+                    var _b = "touches" in e ? e.touches[0] : e,
+                      clientX = _b.clientX,
+                      clientY = _b.clientY;
+
+                    var center = {
+                      x: width / 2,
+                      y: -width / 2,
+                    };
+                    var coords = {
+                      x: clientX - left,
+                      y: top - clientY,
+                    };
+                    var handAngle =
+                      Math.round(
+                        this.angle(center, coords) - this.rotate + 360
+                      ) % 360;
+                    var insideClick =
+                      this.double &&
+                      this.euclidean(center, coords) <
+                        (innerWidth + innerWidth * this.innerRadiusScale) / 4;
+                    var checksCount = Math.ceil(15 / this.degreesPerUnit);
+                    var value;
+
+                    for (var i = 0; i < checksCount; i++) {
+                      value = this.angleToValue(
+                        handAngle + i * this.degreesPerUnit,
+                        insideClick
+                      );
+                      if (this.isAllowed(value))
+                        return this.setMouseDownValue(value);
+                      value = this.angleToValue(
+                        handAngle - i * this.degreesPerUnit,
+                        insideClick
+                      );
+                      if (this.isAllowed(value))
+                        return this.setMouseDownValue(value);
+                    }
+                  },
+                  angleToValue: function angleToValue(angle, insideClick) {
+                    var value =
+                      ((Math.round(angle / this.degreesPerUnit) +
+                        (insideClick ? this.roundCount : 0)) %
+                        this.count) +
+                      this.min; // Necessary to fix edge case when selecting left part of the value(s) at 12 o'clock
+
+                    if (angle < 360 - this.degreesPerUnit / 2) return value;
+                    return insideClick
+                      ? this.max - this.roundCount + 1
+                      : this.min;
+                  },
+                  setMouseDownValue: function setMouseDownValue(value) {
+                    if (this.valueOnMouseDown === null) {
+                      this.valueOnMouseDown = value;
+                    }
+
+                    this.valueOnMouseUp = value;
+                    this.update(value);
+                  },
+                  update: function update(value) {
+                    if (this.inputValue !== value) {
+                      this.inputValue = value;
+                      this.$emit("input", value);
+                    }
+                  },
+                  euclidean: function euclidean(p0, p1) {
+                    var dx = p1.x - p0.x;
+                    var dy = p1.y - p0.y;
+                    return Math.sqrt(dx * dx + dy * dy);
+                  },
+                  angle: function angle(center, p1) {
+                    var value =
+                      2 *
+                      Math.atan2(
+                        p1.y - center.y - this.euclidean(center, p1),
+                        p1.x - center.x
+                      );
+                    return Math.abs((value * 180) / Math.PI);
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var data = {
+                    staticClass: "v-time-picker-clock",
+                    class: __assign(
+                      {
+                        "v-time-picker-clock--indeterminate":
+                          this.value == null,
+                      },
+                      this.themeClasses
+                    ),
+                    on:
+                      this.readonly || this.disabled
+                        ? undefined
+                        : {
+                            mousedown: this.onMouseDown,
+                            mouseup: this.onMouseUp,
+                            mouseleave: function mouseleave(e) {
+                              return _this.isDragging && _this.onMouseUp(e);
+                            },
+                            touchstart: this.onMouseDown,
+                            touchend: this.onMouseUp,
+                            mousemove: this.onDragMove,
+                            touchmove: this.onDragMove,
+                          },
+                    ref: "clock",
+                  };
+
+                  if (this.scrollable && data.on) {
+                    data.on.wheel = this.wheel;
+                  }
 
-/***/ "./src/components/VDatePicker/VDatePickerYears.sass":
-/*!**********************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerYears.sass ***!
-  \**********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+                  return h("div", data, [
+                    h(
+                      "div",
+                      {
+                        staticClass: "v-time-picker-clock__inner",
+                        ref: "innerClock",
+                      },
+                      [this.genHand(), this.genValues()]
+                    ),
+                  ]);
+                },
+              });
 
-// extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/components/VTimePicker/VTimePickerTitle.sass":
+          /*!**********************************************************!*\
+  !*** ./src/components/VTimePicker/VTimePickerTitle.sass ***!
+  \**********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/***/ "./src/components/VDatePicker/VDatePickerYears.ts":
-/*!********************************************************!*\
-  !*** ./src/components/VDatePicker/VDatePickerYears.ts ***!
+        /***/ "./src/components/VTimePicker/VTimePickerTitle.ts":
+          /*!********************************************************!*\
+  !*** ./src/components/VTimePicker/VTimePickerTitle.ts ***!
   \********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDatePickerYears_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDatePickerYears.sass */ "./src/components/VDatePicker/VDatePickerYears.sass");
-/* harmony import */ var _VDatePickerYears_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDatePickerYears_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/localable */ "./src/mixins/localable/index.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./src/components/VDatePicker/util/index.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
- // Mixins
-
-
- // Utils
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_localable__WEBPACK_IMPORTED_MODULE_2__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-date-picker-years',
-  props: {
-    format: Function,
-    min: [Number, String],
-    max: [Number, String],
-    readonly: Boolean,
-    value: [Number, String]
-  },
-  data: function data() {
-    return {
-      defaultColor: 'primary'
-    };
-  },
-  computed: {
-    formatter: function formatter() {
-      return this.format || Object(_util__WEBPACK_IMPORTED_MODULE_3__["createNativeLocaleFormatter"])(this.currentLocale, {
-        year: 'numeric',
-        timeZone: 'UTC'
-      }, {
-        length: 4
-      });
-    }
-  },
-  mounted: function mounted() {
-    var _this = this;
-
-    setTimeout(function () {
-      var activeItem = _this.$el.getElementsByClassName('active')[0];
-
-      if (activeItem) {
-        _this.$el.scrollTop = activeItem.offsetTop - _this.$el.offsetHeight / 2 + activeItem.offsetHeight / 2;
-      } else if (_this.min && !_this.max) {
-        _this.$el.scrollTop = _this.$el.scrollHeight;
-      } else if (!_this.min && _this.max) {
-        _this.$el.scrollTop = 0;
-      } else {
-        _this.$el.scrollTop = _this.$el.scrollHeight / 2 - _this.$el.offsetHeight / 2;
-      }
-    });
-  },
-  methods: {
-    genYearItem: function genYearItem(year) {
-      var _this = this;
-
-      var formatted = this.formatter("" + year);
-      var active = parseInt(this.value, 10) === year;
-      var color = active && (this.color || 'primary');
-      return this.$createElement('li', this.setTextColor(color, {
-        key: year,
-        class: {
-          active: active
-        },
-        on: Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_4__["mergeListeners"])({
-          click: function click() {
-            return _this.$emit('input', year);
-          }
-        }, Object(_util__WEBPACK_IMPORTED_MODULE_3__["createItemTypeNativeListeners"])(this, ':year', year))
-      }), formatted);
-    },
-    genYearItems: function genYearItems() {
-      var children = [];
-      var selectedYear = this.value ? parseInt(this.value, 10) : new Date().getFullYear();
-      var maxYear = this.max ? parseInt(this.max, 10) : selectedYear + 100;
-      var minYear = Math.min(maxYear, this.min ? parseInt(this.min, 10) : selectedYear - 100);
-
-      for (var year = maxYear; year >= minYear; year--) {
-        children.push(this.genYearItem(year));
-      }
-
-      return children;
-    }
-  },
-  render: function render() {
-    return this.$createElement('ul', {
-      staticClass: 'v-date-picker-years',
-      ref: 'years'
-    }, this.genYearItems());
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTimePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTimePickerTitle.sass */ "./src/components/VTimePicker/VTimePickerTitle.sass"
+              );
+            /* harmony import */ var _VTimePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTimePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_picker_button__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/picker-button */ "./src/mixins/picker-button/index.ts"
+              );
+            /* harmony import */ var _VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VDatePicker/util */ "./src/components/VDatePicker/util/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./SelectingTimes */ "./src/components/VTimePicker/SelectingTimes.ts"
+              );
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _mixins_picker_button__WEBPACK_IMPORTED_MODULE_1__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-time-picker-title",
+                props: {
+                  ampm: Boolean,
+                  ampmReadonly: Boolean,
+                  disabled: Boolean,
+                  hour: Number,
+                  minute: Number,
+                  second: Number,
+                  period: {
+                    type: String,
+                    validator: function validator(period) {
+                      return period === "am" || period === "pm";
+                    },
+                  },
+                  readonly: Boolean,
+                  useSeconds: Boolean,
+                  selecting: Number,
+                },
+                methods: {
+                  genTime: function genTime() {
+                    var hour = this.hour;
+
+                    if (this.ampm) {
+                      hour = hour ? ((hour - 1) % 12) + 1 : 12;
+                    }
+
+                    var displayedHour =
+                      this.hour == null
+                        ? "--"
+                        : this.ampm
+                        ? String(hour)
+                        : Object(
+                            _VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__[
+                              "pad"
+                            ]
+                          )(hour);
+                    var displayedMinute =
+                      this.minute == null
+                        ? "--"
+                        : Object(
+                            _VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__[
+                              "pad"
+                            ]
+                          )(this.minute);
+                    var titleContent = [
+                      this.genPickerButton(
+                        "selecting",
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__[
+                          "SelectingTimes"
+                        ].Hour,
+                        displayedHour,
+                        this.disabled
+                      ),
+                      this.$createElement("span", ":"),
+                      this.genPickerButton(
+                        "selecting",
+                        _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__[
+                          "SelectingTimes"
+                        ].Minute,
+                        displayedMinute,
+                        this.disabled
+                      ),
+                    ];
+
+                    if (this.useSeconds) {
+                      var displayedSecond =
+                        this.second == null
+                          ? "--"
+                          : Object(
+                              _VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__[
+                                "pad"
+                              ]
+                            )(this.second);
+                      titleContent.push(this.$createElement("span", ":"));
+                      titleContent.push(
+                        this.genPickerButton(
+                          "selecting",
+                          _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__[
+                            "SelectingTimes"
+                          ].Second,
+                          displayedSecond,
+                          this.disabled
+                        )
+                      );
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        class: "v-time-picker-title__time",
+                      },
+                      titleContent
+                    );
+                  },
+                  genAmPm: function genAmPm() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-time-picker-title__ampm",
+                        class: {
+                          "v-time-picker-title__ampm--readonly":
+                            this.ampmReadonly,
+                        },
+                      },
+                      [
+                        !this.ampmReadonly || this.period === "am"
+                          ? this.genPickerButton(
+                              "period",
+                              "am",
+                              this.$vuetify.lang.t("$vuetify.timePicker.am"),
+                              this.disabled || this.readonly
+                            )
+                          : null,
+                        !this.ampmReadonly || this.period === "pm"
+                          ? this.genPickerButton(
+                              "period",
+                              "pm",
+                              this.$vuetify.lang.t("$vuetify.timePicker.pm"),
+                              this.disabled || this.readonly
+                            )
+                          : null,
+                      ]
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var children = [this.genTime()];
+                  this.ampm && children.push(this.genAmPm());
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-time-picker-title",
+                    },
+                    children
+                  );
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/VDatePicker/index.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VDatePicker/index.ts ***!
+        /***/ "./src/components/VTimePicker/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VTimePicker/index.ts ***!
   \*********************************************/
-/*! exports provided: VDatePicker, VDatePickerTitle, VDatePickerHeader, VDatePickerDateTable, VDatePickerMonthTable, VDatePickerYears, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDatePicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDatePicker */ "./src/components/VDatePicker/VDatePicker.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePicker", function() { return _VDatePicker__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VDatePickerTitle */ "./src/components/VDatePicker/VDatePickerTitle.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerTitle", function() { return _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+          /*! exports provided: VTimePicker, VTimePickerClock, VTimePickerTitle, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTimePicker__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTimePicker */ "./src/components/VTimePicker/VTimePicker.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimePicker",
+              function () {
+                return _VTimePicker__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VTimePickerClock */ "./src/components/VTimePicker/VTimePickerClock.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimePickerClock",
+              function () {
+                return _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VTimePickerTitle */ "./src/components/VTimePicker/VTimePickerTitle.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimePickerTitle",
+              function () {
+                return _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_2__[
+                  "default"
+                ];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VTimePicker:
+                  _VTimePicker__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VTimePickerClock:
+                  _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__["default"],
+                VTimePickerTitle:
+                  _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_2__["default"],
+              },
+            };
 
-/* harmony import */ var _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VDatePickerHeader */ "./src/components/VDatePicker/VDatePickerHeader.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerHeader", function() { return _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_2__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VDatePickerDateTable */ "./src/components/VDatePicker/VDatePickerDateTable.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerDateTable", function() { return _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_3__["default"]; });
+        /***/ "./src/components/VTimeline/VTimeline.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VTimeline/VTimeline.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-/* harmony import */ var _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VDatePickerMonthTable */ "./src/components/VDatePicker/VDatePickerMonthTable.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerMonthTable", function() { return _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_4__["default"]; });
+        /***/ "./src/components/VTimeline/VTimeline.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VTimeline/VTimeline.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTimeline_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTimeline.sass */ "./src/components/VTimeline/VTimeline.sass"
+              );
+            /* harmony import */ var _VTimeline_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTimeline_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Mixins
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-timeline",
+                provide: function provide() {
+                  return {
+                    timeline: this,
+                  };
+                },
+                props: {
+                  alignTop: Boolean,
+                  dense: Boolean,
+                  reverse: Boolean,
+                },
+                computed: {
+                  classes: function classes() {
+                    return __assign(
+                      {
+                        "v-timeline--align-top": this.alignTop,
+                        "v-timeline--dense": this.dense,
+                        "v-timeline--reverse": this.reverse,
+                      },
+                      this.themeClasses
+                    );
+                  },
+                },
+                render: function render(h) {
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-timeline",
+                      class: this.classes,
+                    },
+                    this.$slots.default
+                  );
+                },
+              });
 
-/* harmony import */ var _VDatePickerYears__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VDatePickerYears */ "./src/components/VDatePicker/VDatePickerYears.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerYears", function() { return _VDatePickerYears__WEBPACK_IMPORTED_MODULE_5__["default"]; });
+            /***/
+          },
 
+        /***/ "./src/components/VTimeline/VTimelineItem.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VTimeline/VTimelineItem.ts ***!
+  \***************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Types
+
+            // Mixins
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"]
+            )(
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"],
+              _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              /* @vue/component */
+            );
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "v-timeline-item",
+                inject: ["timeline"],
+                props: {
+                  color: {
+                    type: String,
+                    default: "primary",
+                  },
+                  fillDot: Boolean,
+                  hideDot: Boolean,
+                  icon: String,
+                  iconColor: String,
+                  large: Boolean,
+                  left: Boolean,
+                  right: Boolean,
+                  small: Boolean,
+                },
+                computed: {
+                  hasIcon: function hasIcon() {
+                    return !!this.icon || !!this.$slots.icon;
+                  },
+                },
+                methods: {
+                  genBody: function genBody() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-timeline-item__body",
+                      },
+                      this.$slots.default
+                    );
+                  },
+                  genIcon: function genIcon() {
+                    if (this.$slots.icon) {
+                      return this.$slots.icon;
+                    }
+
+                    return this.$createElement(
+                      _VIcon__WEBPACK_IMPORTED_MODULE_1__["default"],
+                      {
+                        props: {
+                          color: this.iconColor,
+                          dark: !this.theme.isDark,
+                          small: this.small,
+                        },
+                      },
+                      this.icon
+                    );
+                  },
+                  genInnerDot: function genInnerDot() {
+                    var data = this.setBackgroundColor(this.color);
+                    return this.$createElement(
+                      "div",
+                      __assign(
+                        {
+                          staticClass: "v-timeline-item__inner-dot",
+                        },
+                        data
+                      ),
+                      [this.hasIcon && this.genIcon()]
+                    );
+                  },
+                  genDot: function genDot() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-timeline-item__dot",
+                        class: {
+                          "v-timeline-item__dot--small": this.small,
+                          "v-timeline-item__dot--large": this.large,
+                        },
+                      },
+                      [this.genInnerDot()]
+                    );
+                  },
+                  genDivider: function genDivider() {
+                    var children = [];
+                    if (!this.hideDot) children.push(this.genDot());
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-timeline-item__divider",
+                      },
+                      children
+                    );
+                  },
+                  genOpposite: function genOpposite() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-timeline-item__opposite",
+                      },
+                      this.$slots.opposite
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var children = [this.genBody(), this.genDivider()];
+                  if (this.$slots.opposite) children.push(this.genOpposite());
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-timeline-item",
+                      class: __assign(
+                        {
+                          "v-timeline-item--fill-dot": this.fillDot,
+                          "v-timeline-item--before": this.timeline.reverse
+                            ? this.right
+                            : this.left,
+                          "v-timeline-item--after": this.timeline.reverse
+                            ? this.left
+                            : this.right,
+                        },
+                        this.themeClasses
+                      ),
+                    },
+                    children
+                  );
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VTimeline/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VTimeline/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VTimeline, VTimelineItem, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTimeline__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTimeline */ "./src/components/VTimeline/VTimeline.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimeline",
+              function () {
+                return _VTimeline__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VTimelineItem__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VTimelineItem */ "./src/components/VTimeline/VTimelineItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimelineItem",
+              function () {
+                return _VTimelineItem__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VTimeline: _VTimeline__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VTimelineItem:
+                  _VTimelineItem__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/components/VToolbar/VToolbar.sass":
+          /*!***********************************************!*\
+  !*** ./src/components/VToolbar/VToolbar.sass ***!
+  \***********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VToolbar/VToolbar.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VToolbar/VToolbar.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VToolbar_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VToolbar.sass */ "./src/components/VToolbar/VToolbar.sass"
+              );
+            /* harmony import */ var _VToolbar_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VToolbar_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts"
+              );
+            /* harmony import */ var _VImg_VImg__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VImg/VImg */ "./src/components/VImg/VImg.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VDatePicker: _VDatePicker__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VDatePickerTitle: _VDatePickerTitle__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VDatePickerHeader: _VDatePickerHeader__WEBPACK_IMPORTED_MODULE_2__["default"],
-    VDatePickerDateTable: _VDatePickerDateTable__WEBPACK_IMPORTED_MODULE_3__["default"],
-    VDatePickerMonthTable: _VDatePickerMonthTable__WEBPACK_IMPORTED_MODULE_4__["default"],
-    VDatePickerYears: _VDatePickerYears__WEBPACK_IMPORTED_MODULE_5__["default"]
-  }
-});
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ }),
-
-/***/ "./src/components/VDatePicker/mixins/date-picker-table.ts":
-/*!****************************************************************!*\
-  !*** ./src/components/VDatePicker/mixins/date-picker-table.ts ***!
-  \****************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDatePickerTable_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VDatePickerTable.sass */ "./src/components/VDatePicker/VDatePickerTable.sass");
-/* harmony import */ var _VDatePickerTable_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDatePickerTable_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../directives/touch */ "./src/directives/touch/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_localable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../mixins/localable */ "./src/mixins/localable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util */ "./src/components/VDatePicker/util/index.ts");
-/* harmony import */ var _util_isDateAllowed__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../util/isDateAllowed */ "./src/components/VDatePicker/util/isDateAllowed.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-};
-
- // Directives
-
- // Mixins
-
-
-
- // Utils
-
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_localable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"]
-/* @vue/component */
-).extend({
-  directives: {
-    Touch: _directives_touch__WEBPACK_IMPORTED_MODULE_1__["default"]
-  },
-  props: {
-    allowedDates: Function,
-    current: String,
-    disabled: Boolean,
-    format: Function,
-    events: {
-      type: [Array, Function, Object],
-      default: function _default() {
-        return null;
-      }
-    },
-    eventColor: {
-      type: [Array, Function, Object, String],
-      default: function _default() {
-        return 'warning';
-      }
-    },
-    min: String,
-    max: String,
-    range: Boolean,
-    readonly: Boolean,
-    scrollable: Boolean,
-    tableDate: {
-      type: String,
-      required: true
-    },
-    value: [String, Array]
-  },
-  data: function data() {
-    return {
-      isReversing: false,
-      wheelThrottle: null
-    };
-  },
-  computed: {
-    computedTransition: function computedTransition() {
-      return this.isReversing === !this.$vuetify.rtl ? 'tab-reverse-transition' : 'tab-transition';
-    },
-    displayedMonth: function displayedMonth() {
-      return Number(this.tableDate.split('-')[1]) - 1;
-    },
-    displayedYear: function displayedYear() {
-      return Number(this.tableDate.split('-')[0]);
-    }
-  },
-  watch: {
-    tableDate: function tableDate(newVal, oldVal) {
-      this.isReversing = newVal < oldVal;
-    }
-  },
-  mounted: function mounted() {
-    this.wheelThrottle = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_9__["throttle"])(this.wheel, 250);
-  },
-  methods: {
-    genButtonClasses: function genButtonClasses(isAllowed, isFloating, isSelected, isCurrent) {
-      return __assign({
-        'v-size--default': !isFloating,
-        'v-date-picker-table__current': isCurrent,
-        'v-btn--active': isSelected,
-        'v-btn--flat': !isAllowed || this.disabled,
-        'v-btn--text': isSelected === isCurrent,
-        'v-btn--rounded': isFloating,
-        'v-btn--disabled': !isAllowed || this.disabled,
-        'v-btn--outlined': isCurrent && !isSelected
-      }, this.themeClasses);
-    },
-    genButtonEvents: function genButtonEvents(value, isAllowed, mouseEventType) {
-      var _this = this;
-
-      if (this.disabled) return undefined;
-      return Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_7__["mergeListeners"])({
-        click: function click() {
-          if (isAllowed && !_this.readonly) _this.$emit('input', value);
-        }
-      }, Object(_util__WEBPACK_IMPORTED_MODULE_5__["createItemTypeNativeListeners"])(this, ":" + mouseEventType, value));
-    },
-    genButton: function genButton(value, isFloating, mouseEventType, formatter) {
-      var isAllowed = Object(_util_isDateAllowed__WEBPACK_IMPORTED_MODULE_6__["default"])(value, this.min, this.max, this.allowedDates);
-      var isSelected = this.isSelected(value) && isAllowed;
-      var isCurrent = value === this.current;
-      var setColor = isSelected ? this.setBackgroundColor : this.setTextColor;
-      var color = (isSelected || isCurrent) && (this.color || 'accent');
-      return this.$createElement('button', setColor(color, {
-        staticClass: 'v-btn',
-        class: this.genButtonClasses(isAllowed, isFloating, isSelected, isCurrent),
-        attrs: {
-          type: 'button'
-        },
-        domProps: {
-          disabled: this.disabled || !isAllowed
-        },
-        on: this.genButtonEvents(value, isAllowed, mouseEventType)
-      }), [this.$createElement('div', {
-        staticClass: 'v-btn__content'
-      }, [formatter(value)]), this.genEvents(value)]);
-    },
-    getEventColors: function getEventColors(date) {
-      var arrayize = function arrayize(v) {
-        return Array.isArray(v) ? v : [v];
-      };
-
-      var eventData;
-      var eventColors = [];
-
-      if (Array.isArray(this.events)) {
-        eventData = this.events.includes(date);
-      } else if (this.events instanceof Function) {
-        eventData = this.events(date) || false;
-      } else if (this.events) {
-        eventData = this.events[date] || false;
-      } else {
-        eventData = false;
-      }
-
-      if (!eventData) {
-        return [];
-      } else if (eventData !== true) {
-        eventColors = arrayize(eventData);
-      } else if (typeof this.eventColor === 'string') {
-        eventColors = [this.eventColor];
-      } else if (typeof this.eventColor === 'function') {
-        eventColors = arrayize(this.eventColor(date));
-      } else if (Array.isArray(this.eventColor)) {
-        eventColors = this.eventColor;
-      } else {
-        eventColors = arrayize(this.eventColor[date]);
-      }
-
-      return eventColors.filter(function (v) {
-        return v;
-      });
-    },
-    genEvents: function genEvents(date) {
-      var _this = this;
-
-      var eventColors = this.getEventColors(date);
-      return eventColors.length ? this.$createElement('div', {
-        staticClass: 'v-date-picker-table__events'
-      }, eventColors.map(function (color) {
-        return _this.$createElement('div', _this.setBackgroundColor(color));
-      })) : null;
-    },
-    wheel: function wheel(e, calculateTableDate) {
-      this.$emit('update:table-date', calculateTableDate(e.deltaY));
-    },
-    touch: function touch(value, calculateTableDate) {
-      this.$emit('update:table-date', calculateTableDate(value));
-    },
-    genTable: function genTable(staticClass, children, calculateTableDate) {
-      var _this = this;
-
-      var transition = this.$createElement('transition', {
-        props: {
-          name: this.computedTransition
-        }
-      }, [this.$createElement('table', {
-        key: this.tableDate
-      }, children)]);
-      var touchDirective = {
-        name: 'touch',
-        value: {
-          left: function left(e) {
-            return e.offsetX < -15 && _this.touch(1, calculateTableDate);
-          },
-          right: function right(e) {
-            return e.offsetX > 15 && _this.touch(-1, calculateTableDate);
-          }
-        }
-      };
-      return this.$createElement('div', {
-        staticClass: staticClass,
-        class: __assign({
-          'v-date-picker-table--disabled': this.disabled
-        }, this.themeClasses),
-        on: !this.disabled && this.scrollable ? {
-          wheel: function wheel(e) {
-            e.preventDefault();
-
-            _this.wheelThrottle(e, calculateTableDate);
-          }
-        } : undefined,
-        directives: [touchDirective]
-      }, [transition]);
-    },
-    isSelected: function isSelected(value) {
-      if (Array.isArray(this.value)) {
-        if (this.range && this.value.length === 2) {
-          var _a = __read(__spread(this.value).sort(), 2),
-              from = _a[0],
-              to = _a[1];
-
-          return from <= value && value <= to;
-        } else {
-          return this.value.indexOf(value) !== -1;
-        }
-      }
-
-      return value === this.value;
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VDatePicker/util/createNativeLocaleFormatter.ts":
-/*!************************************************************************!*\
-  !*** ./src/components/VDatePicker/util/createNativeLocaleFormatter.ts ***!
-  \************************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pad */ "./src/components/VDatePicker/util/pad.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-
-
-function createNativeLocaleFormatter(locale, options, substrOptions) {
-  if (substrOptions === void 0) {
-    substrOptions = {
-      start: 0,
-      length: 0
-    };
-  }
-
-  var makeIsoString = function makeIsoString(dateString) {
-    var _a = __read(dateString.trim().split(' ')[0].split('-'), 3),
-        year = _a[0],
-        month = _a[1],
-        date = _a[2];
-
-    return [Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(year, 4), Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(month || 1), Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(date || 1)].join('-');
-  };
-
-  try {
-    var intlFormatter_1 = new Intl.DateTimeFormat(locale || undefined, options);
-    return function (dateString) {
-      return intlFormatter_1.format(new Date(makeIsoString(dateString) + "T00:00:00+00:00"));
-    };
-  } catch (e) {
-    return substrOptions.start || substrOptions.length ? function (dateString) {
-      return makeIsoString(dateString).substr(substrOptions.start || 0, substrOptions.length);
-    } : undefined;
-  }
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (createNativeLocaleFormatter);
-
-/***/ }),
-
-/***/ "./src/components/VDatePicker/util/eventHelpers.ts":
-/*!*********************************************************!*\
-  !*** ./src/components/VDatePicker/util/eventHelpers.ts ***!
-  \*********************************************************/
-/*! exports provided: createItemTypeNativeListeners, createItemTypeListeners */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createItemTypeNativeListeners", function() { return createItemTypeNativeListeners; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createItemTypeListeners", function() { return createItemTypeListeners; });
-function createItemTypeNativeListeners(instance, itemTypeSuffix, value) {
-  return Object.keys(instance.$listeners).reduce(function (on, eventName) {
-    if (eventName.endsWith(itemTypeSuffix)) {
-      on[eventName.slice(0, -itemTypeSuffix.length)] = function (event) {
-        return instance.$emit(eventName, value, event);
-      };
-    }
-
-    return on;
-  }, {});
-}
-function createItemTypeListeners(instance, itemTypeSuffix) {
-  return Object.keys(instance.$listeners).reduce(function (on, eventName) {
-    if (eventName.endsWith(itemTypeSuffix)) {
-      on[eventName] = instance.$listeners[eventName];
-    }
-
-    return on;
-  }, {});
-}
-
-/***/ }),
-
-/***/ "./src/components/VDatePicker/util/index.ts":
-/*!**************************************************!*\
-  !*** ./src/components/VDatePicker/util/index.ts ***!
-  \**************************************************/
-/*! exports provided: createItemTypeListeners, createItemTypeNativeListeners, createNativeLocaleFormatter, monthChange, pad */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _eventHelpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./eventHelpers */ "./src/components/VDatePicker/util/eventHelpers.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createItemTypeListeners", function() { return _eventHelpers__WEBPACK_IMPORTED_MODULE_0__["createItemTypeListeners"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createItemTypeNativeListeners", function() { return _eventHelpers__WEBPACK_IMPORTED_MODULE_0__["createItemTypeNativeListeners"]; });
-
-/* harmony import */ var _createNativeLocaleFormatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createNativeLocaleFormatter */ "./src/components/VDatePicker/util/createNativeLocaleFormatter.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "createNativeLocaleFormatter", function() { return _createNativeLocaleFormatter__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _monthChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./monthChange */ "./src/components/VDatePicker/util/monthChange.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "monthChange", function() { return _monthChange__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-/* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pad */ "./src/components/VDatePicker/util/pad.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pad", function() { return _pad__WEBPACK_IMPORTED_MODULE_3__["default"]; });
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ "./src/components/VDatePicker/util/isDateAllowed.ts":
-/*!**********************************************************!*\
-  !*** ./src/components/VDatePicker/util/isDateAllowed.ts ***!
-  \**********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return isDateAllowed; });
-function isDateAllowed(date, min, max, allowedFn) {
-  return (!allowedFn || allowedFn(date)) && (!min || date >= min.substr(0, 10)) && (!max || date <= max);
-}
-
-/***/ }),
-
-/***/ "./src/components/VDatePicker/util/monthChange.ts":
-/*!********************************************************!*\
-  !*** ./src/components/VDatePicker/util/monthChange.ts ***!
-  \********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _pad__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pad */ "./src/components/VDatePicker/util/pad.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-
-/**
- * @param {String} value YYYY-MM format
- * @param {Number} sign -1 or +1
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (function (value, sign) {
-  var _a = __read(value.split('-').map(Number), 2),
-      year = _a[0],
-      month = _a[1];
-
-  if (month + sign === 0) {
-    return year - 1 + "-12";
-  } else if (month + sign === 13) {
-    return year + 1 + "-01";
-  } else {
-    return year + "-" + Object(_pad__WEBPACK_IMPORTED_MODULE_0__["default"])(month + sign);
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VDatePicker/util/pad.ts":
-/*!************************************************!*\
-  !*** ./src/components/VDatePicker/util/pad.ts ***!
-  \************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var padStart = function padStart(string, targetLength, padString) {
-  targetLength = targetLength >> 0;
-  string = String(string);
-  padString = String(padString);
-
-  if (string.length > targetLength) {
-    return String(string);
-  }
-
-  targetLength = targetLength - string.length;
-
-  if (targetLength > padString.length) {
-    padString += padString.repeat(targetLength / padString.length);
-  }
-
-  return padString.slice(0, targetLength) + String(string);
-};
-
-/* harmony default export */ __webpack_exports__["default"] = (function (n, length) {
-  if (length === void 0) {
-    length = 2;
-  }
-
-  return padStart(n, length, '0');
-});
-
-/***/ }),
-
-/***/ "./src/components/VDialog/VDialog.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VDialog/VDialog.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VDialog/VDialog.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VDialog/VDialog.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDialog_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDialog.sass */ "./src/components/VDialog/VDialog.sass");
-/* harmony import */ var _VDialog_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDialog_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VThemeProvider */ "./src/components/VThemeProvider/index.ts");
-/* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/activatable */ "./src/mixins/activatable/index.ts");
-/* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts");
-/* harmony import */ var _mixins_detachable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/detachable */ "./src/mixins/detachable/index.ts");
-/* harmony import */ var _mixins_overlayable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/overlayable */ "./src/mixins/overlayable/index.ts");
-/* harmony import */ var _mixins_returnable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/returnable */ "./src/mixins/returnable/index.ts");
-/* harmony import */ var _mixins_stackable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/stackable */ "./src/mixins/stackable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Styles
-
-
- // Components
-
- // Mixins
-
-
-
-
-
-
-
- // Directives
-
- // Helpers
-
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_10__["default"])(_mixins_activatable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_dependent__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_detachable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_overlayable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_returnable__WEBPACK_IMPORTED_MODULE_6__["default"], _mixins_stackable__WEBPACK_IMPORTED_MODULE_7__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_8__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-dialog',
-  directives: {
-    ClickOutside: _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__["default"]
-  },
-  props: {
-    dark: Boolean,
-    disabled: Boolean,
-    fullscreen: Boolean,
-    light: Boolean,
-    maxWidth: {
-      type: [String, Number],
-      default: 'none'
-    },
-    noClickAnimation: Boolean,
-    origin: {
-      type: String,
-      default: 'center center'
-    },
-    persistent: Boolean,
-    retainFocus: {
-      type: Boolean,
-      default: true
-    },
-    scrollable: Boolean,
-    transition: {
-      type: [String, Boolean],
-      default: 'dialog-transition'
-    },
-    width: {
-      type: [String, Number],
-      default: 'auto'
-    }
-  },
-  data: function data() {
-    return {
-      activatedBy: null,
-      animate: false,
-      animateTimeout: -1,
-      isActive: !!this.value,
-      stackMinZIndex: 200,
-      previousActiveElement: null
-    };
-  },
-  computed: {
-    classes: function classes() {
-      var _a;
-
-      return _a = {}, _a[("v-dialog " + this.contentClass).trim()] = true, _a['v-dialog--active'] = this.isActive, _a['v-dialog--persistent'] = this.persistent, _a['v-dialog--fullscreen'] = this.fullscreen, _a['v-dialog--scrollable'] = this.scrollable, _a['v-dialog--animated'] = this.animate, _a;
-    },
-    contentClasses: function contentClasses() {
-      return {
-        'v-dialog__content': true,
-        'v-dialog__content--active': this.isActive
-      };
-    },
-    hasActivator: function hasActivator() {
-      return Boolean(!!this.$slots.activator || !!this.$scopedSlots.activator);
-    }
-  },
-  watch: {
-    isActive: function isActive(val) {
-      var _a;
-
-      if (val) {
-        this.show();
-        this.hideScroll();
-      } else {
-        this.removeOverlay();
-        this.unbind();
-        (_a = this.previousActiveElement) === null || _a === void 0 ? void 0 : _a.focus();
-      }
-    },
-    fullscreen: function fullscreen(val) {
-      if (!this.isActive) return;
-
-      if (val) {
-        this.hideScroll();
-        this.removeOverlay(false);
-      } else {
-        this.showScroll();
-        this.genOverlay();
-      }
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('full-width')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_11__["removed"])('full-width', this);
-    }
-  },
-  beforeMount: function beforeMount() {
-    var _this = this;
-
-    this.$nextTick(function () {
-      _this.isBooted = _this.isActive;
-      _this.isActive && _this.show();
-    });
-  },
-  beforeDestroy: function beforeDestroy() {
-    if (typeof window !== 'undefined') this.unbind();
-  },
-  methods: {
-    animateClick: function animateClick() {
-      var _this = this;
-
-      this.animate = false; // Needed for when clicking very fast
-      // outside of the dialog
-
-      this.$nextTick(function () {
-        _this.animate = true;
-        window.clearTimeout(_this.animateTimeout);
-        _this.animateTimeout = window.setTimeout(function () {
-          return _this.animate = false;
-        }, 150);
-      });
-    },
-    closeConditional: function closeConditional(e) {
-      var target = e.target; // Ignore the click if the dialog is closed or destroyed,
-      // if it was on an element inside the content,
-      // if it was dragged onto the overlay (#6969),
-      // or if this isn't the topmost dialog (#9907)
-
-      return !(this._isDestroyed || !this.isActive || this.$refs.content.contains(target) || this.overlay && target && !this.overlay.$el.contains(target)) && this.activeZIndex >= this.getMaxZIndex();
-    },
-    hideScroll: function hideScroll() {
-      if (this.fullscreen) {
-        document.documentElement.classList.add('overflow-y-hidden');
-      } else {
-        _mixins_overlayable__WEBPACK_IMPORTED_MODULE_5__["default"].options.methods.hideScroll.call(this);
-      }
-    },
-    show: function show() {
-      var _this = this;
-
-      !this.fullscreen && !this.hideOverlay && this.genOverlay(); // Double nextTick to wait for lazy content to be generated
-
-      this.$nextTick(function () {
-        _this.$nextTick(function () {
-          _this.previousActiveElement = document.activeElement;
-
-          _this.$refs.content.focus();
-
-          _this.bind();
-        });
-      });
-    },
-    bind: function bind() {
-      window.addEventListener('focusin', this.onFocusin);
-    },
-    unbind: function unbind() {
-      window.removeEventListener('focusin', this.onFocusin);
-    },
-    onClickOutside: function onClickOutside(e) {
-      this.$emit('click:outside', e);
-
-      if (this.persistent) {
-        this.noClickAnimation || this.animateClick();
-      } else {
-        this.isActive = false;
-      }
-    },
-    onKeydown: function onKeydown(e) {
-      if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].esc && !this.getOpenDependents().length) {
-        if (!this.persistent) {
-          this.isActive = false;
-          var activator_1 = this.getActivator();
-          this.$nextTick(function () {
-            return activator_1 && activator_1.focus();
-          });
-        } else if (!this.noClickAnimation) {
-          this.animateClick();
-        }
-      }
-
-      this.$emit('keydown', e);
-    },
-    // On focus change, wrap focus to stay inside the dialog
-    // https://github.com/vuetifyjs/vuetify/issues/6892
-    onFocusin: function onFocusin(e) {
-      if (!e || !this.retainFocus) return;
-      var target = e.target;
-
-      if (!!target && // It isn't the document or the dialog body
-      ![document, this.$refs.content].includes(target) && // It isn't inside the dialog body
-      !this.$refs.content.contains(target) && // We're the topmost dialog
-      this.activeZIndex >= this.getMaxZIndex() && // It isn't inside a dependent element (like a menu)
-      !this.getOpenDependentElements().some(function (el) {
-        return el.contains(target);
-      }) // So we must have focused something outside the dialog and its children
-      ) {
-          // Find and focus the first available element inside the dialog
-          var focusable = this.$refs.content.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
-
-          var el = __spread(focusable).find(function (el) {
-            return !el.hasAttribute('disabled');
-          });
-
-          el && el.focus();
-        }
-    },
-    genContent: function genContent() {
-      var _this = this;
-
-      return this.showLazyContent(function () {
-        return [_this.$createElement(_VThemeProvider__WEBPACK_IMPORTED_MODULE_1__["VThemeProvider"], {
-          props: {
-            root: true,
-            light: _this.light,
-            dark: _this.dark
-          }
-        }, [_this.$createElement('div', {
-          class: _this.contentClasses,
-          attrs: __assign({
-            role: 'document',
-            tabindex: _this.isActive ? 0 : undefined
-          }, _this.getScopeIdAttrs()),
-          on: {
-            keydown: _this.onKeydown
-          },
-          style: {
-            zIndex: _this.activeZIndex
-          },
-          ref: 'content'
-        }, [_this.genTransition()])])];
-      });
-    },
-    genTransition: function genTransition() {
-      var content = this.genInnerContent();
-      if (!this.transition) return content;
-      return this.$createElement('transition', {
-        props: {
-          name: this.transition,
-          origin: this.origin,
-          appear: true
-        }
-      }, [content]);
-    },
-    genInnerContent: function genInnerContent() {
-      var data = {
-        class: this.classes,
-        ref: 'dialog',
-        directives: [{
-          name: 'click-outside',
-          value: {
-            handler: this.onClickOutside,
-            closeConditional: this.closeConditional,
-            include: this.getOpenDependentElements
-          }
-        }, {
-          name: 'show',
-          value: this.isActive
-        }],
-        style: {
-          transformOrigin: this.origin
-        }
-      };
-
-      if (!this.fullscreen) {
-        data.style = __assign(__assign({}, data.style), {
-          maxWidth: this.maxWidth === 'none' ? undefined : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["convertToUnit"])(this.maxWidth),
-          width: this.width === 'auto' ? undefined : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["convertToUnit"])(this.width)
-        });
-      }
-
-      return this.$createElement('div', data, this.getContentSlot());
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-dialog__container',
-      class: {
-        'v-dialog__container--attached': this.attach === '' || this.attach === true || this.attach === 'attach'
-      },
-      attrs: {
-        role: 'dialog'
-      }
-    }, [this.genActivator(), this.genContent()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VDialog/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VDialog/index.ts ***!
-  \*****************************************/
-/*! exports provided: VDialog, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDialog */ "./src/components/VDialog/VDialog.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDialog", function() { return _VDialog__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VDialog__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VDivider/VDivider.sass":
-/*!***********************************************!*\
-  !*** ./src/components/VDivider/VDivider.sass ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VDivider/VDivider.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VDivider/VDivider.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDivider_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDivider.sass */ "./src/components/VDivider/VDivider.sass");
-/* harmony import */ var _VDivider_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VDivider_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-divider',
-  props: {
-    inset: Boolean,
-    vertical: Boolean
-  },
-  render: function render(h) {
-    // WAI-ARIA attributes
-    var orientation;
-
-    if (!this.$attrs.role || this.$attrs.role === 'separator') {
-      orientation = this.vertical ? 'vertical' : 'horizontal';
-    }
-
-    return h('hr', {
-      class: __assign({
-        'v-divider': true,
-        'v-divider--inset': this.inset,
-        'v-divider--vertical': this.vertical
-      }, this.themeClasses),
-      attrs: __assign({
-        role: 'separator',
-        'aria-orientation': orientation
-      }, this.$attrs),
-      on: this.$listeners
-    });
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VDivider/index.ts":
-/*!******************************************!*\
-  !*** ./src/components/VDivider/index.ts ***!
-  \******************************************/
-/*! exports provided: VDivider, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VDivider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VDivider */ "./src/components/VDivider/VDivider.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDivider", function() { return _VDivider__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VDivider__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VExpansionPanel/VExpansionPanel.sass":
-/*!*************************************************************!*\
-  !*** ./src/components/VExpansionPanel/VExpansionPanel.sass ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VExpansionPanel/VExpansionPanel.ts":
-/*!***********************************************************!*\
-  !*** ./src/components/VExpansionPanel/VExpansionPanel.ts ***!
-  \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Mixins
-
-
-
- // Utilities
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_0__["factory"])('expansionPanels', 'v-expansion-panel', 'v-expansion-panels'), Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_1__["provide"])('expansionPanel', true)
-/* @vue/component */
-).extend({
-  name: 'v-expansion-panel',
-  props: {
-    disabled: Boolean,
-    readonly: Boolean
-  },
-  data: function data() {
-    return {
-      content: null,
-      header: null,
-      nextIsActive: false
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-expansion-panel--active': this.isActive,
-        'v-expansion-panel--next-active': this.nextIsActive,
-        'v-expansion-panel--disabled': this.isDisabled
-      }, this.groupClasses);
-    },
-    isDisabled: function isDisabled() {
-      return this.expansionPanels.disabled || this.disabled;
-    },
-    isReadonly: function isReadonly() {
-      return this.expansionPanels.readonly || this.readonly;
-    }
-  },
-  methods: {
-    registerContent: function registerContent(vm) {
-      this.content = vm;
-    },
-    unregisterContent: function unregisterContent() {
-      this.content = null;
-    },
-    registerHeader: function registerHeader(vm) {
-      this.header = vm;
-      vm.$on('click', this.onClick);
-    },
-    unregisterHeader: function unregisterHeader() {
-      this.header = null;
-    },
-    onClick: function onClick(e) {
-      if (e.detail) this.header.$el.blur();
-      this.$emit('click', e);
-      this.isReadonly || this.isDisabled || this.toggle();
-    },
-    toggle: function toggle() {
-      var _this = this;
-      /* istanbul ignore else */
-
-
-      if (this.content) this.content.isBooted = true;
-      this.$nextTick(function () {
-        return _this.$emit('change');
-      });
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-expansion-panel',
-      class: this.classes,
-      attrs: {
-        'aria-expanded': String(this.isActive)
-      }
-    }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["getSlot"])(this));
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VExpansionPanel/VExpansionPanelContent.ts":
-/*!******************************************************************!*\
-  !*** ./src/components/VExpansionPanel/VExpansionPanelContent.ts ***!
-  \******************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _mixins_bootable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/bootable */ "./src/mixins/bootable/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
- // Mixins
-
-
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(_mixins_bootable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_3__["inject"])('expansionPanel', 'v-expansion-panel-content', 'v-expansion-panel'));
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-expansion-panel-content',
-  computed: {
-    isActive: function isActive() {
-      return this.expansionPanel.isActive;
-    }
-  },
-  created: function created() {
-    this.expansionPanel.registerContent(this);
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.expansionPanel.unregisterContent();
-  },
-  render: function render(h) {
-    var _this = this;
-
-    return h(_transitions__WEBPACK_IMPORTED_MODULE_0__["VExpandTransition"], this.showLazyContent(function () {
-      return [h('div', _this.setBackgroundColor(_this.color, {
-        staticClass: 'v-expansion-panel-content',
-        directives: [{
-          name: 'show',
-          value: _this.isActive
-        }]
-      }), [h('div', {
-        class: 'v-expansion-panel-content__wrap'
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(_this))])];
-    }));
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VExpansionPanel/VExpansionPanelHeader.ts":
-/*!*****************************************************************!*\
-  !*** ./src/components/VExpansionPanel/VExpansionPanelHeader.ts ***!
-  \*****************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Components
-
-
-
- // Mixins
-
-
- // Directives
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_3__["inject"])('expansionPanel', 'v-expansion-panel-header', 'v-expansion-panel'));
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-expansion-panel-header',
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_4__["default"]
-  },
-  props: {
-    disableIconRotate: Boolean,
-    expandIcon: {
-      type: String,
-      default: '$expand'
-    },
-    hideActions: Boolean,
-    ripple: {
-      type: [Boolean, Object],
-      default: false
-    }
-  },
-  data: function data() {
-    return {
-      hasMousedown: false
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return {
-        'v-expansion-panel-header--active': this.isActive,
-        'v-expansion-panel-header--mousedown': this.hasMousedown
-      };
-    },
-    isActive: function isActive() {
-      return this.expansionPanel.isActive;
-    },
-    isDisabled: function isDisabled() {
-      return this.expansionPanel.isDisabled;
-    },
-    isReadonly: function isReadonly() {
-      return this.expansionPanel.isReadonly;
-    }
-  },
-  created: function created() {
-    this.expansionPanel.registerHeader(this);
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.expansionPanel.unregisterHeader();
-  },
-  methods: {
-    onClick: function onClick(e) {
-      this.$emit('click', e);
-    },
-    genIcon: function genIcon() {
-      var icon = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"])(this, 'actions') || [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], this.expandIcon)];
-      return this.$createElement(_transitions__WEBPACK_IMPORTED_MODULE_0__["VFadeTransition"], [this.$createElement('div', {
-        staticClass: 'v-expansion-panel-header__icon',
-        class: {
-          'v-expansion-panel-header__icon--disable-rotate': this.disableIconRotate
-        },
-        directives: [{
-          name: 'show',
-          value: !this.isDisabled
-        }]
-      }, icon)]);
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    return h('button', this.setBackgroundColor(this.color, {
-      staticClass: 'v-expansion-panel-header',
-      class: this.classes,
-      attrs: {
-        tabindex: this.isDisabled ? -1 : null,
-        type: 'button'
-      },
-      directives: [{
-        name: 'ripple',
-        value: this.ripple
-      }],
-      on: __assign(__assign({}, this.$listeners), {
-        click: this.onClick,
-        mousedown: function mousedown() {
-          return _this.hasMousedown = true;
-        },
-        mouseup: function mouseup() {
-          return _this.hasMousedown = false;
-        }
-      })
-    }), [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"])(this, 'default', {
-      open: this.isActive
-    }, true), this.hideActions || this.genIcon()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VExpansionPanel/VExpansionPanels.ts":
-/*!************************************************************!*\
-  !*** ./src/components/VExpansionPanel/VExpansionPanels.ts ***!
-  \************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VExpansionPanel_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VExpansionPanel.sass */ "./src/components/VExpansionPanel/VExpansionPanel.sass");
-/* harmony import */ var _VExpansionPanel_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VExpansionPanel_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__["BaseItemGroup"].extend({
-  name: 'v-expansion-panels',
-  provide: function provide() {
-    return {
-      expansionPanels: this
-    };
-  },
-  props: {
-    accordion: Boolean,
-    disabled: Boolean,
-    flat: Boolean,
-    hover: Boolean,
-    focusable: Boolean,
-    inset: Boolean,
-    popout: Boolean,
-    readonly: Boolean,
-    tile: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__["BaseItemGroup"].options.computed.classes.call(this)), {
-        'v-expansion-panels': true,
-        'v-expansion-panels--accordion': this.accordion,
-        'v-expansion-panels--flat': this.flat,
-        'v-expansion-panels--hover': this.hover,
-        'v-expansion-panels--focusable': this.focusable,
-        'v-expansion-panels--inset': this.inset,
-        'v-expansion-panels--popout': this.popout,
-        'v-expansion-panels--tile': this.tile
-      });
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('expand')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_2__["breaking"])('expand', 'multiple', this);
-    }
-    /* istanbul ignore next */
-
-
-    if (Array.isArray(this.value) && this.value.length > 0 && typeof this.value[0] === 'boolean') {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_2__["breaking"])(':value="[true, false, true]"', ':value="[0, 2]"', this);
-    }
-  },
-  methods: {
-    updateItem: function updateItem(item, index) {
-      var value = this.getValue(item, index);
-      var nextValue = this.getValue(item, index + 1);
-      item.isActive = this.toggleMethod(value);
-      item.nextIsActive = this.toggleMethod(nextValue);
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VExpansionPanel/index.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VExpansionPanel/index.ts ***!
-  \*************************************************/
-/*! exports provided: VExpansionPanels, VExpansionPanel, VExpansionPanelHeader, VExpansionPanelContent, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VExpansionPanels__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VExpansionPanels */ "./src/components/VExpansionPanel/VExpansionPanels.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanels", function() { return _VExpansionPanels__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VExpansionPanel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VExpansionPanel */ "./src/components/VExpansionPanel/VExpansionPanel.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanel", function() { return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _VExpansionPanelContent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VExpansionPanelContent */ "./src/components/VExpansionPanel/VExpansionPanelContent.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanelContent", function() { return _VExpansionPanelContent__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-/* harmony import */ var _VExpansionPanelHeader__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VExpansionPanelHeader */ "./src/components/VExpansionPanel/VExpansionPanelHeader.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanelHeader", function() { return _VExpansionPanelHeader__WEBPACK_IMPORTED_MODULE_3__["default"]; });
-
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VExpansionPanels: _VExpansionPanels__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VExpansionPanel: _VExpansionPanel__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VExpansionPanelHeader: _VExpansionPanelHeader__WEBPACK_IMPORTED_MODULE_3__["default"],
-    VExpansionPanelContent: _VExpansionPanelContent__WEBPACK_IMPORTED_MODULE_2__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VFileInput/VFileInput.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VFileInput/VFileInput.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VFileInput/VFileInput.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VFileInput/VFileInput.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VFileInput_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VFileInput.sass */ "./src/components/VFileInput/VFileInput.sass");
-/* harmony import */ var _VFileInput_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VFileInput_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VTextField__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VTextField */ "./src/components/VTextField/index.ts");
-/* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VChip */ "./src/components/VChip/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Styles
-
-
- // Extensions
-
- // Components
-
- // Utilities
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-file-input',
-  model: {
-    prop: 'value',
-    event: 'change'
-  },
-  props: {
-    chips: Boolean,
-    clearable: {
-      type: Boolean,
-      default: true
-    },
-    counterSizeString: {
-      type: String,
-      default: '$vuetify.fileInput.counterSize'
-    },
-    counterString: {
-      type: String,
-      default: '$vuetify.fileInput.counter'
-    },
-    hideInput: Boolean,
-    placeholder: String,
-    prependIcon: {
-      type: String,
-      default: '$file'
-    },
-    readonly: {
-      type: Boolean,
-      default: false
-    },
-    showSize: {
-      type: [Boolean, Number],
-      default: false,
-      validator: function validator(v) {
-        return typeof v === 'boolean' || [1000, 1024].includes(v);
-      }
-    },
-    smallChips: Boolean,
-    truncateLength: {
-      type: [Number, String],
-      default: 22
-    },
-    type: {
-      type: String,
-      default: 'file'
-    },
-    value: {
-      default: undefined,
-      validator: function validator(val) {
-        return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["wrapInArray"])(val).every(function (v) {
-          return v != null && _typeof(v) === 'object';
-        });
-      }
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-file-input': true
-      });
-    },
-    computedCounterValue: function computedCounterValue() {
-      var fileCount = this.isMultiple && this.lazyValue ? this.lazyValue.length : this.lazyValue instanceof File ? 1 : 0;
-      if (!this.showSize) return this.$vuetify.lang.t(this.counterString, fileCount);
-      var bytes = this.internalArrayValue.reduce(function (bytes, _a) {
-        var _b = _a.size,
-            size = _b === void 0 ? 0 : _b;
-        return bytes + size;
-      }, 0);
-      return this.$vuetify.lang.t(this.counterSizeString, fileCount, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["humanReadableFileSize"])(bytes, this.base === 1024));
-    },
-    internalArrayValue: function internalArrayValue() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["wrapInArray"])(this.internalValue);
-    },
-    internalValue: {
-      get: function get() {
-        return this.lazyValue;
-      },
-      set: function set(val) {
-        this.lazyValue = val;
-        this.$emit('change', this.lazyValue);
-      }
-    },
-    isDirty: function isDirty() {
-      return this.internalArrayValue.length > 0;
-    },
-    isLabelActive: function isLabelActive() {
-      return this.isDirty;
-    },
-    isMultiple: function isMultiple() {
-      return this.$attrs.hasOwnProperty('multiple');
-    },
-    text: function text() {
-      var _this = this;
-
-      if (!this.isDirty) return [this.placeholder];
-      return this.internalArrayValue.map(function (file) {
-        var _a = file.name,
-            name = _a === void 0 ? '' : _a,
-            _b = file.size,
-            size = _b === void 0 ? 0 : _b;
-
-        var truncatedText = _this.truncateText(name);
-
-        return !_this.showSize ? truncatedText : truncatedText + " (" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["humanReadableFileSize"])(size, _this.base === 1024) + ")";
-      });
-    },
-    base: function base() {
-      return typeof this.showSize !== 'boolean' ? this.showSize : undefined;
-    },
-    hasChips: function hasChips() {
-      return this.chips || this.smallChips;
-    }
-  },
-  watch: {
-    readonly: {
-      handler: function handler(v) {
-        if (v === true) Object(_util_console__WEBPACK_IMPORTED_MODULE_4__["consoleError"])('readonly is not supported on <v-file-input>', this);
-      },
-      immediate: true
-    },
-    value: function value(v) {
-      var value = this.isMultiple ? v : v ? [v] : [];
-
-      if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["deepEqual"])(value, this.$refs.input.files)) {
-        // When the input value is changed programatically, clear the
-        // internal input's value so that the `onInput` handler
-        // can be triggered again if the user re-selects the exact
-        // same file(s). Ideally, `input.files` should be
-        // manipulated directly but that property is readonly.
-        this.$refs.input.value = '';
-      }
-    }
-  },
-  methods: {
-    clearableCallback: function clearableCallback() {
-      this.internalValue = this.isMultiple ? [] : undefined;
-      this.$refs.input.value = '';
-    },
-    genChips: function genChips() {
-      var _this = this;
-
-      if (!this.isDirty) return [];
-      return this.text.map(function (text, index) {
-        return _this.$createElement(_VChip__WEBPACK_IMPORTED_MODULE_2__["VChip"], {
-          props: {
-            small: _this.smallChips
-          },
-          on: {
-            'click:close': function clickClose() {
-              var internalValue = _this.internalValue;
-              internalValue.splice(index, 1);
-              _this.internalValue = internalValue; // Trigger the watcher
-            }
-          }
-        }, [text]);
-      });
-    },
-    genControl: function genControl() {
-      var render = _VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genControl.call(this);
-
-      if (this.hideInput) {
-        render.data.style = Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_5__["mergeStyles"])(render.data.style, {
-          display: 'none'
-        });
-      }
-
-      return render;
-    },
-    genInput: function genInput() {
-      var input = _VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genInput.call(this); // We should not be setting value
-      // programmatically on the input
-      // when it is using type="file"
-
-      delete input.data.domProps.value; // This solves an issue in Safari where
-      // nothing happens when adding a file
-      // do to the input event not firing
-      // https://github.com/vuetifyjs/vuetify/issues/7941
-
-      delete input.data.on.input;
-      input.data.on.change = this.onInput;
-      return [this.genSelections(), input];
-    },
-    genPrependSlot: function genPrependSlot() {
-      var _this = this;
-
-      if (!this.prependIcon) return null;
-      var icon = this.genIcon('prepend', function () {
-        _this.$refs.input.click();
-      });
-      return this.genSlot('prepend', 'outer', [icon]);
-    },
-    genSelectionText: function genSelectionText() {
-      var length = this.text.length;
-      if (length < 2) return this.text;
-      if (this.showSize && !this.counter) return [this.computedCounterValue];
-      return [this.$vuetify.lang.t(this.counterString, length)];
-    },
-    genSelections: function genSelections() {
-      var _this = this;
-
-      var children = [];
-
-      if (this.isDirty && this.$scopedSlots.selection) {
-        this.internalArrayValue.forEach(function (file, index) {
-          if (!_this.$scopedSlots.selection) return;
-          children.push(_this.$scopedSlots.selection({
-            text: _this.text[index],
-            file: file,
-            index: index
-          }));
-        });
-      } else {
-        children.push(this.hasChips && this.isDirty ? this.genChips() : this.genSelectionText());
-      }
-
-      return this.$createElement('div', {
-        staticClass: 'v-file-input__text',
-        class: {
-          'v-file-input__text--placeholder': this.placeholder && !this.isDirty,
-          'v-file-input__text--chips': this.hasChips && !this.$scopedSlots.selection
-        }
-      }, children);
-    },
-    genTextFieldSlot: function genTextFieldSlot() {
-      var _this = this;
-
-      var node = _VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genTextFieldSlot.call(this);
-      node.data.on = __assign(__assign({}, node.data.on || {}), {
-        click: function click() {
-          return _this.$refs.input.click();
-        }
-      });
-      return node;
-    },
-    onInput: function onInput(e) {
-      var files = __spread(e.target.files || []);
-
-      this.internalValue = this.isMultiple ? files : files[0]; // Set initialValue here otherwise isFocused
-      // watcher in VTextField will emit a change
-      // event whenever the component is blurred
-
-      this.initialValue = this.internalValue;
-    },
-    onKeyDown: function onKeyDown(e) {
-      this.$emit('keydown', e);
-    },
-    truncateText: function truncateText(str) {
-      if (str.length < Number(this.truncateLength)) return str;
-      var charsKeepOneSide = Math.floor((Number(this.truncateLength) - 1) / 2);
-      return str.slice(0, charsKeepOneSide) + "\u2026" + str.slice(str.length - charsKeepOneSide);
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VFileInput/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VFileInput/index.ts ***!
-  \********************************************/
-/*! exports provided: VFileInput, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VFileInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VFileInput */ "./src/components/VFileInput/VFileInput.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFileInput", function() { return _VFileInput__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VFileInput__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VFooter/VFooter.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VFooter/VFooter.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VFooter/VFooter.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VFooter/VFooter.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VFooter_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VFooter.sass */ "./src/components/VFooter/VFooter.sass");
-/* harmony import */ var _VFooter_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VFooter_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts");
-/* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts");
-/* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
- // Mixins
-
-
- // Utilities
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"], Object(_mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__["default"])('footer', ['height', 'inset']), _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'v-footer',
-  props: {
-    height: {
-      default: 'auto',
-      type: [Number, String]
-    },
-    inset: Boolean,
-    padless: Boolean,
-    tag: {
-      type: String,
-      default: 'footer'
-    }
-  },
-  computed: {
-    applicationProperty: function applicationProperty() {
-      return this.inset ? 'insetFooter' : 'footer';
-    },
-    classes: function classes() {
-      return __assign(__assign({}, _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-footer--absolute': this.absolute,
-        'v-footer--fixed': !this.absolute && (this.app || this.fixed),
-        'v-footer--padless': this.padless,
-        'v-footer--inset': this.inset
-      });
-    },
-    computedBottom: function computedBottom() {
-      if (!this.isPositioned) return undefined;
-      return this.app ? this.$vuetify.application.bottom : 0;
-    },
-    computedLeft: function computedLeft() {
-      if (!this.isPositioned) return undefined;
-      return this.app && this.inset ? this.$vuetify.application.left : 0;
-    },
-    computedRight: function computedRight() {
-      if (!this.isPositioned) return undefined;
-      return this.app && this.inset ? this.$vuetify.application.right : 0;
-    },
-    isPositioned: function isPositioned() {
-      return Boolean(this.absolute || this.fixed || this.app);
-    },
-    styles: function styles() {
-      var height = parseInt(this.height);
-      return __assign(__assign({}, _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.styles.call(this)), {
-        height: isNaN(height) ? height : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["convertToUnit"])(height),
-        left: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["convertToUnit"])(this.computedLeft),
-        right: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["convertToUnit"])(this.computedRight),
-        bottom: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["convertToUnit"])(this.computedBottom)
-      });
-    }
-  },
-  methods: {
-    updateApplication: function updateApplication() {
-      var height = parseInt(this.height);
-      return isNaN(height) ? this.$el ? this.$el.clientHeight : 0 : height;
-    }
-  },
-  render: function render(h) {
-    var data = this.setBackgroundColor(this.color, {
-      staticClass: 'v-footer',
-      class: this.classes,
-      style: this.styles
-    });
-    return h(this.tag, data, this.$slots.default);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VFooter/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VFooter/index.ts ***!
-  \*****************************************/
-/*! exports provided: VFooter, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VFooter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VFooter */ "./src/components/VFooter/VFooter.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFooter", function() { return _VFooter__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VFooter__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VForm/VForm.ts":
-/*!***************************************!*\
-  !*** ./src/components/VForm/VForm.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Mixins
-
-
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(_mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__["default"], Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_2__["provide"])('form')
-/* @vue/component */
-).extend({
-  name: 'v-form',
-  provide: function provide() {
-    return {
-      form: this
-    };
-  },
-  inheritAttrs: false,
-  props: {
-    disabled: Boolean,
-    lazyValidation: Boolean,
-    readonly: Boolean,
-    value: Boolean
-  },
-  data: function data() {
-    return {
-      inputs: [],
-      watchers: [],
-      errorBag: {}
-    };
-  },
-  watch: {
-    errorBag: {
-      handler: function handler(val) {
-        var errors = Object.values(val).includes(true);
-        this.$emit('input', !errors);
-      },
-      deep: true,
-      immediate: true
-    }
-  },
-  methods: {
-    watchInput: function watchInput(input) {
-      var _this = this;
-
-      var watcher = function watcher(input) {
-        return input.$watch('hasError', function (val) {
-          _this.$set(_this.errorBag, input._uid, val);
-        }, {
-          immediate: true
-        });
-      };
-
-      var watchers = {
-        _uid: input._uid,
-        valid: function valid() {},
-        shouldValidate: function shouldValidate() {}
-      };
-
-      if (this.lazyValidation) {
-        // Only start watching inputs if we need to
-        watchers.shouldValidate = input.$watch('shouldValidate', function (val) {
-          if (!val) return; // Only watch if we're not already doing it
-
-          if (_this.errorBag.hasOwnProperty(input._uid)) return;
-          watchers.valid = watcher(input);
-        });
-      } else {
-        watchers.valid = watcher(input);
-      }
-
-      return watchers;
-    },
-
-    /** @public */
-    validate: function validate() {
-      return this.inputs.filter(function (input) {
-        return !input.validate(true);
-      }).length === 0;
-    },
-
-    /** @public */
-    reset: function reset() {
-      this.inputs.forEach(function (input) {
-        return input.reset();
-      });
-      this.resetErrorBag();
-    },
-    resetErrorBag: function resetErrorBag() {
-      var _this = this;
-
-      if (this.lazyValidation) {
-        // Account for timeout in validatable
-        setTimeout(function () {
-          _this.errorBag = {};
-        }, 0);
-      }
-    },
-
-    /** @public */
-    resetValidation: function resetValidation() {
-      this.inputs.forEach(function (input) {
-        return input.resetValidation();
-      });
-      this.resetErrorBag();
-    },
-    register: function register(input) {
-      this.inputs.push(input);
-      this.watchers.push(this.watchInput(input));
-    },
-    unregister: function unregister(input) {
-      var found = this.inputs.find(function (i) {
-        return i._uid === input._uid;
-      });
-      if (!found) return;
-      var unwatch = this.watchers.find(function (i) {
-        return i._uid === found._uid;
-      });
-
-      if (unwatch) {
-        unwatch.valid();
-        unwatch.shouldValidate();
-      }
-
-      this.watchers = this.watchers.filter(function (i) {
-        return i._uid !== found._uid;
-      });
-      this.inputs = this.inputs.filter(function (i) {
-        return i._uid !== found._uid;
-      });
-      this.$delete(this.errorBag, found._uid);
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    return h('form', {
-      staticClass: 'v-form',
-      attrs: __assign({
-        novalidate: true
-      }, this.attrs$),
-      on: {
-        submit: function submit(e) {
-          return _this.$emit('submit', e);
-        }
-      }
-    }, this.$slots.default);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VForm/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VForm/index.ts ***!
-  \***************************************/
-/*! exports provided: VForm, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VForm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VForm */ "./src/components/VForm/VForm.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VForm", function() { return _VForm__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VForm__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VGrid/VCol.ts":
-/*!**************************************!*\
-  !*** ./src/components/VGrid/VCol.ts ***!
-  \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VGrid.sass */ "./src/components/VGrid/VGrid.sass");
-/* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VGrid_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
-
-
- // no xs
-
-var breakpoints = ['sm', 'md', 'lg', 'xl'];
-
-var breakpointProps = function () {
-  return breakpoints.reduce(function (props, val) {
-    props[val] = {
-      type: [Boolean, String, Number],
-      default: false
-    };
-    return props;
-  }, {});
-}();
-
-var offsetProps = function () {
-  return breakpoints.reduce(function (props, val) {
-    props['offset' + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["upperFirst"])(val)] = {
-      type: [String, Number],
-      default: null
-    };
-    return props;
-  }, {});
-}();
-
-var orderProps = function () {
-  return breakpoints.reduce(function (props, val) {
-    props['order' + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["upperFirst"])(val)] = {
-      type: [String, Number],
-      default: null
-    };
-    return props;
-  }, {});
-}();
-
-var propMap = {
-  col: Object.keys(breakpointProps),
-  offset: Object.keys(offsetProps),
-  order: Object.keys(orderProps)
-};
-
-function breakpointClass(type, prop, val) {
-  var className = type;
-
-  if (val == null || val === false) {
-    return undefined;
-  }
-
-  if (prop) {
-    var breakpoint = prop.replace(type, '');
-    className += "-" + breakpoint;
-  } // Handling the boolean style prop when accepting [Boolean, String, Number]
-  // means Vue will not convert <v-col sm></v-col> to sm: true for us.
-  // Since the default is false, an empty string indicates the prop's presence.
-
-
-  if (type === 'col' && (val === '' || val === true)) {
-    // .col-md
-    return className.toLowerCase();
-  } // .order-md-6
-
-
-  className += "-" + val;
-  return className.toLowerCase();
-}
-
-var cache = new Map();
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
-  name: 'v-col',
-  functional: true,
-  props: __assign(__assign(__assign(__assign(__assign(__assign({
-    cols: {
-      type: [Boolean, String, Number],
-      default: false
-    }
-  }, breakpointProps), {
-    offset: {
-      type: [String, Number],
-      default: null
-    }
-  }), offsetProps), {
-    order: {
-      type: [String, Number],
-      default: null
-    }
-  }), orderProps), {
-    alignSelf: {
-      type: String,
-      default: null,
-      validator: function validator(str) {
-        return ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str);
-      }
-    },
-    tag: {
-      type: String,
-      default: 'div'
-    }
-  }),
-  render: function render(h, _a) {
-    var _b;
-
-    var props = _a.props,
-        data = _a.data,
-        children = _a.children,
-        parent = _a.parent; // Super-fast memoization based on props, 5x faster than JSON.stringify
-
-    var cacheKey = '';
-
-    for (var prop in props) {
-      cacheKey += String(props[prop]);
-    }
-
-    var classList = cache.get(cacheKey);
-
-    if (!classList) {
-      classList = []; // Loop through `col`, `offset`, `order` breakpoint props
-
-      var type_1;
-
-      for (type_1 in propMap) {
-        propMap[type_1].forEach(function (prop) {
-          var value = props[prop];
-          var className = breakpointClass(type_1, prop, value);
-          if (className) classList.push(className);
-        });
-      }
-
-      var hasColClasses = classList.some(function (className) {
-        return className.startsWith('col-');
-      });
-      classList.push((_b = {
-        // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.
-        col: !hasColClasses || !props.cols
-      }, _b["col-" + props.cols] = props.cols, _b["offset-" + props.offset] = props.offset, _b["order-" + props.order] = props.order, _b["align-self-" + props.alignSelf] = props.alignSelf, _b));
-      cache.set(cacheKey, classList);
-    }
-
-    return h(props.tag, Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_2__["default"])(data, {
-      class: classList
-    }), children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VGrid/VContainer.ts":
-/*!********************************************!*\
-  !*** ./src/components/VGrid/VContainer.ts ***!
-  \********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_grid.sass */ "./src/components/VGrid/_grid.sass");
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_grid_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VGrid.sass */ "./src/components/VGrid/VGrid.sass");
-/* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_VGrid_sass__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./grid */ "./src/components/VGrid/grid.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_grid__WEBPACK_IMPORTED_MODULE_2__["default"])('container').extend({
-  name: 'v-container',
-  functional: true,
-  props: {
-    id: String,
-    tag: {
-      type: String,
-      default: 'div'
-    },
-    fluid: {
-      type: Boolean,
-      default: false
-    }
-  },
-  render: function render(h, _a) {
-    var props = _a.props,
-        data = _a.data,
-        children = _a.children;
-    var classes;
-    var attrs = data.attrs;
-
-    if (attrs) {
-      // reset attrs to extract utility clases like pa-3
-      data.attrs = {};
-      classes = Object.keys(attrs).filter(function (key) {
-        // TODO: Remove once resolved
-        // https://github.com/vuejs/vue/issues/7841
-        if (key === 'slot') return false;
-        var value = attrs[key]; // add back data attributes like data-test="foo" but do not
-        // add them as classes
-
-        if (key.startsWith('data-')) {
-          data.attrs[key] = value;
-          return false;
-        }
-
-        return value || typeof value === 'string';
-      });
-    }
-
-    if (props.id) {
-      data.domProps = data.domProps || {};
-      data.domProps.id = props.id;
-    }
-
-    return h(props.tag, Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_3__["default"])(data, {
-      staticClass: 'container',
-      class: Array({
-        'container--fluid': props.fluid
-      }).concat(classes || [])
-    }), children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VGrid/VFlex.ts":
-/*!***************************************!*\
-  !*** ./src/components/VGrid/VFlex.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_grid.sass */ "./src/components/VGrid/_grid.sass");
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_grid_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./grid */ "./src/components/VGrid/grid.ts");
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_grid__WEBPACK_IMPORTED_MODULE_1__["default"])('flex'));
-
-/***/ }),
-
-/***/ "./src/components/VGrid/VGrid.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VGrid/VGrid.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VGrid/VLayout.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VGrid/VLayout.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_grid.sass */ "./src/components/VGrid/_grid.sass");
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_grid_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./grid */ "./src/components/VGrid/grid.ts");
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_grid__WEBPACK_IMPORTED_MODULE_1__["default"])('layout'));
-
-/***/ }),
-
-/***/ "./src/components/VGrid/VRow.ts":
-/*!**************************************!*\
-  !*** ./src/components/VGrid/VRow.ts ***!
-  \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VGrid.sass */ "./src/components/VGrid/VGrid.sass");
-/* harmony import */ var _VGrid_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VGrid_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-};
-
-
-
-
- // no xs
-
-var breakpoints = ['sm', 'md', 'lg', 'xl'];
-var ALIGNMENT = ['start', 'end', 'center'];
-
-function makeProps(prefix, def) {
-  return breakpoints.reduce(function (props, val) {
-    props[prefix + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["upperFirst"])(val)] = def();
-    return props;
-  }, {});
-}
-
-var alignValidator = function alignValidator(str) {
-  return __spread(ALIGNMENT, ['baseline', 'stretch']).includes(str);
-};
-
-var alignProps = makeProps('align', function () {
-  return {
-    type: String,
-    default: null,
-    validator: alignValidator
-  };
-});
-
-var justifyValidator = function justifyValidator(str) {
-  return __spread(ALIGNMENT, ['space-between', 'space-around']).includes(str);
-};
-
-var justifyProps = makeProps('justify', function () {
-  return {
-    type: String,
-    default: null,
-    validator: justifyValidator
-  };
-});
-
-var alignContentValidator = function alignContentValidator(str) {
-  return __spread(ALIGNMENT, ['space-between', 'space-around', 'stretch']).includes(str);
-};
-
-var alignContentProps = makeProps('alignContent', function () {
-  return {
-    type: String,
-    default: null,
-    validator: alignContentValidator
-  };
-});
-var propMap = {
-  align: Object.keys(alignProps),
-  justify: Object.keys(justifyProps),
-  alignContent: Object.keys(alignContentProps)
-};
-var classMap = {
-  align: 'align',
-  justify: 'justify',
-  alignContent: 'align-content'
-};
-
-function breakpointClass(type, prop, val) {
-  var className = classMap[type];
-
-  if (val == null) {
-    return undefined;
-  }
-
-  if (prop) {
-    // alignSm -> Sm
-    var breakpoint = prop.replace(type, '');
-    className += "-" + breakpoint;
-  } // .align-items-sm-center
-
-
-  className += "-" + val;
-  return className.toLowerCase();
-}
-
-var cache = new Map();
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
-  name: 'v-row',
-  functional: true,
-  props: __assign(__assign(__assign(__assign(__assign({
-    tag: {
-      type: String,
-      default: 'div'
-    },
-    dense: Boolean,
-    noGutters: Boolean,
-    align: {
-      type: String,
-      default: null,
-      validator: alignValidator
-    }
-  }, alignProps), {
-    justify: {
-      type: String,
-      default: null,
-      validator: justifyValidator
-    }
-  }), justifyProps), {
-    alignContent: {
-      type: String,
-      default: null,
-      validator: alignContentValidator
-    }
-  }), alignContentProps),
-  render: function render(h, _a) {
-    var _b;
-
-    var props = _a.props,
-        data = _a.data,
-        children = _a.children; // Super-fast memoization based on props, 5x faster than JSON.stringify
-
-    var cacheKey = '';
-
-    for (var prop in props) {
-      cacheKey += String(props[prop]);
-    }
-
-    var classList = cache.get(cacheKey);
-
-    if (!classList) {
-      classList = []; // Loop through `align`, `justify`, `alignContent` breakpoint props
-
-      var type_1;
-
-      for (type_1 in propMap) {
-        propMap[type_1].forEach(function (prop) {
-          var value = props[prop];
-          var className = breakpointClass(type_1, prop, value);
-          if (className) classList.push(className);
-        });
-      }
-
-      classList.push((_b = {
-        'no-gutters': props.noGutters,
-        'row--dense': props.dense
-      }, _b["align-" + props.align] = props.align, _b["justify-" + props.justify] = props.justify, _b["align-content-" + props.alignContent] = props.alignContent, _b));
-      cache.set(cacheKey, classList);
-    }
-
-    return h(props.tag, Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_2__["default"])(data, {
-      staticClass: 'row',
-      class: classList
-    }), children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VGrid/VSpacer.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VGrid/VSpacer.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_grid.sass */ "./src/components/VGrid/_grid.sass");
-/* harmony import */ var _grid_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_grid_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["createSimpleFunctional"])('spacer', 'div', 'v-spacer'));
-
-/***/ }),
-
-/***/ "./src/components/VGrid/_grid.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VGrid/_grid.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VGrid/grid.ts":
-/*!**************************************!*\
-  !*** ./src/components/VGrid/grid.ts ***!
-  \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return VGrid; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-// Types
-
-function VGrid(name) {
-  /* @vue/component */
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    name: "v-" + name,
-    functional: true,
-    props: {
-      id: String,
-      tag: {
-        type: String,
-        default: 'div'
-      }
-    },
-    render: function render(h, _a) {
-      var props = _a.props,
-          data = _a.data,
-          children = _a.children;
-      data.staticClass = (name + " " + (data.staticClass || '')).trim();
-      var attrs = data.attrs;
-
-      if (attrs) {
-        // reset attrs to extract utility clases like pa-3
-        data.attrs = {};
-        var classes = Object.keys(attrs).filter(function (key) {
-          // TODO: Remove once resolved
-          // https://github.com/vuejs/vue/issues/7841
-          if (key === 'slot') return false;
-          var value = attrs[key]; // add back data attributes like data-test="foo" but do not
-          // add them as classes
-
-          if (key.startsWith('data-')) {
-            data.attrs[key] = value;
-            return false;
-          }
-
-          return value || typeof value === 'string';
-        });
-        if (classes.length) data.staticClass += " " + classes.join(' ');
-      }
-
-      if (props.id) {
-        data.domProps = data.domProps || {};
-        data.domProps.id = props.id;
-      }
-
-      return h(props.tag, data, children);
-    }
-  });
-}
-
-/***/ }),
-
-/***/ "./src/components/VGrid/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VGrid/index.ts ***!
-  \***************************************/
-/*! exports provided: VContainer, VCol, VRow, VSpacer, VLayout, VFlex, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VContainer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VContainer */ "./src/components/VGrid/VContainer.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VContainer", function() { return _VContainer__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VCol__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VCol */ "./src/components/VGrid/VCol.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCol", function() { return _VCol__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _VRow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VRow */ "./src/components/VGrid/VRow.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRow", function() { return _VRow__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-/* harmony import */ var _VSpacer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VSpacer */ "./src/components/VGrid/VSpacer.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSpacer", function() { return _VSpacer__WEBPACK_IMPORTED_MODULE_3__["default"]; });
-
-/* harmony import */ var _VLayout__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VLayout */ "./src/components/VGrid/VLayout.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VLayout", function() { return _VLayout__WEBPACK_IMPORTED_MODULE_4__["default"]; });
-
-/* harmony import */ var _VFlex__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VFlex */ "./src/components/VGrid/VFlex.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFlex", function() { return _VFlex__WEBPACK_IMPORTED_MODULE_5__["default"]; });
-
-
-
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VContainer: _VContainer__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VCol: _VCol__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VRow: _VRow__WEBPACK_IMPORTED_MODULE_2__["default"],
-    VSpacer: _VSpacer__WEBPACK_IMPORTED_MODULE_3__["default"],
-    VLayout: _VLayout__WEBPACK_IMPORTED_MODULE_4__["default"],
-    VFlex: _VFlex__WEBPACK_IMPORTED_MODULE_5__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VHover/VHover.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VHover/VHover.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-// Mixins
-
- // Utilities
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_mixins_delayable__WEBPACK_IMPORTED_MODULE_0__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-hover',
-  props: {
-    disabled: {
-      type: Boolean,
-      default: false
-    },
-    value: {
-      type: Boolean,
-      default: undefined
-    }
-  },
-  methods: {
-    onMouseEnter: function onMouseEnter() {
-      this.runDelay('open');
-    },
-    onMouseLeave: function onMouseLeave() {
-      this.runDelay('close');
-    }
-  },
-  render: function render() {
-    if (!this.$scopedSlots.default && this.value === undefined) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_3__["consoleWarn"])('v-hover is missing a default scopedSlot or bound value', this);
-      return null;
-    }
-
-    var element;
-    /* istanbul ignore else */
-
-    if (this.$scopedSlots.default) {
-      element = this.$scopedSlots.default({
-        hover: this.isActive
-      });
-    }
-
-    if (Array.isArray(element) && element.length === 1) {
-      element = element[0];
-    }
-
-    if (!element || Array.isArray(element) || !element.tag) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_3__["consoleWarn"])('v-hover should only contain a single element', this);
-      return element;
-    }
-
-    if (!this.disabled) {
-      element.data = element.data || {};
-
-      this._g(element.data, {
-        mouseenter: this.onMouseEnter,
-        mouseleave: this.onMouseLeave
-      });
-    }
-
-    return element;
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VHover/index.ts":
-/*!****************************************!*\
-  !*** ./src/components/VHover/index.ts ***!
-  \****************************************/
-/*! exports provided: VHover, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VHover__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VHover */ "./src/components/VHover/VHover.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VHover", function() { return _VHover__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VHover__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VIcon/VIcon.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VIcon/VIcon.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VIcon/VIcon.ts":
-/*!***************************************!*\
-  !*** ./src/components/VIcon/VIcon.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VIcon_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VIcon.sass */ "./src/components/VIcon/VIcon.sass");
-/* harmony import */ var _VIcon_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VIcon_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_6__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
- // Mixins
-
-
-
-
- // Util
-
- // Types
-
-
-
-var SIZE_MAP;
-
-(function (SIZE_MAP) {
-  SIZE_MAP["xSmall"] = "12px";
-  SIZE_MAP["small"] = "16px";
-  SIZE_MAP["default"] = "24px";
-  SIZE_MAP["medium"] = "28px";
-  SIZE_MAP["large"] = "36px";
-  SIZE_MAP["xLarge"] = "40px";
-})(SIZE_MAP || (SIZE_MAP = {}));
-
-function isFontAwesome5(iconType) {
-  return ['fas', 'far', 'fal', 'fab', 'fad'].some(function (val) {
-    return iconType.includes(val);
-  });
-}
-
-function isSvgPath(icon) {
-  return /^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\dz]$/i.test(icon) && icon.length > 4;
-}
-
-var VIcon = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_sizeable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-icon',
-  props: {
-    dense: Boolean,
-    disabled: Boolean,
-    left: Boolean,
-    right: Boolean,
-    size: [Number, String],
-    tag: {
-      type: String,
-      required: false,
-      default: 'i'
-    }
-  },
-  computed: {
-    medium: function medium() {
-      return false;
-    },
-    hasClickListener: function hasClickListener() {
-      return Boolean(this.listeners$.click || this.listeners$['!click']);
-    }
-  },
-  methods: {
-    getIcon: function getIcon() {
-      var iconName = '';
-      if (this.$slots.default) iconName = this.$slots.default[0].text.trim();
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["remapInternalIcon"])(this, iconName);
-    },
-    getSize: function getSize() {
-      var sizes = {
-        xSmall: this.xSmall,
-        small: this.small,
-        medium: this.medium,
-        large: this.large,
-        xLarge: this.xLarge
-      };
-      var explicitSize = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["keys"])(sizes).find(function (key) {
-        return sizes[key];
-      });
-      return explicitSize && SIZE_MAP[explicitSize] || Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["convertToUnit"])(this.size);
-    },
-    // Component data for both font icon and SVG wrapper span
-    getDefaultData: function getDefaultData() {
-      return {
-        staticClass: 'v-icon notranslate',
-        class: {
-          'v-icon--disabled': this.disabled,
-          'v-icon--left': this.left,
-          'v-icon--link': this.hasClickListener,
-          'v-icon--right': this.right,
-          'v-icon--dense': this.dense
-        },
-        attrs: __assign({
-          'aria-hidden': !this.hasClickListener,
-          disabled: this.hasClickListener && this.disabled,
-          type: this.hasClickListener ? 'button' : undefined
-        }, this.attrs$),
-        on: this.listeners$
-      };
-    },
-    getSvgWrapperData: function getSvgWrapperData() {
-      var fontSize = this.getSize();
-
-      var wrapperData = __assign(__assign({}, this.getDefaultData()), {
-        style: fontSize ? {
-          fontSize: fontSize,
-          height: fontSize,
-          width: fontSize
-        } : undefined
-      });
-
-      this.applyColors(wrapperData);
-      return wrapperData;
-    },
-    applyColors: function applyColors(data) {
-      data.class = __assign(__assign({}, data.class), this.themeClasses);
-      this.setTextColor(this.color, data);
-    },
-    renderFontIcon: function renderFontIcon(icon, h) {
-      var newChildren = [];
-      var data = this.getDefaultData();
-      var iconType = 'material-icons'; // Material Icon delimiter is _
-      // https://material.io/icons/
-
-      var delimiterIndex = icon.indexOf('-');
-      var isMaterialIcon = delimiterIndex <= -1;
-
-      if (isMaterialIcon) {
-        // Material icon uses ligatures.
-        newChildren.push(icon);
-      } else {
-        iconType = icon.slice(0, delimiterIndex);
-        if (isFontAwesome5(iconType)) iconType = '';
-      }
-
-      data.class[iconType] = true;
-      data.class[icon] = !isMaterialIcon;
-      var fontSize = this.getSize();
-      if (fontSize) data.style = {
-        fontSize: fontSize
-      };
-      this.applyColors(data);
-      return h(this.hasClickListener ? 'button' : this.tag, data, newChildren);
-    },
-    renderSvgIcon: function renderSvgIcon(icon, h) {
-      var svgData = {
-        class: 'v-icon__svg',
-        attrs: {
-          xmlns: 'http://www.w3.org/2000/svg',
-          viewBox: '0 0 24 24',
-          role: 'img',
-          'aria-hidden': true
-        }
-      };
-      var size = this.getSize();
-
-      if (size) {
-        svgData.style = {
-          fontSize: size,
-          height: size,
-          width: size
-        };
-      }
-
-      return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [h('svg', svgData, [h('path', {
-        attrs: {
-          d: icon
-        }
-      })])]);
-    },
-    renderSvgIconComponent: function renderSvgIconComponent(icon, h) {
-      var data = {
-        class: {
-          'v-icon__component': true
-        }
-      };
-      var size = this.getSize();
-
-      if (size) {
-        data.style = {
-          fontSize: size,
-          height: size,
-          width: size
-        };
-      }
-
-      this.applyColors(data);
-      var component = icon.component;
-      data.props = icon.props;
-      data.nativeOn = data.on;
-      return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [h(component, data)]);
-    }
-  },
-  render: function render(h) {
-    var icon = this.getIcon();
-
-    if (typeof icon === 'string') {
-      if (isSvgPath(icon)) {
-        return this.renderSvgIcon(icon, h);
-      }
-
-      return this.renderFontIcon(icon, h);
-    }
-
-    return this.renderSvgIconComponent(icon, h);
-  }
-});
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_6___default.a.extend({
-  name: 'v-icon',
-  $_wrapperFor: VIcon,
-  functional: true,
-  render: function render(h, _a) {
-    var data = _a.data,
-        children = _a.children;
-    var iconName = ''; // Support usage of v-text and v-html
-
-    if (data.domProps) {
-      iconName = data.domProps.textContent || data.domProps.innerHTML || iconName; // Remove nodes so it doesn't
-      // overwrite our changes
-
-      delete data.domProps.textContent;
-      delete data.domProps.innerHTML;
-    }
-
-    return h(VIcon, data, iconName ? [iconName] : children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VIcon/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VIcon/index.ts ***!
-  \***************************************/
-/*! exports provided: VIcon, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VIcon */ "./src/components/VIcon/VIcon.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VIcon", function() { return _VIcon__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VIcon__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VImg/VImg.sass":
-/*!***************************************!*\
-  !*** ./src/components/VImg/VImg.sass ***!
-  \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VImg/VImg.ts":
-/*!*************************************!*\
-  !*** ./src/components/VImg/VImg.ts ***!
-  \*************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VImg_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VImg.sass */ "./src/components/VImg/VImg.sass");
-/* harmony import */ var _VImg_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VImg_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _directives_intersect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../directives/intersect */ "./src/directives/intersect/index.ts");
-/* harmony import */ var _VResponsive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VResponsive */ "./src/components/VResponsive/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-// Styles
- // Directives
-
- // Components
-
- // Mixins
-
- // Utils
-
-
-
-
-var hasIntersect = typeof window !== 'undefined' && 'IntersectionObserver' in window;
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_VResponsive__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'v-img',
-  directives: {
-    intersect: _directives_intersect__WEBPACK_IMPORTED_MODULE_1__["default"]
-  },
-  props: {
-    alt: String,
-    contain: Boolean,
-    eager: Boolean,
-    gradient: String,
-    lazySrc: String,
-    options: {
-      type: Object,
-      // For more information on types, navigate to:
-      // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
-      default: function _default() {
-        return {
-          root: undefined,
-          rootMargin: undefined,
-          threshold: undefined
-        };
-      }
-    },
-    position: {
-      type: String,
-      default: 'center center'
-    },
-    sizes: String,
-    src: {
-      type: [String, Object],
-      default: ''
-    },
-    srcset: String,
-    transition: {
-      type: [Boolean, String],
-      default: 'fade-transition'
-    }
-  },
-  data: function data() {
-    return {
-      currentSrc: '',
-      image: null,
-      isLoading: true,
-      calculatedAspectRatio: undefined,
-      naturalWidth: undefined,
-      hasError: false
-    };
-  },
-  computed: {
-    computedAspectRatio: function computedAspectRatio() {
-      return Number(this.normalisedSrc.aspect || this.calculatedAspectRatio);
-    },
-    normalisedSrc: function normalisedSrc() {
-      return this.src && _typeof(this.src) === 'object' ? {
-        src: this.src.src,
-        srcset: this.srcset || this.src.srcset,
-        lazySrc: this.lazySrc || this.src.lazySrc,
-        aspect: Number(this.aspectRatio || this.src.aspect)
-      } : {
-        src: this.src,
-        srcset: this.srcset,
-        lazySrc: this.lazySrc,
-        aspect: Number(this.aspectRatio || 0)
-      };
-    },
-    __cachedImage: function __cachedImage() {
-      if (!(this.normalisedSrc.src || this.normalisedSrc.lazySrc || this.gradient)) return [];
-      var backgroundImage = [];
-      var src = this.isLoading ? this.normalisedSrc.lazySrc : this.currentSrc;
-      if (this.gradient) backgroundImage.push("linear-gradient(" + this.gradient + ")");
-      if (src) backgroundImage.push("url(\"" + src + "\")");
-      var image = this.$createElement('div', {
-        staticClass: 'v-image__image',
-        class: {
-          'v-image__image--preload': this.isLoading,
-          'v-image__image--contain': this.contain,
-          'v-image__image--cover': !this.contain
-        },
-        style: {
-          backgroundImage: backgroundImage.join(', '),
-          backgroundPosition: this.position
-        },
-        key: +this.isLoading
-      });
-      /* istanbul ignore if */
-
-      if (!this.transition) return image;
-      return this.$createElement('transition', {
-        attrs: {
-          name: this.transition,
-          mode: 'in-out'
-        }
-      }, [image]);
-    }
-  },
-  watch: {
-    src: function src() {
-      // Force re-init when src changes
-      if (!this.isLoading) this.init(undefined, undefined, true);else this.loadImage();
-    },
-    '$vuetify.breakpoint.width': 'getSrc'
-  },
-  mounted: function mounted() {
-    this.init();
-  },
-  methods: {
-    init: function init(entries, observer, isIntersecting) {
-      // If the current browser supports the intersection
-      // observer api, the image is not observable, and
-      // the eager prop isn't being used, do not load
-      if (hasIntersect && !isIntersecting && !this.eager) return;
-
-      if (this.normalisedSrc.lazySrc) {
-        var lazyImg = new Image();
-        lazyImg.src = this.normalisedSrc.lazySrc;
-        this.pollForSize(lazyImg, null);
-      }
-      /* istanbul ignore else */
-
-
-      if (this.normalisedSrc.src) this.loadImage();
-    },
-    onLoad: function onLoad() {
-      this.getSrc();
-      this.isLoading = false;
-      this.$emit('load', this.src);
-    },
-    onError: function onError() {
-      this.hasError = true;
-      this.$emit('error', this.src);
-    },
-    getSrc: function getSrc() {
-      /* istanbul ignore else */
-      if (this.image) this.currentSrc = this.image.currentSrc || this.image.src;
-    },
-    loadImage: function loadImage() {
-      var _this = this;
-
-      var image = new Image();
-      this.image = image;
-
-      image.onload = function () {
-        /* istanbul ignore if */
-        if (image.decode) {
-          image.decode().catch(function (err) {
-            Object(_util_console__WEBPACK_IMPORTED_MODULE_6__["consoleWarn"])("Failed to decode image, trying to render anyway\n\n" + ("src: " + _this.normalisedSrc.src) + (err.message ? "\nOriginal error: " + err.message : ''), _this);
-          }).then(_this.onLoad);
-        } else {
-          _this.onLoad();
-        }
-      };
-
-      image.onerror = this.onError;
-      this.hasError = false;
-      image.src = this.normalisedSrc.src;
-      this.sizes && (image.sizes = this.sizes);
-      this.normalisedSrc.srcset && (image.srcset = this.normalisedSrc.srcset);
-      this.aspectRatio || this.pollForSize(image);
-      this.getSrc();
-    },
-    pollForSize: function pollForSize(img, timeout) {
-      var _this = this;
-
-      if (timeout === void 0) {
-        timeout = 100;
-      }
-
-      var poll = function poll() {
-        var naturalHeight = img.naturalHeight,
-            naturalWidth = img.naturalWidth;
-
-        if (naturalHeight || naturalWidth) {
-          _this.naturalWidth = naturalWidth;
-          _this.calculatedAspectRatio = naturalWidth / naturalHeight;
-        } else {
-          timeout != null && !_this.hasError && setTimeout(poll, timeout);
-        }
-      };
-
-      poll();
-    },
-    genContent: function genContent() {
-      var content = _VResponsive__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genContent.call(this);
-
-      if (this.naturalWidth) {
-        this._b(content.data, 'div', {
-          style: {
-            width: this.naturalWidth + "px"
-          }
-        });
-      }
-
-      return content;
-    },
-    __genPlaceholder: function __genPlaceholder() {
-      if (this.$slots.placeholder) {
-        var placeholder = this.isLoading ? [this.$createElement('div', {
-          staticClass: 'v-image__placeholder'
-        }, this.$slots.placeholder)] : [];
-        if (!this.transition) return placeholder[0];
-        return this.$createElement('transition', {
-          props: {
-            appear: true,
-            name: this.transition
-          }
-        }, placeholder);
-      }
-    }
-  },
-  render: function render(h) {
-    var node = _VResponsive__WEBPACK_IMPORTED_MODULE_2__["default"].options.render.call(this, h);
-    var data = Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_5__["default"])(node.data, {
-      staticClass: 'v-image',
-      attrs: {
-        'aria-label': this.alt,
-        role: this.alt ? 'img' : undefined
-      },
-      class: this.themeClasses,
-      // Only load intersect directive if it
-      // will work in the current browser.
-      directives: hasIntersect ? [{
-        name: 'intersect',
-        modifiers: {
-          once: true
-        },
-        value: {
-          handler: this.init,
-          options: this.options
-        }
-      }] : undefined
-    });
-    node.children = [this.__cachedSizer, this.__cachedImage, this.__genPlaceholder(), this.genContent()];
-    return h(node.tag, data, node.children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VImg/index.ts":
-/*!**************************************!*\
-  !*** ./src/components/VImg/index.ts ***!
-  \**************************************/
-/*! exports provided: VImg, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VImg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VImg */ "./src/components/VImg/VImg.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VImg", function() { return _VImg__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VImg__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VInput/VInput.sass":
-/*!*******************************************!*\
-  !*** ./src/components/VInput/VInput.sass ***!
-  \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VInput/VInput.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VInput/VInput.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VInput_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VInput.sass */ "./src/components/VInput/VInput.sass");
-/* harmony import */ var _VInput_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VInput_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VLabel */ "./src/components/VLabel/index.ts");
-/* harmony import */ var _VMessages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VMessages */ "./src/components/VMessages/index.ts");
-/* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts");
-/* harmony import */ var _mixins_validatable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/validatable */ "./src/mixins/validatable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
-
-
- // Mixins
-
-
- // Utilities
-
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(_mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_validatable__WEBPACK_IMPORTED_MODULE_5__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-input',
-  inheritAttrs: false,
-  props: {
-    appendIcon: String,
-    backgroundColor: {
-      type: String,
-      default: ''
-    },
-    dense: Boolean,
-    height: [Number, String],
-    hideDetails: [Boolean, String],
-    hint: String,
-    id: String,
-    label: String,
-    loading: Boolean,
-    persistentHint: Boolean,
-    prependIcon: String,
-    value: null
-  },
-  data: function data() {
-    return {
-      lazyValue: this.value,
-      hasMouseDown: false
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-input--has-state': this.hasState,
-        'v-input--hide-details': !this.showDetails,
-        'v-input--is-label-active': this.isLabelActive,
-        'v-input--is-dirty': this.isDirty,
-        'v-input--is-disabled': this.isDisabled,
-        'v-input--is-focused': this.isFocused,
-        // <v-switch loading>.loading === '' so we can't just cast to boolean
-        'v-input--is-loading': this.loading !== false && this.loading != null,
-        'v-input--is-readonly': this.isReadonly,
-        'v-input--dense': this.dense
-      }, this.themeClasses);
-    },
-    computedId: function computedId() {
-      return this.id || "input-" + this._uid;
-    },
-    hasDetails: function hasDetails() {
-      return this.messagesToDisplay.length > 0;
-    },
-    hasHint: function hasHint() {
-      return !this.hasMessages && !!this.hint && (this.persistentHint || this.isFocused);
-    },
-    hasLabel: function hasLabel() {
-      return !!(this.$slots.label || this.label);
-    },
-    // Proxy for `lazyValue`
-    // This allows an input
-    // to function without
-    // a provided model
-    internalValue: {
-      get: function get() {
-        return this.lazyValue;
-      },
-      set: function set(val) {
-        this.lazyValue = val;
-        this.$emit(this.$_modelEvent, val);
-      }
-    },
-    isDirty: function isDirty() {
-      return !!this.lazyValue;
-    },
-    isLabelActive: function isLabelActive() {
-      return this.isDirty;
-    },
-    messagesToDisplay: function messagesToDisplay() {
-      var _this = this;
-
-      if (this.hasHint) return [this.hint];
-      if (!this.hasMessages) return [];
-      return this.validations.map(function (validation) {
-        if (typeof validation === 'string') return validation;
-        var validationResult = validation(_this.internalValue);
-        return typeof validationResult === 'string' ? validationResult : '';
-      }).filter(function (message) {
-        return message !== '';
-      });
-    },
-    showDetails: function showDetails() {
-      return this.hideDetails === false || this.hideDetails === 'auto' && this.hasDetails;
-    }
-  },
-  watch: {
-    value: function value(val) {
-      this.lazyValue = val;
-    }
-  },
-  beforeCreate: function beforeCreate() {
-    // v-radio-group needs to emit a different event
-    // https://github.com/vuetifyjs/vuetify/issues/4752
-    this.$_modelEvent = this.$options.model && this.$options.model.event || 'input';
-  },
-  methods: {
-    genContent: function genContent() {
-      return [this.genPrependSlot(), this.genControl(), this.genAppendSlot()];
-    },
-    genControl: function genControl() {
-      return this.$createElement('div', {
-        staticClass: 'v-input__control'
-      }, [this.genInputSlot(), this.genMessages()]);
-    },
-    genDefaultSlot: function genDefaultSlot() {
-      return [this.genLabel(), this.$slots.default];
-    },
-    genIcon: function genIcon(type, cb, extraData) {
-      var _this = this;
-
-      if (extraData === void 0) {
-        extraData = {};
-      }
-
-      var icon = this[type + "Icon"];
-      var eventName = "click:" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["kebabCase"])(type);
-      var hasListener = !!(this.listeners$[eventName] || cb);
-      var data = Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_7__["default"])({
-        attrs: {
-          'aria-label': hasListener ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["kebabCase"])(type).split('-')[0] + ' icon' : undefined,
-          color: this.validationState,
-          dark: this.dark,
-          disabled: this.isDisabled,
-          light: this.light
-        },
-        on: !hasListener ? undefined : {
-          click: function click(e) {
-            e.preventDefault();
-            e.stopPropagation();
-
-            _this.$emit(eventName, e);
-
-            cb && cb(e);
-          },
-          // Container has g event that will
-          // trigger menu open if enclosed
-          mouseup: function mouseup(e) {
-            e.preventDefault();
-            e.stopPropagation();
-          }
-        }
-      }, extraData);
-      return this.$createElement('div', {
-        staticClass: "v-input__icon",
-        class: type ? "v-input__icon--" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["kebabCase"])(type) : undefined
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], data, icon)]);
-    },
-    genInputSlot: function genInputSlot() {
-      return this.$createElement('div', this.setBackgroundColor(this.backgroundColor, {
-        staticClass: 'v-input__slot',
-        style: {
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.height)
-        },
-        on: {
-          click: this.onClick,
-          mousedown: this.onMouseDown,
-          mouseup: this.onMouseUp
-        },
-        ref: 'input-slot'
-      }), [this.genDefaultSlot()]);
-    },
-    genLabel: function genLabel() {
-      if (!this.hasLabel) return null;
-      return this.$createElement(_VLabel__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          color: this.validationState,
-          dark: this.dark,
-          disabled: this.isDisabled,
-          focused: this.hasState,
-          for: this.computedId,
-          light: this.light
-        }
-      }, this.$slots.label || this.label);
-    },
-    genMessages: function genMessages() {
-      var _this = this;
-
-      if (!this.showDetails) return null;
-      return this.$createElement(_VMessages__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        props: {
-          color: this.hasHint ? '' : this.validationState,
-          dark: this.dark,
-          light: this.light,
-          value: this.messagesToDisplay
-        },
-        attrs: {
-          role: this.hasMessages ? 'alert' : null
-        },
-        scopedSlots: {
-          default: function _default(props) {
-            return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["getSlot"])(_this, 'message', props);
-          }
-        }
-      });
-    },
-    genSlot: function genSlot(type, location, slot) {
-      if (!slot.length) return null;
-      var ref = type + "-" + location;
-      return this.$createElement('div', {
-        staticClass: "v-input__" + ref,
-        ref: ref
-      }, slot);
-    },
-    genPrependSlot: function genPrependSlot() {
-      var slot = [];
-
-      if (this.$slots.prepend) {
-        slot.push(this.$slots.prepend);
-      } else if (this.prependIcon) {
-        slot.push(this.genIcon('prepend'));
-      }
-
-      return this.genSlot('prepend', 'outer', slot);
-    },
-    genAppendSlot: function genAppendSlot() {
-      var slot = []; // Append icon for text field was really
-      // an appended inner icon, v-text-field
-      // will overwrite this method in order to obtain
-      // backwards compat
-
-      if (this.$slots.append) {
-        slot.push(this.$slots.append);
-      } else if (this.appendIcon) {
-        slot.push(this.genIcon('append'));
-      }
-
-      return this.genSlot('append', 'outer', slot);
-    },
-    onClick: function onClick(e) {
-      this.$emit('click', e);
-    },
-    onMouseDown: function onMouseDown(e) {
-      this.hasMouseDown = true;
-      this.$emit('mousedown', e);
-    },
-    onMouseUp: function onMouseUp(e) {
-      this.hasMouseDown = false;
-      this.$emit('mouseup', e);
-    }
-  },
-  render: function render(h) {
-    return h('div', this.setTextColor(this.validationState, {
-      staticClass: 'v-input',
-      class: this.classes
-    }), this.genContent());
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VInput/index.ts":
-/*!****************************************!*\
-  !*** ./src/components/VInput/index.ts ***!
-  \****************************************/
-/*! exports provided: VInput, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VInput */ "./src/components/VInput/VInput.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VInput", function() { return _VInput__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VInput__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VItemGroup/VItem.ts":
-/*!********************************************!*\
-  !*** ./src/components/VItemGroup/VItem.ts ***!
-  \********************************************/
-/*! exports provided: BaseItem, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseItem", function() { return BaseItem; });
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);
-// Mixins
- // Utilities
-
-
- // Types
-
-
-/* @vue/component */
-
-var BaseItem = vue__WEBPACK_IMPORTED_MODULE_3___default.a.extend({
-  props: {
-    activeClass: String,
-    value: {
-      required: false
-    }
-  },
-  data: function data() {
-    return {
-      isActive: false
-    };
-  },
-  methods: {
-    toggle: function toggle() {
-      this.isActive = !this.isActive;
-    }
-  },
-  render: function render() {
-    var _a;
-
-    if (!this.$scopedSlots.default) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_2__["consoleWarn"])('v-item is missing a default scopedSlot', this);
-      return null;
-    }
-
-    var element;
-    /* istanbul ignore else */
-
-    if (this.$scopedSlots.default) {
-      element = this.$scopedSlots.default({
-        active: this.isActive,
-        toggle: this.toggle
-      });
-    }
-
-    if (Array.isArray(element) && element.length === 1) {
-      element = element[0];
-    }
-
-    if (!element || Array.isArray(element) || !element.tag) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_2__["consoleWarn"])('v-item should only contain a single element', this);
-      return element;
-    }
-
-    element.data = this._b(element.data || {}, element.tag, {
-      class: (_a = {}, _a[this.activeClass] = this.isActive, _a)
-    });
-    return element;
-  }
-});
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(BaseItem, Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_0__["factory"])('itemGroup', 'v-item', 'v-item-group')).extend({
-  name: 'v-item'
-}));
-
-/***/ }),
-
-/***/ "./src/components/VItemGroup/VItemGroup.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VItemGroup/VItemGroup.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VItemGroup/VItemGroup.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VItemGroup/VItemGroup.ts ***!
-  \*************************************************/
-/*! exports provided: BaseItemGroup, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseItemGroup", function() { return BaseItemGroup; });
-/* harmony import */ var _VItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VItemGroup.sass */ "./src/components/VItemGroup/VItemGroup.sass");
-/* harmony import */ var _VItemGroup_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
-
-
- // Utilities
-
-
-
-var BaseItemGroup = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_proxyable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'base-item-group',
-  props: {
-    activeClass: {
-      type: String,
-      default: 'v-item--active'
-    },
-    mandatory: Boolean,
-    max: {
-      type: [Number, String],
-      default: null
-    },
-    multiple: Boolean
-  },
-  data: function data() {
-    return {
-      // As long as a value is defined, show it
-      // Otherwise, check if multiple
-      // to determine which default to provide
-      internalLazyValue: this.value !== undefined ? this.value : this.multiple ? [] : undefined,
-      items: []
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-item-group': true
-      }, this.themeClasses);
-    },
-    selectedIndex: function selectedIndex() {
-      return this.selectedItem && this.items.indexOf(this.selectedItem) || -1;
-    },
-    selectedItem: function selectedItem() {
-      if (this.multiple) return undefined;
-      return this.selectedItems[0];
-    },
-    selectedItems: function selectedItems() {
-      var _this = this;
-
-      return this.items.filter(function (item, index) {
-        return _this.toggleMethod(_this.getValue(item, index));
-      });
-    },
-    selectedValues: function selectedValues() {
-      if (this.internalValue == null) return [];
-      return Array.isArray(this.internalValue) ? this.internalValue : [this.internalValue];
-    },
-    toggleMethod: function toggleMethod() {
-      var _this = this;
-
-      if (!this.multiple) {
-        return function (v) {
-          return _this.internalValue === v;
-        };
-      }
-
-      var internalValue = this.internalValue;
-
-      if (Array.isArray(internalValue)) {
-        return function (v) {
-          return internalValue.includes(v);
-        };
-      }
-
-      return function () {
-        return false;
-      };
-    }
-  },
-  watch: {
-    internalValue: 'updateItemsState',
-    items: 'updateItemsState'
-  },
-  created: function created() {
-    if (this.multiple && !Array.isArray(this.internalValue)) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_4__["consoleWarn"])('Model must be bound to an array if the multiple property is true.', this);
-    }
-  },
-  methods: {
-    genData: function genData() {
-      return {
-        class: this.classes
-      };
-    },
-    getValue: function getValue(item, i) {
-      return item.value == null || item.value === '' ? i : item.value;
-    },
-    onClick: function onClick(item) {
-      this.updateInternalValue(this.getValue(item, this.items.indexOf(item)));
-    },
-    register: function register(item) {
-      var _this = this;
-
-      var index = this.items.push(item) - 1;
-      item.$on('change', function () {
-        return _this.onClick(item);
-      }); // If no value provided and mandatory,
-      // assign first registered item
-
-      if (this.mandatory && !this.selectedValues.length) {
-        this.updateMandatory();
-      }
-
-      this.updateItem(item, index);
-    },
-    unregister: function unregister(item) {
-      if (this._isDestroyed) return;
-      var index = this.items.indexOf(item);
-      var value = this.getValue(item, index);
-      this.items.splice(index, 1);
-      var valueIndex = this.selectedValues.indexOf(value); // Items is not selected, do nothing
-
-      if (valueIndex < 0) return; // If not mandatory, use regular update process
-
-      if (!this.mandatory) {
-        return this.updateInternalValue(value);
-      } // Remove the value
-
-
-      if (this.multiple && Array.isArray(this.internalValue)) {
-        this.internalValue = this.internalValue.filter(function (v) {
-          return v !== value;
-        });
-      } else {
-        this.internalValue = undefined;
-      } // If mandatory and we have no selection
-      // add the last item as value
-
-      /* istanbul ignore else */
-
-
-      if (!this.selectedItems.length) {
-        this.updateMandatory(true);
-      }
-    },
-    updateItem: function updateItem(item, index) {
-      var value = this.getValue(item, index);
-      item.isActive = this.toggleMethod(value);
-    },
-    // https://github.com/vuetifyjs/vuetify/issues/5352
-    updateItemsState: function updateItemsState() {
-      var _this = this;
-
-      this.$nextTick(function () {
-        if (_this.mandatory && !_this.selectedItems.length) {
-          return _this.updateMandatory();
-        } // TODO: Make this smarter so it
-        // doesn't have to iterate every
-        // child in an update
-
-
-        _this.items.forEach(_this.updateItem);
-      });
-    },
-    updateInternalValue: function updateInternalValue(value) {
-      this.multiple ? this.updateMultiple(value) : this.updateSingle(value);
-    },
-    updateMandatory: function updateMandatory(last) {
-      if (!this.items.length) return;
-      var items = this.items.slice();
-      if (last) items.reverse();
-      var item = items.find(function (item) {
-        return !item.disabled;
-      }); // If no tabs are available
-      // aborts mandatory value
-
-      if (!item) return;
-      var index = this.items.indexOf(item);
-      this.updateInternalValue(this.getValue(item, index));
-    },
-    updateMultiple: function updateMultiple(value) {
-      var defaultValue = Array.isArray(this.internalValue) ? this.internalValue : [];
-      var internalValue = defaultValue.slice();
-      var index = internalValue.findIndex(function (val) {
-        return val === value;
-      });
-      if (this.mandatory && // Item already exists
-      index > -1 && // value would be reduced below min
-      internalValue.length - 1 < 1) return;
-      if ( // Max is set
-      this.max != null && // Item doesn't exist
-      index < 0 && // value would be increased above max
-      internalValue.length + 1 > this.max) return;
-      index > -1 ? internalValue.splice(index, 1) : internalValue.push(value);
-      this.internalValue = internalValue;
-    },
-    updateSingle: function updateSingle(value) {
-      var isSame = value === this.internalValue;
-      if (this.mandatory && isSame) return;
-      this.internalValue = isSame ? undefined : value;
-    }
-  },
-  render: function render(h) {
-    return h('div', this.genData(), this.$slots.default);
-  }
-});
-/* harmony default export */ __webpack_exports__["default"] = (BaseItemGroup.extend({
-  name: 'v-item-group',
-  provide: function provide() {
-    return {
-      itemGroup: this
-    };
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VItemGroup/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VItemGroup/index.ts ***!
-  \********************************************/
-/*! exports provided: VItem, VItemGroup, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VItem */ "./src/components/VItemGroup/VItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VItem", function() { return _VItem__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VItemGroup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VItemGroup", function() { return _VItemGroup__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VItem: _VItem__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VItemGroup: _VItemGroup__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VLabel/VLabel.sass":
-/*!*******************************************!*\
-  !*** ./src/components/VLabel/VLabel.sass ***!
-  \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VLabel/VLabel.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VLabel/VLabel.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VLabel_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VLabel.sass */ "./src/components/VLabel/VLabel.sass");
-/* harmony import */ var _VLabel_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VLabel_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
- // Helpers
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'v-label',
-  functional: true,
-  props: {
-    absolute: Boolean,
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    disabled: Boolean,
-    focused: Boolean,
-    for: String,
-    left: {
-      type: [Number, String],
-      default: 0
-    },
-    right: {
-      type: [Number, String],
-      default: 'auto'
-    },
-    value: Boolean
-  },
-  render: function render(h, ctx) {
-    var children = ctx.children,
-        listeners = ctx.listeners,
-        props = ctx.props;
-    var data = {
-      staticClass: 'v-label',
-      class: __assign({
-        'v-label--active': props.value,
-        'v-label--is-disabled': props.disabled
-      }, Object(_mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["functionalThemeClasses"])(ctx)),
-      attrs: {
-        for: props.for,
-        'aria-hidden': !props.for
-      },
-      on: listeners,
-      style: {
-        left: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(props.left),
-        right: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(props.right),
-        position: props.absolute ? 'absolute' : 'relative'
-      },
-      ref: 'label'
-    };
-    return h('label', _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.setTextColor(props.focused && props.color, data), children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VLabel/index.ts":
-/*!****************************************!*\
-  !*** ./src/components/VLabel/index.ts ***!
-  \****************************************/
-/*! exports provided: VLabel, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VLabel */ "./src/components/VLabel/VLabel.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VLabel", function() { return _VLabel__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VLabel__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VLazy/VLazy.ts":
-/*!***************************************!*\
-  !*** ./src/components/VLazy/VLazy.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _directives_intersect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../directives/intersect */ "./src/directives/intersect/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Mixins
-
-
-
- // Directives
-
- // Utilities
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_measurable__WEBPACK_IMPORTED_MODULE_0__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__["default"]).extend({
-  name: 'VLazy',
-  directives: {
-    intersect: _directives_intersect__WEBPACK_IMPORTED_MODULE_2__["default"]
-  },
-  props: {
-    options: {
-      type: Object,
-      // For more information on types, navigate to:
-      // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
-      default: function _default() {
-        return {
-          root: undefined,
-          rootMargin: undefined,
-          threshold: undefined
-        };
-      }
-    },
-    tag: {
-      type: String,
-      default: 'div'
-    },
-    transition: {
-      type: String,
-      default: 'fade-transition'
-    }
-  },
-  computed: {
-    styles: function styles() {
-      return __assign({}, this.measurableStyles);
-    }
-  },
-  methods: {
-    genContent: function genContent() {
-      var slot = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(this);
-      /* istanbul ignore if */
-
-      if (!this.transition) return slot;
-      var children = [];
-      if (this.isActive) children.push(slot);
-      return this.$createElement('transition', {
-        props: {
-          name: this.transition
-        }
-      }, children);
-    },
-    onObserve: function onObserve(entries, observer, isIntersecting) {
-      if (this.isActive) return;
-      this.isActive = isIntersecting;
-    }
-  },
-  render: function render(h) {
-    return h(this.tag, {
-      staticClass: 'v-lazy',
-      attrs: this.$attrs,
-      directives: [{
-        name: 'intersect',
-        value: {
-          handler: this.onObserve,
-          options: this.options
-        }
-      }],
-      on: this.$listeners,
-      style: this.styles
-    }, [this.genContent()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VLazy/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VLazy/index.ts ***!
-  \***************************************/
-/*! exports provided: VLazy, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VLazy__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VLazy */ "./src/components/VLazy/VLazy.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VLazy", function() { return _VLazy__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VLazy__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VList/VList.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VList/VList.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VList/VList.ts":
-/*!***************************************!*\
-  !*** ./src/components/VList/VList.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VList_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VList.sass */ "./src/components/VList/VList.sass");
-/* harmony import */ var _VList_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VList_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}; // Styles
-
-
- // Components
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].extend().extend({
-  name: 'v-list',
-  provide: function provide() {
-    return {
-      isInList: true,
-      list: this
-    };
-  },
-  inject: {
-    isInMenu: {
-      default: false
-    },
-    isInNav: {
-      default: false
-    }
-  },
-  props: {
-    dense: Boolean,
-    disabled: Boolean,
-    expand: Boolean,
-    flat: Boolean,
-    nav: Boolean,
-    rounded: Boolean,
-    subheader: Boolean,
-    threeLine: Boolean,
-    twoLine: Boolean
-  },
-  data: function data() {
-    return {
-      groups: []
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-list--dense': this.dense,
-        'v-list--disabled': this.disabled,
-        'v-list--flat': this.flat,
-        'v-list--nav': this.nav,
-        'v-list--rounded': this.rounded,
-        'v-list--subheader': this.subheader,
-        'v-list--two-line': this.twoLine,
-        'v-list--three-line': this.threeLine
-      });
-    }
-  },
-  methods: {
-    register: function register(content) {
-      this.groups.push(content);
-    },
-    unregister: function unregister(content) {
-      var index = this.groups.findIndex(function (g) {
-        return g._uid === content._uid;
-      });
-      if (index > -1) this.groups.splice(index, 1);
-    },
-    listClick: function listClick(uid) {
-      var e_1, _a;
-
-      if (this.expand) return;
-
-      try {
-        for (var _b = __values(this.groups), _c = _b.next(); !_c.done; _c = _b.next()) {
-          var group = _c.value;
-          group.toggle(uid);
-        }
-      } catch (e_1_1) {
-        e_1 = {
-          error: e_1_1
-        };
-      } finally {
-        try {
-          if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
-        } finally {
-          if (e_1) throw e_1.error;
-        }
-      }
-    }
-  },
-  render: function render(h) {
-    var data = {
-      staticClass: 'v-list',
-      class: this.classes,
-      style: this.styles,
-      attrs: __assign({
-        role: this.isInNav || this.isInMenu ? undefined : 'list'
-      }, this.attrs$)
-    };
-    return h(this.tag, this.setBackgroundColor(this.color, data), [this.$slots.default]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VList/VListGroup.sass":
-/*!**********************************************!*\
-  !*** ./src/components/VList/VListGroup.sass ***!
-  \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VList/VListGroup.ts":
-/*!********************************************!*\
-  !*** ./src/components/VList/VListGroup.ts ***!
-  \********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VListGroup_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VListGroup.sass */ "./src/components/VList/VListGroup.sass");
-/* harmony import */ var _VListGroup_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VListGroup_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VListItem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VListItem */ "./src/components/VList/VListItem.ts");
-/* harmony import */ var _VListItemIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VListItemIcon */ "./src/components/VList/VListItemIcon.ts");
-/* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts");
-/* harmony import */ var _mixins_bootable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/bootable */ "./src/mixins/bootable/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
-
-
- // Mixins
-
-
-
-
-
- // Directives
-
- // Transitions
-
- // Utils
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_11__["default"])(_mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_bootable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_6__["default"], Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_8__["inject"])('list'), _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__["default"]);
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-list-group',
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_9__["default"]
-  },
-  props: {
-    activeClass: {
-      type: String,
-      default: ''
-    },
-    appendIcon: {
-      type: String,
-      default: '$expand'
-    },
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    disabled: Boolean,
-    group: String,
-    noAction: Boolean,
-    prependIcon: String,
-    ripple: {
-      type: [Boolean, Object],
-      default: true
-    },
-    subGroup: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return {
-        'v-list-group--active': this.isActive,
-        'v-list-group--disabled': this.disabled,
-        'v-list-group--no-action': this.noAction,
-        'v-list-group--sub-group': this.subGroup
-      };
-    }
-  },
-  watch: {
-    isActive: function isActive(val) {
-      /* istanbul ignore else */
-      if (!this.subGroup && val) {
-        this.list && this.list.listClick(this._uid);
-      }
-    },
-    $route: 'onRouteChange'
-  },
-  created: function created() {
-    this.list && this.list.register(this);
-
-    if (this.group && this.$route && this.value == null) {
-      this.isActive = this.matchRoute(this.$route.path);
-    }
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.list && this.list.unregister(this);
-  },
-  methods: {
-    click: function click(e) {
-      var _this = this;
-
-      if (this.disabled) return;
-      this.isBooted = true;
-      this.$emit('click', e);
-      this.$nextTick(function () {
-        return _this.isActive = !_this.isActive;
-      });
-    },
-    genIcon: function genIcon(icon) {
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], icon);
-    },
-    genAppendIcon: function genAppendIcon() {
-      var icon = !this.subGroup ? this.appendIcon : false;
-      if (!icon && !this.$slots.appendIcon) return null;
-      return this.$createElement(_VListItemIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        staticClass: 'v-list-group__header__append-icon'
-      }, [this.$slots.appendIcon || this.genIcon(icon)]);
-    },
-    genHeader: function genHeader() {
-      var _a;
-
-      return this.$createElement(_VListItem__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        staticClass: 'v-list-group__header',
-        attrs: {
-          'aria-expanded': String(this.isActive),
-          role: 'button'
-        },
-        class: (_a = {}, _a[this.activeClass] = this.isActive, _a),
-        props: {
-          inputValue: this.isActive
-        },
-        directives: [{
-          name: 'ripple',
-          value: this.ripple
-        }],
-        on: __assign(__assign({}, this.listeners$), {
-          click: this.click
-        })
-      }, [this.genPrependIcon(), this.$slots.activator, this.genAppendIcon()]);
-    },
-    genItems: function genItems() {
-      var _this = this;
-
-      return this.showLazyContent(function () {
-        return [_this.$createElement('div', {
-          staticClass: 'v-list-group__items',
-          directives: [{
-            name: 'show',
-            value: _this.isActive
-          }]
-        }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getSlot"])(_this))];
-      });
-    },
-    genPrependIcon: function genPrependIcon() {
-      var icon = this.subGroup && this.prependIcon == null ? '$subgroup' : this.prependIcon;
-      if (!icon && !this.$slots.prependIcon) return null;
-      return this.$createElement(_VListItemIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        staticClass: 'v-list-group__header__prepend-icon'
-      }, [this.$slots.prependIcon || this.genIcon(icon)]);
-    },
-    onRouteChange: function onRouteChange(to) {
-      /* istanbul ignore if */
-      if (!this.group) return;
-      var isActive = this.matchRoute(to.path);
-      /* istanbul ignore else */
-
-      if (isActive && this.isActive !== isActive) {
-        this.list && this.list.listClick(this._uid);
-      }
-
-      this.isActive = isActive;
-    },
-    toggle: function toggle(uid) {
-      var _this = this;
-
-      var isActive = this._uid === uid;
-      if (isActive) this.isBooted = true;
-      this.$nextTick(function () {
-        return _this.isActive = isActive;
-      });
-    },
-    matchRoute: function matchRoute(to) {
-      return to.match(this.group) !== null;
-    }
-  },
-  render: function render(h) {
-    return h('div', this.setTextColor(this.isActive && this.color, {
-      staticClass: 'v-list-group',
-      class: this.classes
-    }), [this.genHeader(), h(_transitions__WEBPACK_IMPORTED_MODULE_10__["VExpandTransition"], this.genItems())]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VList/VListItem.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VList/VListItem.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VList/VListItem.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VList/VListItem.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VListItem_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VListItem.sass */ "./src/components/VList/VListItem.sass");
-/* harmony import */ var _VListItem_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VListItem_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/routable */ "./src/mixins/routable/index.ts");
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
-
-
- // Directives
-
- // Utilities
-
-
- // Types
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_9__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_routable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_3__["factory"])('listItemGroup'), Object(_mixins_toggleable__WEBPACK_IMPORTED_MODULE_5__["factory"])('inputValue'));
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-list-item',
-  directives: {
-    Ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_6__["default"]
-  },
-  inject: {
-    isInGroup: {
-      default: false
-    },
-    isInList: {
-      default: false
-    },
-    isInMenu: {
-      default: false
-    },
-    isInNav: {
-      default: false
-    }
-  },
-  inheritAttrs: false,
-  props: {
-    activeClass: {
-      type: String,
-      default: function _default() {
-        if (!this.listItemGroup) return '';
-        return this.listItemGroup.activeClass;
-      }
-    },
-    dense: Boolean,
-    inactive: Boolean,
-    link: Boolean,
-    selectable: {
-      type: Boolean
-    },
-    tag: {
-      type: String,
-      default: 'div'
-    },
-    threeLine: Boolean,
-    twoLine: Boolean,
-    value: null
-  },
-  data: function data() {
-    return {
-      proxyClass: 'v-list-item--active'
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign({
-        'v-list-item': true
-      }, _mixins_routable__WEBPACK_IMPORTED_MODULE_2__["default"].options.computed.classes.call(this)), {
-        'v-list-item--dense': this.dense,
-        'v-list-item--disabled': this.disabled,
-        'v-list-item--link': this.isClickable && !this.inactive,
-        'v-list-item--selectable': this.selectable,
-        'v-list-item--three-line': this.threeLine,
-        'v-list-item--two-line': this.twoLine
-      }), this.themeClasses);
-    },
-    isClickable: function isClickable() {
-      return Boolean(_mixins_routable__WEBPACK_IMPORTED_MODULE_2__["default"].options.computed.isClickable.call(this) || this.listItemGroup);
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('avatar')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_8__["removed"])('avatar', this);
-    }
-  },
-  methods: {
-    click: function click(e) {
-      if (e.detail) this.$el.blur();
-      this.$emit('click', e);
-      this.to || this.toggle();
-    },
-    genAttrs: function genAttrs() {
-      var attrs = __assign({
-        'aria-disabled': this.disabled ? true : undefined,
-        tabindex: this.isClickable && !this.disabled ? 0 : -1
-      }, this.$attrs);
-
-      if (this.$attrs.hasOwnProperty('role')) {// do nothing, role already provided
-      } else if (this.isInNav) {// do nothing, role is inherit
-      } else if (this.isInGroup) {
-        attrs.role = 'listitem';
-        attrs['aria-selected'] = String(this.isActive);
-      } else if (this.isInMenu) {
-        attrs.role = this.isClickable ? 'menuitem' : undefined;
-        attrs.id = attrs.id || "list-item-" + this._uid;
-      } else if (this.isInList) {
-        attrs.role = 'listitem';
-      }
-
-      return attrs;
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var _a = this.generateRouteLink(),
-        tag = _a.tag,
-        data = _a.data;
-
-    data.attrs = __assign(__assign({}, data.attrs), this.genAttrs());
-    data[this.to ? 'nativeOn' : 'on'] = __assign(__assign({}, data[this.to ? 'nativeOn' : 'on']), {
-      keydown: function keydown(e) {
-        /* istanbul ignore else */
-        if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_7__["keyCodes"].enter) _this.click(e);
-
-        _this.$emit('keydown', e);
-      }
-    });
-    if (this.inactive) tag = 'div';
-
-    if (this.inactive && this.to) {
-      data.on = data.nativeOn;
-      delete data.nativeOn;
-    }
-
-    var children = this.$scopedSlots.default ? this.$scopedSlots.default({
-      active: this.isActive,
-      toggle: this.toggle
-    }) : this.$slots.default;
-    return h(tag, this.setTextColor(this.color, data), children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VList/VListItemAction.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VList/VListItemAction.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-// Types
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'v-list-item-action',
-  functional: true,
-  render: function render(h, _a) {
-    var data = _a.data,
-        _b = _a.children,
-        children = _b === void 0 ? [] : _b;
-    data.staticClass = data.staticClass ? "v-list-item__action " + data.staticClass : 'v-list-item__action';
-    var filteredChild = children.filter(function (VNode) {
-      return VNode.isComment === false && VNode.text !== ' ';
-    });
-    if (filteredChild.length > 1) data.staticClass += ' v-list-item__action--stack';
-    return h('div', data, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VList/VListItemAvatar.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VList/VListItemAvatar.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VAvatar */ "./src/components/VAvatar/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Components
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
-  name: 'v-list-item-avatar',
-  props: {
-    horizontal: Boolean,
-    size: {
-      type: [Number, String],
-      default: 40
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({
-        'v-list-item__avatar--horizontal': this.horizontal
-      }, _VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"].options.computed.classes.call(this)), {
-        'v-avatar--tile': this.tile || this.horizontal
-      });
-    }
-  },
-  render: function render(h) {
-    var render = _VAvatar__WEBPACK_IMPORTED_MODULE_0__["default"].options.render.call(this, h);
-    render.data = render.data || {};
-    render.data.staticClass += ' v-list-item__avatar';
-    return render;
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VList/VListItemGroup.sass":
-/*!**************************************************!*\
-  !*** ./src/components/VList/VListItemGroup.sass ***!
-  \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VList/VListItemGroup.ts":
-/*!************************************************!*\
-  !*** ./src/components/VList/VListItemGroup.ts ***!
-  \************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VListItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VListItemGroup.sass */ "./src/components/VList/VListItemGroup.sass");
-/* harmony import */ var _VListItemGroup_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VListItemGroup_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
- // Mixins
-
- // Utilities
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__["BaseItemGroup"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'v-list-item-group',
-  provide: function provide() {
-    return {
-      isInGroup: true,
-      listItemGroup: this
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__["BaseItemGroup"].options.computed.classes.call(this)), {
-        'v-list-item-group': true
-      });
-    }
-  },
-  methods: {
-    genData: function genData() {
-      return this.setTextColor(this.color, __assign(__assign({}, _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__["BaseItemGroup"].options.methods.genData.call(this)), {
-        attrs: {
-          role: 'listbox'
-        }
-      }));
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VList/VListItemIcon.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VList/VListItemIcon.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-// Types
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'v-list-item-icon',
-  functional: true,
-  render: function render(h, _a) {
-    var data = _a.data,
-        children = _a.children;
-    data.staticClass = ("v-list-item__icon " + (data.staticClass || '')).trim();
-    return h('div', data, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VList/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VList/index.ts ***!
-  \***************************************/
-/*! exports provided: VListItemActionText, VListItemContent, VListItemTitle, VListItemSubtitle, VList, VListGroup, VListItem, VListItemAction, VListItemAvatar, VListItemIcon, VListItemGroup, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VListItemActionText", function() { return VListItemActionText; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VListItemContent", function() { return VListItemContent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VListItemTitle", function() { return VListItemTitle; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VListItemSubtitle", function() { return VListItemSubtitle; });
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _VList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VList */ "./src/components/VList/VList.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VList", function() { return _VList__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _VListGroup__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VListGroup */ "./src/components/VList/VListGroup.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListGroup", function() { return _VListGroup__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-/* harmony import */ var _VListItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VListItem */ "./src/components/VList/VListItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItem", function() { return _VListItem__WEBPACK_IMPORTED_MODULE_3__["default"]; });
-
-/* harmony import */ var _VListItemGroup__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VListItemGroup */ "./src/components/VList/VListItemGroup.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemGroup", function() { return _VListItemGroup__WEBPACK_IMPORTED_MODULE_4__["default"]; });
-
-/* harmony import */ var _VListItemAction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VListItemAction */ "./src/components/VList/VListItemAction.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemAction", function() { return _VListItemAction__WEBPACK_IMPORTED_MODULE_5__["default"]; });
-
-/* harmony import */ var _VListItemAvatar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./VListItemAvatar */ "./src/components/VList/VListItemAvatar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemAvatar", function() { return _VListItemAvatar__WEBPACK_IMPORTED_MODULE_6__["default"]; });
-
-/* harmony import */ var _VListItemIcon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./VListItemIcon */ "./src/components/VList/VListItemIcon.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemIcon", function() { return _VListItemIcon__WEBPACK_IMPORTED_MODULE_7__["default"]; });
-
-
-
-
-
-
-
-
-
-var VListItemActionText = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-list-item__action-text', 'span');
-var VListItemContent = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-list-item__content', 'div');
-var VListItemTitle = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-list-item__title', 'div');
-var VListItemSubtitle = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-list-item__subtitle', 'div');
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VList: _VList__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VListGroup: _VListGroup__WEBPACK_IMPORTED_MODULE_2__["default"],
-    VListItem: _VListItem__WEBPACK_IMPORTED_MODULE_3__["default"],
-    VListItemAction: _VListItemAction__WEBPACK_IMPORTED_MODULE_5__["default"],
-    VListItemActionText: VListItemActionText,
-    VListItemAvatar: _VListItemAvatar__WEBPACK_IMPORTED_MODULE_6__["default"],
-    VListItemContent: VListItemContent,
-    VListItemGroup: _VListItemGroup__WEBPACK_IMPORTED_MODULE_4__["default"],
-    VListItemIcon: _VListItemIcon__WEBPACK_IMPORTED_MODULE_7__["default"],
-    VListItemSubtitle: VListItemSubtitle,
-    VListItemTitle: VListItemTitle
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VMain/VMain.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VMain/VMain.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VMain/VMain.ts":
-/*!***************************************!*\
-  !*** ./src/components/VMain/VMain.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VMain_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VMain.sass */ "./src/components/VMain/VMain.sass");
-/* harmony import */ var _VMain_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VMain_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts");
-// Styles
- // Mixins
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-main',
-  props: {
-    tag: {
-      type: String,
-      default: 'main'
-    }
-  },
-  computed: {
-    styles: function styles() {
-      var _a = this.$vuetify.application,
-          bar = _a.bar,
-          top = _a.top,
-          right = _a.right,
-          footer = _a.footer,
-          insetFooter = _a.insetFooter,
-          bottom = _a.bottom,
-          left = _a.left;
-      return {
-        paddingTop: top + bar + "px",
-        paddingRight: right + "px",
-        paddingBottom: footer + insetFooter + bottom + "px",
-        paddingLeft: left + "px"
-      };
-    }
-  },
-  render: function render(h) {
-    var data = {
-      staticClass: 'v-main',
-      style: this.styles,
-      ref: 'main'
-    };
-    return h(this.tag, data, [h('div', {
-      staticClass: 'v-main__wrap'
-    }, this.$slots.default)]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VMain/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VMain/index.ts ***!
-  \***************************************/
-/*! exports provided: VMain, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VMain__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VMain */ "./src/components/VMain/VMain.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VMain", function() { return _VMain__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VMain__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VMenu/VMenu.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VMenu/VMenu.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VMenu/VMenu.ts":
-/*!***************************************!*\
-  !*** ./src/components/VMenu/VMenu.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VMenu_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VMenu.sass */ "./src/components/VMenu/VMenu.sass");
-/* harmony import */ var _VMenu_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VMenu_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VThemeProvider */ "./src/components/VThemeProvider/index.ts");
-/* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/activatable */ "./src/mixins/activatable/index.ts");
-/* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts");
-/* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts");
-/* harmony import */ var _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/detachable */ "./src/mixins/detachable/index.ts");
-/* harmony import */ var _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/menuable */ "./src/mixins/menuable/index.ts");
-/* harmony import */ var _mixins_returnable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/returnable */ "./src/mixins/returnable/index.ts");
-/* harmony import */ var _mixins_roundable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/roundable */ "./src/mixins/roundable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts");
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Styles
-
-
- // Components
-
- // Mixins
-
-
-
-
-
-
-
-
-
- // Directives
-
-
- // Utilities
-
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_13__["default"])(_mixins_dependent__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__["default"], _mixins_returnable__WEBPACK_IMPORTED_MODULE_7__["default"], _mixins_roundable__WEBPACK_IMPORTED_MODULE_8__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_9__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_10__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-menu',
-  directives: {
-    ClickOutside: _directives_click_outside__WEBPACK_IMPORTED_MODULE_11__["default"],
-    Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_12__["default"]
-  },
-  provide: function provide() {
-    return {
-      isInMenu: true,
-      // Pass theme through to default slot
-      theme: this.theme
-    };
-  },
-  props: {
-    auto: Boolean,
-    closeOnClick: {
-      type: Boolean,
-      default: true
-    },
-    closeOnContentClick: {
-      type: Boolean,
-      default: true
-    },
-    disabled: Boolean,
-    disableKeys: Boolean,
-    maxHeight: {
-      type: [Number, String],
-      default: 'auto'
-    },
-    offsetX: Boolean,
-    offsetY: Boolean,
-    openOnClick: {
-      type: Boolean,
-      default: true
-    },
-    openOnHover: Boolean,
-    origin: {
-      type: String,
-      default: 'top left'
-    },
-    transition: {
-      type: [Boolean, String],
-      default: 'v-menu-transition'
-    }
-  },
-  data: function data() {
-    return {
-      calculatedTopAuto: 0,
-      defaultOffset: 8,
-      hasJustFocused: false,
-      listIndex: -1,
-      resizeTimeout: 0,
-      selectedIndex: null,
-      tiles: []
-    };
-  },
-  computed: {
-    activeTile: function activeTile() {
-      return this.tiles[this.listIndex];
-    },
-    calculatedLeft: function calculatedLeft() {
-      var menuWidth = Math.max(this.dimensions.content.width, parseFloat(this.calculatedMinWidth));
-      if (!this.auto) return this.calcLeft(menuWidth) || '0';
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_15__["convertToUnit"])(this.calcXOverflow(this.calcLeftAuto(), menuWidth)) || '0';
-    },
-    calculatedMaxHeight: function calculatedMaxHeight() {
-      var height = this.auto ? '200px' : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_15__["convertToUnit"])(this.maxHeight);
-      return height || '0';
-    },
-    calculatedMaxWidth: function calculatedMaxWidth() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_15__["convertToUnit"])(this.maxWidth) || '0';
-    },
-    calculatedMinWidth: function calculatedMinWidth() {
-      if (this.minWidth) {
-        return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_15__["convertToUnit"])(this.minWidth) || '0';
-      }
-
-      var minWidth = Math.min(this.dimensions.activator.width + Number(this.nudgeWidth) + (this.auto ? 16 : 0), Math.max(this.pageWidth - 24, 0));
-      var calculatedMaxWidth = isNaN(parseInt(this.calculatedMaxWidth)) ? minWidth : parseInt(this.calculatedMaxWidth);
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_15__["convertToUnit"])(Math.min(calculatedMaxWidth, minWidth)) || '0';
-    },
-    calculatedTop: function calculatedTop() {
-      var top = !this.auto ? this.calcTop() : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_15__["convertToUnit"])(this.calcYOverflow(this.calculatedTopAuto));
-      return top || '0';
-    },
-    hasClickableTiles: function hasClickableTiles() {
-      return Boolean(this.tiles.find(function (tile) {
-        return tile.tabIndex > -1;
-      }));
-    },
-    styles: function styles() {
-      return {
-        maxHeight: this.calculatedMaxHeight,
-        minWidth: this.calculatedMinWidth,
-        maxWidth: this.calculatedMaxWidth,
-        top: this.calculatedTop,
-        left: this.calculatedLeft,
-        transformOrigin: this.origin,
-        zIndex: this.zIndex || this.activeZIndex
-      };
-    }
-  },
-  watch: {
-    isActive: function isActive(val) {
-      if (!val) this.listIndex = -1;
-    },
-    isContentActive: function isContentActive(val) {
-      this.hasJustFocused = val;
-    },
-    listIndex: function listIndex(next, prev) {
-      if (next in this.tiles) {
-        var tile = this.tiles[next];
-        tile.classList.add('v-list-item--highlighted');
-        this.$refs.content.scrollTop = tile.offsetTop - tile.clientHeight;
-      }
-
-      prev in this.tiles && this.tiles[prev].classList.remove('v-list-item--highlighted');
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('full-width')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_14__["removed"])('full-width', this);
-    }
-  },
-  mounted: function mounted() {
-    this.isActive && this.callActivate();
-  },
-  methods: {
-    activate: function activate() {
-      var _this = this; // Update coordinates and dimensions of menu
-      // and its activator
-
-
-      this.updateDimensions(); // Start the transition
-
-      requestAnimationFrame(function () {
-        // Once transitioning, calculate scroll and top position
-        _this.startTransition().then(function () {
-          if (_this.$refs.content) {
-            _this.calculatedTopAuto = _this.calcTopAuto();
-            _this.auto && (_this.$refs.content.scrollTop = _this.calcScrollPosition());
-          }
-        });
-      });
-    },
-    calcScrollPosition: function calcScrollPosition() {
-      var $el = this.$refs.content;
-      var activeTile = $el.querySelector('.v-list-item--active');
-      var maxScrollTop = $el.scrollHeight - $el.offsetHeight;
-      return activeTile ? Math.min(maxScrollTop, Math.max(0, activeTile.offsetTop - $el.offsetHeight / 2 + activeTile.offsetHeight / 2)) : $el.scrollTop;
-    },
-    calcLeftAuto: function calcLeftAuto() {
-      return parseInt(this.dimensions.activator.left - this.defaultOffset * 2);
-    },
-    calcTopAuto: function calcTopAuto() {
-      var $el = this.$refs.content;
-      var activeTile = $el.querySelector('.v-list-item--active');
-
-      if (!activeTile) {
-        this.selectedIndex = null;
-      }
-
-      if (this.offsetY || !activeTile) {
-        return this.computedTop;
-      }
-
-      this.selectedIndex = Array.from(this.tiles).indexOf(activeTile);
-      var tileDistanceFromMenuTop = activeTile.offsetTop - this.calcScrollPosition();
-      var firstTileOffsetTop = $el.querySelector('.v-list-item').offsetTop;
-      return this.computedTop - tileDistanceFromMenuTop - firstTileOffsetTop - 1;
-    },
-    changeListIndex: function changeListIndex(e) {
-      // For infinite scroll and autocomplete, re-evaluate children
-      this.getTiles();
-
-      if (!this.isActive || !this.hasClickableTiles) {
-        return;
-      } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].tab) {
-        this.isActive = false;
-        return;
-      } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].down) {
-        this.nextTile();
-      } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].up) {
-        this.prevTile();
-      } else if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].enter && this.listIndex !== -1) {
-        this.tiles[this.listIndex].click();
-      } else {
-        return;
-      } // One of the conditions was met, prevent default action (#2988)
-
-
-      e.preventDefault();
-    },
-    closeConditional: function closeConditional(e) {
-      var target = e.target;
-      return this.isActive && !this._isDestroyed && this.closeOnClick && !this.$refs.content.contains(target);
-    },
-    genActivatorAttributes: function genActivatorAttributes() {
-      var attributes = _mixins_activatable__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genActivatorAttributes.call(this);
-
-      if (this.activeTile && this.activeTile.id) {
-        return __assign(__assign({}, attributes), {
-          'aria-activedescendant': this.activeTile.id
-        });
-      }
-
-      return attributes;
-    },
-    genActivatorListeners: function genActivatorListeners() {
-      var listeners = _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__["default"].options.methods.genActivatorListeners.call(this);
-
-      if (!this.disableKeys) {
-        listeners.keydown = this.onKeyDown;
-      }
-
-      return listeners;
-    },
-    genTransition: function genTransition() {
-      var content = this.genContent();
-      if (!this.transition) return content;
-      return this.$createElement('transition', {
-        props: {
-          name: this.transition
-        }
-      }, [content]);
-    },
-    genDirectives: function genDirectives() {
-      var _this = this;
-
-      var directives = [{
-        name: 'show',
-        value: this.isContentActive
-      }]; // Do not add click outside for hover menu
-
-      if (!this.openOnHover && this.closeOnClick) {
-        directives.push({
-          name: 'click-outside',
-          value: {
-            handler: function handler() {
-              _this.isActive = false;
-            },
-            closeConditional: this.closeConditional,
-            include: function include() {
-              return __spread([_this.$el], _this.getOpenDependentElements());
-            }
-          }
-        });
-      }
-
-      return directives;
-    },
-    genContent: function genContent() {
-      var _a;
-
-      var _this = this;
-
-      var options = {
-        attrs: __assign(__assign({}, this.getScopeIdAttrs()), {
-          role: 'role' in this.$attrs ? this.$attrs.role : 'menu'
-        }),
-        staticClass: 'v-menu__content',
-        class: __assign(__assign(__assign({}, this.rootThemeClasses), this.roundedClasses), (_a = {
-          'v-menu__content--auto': this.auto,
-          'v-menu__content--fixed': this.activatorFixed,
-          menuable__content__active: this.isActive
-        }, _a[this.contentClass.trim()] = true, _a)),
-        style: this.styles,
-        directives: this.genDirectives(),
-        ref: 'content',
-        on: {
-          click: function click(e) {
-            var target = e.target;
-            if (target.getAttribute('disabled')) return;
-            if (_this.closeOnContentClick) _this.isActive = false;
-          },
-          keydown: this.onKeyDown
-        }
-      };
-
-      if (this.$listeners.scroll) {
-        options.on = options.on || {};
-        options.on.scroll = this.$listeners.scroll;
-      }
-
-      if (!this.disabled && this.openOnHover) {
-        options.on = options.on || {};
-        options.on.mouseenter = this.mouseEnterHandler;
-      }
-
-      if (this.openOnHover) {
-        options.on = options.on || {};
-        options.on.mouseleave = this.mouseLeaveHandler;
-      }
-
-      return this.$createElement('div', options, this.getContentSlot());
-    },
-    getTiles: function getTiles() {
-      if (!this.$refs.content) return;
-      this.tiles = Array.from(this.$refs.content.querySelectorAll('.v-list-item'));
-    },
-    mouseEnterHandler: function mouseEnterHandler() {
-      var _this = this;
-
-      this.runDelay('open', function () {
-        if (_this.hasJustFocused) return;
-        _this.hasJustFocused = true;
-      });
-    },
-    mouseLeaveHandler: function mouseLeaveHandler(e) {
-      var _this = this; // Prevent accidental re-activation
-
-
-      this.runDelay('close', function () {
-        if (_this.$refs.content.contains(e.relatedTarget)) return;
-        requestAnimationFrame(function () {
-          _this.isActive = false;
-
-          _this.callDeactivate();
-        });
-      });
-    },
-    nextTile: function nextTile() {
-      var tile = this.tiles[this.listIndex + 1];
-
-      if (!tile) {
-        if (!this.tiles.length) return;
-        this.listIndex = -1;
-        this.nextTile();
-        return;
-      }
-
-      this.listIndex++;
-      if (tile.tabIndex === -1) this.nextTile();
-    },
-    prevTile: function prevTile() {
-      var tile = this.tiles[this.listIndex - 1];
-
-      if (!tile) {
-        if (!this.tiles.length) return;
-        this.listIndex = this.tiles.length;
-        this.prevTile();
-        return;
-      }
-
-      this.listIndex--;
-      if (tile.tabIndex === -1) this.prevTile();
-    },
-    onKeyDown: function onKeyDown(e) {
-      var _this = this;
-
-      if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].esc) {
-        // Wait for dependent elements to close first
-        setTimeout(function () {
-          _this.isActive = false;
-        });
-        var activator_1 = this.getActivator();
-        this.$nextTick(function () {
-          return activator_1 && activator_1.focus();
-        });
-      } else if (!this.isActive && [_util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].up, _util_helpers__WEBPACK_IMPORTED_MODULE_15__["keyCodes"].down].includes(e.keyCode)) {
-        this.isActive = true;
-      } // Allow for isActive watcher to generate tile list
-
-
-      this.$nextTick(function () {
-        return _this.changeListIndex(e);
-      });
-    },
-    onResize: function onResize() {
-      if (!this.isActive) return; // Account for screen resize
-      // and orientation change
-      // eslint-disable-next-line no-unused-expressions
-
-      this.$refs.content.offsetWidth;
-      this.updateDimensions(); // When resizing to a smaller width
-      // content width is evaluated before
-      // the new activator width has been
-      // set, causing it to not size properly
-      // hacky but will revisit in the future
-
-      clearTimeout(this.resizeTimeout);
-      this.resizeTimeout = window.setTimeout(this.updateDimensions, 100);
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var data = {
-      staticClass: 'v-menu',
-      class: {
-        'v-menu--attached': this.attach === '' || this.attach === true || this.attach === 'attach'
-      },
-      directives: [{
-        arg: '500',
-        name: 'resize',
-        value: this.onResize
-      }]
-    };
-    return h('div', data, [!this.activator && this.genActivator(), this.showLazyContent(function () {
-      return [_this.$createElement(_VThemeProvider__WEBPACK_IMPORTED_MODULE_1__["VThemeProvider"], {
-        props: {
-          root: true,
-          light: _this.light,
-          dark: _this.dark
-        }
-      }, [_this.genTransition()])];
-    })]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VMenu/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VMenu/index.ts ***!
-  \***************************************/
-/*! exports provided: VMenu, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VMenu */ "./src/components/VMenu/VMenu.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VMenu", function() { return _VMenu__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VMenu__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VMessages/VMessages.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VMessages/VMessages.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VMessages/VMessages.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VMessages/VMessages.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VMessages_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VMessages.sass */ "./src/components/VMessages/VMessages.sass");
-/* harmony import */ var _VMessages_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VMessages_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-// Styles
- // Mixins
-
-
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'v-messages',
-  props: {
-    value: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    }
-  },
-  methods: {
-    genChildren: function genChildren() {
-      return this.$createElement('transition-group', {
-        staticClass: 'v-messages__wrapper',
-        attrs: {
-          name: 'message-transition',
-          tag: 'div'
-        }
-      }, this.value.map(this.genMessage));
-    },
-    genMessage: function genMessage(message, key) {
-      return this.$createElement('div', {
-        staticClass: 'v-messages__message',
-        key: key
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getSlot"])(this, 'default', {
-        message: message,
-        key: key
-      }) || [message]);
-    }
-  },
-  render: function render(h) {
-    return h('div', this.setTextColor(this.color, {
-      staticClass: 'v-messages',
-      class: this.themeClasses
-    }), [this.genChildren()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VMessages/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VMessages/index.ts ***!
-  \*******************************************/
-/*! exports provided: VMessages, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VMessages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VMessages */ "./src/components/VMessages/VMessages.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VMessages", function() { return _VMessages__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VMessages__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VNavigationDrawer/VNavigationDrawer.sass":
-/*!*****************************************************************!*\
-  !*** ./src/components/VNavigationDrawer/VNavigationDrawer.sass ***!
-  \*****************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VNavigationDrawer/VNavigationDrawer.ts":
-/*!***************************************************************!*\
-  !*** ./src/components/VNavigationDrawer/VNavigationDrawer.ts ***!
-  \***************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VNavigationDrawer_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VNavigationDrawer.sass */ "./src/components/VNavigationDrawer/VNavigationDrawer.sass");
-/* harmony import */ var _VNavigationDrawer_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VNavigationDrawer_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VImg_VImg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VImg/VImg */ "./src/components/VImg/VImg.ts");
-/* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts");
-/* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts");
-/* harmony import */ var _mixins_overlayable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/overlayable */ "./src/mixins/overlayable/index.ts");
-/* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts");
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../directives/touch */ "./src/directives/touch/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
- // Mixins
-
-
-
-
-
-
-
- // Directives
-
-
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_13__["default"])(Object(_mixins_applicationable__WEBPACK_IMPORTED_MODULE_2__["default"])('left', ['isActive', 'isMobile', 'miniVariant', 'expandOnHover', 'permanent', 'right', 'temporary', 'width']), _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_overlayable__WEBPACK_IMPORTED_MODULE_6__["default"], _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_7__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-navigation-drawer',
-  directives: {
-    ClickOutside: _directives_click_outside__WEBPACK_IMPORTED_MODULE_9__["default"],
-    Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_10__["default"],
-    Touch: _directives_touch__WEBPACK_IMPORTED_MODULE_11__["default"]
-  },
-  provide: function provide() {
-    return {
-      isInNav: this.tag === 'nav'
-    };
-  },
-  props: {
-    bottom: Boolean,
-    clipped: Boolean,
-    disableResizeWatcher: Boolean,
-    disableRouteWatcher: Boolean,
-    expandOnHover: Boolean,
-    floating: Boolean,
-    height: {
-      type: [Number, String],
-      default: function _default() {
-        return this.app ? '100vh' : '100%';
-      }
-    },
-    miniVariant: Boolean,
-    miniVariantWidth: {
-      type: [Number, String],
-      default: 56
-    },
-    permanent: Boolean,
-    right: Boolean,
-    src: {
-      type: [String, Object],
-      default: ''
-    },
-    stateless: Boolean,
-    tag: {
-      type: String,
-      default: function _default() {
-        return this.app ? 'nav' : 'aside';
-      }
-    },
-    temporary: Boolean,
-    touchless: Boolean,
-    width: {
-      type: [Number, String],
-      default: 256
-    },
-    value: null
-  },
-  data: function data() {
-    return {
-      isMouseover: false,
-      touchArea: {
-        left: 0,
-        right: 0
-      },
-      stackMinZIndex: 6
-    };
-  },
-  computed: {
-    /**
-     * Used for setting an app value from a dynamic
-     * property. Called from applicationable.js
-     */
-    applicationProperty: function applicationProperty() {
-      return this.right ? 'right' : 'left';
-    },
-    classes: function classes() {
-      return __assign({
-        'v-navigation-drawer': true,
-        'v-navigation-drawer--absolute': this.absolute,
-        'v-navigation-drawer--bottom': this.bottom,
-        'v-navigation-drawer--clipped': this.clipped,
-        'v-navigation-drawer--close': !this.isActive,
-        'v-navigation-drawer--fixed': !this.absolute && (this.app || this.fixed),
-        'v-navigation-drawer--floating': this.floating,
-        'v-navigation-drawer--is-mobile': this.isMobile,
-        'v-navigation-drawer--is-mouseover': this.isMouseover,
-        'v-navigation-drawer--mini-variant': this.isMiniVariant,
-        'v-navigation-drawer--custom-mini-variant': Number(this.miniVariantWidth) !== 56,
-        'v-navigation-drawer--open': this.isActive,
-        'v-navigation-drawer--open-on-hover': this.expandOnHover,
-        'v-navigation-drawer--right': this.right,
-        'v-navigation-drawer--temporary': this.temporary
-      }, this.themeClasses);
-    },
-    computedMaxHeight: function computedMaxHeight() {
-      if (!this.hasApp) return null;
-      var computedMaxHeight = this.$vuetify.application.bottom + this.$vuetify.application.footer + this.$vuetify.application.bar;
-      if (!this.clipped) return computedMaxHeight;
-      return computedMaxHeight + this.$vuetify.application.top;
-    },
-    computedTop: function computedTop() {
-      if (!this.hasApp) return 0;
-      var computedTop = this.$vuetify.application.bar;
-      computedTop += this.clipped ? this.$vuetify.application.top : 0;
-      return computedTop;
-    },
-    computedTransform: function computedTransform() {
-      if (this.isActive) return 0;
-      if (this.isBottom) return 100;
-      return this.right ? 100 : -100;
-    },
-    computedWidth: function computedWidth() {
-      return this.isMiniVariant ? this.miniVariantWidth : this.width;
-    },
-    hasApp: function hasApp() {
-      return this.app && !this.isMobile && !this.temporary;
-    },
-    isBottom: function isBottom() {
-      return this.bottom && this.isMobile;
-    },
-    isMiniVariant: function isMiniVariant() {
-      return !this.expandOnHover && this.miniVariant || this.expandOnHover && !this.isMouseover;
-    },
-    isMobile: function isMobile() {
-      return !this.stateless && !this.permanent && _mixins_mobile__WEBPACK_IMPORTED_MODULE_5__["default"].options.computed.isMobile.call(this);
-    },
-    reactsToClick: function reactsToClick() {
-      return !this.stateless && !this.permanent && (this.isMobile || this.temporary);
-    },
-    reactsToMobile: function reactsToMobile() {
-      return this.app && !this.disableResizeWatcher && !this.permanent && !this.stateless && !this.temporary;
-    },
-    reactsToResize: function reactsToResize() {
-      return !this.disableResizeWatcher && !this.stateless;
-    },
-    reactsToRoute: function reactsToRoute() {
-      return !this.disableRouteWatcher && !this.stateless && (this.temporary || this.isMobile);
-    },
-    showOverlay: function showOverlay() {
-      return !this.hideOverlay && this.isActive && (this.isMobile || this.temporary);
-    },
-    styles: function styles() {
-      var translate = this.isBottom ? 'translateY' : 'translateX';
-      return {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["convertToUnit"])(this.height),
-        top: !this.isBottom ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["convertToUnit"])(this.computedTop) : 'auto',
-        maxHeight: this.computedMaxHeight != null ? "calc(100% - " + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["convertToUnit"])(this.computedMaxHeight) + ")" : undefined,
-        transform: translate + "(" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["convertToUnit"])(this.computedTransform, '%') + ")",
-        width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["convertToUnit"])(this.computedWidth)
-      };
-    }
-  },
-  watch: {
-    $route: 'onRouteChange',
-    isActive: function isActive(val) {
-      this.$emit('input', val);
-    },
-
-    /**
-     * When mobile changes, adjust the active state
-     * only when there has been a previous value
-     */
-    isMobile: function isMobile(val, prev) {
-      !val && this.isActive && !this.temporary && this.removeOverlay();
-      if (prev == null || !this.reactsToResize || !this.reactsToMobile) return;
-      this.isActive = !val;
-    },
-    permanent: function permanent(val) {
-      // If enabling prop enable the drawer
-      if (val) this.isActive = true;
-    },
-    showOverlay: function showOverlay(val) {
-      if (val) this.genOverlay();else this.removeOverlay();
-    },
-    value: function value(val) {
-      if (this.permanent) return;
-
-      if (val == null) {
-        this.init();
-        return;
-      }
-
-      if (val !== this.isActive) this.isActive = val;
-    },
-    expandOnHover: 'updateMiniVariant',
-    isMouseover: function isMouseover(val) {
-      this.updateMiniVariant(!val);
-    }
-  },
-  beforeMount: function beforeMount() {
-    this.init();
-  },
-  methods: {
-    calculateTouchArea: function calculateTouchArea() {
-      var parent = this.$el.parentNode;
-      if (!parent) return;
-      var parentRect = parent.getBoundingClientRect();
-      this.touchArea = {
-        left: parentRect.left + 50,
-        right: parentRect.right - 50
-      };
-    },
-    closeConditional: function closeConditional() {
-      return this.isActive && !this._isDestroyed && this.reactsToClick;
-    },
-    genAppend: function genAppend() {
-      return this.genPosition('append');
-    },
-    genBackground: function genBackground() {
-      var props = {
-        height: '100%',
-        width: '100%',
-        src: this.src
-      };
-      var image = this.$scopedSlots.img ? this.$scopedSlots.img(props) : this.$createElement(_VImg_VImg__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: props
-      });
-      return this.$createElement('div', {
-        staticClass: 'v-navigation-drawer__image'
-      }, [image]);
-    },
-    genDirectives: function genDirectives() {
-      var _this = this;
-
-      var directives = [{
-        name: 'click-outside',
-        value: {
-          handler: function handler() {
-            _this.isActive = false;
-          },
-          closeConditional: this.closeConditional,
-          include: this.getOpenDependentElements
-        }
-      }];
-
-      if (!this.touchless && !this.stateless) {
-        directives.push({
-          name: 'touch',
-          value: {
-            parent: true,
-            left: this.swipeLeft,
-            right: this.swipeRight
-          }
-        });
-      }
-
-      return directives;
-    },
-    genListeners: function genListeners() {
-      var _this = this;
-
-      var on = {
-        transitionend: function transitionend(e) {
-          if (e.target !== e.currentTarget) return;
-
-          _this.$emit('transitionend', e); // IE11 does not support new Event('resize')
-
-
-          var resizeEvent = document.createEvent('UIEvents');
-          resizeEvent.initUIEvent('resize', true, false, window, 0);
-          window.dispatchEvent(resizeEvent);
-        }
-      };
-
-      if (this.miniVariant) {
-        on.click = function () {
-          return _this.$emit('update:mini-variant', false);
-        };
-      }
-
-      if (this.expandOnHover) {
-        on.mouseenter = function () {
-          return _this.isMouseover = true;
-        };
-
-        on.mouseleave = function () {
-          return _this.isMouseover = false;
-        };
-      }
-
-      return on;
-    },
-    genPosition: function genPosition(name) {
-      var slot = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getSlot"])(this, name);
-      if (!slot) return slot;
-      return this.$createElement('div', {
-        staticClass: "v-navigation-drawer__" + name
-      }, slot);
-    },
-    genPrepend: function genPrepend() {
-      return this.genPosition('prepend');
-    },
-    genContent: function genContent() {
-      return this.$createElement('div', {
-        staticClass: 'v-navigation-drawer__content'
-      }, this.$slots.default);
-    },
-    genBorder: function genBorder() {
-      return this.$createElement('div', {
-        staticClass: 'v-navigation-drawer__border'
-      });
-    },
-    init: function init() {
-      if (this.permanent) {
-        this.isActive = true;
-      } else if (this.stateless || this.value != null) {
-        this.isActive = this.value;
-      } else if (!this.temporary) {
-        this.isActive = !this.isMobile;
-      }
-    },
-    onRouteChange: function onRouteChange() {
-      if (this.reactsToRoute && this.closeConditional()) {
-        this.isActive = false;
-      }
-    },
-    swipeLeft: function swipeLeft(e) {
-      if (this.isActive && this.right) return;
-      this.calculateTouchArea();
-      if (Math.abs(e.touchendX - e.touchstartX) < 100) return;
-      if (this.right && e.touchstartX >= this.touchArea.right) this.isActive = true;else if (!this.right && this.isActive) this.isActive = false;
-    },
-    swipeRight: function swipeRight(e) {
-      if (this.isActive && !this.right) return;
-      this.calculateTouchArea();
-      if (Math.abs(e.touchendX - e.touchstartX) < 100) return;
-      if (!this.right && e.touchstartX <= this.touchArea.left) this.isActive = true;else if (this.right && this.isActive) this.isActive = false;
-    },
-
-    /**
-     * Update the application layout
-     */
-    updateApplication: function updateApplication() {
-      if (!this.isActive || this.isMobile || this.temporary || !this.$el) return 0;
-      var width = Number(this.computedWidth);
-      return isNaN(width) ? this.$el.clientWidth : width;
-    },
-    updateMiniVariant: function updateMiniVariant(val) {
-      if (this.miniVariant !== val) this.$emit('update:mini-variant', val);
-    }
-  },
-  render: function render(h) {
-    var children = [this.genPrepend(), this.genContent(), this.genAppend(), this.genBorder()];
-    if (this.src || Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getSlot"])(this, 'img')) children.unshift(this.genBackground());
-    return h(this.tag, this.setBackgroundColor(this.color, {
-      class: this.classes,
-      style: this.styles,
-      directives: this.genDirectives(),
-      on: this.genListeners()
-    }), children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VNavigationDrawer/index.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VNavigationDrawer/index.ts ***!
-  \***************************************************/
-/*! exports provided: VNavigationDrawer, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VNavigationDrawer */ "./src/components/VNavigationDrawer/VNavigationDrawer.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VNavigationDrawer", function() { return _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VNavigationDrawer__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VOverflowBtn/VOverflowBtn.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VOverflowBtn/VOverflowBtn.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VOverflowBtn/VOverflowBtn.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VOverflowBtn/VOverflowBtn.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VOverflowBtn_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VOverflowBtn.sass */ "./src/components/VOverflowBtn/VOverflowBtn.sass");
-/* harmony import */ var _VOverflowBtn_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VOverflowBtn_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSelect/VSelect */ "./src/components/VSelect/VSelect.ts");
-/* harmony import */ var _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VAutocomplete */ "./src/components/VAutocomplete/index.ts");
-/* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
-
-
- // Components
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].extend({
-  name: 'v-overflow-btn',
-  props: {
-    editable: Boolean,
-    segmented: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].options.computed.classes.call(this)), {
-        'v-overflow-btn': true,
-        'v-overflow-btn--segmented': this.segmented,
-        'v-overflow-btn--editable': this.editable
-      });
-    },
-    isAnyValueAllowed: function isAnyValueAllowed() {
-      return this.editable || _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].options.computed.isAnyValueAllowed.call(this);
-    },
-    isSingle: function isSingle() {
-      return true;
-    },
-    computedItems: function computedItems() {
-      return this.segmented ? this.allItems : this.filteredItems;
-    }
-  },
-  methods: {
-    genSelections: function genSelections() {
-      return this.editable ? _VAutocomplete__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genSelections.call(this) : _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genSelections.call(this); // Override v-autocomplete's override
-    },
-    genCommaSelection: function genCommaSelection(item, index, last) {
-      return this.segmented ? this.genSegmentedBtn(item) : _VSelect_VSelect__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genCommaSelection.call(this, item, index, last);
-    },
-    genInput: function genInput() {
-      var input = _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_3__["default"].options.methods.genInput.call(this);
-      input.data = input.data || {};
-      input.data.domProps.value = this.editable ? this.internalSearch : '';
-      input.data.attrs.readonly = !this.isAnyValueAllowed;
-      return input;
-    },
-    genLabel: function genLabel() {
-      if (this.editable && this.isFocused) return null;
-      var label = _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_3__["default"].options.methods.genLabel.call(this);
-      if (!label) return label;
-      label.data = label.data || {}; // Reset previously set styles from parent
-
-      label.data.style = {};
-      return label;
-    },
-    genSegmentedBtn: function genSegmentedBtn(item) {
-      var _this = this;
-
-      var itemValue = this.getValue(item);
-      var itemObj = this.computedItems.find(function (i) {
-        return _this.getValue(i) === itemValue;
-      }) || item;
-
-      if (!itemObj.text || !itemObj.callback) {
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_5__["consoleWarn"])('When using "segmented" prop without a selection slot, items must contain both a text and callback property', this);
-        return null;
-      }
-
-      return this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_4__["default"], {
-        props: {
-          text: true
-        },
-        on: {
-          click: function click(e) {
-            e.stopPropagation();
-            itemObj.callback(e);
-          }
-        }
-      }, [itemObj.text]);
-    },
-    updateValue: function updateValue(val) {
-      if (val) {
-        this.initialValue = this.lazyValue;
-      } else if (this.initialValue !== this.lazyValue) {
-        this.$emit('change', this.lazyValue);
-      }
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VOverflowBtn/index.ts":
-/*!**********************************************!*\
-  !*** ./src/components/VOverflowBtn/index.ts ***!
-  \**********************************************/
-/*! exports provided: VOverflowBtn, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VOverflowBtn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VOverflowBtn */ "./src/components/VOverflowBtn/VOverflowBtn.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VOverflowBtn", function() { return _VOverflowBtn__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VOverflowBtn__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VOverlay/VOverlay.sass":
-/*!***********************************************!*\
-  !*** ./src/components/VOverlay/VOverlay.sass ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VOverlay/VOverlay.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VOverlay/VOverlay.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VOverlay_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VOverlay.sass */ "./src/components/VOverlay/VOverlay.sass");
-/* harmony import */ var _VOverlay_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VOverlay_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'v-overlay',
-  props: {
-    absolute: Boolean,
-    color: {
-      type: String,
-      default: '#212121'
-    },
-    dark: {
-      type: Boolean,
-      default: true
-    },
-    opacity: {
-      type: [Number, String],
-      default: 0.46
-    },
-    value: {
-      default: true
-    },
-    zIndex: {
-      type: [Number, String],
-      default: 5
-    }
-  },
-  computed: {
-    __scrim: function __scrim() {
-      var data = this.setBackgroundColor(this.color, {
-        staticClass: 'v-overlay__scrim',
-        style: {
-          opacity: this.computedOpacity
-        }
-      });
-      return this.$createElement('div', data);
-    },
-    classes: function classes() {
-      return __assign({
-        'v-overlay--absolute': this.absolute,
-        'v-overlay--active': this.isActive
-      }, this.themeClasses);
-    },
-    computedOpacity: function computedOpacity() {
-      return Number(this.isActive ? this.opacity : 0);
-    },
-    styles: function styles() {
-      return {
-        zIndex: this.zIndex
-      };
-    }
-  },
-  methods: {
-    genContent: function genContent() {
-      return this.$createElement('div', {
-        staticClass: 'v-overlay__content'
-      }, this.$slots.default);
-    }
-  },
-  render: function render(h) {
-    var children = [this.__scrim];
-    if (this.isActive) children.push(this.genContent());
-    return h('div', {
-      staticClass: 'v-overlay',
-      class: this.classes,
-      style: this.styles
-    }, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VOverlay/index.ts":
-/*!******************************************!*\
-  !*** ./src/components/VOverlay/index.ts ***!
-  \******************************************/
-/*! exports provided: VOverlay, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VOverlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VOverlay */ "./src/components/VOverlay/VOverlay.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VOverlay", function() { return _VOverlay__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VOverlay__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VPagination/VPagination.sass":
-/*!*****************************************************!*\
-  !*** ./src/components/VPagination/VPagination.sass ***!
-  \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VPagination/VPagination.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VPagination/VPagination.ts ***!
-  \***************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VPagination_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VPagination.sass */ "./src/components/VPagination/VPagination.sass");
-/* harmony import */ var _VPagination_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VPagination_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/intersectable */ "./src/mixins/intersectable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-};
-
-
- // Directives
-
- // Mixins
-
-
-
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"], Object(_mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__["default"])({
-  onVisible: ['init']
-}), _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"]).extend({
-  name: 'v-pagination',
-  directives: {
-    Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_2__["default"]
-  },
-  props: {
-    circle: Boolean,
-    disabled: Boolean,
-    length: {
-      type: Number,
-      default: 0,
-      validator: function validator(val) {
-        return val % 1 === 0;
-      }
-    },
-    nextIcon: {
-      type: String,
-      default: '$next'
-    },
-    prevIcon: {
-      type: String,
-      default: '$prev'
-    },
-    totalVisible: [Number, String],
-    value: {
-      type: Number,
-      default: 0
-    },
-    pageAriaLabel: {
-      type: String,
-      default: '$vuetify.pagination.ariaLabel.page'
-    },
-    currentPageAriaLabel: {
-      type: String,
-      default: '$vuetify.pagination.ariaLabel.currentPage'
-    },
-    previousAriaLabel: {
-      type: String,
-      default: '$vuetify.pagination.ariaLabel.previous'
-    },
-    nextAriaLabel: {
-      type: String,
-      default: '$vuetify.pagination.ariaLabel.next'
-    },
-    wrapperAriaLabel: {
-      type: String,
-      default: '$vuetify.pagination.ariaLabel.wrapper'
-    }
-  },
-  data: function data() {
-    return {
-      maxButtons: 0,
-      selected: null
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-pagination': true,
-        'v-pagination--circle': this.circle,
-        'v-pagination--disabled': this.disabled
-      }, this.themeClasses);
-    },
-    items: function items() {
-      var totalVisible = parseInt(this.totalVisible, 10);
-
-      if (totalVisible === 0) {
-        return [];
-      }
-
-      var maxLength = Math.min(Math.max(0, totalVisible) || this.length, Math.max(0, this.maxButtons) || this.length, this.length);
-
-      if (this.length <= maxLength) {
-        return this.range(1, this.length);
-      }
-
-      var even = maxLength % 2 === 0 ? 1 : 0;
-      var left = Math.floor(maxLength / 2);
-      var right = this.length - left + 1 + even;
-
-      if (this.value > left && this.value < right) {
-        var start = this.value - left + 2;
-        var end = this.value + left - 2 - even;
-        return __spread([1, '...'], this.range(start, end), ['...', this.length]);
-      } else if (this.value === left) {
-        var end = this.value + left - 1 - even;
-        return __spread(this.range(1, end), ['...', this.length]);
-      } else if (this.value === right) {
-        var start = this.value - left + 1;
-        return __spread([1, '...'], this.range(start, this.length));
-      } else {
-        return __spread(this.range(1, left), ['...'], this.range(right, this.length));
-      }
-    }
-  },
-  watch: {
-    value: function value() {
-      this.init();
-    }
-  },
-  mounted: function mounted() {
-    this.init();
-  },
-  methods: {
-    init: function init() {
-      var _this = this;
-
-      this.selected = null;
-      this.$nextTick(this.onResize); // TODO: Change this (f75dee3a, cbdf7caa)
-
-      setTimeout(function () {
-        return _this.selected = _this.value;
-      }, 100);
-    },
-    onResize: function onResize() {
-      var width = this.$el && this.$el.parentElement ? this.$el.parentElement.clientWidth : window.innerWidth;
-      this.maxButtons = Math.floor((width - 96) / 42);
-    },
-    next: function next(e) {
-      e.preventDefault();
-      this.$emit('input', this.value + 1);
-      this.$emit('next');
-    },
-    previous: function previous(e) {
-      e.preventDefault();
-      this.$emit('input', this.value - 1);
-      this.$emit('previous');
-    },
-    range: function range(from, to) {
-      var range = [];
-      from = from > 0 ? from : 1;
-
-      for (var i = from; i <= to; i++) {
-        range.push(i);
-      }
-
-      return range;
-    },
-    genIcon: function genIcon(h, icon, disabled, fn, label) {
-      return h('li', [h('button', {
-        staticClass: 'v-pagination__navigation',
-        class: {
-          'v-pagination__navigation--disabled': disabled
-        },
-        attrs: {
-          type: 'button',
-          'aria-label': label
-        },
-        on: disabled ? {} : {
-          click: fn
-        }
-      }, [h(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], [icon])])]);
-    },
-    genItem: function genItem(h, i) {
-      var _this = this;
-
-      var color = i === this.value && (this.color || 'primary');
-      var isCurrentPage = i === this.value;
-      var ariaLabel = isCurrentPage ? this.currentPageAriaLabel : this.pageAriaLabel;
-      return h('button', this.setBackgroundColor(color, {
-        staticClass: 'v-pagination__item',
-        class: {
-          'v-pagination__item--active': i === this.value
-        },
-        attrs: {
-          type: 'button',
-          'aria-current': isCurrentPage,
-          'aria-label': this.$vuetify.lang.t(ariaLabel, i)
-        },
-        on: {
-          click: function click() {
-            return _this.$emit('input', i);
-          }
-        }
-      }), [i.toString()]);
-    },
-    genItems: function genItems(h) {
-      var _this = this;
-
-      return this.items.map(function (i, index) {
-        return h('li', {
-          key: index
-        }, [isNaN(Number(i)) ? h('span', {
-          class: 'v-pagination__more'
-        }, [i.toString()]) : _this.genItem(h, i)]);
-      });
-    },
-    genList: function genList(h, children) {
-      return h('ul', {
-        directives: [{
-          modifiers: {
-            quiet: true
-          },
-          name: 'resize',
-          value: this.onResize
-        }],
-        class: this.classes
-      }, children);
-    }
-  },
-  render: function render(h) {
-    var children = [this.genIcon(h, this.$vuetify.rtl ? this.nextIcon : this.prevIcon, this.value <= 1, this.previous, this.$vuetify.lang.t(this.previousAriaLabel)), this.genItems(h), this.genIcon(h, this.$vuetify.rtl ? this.prevIcon : this.nextIcon, this.value >= this.length, this.next, this.$vuetify.lang.t(this.nextAriaLabel))];
-    return h('nav', {
-      attrs: {
-        role: 'navigation',
-        'aria-label': this.$vuetify.lang.t(this.wrapperAriaLabel)
-      }
-    }, [this.genList(h, children)]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VPagination/index.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VPagination/index.ts ***!
-  \*********************************************/
-/*! exports provided: VPagination, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VPagination__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VPagination */ "./src/components/VPagination/VPagination.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VPagination", function() { return _VPagination__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VPagination__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VParallax/VParallax.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VParallax/VParallax.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VParallax/VParallax.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VParallax/VParallax.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VParallax_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VParallax.sass */ "./src/components/VParallax/VParallax.sass");
-/* harmony import */ var _VParallax_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VParallax_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_translatable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/translatable */ "./src/mixins/translatable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Style
- // Mixins
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_mixins_translatable__WEBPACK_IMPORTED_MODULE_1__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-parallax',
-  props: {
-    alt: {
-      type: String,
-      default: ''
-    },
-    height: {
-      type: [String, Number],
-      default: 500
-    },
-    src: String,
-    srcset: String
-  },
-  data: function data() {
-    return {
-      isBooted: false
-    };
-  },
-  computed: {
-    styles: function styles() {
-      return {
-        display: 'block',
-        opacity: this.isBooted ? 1 : 0,
-        transform: "translate(-50%, " + this.parallax + "px)"
-      };
-    }
-  },
-  mounted: function mounted() {
-    this.init();
-  },
-  methods: {
-    init: function init() {
-      var _this = this;
-
-      var img = this.$refs.img;
-      if (!img) return;
-
-      if (img.complete) {
-        this.translate();
-        this.listeners();
-      } else {
-        img.addEventListener('load', function () {
-          _this.translate();
-
-          _this.listeners();
-        }, false);
-      }
-
-      this.isBooted = true;
-    },
-    objHeight: function objHeight() {
-      return this.$refs.img.naturalHeight;
-    }
-  },
-  render: function render(h) {
-    var imgData = {
-      staticClass: 'v-parallax__image',
-      style: this.styles,
-      attrs: {
-        src: this.src,
-        srcset: this.srcset,
-        alt: this.alt
-      },
-      ref: 'img'
-    };
-    var container = h('div', {
-      staticClass: 'v-parallax__image-container'
-    }, [h('img', imgData)]);
-    var content = h('div', {
-      staticClass: 'v-parallax__content'
-    }, this.$slots.default);
-    return h('div', {
-      staticClass: 'v-parallax',
-      style: {
-        height: this.height + "px"
-      },
-      on: this.$listeners
-    }, [container, content]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VParallax/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VParallax/index.ts ***!
-  \*******************************************/
-/*! exports provided: VParallax, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VParallax__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VParallax */ "./src/components/VParallax/VParallax.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VParallax", function() { return _VParallax__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VParallax__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VPicker/VPicker.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VPicker/VPicker.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VPicker/VPicker.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VPicker/VPicker.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VPicker_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VPicker.sass */ "./src/components/VPicker/VPicker.sass");
-/* harmony import */ var _VPicker_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VPicker_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VCard_VCard_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VCard/VCard.sass */ "./src/components/VCard/VCard.sass");
-/* harmony import */ var _VCard_VCard_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_VCard_VCard_sass__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
- // Mixins
-
-
-
- // Helpers
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_4__["default"]).extend({
-  name: 'v-picker',
-  props: {
-    flat: Boolean,
-    fullWidth: Boolean,
-    landscape: Boolean,
-    noTitle: Boolean,
-    transition: {
-      type: String,
-      default: 'fade-transition'
-    },
-    width: {
-      type: [Number, String],
-      default: 290
-    }
-  },
-  computed: {
-    computedTitleColor: function computedTitleColor() {
-      var defaultTitleColor = this.isDark ? false : this.color || 'primary';
-      return this.color || defaultTitleColor;
-    }
-  },
-  methods: {
-    genTitle: function genTitle() {
-      return this.$createElement('div', this.setBackgroundColor(this.computedTitleColor, {
-        staticClass: 'v-picker__title',
-        class: {
-          'v-picker__title--landscape': this.landscape
-        }
-      }), this.$slots.title);
-    },
-    genBodyTransition: function genBodyTransition() {
-      return this.$createElement('transition', {
-        props: {
-          name: this.transition
-        }
-      }, this.$slots.default);
-    },
-    genBody: function genBody() {
-      return this.$createElement('div', {
-        staticClass: 'v-picker__body',
-        class: __assign({
-          'v-picker__body--no-title': this.noTitle
-        }, this.themeClasses),
-        style: this.fullWidth ? undefined : {
-          width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["convertToUnit"])(this.width)
-        }
-      }, [this.genBodyTransition()]);
-    },
-    genActions: function genActions() {
-      return this.$createElement('div', {
-        staticClass: 'v-picker__actions v-card__actions',
-        class: {
-          'v-picker__actions--no-title': this.noTitle
-        }
-      }, this.$slots.actions);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-picker v-card',
-      class: __assign(__assign({
-        'v-picker--flat': this.flat,
-        'v-picker--landscape': this.landscape,
-        'v-picker--full-width': this.fullWidth
-      }, this.themeClasses), this.elevationClasses)
-    }, [this.$slots.title ? this.genTitle() : null, this.genBody(), this.$slots.actions ? this.genActions() : null]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VPicker/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VPicker/index.ts ***!
-  \*****************************************/
-/*! exports provided: VPicker, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VPicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VPicker */ "./src/components/VPicker/VPicker.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VPicker", function() { return _VPicker__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VPicker__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VProgressCircular/VProgressCircular.sass":
-/*!*****************************************************************!*\
-  !*** ./src/components/VProgressCircular/VProgressCircular.sass ***!
-  \*****************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VProgressCircular/VProgressCircular.ts":
-/*!***************************************************************!*\
-  !*** ./src/components/VProgressCircular/VProgressCircular.ts ***!
-  \***************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VProgressCircular_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VProgressCircular.sass */ "./src/components/VProgressCircular/VProgressCircular.sass");
-/* harmony import */ var _VProgressCircular_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VProgressCircular_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-// Styles
- // Mixins
-
- // Utils
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-progress-circular',
-  props: {
-    button: Boolean,
-    indeterminate: Boolean,
-    rotate: {
-      type: [Number, String],
-      default: 0
-    },
-    size: {
-      type: [Number, String],
-      default: 32
-    },
-    width: {
-      type: [Number, String],
-      default: 4
-    },
-    value: {
-      type: [Number, String],
-      default: 0
-    }
-  },
-  data: function data() {
-    return {
-      radius: 20
-    };
-  },
-  computed: {
-    calculatedSize: function calculatedSize() {
-      return Number(this.size) + (this.button ? 8 : 0);
-    },
-    circumference: function circumference() {
-      return 2 * Math.PI * this.radius;
-    },
-    classes: function classes() {
-      return {
-        'v-progress-circular--indeterminate': this.indeterminate,
-        'v-progress-circular--button': this.button
-      };
-    },
-    normalizedValue: function normalizedValue() {
-      if (this.value < 0) {
-        return 0;
-      }
-
-      if (this.value > 100) {
-        return 100;
-      }
-
-      return parseFloat(this.value);
-    },
-    strokeDashArray: function strokeDashArray() {
-      return Math.round(this.circumference * 1000) / 1000;
-    },
-    strokeDashOffset: function strokeDashOffset() {
-      return (100 - this.normalizedValue) / 100 * this.circumference + 'px';
-    },
-    strokeWidth: function strokeWidth() {
-      return Number(this.width) / +this.size * this.viewBoxSize * 2;
-    },
-    styles: function styles() {
-      return {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["convertToUnit"])(this.calculatedSize),
-        width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["convertToUnit"])(this.calculatedSize)
-      };
-    },
-    svgStyles: function svgStyles() {
-      return {
-        transform: "rotate(" + Number(this.rotate) + "deg)"
-      };
-    },
-    viewBoxSize: function viewBoxSize() {
-      return this.radius / (1 - Number(this.width) / +this.size);
-    }
-  },
-  methods: {
-    genCircle: function genCircle(name, offset) {
-      return this.$createElement('circle', {
-        class: "v-progress-circular__" + name,
-        attrs: {
-          fill: 'transparent',
-          cx: 2 * this.viewBoxSize,
-          cy: 2 * this.viewBoxSize,
-          r: this.radius,
-          'stroke-width': this.strokeWidth,
-          'stroke-dasharray': this.strokeDashArray,
-          'stroke-dashoffset': offset
-        }
-      });
-    },
-    genSvg: function genSvg() {
-      var children = [this.indeterminate || this.genCircle('underlay', 0), this.genCircle('overlay', this.strokeDashOffset)];
-      return this.$createElement('svg', {
-        style: this.svgStyles,
-        attrs: {
-          xmlns: 'http://www.w3.org/2000/svg',
-          viewBox: this.viewBoxSize + " " + this.viewBoxSize + " " + 2 * this.viewBoxSize + " " + 2 * this.viewBoxSize
-        }
-      }, children);
-    },
-    genInfo: function genInfo() {
-      return this.$createElement('div', {
-        staticClass: 'v-progress-circular__info'
-      }, this.$slots.default);
-    }
-  },
-  render: function render(h) {
-    return h('div', this.setTextColor(this.color, {
-      staticClass: 'v-progress-circular',
-      attrs: {
-        role: 'progressbar',
-        'aria-valuemin': 0,
-        'aria-valuemax': 100,
-        'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue
-      },
-      class: this.classes,
-      style: this.styles,
-      on: this.$listeners
-    }), [this.genSvg(), this.genInfo()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VProgressCircular/index.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VProgressCircular/index.ts ***!
-  \***************************************************/
-/*! exports provided: VProgressCircular, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VProgressCircular__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VProgressCircular */ "./src/components/VProgressCircular/VProgressCircular.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VProgressCircular", function() { return _VProgressCircular__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VProgressCircular__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VProgressLinear/VProgressLinear.sass":
-/*!*************************************************************!*\
-  !*** ./src/components/VProgressLinear/VProgressLinear.sass ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VProgressLinear/VProgressLinear.ts":
-/*!***********************************************************!*\
-  !*** ./src/components/VProgressLinear/VProgressLinear.ts ***!
-  \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VProgressLinear_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VProgressLinear.sass */ "./src/components/VProgressLinear/VProgressLinear.sass");
-/* harmony import */ var _VProgressLinear_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VProgressLinear_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts");
-/* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
- // Components
-
- // Mixins
-
-
-
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], Object(_mixins_positionable__WEBPACK_IMPORTED_MODULE_3__["factory"])(['absolute', 'fixed', 'top', 'bottom']), _mixins_proxyable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_5__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-progress-linear',
-  props: {
-    active: {
-      type: Boolean,
-      default: true
-    },
-    backgroundColor: {
-      type: String,
-      default: null
-    },
-    backgroundOpacity: {
-      type: [Number, String],
-      default: null
-    },
-    bufferValue: {
-      type: [Number, String],
-      default: 100
-    },
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    height: {
-      type: [Number, String],
-      default: 4
-    },
-    indeterminate: Boolean,
-    query: Boolean,
-    reverse: Boolean,
-    rounded: Boolean,
-    stream: Boolean,
-    striped: Boolean,
-    value: {
-      type: [Number, String],
-      default: 0
-    }
-  },
-  data: function data() {
-    return {
-      internalLazyValue: this.value || 0
-    };
-  },
-  computed: {
-    __cachedBackground: function __cachedBackground() {
-      return this.$createElement('div', this.setBackgroundColor(this.backgroundColor || this.color, {
-        staticClass: 'v-progress-linear__background',
-        style: this.backgroundStyle
-      }));
-    },
-    __cachedBar: function __cachedBar() {
-      return this.$createElement(this.computedTransition, [this.__cachedBarType]);
-    },
-    __cachedBarType: function __cachedBarType() {
-      return this.indeterminate ? this.__cachedIndeterminate : this.__cachedDeterminate;
-    },
-    __cachedBuffer: function __cachedBuffer() {
-      return this.$createElement('div', {
-        staticClass: 'v-progress-linear__buffer',
-        style: this.styles
-      });
-    },
-    __cachedDeterminate: function __cachedDeterminate() {
-      return this.$createElement('div', this.setBackgroundColor(this.color, {
-        staticClass: "v-progress-linear__determinate",
-        style: {
-          width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.normalizedValue, '%')
-        }
-      }));
-    },
-    __cachedIndeterminate: function __cachedIndeterminate() {
-      return this.$createElement('div', {
-        staticClass: 'v-progress-linear__indeterminate',
-        class: {
-          'v-progress-linear__indeterminate--active': this.active
-        }
-      }, [this.genProgressBar('long'), this.genProgressBar('short')]);
-    },
-    __cachedStream: function __cachedStream() {
-      if (!this.stream) return null;
-      return this.$createElement('div', this.setTextColor(this.color, {
-        staticClass: 'v-progress-linear__stream',
-        style: {
-          width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(100 - this.normalizedBuffer, '%')
-        }
-      }));
-    },
-    backgroundStyle: function backgroundStyle() {
-      var _a;
-
-      var backgroundOpacity = this.backgroundOpacity == null ? this.backgroundColor ? 1 : 0.3 : parseFloat(this.backgroundOpacity);
-      return _a = {
-        opacity: backgroundOpacity
-      }, _a[this.isReversed ? 'right' : 'left'] = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.normalizedValue, '%'), _a.width = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.normalizedBuffer - this.normalizedValue, '%'), _a;
-    },
-    classes: function classes() {
-      return __assign({
-        'v-progress-linear--absolute': this.absolute,
-        'v-progress-linear--fixed': this.fixed,
-        'v-progress-linear--query': this.query,
-        'v-progress-linear--reactive': this.reactive,
-        'v-progress-linear--reverse': this.isReversed,
-        'v-progress-linear--rounded': this.rounded,
-        'v-progress-linear--striped': this.striped
-      }, this.themeClasses);
-    },
-    computedTransition: function computedTransition() {
-      return this.indeterminate ? _transitions__WEBPACK_IMPORTED_MODULE_1__["VFadeTransition"] : _transitions__WEBPACK_IMPORTED_MODULE_1__["VSlideXTransition"];
-    },
-    isReversed: function isReversed() {
-      return this.$vuetify.rtl !== this.reverse;
-    },
-    normalizedBuffer: function normalizedBuffer() {
-      return this.normalize(this.bufferValue);
-    },
-    normalizedValue: function normalizedValue() {
-      return this.normalize(this.internalLazyValue);
-    },
-    reactive: function reactive() {
-      return Boolean(this.$listeners.change);
-    },
-    styles: function styles() {
-      var styles = {};
-
-      if (!this.active) {
-        styles.height = 0;
-      }
-
-      if (!this.indeterminate && parseFloat(this.normalizedBuffer) !== 100) {
-        styles.width = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.normalizedBuffer, '%');
-      }
-
-      return styles;
-    }
-  },
-  methods: {
-    genContent: function genContent() {
-      var slot = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["getSlot"])(this, 'default', {
-        value: this.internalLazyValue
-      });
-      if (!slot) return null;
-      return this.$createElement('div', {
-        staticClass: 'v-progress-linear__content'
-      }, slot);
-    },
-    genListeners: function genListeners() {
-      var listeners = this.$listeners;
-
-      if (this.reactive) {
-        listeners.click = this.onClick;
-      }
-
-      return listeners;
-    },
-    genProgressBar: function genProgressBar(name) {
-      var _a;
-
-      return this.$createElement('div', this.setBackgroundColor(this.color, {
-        staticClass: 'v-progress-linear__indeterminate',
-        class: (_a = {}, _a[name] = true, _a)
-      }));
-    },
-    onClick: function onClick(e) {
-      if (!this.reactive) return;
-      var width = this.$el.getBoundingClientRect().width;
-      this.internalValue = e.offsetX / width * 100;
-    },
-    normalize: function normalize(value) {
-      if (value < 0) return 0;
-      if (value > 100) return 100;
-      return parseFloat(value);
-    }
-  },
-  render: function render(h) {
-    var data = {
-      staticClass: 'v-progress-linear',
-      attrs: {
-        role: 'progressbar',
-        'aria-valuemin': 0,
-        'aria-valuemax': this.normalizedBuffer,
-        'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue
-      },
-      class: this.classes,
-      style: {
-        bottom: this.bottom ? 0 : undefined,
-        height: this.active ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.height) : 0,
-        top: this.top ? 0 : undefined
-      },
-      on: this.genListeners()
-    };
-    return h('div', data, [this.__cachedStream, this.__cachedBackground, this.__cachedBuffer, this.__cachedBar, this.genContent()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VProgressLinear/index.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VProgressLinear/index.ts ***!
-  \*************************************************/
-/*! exports provided: VProgressLinear, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VProgressLinear__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VProgressLinear */ "./src/components/VProgressLinear/VProgressLinear.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VProgressLinear", function() { return _VProgressLinear__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VProgressLinear__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VRadioGroup/VRadio.sass":
-/*!************************************************!*\
-  !*** ./src/components/VRadioGroup/VRadio.sass ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VRadioGroup/VRadio.ts":
-/*!**********************************************!*\
-  !*** ./src/components/VRadioGroup/VRadio.ts ***!
-  \**********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VRadio_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VRadio.sass */ "./src/components/VRadioGroup/VRadio.sass");
-/* harmony import */ var _VRadio_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VRadio_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VLabel */ "./src/components/VLabel/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _mixins_rippleable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/rippleable */ "./src/mixins/rippleable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../mixins/selectable */ "./src/mixins/selectable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
-
-
-
- // Mixins
-
-
-
-
-
-
- // Utilities
-
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_11__["default"])(_mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_rippleable__WEBPACK_IMPORTED_MODULE_7__["default"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_6__["factory"])('radioGroup'), _mixins_themeable__WEBPACK_IMPORTED_MODULE_8__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-radio',
-  inheritAttrs: false,
-  props: {
-    disabled: Boolean,
-    id: String,
-    label: String,
-    name: String,
-    offIcon: {
-      type: String,
-      default: '$radioOff'
-    },
-    onIcon: {
-      type: String,
-      default: '$radioOn'
-    },
-    readonly: Boolean,
-    value: {
-      default: null
-    }
-  },
-  data: function data() {
-    return {
-      isFocused: false
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({
-        'v-radio--is-disabled': this.isDisabled,
-        'v-radio--is-focused': this.isFocused
-      }, this.themeClasses), this.groupClasses);
-    },
-    computedColor: function computedColor() {
-      return _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__["default"].options.computed.computedColor.call(this);
-    },
-    computedIcon: function computedIcon() {
-      return this.isActive ? this.onIcon : this.offIcon;
-    },
-    computedId: function computedId() {
-      return _VInput__WEBPACK_IMPORTED_MODULE_3__["default"].options.computed.computedId.call(this);
-    },
-    hasLabel: _VInput__WEBPACK_IMPORTED_MODULE_3__["default"].options.computed.hasLabel,
-    hasState: function hasState() {
-      return (this.radioGroup || {}).hasState;
-    },
-    isDisabled: function isDisabled() {
-      return this.disabled || !!this.radioGroup && this.radioGroup.isDisabled;
-    },
-    isReadonly: function isReadonly() {
-      return this.readonly || !!this.radioGroup && this.radioGroup.isReadonly;
-    },
-    computedName: function computedName() {
-      if (this.name || !this.radioGroup) {
-        return this.name;
-      }
-
-      return this.radioGroup.name || "radio-" + this.radioGroup._uid;
-    },
-    rippleState: function rippleState() {
-      return _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__["default"].options.computed.rippleState.call(this);
-    },
-    validationState: function validationState() {
-      return (this.radioGroup || {}).validationState || this.computedColor;
-    }
-  },
-  methods: {
-    genInput: function genInput(args) {
-      // We can't actually use the mixin directly because
-      // it's made for standalone components, but its
-      // genInput method is exactly what we need
-      return _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__["default"].options.methods.genInput.call(this, 'radio', args);
-    },
-    genLabel: function genLabel() {
-      if (!this.hasLabel) return null;
-      return this.$createElement(_VLabel__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        on: {
-          // Label shouldn't cause the input to focus
-          click: _mixins_selectable__WEBPACK_IMPORTED_MODULE_9__["prevent"]
-        },
-        attrs: {
-          for: this.computedId
-        },
-        props: {
-          color: this.validationState,
-          focused: this.hasState
-        }
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_10__["getSlot"])(this, 'label') || this.label);
-    },
-    genRadio: function genRadio() {
-      return this.$createElement('div', {
-        staticClass: 'v-input--selection-controls__input'
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_2__["default"], this.setTextColor(this.validationState, {
-        props: {
-          dense: this.radioGroup && this.radioGroup.dense
-        }
-      }), this.computedIcon), this.genInput(__assign({
-        name: this.computedName,
-        value: this.value
-      }, this.attrs$)), this.genRipple(this.setTextColor(this.rippleState))]);
-    },
-    onFocus: function onFocus(e) {
-      this.isFocused = true;
-      this.$emit('focus', e);
-    },
-    onBlur: function onBlur(e) {
-      this.isFocused = false;
-      this.$emit('blur', e);
-    },
-    onChange: function onChange() {
-      if (this.isDisabled || this.isReadonly || this.isActive) return;
-      this.toggle();
-    },
-    onKeydown: function onKeydown() {}
-  },
-  render: function render(h) {
-    var data = {
-      staticClass: 'v-radio',
-      class: this.classes,
-      on: Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_12__["mergeListeners"])({
-        click: this.onChange
-      }, this.listeners$)
-    };
-    return h('div', data, [this.genRadio(), this.genLabel()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VRadioGroup/VRadioGroup.sass":
-/*!*****************************************************!*\
-  !*** ./src/components/VRadioGroup/VRadioGroup.sass ***!
-  \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VRadioGroup/VRadioGroup.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VRadioGroup/VRadioGroup.ts ***!
-  \***************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../styles/components/_selection-controls.sass */ "./src/styles/components/_selection-controls.sass");
-/* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VRadioGroup_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VRadioGroup.sass */ "./src/components/VRadioGroup/VRadioGroup.sass");
-/* harmony import */ var _VRadioGroup_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_VRadioGroup_sass__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-/* harmony import */ var _mixins_comparable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/comparable */ "./src/mixins/comparable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
-
- // Extensions
-
-
- // Mixins
-
- // Types
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(_mixins_comparable__WEBPACK_IMPORTED_MODULE_4__["default"], _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__["BaseItemGroup"], _VInput__WEBPACK_IMPORTED_MODULE_2__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-radio-group',
-  provide: function provide() {
-    return {
-      radioGroup: this
-    };
-  },
-  props: {
-    column: {
-      type: Boolean,
-      default: true
-    },
-    height: {
-      type: [Number, String],
-      default: 'auto'
-    },
-    name: String,
-    row: Boolean,
-    // If no value set on VRadio
-    // will match valueComparator
-    // force default to null
-    value: null
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VInput__WEBPACK_IMPORTED_MODULE_2__["default"].options.computed.classes.call(this)), {
-        'v-input--selection-controls v-input--radio-group': true,
-        'v-input--radio-group--column': this.column && !this.row,
-        'v-input--radio-group--row': this.row
-      });
-    }
-  },
-  methods: {
-    genDefaultSlot: function genDefaultSlot() {
-      return this.$createElement('div', {
-        staticClass: 'v-input--radio-group__input',
-        attrs: {
-          id: this.id,
-          role: 'radiogroup',
-          'aria-labelledby': this.computedId
-        }
-      }, _VInput__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genDefaultSlot.call(this));
-    },
-    genInputSlot: function genInputSlot() {
-      var render = _VInput__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genInputSlot.call(this);
-      delete render.data.on.click;
-      return render;
-    },
-    genLabel: function genLabel() {
-      var label = _VInput__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genLabel.call(this);
-      if (!label) return null;
-      label.data.attrs.id = this.computedId; // WAI considers this an orphaned label
-
-      delete label.data.attrs.for;
-      label.tag = 'legend';
-      return label;
-    },
-    onClick: _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__["BaseItemGroup"].options.methods.onClick
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VRadioGroup/index.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VRadioGroup/index.ts ***!
-  \*********************************************/
-/*! exports provided: VRadioGroup, VRadio, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VRadioGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VRadioGroup */ "./src/components/VRadioGroup/VRadioGroup.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRadioGroup", function() { return _VRadioGroup__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VRadio__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VRadio */ "./src/components/VRadioGroup/VRadio.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRadio", function() { return _VRadio__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VRadioGroup: _VRadioGroup__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VRadio: _VRadio__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VRangeSlider/VRangeSlider.sass":
-/*!*******************************************************!*\
-  !*** ./src/components/VRangeSlider/VRangeSlider.sass ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VRangeSlider/VRangeSlider.ts":
-/*!*****************************************************!*\
-  !*** ./src/components/VRangeSlider/VRangeSlider.ts ***!
-  \*****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VRangeSlider_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VRangeSlider.sass */ "./src/components/VRangeSlider/VRangeSlider.sass");
-/* harmony import */ var _VRangeSlider_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VRangeSlider_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSlider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSlider */ "./src/components/VSlider/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Styles
-
-
- // Components
-
- // Helpers
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSlider__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-range-slider',
-  props: {
-    value: {
-      type: Array,
-      default: function _default() {
-        return [0, 0];
-      }
-    }
-  },
-  data: function data() {
-    return {
-      activeThumb: null,
-      lazyValue: this.value
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VSlider__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-input--range-slider': true
-      });
-    },
-    internalValue: {
-      get: function get() {
-        return this.lazyValue;
-      },
-      set: function set(val) {
-        var _this = this; // Round value to ensure the
-        // entire slider range can
-        // be selected with step
-
-
-        var value = val.map(function (v) {
-          if (v === void 0) {
-            v = 0;
-          }
-
-          return _this.roundValue(Math.min(Math.max(v, _this.minValue), _this.maxValue));
-        }); // Switch values if range and wrong order
-
-        if (value[0] > value[1] || value[1] < value[0]) {
-          if (this.activeThumb !== null) {
-            var toFocus = this.activeThumb === 1 ? 0 : 1;
-            var el = this.$refs["thumb_" + toFocus];
-            el.focus();
-          }
-
-          value = [value[1], value[0]];
-        }
-
-        this.lazyValue = value;
-        if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["deepEqual"])(value, this.value)) this.$emit('input', value);
-        this.validate();
-      }
-    },
-    inputWidth: function inputWidth() {
-      var _this = this;
-
-      return this.internalValue.map(function (v) {
-        return (_this.roundValue(v) - _this.minValue) / (_this.maxValue - _this.minValue) * 100;
-      });
-    }
-  },
-  methods: {
-    getTrackStyle: function getTrackStyle(startLength, endLength, startPadding, endPadding) {
-      var _a;
-
-      if (startPadding === void 0) {
-        startPadding = 0;
-      }
-
-      if (endPadding === void 0) {
-        endPadding = 0;
-      }
-
-      var startDir = this.vertical ? this.$vuetify.rtl ? 'top' : 'bottom' : this.$vuetify.rtl ? 'right' : 'left';
-      var endDir = this.vertical ? 'height' : 'width';
-      var start = "calc(" + startLength + "% + " + startPadding + "px)";
-      var end = "calc(" + endLength + "% + " + endPadding + "px)";
-      return _a = {
-        transition: this.trackTransition
-      }, _a[startDir] = start, _a[endDir] = end, _a;
-    },
-    getIndexOfClosestValue: function getIndexOfClosestValue(arr, v) {
-      if (Math.abs(arr[0] - v) < Math.abs(arr[1] - v)) return 0;else return 1;
-    },
-    genInput: function genInput() {
-      var _this = this;
-
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["createRange"])(2).map(function (i) {
-        var input = _VSlider__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genInput.call(_this);
-        input.data = input.data || {};
-        input.data.attrs = input.data.attrs || {};
-        input.data.attrs.value = _this.internalValue[i];
-        input.data.attrs.id = "input-" + (i ? 'max' : 'min') + "-" + _this._uid;
-        return input;
-      });
-    },
-    genTrackContainer: function genTrackContainer() {
-      var _this = this;
-
-      var children = [];
-      var padding = this.isDisabled ? 10 : 0;
-      var sections = [{
-        class: 'v-slider__track-background',
-        color: this.computedTrackColor,
-        styles: [0, this.inputWidth[0], 0, -padding]
-      }, {
-        class: this.isDisabled ? 'v-slider__track-background' : 'v-slider__track-fill',
-        color: this.isDisabled ? this.computedTrackColor : this.computedColor,
-        styles: [this.inputWidth[0], Math.abs(this.inputWidth[1] - this.inputWidth[0]), padding, padding * -2]
-      }, {
-        class: 'v-slider__track-background',
-        color: this.computedTrackColor,
-        styles: [this.inputWidth[1], Math.abs(100 - this.inputWidth[1]), padding, -padding]
-      }];
-      if (this.$vuetify.rtl) sections.reverse();
-      children.push.apply(children, __spread(sections.map(function (section) {
-        return _this.$createElement('div', _this.setBackgroundColor(section.color, {
-          staticClass: section.class,
-          style: _this.getTrackStyle.apply(_this, __spread(section.styles))
-        }));
-      })));
-      return this.$createElement('div', {
-        staticClass: 'v-slider__track-container',
-        ref: 'track'
-      }, children);
-    },
-    genChildren: function genChildren() {
-      var _this = this;
-
-      return [this.genInput(), this.genTrackContainer(), this.genSteps(), Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["createRange"])(2).map(function (index) {
-        var value = _this.internalValue[index];
-
-        var onDrag = function onDrag(e) {
-          _this.isActive = true;
-          _this.activeThumb = index;
-
-          _this.onThumbMouseDown(e);
-        };
-
-        var onFocus = function onFocus(e) {
-          _this.isFocused = true;
-          _this.activeThumb = index;
-
-          _this.$emit('focus', e);
-        };
-
-        var onBlur = function onBlur(e) {
-          _this.isFocused = false;
-          _this.activeThumb = null;
-
-          _this.$emit('blur', e);
-        };
-
-        var valueWidth = _this.inputWidth[index];
-        var isActive = _this.isActive && _this.activeThumb === index;
-        var isFocused = _this.isFocused && _this.activeThumb === index;
-        return _this.genThumbContainer(value, valueWidth, isActive, isFocused, onDrag, onFocus, onBlur, "thumb_" + index);
-      })];
-    },
-    onSliderClick: function onSliderClick(e) {
-      if (!this.isActive) {
-        if (this.noClick) {
-          this.noClick = false;
-          return;
-        }
-
-        var _a = this.parseMouseMove(e),
-            value = _a.value,
-            isInsideTrack = _a.isInsideTrack;
-
-        if (isInsideTrack) {
-          this.activeThumb = this.getIndexOfClosestValue(this.internalValue, value);
-          var refName = "thumb_" + this.activeThumb;
-          var thumbRef = this.$refs[refName];
-          thumbRef.focus();
-        }
-
-        this.setInternalValue(value);
-        this.$emit('change', this.internalValue);
-      }
-    },
-    onMouseMove: function onMouseMove(e) {
-      var _a = this.parseMouseMove(e),
-          value = _a.value,
-          isInsideTrack = _a.isInsideTrack;
-
-      if (isInsideTrack && this.activeThumb === null) {
-        this.activeThumb = this.getIndexOfClosestValue(this.internalValue, value);
-      }
-
-      this.setInternalValue(value);
-    },
-    onKeyDown: function onKeyDown(e) {
-      if (this.activeThumb === null) return;
-      var value = this.parseKeyDown(e, this.internalValue[this.activeThumb]);
-      if (value == null) return;
-      this.setInternalValue(value);
-      this.$emit('change', this.internalValue);
-    },
-    setInternalValue: function setInternalValue(value) {
-      var _this = this;
-
-      this.internalValue = this.internalValue.map(function (v, i) {
-        if (i === _this.activeThumb) return value;else return Number(v);
-      });
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VRangeSlider/index.ts":
-/*!**********************************************!*\
-  !*** ./src/components/VRangeSlider/index.ts ***!
-  \**********************************************/
-/*! exports provided: VRangeSlider, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VRangeSlider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VRangeSlider */ "./src/components/VRangeSlider/VRangeSlider.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRangeSlider", function() { return _VRangeSlider__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VRangeSlider__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VRating/VRating.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VRating/VRating.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VRating/VRating.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VRating/VRating.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VRating_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VRating.sass */ "./src/components/VRating/VRating.sass");
-/* harmony import */ var _VRating_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VRating_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts");
-/* harmony import */ var _mixins_sizeable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/sizeable */ "./src/mixins/sizeable/index.ts");
-/* harmony import */ var _mixins_rippleable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/rippleable */ "./src/mixins/rippleable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Styles
- // Components
-
- // Mixins
-
-
-
-
-
- // Utilities
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_rippleable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_sizeable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]).extend({
-  name: 'v-rating',
-  props: {
-    backgroundColor: {
-      type: String,
-      default: 'accent'
-    },
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    clearable: Boolean,
-    dense: Boolean,
-    emptyIcon: {
-      type: String,
-      default: '$ratingEmpty'
-    },
-    fullIcon: {
-      type: String,
-      default: '$ratingFull'
-    },
-    halfIcon: {
-      type: String,
-      default: '$ratingHalf'
-    },
-    halfIncrements: Boolean,
-    hover: Boolean,
-    length: {
-      type: [Number, String],
-      default: 5
-    },
-    readonly: Boolean,
-    size: [Number, String],
-    value: {
-      type: Number,
-      default: 0
-    },
-    iconLabel: {
-      type: String,
-      default: '$vuetify.rating.ariaLabel.icon'
-    }
-  },
-  data: function data() {
-    return {
-      hoverIndex: -1,
-      internalValue: this.value
-    };
-  },
-  computed: {
-    directives: function directives() {
-      if (this.readonly || !this.ripple) return [];
-      return [{
-        name: 'ripple',
-        value: {
-          circle: true
-        }
-      }];
-    },
-    iconProps: function iconProps() {
-      var _a = this.$props,
-          dark = _a.dark,
-          large = _a.large,
-          light = _a.light,
-          medium = _a.medium,
-          small = _a.small,
-          size = _a.size,
-          xLarge = _a.xLarge,
-          xSmall = _a.xSmall;
-      return {
-        dark: dark,
-        large: large,
-        light: light,
-        medium: medium,
-        size: size,
-        small: small,
-        xLarge: xLarge,
-        xSmall: xSmall
-      };
-    },
-    isHovering: function isHovering() {
-      return this.hover && this.hoverIndex >= 0;
-    }
-  },
-  watch: {
-    internalValue: function internalValue(val) {
-      val !== this.value && this.$emit('input', val);
-    },
-    value: function value(val) {
-      this.internalValue = val;
-    }
-  },
-  methods: {
-    createClickFn: function createClickFn(i) {
-      var _this = this;
-
-      return function (e) {
-        if (_this.readonly) return;
-
-        var newValue = _this.genHoverIndex(e, i);
-
-        if (_this.clearable && _this.internalValue === newValue) {
-          _this.internalValue = 0;
-        } else {
-          _this.internalValue = newValue;
-        }
-      };
-    },
-    createProps: function createProps(i) {
-      var props = {
-        index: i,
-        value: this.internalValue,
-        click: this.createClickFn(i),
-        isFilled: Math.floor(this.internalValue) > i,
-        isHovered: Math.floor(this.hoverIndex) > i
-      };
-
-      if (this.halfIncrements) {
-        props.isHalfHovered = !props.isHovered && (this.hoverIndex - i) % 1 > 0;
-        props.isHalfFilled = !props.isFilled && (this.internalValue - i) % 1 > 0;
-      }
-
-      return props;
-    },
-    genHoverIndex: function genHoverIndex(e, i) {
-      var isHalf = this.isHalfEvent(e);
-
-      if (this.halfIncrements && this.$vuetify.rtl) {
-        isHalf = !isHalf;
-      }
-
-      return i + (isHalf ? 0.5 : 1);
-    },
-    getIconName: function getIconName(props) {
-      var isFull = this.isHovering ? props.isHovered : props.isFilled;
-      var isHalf = this.isHovering ? props.isHalfHovered : props.isHalfFilled;
-      return isFull ? this.fullIcon : isHalf ? this.halfIcon : this.emptyIcon;
-    },
-    getColor: function getColor(props) {
-      if (this.isHovering) {
-        if (props.isHovered || props.isHalfHovered) return this.color;
-      } else {
-        if (props.isFilled || props.isHalfFilled) return this.color;
-      }
-
-      return this.backgroundColor;
-    },
-    isHalfEvent: function isHalfEvent(e) {
-      if (this.halfIncrements) {
-        var rect = e.target && e.target.getBoundingClientRect();
-        if (rect && e.pageX - rect.left < rect.width / 2) return true;
-      }
-
-      return false;
-    },
-    onMouseEnter: function onMouseEnter(e, i) {
-      var _this = this;
-
-      this.runDelay('open', function () {
-        _this.hoverIndex = _this.genHoverIndex(e, i);
-      });
-    },
-    onMouseLeave: function onMouseLeave() {
-      var _this = this;
-
-      this.runDelay('close', function () {
-        return _this.hoverIndex = -1;
-      });
-    },
-    genItem: function genItem(i) {
-      var _this = this;
-
-      var props = this.createProps(i);
-      if (this.$scopedSlots.item) return this.$scopedSlots.item(props);
-      var listeners = {
-        click: props.click
-      };
-
-      if (this.hover) {
-        listeners.mouseenter = function (e) {
-          return _this.onMouseEnter(e, i);
-        };
-
-        listeners.mouseleave = this.onMouseLeave;
-
-        if (this.halfIncrements) {
-          listeners.mousemove = function (e) {
-            return _this.onMouseEnter(e, i);
-          };
-        }
-      }
-
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], this.setTextColor(this.getColor(props), {
-        attrs: {
-          tabindex: -1,
-          'aria-label': this.$vuetify.lang.t(this.iconLabel, i + 1, Number(this.length))
-        },
-        directives: this.directives,
-        props: this.iconProps,
-        on: listeners
-      }), [this.getIconName(props)]);
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["createRange"])(Number(this.length)).map(function (i) {
-      return _this.genItem(i);
-    });
-    return h('div', {
-      staticClass: 'v-rating',
-      class: {
-        'v-rating--readonly': this.readonly,
-        'v-rating--dense': this.dense
-      }
-    }, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VRating/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VRating/index.ts ***!
-  \*****************************************/
-/*! exports provided: VRating, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VRating__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VRating */ "./src/components/VRating/VRating.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRating", function() { return _VRating__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VRating__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VResponsive/VResponsive.sass":
-/*!*****************************************************!*\
-  !*** ./src/components/VResponsive/VResponsive.sass ***!
-  \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VResponsive/VResponsive.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VResponsive/VResponsive.ts ***!
-  \***************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VResponsive_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VResponsive.sass */ "./src/components/VResponsive/VResponsive.sass");
-/* harmony import */ var _VResponsive_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VResponsive_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
- // Mixins
-
- // Utils
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_mixins_measurable__WEBPACK_IMPORTED_MODULE_1__["default"]).extend({
-  name: 'v-responsive',
-  props: {
-    aspectRatio: [String, Number]
-  },
-  computed: {
-    computedAspectRatio: function computedAspectRatio() {
-      return Number(this.aspectRatio);
-    },
-    aspectStyle: function aspectStyle() {
-      return this.computedAspectRatio ? {
-        paddingBottom: 1 / this.computedAspectRatio * 100 + '%'
-      } : undefined;
-    },
-    __cachedSizer: function __cachedSizer() {
-      if (!this.aspectStyle) return [];
-      return this.$createElement('div', {
-        style: this.aspectStyle,
-        staticClass: 'v-responsive__sizer'
-      });
-    }
-  },
-  methods: {
-    genContent: function genContent() {
-      return this.$createElement('div', {
-        staticClass: 'v-responsive__content'
-      }, this.$slots.default);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-responsive',
-      style: this.measurableStyles,
-      on: this.$listeners
-    }, [this.__cachedSizer, this.genContent()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VResponsive/index.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VResponsive/index.ts ***!
-  \*********************************************/
-/*! exports provided: VResponsive, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VResponsive__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VResponsive */ "./src/components/VResponsive/VResponsive.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VResponsive", function() { return _VResponsive__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VResponsive__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSelect/VSelect.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VSelect/VSelect.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSelect/VSelect.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VSelect/VSelect.ts ***!
-  \*******************************************/
-/*! exports provided: defaultMenuProps, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultMenuProps", function() { return defaultMenuProps; });
-/* harmony import */ var _VTextField_VTextField_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VTextField/VTextField.sass */ "./src/components/VTextField/VTextField.sass");
-/* harmony import */ var _VTextField_VTextField_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTextField_VTextField_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSelect_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VSelect.sass */ "./src/components/VSelect/VSelect.sass");
-/* harmony import */ var _VSelect_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_VSelect_sass__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VChip */ "./src/components/VChip/index.ts");
-/* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VMenu */ "./src/components/VMenu/index.ts");
-/* harmony import */ var _VSelectList__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VSelectList */ "./src/components/VSelect/VSelectList.ts");
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts");
-/* harmony import */ var _mixins_comparable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/comparable */ "./src/mixins/comparable/index.ts");
-/* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts");
-/* harmony import */ var _mixins_filterable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../mixins/filterable */ "./src/mixins/filterable/index.ts");
-/* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts");
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}; // Styles
-
-
-
- // Components
-
-
-
- // Extensions
-
-
- // Mixins
-
-
-
- // Directives
-
- // Utilities
-
-
-
- // Types
-
-
-var defaultMenuProps = {
-  closeOnClick: false,
-  closeOnContentClick: false,
-  disableKeys: true,
-  openOnClick: false,
-  maxHeight: 304
-}; // Types
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_14__["default"])(_VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__["default"], _mixins_comparable__WEBPACK_IMPORTED_MODULE_7__["default"], _mixins_dependent__WEBPACK_IMPORTED_MODULE_8__["default"], _mixins_filterable__WEBPACK_IMPORTED_MODULE_9__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-select',
-  directives: {
-    ClickOutside: _directives_click_outside__WEBPACK_IMPORTED_MODULE_10__["default"]
-  },
-  props: {
-    appendIcon: {
-      type: String,
-      default: '$dropdown'
-    },
-    attach: {
-      type: null,
-      default: false
-    },
-    cacheItems: Boolean,
-    chips: Boolean,
-    clearable: Boolean,
-    deletableChips: Boolean,
-    disableLookup: Boolean,
-    eager: Boolean,
-    hideSelected: Boolean,
-    items: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    itemColor: {
-      type: String,
-      default: 'primary'
-    },
-    itemDisabled: {
-      type: [String, Array, Function],
-      default: 'disabled'
-    },
-    itemText: {
-      type: [String, Array, Function],
-      default: 'text'
-    },
-    itemValue: {
-      type: [String, Array, Function],
-      default: 'value'
-    },
-    menuProps: {
-      type: [String, Array, Object],
-      default: function _default() {
-        return defaultMenuProps;
-      }
-    },
-    multiple: Boolean,
-    openOnClear: Boolean,
-    returnObject: Boolean,
-    smallChips: Boolean
-  },
-  data: function data() {
-    return {
-      cachedItems: this.cacheItems ? this.items : [],
-      menuIsBooted: false,
-      isMenuActive: false,
-      lastItem: 20,
-      // As long as a value is defined, show it
-      // Otherwise, check if multiple
-      // to determine which default to provide
-      lazyValue: this.value !== undefined ? this.value : this.multiple ? [] : undefined,
-      selectedIndex: -1,
-      selectedItems: [],
-      keyboardLookupPrefix: '',
-      keyboardLookupLastTime: 0
-    };
-  },
-  computed: {
-    /* All items that the select has */
-    allItems: function allItems() {
-      return this.filterDuplicates(this.cachedItems.concat(this.items));
-    },
-    classes: function classes() {
-      return __assign(__assign({}, _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__["default"].options.computed.classes.call(this)), {
-        'v-select': true,
-        'v-select--chips': this.hasChips,
-        'v-select--chips--small': this.smallChips,
-        'v-select--is-menu-active': this.isMenuActive,
-        'v-select--is-multi': this.multiple
-      });
-    },
-
-    /* Used by other components to overwrite */
-    computedItems: function computedItems() {
-      return this.allItems;
-    },
-    computedOwns: function computedOwns() {
-      return "list-" + this._uid;
-    },
-    computedCounterValue: function computedCounterValue() {
-      return this.multiple ? this.selectedItems.length : (this.getText(this.selectedItems[0]) || '').toString().length;
-    },
-    directives: function directives() {
-      var _this = this;
-
-      return this.isFocused ? [{
-        name: 'click-outside',
-        value: {
-          handler: this.blur,
-          closeConditional: this.closeConditional,
-          include: function include() {
-            return _this.getOpenDependentElements();
-          }
-        }
-      }] : undefined;
-    },
-    dynamicHeight: function dynamicHeight() {
-      return 'auto';
-    },
-    hasChips: function hasChips() {
-      return this.chips || this.smallChips;
-    },
-    hasSlot: function hasSlot() {
-      return Boolean(this.hasChips || this.$scopedSlots.selection);
-    },
-    isDirty: function isDirty() {
-      return this.selectedItems.length > 0;
-    },
-    listData: function listData() {
-      var _a;
-
-      var scopeId = this.$vnode && this.$vnode.context.$options._scopeId;
-      var attrs = scopeId ? (_a = {}, _a[scopeId] = true, _a) : {};
-      return {
-        attrs: __assign(__assign({}, attrs), {
-          id: this.computedOwns
-        }),
-        props: {
-          action: this.multiple,
-          color: this.itemColor,
-          dense: this.dense,
-          hideSelected: this.hideSelected,
-          items: this.virtualizedItems,
-          itemDisabled: this.itemDisabled,
-          itemText: this.itemText,
-          itemValue: this.itemValue,
-          noDataText: this.$vuetify.lang.t(this.noDataText),
-          selectedItems: this.selectedItems
-        },
-        on: {
-          select: this.selectItem
-        },
-        scopedSlots: {
-          item: this.$scopedSlots.item
-        }
-      };
-    },
-    staticList: function staticList() {
-      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_13__["consoleError"])('assert: staticList should not be called if slots are used');
-      }
-
-      return this.$createElement(_VSelectList__WEBPACK_IMPORTED_MODULE_4__["default"], this.listData);
-    },
-    virtualizedItems: function virtualizedItems() {
-      return this.$_menuProps.auto ? this.computedItems : this.computedItems.slice(0, this.lastItem);
-    },
-    menuCanShow: function menuCanShow() {
-      return true;
-    },
-    $_menuProps: function $_menuProps() {
-      var normalisedProps = typeof this.menuProps === 'string' ? this.menuProps.split(',') : this.menuProps;
-
-      if (Array.isArray(normalisedProps)) {
-        normalisedProps = normalisedProps.reduce(function (acc, p) {
-          acc[p.trim()] = true;
-          return acc;
-        }, {});
-      }
-
-      return __assign(__assign(__assign({}, defaultMenuProps), {
-        eager: this.eager,
-        value: this.menuCanShow && this.isMenuActive,
-        nudgeBottom: normalisedProps.offsetY ? 1 : 0
-      }), normalisedProps);
-    }
-  },
-  watch: {
-    internalValue: function internalValue(val) {
-      this.initialValue = val;
-      this.setSelectedItems();
-    },
-    isMenuActive: function isMenuActive(val) {
-      var _this = this;
-
-      window.setTimeout(function () {
-        return _this.onMenuActiveChange(val);
-      });
-    },
-    items: {
-      immediate: true,
-      handler: function handler(val) {
-        var _this = this;
-
-        if (this.cacheItems) {
-          // Breaks vue-test-utils if
-          // this isn't calculated
-          // on the next tick
-          this.$nextTick(function () {
-            _this.cachedItems = _this.filterDuplicates(_this.cachedItems.concat(val));
-          });
-        }
-
-        this.setSelectedItems();
-      }
-    }
-  },
-  methods: {
-    /** @public */
-    blur: function blur(e) {
-      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__["default"].options.methods.blur.call(this, e);
-      this.isMenuActive = false;
-      this.isFocused = false;
-      this.selectedIndex = -1;
-    },
-
-    /** @public */
-    activateMenu: function activateMenu() {
-      if (!this.isInteractive || this.isMenuActive) return;
-      this.isMenuActive = true;
-    },
-    clearableCallback: function clearableCallback() {
-      var _this = this;
-
-      this.setValue(this.multiple ? [] : undefined);
-      this.setMenuIndex(-1);
-      this.$nextTick(function () {
-        return _this.$refs.input && _this.$refs.input.focus();
-      });
-      if (this.openOnClear) this.isMenuActive = true;
-    },
-    closeConditional: function closeConditional(e) {
-      if (!this.isMenuActive) return true;
-      return !this._isDestroyed && ( // Click originates from outside the menu content
-      // Multiple selects don't close when an item is clicked
-      !this.getContent() || !this.getContent().contains(e.target)) && // Click originates from outside the element
-      this.$el && !this.$el.contains(e.target) && e.target !== this.$el;
-    },
-    filterDuplicates: function filterDuplicates(arr) {
-      var uniqueValues = new Map();
-
-      for (var index = 0; index < arr.length; ++index) {
-        var item = arr[index]; // Do not deduplicate headers or dividers (#12517)
-
-        if (item.header || item.divider) {
-          uniqueValues.set(item, item);
-          continue;
-        }
-
-        var val = this.getValue(item); // TODO: comparator
-
-        !uniqueValues.has(val) && uniqueValues.set(val, item);
-      }
-
-      return Array.from(uniqueValues.values());
-    },
-    findExistingIndex: function findExistingIndex(item) {
-      var _this = this;
-
-      var itemValue = this.getValue(item);
-      return (this.internalValue || []).findIndex(function (i) {
-        return _this.valueComparator(_this.getValue(i), itemValue);
-      });
-    },
-    getContent: function getContent() {
-      return this.$refs.menu && this.$refs.menu.$refs.content;
-    },
-    genChipSelection: function genChipSelection(item, index) {
-      var _this = this;
-
-      var isDisabled = !this.isInteractive || this.getDisabled(item);
-      return this.$createElement(_VChip__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        staticClass: 'v-chip--select',
-        attrs: {
-          tabindex: -1
-        },
-        props: {
-          close: this.deletableChips && !isDisabled,
-          disabled: isDisabled,
-          inputValue: index === this.selectedIndex,
-          small: this.smallChips
-        },
-        on: {
-          click: function click(e) {
-            if (isDisabled) return;
-            e.stopPropagation();
-            _this.selectedIndex = index;
-          },
-          'click:close': function clickClose() {
-            return _this.onChipInput(item);
-          }
-        },
-        key: JSON.stringify(this.getValue(item))
-      }, this.getText(item));
-    },
-    genCommaSelection: function genCommaSelection(item, index, last) {
-      var color = index === this.selectedIndex && this.computedColor;
-      var isDisabled = !this.isInteractive || this.getDisabled(item);
-      return this.$createElement('div', this.setTextColor(color, {
-        staticClass: 'v-select__selection v-select__selection--comma',
-        class: {
-          'v-select__selection--disabled': isDisabled
-        },
-        key: JSON.stringify(this.getValue(item))
-      }), "" + this.getText(item) + (last ? '' : ', '));
-    },
-    genDefaultSlot: function genDefaultSlot() {
-      var selections = this.genSelections();
-      var input = this.genInput(); // If the return is an empty array
-      // push the input
-
-      if (Array.isArray(selections)) {
-        selections.push(input); // Otherwise push it into children
-      } else {
-        selections.children = selections.children || [];
-        selections.children.push(input);
-      }
-
-      return [this.genFieldset(), this.$createElement('div', {
-        staticClass: 'v-select__slot',
-        directives: this.directives
-      }, [this.genLabel(), this.prefix ? this.genAffix('prefix') : null, selections, this.suffix ? this.genAffix('suffix') : null, this.genClearIcon(), this.genIconSlot(), this.genHiddenInput()]), this.genMenu(), this.genProgress()];
-    },
-    genIcon: function genIcon(type, cb, extraData) {
-      var icon = _VInput__WEBPACK_IMPORTED_MODULE_5__["default"].options.methods.genIcon.call(this, type, cb, extraData);
-
-      if (type === 'append') {
-        // Don't allow the dropdown icon to be focused
-        icon.children[0].data = Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_11__["default"])(icon.children[0].data, {
-          attrs: {
-            tabindex: icon.children[0].componentOptions.listeners && '-1',
-            'aria-hidden': 'true',
-            'aria-label': undefined
-          }
-        });
-      }
-
-      return icon;
-    },
-    genInput: function genInput() {
-      var input = _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__["default"].options.methods.genInput.call(this);
-      delete input.data.attrs.name;
-      input.data = Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_11__["default"])(input.data, {
-        domProps: {
-          value: null
-        },
-        attrs: {
-          readonly: true,
-          type: 'text',
-          'aria-readonly': String(this.isReadonly),
-          'aria-activedescendant': Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getObjectValueByPath"])(this.$refs.menu, 'activeTile.id'),
-          autocomplete: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getObjectValueByPath"])(input.data, 'attrs.autocomplete', 'off')
-        },
-        on: {
-          keypress: this.onKeyPress
-        }
-      });
-      return input;
-    },
-    genHiddenInput: function genHiddenInput() {
-      return this.$createElement('input', {
-        domProps: {
-          value: this.lazyValue
-        },
-        attrs: {
-          type: 'hidden',
-          name: this.attrs$.name
-        }
-      });
-    },
-    genInputSlot: function genInputSlot() {
-      var render = _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__["default"].options.methods.genInputSlot.call(this);
-      render.data.attrs = __assign(__assign({}, render.data.attrs), {
-        role: 'button',
-        'aria-haspopup': 'listbox',
-        'aria-expanded': String(this.isMenuActive),
-        'aria-owns': this.computedOwns
-      });
-      return render;
-    },
-    genList: function genList() {
-      // If there's no slots, we can use a cached VNode to improve performance
-      if (this.$slots['no-data'] || this.$slots['prepend-item'] || this.$slots['append-item']) {
-        return this.genListWithSlot();
-      } else {
-        return this.staticList;
-      }
-    },
-    genListWithSlot: function genListWithSlot() {
-      var _this = this;
-
-      var slots = ['prepend-item', 'no-data', 'append-item'].filter(function (slotName) {
-        return _this.$slots[slotName];
-      }).map(function (slotName) {
-        return _this.$createElement('template', {
-          slot: slotName
-        }, _this.$slots[slotName]);
-      }); // Requires destructuring due to Vue
-      // modifying the `on` property when passed
-      // as a referenced object
-
-      return this.$createElement(_VSelectList__WEBPACK_IMPORTED_MODULE_4__["default"], __assign({}, this.listData), slots);
-    },
-    genMenu: function genMenu() {
-      var _this = this;
-
-      var props = this.$_menuProps;
-      props.activator = this.$refs['input-slot']; // Attach to root el so that
-      // menu covers prepend/append icons
-
-      if ( // TODO: make this a computed property or helper or something
-      this.attach === '' || // If used as a boolean prop (<v-menu attach>)
-      this.attach === true || // If bound to a boolean (<v-menu :attach="true">)
-      this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))
-      ) {
-          props.attach = this.$el;
-        } else {
-        props.attach = this.attach;
-      }
-
-      return this.$createElement(_VMenu__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        attrs: {
-          role: undefined
-        },
-        props: props,
-        on: {
-          input: function input(val) {
-            _this.isMenuActive = val;
-            _this.isFocused = val;
-          },
-          scroll: this.onScroll
-        },
-        ref: 'menu'
-      }, [this.genList()]);
-    },
-    genSelections: function genSelections() {
-      var length = this.selectedItems.length;
-      var children = new Array(length);
-      var genSelection;
-
-      if (this.$scopedSlots.selection) {
-        genSelection = this.genSlotSelection;
-      } else if (this.hasChips) {
-        genSelection = this.genChipSelection;
-      } else {
-        genSelection = this.genCommaSelection;
-      }
-
-      while (length--) {
-        children[length] = genSelection(this.selectedItems[length], length, length === children.length - 1);
-      }
-
-      return this.$createElement('div', {
-        staticClass: 'v-select__selections'
-      }, children);
-    },
-    genSlotSelection: function genSlotSelection(item, index) {
-      var _this = this;
-
-      return this.$scopedSlots.selection({
-        attrs: {
-          class: 'v-chip--select'
-        },
-        parent: this,
-        item: item,
-        index: index,
-        select: function select(e) {
-          e.stopPropagation();
-          _this.selectedIndex = index;
-        },
-        selected: index === this.selectedIndex,
-        disabled: !this.isInteractive
-      });
-    },
-    getMenuIndex: function getMenuIndex() {
-      return this.$refs.menu ? this.$refs.menu.listIndex : -1;
-    },
-    getDisabled: function getDisabled(item) {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getPropertyFromItem"])(item, this.itemDisabled, false);
-    },
-    getText: function getText(item) {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getPropertyFromItem"])(item, this.itemText, item);
-    },
-    getValue: function getValue(item) {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_12__["getPropertyFromItem"])(item, this.itemValue, this.getText(item));
-    },
-    onBlur: function onBlur(e) {
-      e && this.$emit('blur', e);
-    },
-    onChipInput: function onChipInput(item) {
-      if (this.multiple) this.selectItem(item);else this.setValue(null); // If all items have been deleted,
-      // open `v-menu`
-
-      if (this.selectedItems.length === 0) {
-        this.isMenuActive = true;
-      } else {
-        this.isMenuActive = false;
-      }
-
-      this.selectedIndex = -1;
-    },
-    onClick: function onClick(e) {
-      if (!this.isInteractive) return;
-
-      if (!this.isAppendInner(e.target)) {
-        this.isMenuActive = true;
-      }
-
-      if (!this.isFocused) {
-        this.isFocused = true;
-        this.$emit('focus');
-      }
-
-      this.$emit('click', e);
-    },
-    onEscDown: function onEscDown(e) {
-      e.preventDefault();
-
-      if (this.isMenuActive) {
-        e.stopPropagation();
-        this.isMenuActive = false;
-      }
-    },
-    onKeyPress: function onKeyPress(e) {
-      var _this = this;
-
-      if (this.multiple || !this.isInteractive || this.disableLookup) return;
-      var KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
-
-      var now = performance.now();
-
-      if (now - this.keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
-        this.keyboardLookupPrefix = '';
-      }
-
-      this.keyboardLookupPrefix += e.key.toLowerCase();
-      this.keyboardLookupLastTime = now;
-      var index = this.allItems.findIndex(function (item) {
-        var text = (_this.getText(item) || '').toString();
-        return text.toLowerCase().startsWith(_this.keyboardLookupPrefix);
-      });
-      var item = this.allItems[index];
-
-      if (index !== -1) {
-        this.lastItem = Math.max(this.lastItem, index + 5);
-        this.setValue(this.returnObject ? item : this.getValue(item));
-        this.$nextTick(function () {
-          return _this.$refs.menu.getTiles();
-        });
-        setTimeout(function () {
-          return _this.setMenuIndex(index);
-        });
-      }
-    },
-    onKeyDown: function onKeyDown(e) {
-      var _this = this;
-
-      if (this.isReadonly && e.keyCode !== _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].tab) return;
-      var keyCode = e.keyCode;
-      var menu = this.$refs.menu; // If enter, space, open menu
-
-      if ([_util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].enter, _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].space].includes(keyCode)) this.activateMenu();
-      this.$emit('keydown', e);
-      if (!menu) return; // If menu is active, allow default
-      // listIndex change from menu
-
-      if (this.isMenuActive && keyCode !== _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].tab) {
-        this.$nextTick(function () {
-          menu.changeListIndex(e);
-
-          _this.$emit('update:list-index', menu.listIndex);
-        });
-      } // If menu is not active, up and down can do
-      // one of 2 things. If multiple, opens the
-      // menu, if not, will cycle through all
-      // available options
-
-
-      if (!this.isMenuActive && [_util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].up, _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].down].includes(keyCode)) return this.onUpDown(e); // If escape deactivate the menu
-
-      if (keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].esc) return this.onEscDown(e); // If tab - select item or close menu
-
-      if (keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].tab) return this.onTabDown(e); // If space preventDefault
-
-      if (keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].space) return this.onSpaceDown(e);
-    },
-    onMenuActiveChange: function onMenuActiveChange(val) {
-      // If menu is closing and mulitple
-      // or menuIndex is already set
-      // skip menu index recalculation
-      if (this.multiple && !val || this.getMenuIndex() > -1) return;
-      var menu = this.$refs.menu;
-      if (!menu || !this.isDirty) return; // When menu opens, set index of first active item
-
-      for (var i = 0; i < menu.tiles.length; i++) {
-        if (menu.tiles[i].getAttribute('aria-selected') === 'true') {
-          this.setMenuIndex(i);
-          break;
-        }
-      }
-    },
-    onMouseUp: function onMouseUp(e) {
-      var _this = this; // eslint-disable-next-line sonarjs/no-collapsible-if
-
-
-      if (this.hasMouseDown && e.which !== 3 && this.isInteractive) {
-        // If append inner is present
-        // and the target is itself
-        // or inside, toggle menu
-        if (this.isAppendInner(e.target)) {
-          this.$nextTick(function () {
-            return _this.isMenuActive = !_this.isMenuActive;
-          });
-        }
-      }
-
-      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_6__["default"].options.methods.onMouseUp.call(this, e);
-    },
-    onScroll: function onScroll() {
-      var _this = this;
-
-      if (!this.isMenuActive) {
-        requestAnimationFrame(function () {
-          return _this.getContent().scrollTop = 0;
-        });
-      } else {
-        if (this.lastItem > this.computedItems.length) return;
-        var showMoreItems = this.getContent().scrollHeight - (this.getContent().scrollTop + this.getContent().clientHeight) < 200;
-
-        if (showMoreItems) {
-          this.lastItem += 20;
-        }
-      }
-    },
-    onSpaceDown: function onSpaceDown(e) {
-      e.preventDefault();
-    },
-    onTabDown: function onTabDown(e) {
-      var menu = this.$refs.menu;
-      if (!menu) return;
-      var activeTile = menu.activeTile; // An item that is selected by
-      // menu-index should toggled
-
-      if (!this.multiple && activeTile && this.isMenuActive) {
-        e.preventDefault();
-        e.stopPropagation();
-        activeTile.click();
-      } else {
-        // If we make it here,
-        // the user has no selected indexes
-        // and is probably tabbing out
-        this.blur(e);
-      }
-    },
-    onUpDown: function onUpDown(e) {
-      var menu = this.$refs.menu;
-      if (!menu) return;
-      e.preventDefault(); // Multiple selects do not cycle their value
-      // when pressing up or down, instead activate
-      // the menu
-
-      if (this.multiple) return this.activateMenu();
-      var keyCode = e.keyCode; // Cycle through available values to achieve
-      // select native behavior
-
-      menu.isBooted = true;
-      window.requestAnimationFrame(function () {
-        menu.getTiles();
-        _util_helpers__WEBPACK_IMPORTED_MODULE_12__["keyCodes"].up === keyCode ? menu.prevTile() : menu.nextTile();
-        menu.activeTile && menu.activeTile.click();
-      });
-    },
-    selectItem: function selectItem(item) {
-      var _this = this;
-
-      if (!this.multiple) {
-        this.setValue(this.returnObject ? item : this.getValue(item));
-        this.isMenuActive = false;
-      } else {
-        var internalValue = (this.internalValue || []).slice();
-        var i = this.findExistingIndex(item);
-        i !== -1 ? internalValue.splice(i, 1) : internalValue.push(item);
-        this.setValue(internalValue.map(function (i) {
-          return _this.returnObject ? i : _this.getValue(i);
-        })); // When selecting multiple
-        // adjust menu after each
-        // selection
-
-        this.$nextTick(function () {
-          _this.$refs.menu && _this.$refs.menu.updateDimensions();
-        }); // We only need to reset list index for multiple
-        // to keep highlight when an item is toggled
-        // on and off
-
-        if (!this.multiple) return;
-        var listIndex_1 = this.getMenuIndex();
-        this.setMenuIndex(-1); // There is no item to re-highlight
-        // when selections are hidden
-
-        if (this.hideSelected) return;
-        this.$nextTick(function () {
-          return _this.setMenuIndex(listIndex_1);
-        });
-      }
-    },
-    setMenuIndex: function setMenuIndex(index) {
-      this.$refs.menu && (this.$refs.menu.listIndex = index);
-    },
-    setSelectedItems: function setSelectedItems() {
-      var e_1, _a;
-
-      var _this = this;
-
-      var selectedItems = [];
-      var values = !this.multiple || !Array.isArray(this.internalValue) ? [this.internalValue] : this.internalValue;
-
-      var _loop_1 = function _loop_1(value) {
-        var index = this_1.allItems.findIndex(function (v) {
-          return _this.valueComparator(_this.getValue(v), _this.getValue(value));
-        });
-
-        if (index > -1) {
-          selectedItems.push(this_1.allItems[index]);
-        }
-      };
-
-      var this_1 = this;
-
-      try {
-        for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
-          var value = values_1_1.value;
-
-          _loop_1(value);
-        }
-      } catch (e_1_1) {
-        e_1 = {
-          error: e_1_1
-        };
-      } finally {
-        try {
-          if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
-        } finally {
-          if (e_1) throw e_1.error;
-        }
-      }
-
-      this.selectedItems = selectedItems;
-    },
-    setValue: function setValue(value) {
-      var oldValue = this.internalValue;
-      this.internalValue = value;
-      value !== oldValue && this.$emit('change', value);
-    },
-    isAppendInner: function isAppendInner(target) {
-      // return true if append inner is present
-      // and the target is itself or inside
-      var appendInner = this.$refs['append-inner'];
-      return appendInner && (appendInner === target || appendInner.contains(target));
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSelect/VSelectList.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VSelect/VSelectList.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VCheckbox/VSimpleCheckbox */ "./src/components/VCheckbox/VSimpleCheckbox.ts");
-/* harmony import */ var _VDivider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VDivider */ "./src/components/VDivider/index.ts");
-/* harmony import */ var _VSubheader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VSubheader */ "./src/components/VSubheader/index.ts");
-/* harmony import */ var _VList__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VList */ "./src/components/VList/index.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Components
-
-
-
-
-
- // Directives
-
- // Mixins
-
-
- // Helpers
-
- // Types
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_8__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]).extend({
-  name: 'v-select-list',
-  // https://github.com/vuejs/vue/issues/6872
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_4__["default"]
-  },
-  props: {
-    action: Boolean,
-    dense: Boolean,
-    hideSelected: Boolean,
-    items: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    itemDisabled: {
-      type: [String, Array, Function],
-      default: 'disabled'
-    },
-    itemText: {
-      type: [String, Array, Function],
-      default: 'text'
-    },
-    itemValue: {
-      type: [String, Array, Function],
-      default: 'value'
-    },
-    noDataText: String,
-    noFilter: Boolean,
-    searchInput: null,
-    selectedItems: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    }
-  },
-  computed: {
-    parsedItems: function parsedItems() {
-      var _this = this;
-
-      return this.selectedItems.map(function (item) {
-        return _this.getValue(item);
-      });
-    },
-    tileActiveClass: function tileActiveClass() {
-      return Object.keys(this.setTextColor(this.color).class || {}).join(' ');
-    },
-    staticNoDataTile: function staticNoDataTile() {
-      var tile = {
-        attrs: {
-          role: undefined
-        },
-        on: {
-          mousedown: function mousedown(e) {
-            return e.preventDefault();
-          }
-        }
-      };
-      return this.$createElement(_VList__WEBPACK_IMPORTED_MODULE_3__["VListItem"], tile, [this.genTileContent(this.noDataText)]);
-    }
-  },
-  methods: {
-    genAction: function genAction(item, inputValue) {
-      var _this = this;
-
-      return this.$createElement(_VList__WEBPACK_IMPORTED_MODULE_3__["VListItemAction"], [this.$createElement(_VCheckbox_VSimpleCheckbox__WEBPACK_IMPORTED_MODULE_0__["default"], {
-        props: {
-          color: this.color,
-          value: inputValue
-        },
-        on: {
-          input: function input() {
-            return _this.$emit('select', item);
-          }
-        }
-      })]);
-    },
-    genDivider: function genDivider(props) {
-      return this.$createElement(_VDivider__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: props
-      });
-    },
-    genFilteredText: function genFilteredText(text) {
-      text = text || '';
-      if (!this.searchInput || this.noFilter) return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"])(text);
-
-      var _a = this.getMaskedCharacters(text),
-          start = _a.start,
-          middle = _a.middle,
-          end = _a.end;
-
-      return "" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"])(start) + this.genHighlight(middle) + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"])(end);
-    },
-    genHeader: function genHeader(props) {
-      return this.$createElement(_VSubheader__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: props
-      }, props.header);
-    },
-    genHighlight: function genHighlight(text) {
-      return "<span class=\"v-list-item__mask\">" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["escapeHTML"])(text) + "</span>";
-    },
-    getMaskedCharacters: function getMaskedCharacters(text) {
-      var searchInput = (this.searchInput || '').toString().toLocaleLowerCase();
-      var index = text.toLocaleLowerCase().indexOf(searchInput);
-      if (index < 0) return {
-        start: text,
-        middle: '',
-        end: ''
-      };
-      var start = text.slice(0, index);
-      var middle = text.slice(index, index + searchInput.length);
-      var end = text.slice(index + searchInput.length);
-      return {
-        start: start,
-        middle: middle,
-        end: end
-      };
-    },
-    genTile: function genTile(_a) {
-      var _this = this;
-
-      var item = _a.item,
-          index = _a.index,
-          _b = _a.disabled,
-          disabled = _b === void 0 ? null : _b,
-          _c = _a.value,
-          value = _c === void 0 ? false : _c;
-      if (!value) value = this.hasItem(item);
-
-      if (item === Object(item)) {
-        disabled = disabled !== null ? disabled : this.getDisabled(item);
-      }
-
-      var tile = {
-        attrs: {
-          // Default behavior in list does not
-          // contain aria-selected by default
-          'aria-selected': String(value),
-          id: "list-item-" + this._uid + "-" + index,
-          role: 'option'
-        },
-        on: {
-          mousedown: function mousedown(e) {
-            // Prevent onBlur from being called
-            e.preventDefault();
-          },
-          click: function click() {
-            return disabled || _this.$emit('select', item);
-          }
-        },
-        props: {
-          activeClass: this.tileActiveClass,
-          disabled: disabled,
-          ripple: true,
-          inputValue: value
-        }
-      };
-
-      if (!this.$scopedSlots.item) {
-        return this.$createElement(_VList__WEBPACK_IMPORTED_MODULE_3__["VListItem"], tile, [this.action && !this.hideSelected && this.items.length > 0 ? this.genAction(item, value) : null, this.genTileContent(item, index)]);
-      }
-
-      var parent = this;
-      var scopedSlot = this.$scopedSlots.item({
-        parent: parent,
-        item: item,
-        attrs: __assign(__assign({}, tile.attrs), tile.props),
-        on: tile.on
-      });
-      return this.needsTile(scopedSlot) ? this.$createElement(_VList__WEBPACK_IMPORTED_MODULE_3__["VListItem"], tile, scopedSlot) : scopedSlot;
-    },
-    genTileContent: function genTileContent(item, index) {
-      if (index === void 0) {
-        index = 0;
-      }
-
-      var innerHTML = this.genFilteredText(this.getText(item));
-      return this.$createElement(_VList__WEBPACK_IMPORTED_MODULE_3__["VListItemContent"], [this.$createElement(_VList__WEBPACK_IMPORTED_MODULE_3__["VListItemTitle"], {
-        domProps: {
-          innerHTML: innerHTML
-        }
-      })]);
-    },
-    hasItem: function hasItem(item) {
-      return this.parsedItems.indexOf(this.getValue(item)) > -1;
-    },
-    needsTile: function needsTile(slot) {
-      return slot.length !== 1 || slot[0].componentOptions == null || slot[0].componentOptions.Ctor.options.name !== 'v-list-item';
-    },
-    getDisabled: function getDisabled(item) {
-      return Boolean(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["getPropertyFromItem"])(item, this.itemDisabled, false));
-    },
-    getText: function getText(item) {
-      return String(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["getPropertyFromItem"])(item, this.itemText, item));
-    },
-    getValue: function getValue(item) {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["getPropertyFromItem"])(item, this.itemValue, this.getText(item));
-    }
-  },
-  render: function render() {
-    var children = [];
-    var itemsLength = this.items.length;
-
-    for (var index = 0; index < itemsLength; index++) {
-      var item = this.items[index];
-      if (this.hideSelected && this.hasItem(item)) continue;
-      if (item == null) children.push(this.genTile({
-        item: item,
-        index: index
-      }));else if (item.header) children.push(this.genHeader(item));else if (item.divider) children.push(this.genDivider(item));else children.push(this.genTile({
-        item: item,
-        index: index
-      }));
-    }
-
-    children.length || children.push(this.$slots['no-data'] || this.staticNoDataTile);
-    this.$slots['prepend-item'] && children.unshift(this.$slots['prepend-item']);
-    this.$slots['append-item'] && children.push(this.$slots['append-item']);
-    return this.$createElement(_VList__WEBPACK_IMPORTED_MODULE_3__["VList"], {
-      staticClass: 'v-select-list',
-      class: this.themeClasses,
-      attrs: {
-        role: 'listbox',
-        tabindex: -1
-      },
-      props: {
-        dense: this.dense
-      }
-    }, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSelect/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VSelect/index.ts ***!
-  \*****************************************/
-/*! exports provided: VSelect, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSelect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSelect */ "./src/components/VSelect/VSelect.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSelect", function() { return _VSelect__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSelect__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSheet/VSheet.sass":
-/*!*******************************************!*\
-  !*** ./src/components/VSheet/VSheet.sass ***!
-  \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSheet/VSheet.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VSheet/VSheet.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSheet_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSheet.sass */ "./src/components/VSheet/VSheet.sass");
-/* harmony import */ var _VSheet_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSheet_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/binds-attrs */ "./src/mixins/binds-attrs/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts");
-/* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts");
-/* harmony import */ var _mixins_roundable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/roundable */ "./src/mixins/roundable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
-
-
-
- // Helpers
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_mixins_binds_attrs__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_elevatable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_measurable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_roundable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]).extend({
-  name: 'v-sheet',
-  props: {
-    outlined: Boolean,
-    shaped: Boolean,
-    tag: {
-      type: String,
-      default: 'div'
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign({
-        'v-sheet': true,
-        'v-sheet--outlined': this.outlined,
-        'v-sheet--shaped': this.shaped
-      }, this.themeClasses), this.elevationClasses), this.roundedClasses);
-    },
-    styles: function styles() {
-      return this.measurableStyles;
-    }
-  },
-  render: function render(h) {
-    var data = {
-      class: this.classes,
-      style: this.styles,
-      on: this.listeners$
-    };
-    return h(this.tag, this.setBackgroundColor(this.color, data), this.$slots.default);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSheet/index.ts":
-/*!****************************************!*\
-  !*** ./src/components/VSheet/index.ts ***!
-  \****************************************/
-/*! exports provided: VSheet, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSheet */ "./src/components/VSheet/VSheet.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSheet", function() { return _VSheet__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSheet__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSkeletonLoader/VSkeletonLoader.sass":
-/*!*************************************************************!*\
-  !*** ./src/components/VSkeletonLoader/VSkeletonLoader.sass ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSkeletonLoader/VSkeletonLoader.ts":
-/*!***********************************************************!*\
-  !*** ./src/components/VSkeletonLoader/VSkeletonLoader.ts ***!
-  \***********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSkeletonLoader_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSkeletonLoader.sass */ "./src/components/VSkeletonLoader/VSkeletonLoader.sass");
-/* harmony import */ var _VSkeletonLoader_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSkeletonLoader_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts");
-/* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-}; // Styles
-
-
- // Mixins
-
-
-
- // Utilities
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_elevatable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_measurable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'VSkeletonLoader',
-  props: {
-    boilerplate: Boolean,
-    loading: Boolean,
-    tile: Boolean,
-    transition: String,
-    type: String,
-    types: {
-      type: Object,
-      default: function _default() {
-        return {};
-      }
-    }
-  },
-  computed: {
-    attrs: function attrs() {
-      if (!this.isLoading) return this.$attrs;
-      return !this.boilerplate ? __assign({
-        'aria-busy': true,
-        'aria-live': 'polite',
-        role: 'alert'
-      }, this.$attrs) : {};
-    },
-    classes: function classes() {
-      return __assign(__assign({
-        'v-skeleton-loader--boilerplate': this.boilerplate,
-        'v-skeleton-loader--is-loading': this.isLoading,
-        'v-skeleton-loader--tile': this.tile
-      }, this.themeClasses), this.elevationClasses);
-    },
-    isLoading: function isLoading() {
-      return !('default' in this.$scopedSlots) || this.loading;
-    },
-    rootTypes: function rootTypes() {
-      return __assign({
-        actions: 'button@2',
-        article: 'heading, paragraph',
-        avatar: 'avatar',
-        button: 'button',
-        card: 'image, card-heading',
-        'card-avatar': 'image, list-item-avatar',
-        'card-heading': 'heading',
-        chip: 'chip',
-        'date-picker': 'list-item, card-heading, divider, date-picker-options, date-picker-days, actions',
-        'date-picker-options': 'text, avatar@2',
-        'date-picker-days': 'avatar@28',
-        heading: 'heading',
-        image: 'image',
-        'list-item': 'text',
-        'list-item-avatar': 'avatar, text',
-        'list-item-two-line': 'sentences',
-        'list-item-avatar-two-line': 'avatar, sentences',
-        'list-item-three-line': 'paragraph',
-        'list-item-avatar-three-line': 'avatar, paragraph',
-        paragraph: 'text@3',
-        sentences: 'text@2',
-        table: 'table-heading, table-thead, table-tbody, table-tfoot',
-        'table-heading': 'heading, text',
-        'table-thead': 'heading@6',
-        'table-tbody': 'table-row-divider@6',
-        'table-row-divider': 'table-row, divider',
-        'table-row': 'table-cell@6',
-        'table-cell': 'text',
-        'table-tfoot': 'text@2, avatar@2',
-        text: 'text'
-      }, this.types);
-    }
-  },
-  methods: {
-    genBone: function genBone(text, children) {
-      return this.$createElement('div', {
-        staticClass: "v-skeleton-loader__" + text + " v-skeleton-loader__bone"
-      }, children);
-    },
-    genBones: function genBones(bone) {
-      var _this = this; // e.g. 'text@3'
-
-
-      var _a = __read(bone.split('@'), 2),
-          type = _a[0],
-          length = _a[1];
-
-      var generator = function generator() {
-        return _this.genStructure(type);
-      }; // Generate a length array based upon
-      // value after @ in the bone string
-
-
-      return Array.from({
-        length: length
-      }).map(generator);
-    },
-    // Fix type when this is merged
-    // https://github.com/microsoft/TypeScript/pull/33050
-    genStructure: function genStructure(type) {
-      var children = [];
-      type = type || this.type || '';
-      var bone = this.rootTypes[type] || ''; // End of recursion, do nothing
-
-      /* eslint-disable-next-line no-empty, brace-style */
-
-      if (type === bone) {} // Array of values - e.g. 'heading, paragraph, text@2'
-      else if (type.indexOf(',') > -1) return this.mapBones(type); // Array of values - e.g. 'paragraph@4'
-        else if (type.indexOf('@') > -1) return this.genBones(type); // Array of values - e.g. 'card@2'
-          else if (bone.indexOf(',') > -1) children = this.mapBones(bone); // Array of values - e.g. 'list-item@2'
-            else if (bone.indexOf('@') > -1) children = this.genBones(bone); // Single value - e.g. 'card-heading'
-              else if (bone) children.push(this.genStructure(bone));
-
-      return [this.genBone(type, children)];
-    },
-    genSkeleton: function genSkeleton() {
-      var children = [];
-      if (!this.isLoading) children.push(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"])(this));else children.push(this.genStructure());
-      /* istanbul ignore else */
-
-      if (!this.transition) return children;
-      /* istanbul ignore next */
-
-      return this.$createElement('transition', {
-        props: {
-          name: this.transition
-        },
-        // Only show transition when
-        // content has been loaded
-        on: {
-          afterEnter: this.resetStyles,
-          beforeEnter: this.onBeforeEnter,
-          beforeLeave: this.onBeforeLeave,
-          leaveCancelled: this.resetStyles
-        }
-      }, children);
-    },
-    mapBones: function mapBones(bones) {
-      // Remove spaces and return array of structures
-      return bones.replace(/\s/g, '').split(',').map(this.genStructure);
-    },
-    onBeforeEnter: function onBeforeEnter(el) {
-      this.resetStyles(el);
-      if (!this.isLoading) return;
-      el._initialStyle = {
-        display: el.style.display,
-        transition: el.style.transition
-      };
-      el.style.setProperty('transition', 'none', 'important');
-    },
-    onBeforeLeave: function onBeforeLeave(el) {
-      el.style.setProperty('display', 'none', 'important');
-    },
-    resetStyles: function resetStyles(el) {
-      if (!el._initialStyle) return;
-      el.style.display = el._initialStyle.display || '';
-      el.style.transition = el._initialStyle.transition;
-      delete el._initialStyle;
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-skeleton-loader',
-      attrs: this.attrs,
-      on: this.$listeners,
-      class: this.classes,
-      style: this.isLoading ? this.measurableStyles : undefined
-    }, [this.genSkeleton()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSkeletonLoader/index.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VSkeletonLoader/index.ts ***!
-  \*************************************************/
-/*! exports provided: VSkeletonLoader, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSkeletonLoader */ "./src/components/VSkeletonLoader/VSkeletonLoader.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSkeletonLoader", function() { return _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSkeletonLoader__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSlideGroup/VSlideGroup.sass":
-/*!*****************************************************!*\
-  !*** ./src/components/VSlideGroup/VSlideGroup.sass ***!
-  \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSlideGroup/VSlideGroup.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VSlideGroup/VSlideGroup.ts ***!
-  \***************************************************/
-/*! exports provided: BaseSlideGroup, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BaseSlideGroup", function() { return BaseSlideGroup; });
-/* harmony import */ var _VSlideGroup_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSlideGroup.sass */ "./src/components/VSlideGroup/VSlideGroup.sass");
-/* harmony import */ var _VSlideGroup_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSlideGroup_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-/* harmony import */ var _mixins_mobile__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/mobile */ "./src/mixins/mobile/index.ts");
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../directives/touch */ "./src/directives/touch/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
-
- // Extensions
-
- // Mixins
-
- // Directives
-
-
- // Utilities
-
-
-var BaseSlideGroup = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_7__["default"])(_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__["BaseItemGroup"], _mixins_mobile__WEBPACK_IMPORTED_MODULE_4__["default"]).extend({
-  name: 'base-slide-group',
-  directives: {
-    Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_5__["default"],
-    Touch: _directives_touch__WEBPACK_IMPORTED_MODULE_6__["default"]
-  },
-  props: {
-    activeClass: {
-      type: String,
-      default: 'v-slide-item--active'
-    },
-    centerActive: Boolean,
-    nextIcon: {
-      type: String,
-      default: '$next'
-    },
-    prevIcon: {
-      type: String,
-      default: '$prev'
-    },
-    showArrows: {
-      type: [Boolean, String],
-      validator: function validator(v) {
-        return typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v);
-      }
-    }
-  },
-  data: function data() {
-    return {
-      internalItemsLength: 0,
-      isOverflowing: false,
-      resizeTimeout: 0,
-      startX: 0,
-      scrollOffset: 0,
-      widths: {
-        content: 0,
-        wrapper: 0
-      }
-    };
-  },
-  computed: {
-    __cachedNext: function __cachedNext() {
-      return this.genTransition('next');
-    },
-    __cachedPrev: function __cachedPrev() {
-      return this.genTransition('prev');
-    },
-    classes: function classes() {
-      return __assign(__assign({}, _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_3__["BaseItemGroup"].options.computed.classes.call(this)), {
-        'v-slide-group': true,
-        'v-slide-group--has-affixes': this.hasAffixes,
-        'v-slide-group--is-overflowing': this.isOverflowing
-      });
-    },
-    hasAffixes: function hasAffixes() {
-      switch (this.showArrows) {
-        // Always show arrows on desktop & mobile
-        case 'always':
-          return true;
-        // Always show arrows on desktop
-
-        case 'desktop':
-          return !this.isMobile;
-        // Show arrows on mobile when overflowing.
-        // This matches the default 2.2 behavior
-
-        case true:
-          return this.isOverflowing;
-        // Always show on mobile
-
-        case 'mobile':
-          return this.isMobile || this.isOverflowing;
-        // https://material.io/components/tabs#scrollable-tabs
-        // Always show arrows when
-        // overflowed on desktop
-
-        default:
-          return !this.isMobile && this.isOverflowing;
-      }
-    },
-    hasNext: function hasNext() {
-      if (!this.hasAffixes) return false;
-      var _a = this.widths,
-          content = _a.content,
-          wrapper = _a.wrapper; // Check one scroll ahead to know the width of right-most item
-
-      return content > Math.abs(this.scrollOffset) + wrapper;
-    },
-    hasPrev: function hasPrev() {
-      return this.hasAffixes && this.scrollOffset !== 0;
-    }
-  },
-  watch: {
-    internalValue: 'setWidths',
-    // When overflow changes, the arrows alter
-    // the widths of the content and wrapper
-    // and need to be recalculated
-    isOverflowing: 'setWidths',
-    scrollOffset: function scrollOffset(val) {
-      this.$refs.content.style.transform = "translateX(" + -val + "px)";
-    }
-  },
-  beforeUpdate: function beforeUpdate() {
-    this.internalItemsLength = (this.$children || []).length;
-  },
-  updated: function updated() {
-    if (this.internalItemsLength === (this.$children || []).length) return;
-    this.setWidths();
-  },
-  methods: {
-    // Always generate next for scrollable hint
-    genNext: function genNext() {
-      var _this = this;
-
-      var slot = this.$scopedSlots.next ? this.$scopedSlots.next({}) : this.$slots.next || this.__cachedNext;
-      return this.$createElement('div', {
-        staticClass: 'v-slide-group__next',
-        class: {
-          'v-slide-group__next--disabled': !this.hasNext
-        },
-        on: {
-          click: function click() {
-            return _this.onAffixClick('next');
-          }
-        },
-        key: 'next'
-      }, [slot]);
-    },
-    genContent: function genContent() {
-      return this.$createElement('div', {
-        staticClass: 'v-slide-group__content',
-        ref: 'content'
-      }, this.$slots.default);
-    },
-    genData: function genData() {
-      return {
-        class: this.classes,
-        directives: [{
-          name: 'resize',
-          value: this.onResize
-        }]
-      };
-    },
-    genIcon: function genIcon(location) {
-      var icon = location;
-
-      if (this.$vuetify.rtl && location === 'prev') {
-        icon = 'next';
-      } else if (this.$vuetify.rtl && location === 'next') {
-        icon = 'prev';
-      }
-
-      var upperLocation = "" + location[0].toUpperCase() + location.slice(1);
-      var hasAffix = this["has" + upperLocation];
-      if (!this.showArrows && !hasAffix) return null;
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          disabled: !hasAffix
-        }
-      }, this[icon + "Icon"]);
-    },
-    // Always generate prev for scrollable hint
-    genPrev: function genPrev() {
-      var _this = this;
-
-      var slot = this.$scopedSlots.prev ? this.$scopedSlots.prev({}) : this.$slots.prev || this.__cachedPrev;
-      return this.$createElement('div', {
-        staticClass: 'v-slide-group__prev',
-        class: {
-          'v-slide-group__prev--disabled': !this.hasPrev
-        },
-        on: {
-          click: function click() {
-            return _this.onAffixClick('prev');
-          }
-        },
-        key: 'prev'
-      }, [slot]);
-    },
-    genTransition: function genTransition(location) {
-      return this.$createElement(_transitions__WEBPACK_IMPORTED_MODULE_2__["VFadeTransition"], [this.genIcon(location)]);
-    },
-    genWrapper: function genWrapper() {
-      var _this = this;
-
-      return this.$createElement('div', {
-        staticClass: 'v-slide-group__wrapper',
-        directives: [{
-          name: 'touch',
-          value: {
-            start: function start(e) {
-              return _this.overflowCheck(e, _this.onTouchStart);
-            },
-            move: function move(e) {
-              return _this.overflowCheck(e, _this.onTouchMove);
-            },
-            end: function end(e) {
-              return _this.overflowCheck(e, _this.onTouchEnd);
-            }
-          }
-        }],
-        ref: 'wrapper'
-      }, [this.genContent()]);
-    },
-    calculateNewOffset: function calculateNewOffset(direction, widths, rtl, currentScrollOffset) {
-      var sign = rtl ? -1 : 1;
-      var newAbosluteOffset = sign * currentScrollOffset + (direction === 'prev' ? -1 : 1) * widths.wrapper;
-      return sign * Math.max(Math.min(newAbosluteOffset, widths.content - widths.wrapper), 0);
-    },
-    onAffixClick: function onAffixClick(location) {
-      this.$emit("click:" + location);
-      this.scrollTo(location);
-    },
-    onResize: function onResize() {
-      /* istanbul ignore next */
-      if (this._isDestroyed) return;
-      this.setWidths();
-    },
-    onTouchStart: function onTouchStart(e) {
-      var content = this.$refs.content;
-      this.startX = this.scrollOffset + e.touchstartX;
-      content.style.setProperty('transition', 'none');
-      content.style.setProperty('willChange', 'transform');
-    },
-    onTouchMove: function onTouchMove(e) {
-      this.scrollOffset = this.startX - e.touchmoveX;
-    },
-    onTouchEnd: function onTouchEnd() {
-      var _a = this.$refs,
-          content = _a.content,
-          wrapper = _a.wrapper;
-      var maxScrollOffset = content.clientWidth - wrapper.clientWidth;
-      content.style.setProperty('transition', null);
-      content.style.setProperty('willChange', null);
-
-      if (this.$vuetify.rtl) {
-        /* istanbul ignore else */
-        if (this.scrollOffset > 0 || !this.isOverflowing) {
-          this.scrollOffset = 0;
-        } else if (this.scrollOffset <= -maxScrollOffset) {
-          this.scrollOffset = -maxScrollOffset;
-        }
-      } else {
-        /* istanbul ignore else */
-        if (this.scrollOffset < 0 || !this.isOverflowing) {
-          this.scrollOffset = 0;
-        } else if (this.scrollOffset >= maxScrollOffset) {
-          this.scrollOffset = maxScrollOffset;
-        }
-      }
-    },
-    overflowCheck: function overflowCheck(e, fn) {
-      e.stopPropagation();
-      this.isOverflowing && fn(e);
-    },
-    scrollIntoView
-    /* istanbul ignore next */
-    : function scrollIntoView() {
-      if (!this.selectedItem) {
-        return;
-      }
-
-      if (this.selectedIndex === 0 || !this.centerActive && !this.isOverflowing) {
-        this.scrollOffset = 0;
-      } else if (this.centerActive) {
-        this.scrollOffset = this.calculateCenteredOffset(this.selectedItem.$el, this.widths, this.$vuetify.rtl);
-      } else if (this.isOverflowing) {
-        this.scrollOffset = this.calculateUpdatedOffset(this.selectedItem.$el, this.widths, this.$vuetify.rtl, this.scrollOffset);
-      }
-    },
-    calculateUpdatedOffset: function calculateUpdatedOffset(selectedElement, widths, rtl, currentScrollOffset) {
-      var clientWidth = selectedElement.clientWidth;
-      var offsetLeft = rtl ? widths.content - selectedElement.offsetLeft - clientWidth : selectedElement.offsetLeft;
-
-      if (rtl) {
-        currentScrollOffset = -currentScrollOffset;
-      }
-
-      var totalWidth = widths.wrapper + currentScrollOffset;
-      var itemOffset = clientWidth + offsetLeft;
-      var additionalOffset = clientWidth * 0.4;
-
-      if (offsetLeft <= currentScrollOffset) {
-        currentScrollOffset = Math.max(offsetLeft - additionalOffset, 0);
-      } else if (totalWidth <= itemOffset) {
-        currentScrollOffset = Math.min(currentScrollOffset - (totalWidth - itemOffset - additionalOffset), widths.content - widths.wrapper);
-      }
-
-      return rtl ? -currentScrollOffset : currentScrollOffset;
-    },
-    calculateCenteredOffset: function calculateCenteredOffset(selectedElement, widths, rtl) {
-      var offsetLeft = selectedElement.offsetLeft,
-          clientWidth = selectedElement.clientWidth;
-
-      if (rtl) {
-        var offsetCentered = widths.content - offsetLeft - clientWidth / 2 - widths.wrapper / 2;
-        return -Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered));
-      } else {
-        var offsetCentered = offsetLeft + clientWidth / 2 - widths.wrapper / 2;
-        return Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered));
-      }
-    },
-    scrollTo
-    /* istanbul ignore next */
-    : function scrollTo(location) {
-      this.scrollOffset = this.calculateNewOffset(location, {
-        // Force reflow
-        content: this.$refs.content ? this.$refs.content.clientWidth : 0,
-        wrapper: this.$refs.wrapper ? this.$refs.wrapper.clientWidth : 0
-      }, this.$vuetify.rtl, this.scrollOffset);
-    },
-    setWidths
-    /* istanbul ignore next */
-    : function setWidths() {
-      var _this = this;
-
-      window.requestAnimationFrame(function () {
-        var _a = _this.$refs,
-            content = _a.content,
-            wrapper = _a.wrapper;
-        _this.widths = {
-          content: content ? content.clientWidth : 0,
-          wrapper: wrapper ? wrapper.clientWidth : 0
-        };
-        _this.isOverflowing = _this.widths.wrapper < _this.widths.content;
-
-        _this.scrollIntoView();
-      });
-    }
-  },
-  render: function render(h) {
-    return h('div', this.genData(), [this.genPrev(), this.genWrapper(), this.genNext()]);
-  }
-});
-/* harmony default export */ __webpack_exports__["default"] = (BaseSlideGroup.extend({
-  name: 'v-slide-group',
-  provide: function provide() {
-    return {
-      slideGroup: this
-    };
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSlideGroup/VSlideItem.ts":
-/*!**************************************************!*\
-  !*** ./src/components/VSlideGroup/VSlideItem.ts ***!
-  \**************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VItemGroup_VItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VItemGroup/VItem */ "./src/components/VItemGroup/VItem.ts");
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Extensions
- // Mixins
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_VItemGroup_VItem__WEBPACK_IMPORTED_MODULE_0__["BaseItem"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_1__["factory"])('slideGroup')
-/* @vue/component */
-).extend({
-  name: 'v-slide-item'
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSlideGroup/index.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VSlideGroup/index.ts ***!
-  \*********************************************/
-/*! exports provided: VSlideGroup, VSlideItem, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSlideGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSlideGroup */ "./src/components/VSlideGroup/VSlideGroup.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideGroup", function() { return _VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VSlideItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VSlideItem */ "./src/components/VSlideGroup/VSlideItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideItem", function() { return _VSlideItem__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VSlideGroup: _VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VSlideItem: _VSlideItem__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VSlider/VSlider.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VSlider/VSlider.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSlider/VSlider.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VSlider/VSlider.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSlider_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSlider.sass */ "./src/components/VSlider/VSlider.sass");
-/* harmony import */ var _VSlider_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSlider_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts");
-/* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
- // Components
-
-
- // Mixins
-
-
- // Directives
-
- // Helpers
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_VInput__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_loadable__WEBPACK_IMPORTED_MODULE_4__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-slider',
-  directives: {
-    ClickOutside: _directives_click_outside__WEBPACK_IMPORTED_MODULE_5__["default"]
-  },
-  mixins: [_mixins_loadable__WEBPACK_IMPORTED_MODULE_4__["default"]],
-  props: {
-    disabled: Boolean,
-    inverseLabel: Boolean,
-    max: {
-      type: [Number, String],
-      default: 100
-    },
-    min: {
-      type: [Number, String],
-      default: 0
-    },
-    step: {
-      type: [Number, String],
-      default: 1
-    },
-    thumbColor: String,
-    thumbLabel: {
-      type: [Boolean, String],
-      default: undefined,
-      validator: function validator(v) {
-        return typeof v === 'boolean' || v === 'always';
-      }
-    },
-    thumbSize: {
-      type: [Number, String],
-      default: 32
-    },
-    tickLabels: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    ticks: {
-      type: [Boolean, String],
-      default: false,
-      validator: function validator(v) {
-        return typeof v === 'boolean' || v === 'always';
-      }
-    },
-    tickSize: {
-      type: [Number, String],
-      default: 2
-    },
-    trackColor: String,
-    trackFillColor: String,
-    value: [Number, String],
-    vertical: Boolean
-  },
-  data: function data() {
-    return {
-      app: null,
-      oldValue: null,
-      keyPressed: 0,
-      isFocused: false,
-      isActive: false,
-      noClick: false
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-input__slider': true,
-        'v-input__slider--vertical': this.vertical,
-        'v-input__slider--inverse-label': this.inverseLabel
-      });
-    },
-    internalValue: {
-      get: function get() {
-        return this.lazyValue;
-      },
-      set: function set(val) {
-        val = isNaN(val) ? this.minValue : val; // Round value to ensure the
-        // entire slider range can
-        // be selected with step
-
-        var value = this.roundValue(Math.min(Math.max(val, this.minValue), this.maxValue));
-        if (value === this.lazyValue) return;
-        this.lazyValue = value;
-        this.$emit('input', value);
-      }
-    },
-    trackTransition: function trackTransition() {
-      return this.keyPressed >= 2 ? 'none' : '';
-    },
-    minValue: function minValue() {
-      return parseFloat(this.min);
-    },
-    maxValue: function maxValue() {
-      return parseFloat(this.max);
-    },
-    stepNumeric: function stepNumeric() {
-      return this.step > 0 ? parseFloat(this.step) : 0;
-    },
-    inputWidth: function inputWidth() {
-      return (this.roundValue(this.internalValue) - this.minValue) / (this.maxValue - this.minValue) * 100;
-    },
-    trackFillStyles: function trackFillStyles() {
-      var _a;
-
-      var startDir = this.vertical ? 'bottom' : 'left';
-      var endDir = this.vertical ? 'top' : 'right';
-      var valueDir = this.vertical ? 'height' : 'width';
-      var start = this.$vuetify.rtl ? 'auto' : '0';
-      var end = this.$vuetify.rtl ? '0' : 'auto';
-      var value = this.isDisabled ? "calc(" + this.inputWidth + "% - 10px)" : this.inputWidth + "%";
-      return _a = {
-        transition: this.trackTransition
-      }, _a[startDir] = start, _a[endDir] = end, _a[valueDir] = value, _a;
-    },
-    trackStyles: function trackStyles() {
-      var _a;
-
-      var startDir = this.vertical ? this.$vuetify.rtl ? 'bottom' : 'top' : this.$vuetify.rtl ? 'left' : 'right';
-      var endDir = this.vertical ? 'height' : 'width';
-      var start = '0px';
-      var end = this.isDisabled ? "calc(" + (100 - this.inputWidth) + "% - 10px)" : "calc(" + (100 - this.inputWidth) + "%)";
-      return _a = {
-        transition: this.trackTransition
-      }, _a[startDir] = start, _a[endDir] = end, _a;
-    },
-    showTicks: function showTicks() {
-      return this.tickLabels.length > 0 || !!(!this.isDisabled && this.stepNumeric && this.ticks);
-    },
-    numTicks: function numTicks() {
-      return Math.ceil((this.maxValue - this.minValue) / this.stepNumeric);
-    },
-    showThumbLabel: function showThumbLabel() {
-      return !this.isDisabled && !!(this.thumbLabel || this.$scopedSlots['thumb-label']);
-    },
-    computedTrackColor: function computedTrackColor() {
-      if (this.isDisabled) return undefined;
-      if (this.trackColor) return this.trackColor;
-      if (this.isDark) return this.validationState;
-      return this.validationState || 'primary lighten-3';
-    },
-    computedTrackFillColor: function computedTrackFillColor() {
-      if (this.isDisabled) return undefined;
-      if (this.trackFillColor) return this.trackFillColor;
-      return this.validationState || this.computedColor;
-    },
-    computedThumbColor: function computedThumbColor() {
-      if (this.thumbColor) return this.thumbColor;
-      return this.validationState || this.computedColor;
-    }
-  },
-  watch: {
-    min: function min(val) {
-      var parsed = parseFloat(val);
-      parsed > this.internalValue && this.$emit('input', parsed);
-    },
-    max: function max(val) {
-      var parsed = parseFloat(val);
-      parsed < this.internalValue && this.$emit('input', parsed);
-    },
-    value: {
-      handler: function handler(v) {
-        this.internalValue = v;
-      }
-    }
-  },
-  // If done in as immediate in
-  // value watcher, causes issues
-  // with vue-test-utils
-  beforeMount: function beforeMount() {
-    this.internalValue = this.value;
-  },
-  mounted: function mounted() {
-    // Without a v-app, iOS does not work with body selectors
-    this.app = document.querySelector('[data-app]') || Object(_util_console__WEBPACK_IMPORTED_MODULE_7__["consoleWarn"])('Missing v-app or a non-body wrapping element with the [data-app] attribute', this);
-  },
-  methods: {
-    genDefaultSlot: function genDefaultSlot() {
-      var children = [this.genLabel()];
-      var slider = this.genSlider();
-      this.inverseLabel ? children.unshift(slider) : children.push(slider);
-      children.push(this.genProgress());
-      return children;
-    },
-    genSlider: function genSlider() {
-      return this.$createElement('div', {
-        class: __assign({
-          'v-slider': true,
-          'v-slider--horizontal': !this.vertical,
-          'v-slider--vertical': this.vertical,
-          'v-slider--focused': this.isFocused,
-          'v-slider--active': this.isActive,
-          'v-slider--disabled': this.isDisabled,
-          'v-slider--readonly': this.isReadonly
-        }, this.themeClasses),
-        directives: [{
-          name: 'click-outside',
-          value: this.onBlur
-        }],
-        on: {
-          click: this.onSliderClick
-        }
-      }, this.genChildren());
-    },
-    genChildren: function genChildren() {
-      return [this.genInput(), this.genTrackContainer(), this.genSteps(), this.genThumbContainer(this.internalValue, this.inputWidth, this.isActive, this.isFocused, this.onThumbMouseDown, this.onFocus, this.onBlur)];
-    },
-    genInput: function genInput() {
-      return this.$createElement('input', {
-        attrs: __assign({
-          value: this.internalValue,
-          id: this.computedId,
-          disabled: true,
-          readonly: true,
-          tabindex: -1
-        }, this.$attrs)
-      });
-    },
-    genTrackContainer: function genTrackContainer() {
-      var children = [this.$createElement('div', this.setBackgroundColor(this.computedTrackColor, {
-        staticClass: 'v-slider__track-background',
-        style: this.trackStyles
-      })), this.$createElement('div', this.setBackgroundColor(this.computedTrackFillColor, {
-        staticClass: 'v-slider__track-fill',
-        style: this.trackFillStyles
-      }))];
-      return this.$createElement('div', {
-        staticClass: 'v-slider__track-container',
-        ref: 'track'
-      }, children);
-    },
-    genSteps: function genSteps() {
-      var _this = this;
-
-      if (!this.step || !this.showTicks) return null;
-      var tickSize = parseFloat(this.tickSize);
-      var range = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["createRange"])(this.numTicks + 1);
-      var direction = this.vertical ? 'bottom' : this.$vuetify.rtl ? 'right' : 'left';
-      var offsetDirection = this.vertical ? this.$vuetify.rtl ? 'left' : 'right' : 'top';
-      if (this.vertical) range.reverse();
-      var ticks = range.map(function (index) {
-        var _a;
-
-        var children = [];
-
-        if (_this.tickLabels[index]) {
-          children.push(_this.$createElement('div', {
-            staticClass: 'v-slider__tick-label'
-          }, _this.tickLabels[index]));
-        }
-
-        var width = index * (100 / _this.numTicks);
-        var filled = _this.$vuetify.rtl ? 100 - _this.inputWidth < width : width < _this.inputWidth;
-        return _this.$createElement('span', {
-          key: index,
-          staticClass: 'v-slider__tick',
-          class: {
-            'v-slider__tick--filled': filled
-          },
-          style: (_a = {
-            width: tickSize + "px",
-            height: tickSize + "px"
-          }, _a[direction] = "calc(" + width + "% - " + tickSize / 2 + "px)", _a[offsetDirection] = "calc(50% - " + tickSize / 2 + "px)", _a)
-        }, children);
-      });
-      return this.$createElement('div', {
-        staticClass: 'v-slider__ticks-container',
-        class: {
-          'v-slider__ticks-container--always-show': this.ticks === 'always' || this.tickLabels.length > 0
-        }
-      }, ticks);
-    },
-    genThumbContainer: function genThumbContainer(value, valueWidth, isActive, isFocused, onDrag, onFocus, onBlur, ref) {
-      if (ref === void 0) {
-        ref = 'thumb';
-      }
-
-      var children = [this.genThumb()];
-      var thumbLabelContent = this.genThumbLabelContent(value);
-      this.showThumbLabel && children.push(this.genThumbLabel(thumbLabelContent));
-      return this.$createElement('div', this.setTextColor(this.computedThumbColor, {
-        ref: ref,
-        key: ref,
-        staticClass: 'v-slider__thumb-container',
-        class: {
-          'v-slider__thumb-container--active': isActive,
-          'v-slider__thumb-container--focused': isFocused,
-          'v-slider__thumb-container--show-label': this.showThumbLabel
-        },
-        style: this.getThumbContainerStyles(valueWidth),
-        attrs: __assign({
-          role: 'slider',
-          tabindex: this.isDisabled ? -1 : this.$attrs.tabindex ? this.$attrs.tabindex : 0,
-          'aria-label': this.label,
-          'aria-valuemin': this.min,
-          'aria-valuemax': this.max,
-          'aria-valuenow': this.internalValue,
-          'aria-readonly': String(this.isReadonly),
-          'aria-orientation': this.vertical ? 'vertical' : 'horizontal'
-        }, this.$attrs),
-        on: {
-          focus: onFocus,
-          blur: onBlur,
-          keydown: this.onKeyDown,
-          keyup: this.onKeyUp,
-          touchstart: onDrag,
-          mousedown: onDrag
-        }
-      }), children);
-    },
-    genThumbLabelContent: function genThumbLabelContent(value) {
-      return this.$scopedSlots['thumb-label'] ? this.$scopedSlots['thumb-label']({
-        value: value
-      }) : [this.$createElement('span', [String(value)])];
-    },
-    genThumbLabel: function genThumbLabel(content) {
-      var size = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["convertToUnit"])(this.thumbSize);
-      var transform = this.vertical ? "translateY(20%) translateY(" + (Number(this.thumbSize) / 3 - 1) + "px) translateX(55%) rotate(135deg)" : "translateY(-20%) translateY(-12px) translateX(-50%) rotate(45deg)";
-      return this.$createElement(_transitions__WEBPACK_IMPORTED_MODULE_2__["VScaleTransition"], {
-        props: {
-          origin: 'bottom center'
-        }
-      }, [this.$createElement('div', {
-        staticClass: 'v-slider__thumb-label-container',
-        directives: [{
-          name: 'show',
-          value: this.isFocused || this.isActive || this.thumbLabel === 'always'
-        }]
-      }, [this.$createElement('div', this.setBackgroundColor(this.computedThumbColor, {
-        staticClass: 'v-slider__thumb-label',
-        style: {
-          height: size,
-          width: size,
-          transform: transform
-        }
-      }), [this.$createElement('div', content)])])]);
-    },
-    genThumb: function genThumb() {
-      return this.$createElement('div', this.setBackgroundColor(this.computedThumbColor, {
-        staticClass: 'v-slider__thumb'
-      }));
-    },
-    getThumbContainerStyles: function getThumbContainerStyles(width) {
-      var _a;
-
-      var direction = this.vertical ? 'top' : 'left';
-      var value = this.$vuetify.rtl ? 100 - width : width;
-      value = this.vertical ? 100 - value : value;
-      return _a = {
-        transition: this.trackTransition
-      }, _a[direction] = value + "%", _a;
-    },
-    onThumbMouseDown: function onThumbMouseDown(e) {
-      e.preventDefault();
-      this.oldValue = this.internalValue;
-      this.keyPressed = 2;
-      this.isActive = true;
-      var mouseUpOptions = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["passiveSupported"] ? {
-        passive: true,
-        capture: true
-      } : true;
-      var mouseMoveOptions = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["passiveSupported"] ? {
-        passive: true
-      } : false;
-
-      if ('touches' in e) {
-        this.app.addEventListener('touchmove', this.onMouseMove, mouseMoveOptions);
-        Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["addOnceEventListener"])(this.app, 'touchend', this.onSliderMouseUp, mouseUpOptions);
-      } else {
-        this.app.addEventListener('mousemove', this.onMouseMove, mouseMoveOptions);
-        Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["addOnceEventListener"])(this.app, 'mouseup', this.onSliderMouseUp, mouseUpOptions);
-      }
-
-      this.$emit('start', this.internalValue);
-    },
-    onSliderMouseUp: function onSliderMouseUp(e) {
-      e.stopPropagation();
-      this.keyPressed = 0;
-      var mouseMoveOptions = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["passiveSupported"] ? {
-        passive: true
-      } : false;
-      this.app.removeEventListener('touchmove', this.onMouseMove, mouseMoveOptions);
-      this.app.removeEventListener('mousemove', this.onMouseMove, mouseMoveOptions);
-      this.$emit('mouseup', e);
-      this.$emit('end', this.internalValue);
-
-      if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_6__["deepEqual"])(this.oldValue, this.internalValue)) {
-        this.$emit('change', this.internalValue);
-        this.noClick = true;
-      }
-
-      this.isActive = false;
-    },
-    onMouseMove: function onMouseMove(e) {
-      var value = this.parseMouseMove(e).value;
-      this.internalValue = value;
-    },
-    onKeyDown: function onKeyDown(e) {
-      if (!this.isInteractive) return;
-      var value = this.parseKeyDown(e, this.internalValue);
-      if (value == null || value < this.minValue || value > this.maxValue) return;
-      this.internalValue = value;
-      this.$emit('change', value);
-    },
-    onKeyUp: function onKeyUp() {
-      this.keyPressed = 0;
-    },
-    onSliderClick: function onSliderClick(e) {
-      if (this.noClick) {
-        this.noClick = false;
-        return;
-      }
-
-      var thumb = this.$refs.thumb;
-      thumb.focus();
-      this.onMouseMove(e);
-      this.$emit('change', this.internalValue);
-    },
-    onBlur: function onBlur(e) {
-      this.isFocused = false;
-      this.$emit('blur', e);
-    },
-    onFocus: function onFocus(e) {
-      this.isFocused = true;
-      this.$emit('focus', e);
-    },
-    parseMouseMove: function parseMouseMove(e) {
-      var start = this.vertical ? 'top' : 'left';
-      var length = this.vertical ? 'height' : 'width';
-      var click = this.vertical ? 'clientY' : 'clientX';
-
-      var _a = this.$refs.track.getBoundingClientRect(),
-          _b = start,
-          trackStart = _a[_b],
-          _c = length,
-          trackLength = _a[_c];
-
-      var clickOffset = 'touches' in e ? e.touches[0][click] : e[click]; // Can we get rid of any here?
-      // It is possible for left to be NaN, force to number
-
-      var clickPos = Math.min(Math.max((clickOffset - trackStart) / trackLength, 0), 1) || 0;
-      if (this.vertical) clickPos = 1 - clickPos;
-      if (this.$vuetify.rtl) clickPos = 1 - clickPos;
-      var isInsideTrack = clickOffset >= trackStart && clickOffset <= trackStart + trackLength;
-      var value = parseFloat(this.min) + clickPos * (this.maxValue - this.minValue);
-      return {
-        value: value,
-        isInsideTrack: isInsideTrack
-      };
-    },
-    parseKeyDown: function parseKeyDown(e, value) {
-      if (!this.isInteractive) return;
-      var pageup = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].pageup,
-          pagedown = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].pagedown,
-          end = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].end,
-          home = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].home,
-          left = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].left,
-          right = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].right,
-          down = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].down,
-          up = _util_helpers__WEBPACK_IMPORTED_MODULE_6__["keyCodes"].up;
-      if (![pageup, pagedown, end, home, left, right, down, up].includes(e.keyCode)) return;
-      e.preventDefault();
-      var step = this.stepNumeric || 1;
-      var steps = (this.maxValue - this.minValue) / step;
-
-      if ([left, right, down, up].includes(e.keyCode)) {
-        this.keyPressed += 1;
-        var increase = this.$vuetify.rtl ? [left, up] : [right, up];
-        var direction = increase.includes(e.keyCode) ? 1 : -1;
-        var multiplier = e.shiftKey ? 3 : e.ctrlKey ? 2 : 1;
-        value = value + direction * step * multiplier;
-      } else if (e.keyCode === home) {
-        value = this.minValue;
-      } else if (e.keyCode === end) {
-        value = this.maxValue;
-      } else {
-        var direction = e.keyCode === pagedown ? 1 : -1;
-        value = value - direction * step * (steps > 100 ? steps / 10 : 10);
-      }
-
-      return value;
-    },
-    roundValue: function roundValue(value) {
-      if (!this.stepNumeric) return value; // Format input value using the same number
-      // of decimals places as in the step prop
-
-      var trimmedStep = this.step.toString().trim();
-      var decimals = trimmedStep.indexOf('.') > -1 ? trimmedStep.length - trimmedStep.indexOf('.') - 1 : 0;
-      var offset = this.minValue % this.stepNumeric;
-      var newValue = Math.round((value - offset) / this.stepNumeric) * this.stepNumeric + offset;
-      return parseFloat(Math.min(newValue, this.maxValue).toFixed(decimals));
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSlider/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VSlider/index.ts ***!
-  \*****************************************/
-/*! exports provided: VSlider, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSlider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSlider */ "./src/components/VSlider/VSlider.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlider", function() { return _VSlider__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSlider__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSnackbar/VSnackbar.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VSnackbar/VSnackbar.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSnackbar/VSnackbar.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VSnackbar/VSnackbar.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSnackbar_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSnackbar.sass */ "./src/components/VSnackbar/VSnackbar.sass");
-/* harmony import */ var _VSnackbar_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSnackbar_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-// Styles
- // Components
-
- // Mixins
-
-
-
-
- // Utilities
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(_VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_4__["default"], Object(_mixins_positionable__WEBPACK_IMPORTED_MODULE_5__["factory"])(['absolute', 'bottom', 'left', 'right', 'top'])
-/* @vue/component */
-).extend({
-  name: 'v-snackbar',
-  props: {
-    app: Boolean,
-    centered: Boolean,
-    contentClass: {
-      type: String,
-      default: ''
-    },
-    multiLine: Boolean,
-    text: Boolean,
-    timeout: {
-      type: [Number, String],
-      default: 5000
-    },
-    transition: {
-      type: [Boolean, String],
-      default: 'v-snack-transition',
-      validator: function validator(v) {
-        return typeof v === 'string' || v === false;
-      }
-    },
-    vertical: Boolean
-  },
-  data: function data() {
-    return {
-      activeTimeout: -1
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return {
-        'v-snack--absolute': this.absolute,
-        'v-snack--active': this.isActive,
-        'v-snack--bottom': this.bottom || !this.top,
-        'v-snack--centered': this.centered,
-        'v-snack--has-background': this.hasBackground,
-        'v-snack--left': this.left,
-        'v-snack--multi-line': this.multiLine && !this.vertical,
-        'v-snack--right': this.right,
-        'v-snack--text': this.text,
-        'v-snack--top': this.top,
-        'v-snack--vertical': this.vertical
-      };
-    },
-    // Text and outlined styles both
-    // use transparent backgrounds
-    hasBackground: function hasBackground() {
-      return !this.text && !this.outlined;
-    },
-    // Snackbar is dark by default
-    // override themeable logic.
-    isDark: function isDark() {
-      return this.hasBackground ? !this.light : _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"].options.computed.isDark.call(this);
-    },
-    styles: function styles() {
-      // Styles are not needed when
-      // using the absolute prop.
-      if (this.absolute) return {};
-      var _a = this.$vuetify.application,
-          bar = _a.bar,
-          bottom = _a.bottom,
-          footer = _a.footer,
-          insetFooter = _a.insetFooter,
-          left = _a.left,
-          right = _a.right,
-          top = _a.top; // Should always move for y-axis
-      // applicationable components.
-
-      return {
-        paddingBottom: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(bottom + footer + insetFooter),
-        paddingLeft: !this.app ? undefined : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(left),
-        paddingRight: !this.app ? undefined : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(right),
-        paddingTop: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["convertToUnit"])(bar + top)
-      };
-    }
-  },
-  watch: {
-    isActive: 'setTimeout',
-    timeout: 'setTimeout'
-  },
-  mounted: function mounted() {
-    if (this.isActive) this.setTimeout();
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('auto-height')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_8__["removed"])('auto-height', this);
-    }
-    /* istanbul ignore next */
-    // eslint-disable-next-line eqeqeq
-
-
-    if (this.timeout == 0) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_8__["deprecate"])('timeout="0"', '-1', this);
-    }
-  },
-  methods: {
-    genActions: function genActions() {
-      return this.$createElement('div', {
-        staticClass: 'v-snack__action '
-      }, [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["getSlot"])(this, 'action', {
-        attrs: {
-          class: 'v-snack__btn'
-        }
-      })]);
-    },
-    genContent: function genContent() {
-      var _a;
-
-      return this.$createElement('div', {
-        staticClass: 'v-snack__content',
-        class: (_a = {}, _a[this.contentClass] = true, _a),
-        attrs: {
-          role: 'status',
-          'aria-live': 'polite'
-        }
-      }, [Object(_util_helpers__WEBPACK_IMPORTED_MODULE_7__["getSlot"])(this)]);
-    },
-    genWrapper: function genWrapper() {
-      var setColor = this.hasBackground ? this.setBackgroundColor : this.setTextColor;
-      var data = setColor(this.color, {
-        staticClass: 'v-snack__wrapper',
-        class: _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this),
-        directives: [{
-          name: 'show',
-          value: this.isActive
-        }]
-      });
-      return this.$createElement('div', data, [this.genContent(), this.genActions()]);
-    },
-    genTransition: function genTransition() {
-      return this.$createElement('transition', {
-        props: {
-          name: this.transition
-        }
-      }, [this.genWrapper()]);
-    },
-    setTimeout: function setTimeout() {
-      var _this = this;
-
-      window.clearTimeout(this.activeTimeout);
-      var timeout = Number(this.timeout);
-
-      if (!this.isActive || // TODO: remove 0 in v3
-      [0, -1].includes(timeout)) {
-        return;
-      }
-
-      this.activeTimeout = window.setTimeout(function () {
-        _this.isActive = false;
-      }, timeout);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-snack',
-      class: this.classes,
-      style: this.styles
-    }, [this.transition !== false ? this.genTransition() : this.genWrapper()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSnackbar/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VSnackbar/index.ts ***!
-  \*******************************************/
-/*! exports provided: VSnackbar, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSnackbar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSnackbar */ "./src/components/VSnackbar/VSnackbar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSnackbar", function() { return _VSnackbar__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSnackbar__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSparkline/VSparkline.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VSparkline/VSparkline.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _helpers_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers/core */ "./src/components/VSparkline/helpers/core.ts");
-/* harmony import */ var _helpers_path__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers/path */ "./src/components/VSparkline/helpers/path.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Mixins
-
-
- // Utilities
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_0__["default"]).extend({
-  name: 'VSparkline',
-  inheritAttrs: false,
-  props: {
-    autoDraw: Boolean,
-    autoDrawDuration: {
-      type: Number,
-      default: 2000
-    },
-    autoDrawEasing: {
-      type: String,
-      default: 'ease'
-    },
-    autoLineWidth: {
-      type: Boolean,
-      default: false
-    },
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    fill: {
-      type: Boolean,
-      default: false
-    },
-    gradient: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    gradientDirection: {
-      type: String,
-      validator: function validator(val) {
-        return ['top', 'bottom', 'left', 'right'].includes(val);
-      },
-      default: 'top'
-    },
-    height: {
-      type: [String, Number],
-      default: 75
-    },
-    labels: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    labelSize: {
-      type: [Number, String],
-      default: 7
-    },
-    lineWidth: {
-      type: [String, Number],
-      default: 4
-    },
-    padding: {
-      type: [String, Number],
-      default: 8
-    },
-    showLabels: Boolean,
-    smooth: {
-      type: [Boolean, Number, String],
-      default: false
-    },
-    type: {
-      type: String,
-      default: 'trend',
-      validator: function validator(val) {
-        return ['trend', 'bar'].includes(val);
-      }
-    },
-    value: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    width: {
-      type: [Number, String],
-      default: 300
-    }
-  },
-  data: function data() {
-    return {
-      lastLength: 0
-    };
-  },
-  computed: {
-    parsedPadding: function parsedPadding() {
-      return Number(this.padding);
-    },
-    parsedWidth: function parsedWidth() {
-      return Number(this.width);
-    },
-    parsedHeight: function parsedHeight() {
-      return parseInt(this.height, 10);
-    },
-    parsedLabelSize: function parsedLabelSize() {
-      return parseInt(this.labelSize, 10) || 7;
-    },
-    totalHeight: function totalHeight() {
-      var height = this.parsedHeight;
-      if (this.hasLabels) height += parseInt(this.labelSize, 10) * 1.5;
-      return height;
-    },
-    totalWidth: function totalWidth() {
-      var width = this.parsedWidth;
-      if (this.type === 'bar') width = Math.max(this.value.length * this._lineWidth, width);
-      return width;
-    },
-    totalValues: function totalValues() {
-      return this.value.length;
-    },
-    _lineWidth: function _lineWidth() {
-      if (this.autoLineWidth && this.type !== 'trend') {
-        var totalPadding = this.parsedPadding * (this.totalValues + 1);
-        return (this.parsedWidth - totalPadding) / this.totalValues;
-      } else {
-        return parseFloat(this.lineWidth) || 4;
-      }
-    },
-    boundary: function boundary() {
-      if (this.type === 'bar') return {
-        minX: 0,
-        maxX: this.totalWidth,
-        minY: 0,
-        maxY: this.parsedHeight
-      };
-      var padding = this.parsedPadding;
-      return {
-        minX: padding,
-        maxX: this.totalWidth - padding,
-        minY: padding,
-        maxY: this.parsedHeight - padding
-      };
-    },
-    hasLabels: function hasLabels() {
-      return Boolean(this.showLabels || this.labels.length > 0 || this.$scopedSlots.label);
-    },
-    parsedLabels: function parsedLabels() {
-      var labels = [];
-      var points = this._values;
-      var len = points.length;
-
-      for (var i = 0; labels.length < len; i++) {
-        var item = points[i];
-        var value = this.labels[i];
-
-        if (!value) {
-          value = _typeof(item) === 'object' ? item.value : item;
-        }
-
-        labels.push({
-          x: item.x,
-          value: String(value)
-        });
-      }
-
-      return labels;
-    },
-    normalizedValues: function normalizedValues() {
-      return this.value.map(function (item) {
-        return typeof item === 'number' ? item : item.value;
-      });
-    },
-    _values: function _values() {
-      return this.type === 'trend' ? Object(_helpers_core__WEBPACK_IMPORTED_MODULE_2__["genPoints"])(this.normalizedValues, this.boundary) : Object(_helpers_core__WEBPACK_IMPORTED_MODULE_2__["genBars"])(this.normalizedValues, this.boundary);
-    },
-    textY: function textY() {
-      var y = this.parsedHeight;
-      if (this.type === 'trend') y -= 4;
-      return y;
-    },
-    _radius: function _radius() {
-      return this.smooth === true ? 8 : Number(this.smooth);
-    }
-  },
-  watch: {
-    value: {
-      immediate: true,
-      handler: function handler() {
-        var _this = this;
-
-        this.$nextTick(function () {
-          if (!_this.autoDraw || _this.type === 'bar' || !_this.$refs.path) return;
-          var path = _this.$refs.path;
-          var length = path.getTotalLength();
-
-          if (!_this.fill) {
-            path.style.transition = 'none';
-            path.style.strokeDasharray = length + ' ' + length;
-            path.style.strokeDashoffset = Math.abs(length - (_this.lastLength || 0)).toString();
-            path.getBoundingClientRect();
-            path.style.transition = "stroke-dashoffset " + _this.autoDrawDuration + "ms " + _this.autoDrawEasing;
-            path.style.strokeDashoffset = '0';
-          } else {
-            path.style.transformOrigin = 'bottom center';
-            path.style.transition = 'none';
-            path.style.transform = "scaleY(0)";
-            path.getBoundingClientRect();
-            path.style.transition = "transform " + _this.autoDrawDuration + "ms " + _this.autoDrawEasing;
-            path.style.transform = "scaleY(1)";
-          }
-
-          _this.lastLength = length;
-        });
-      }
-    }
-  },
-  methods: {
-    genGradient: function genGradient() {
-      var _this = this;
-
-      var gradientDirection = this.gradientDirection;
-      var gradient = this.gradient.slice(); // Pushes empty string to force
-      // a fallback to currentColor
-
-      if (!gradient.length) gradient.push('');
-      var len = Math.max(gradient.length - 1, 1);
-      var stops = gradient.reverse().map(function (color, index) {
-        return _this.$createElement('stop', {
-          attrs: {
-            offset: index / len,
-            'stop-color': color || 'currentColor'
-          }
-        });
-      });
-      return this.$createElement('defs', [this.$createElement('linearGradient', {
-        attrs: {
-          id: this._uid,
-          gradientUnits: 'userSpaceOnUse',
-          x1: gradientDirection === 'left' ? '100%' : '0',
-          y1: gradientDirection === 'top' ? '100%' : '0',
-          x2: gradientDirection === 'right' ? '100%' : '0',
-          y2: gradientDirection === 'bottom' ? '100%' : '0'
-        }
-      }, stops)]);
-    },
-    genG: function genG(children) {
-      return this.$createElement('g', {
-        style: {
-          fontSize: '8',
-          textAnchor: 'middle',
-          dominantBaseline: 'mathematical',
-          fill: 'currentColor'
-        }
-      }, children);
-    },
-    genPath: function genPath() {
-      var points = Object(_helpers_core__WEBPACK_IMPORTED_MODULE_2__["genPoints"])(this.normalizedValues, this.boundary);
-      return this.$createElement('path', {
-        attrs: {
-          d: Object(_helpers_path__WEBPACK_IMPORTED_MODULE_3__["genPath"])(points, this._radius, this.fill, this.parsedHeight),
-          fill: this.fill ? "url(#" + this._uid + ")" : 'none',
-          stroke: this.fill ? 'none' : "url(#" + this._uid + ")"
-        },
-        ref: 'path'
-      });
-    },
-    genLabels: function genLabels(offsetX) {
-      var _this = this;
-
-      var children = this.parsedLabels.map(function (item, i) {
-        return _this.$createElement('text', {
-          attrs: {
-            x: item.x + offsetX + _this._lineWidth / 2,
-            y: _this.textY + _this.parsedLabelSize * 0.75,
-            'font-size': Number(_this.labelSize) || 7
-          }
-        }, [_this.genLabel(item, i)]);
-      });
-      return this.genG(children);
-    },
-    genLabel: function genLabel(item, index) {
-      return this.$scopedSlots.label ? this.$scopedSlots.label({
-        index: index,
-        value: item.value
-      }) : item.value;
-    },
-    genBars: function genBars() {
-      if (!this.value || this.totalValues < 2) return undefined;
-
-      var bars = Object(_helpers_core__WEBPACK_IMPORTED_MODULE_2__["genBars"])(this.normalizedValues, this.boundary);
-
-      var offsetX = (Math.abs(bars[0].x - bars[1].x) - this._lineWidth) / 2;
-      return this.$createElement('svg', {
-        attrs: {
-          display: 'block',
-          viewBox: "0 0 " + this.totalWidth + " " + this.totalHeight
-        }
-      }, [this.genGradient(), this.genClipPath(bars, offsetX, this._lineWidth, 'sparkline-bar-' + this._uid), this.hasLabels ? this.genLabels(offsetX) : undefined, this.$createElement('g', {
-        attrs: {
-          'clip-path': "url(#sparkline-bar-" + this._uid + "-clip)",
-          fill: "url(#" + this._uid + ")"
-        }
-      }, [this.$createElement('rect', {
-        attrs: {
-          x: 0,
-          y: 0,
-          width: this.totalWidth,
-          height: this.height
-        }
-      })])]);
-    },
-    genClipPath: function genClipPath(bars, offsetX, lineWidth, id) {
-      var _this = this;
-
-      var rounding = typeof this.smooth === 'number' ? this.smooth : this.smooth ? 2 : 0;
-      return this.$createElement('clipPath', {
-        attrs: {
-          id: id + "-clip"
-        }
-      }, bars.map(function (item) {
-        return _this.$createElement('rect', {
-          attrs: {
-            x: item.x + offsetX,
-            y: item.y,
-            width: lineWidth,
-            height: item.height,
-            rx: rounding,
-            ry: rounding
-          }
-        }, [_this.autoDraw ? _this.$createElement('animate', {
-          attrs: {
-            attributeName: 'height',
-            from: 0,
-            to: item.height,
-            dur: _this.autoDrawDuration + "ms",
-            fill: 'freeze'
-          }
-        }) : undefined]);
-      }));
-    },
-    genTrend: function genTrend() {
-      return this.$createElement('svg', this.setTextColor(this.color, {
-        attrs: __assign(__assign({}, this.$attrs), {
-          display: 'block',
-          'stroke-width': this._lineWidth || 1,
-          viewBox: "0 0 " + this.width + " " + this.totalHeight
-        })
-      }), [this.genGradient(), this.hasLabels && this.genLabels(-(this._lineWidth / 2)), this.genPath()]);
-    }
-  },
-  render: function render(h) {
-    if (this.totalValues < 2) return undefined;
-    return this.type === 'trend' ? this.genTrend() : this.genBars();
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSparkline/helpers/core.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VSparkline/helpers/core.ts ***!
-  \***************************************************/
-/*! exports provided: genPoints, genBars */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genPoints", function() { return genPoints; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genBars", function() { return genBars; });
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-};
-
-function genPoints(values, boundary) {
-  var minX = boundary.minX,
-      maxX = boundary.maxX,
-      minY = boundary.minY,
-      maxY = boundary.maxY;
-  var totalValues = values.length;
-  var maxValue = Math.max.apply(Math, __spread(values));
-  var minValue = Math.min.apply(Math, __spread(values));
-  var gridX = (maxX - minX) / (totalValues - 1);
-  var gridY = (maxY - minY) / (maxValue - minValue || 1);
-  return values.map(function (value, index) {
-    return {
-      x: minX + index * gridX,
-      y: maxY - (value - minValue) * gridY,
-      value: value
-    };
-  });
-}
-function genBars(values, boundary) {
-  var minX = boundary.minX,
-      maxX = boundary.maxX,
-      minY = boundary.minY,
-      maxY = boundary.maxY;
-  var totalValues = values.length;
-  var maxValue = Math.max.apply(Math, __spread(values));
-  var minValue = Math.min.apply(Math, __spread(values));
-  if (minValue > 0) minValue = 0;
-  if (maxValue < 0) maxValue = 0;
-  var gridX = maxX / totalValues;
-  var gridY = (maxY - minY) / (maxValue - minValue || 1);
-  var horizonY = maxY - Math.abs(minValue * gridY);
-  return values.map(function (value, index) {
-    var height = Math.abs(gridY * value);
-    return {
-      x: minX + index * gridX,
-      y: horizonY - height + +(value < 0) * height,
-      height: height,
-      value: value
-    };
-  });
-}
-
-/***/ }),
-
-/***/ "./src/components/VSparkline/helpers/math.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VSparkline/helpers/math.ts ***!
-  \***************************************************/
-/*! exports provided: checkCollinear, getDistance, moveTo */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkCollinear", function() { return checkCollinear; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDistance", function() { return getDistance; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "moveTo", function() { return moveTo; });
-function int(value) {
-  return parseInt(value, 10);
-}
-/**
- * https://en.wikipedia.org/wiki/Collinearity
- * x=(x1+x2)/2
- * y=(y1+y2)/2
- */
-
-
-function checkCollinear(p0, p1, p2) {
-  return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
-}
-function getDistance(p1, p2) {
-  return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
-}
-function moveTo(to, from, radius) {
-  var vector = {
-    x: to.x - from.x,
-    y: to.y - from.y
-  };
-  var length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
-  var unitVector = {
-    x: vector.x / length,
-    y: vector.y / length
-  };
-  return {
-    x: from.x + unitVector.x * radius,
-    y: from.y + unitVector.y * radius
-  };
-}
-
-/***/ }),
-
-/***/ "./src/components/VSparkline/helpers/path.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VSparkline/helpers/path.ts ***!
-  \***************************************************/
-/*! exports provided: genPath */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genPath", function() { return genPath; });
-/* harmony import */ var _math__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math */ "./src/components/VSparkline/helpers/math.ts");
-
-/**
- * From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
- */
-
-function genPath(points, radius, fill, height) {
-  if (fill === void 0) {
-    fill = false;
-  }
-
-  if (height === void 0) {
-    height = 75;
-  }
-
-  var start = points.shift();
-  var end = points[points.length - 1];
-  return (fill ? "M" + start.x + " " + (height - start.x + 2) + " L" + start.x + " " + start.y : "M" + start.x + " " + start.y) + points.map(function (point, index) {
-    var next = points[index + 1];
-    var prev = points[index - 1] || start;
-    var isCollinear = next && Object(_math__WEBPACK_IMPORTED_MODULE_0__["checkCollinear"])(next, point, prev);
-
-    if (!next || isCollinear) {
-      return "L" + point.x + " " + point.y;
-    }
-
-    var threshold = Math.min(Object(_math__WEBPACK_IMPORTED_MODULE_0__["getDistance"])(prev, point), Object(_math__WEBPACK_IMPORTED_MODULE_0__["getDistance"])(next, point));
-    var isTooCloseForRadius = threshold / 2 < radius;
-    var radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
-    var before = Object(_math__WEBPACK_IMPORTED_MODULE_0__["moveTo"])(prev, point, radiusForPoint);
-    var after = Object(_math__WEBPACK_IMPORTED_MODULE_0__["moveTo"])(next, point, radiusForPoint);
-    return "L" + before.x + " " + before.y + "S" + point.x + " " + point.y + " " + after.x + " " + after.y;
-  }).join('') + (fill ? "L" + end.x + " " + (height - start.x + 2) + " Z" : '');
-}
-
-/***/ }),
-
-/***/ "./src/components/VSparkline/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VSparkline/index.ts ***!
-  \********************************************/
-/*! exports provided: VSparkline, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSparkline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSparkline */ "./src/components/VSparkline/VSparkline.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSparkline", function() { return _VSparkline__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSparkline__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSpeedDial/VSpeedDial.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VSpeedDial/VSpeedDial.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSpeedDial/VSpeedDial.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VSpeedDial/VSpeedDial.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSpeedDial_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSpeedDial.sass */ "./src/components/VSpeedDial/VSpeedDial.sass");
-/* harmony import */ var _VSpeedDial_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSpeedDial_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _mixins_positionable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/positionable */ "./src/mixins/positionable/index.ts");
-/* harmony import */ var _mixins_transitionable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/transitionable */ "./src/mixins/transitionable/index.ts");
-/* harmony import */ var _directives_click_outside__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../directives/click-outside */ "./src/directives/click-outside/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Styles
- // Mixins
-
-
-
- // Directives
-
- // Types
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(_mixins_positionable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_transitionable__WEBPACK_IMPORTED_MODULE_3__["default"]).extend({
-  name: 'v-speed-dial',
-  directives: {
-    ClickOutside: _directives_click_outside__WEBPACK_IMPORTED_MODULE_4__["default"]
-  },
-  props: {
-    direction: {
-      type: String,
-      default: 'top',
-      validator: function validator(val) {
-        return ['top', 'right', 'bottom', 'left'].includes(val);
-      }
-    },
-    openOnHover: Boolean,
-    transition: {
-      type: String,
-      default: 'scale-transition'
-    }
-  },
-  computed: {
-    classes: function classes() {
-      var _a;
-
-      return _a = {
-        'v-speed-dial': true,
-        'v-speed-dial--top': this.top,
-        'v-speed-dial--right': this.right,
-        'v-speed-dial--bottom': this.bottom,
-        'v-speed-dial--left': this.left,
-        'v-speed-dial--absolute': this.absolute,
-        'v-speed-dial--fixed': this.fixed
-      }, _a["v-speed-dial--direction-" + this.direction] = true, _a['v-speed-dial--is-active'] = this.isActive, _a;
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var children = [];
-    var data = {
-      class: this.classes,
-      directives: [{
-        name: 'click-outside',
-        value: function value() {
-          return _this.isActive = false;
-        }
-      }],
-      on: {
-        click: function click() {
-          return _this.isActive = !_this.isActive;
-        }
-      }
-    };
-
-    if (this.openOnHover) {
-      data.on.mouseenter = function () {
-        return _this.isActive = true;
-      };
-
-      data.on.mouseleave = function () {
-        return _this.isActive = false;
-      };
-    }
-
-    if (this.isActive) {
-      var btnCount_1 = 0;
-      children = (this.$slots.default || []).map(function (b, i) {
-        if (b.tag && typeof b.componentOptions !== 'undefined' && (b.componentOptions.Ctor.options.name === 'v-btn' || b.componentOptions.Ctor.options.name === 'v-tooltip')) {
-          btnCount_1++;
-          return h('div', {
-            style: {
-              transitionDelay: btnCount_1 * 0.05 + 's'
-            },
-            key: i
-          }, [b]);
-        } else {
-          b.key = i;
-          return b;
-        }
-      });
-    }
-
-    var list = h('transition-group', {
-      class: 'v-speed-dial__list',
-      props: {
-        name: this.transition,
-        mode: this.mode,
-        origin: this.origin,
-        tag: 'div'
-      }
-    }, children);
-    return h('div', data, [this.$slots.activator, list]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSpeedDial/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VSpeedDial/index.ts ***!
-  \********************************************/
-/*! exports provided: VSpeedDial, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSpeedDial__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSpeedDial */ "./src/components/VSpeedDial/VSpeedDial.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSpeedDial", function() { return _VSpeedDial__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSpeedDial__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VStepper/VStepper.sass":
-/*!***********************************************!*\
-  !*** ./src/components/VStepper/VStepper.sass ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VStepper/VStepper.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VStepper/VStepper.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VStepper_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VStepper.sass */ "./src/components/VStepper/VStepper.sass");
-/* harmony import */ var _VStepper_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VStepper_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_1__["provide"])('stepper'), _mixins_proxyable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-stepper',
-  provide: function provide() {
-    return {
-      stepClick: this.stepClick,
-      isVertical: this.vertical
-    };
-  },
-  props: {
-    altLabels: Boolean,
-    nonLinear: Boolean,
-    vertical: Boolean
-  },
-  data: function data() {
-    var data = {
-      isBooted: false,
-      steps: [],
-      content: [],
-      isReverse: false
-    };
-    data.internalLazyValue = this.value != null ? this.value : (data[0] || {}).step || 1;
-    return data;
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-stepper--is-booted': this.isBooted,
-        'v-stepper--vertical': this.vertical,
-        'v-stepper--alt-labels': this.altLabels,
-        'v-stepper--non-linear': this.nonLinear
-      }, this.themeClasses);
-    }
-  },
-  watch: {
-    internalValue: function internalValue(val, oldVal) {
-      this.isReverse = Number(val) < Number(oldVal);
-      oldVal && (this.isBooted = true);
-      this.updateView();
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$listeners.input) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_5__["breaking"])('@input', '@change', this);
-    }
-  },
-  mounted: function mounted() {
-    this.updateView();
-  },
-  methods: {
-    register: function register(item) {
-      if (item.$options.name === 'v-stepper-step') {
-        this.steps.push(item);
-      } else if (item.$options.name === 'v-stepper-content') {
-        item.isVertical = this.vertical;
-        this.content.push(item);
-      }
-    },
-    unregister: function unregister(item) {
-      if (item.$options.name === 'v-stepper-step') {
-        this.steps = this.steps.filter(function (i) {
-          return i !== item;
-        });
-      } else if (item.$options.name === 'v-stepper-content') {
-        item.isVertical = this.vertical;
-        this.content = this.content.filter(function (i) {
-          return i !== item;
-        });
-      }
-    },
-    stepClick: function stepClick(step) {
-      var _this = this;
-
-      this.$nextTick(function () {
-        return _this.internalValue = step;
-      });
-    },
-    updateView: function updateView() {
-      for (var index = this.steps.length; --index >= 0;) {
-        this.steps[index].toggle(this.internalValue);
-      }
-
-      for (var index = this.content.length; --index >= 0;) {
-        this.content[index].toggle(this.internalValue, this.isReverse);
-      }
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-stepper',
-      class: this.classes
-    }, this.$slots.default);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VStepper/VStepperContent.ts":
-/*!****************************************************!*\
-  !*** ./src/components/VStepper/VStepperContent.ts ***!
-  \****************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Components
- // Mixins
-
- // Helpers
-
- // Utilities
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_1__["inject"])('stepper', 'v-stepper-content', 'v-stepper'));
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-stepper-content',
-  inject: {
-    isVerticalProvided: {
-      from: 'isVertical'
-    }
-  },
-  props: {
-    step: {
-      type: [Number, String],
-      required: true
-    }
-  },
-  data: function data() {
-    return {
-      height: 0,
-      // Must be null to allow
-      // previous comparison
-      isActive: null,
-      isReverse: false,
-      isVertical: this.isVerticalProvided
-    };
-  },
-  computed: {
-    computedTransition: function computedTransition() {
-      // Fix for #8978
-      var reverse = this.$vuetify.rtl ? !this.isReverse : this.isReverse;
-      return reverse ? _transitions__WEBPACK_IMPORTED_MODULE_0__["VTabReverseTransition"] : _transitions__WEBPACK_IMPORTED_MODULE_0__["VTabTransition"];
-    },
-    styles: function styles() {
-      if (!this.isVertical) return {};
-      return {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["convertToUnit"])(this.height)
-      };
-    }
-  },
-  watch: {
-    isActive: function isActive(current, previous) {
-      // If active and the previous state
-      // was null, is just booting up
-      if (current && previous == null) {
-        this.height = 'auto';
-        return;
-      }
-
-      if (!this.isVertical) return;
-      if (this.isActive) this.enter();else this.leave();
-    }
-  },
-  mounted: function mounted() {
-    this.$refs.wrapper.addEventListener('transitionend', this.onTransition, false);
-    this.stepper && this.stepper.register(this);
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.$refs.wrapper.removeEventListener('transitionend', this.onTransition, false);
-    this.stepper && this.stepper.unregister(this);
-  },
-  methods: {
-    onTransition: function onTransition(e) {
-      if (!this.isActive || e.propertyName !== 'height') return;
-      this.height = 'auto';
-    },
-    enter: function enter() {
-      var _this = this;
-
-      var scrollHeight = 0; // Render bug with height
-
-      requestAnimationFrame(function () {
-        scrollHeight = _this.$refs.wrapper.scrollHeight;
-      });
-      this.height = 0; // Give the collapsing element time to collapse
-
-      setTimeout(function () {
-        return _this.isActive && (_this.height = scrollHeight || 'auto');
-      }, 450);
-    },
-    leave: function leave() {
-      var _this = this;
-
-      this.height = this.$refs.wrapper.clientHeight;
-      setTimeout(function () {
-        return _this.height = 0;
-      }, 10);
-    },
-    toggle: function toggle(step, reverse) {
-      this.isActive = step.toString() === this.step.toString();
-      this.isReverse = reverse;
-    }
-  },
-  render: function render(h) {
-    var contentData = {
-      staticClass: 'v-stepper__content'
-    };
-    var wrapperData = {
-      staticClass: 'v-stepper__wrapper',
-      style: this.styles,
-      ref: 'wrapper'
-    };
-
-    if (!this.isVertical) {
-      contentData.directives = [{
-        name: 'show',
-        value: this.isActive
-      }];
-    }
-
-    var wrapper = h('div', wrapperData, [this.$slots.default]);
-    var content = h('div', contentData, [wrapper]);
-    return h(this.computedTransition, {
-      on: this.$listeners
-    }, [content]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VStepper/VStepperStep.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VStepper/VStepperStep.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Components
- // Mixins
-
-
- // Directives
-
- // Utilities
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_2__["inject"])('stepper', 'v-stepper-step', 'v-stepper'));
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-stepper-step',
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_3__["default"]
-  },
-  inject: ['stepClick'],
-  props: {
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    complete: Boolean,
-    completeIcon: {
-      type: String,
-      default: '$complete'
-    },
-    editable: Boolean,
-    editIcon: {
-      type: String,
-      default: '$edit'
-    },
-    errorIcon: {
-      type: String,
-      default: '$error'
-    },
-    rules: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    step: [Number, String]
-  },
-  data: function data() {
-    return {
-      isActive: false,
-      isInactive: true
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return {
-        'v-stepper__step--active': this.isActive,
-        'v-stepper__step--editable': this.editable,
-        'v-stepper__step--inactive': this.isInactive,
-        'v-stepper__step--error error--text': this.hasError,
-        'v-stepper__step--complete': this.complete
-      };
-    },
-    hasError: function hasError() {
-      return this.rules.some(function (validate) {
-        return validate() !== true;
-      });
-    }
-  },
-  mounted: function mounted() {
-    this.stepper && this.stepper.register(this);
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.stepper && this.stepper.unregister(this);
-  },
-  methods: {
-    click: function click(e) {
-      e.stopPropagation();
-      this.$emit('click', e);
-
-      if (this.editable) {
-        this.stepClick(this.step);
-      }
-    },
-    genIcon: function genIcon(icon) {
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_0__["default"], icon);
-    },
-    genLabel: function genLabel() {
-      return this.$createElement('div', {
-        staticClass: 'v-stepper__label'
-      }, this.$slots.default);
-    },
-    genStep: function genStep() {
-      var color = !this.hasError && (this.complete || this.isActive) ? this.color : false;
-      return this.$createElement('span', this.setBackgroundColor(color, {
-        staticClass: 'v-stepper__step__step'
-      }), this.genStepContent());
-    },
-    genStepContent: function genStepContent() {
-      var children = [];
-
-      if (this.hasError) {
-        children.push(this.genIcon(this.errorIcon));
-      } else if (this.complete) {
-        if (this.editable) {
-          children.push(this.genIcon(this.editIcon));
-        } else {
-          children.push(this.genIcon(this.completeIcon));
-        }
-      } else {
-        children.push(String(this.step));
-      }
-
-      return children;
-    },
-    toggle: function toggle(step) {
-      this.isActive = step.toString() === this.step.toString();
-      this.isInactive = Number(step) < Number(this.step);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-stepper__step',
-      class: this.classes,
-      directives: [{
-        name: 'ripple',
-        value: this.editable
-      }],
-      on: {
-        click: this.click
-      }
-    }, [this.genStep(), this.genLabel()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VStepper/index.ts":
-/*!******************************************!*\
-  !*** ./src/components/VStepper/index.ts ***!
-  \******************************************/
-/*! exports provided: VStepper, VStepperContent, VStepperStep, VStepperHeader, VStepperItems, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VStepperHeader", function() { return VStepperHeader; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VStepperItems", function() { return VStepperItems; });
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _VStepper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VStepper */ "./src/components/VStepper/VStepper.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepper", function() { return _VStepper__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _VStepperStep__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VStepperStep */ "./src/components/VStepper/VStepperStep.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepperStep", function() { return _VStepperStep__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-/* harmony import */ var _VStepperContent__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VStepperContent */ "./src/components/VStepper/VStepperContent.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepperContent", function() { return _VStepperContent__WEBPACK_IMPORTED_MODULE_3__["default"]; });
-
-
-
-
-
-var VStepperHeader = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-stepper__header');
-var VStepperItems = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["createSimpleFunctional"])('v-stepper__items');
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VStepper: _VStepper__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VStepperContent: _VStepperContent__WEBPACK_IMPORTED_MODULE_3__["default"],
-    VStepperStep: _VStepperStep__WEBPACK_IMPORTED_MODULE_2__["default"],
-    VStepperHeader: VStepperHeader,
-    VStepperItems: VStepperItems
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VSubheader/VSubheader.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VSubheader/VSubheader.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSubheader/VSubheader.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VSubheader/VSubheader.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSubheader_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSubheader.sass */ "./src/components/VSubheader/VSubheader.sass");
-/* harmony import */ var _VSubheader_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSubheader_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-subheader',
-  props: {
-    inset: Boolean
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-subheader',
-      class: __assign({
-        'v-subheader--inset': this.inset
-      }, this.themeClasses),
-      attrs: this.$attrs,
-      on: this.$listeners
-    }, this.$slots.default);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSubheader/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VSubheader/index.ts ***!
-  \********************************************/
-/*! exports provided: VSubheader, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSubheader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSubheader */ "./src/components/VSubheader/VSubheader.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSubheader", function() { return _VSubheader__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSubheader__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSwitch/VSwitch.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VSwitch/VSwitch.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSwitch/VSwitch.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VSwitch/VSwitch.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../styles/components/_selection-controls.sass */ "./src/styles/components/_selection-controls.sass");
-/* harmony import */ var _styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_styles_components_selection_controls_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSwitch_sass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VSwitch.sass */ "./src/components/VSwitch/VSwitch.sass");
-/* harmony import */ var _VSwitch_sass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_VSwitch_sass__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _mixins_selectable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/selectable */ "./src/mixins/selectable/index.ts");
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../directives/touch */ "./src/directives/touch/index.ts");
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _VProgressCircular_VProgressCircular__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../VProgressCircular/VProgressCircular */ "./src/components/VProgressCircular/VProgressCircular.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
-
- // Mixins
-
-
- // Directives
-
- // Components
-
-
- // Helpers
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_selectable__WEBPACK_IMPORTED_MODULE_2__["default"].extend({
-  name: 'v-switch',
-  directives: {
-    Touch: _directives_touch__WEBPACK_IMPORTED_MODULE_4__["default"]
-  },
-  props: {
-    inset: Boolean,
-    loading: {
-      type: [Boolean, String],
-      default: false
-    },
-    flat: {
-      type: Boolean,
-      default: false
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VInput__WEBPACK_IMPORTED_MODULE_3__["default"].options.computed.classes.call(this)), {
-        'v-input--selection-controls v-input--switch': true,
-        'v-input--switch--flat': this.flat,
-        'v-input--switch--inset': this.inset
-      });
-    },
-    attrs: function attrs() {
-      return {
-        'aria-checked': String(this.isActive),
-        'aria-disabled': String(this.isDisabled),
-        role: 'switch'
-      };
-    },
-    // Do not return undefined if disabled,
-    // according to spec, should still show
-    // a color when disabled and active
-    validationState: function validationState() {
-      if (this.hasError && this.shouldValidate) return 'error';
-      if (this.hasSuccess) return 'success';
-      if (this.hasColor !== null) return this.computedColor;
-      return undefined;
-    },
-    switchData: function switchData() {
-      return this.setTextColor(this.loading ? undefined : this.validationState, {
-        class: this.themeClasses
-      });
-    }
-  },
-  methods: {
-    genDefaultSlot: function genDefaultSlot() {
-      return [this.genSwitch(), this.genLabel()];
-    },
-    genSwitch: function genSwitch() {
-      return this.$createElement('div', {
-        staticClass: 'v-input--selection-controls__input'
-      }, [this.genInput('checkbox', __assign(__assign({}, this.attrs), this.attrs$)), this.genRipple(this.setTextColor(this.validationState, {
-        directives: [{
-          name: 'touch',
-          value: {
-            left: this.onSwipeLeft,
-            right: this.onSwipeRight
-          }
-        }]
-      })), this.$createElement('div', __assign({
-        staticClass: 'v-input--switch__track'
-      }, this.switchData)), this.$createElement('div', __assign({
-        staticClass: 'v-input--switch__thumb'
-      }, this.switchData), [this.genProgress()])]);
-    },
-    genProgress: function genProgress() {
-      return this.$createElement(_transitions__WEBPACK_IMPORTED_MODULE_5__["VFabTransition"], {}, [this.loading === false ? null : this.$slots.progress || this.$createElement(_VProgressCircular_VProgressCircular__WEBPACK_IMPORTED_MODULE_6__["default"], {
-        props: {
-          color: this.loading === true || this.loading === '' ? this.color || 'primary' : this.loading,
-          size: 16,
-          width: 2,
-          indeterminate: true
-        }
-      })]);
-    },
-    onSwipeLeft: function onSwipeLeft() {
-      if (this.isActive) this.onChange();
-    },
-    onSwipeRight: function onSwipeRight() {
-      if (!this.isActive) this.onChange();
-    },
-    onKeydown: function onKeydown(e) {
-      if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_7__["keyCodes"].left && this.isActive || e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_7__["keyCodes"].right && !this.isActive) this.onChange();
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSwitch/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VSwitch/index.ts ***!
-  \*****************************************/
-/*! exports provided: VSwitch, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSwitch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSwitch */ "./src/components/VSwitch/VSwitch.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSwitch", function() { return _VSwitch__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSwitch__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VSystemBar/VSystemBar.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VSystemBar/VSystemBar.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VSystemBar/VSystemBar.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VSystemBar/VSystemBar.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSystemBar_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSystemBar.sass */ "./src/components/VSystemBar/VSystemBar.sass");
-/* harmony import */ var _VSystemBar_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VSystemBar_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/applicationable */ "./src/mixins/applicationable/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Mixins
-
-
-
- // Utilities
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(Object(_mixins_applicationable__WEBPACK_IMPORTED_MODULE_1__["default"])('bar', ['height', 'window']), _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-system-bar',
-  props: {
-    height: [Number, String],
-    lightsOut: Boolean,
-    window: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-system-bar--lights-out': this.lightsOut,
-        'v-system-bar--absolute': this.absolute,
-        'v-system-bar--fixed': !this.absolute && (this.app || this.fixed),
-        'v-system-bar--window': this.window
-      }, this.themeClasses);
-    },
-    computedHeight: function computedHeight() {
-      if (this.height) {
-        return isNaN(parseInt(this.height)) ? this.height : parseInt(this.height);
-      }
-
-      return this.window ? 32 : 24;
-    },
-    styles: function styles() {
-      return {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["convertToUnit"])(this.computedHeight)
-      };
-    }
-  },
-  methods: {
-    updateApplication: function updateApplication() {
-      return this.$el ? this.$el.clientHeight : this.computedHeight;
-    }
-  },
-  render: function render(h) {
-    var data = {
-      staticClass: 'v-system-bar',
-      class: this.classes,
-      style: this.styles,
-      on: this.$listeners
-    };
-    return h('div', this.setBackgroundColor(this.color, data), Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getSlot"])(this));
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VSystemBar/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VSystemBar/index.ts ***!
-  \********************************************/
-/*! exports provided: VSystemBar, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSystemBar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VSystemBar */ "./src/components/VSystemBar/VSystemBar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSystemBar", function() { return _VSystemBar__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSystemBar__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VTabs/VTab.ts":
-/*!**************************************!*\
-  !*** ./src/components/VTabs/VTab.ts ***!
-  \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _mixins_routable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/routable */ "./src/mixins/routable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Mixins
-
-
-
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_routable__WEBPACK_IMPORTED_MODULE_1__["default"], // Must be after routable
-// to overwrite activeClass
-Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_0__["factory"])('tabsBar'), _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]);
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend().extend({
-  name: 'v-tab',
-  props: {
-    ripple: {
-      type: [Boolean, Object],
-      default: true
-    }
-  },
-  data: function data() {
-    return {
-      proxyClass: 'v-tab--active'
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign({
-        'v-tab': true
-      }, _mixins_routable__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-tab--disabled': this.disabled
-      }), this.groupClasses);
-    },
-    value: function value() {
-      var to = this.to || this.href || '';
-
-      if (this.$router && this.to === Object(this.to)) {
-        var resolve = this.$router.resolve(this.to, this.$route, this.append);
-        to = resolve.href;
-      }
-
-      return to.replace('#', '');
-    }
-  },
-  mounted: function mounted() {
-    this.onRouteChange();
-  },
-  methods: {
-    click: function click(e) {
-      // If user provides an
-      // actual link, do not
-      // prevent default
-      if (this.href && this.href.indexOf('#') > -1) e.preventDefault();
-      if (e.detail) this.$el.blur();
-      this.$emit('click', e);
-      this.to || this.toggle();
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var _a = this.generateRouteLink(),
-        tag = _a.tag,
-        data = _a.data;
-
-    data.attrs = __assign(__assign({}, data.attrs), {
-      'aria-selected': String(this.isActive),
-      role: 'tab',
-      tabindex: 0
-    });
-    data.on = __assign(__assign({}, data.on), {
-      keydown: function keydown(e) {
-        if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_3__["keyCodes"].enter) _this.click(e);
-
-        _this.$emit('keydown', e);
-      }
-    });
-    return h(tag, data, this.$slots.default);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTabs/VTabItem.ts":
-/*!******************************************!*\
-  !*** ./src/components/VTabs/VTabItem.ts ***!
-  \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VWindow/VWindowItem */ "./src/components/VWindow/VWindowItem.ts");
-// Extensions
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
-  name: 'v-tab-item',
-  props: {
-    id: String
-  },
-  methods: {
-    genWindowItem: function genWindowItem() {
-      var item = _VWindow_VWindowItem__WEBPACK_IMPORTED_MODULE_0__["default"].options.methods.genWindowItem.call(this);
-      item.data.domProps = item.data.domProps || {};
-      item.data.domProps.id = this.id || this.value;
-      return item;
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTabs/VTabs.sass":
-/*!*****************************************!*\
-  !*** ./src/components/VTabs/VTabs.sass ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTabs/VTabs.ts":
-/*!***************************************!*\
-  !*** ./src/components/VTabs/VTabs.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTabs_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTabs.sass */ "./src/components/VTabs/VTabs.sass");
-/* harmony import */ var _VTabs_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTabs_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VTabsBar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VTabsBar */ "./src/components/VTabs/VTabsBar.ts");
-/* harmony import */ var _VTabsItems__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VTabsItems */ "./src/components/VTabs/VTabsItems.ts");
-/* harmony import */ var _VTabsSlider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VTabsSlider */ "./src/components/VTabs/VTabsSlider.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/proxyable */ "./src/mixins/proxyable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Components
-
-
-
- // Mixins
-
-
-
- // Directives
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_9__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_proxyable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_6__["default"]);
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-tabs',
-  directives: {
-    Resize: _directives_resize__WEBPACK_IMPORTED_MODULE_7__["default"]
-  },
-  props: {
-    activeClass: {
-      type: String,
-      default: ''
-    },
-    alignWithTitle: Boolean,
-    backgroundColor: String,
-    centerActive: Boolean,
-    centered: Boolean,
-    fixedTabs: Boolean,
-    grow: Boolean,
-    height: {
-      type: [Number, String],
-      default: undefined
-    },
-    hideSlider: Boolean,
-    iconsAndText: Boolean,
-    mobileBreakpoint: [String, Number],
-    nextIcon: {
-      type: String,
-      default: '$next'
-    },
-    optional: Boolean,
-    prevIcon: {
-      type: String,
-      default: '$prev'
-    },
-    right: Boolean,
-    showArrows: [Boolean, String],
-    sliderColor: String,
-    sliderSize: {
-      type: [Number, String],
-      default: 2
-    },
-    vertical: Boolean
-  },
-  data: function data() {
-    return {
-      resizeTimeout: 0,
-      slider: {
-        height: null,
-        left: null,
-        right: null,
-        top: null,
-        width: null
-      },
-      transitionTime: 300
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-tabs--align-with-title': this.alignWithTitle,
-        'v-tabs--centered': this.centered,
-        'v-tabs--fixed-tabs': this.fixedTabs,
-        'v-tabs--grow': this.grow,
-        'v-tabs--icons-and-text': this.iconsAndText,
-        'v-tabs--right': this.right,
-        'v-tabs--vertical': this.vertical
-      }, this.themeClasses);
-    },
-    isReversed: function isReversed() {
-      return this.$vuetify.rtl && this.vertical;
-    },
-    sliderStyles: function sliderStyles() {
-      return {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.slider.height),
-        left: this.isReversed ? undefined : Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.slider.left),
-        right: this.isReversed ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.slider.right) : undefined,
-        top: this.vertical ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.slider.top) : undefined,
-        transition: this.slider.left != null ? null : 'none',
-        width: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.slider.width)
-      };
-    },
-    computedColor: function computedColor() {
-      if (this.color) return this.color;else if (this.isDark && !this.appIsDark) return 'white';else return 'primary';
-    }
-  },
-  watch: {
-    alignWithTitle: 'callSlider',
-    centered: 'callSlider',
-    centerActive: 'callSlider',
-    fixedTabs: 'callSlider',
-    grow: 'callSlider',
-    iconsAndText: 'callSlider',
-    right: 'callSlider',
-    showArrows: 'callSlider',
-    vertical: 'callSlider',
-    '$vuetify.application.left': 'onResize',
-    '$vuetify.application.right': 'onResize',
-    '$vuetify.rtl': 'onResize'
-  },
-  mounted: function mounted() {
-    var _this = this;
-
-    this.$nextTick(function () {
-      window.setTimeout(_this.callSlider, 30);
-    });
-  },
-  methods: {
-    callSlider: function callSlider() {
-      var _this = this;
-
-      if (this.hideSlider || !this.$refs.items || !this.$refs.items.selectedItems.length) {
-        this.slider.width = 0;
-        return false;
-      }
-
-      this.$nextTick(function () {
-        // Give screen time to paint
-        var activeTab = _this.$refs.items.selectedItems[0];
-        /* istanbul ignore if */
-
-        if (!activeTab || !activeTab.$el) {
-          _this.slider.width = 0;
-          _this.slider.left = 0;
-          return;
-        }
-
-        var el = activeTab.$el;
-        _this.slider = {
-          height: !_this.vertical ? Number(_this.sliderSize) : el.scrollHeight,
-          left: _this.vertical ? 0 : el.offsetLeft,
-          right: _this.vertical ? 0 : el.offsetLeft + el.offsetWidth,
-          top: el.offsetTop,
-          width: _this.vertical ? Number(_this.sliderSize) : el.scrollWidth
-        };
-      });
-      return true;
-    },
-    genBar: function genBar(items, slider) {
-      var _this = this;
-
-      var data = {
-        style: {
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.height)
-        },
-        props: {
-          activeClass: this.activeClass,
-          centerActive: this.centerActive,
-          dark: this.dark,
-          light: this.light,
-          mandatory: !this.optional,
-          mobileBreakpoint: this.mobileBreakpoint,
-          nextIcon: this.nextIcon,
-          prevIcon: this.prevIcon,
-          showArrows: this.showArrows,
-          value: this.internalValue
-        },
-        on: {
-          'call:slider': this.callSlider,
-          change: function change(val) {
-            _this.internalValue = val;
-          }
-        },
-        ref: 'items'
-      };
-      this.setTextColor(this.computedColor, data);
-      this.setBackgroundColor(this.backgroundColor, data);
-      return this.$createElement(_VTabsBar__WEBPACK_IMPORTED_MODULE_1__["default"], data, [this.genSlider(slider), items]);
-    },
-    genItems: function genItems(items, item) {
-      var _this = this; // If user provides items
-      // opt to use theirs
-
-
-      if (items) return items; // If no tabs are provided
-      // render nothing
-
-      if (!item.length) return null;
-      return this.$createElement(_VTabsItems__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          value: this.internalValue
-        },
-        on: {
-          change: function change(val) {
-            _this.internalValue = val;
-          }
-        }
-      }, item);
-    },
-    genSlider: function genSlider(slider) {
-      if (this.hideSlider) return null;
-
-      if (!slider) {
-        slider = this.$createElement(_VTabsSlider__WEBPACK_IMPORTED_MODULE_3__["default"], {
-          props: {
-            color: this.sliderColor
-          }
-        });
-      }
-
-      return this.$createElement('div', {
-        staticClass: 'v-tabs-slider-wrapper',
-        style: this.sliderStyles
-      }, [slider]);
-    },
-    onResize: function onResize() {
-      if (this._isDestroyed) return;
-      clearTimeout(this.resizeTimeout);
-      this.resizeTimeout = window.setTimeout(this.callSlider, 0);
-    },
-    parseNodes: function parseNodes() {
-      var items = null;
-      var slider = null;
-      var item = [];
-      var tab = [];
-      var slot = this.$slots.default || [];
-      var length = slot.length;
-
-      for (var i = 0; i < length; i++) {
-        var vnode = slot[i];
-
-        if (vnode.componentOptions) {
-          switch (vnode.componentOptions.Ctor.options.name) {
-            case 'v-tabs-slider':
-              slider = vnode;
-              break;
-
-            case 'v-tabs-items':
-              items = vnode;
-              break;
-
-            case 'v-tab-item':
-              item.push(vnode);
-              break;
-            // case 'v-tab' - intentionally omitted
-
-            default:
-              tab.push(vnode);
-          }
-        } else {
-          tab.push(vnode);
-        }
-      }
-      /**
-       * tab: array of `v-tab`
-       * slider: single `v-tabs-slider`
-       * items: single `v-tabs-items`
-       * item: array of `v-tab-item`
-       */
-
-
-      return {
-        tab: tab,
-        slider: slider,
-        items: items,
-        item: item
-      };
-    }
-  },
-  render: function render(h) {
-    var _a = this.parseNodes(),
-        tab = _a.tab,
-        slider = _a.slider,
-        items = _a.items,
-        item = _a.item;
-
-    return h('div', {
-      staticClass: 'v-tabs',
-      class: this.classes,
-      directives: [{
-        name: 'resize',
-        modifiers: {
-          quiet: true
-        },
-        value: this.onResize
-      }]
-    }, [this.genBar(tab, slider), this.genItems(items, item)]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTabs/VTabsBar.ts":
-/*!******************************************!*\
-  !*** ./src/components/VTabs/VTabsBar.ts ***!
-  \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VSlideGroup/VSlideGroup */ "./src/components/VSlideGroup/VSlideGroup.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/ssr-bootable */ "./src/mixins/ssr-bootable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}; // Extensions
-
-
- // Mixins
-
-
- // Utilities
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["BaseSlideGroup"], _mixins_ssr_bootable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_1__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-tabs-bar',
-  provide: function provide() {
-    return {
-      tabsBar: this
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign(__assign({}, _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["BaseSlideGroup"].options.computed.classes.call(this)), {
-        'v-tabs-bar': true,
-        'v-tabs-bar--is-mobile': this.isMobile,
-        // TODO: Remove this and move to v-slide-group
-        'v-tabs-bar--show-arrows': this.showArrows
-      }), this.themeClasses);
-    }
-  },
-  watch: {
-    items: 'callSlider',
-    internalValue: 'callSlider',
-    $route: 'onRouteChange'
-  },
-  methods: {
-    callSlider: function callSlider() {
-      if (!this.isBooted) return;
-      this.$emit('call:slider');
-    },
-    genContent: function genContent() {
-      var render = _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["BaseSlideGroup"].options.methods.genContent.call(this);
-      render.data = render.data || {};
-      render.data.staticClass += ' v-tabs-bar__content';
-      return render;
-    },
-    onRouteChange: function onRouteChange(val, oldVal) {
-      var e_1, _a;
-      /* istanbul ignore next */
-
-
-      if (this.mandatory) return;
-      var items = this.items;
-      var newPath = val.path;
-      var oldPath = oldVal.path;
-      var hasNew = false;
-      var hasOld = false;
-
-      try {
-        for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
-          var item = items_1_1.value;
-          if (item.to === newPath) hasNew = true;else if (item.to === oldPath) hasOld = true;
-          if (hasNew && hasOld) break;
-        }
-      } catch (e_1_1) {
-        e_1 = {
-          error: e_1_1
-        };
-      } finally {
-        try {
-          if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
-        } finally {
-          if (e_1) throw e_1.error;
-        }
-      } // If we have an old item and not a new one
-      // it's assumed that the user navigated to
-      // a path that is not present in the items
-
-
-      if (!hasNew && hasOld) this.internalValue = undefined;
-    }
-  },
-  render: function render(h) {
-    var render = _VSlideGroup_VSlideGroup__WEBPACK_IMPORTED_MODULE_0__["BaseSlideGroup"].options.render.call(this, h);
-    render.data.attrs = {
-      role: 'tablist'
-    };
-    return render;
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTabs/VTabsItems.ts":
-/*!********************************************!*\
-  !*** ./src/components/VTabs/VTabsItems.ts ***!
-  \********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../VWindow/VWindow */ "./src/components/VWindow/VWindow.ts");
-/* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Extensions
-
-
- // Types & Components
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VWindow_VWindow__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
-  name: 'v-tabs-items',
-  props: {
-    mandatory: {
-      type: Boolean,
-      default: false
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VWindow_VWindow__WEBPACK_IMPORTED_MODULE_0__["default"].options.computed.classes.call(this)), {
-        'v-tabs-items': true
-      });
-    },
-    isDark: function isDark() {
-      return this.rootIsDark;
-    }
-  },
-  methods: {
-    getValue: function getValue(item, i) {
-      return item.id || _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_1__["BaseItemGroup"].options.methods.getValue.call(this, item, i);
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTabs/VTabsSlider.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VTabs/VTabsSlider.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Mixins
- // Utilities
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_0__["default"]).extend({
-  name: 'v-tabs-slider',
-  render: function render(h) {
-    return h('div', this.setBackgroundColor(this.color, {
-      staticClass: 'v-tabs-slider'
-    }));
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTabs/index.ts":
-/*!***************************************!*\
-  !*** ./src/components/VTabs/index.ts ***!
-  \***************************************/
-/*! exports provided: VTabs, VTab, VTabItem, VTabsItems, VTabsSlider, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTabs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTabs */ "./src/components/VTabs/VTabs.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabs", function() { return _VTabs__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VTab__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VTab */ "./src/components/VTabs/VTab.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTab", function() { return _VTab__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _VTabsItems__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VTabsItems */ "./src/components/VTabs/VTabsItems.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabsItems", function() { return _VTabsItems__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-/* harmony import */ var _VTabItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VTabItem */ "./src/components/VTabs/VTabItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabItem", function() { return _VTabItem__WEBPACK_IMPORTED_MODULE_3__["default"]; });
-
-/* harmony import */ var _VTabsSlider__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VTabsSlider */ "./src/components/VTabs/VTabsSlider.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabsSlider", function() { return _VTabsSlider__WEBPACK_IMPORTED_MODULE_4__["default"]; });
-
-
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VTabs: _VTabs__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VTab: _VTab__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VTabsItems: _VTabsItems__WEBPACK_IMPORTED_MODULE_2__["default"],
-    VTabItem: _VTabItem__WEBPACK_IMPORTED_MODULE_3__["default"],
-    VTabsSlider: _VTabsSlider__WEBPACK_IMPORTED_MODULE_4__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VTextField/VTextField.sass":
-/*!***************************************************!*\
-  !*** ./src/components/VTextField/VTextField.sass ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTextField/VTextField.ts":
-/*!*************************************************!*\
-  !*** ./src/components/VTextField/VTextField.ts ***!
-  \*************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTextField_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTextField.sass */ "./src/components/VTextField/VTextField.sass");
-/* harmony import */ var _VTextField_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTextField_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _VCounter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VCounter */ "./src/components/VCounter/index.ts");
-/* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VLabel */ "./src/components/VLabel/index.ts");
-/* harmony import */ var _mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/intersectable */ "./src/mixins/intersectable/index.ts");
-/* harmony import */ var _mixins_loadable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/loadable */ "./src/mixins/loadable/index.ts");
-/* harmony import */ var _mixins_validatable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/validatable */ "./src/mixins/validatable/index.ts");
-/* harmony import */ var _directives_resize__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../directives/resize */ "./src/directives/resize/index.ts");
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Styles
-
-
- // Extensions
-
- // Components
-
-
- // Mixins
-
-
-
- // Directives
-
-
- // Utilities
-
-
- // Types
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_11__["default"])(_VInput__WEBPACK_IMPORTED_MODULE_1__["default"], Object(_mixins_intersectable__WEBPACK_IMPORTED_MODULE_4__["default"])({
-  onVisible: ['onResize', 'tryAutofocus']
-}), _mixins_loadable__WEBPACK_IMPORTED_MODULE_5__["default"]);
-var dirtyTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month'];
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-text-field',
-  directives: {
-    resize: _directives_resize__WEBPACK_IMPORTED_MODULE_7__["default"],
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_8__["default"]
-  },
-  inheritAttrs: false,
-  props: {
-    appendOuterIcon: String,
-    autofocus: Boolean,
-    clearable: Boolean,
-    clearIcon: {
-      type: String,
-      default: '$clear'
-    },
-    counter: [Boolean, Number, String],
-    counterValue: Function,
-    filled: Boolean,
-    flat: Boolean,
-    fullWidth: Boolean,
-    label: String,
-    outlined: Boolean,
-    placeholder: String,
-    prefix: String,
-    prependInnerIcon: String,
-    reverse: Boolean,
-    rounded: Boolean,
-    shaped: Boolean,
-    singleLine: Boolean,
-    solo: Boolean,
-    soloInverted: Boolean,
-    suffix: String,
-    type: {
-      type: String,
-      default: 'text'
-    }
-  },
-  data: function data() {
-    return {
-      badInput: false,
-      labelWidth: 0,
-      prefixWidth: 0,
-      prependWidth: 0,
-      initialValue: null,
-      isBooted: false,
-      isClearing: false
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return __assign(__assign({}, _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-text-field': true,
-        'v-text-field--full-width': this.fullWidth,
-        'v-text-field--prefix': this.prefix,
-        'v-text-field--single-line': this.isSingle,
-        'v-text-field--solo': this.isSolo,
-        'v-text-field--solo-inverted': this.soloInverted,
-        'v-text-field--solo-flat': this.flat,
-        'v-text-field--filled': this.filled,
-        'v-text-field--is-booted': this.isBooted,
-        'v-text-field--enclosed': this.isEnclosed,
-        'v-text-field--reverse': this.reverse,
-        'v-text-field--outlined': this.outlined,
-        'v-text-field--placeholder': this.placeholder,
-        'v-text-field--rounded': this.rounded,
-        'v-text-field--shaped': this.shaped
-      });
-    },
-    computedColor: function computedColor() {
-      var computedColor = _mixins_validatable__WEBPACK_IMPORTED_MODULE_6__["default"].options.computed.computedColor.call(this);
-      if (!this.soloInverted || !this.isFocused) return computedColor;
-      return this.color || 'primary';
-    },
-    computedCounterValue: function computedCounterValue() {
-      if (typeof this.counterValue === 'function') {
-        return this.counterValue(this.internalValue);
-      }
-
-      return __spread((this.internalValue || '').toString()).length;
-    },
-    hasCounter: function hasCounter() {
-      return this.counter !== false && this.counter != null;
-    },
-    hasDetails: function hasDetails() {
-      return _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.hasDetails.call(this) || this.hasCounter;
-    },
-    internalValue: {
-      get: function get() {
-        return this.lazyValue;
-      },
-      set: function set(val) {
-        this.lazyValue = val;
-        this.$emit('input', this.lazyValue);
-      }
-    },
-    isDirty: function isDirty() {
-      var _a;
-
-      return ((_a = this.lazyValue) === null || _a === void 0 ? void 0 : _a.toString().length) > 0 || this.badInput;
-    },
-    isEnclosed: function isEnclosed() {
-      return this.filled || this.isSolo || this.outlined;
-    },
-    isLabelActive: function isLabelActive() {
-      return this.isDirty || dirtyTypes.includes(this.type);
-    },
-    isSingle: function isSingle() {
-      return this.isSolo || this.singleLine || this.fullWidth || // https://material.io/components/text-fields/#filled-text-field
-      this.filled && !this.hasLabel;
-    },
-    isSolo: function isSolo() {
-      return this.solo || this.soloInverted;
-    },
-    labelPosition: function labelPosition() {
-      var offset = this.prefix && !this.labelValue ? this.prefixWidth : 0;
-      if (this.labelValue && this.prependWidth) offset -= this.prependWidth;
-      return this.$vuetify.rtl === this.reverse ? {
-        left: offset,
-        right: 'auto'
-      } : {
-        left: 'auto',
-        right: offset
-      };
-    },
-    showLabel: function showLabel() {
-      return this.hasLabel && (!this.isSingle || !this.isLabelActive && !this.placeholder);
-    },
-    labelValue: function labelValue() {
-      return !this.isSingle && Boolean(this.isFocused || this.isLabelActive || this.placeholder);
-    }
-  },
-  watch: {
-    // labelValue: 'setLabelWidth', // moved to mounted, see #11533
-    outlined: 'setLabelWidth',
-    label: function label() {
-      this.$nextTick(this.setLabelWidth);
-    },
-    prefix: function prefix() {
-      this.$nextTick(this.setPrefixWidth);
-    },
-    isFocused: 'updateValue',
-    value: function value(val) {
-      this.lazyValue = val;
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('box')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"])('box', 'filled', this);
-    }
-    /* istanbul ignore next */
-
-
-    if (this.$attrs.hasOwnProperty('browser-autocomplete')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_10__["breaking"])('browser-autocomplete', 'autocomplete', this);
-    }
-    /* istanbul ignore if */
-
-
-    if (this.shaped && !(this.filled || this.outlined || this.isSolo)) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_10__["consoleWarn"])('shaped should be used with either filled or outlined', this);
-    }
-  },
-  mounted: function mounted() {
-    var _this = this; // #11533
-
-
-    this.$watch(function () {
-      return _this.labelValue;
-    }, this.setLabelWidth);
-    this.autofocus && this.tryAutofocus();
-    requestAnimationFrame(function () {
-      return _this.isBooted = true;
-    });
-  },
-  methods: {
-    /** @public */
-    focus: function focus() {
-      this.onFocus();
-    },
-
-    /** @public */
-    blur: function blur(e) {
-      var _this = this; // https://github.com/vuetifyjs/vuetify/issues/5913
-      // Safari tab order gets broken if called synchronous
-
-
-      window.requestAnimationFrame(function () {
-        _this.$refs.input && _this.$refs.input.blur();
-      });
-    },
-    clearableCallback: function clearableCallback() {
-      var _this = this;
-
-      this.$refs.input && this.$refs.input.focus();
-      this.$nextTick(function () {
-        return _this.internalValue = null;
-      });
-    },
-    genAppendSlot: function genAppendSlot() {
-      var slot = [];
-
-      if (this.$slots['append-outer']) {
-        slot.push(this.$slots['append-outer']);
-      } else if (this.appendOuterIcon) {
-        slot.push(this.genIcon('appendOuter'));
-      }
-
-      return this.genSlot('append', 'outer', slot);
-    },
-    genPrependInnerSlot: function genPrependInnerSlot() {
-      var slot = [];
-
-      if (this.$slots['prepend-inner']) {
-        slot.push(this.$slots['prepend-inner']);
-      } else if (this.prependInnerIcon) {
-        slot.push(this.genIcon('prependInner'));
-      }
-
-      return this.genSlot('prepend', 'inner', slot);
-    },
-    genIconSlot: function genIconSlot() {
-      var slot = [];
-
-      if (this.$slots.append) {
-        slot.push(this.$slots.append);
-      } else if (this.appendIcon) {
-        slot.push(this.genIcon('append'));
-      }
-
-      return this.genSlot('append', 'inner', slot);
-    },
-    genInputSlot: function genInputSlot() {
-      var input = _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genInputSlot.call(this);
-      var prepend = this.genPrependInnerSlot();
-
-      if (prepend) {
-        input.children = input.children || [];
-        input.children.unshift(prepend);
-      }
-
-      return input;
-    },
-    genClearIcon: function genClearIcon() {
-      if (!this.clearable) return null;
-      var data = this.isDirty ? undefined : {
-        attrs: {
-          disabled: true
-        }
-      };
-      return this.genSlot('append', 'inner', [this.genIcon('clear', this.clearableCallback, data)]);
-    },
-    genCounter: function genCounter() {
-      if (!this.hasCounter) return null;
-      var max = this.counter === true ? this.attrs$.maxlength : this.counter;
-      return this.$createElement(_VCounter__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          dark: this.dark,
-          light: this.light,
-          max: max,
-          value: this.computedCounterValue
-        }
-      });
-    },
-    genControl: function genControl() {
-      return _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genControl.call(this);
-    },
-    genDefaultSlot: function genDefaultSlot() {
-      return [this.genFieldset(), this.genTextFieldSlot(), this.genClearIcon(), this.genIconSlot(), this.genProgress()];
-    },
-    genFieldset: function genFieldset() {
-      if (!this.outlined) return null;
-      return this.$createElement('fieldset', {
-        attrs: {
-          'aria-hidden': true
-        }
-      }, [this.genLegend()]);
-    },
-    genLabel: function genLabel() {
-      if (!this.showLabel) return null;
-      var data = {
-        props: {
-          absolute: true,
-          color: this.validationState,
-          dark: this.dark,
-          disabled: this.isDisabled,
-          focused: !this.isSingle && (this.isFocused || !!this.validationState),
-          for: this.computedId,
-          left: this.labelPosition.left,
-          light: this.light,
-          right: this.labelPosition.right,
-          value: this.labelValue
-        }
-      };
-      return this.$createElement(_VLabel__WEBPACK_IMPORTED_MODULE_3__["default"], data, this.$slots.label || this.label);
-    },
-    genLegend: function genLegend() {
-      var width = !this.singleLine && (this.labelValue || this.isDirty) ? this.labelWidth : 0;
-      var span = this.$createElement('span', {
-        domProps: {
-          innerHTML: '&#8203;'
-        }
-      });
-      return this.$createElement('legend', {
-        style: {
-          width: !this.isSingle ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_9__["convertToUnit"])(width) : undefined
-        }
-      }, [span]);
-    },
-    genInput: function genInput() {
-      var listeners = Object.assign({}, this.listeners$);
-      delete listeners.change; // Change should not be bound externally
-
-      return this.$createElement('input', {
-        style: {},
-        domProps: {
-          value: this.type === 'number' && Object.is(this.lazyValue, -0) ? '-0' : this.lazyValue
-        },
-        attrs: __assign(__assign({}, this.attrs$), {
-          autofocus: this.autofocus,
-          disabled: this.isDisabled,
-          id: this.computedId,
-          placeholder: this.placeholder,
-          readonly: this.isReadonly,
-          type: this.type
-        }),
-        on: Object.assign(listeners, {
-          blur: this.onBlur,
-          input: this.onInput,
-          focus: this.onFocus,
-          keydown: this.onKeyDown
-        }),
-        ref: 'input',
-        directives: [{
-          name: 'resize',
-          modifiers: {
-            quiet: true
-          },
-          value: this.onResize
-        }]
-      });
-    },
-    genMessages: function genMessages() {
-      if (!this.showDetails) return null;
-      var messagesNode = _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genMessages.call(this);
-      var counterNode = this.genCounter();
-      return this.$createElement('div', {
-        staticClass: 'v-text-field__details'
-      }, [messagesNode, counterNode]);
-    },
-    genTextFieldSlot: function genTextFieldSlot() {
-      return this.$createElement('div', {
-        staticClass: 'v-text-field__slot'
-      }, [this.genLabel(), this.prefix ? this.genAffix('prefix') : null, this.genInput(), this.suffix ? this.genAffix('suffix') : null]);
-    },
-    genAffix: function genAffix(type) {
-      return this.$createElement('div', {
-        class: "v-text-field__" + type,
-        ref: type
-      }, this[type]);
-    },
-    onBlur: function onBlur(e) {
-      var _this = this;
-
-      this.isFocused = false;
-      e && this.$nextTick(function () {
-        return _this.$emit('blur', e);
-      });
-    },
-    onClick: function onClick() {
-      if (this.isFocused || this.isDisabled || !this.$refs.input) return;
-      this.$refs.input.focus();
-    },
-    onFocus: function onFocus(e) {
-      if (!this.$refs.input) return;
-
-      if (document.activeElement !== this.$refs.input) {
-        return this.$refs.input.focus();
-      }
-
-      if (!this.isFocused) {
-        this.isFocused = true;
-        e && this.$emit('focus', e);
-      }
-    },
-    onInput: function onInput(e) {
-      var target = e.target;
-      this.internalValue = target.value;
-      this.badInput = target.validity && target.validity.badInput;
-    },
-    onKeyDown: function onKeyDown(e) {
-      if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_9__["keyCodes"].enter) this.$emit('change', this.internalValue);
-      this.$emit('keydown', e);
-    },
-    onMouseDown: function onMouseDown(e) {
-      // Prevent input from being blurred
-      if (e.target !== this.$refs.input) {
-        e.preventDefault();
-        e.stopPropagation();
-      }
-
-      _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.onMouseDown.call(this, e);
-    },
-    onMouseUp: function onMouseUp(e) {
-      if (this.hasMouseDown) this.focus();
-      _VInput__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.onMouseUp.call(this, e);
-    },
-    setLabelWidth: function setLabelWidth() {
-      if (!this.outlined) return;
-      this.labelWidth = this.$refs.label ? Math.min(this.$refs.label.scrollWidth * 0.75 + 6, this.$el.offsetWidth - 24) : 0;
-    },
-    setPrefixWidth: function setPrefixWidth() {
-      if (!this.$refs.prefix) return;
-      this.prefixWidth = this.$refs.prefix.offsetWidth;
-    },
-    setPrependWidth: function setPrependWidth() {
-      if (!this.outlined || !this.$refs['prepend-inner']) return;
-      this.prependWidth = this.$refs['prepend-inner'].offsetWidth;
-    },
-    tryAutofocus: function tryAutofocus() {
-      if (!this.autofocus || typeof document === 'undefined' || !this.$refs.input || document.activeElement === this.$refs.input) return false;
-      this.$refs.input.focus();
-      return true;
-    },
-    updateValue: function updateValue(val) {
-      // Sets validationState from validatable
-      this.hasColor = val;
-
-      if (val) {
-        this.initialValue = this.lazyValue;
-      } else if (this.initialValue !== this.lazyValue) {
-        this.$emit('change', this.lazyValue);
-      }
-    },
-    onResize: function onResize() {
-      this.setLabelWidth();
-      this.setPrefixWidth();
-      this.setPrependWidth();
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTextField/index.ts":
-/*!********************************************!*\
-  !*** ./src/components/VTextField/index.ts ***!
-  \********************************************/
-/*! exports provided: VTextField, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTextField__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTextField */ "./src/components/VTextField/VTextField.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTextField", function() { return _VTextField__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VTextField__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VTextarea/VTextarea.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VTextarea/VTextarea.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTextarea/VTextarea.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VTextarea/VTextarea.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTextarea_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTextarea.sass */ "./src/components/VTextarea/VTextarea.sass");
-/* harmony import */ var _VTextarea_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTextarea_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VTextField/VTextField */ "./src/components/VTextField/VTextField.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Extensions
-
- // Utilities
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'v-textarea',
-  props: {
-    autoGrow: Boolean,
-    noResize: Boolean,
-    rowHeight: {
-      type: [Number, String],
-      default: 24,
-      validator: function validator(v) {
-        return !isNaN(parseFloat(v));
-      }
-    },
-    rows: {
-      type: [Number, String],
-      default: 5,
-      validator: function validator(v) {
-        return !isNaN(parseInt(v, 10));
-      }
-    }
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-textarea': true,
-        'v-textarea--auto-grow': this.autoGrow,
-        'v-textarea--no-resize': this.noResizeHandle
-      }, _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this));
-    },
-    noResizeHandle: function noResizeHandle() {
-      return this.noResize || this.autoGrow;
-    }
-  },
-  watch: {
-    lazyValue: function lazyValue() {
-      this.autoGrow && this.$nextTick(this.calculateInputHeight);
-    },
-    rowHeight: function rowHeight() {
-      this.autoGrow && this.$nextTick(this.calculateInputHeight);
-    }
-  },
-  mounted: function mounted() {
-    var _this = this;
-
-    setTimeout(function () {
-      _this.autoGrow && _this.calculateInputHeight();
-    }, 0);
-  },
-  methods: {
-    calculateInputHeight: function calculateInputHeight() {
-      var input = this.$refs.input;
-      if (!input) return;
-      input.style.height = '0';
-      var height = input.scrollHeight;
-      var minHeight = parseInt(this.rows, 10) * parseFloat(this.rowHeight); // This has to be done ASAP, waiting for Vue
-      // to update the DOM causes ugly layout jumping
-
-      input.style.height = Math.max(minHeight, height) + 'px';
-    },
-    genInput: function genInput() {
-      var input = _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genInput.call(this);
-      input.tag = 'textarea';
-      delete input.data.attrs.type;
-      input.data.attrs.rows = this.rows;
-      return input;
-    },
-    onInput: function onInput(e) {
-      _VTextField_VTextField__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.onInput.call(this, e);
-      this.autoGrow && this.calculateInputHeight();
-    },
-    onKeyDown: function onKeyDown(e) {
-      // Prevents closing of a
-      // dialog when pressing
-      // enter
-      if (this.isFocused && e.keyCode === 13) {
-        e.stopPropagation();
-      }
-
-      this.$emit('keydown', e);
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTextarea/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VTextarea/index.ts ***!
-  \*******************************************/
-/*! exports provided: VTextarea, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTextarea__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTextarea */ "./src/components/VTextarea/VTextarea.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTextarea", function() { return _VTextarea__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VTextarea__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VThemeProvider/VThemeProvider.ts":
-/*!*********************************************************!*\
-  !*** ./src/components/VThemeProvider/VThemeProvider.ts ***!
-  \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-// Mixins
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_themeable__WEBPACK_IMPORTED_MODULE_0__["default"].extend({
-  name: 'v-theme-provider',
-  props: {
-    root: Boolean
-  },
-  computed: {
-    isDark: function isDark() {
-      return this.root ? this.rootIsDark : _mixins_themeable__WEBPACK_IMPORTED_MODULE_0__["default"].options.computed.isDark.call(this);
-    }
-  },
-  render: function render() {
-    /* istanbul ignore next */
-    return this.$slots.default && this.$slots.default.find(function (node) {
-      return !node.isComment && node.text !== ' ';
-    });
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VThemeProvider/index.ts":
-/*!************************************************!*\
-  !*** ./src/components/VThemeProvider/index.ts ***!
-  \************************************************/
-/*! exports provided: VThemeProvider, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VThemeProvider */ "./src/components/VThemeProvider/VThemeProvider.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VThemeProvider", function() { return _VThemeProvider__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VThemeProvider__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VTimePicker/SelectingTimes.ts":
-/*!******************************************************!*\
-  !*** ./src/components/VTimePicker/SelectingTimes.ts ***!
-  \******************************************************/
-/*! exports provided: SelectingTimes */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SelectingTimes", function() { return SelectingTimes; });
-var SelectingTimes;
-
-(function (SelectingTimes) {
-  SelectingTimes[SelectingTimes["Hour"] = 1] = "Hour";
-  SelectingTimes[SelectingTimes["Minute"] = 2] = "Minute";
-  SelectingTimes[SelectingTimes["Second"] = 3] = "Second";
-})(SelectingTimes || (SelectingTimes = {}));
-
-
-
-/***/ }),
-
-/***/ "./src/components/VTimePicker/VTimePicker.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VTimePicker/VTimePicker.ts ***!
-  \***************************************************/
-/*! exports provided: SelectingTimes, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTimePickerTitle */ "./src/components/VTimePicker/VTimePickerTitle.ts");
-/* harmony import */ var _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VTimePickerClock */ "./src/components/VTimePicker/VTimePickerClock.ts");
-/* harmony import */ var _mixins_picker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/picker */ "./src/mixins/picker/index.ts");
-/* harmony import */ var _mixins_picker_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/picker-button */ "./src/mixins/picker-button/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../VDatePicker/util/pad */ "./src/components/VDatePicker/util/pad.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./SelectingTimes */ "./src/components/VTimePicker/SelectingTimes.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SelectingTimes", function() { return _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"]; });
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-}; // Components
-
-
-
- // Mixins
-
-
- // Utils
-
-
-
-
-
-var rangeHours24 = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["createRange"])(24);
-var rangeHours12am = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["createRange"])(12);
-var rangeHours12pm = rangeHours12am.map(function (v) {
-  return v + 12;
-});
-var range60 = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["createRange"])(60);
-var selectingNames = {
-  1: 'hour',
-  2: 'minute',
-  3: 'second'
-};
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_6__["default"])(_mixins_picker__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_picker_button__WEBPACK_IMPORTED_MODULE_3__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-time-picker',
-  props: {
-    allowedHours: [Function, Array],
-    allowedMinutes: [Function, Array],
-    allowedSeconds: [Function, Array],
-    disabled: Boolean,
-    format: {
-      type: String,
-      default: 'ampm',
-      validator: function validator(val) {
-        return ['ampm', '24hr'].includes(val);
-      }
-    },
-    min: String,
-    max: String,
-    readonly: Boolean,
-    scrollable: Boolean,
-    useSeconds: Boolean,
-    value: null,
-    ampmInTitle: Boolean
-  },
-  data: function data() {
-    return {
-      inputHour: null,
-      inputMinute: null,
-      inputSecond: null,
-      lazyInputHour: null,
-      lazyInputMinute: null,
-      lazyInputSecond: null,
-      period: 'am',
-      selecting: _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour
-    };
-  },
-  computed: {
-    selectingHour: {
-      get: function get() {
-        return this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour;
-      },
-      set: function set(v) {
-        this.selecting = _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour;
-      }
-    },
-    selectingMinute: {
-      get: function get() {
-        return this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute;
-      },
-      set: function set(v) {
-        this.selecting = _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute;
-      }
-    },
-    selectingSecond: {
-      get: function get() {
-        return this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Second;
-      },
-      set: function set(v) {
-        this.selecting = _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Second;
-      }
-    },
-    isAllowedHourCb: function isAllowedHourCb() {
-      var _this = this;
-
-      var cb;
-
-      if (this.allowedHours instanceof Array) {
-        cb = function cb(val) {
-          return _this.allowedHours.includes(val);
-        };
-      } else {
-        cb = this.allowedHours;
-      }
-
-      if (!this.min && !this.max) return cb;
-      var minHour = this.min ? Number(this.min.split(':')[0]) : 0;
-      var maxHour = this.max ? Number(this.max.split(':')[0]) : 23;
-      return function (val) {
-        return val >= minHour * 1 && val <= maxHour * 1 && (!cb || cb(val));
-      };
-    },
-    isAllowedMinuteCb: function isAllowedMinuteCb() {
-      var _this = this;
-
-      var cb;
-      var isHourAllowed = !this.isAllowedHourCb || this.inputHour === null || this.isAllowedHourCb(this.inputHour);
-
-      if (this.allowedMinutes instanceof Array) {
-        cb = function cb(val) {
-          return _this.allowedMinutes.includes(val);
-        };
-      } else {
-        cb = this.allowedMinutes;
-      }
-
-      if (!this.min && !this.max) {
-        return isHourAllowed ? cb : function () {
-          return false;
-        };
-      }
-
-      var _a = __read(this.min ? this.min.split(':').map(Number) : [0, 0], 2),
-          minHour = _a[0],
-          minMinute = _a[1];
-
-      var _b = __read(this.max ? this.max.split(':').map(Number) : [23, 59], 2),
-          maxHour = _b[0],
-          maxMinute = _b[1];
-
-      var minTime = minHour * 60 + minMinute * 1;
-      var maxTime = maxHour * 60 + maxMinute * 1;
-      return function (val) {
-        var time = 60 * _this.inputHour + val;
-        return time >= minTime && time <= maxTime && isHourAllowed && (!cb || cb(val));
-      };
-    },
-    isAllowedSecondCb: function isAllowedSecondCb() {
-      var _this = this;
-
-      var cb;
-      var isHourAllowed = !this.isAllowedHourCb || this.inputHour === null || this.isAllowedHourCb(this.inputHour);
-      var isMinuteAllowed = isHourAllowed && (!this.isAllowedMinuteCb || this.inputMinute === null || this.isAllowedMinuteCb(this.inputMinute));
-
-      if (this.allowedSeconds instanceof Array) {
-        cb = function cb(val) {
-          return _this.allowedSeconds.includes(val);
-        };
-      } else {
-        cb = this.allowedSeconds;
-      }
-
-      if (!this.min && !this.max) {
-        return isMinuteAllowed ? cb : function () {
-          return false;
-        };
-      }
-
-      var _a = __read(this.min ? this.min.split(':').map(Number) : [0, 0, 0], 3),
-          minHour = _a[0],
-          minMinute = _a[1],
-          minSecond = _a[2];
-
-      var _b = __read(this.max ? this.max.split(':').map(Number) : [23, 59, 59], 3),
-          maxHour = _b[0],
-          maxMinute = _b[1],
-          maxSecond = _b[2];
-
-      var minTime = minHour * 3600 + minMinute * 60 + (minSecond || 0) * 1;
-      var maxTime = maxHour * 3600 + maxMinute * 60 + (maxSecond || 0) * 1;
-      return function (val) {
-        var time = 3600 * _this.inputHour + 60 * _this.inputMinute + val;
-        return time >= minTime && time <= maxTime && isMinuteAllowed && (!cb || cb(val));
-      };
-    },
-    isAmPm: function isAmPm() {
-      return this.format === 'ampm';
-    }
-  },
-  watch: {
-    value: 'setInputData'
-  },
-  mounted: function mounted() {
-    this.setInputData(this.value);
-    this.$on('update:period', this.setPeriod);
-  },
-  methods: {
-    genValue: function genValue() {
-      if (this.inputHour != null && this.inputMinute != null && (!this.useSeconds || this.inputSecond != null)) {
-        return Object(_VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__["default"])(this.inputHour) + ":" + Object(_VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__["default"])(this.inputMinute) + (this.useSeconds ? ":" + Object(_VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__["default"])(this.inputSecond) : '');
-      }
-
-      return null;
-    },
-    emitValue: function emitValue() {
-      var value = this.genValue();
-      if (value !== null) this.$emit('input', value);
-    },
-    setPeriod: function setPeriod(period) {
-      this.period = period;
-
-      if (this.inputHour != null) {
-        var newHour = this.inputHour + (period === 'am' ? -12 : 12);
-        this.inputHour = this.firstAllowed('hour', newHour);
-        this.emitValue();
-      }
-    },
-    setInputData: function setInputData(value) {
-      if (value == null || value === '') {
-        this.inputHour = null;
-        this.inputMinute = null;
-        this.inputSecond = null;
-      } else if (value instanceof Date) {
-        this.inputHour = value.getHours();
-        this.inputMinute = value.getMinutes();
-        this.inputSecond = value.getSeconds();
-      } else {
-        var _a = __read(value.trim().toLowerCase().match(/^(\d+):(\d+)(:(\d+))?([ap]m)?$/) || new Array(6), 6),
-            hour = _a[1],
-            minute = _a[2],
-            second = _a[4],
-            period = _a[5];
-
-        this.inputHour = period ? this.convert12to24(parseInt(hour, 10), period) : parseInt(hour, 10);
-        this.inputMinute = parseInt(minute, 10);
-        this.inputSecond = parseInt(second || 0, 10);
-      }
-
-      this.period = this.inputHour == null || this.inputHour < 12 ? 'am' : 'pm';
-    },
-    convert24to12: function convert24to12(hour) {
-      return hour ? (hour - 1) % 12 + 1 : 12;
-    },
-    convert12to24: function convert12to24(hour, period) {
-      return hour % 12 + (period === 'pm' ? 12 : 0);
-    },
-    onInput: function onInput(value) {
-      if (this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour) {
-        this.inputHour = this.isAmPm ? this.convert12to24(value, this.period) : value;
-      } else if (this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute) {
-        this.inputMinute = value;
-      } else {
-        this.inputSecond = value;
-      }
-
-      this.emitValue();
-    },
-    onChange: function onChange(value) {
-      this.$emit("click:" + selectingNames[this.selecting], value);
-      var emitChange = this.selecting === (this.useSeconds ? _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Second : _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute);
-
-      if (this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour) {
-        this.selecting = _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute;
-      } else if (this.useSeconds && this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute) {
-        this.selecting = _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Second;
-      }
-
-      if (this.inputHour === this.lazyInputHour && this.inputMinute === this.lazyInputMinute && (!this.useSeconds || this.inputSecond === this.lazyInputSecond)) return;
-      var time = this.genValue();
-      if (time === null) return;
-      this.lazyInputHour = this.inputHour;
-      this.lazyInputMinute = this.inputMinute;
-      this.useSeconds && (this.lazyInputSecond = this.inputSecond);
-      emitChange && this.$emit('change', time);
-    },
-    firstAllowed: function firstAllowed(type, value) {
-      var allowedFn = type === 'hour' ? this.isAllowedHourCb : type === 'minute' ? this.isAllowedMinuteCb : this.isAllowedSecondCb;
-      if (!allowedFn) return value; // TODO: clean up
-
-      var range = type === 'minute' ? range60 : type === 'second' ? range60 : this.isAmPm ? value < 12 ? rangeHours12am : rangeHours12pm : rangeHours24;
-      var first = range.find(function (v) {
-        return allowedFn((v + value) % range.length + range[0]);
-      });
-      return ((first || 0) + value) % range.length + range[0];
-    },
-    genClock: function genClock() {
-      return this.$createElement(_VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          allowedValues: this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour ? this.isAllowedHourCb : this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute ? this.isAllowedMinuteCb : this.isAllowedSecondCb,
-          color: this.color,
-          dark: this.dark,
-          disabled: this.disabled,
-          double: this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour && !this.isAmPm,
-          format: this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour ? this.isAmPm ? this.convert24to12 : function (val) {
-            return val;
-          } : function (val) {
-            return Object(_VDatePicker_util_pad__WEBPACK_IMPORTED_MODULE_5__["default"])(val, 2);
-          },
-          light: this.light,
-          max: this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour ? this.isAmPm && this.period === 'am' ? 11 : 23 : 59,
-          min: this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour && this.isAmPm && this.period === 'pm' ? 12 : 0,
-          readonly: this.readonly,
-          scrollable: this.scrollable,
-          size: Number(this.width) - (!this.fullWidth && this.landscape ? 80 : 20),
-          step: this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour ? 1 : 5,
-          value: this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Hour ? this.inputHour : this.selecting === _SelectingTimes__WEBPACK_IMPORTED_MODULE_7__["SelectingTimes"].Minute ? this.inputMinute : this.inputSecond
-        },
-        on: {
-          input: this.onInput,
-          change: this.onChange
-        },
-        ref: 'clock'
-      });
-    },
-    genClockAmPm: function genClockAmPm() {
-      return this.$createElement('div', this.setTextColor(this.color || 'primary', {
-        staticClass: 'v-time-picker-clock__ampm'
-      }), [this.genPickerButton('period', 'am', this.$vuetify.lang.t('$vuetify.timePicker.am'), this.disabled || this.readonly), this.genPickerButton('period', 'pm', this.$vuetify.lang.t('$vuetify.timePicker.pm'), this.disabled || this.readonly)]);
-    },
-    genPickerBody: function genPickerBody() {
-      return this.$createElement('div', {
-        staticClass: 'v-time-picker-clock__container',
-        key: this.selecting
-      }, [!this.ampmInTitle && this.isAmPm && this.genClockAmPm(), this.genClock()]);
-    },
-    genPickerTitle: function genPickerTitle() {
-      var _this = this;
-
-      return this.$createElement(_VTimePickerTitle__WEBPACK_IMPORTED_MODULE_0__["default"], {
-        props: {
-          ampm: this.isAmPm,
-          ampmReadonly: this.isAmPm && !this.ampmInTitle,
-          disabled: this.disabled,
-          hour: this.inputHour,
-          minute: this.inputMinute,
-          second: this.inputSecond,
-          period: this.period,
-          readonly: this.readonly,
-          useSeconds: this.useSeconds,
-          selecting: this.selecting
-        },
-        on: {
-          'update:selecting': function updateSelecting(value) {
-            return _this.selecting = value;
-          },
-          'update:period': function updatePeriod(period) {
-            return _this.$emit('update:period', period);
-          }
-        },
-        ref: 'title',
-        slot: 'title'
-      });
-    }
-  },
-  render: function render() {
-    return this.genPicker('v-picker--time');
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTimePicker/VTimePickerClock.sass":
-/*!**********************************************************!*\
-  !*** ./src/components/VTimePicker/VTimePickerClock.sass ***!
-  \**********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTimePicker/VTimePickerClock.ts":
-/*!********************************************************!*\
-  !*** ./src/components/VTimePicker/VTimePickerClock.ts ***!
-  \********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTimePickerClock_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTimePickerClock.sass */ "./src/components/VTimePicker/VTimePickerClock.sass");
-/* harmony import */ var _VTimePickerClock_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTimePickerClock_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
- // Mixins
-
-
- // Types
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-time-picker-clock',
-  props: {
-    allowedValues: Function,
-    ampm: Boolean,
-    disabled: Boolean,
-    double: Boolean,
-    format: {
-      type: Function,
-      default: function _default(val) {
-        return val;
-      }
-    },
-    max: {
-      type: Number,
-      required: true
-    },
-    min: {
-      type: Number,
-      required: true
-    },
-    scrollable: Boolean,
-    readonly: Boolean,
-    rotate: {
-      type: Number,
-      default: 0
-    },
-    step: {
-      type: Number,
-      default: 1
-    },
-    value: Number
-  },
-  data: function data() {
-    return {
-      inputValue: this.value,
-      isDragging: false,
-      valueOnMouseDown: null,
-      valueOnMouseUp: null
-    };
-  },
-  computed: {
-    count: function count() {
-      return this.max - this.min + 1;
-    },
-    degreesPerUnit: function degreesPerUnit() {
-      return 360 / this.roundCount;
-    },
-    degrees: function degrees() {
-      return this.degreesPerUnit * Math.PI / 180;
-    },
-    displayedValue: function displayedValue() {
-      return this.value == null ? this.min : this.value;
-    },
-    innerRadiusScale: function innerRadiusScale() {
-      return 0.62;
-    },
-    roundCount: function roundCount() {
-      return this.double ? this.count / 2 : this.count;
-    }
-  },
-  watch: {
-    value: function value(_value) {
-      this.inputValue = _value;
-    }
-  },
-  methods: {
-    wheel: function wheel(e) {
-      e.preventDefault();
-      var delta = Math.sign(-e.deltaY || 1);
-      var value = this.displayedValue;
-
-      do {
-        value = value + delta;
-        value = (value - this.min + this.count) % this.count + this.min;
-      } while (!this.isAllowed(value) && value !== this.displayedValue);
-
-      if (value !== this.displayedValue) {
-        this.update(value);
-      }
-    },
-    isInner: function isInner(value) {
-      return this.double && value - this.min >= this.roundCount;
-    },
-    handScale: function handScale(value) {
-      return this.isInner(value) ? this.innerRadiusScale : 1;
-    },
-    isAllowed: function isAllowed(value) {
-      return !this.allowedValues || this.allowedValues(value);
-    },
-    genValues: function genValues() {
-      var children = [];
-
-      for (var value = this.min; value <= this.max; value = value + this.step) {
-        var color = value === this.value && (this.color || 'accent');
-        children.push(this.$createElement('span', this.setBackgroundColor(color, {
-          staticClass: 'v-time-picker-clock__item',
-          class: {
-            'v-time-picker-clock__item--active': value === this.displayedValue,
-            'v-time-picker-clock__item--disabled': this.disabled || !this.isAllowed(value)
-          },
-          style: this.getTransform(value),
-          domProps: {
-            innerHTML: "<span>" + this.format(value) + "</span>"
-          }
-        })));
-      }
-
-      return children;
-    },
-    genHand: function genHand() {
-      var scale = "scaleY(" + this.handScale(this.displayedValue) + ")";
-      var angle = this.rotate + this.degreesPerUnit * (this.displayedValue - this.min);
-      var color = this.value != null && (this.color || 'accent');
-      return this.$createElement('div', this.setBackgroundColor(color, {
-        staticClass: 'v-time-picker-clock__hand',
-        class: {
-          'v-time-picker-clock__hand--inner': this.isInner(this.value)
-        },
-        style: {
-          transform: "rotate(" + angle + "deg) " + scale
-        }
-      }));
-    },
-    getTransform: function getTransform(i) {
-      var _a = this.getPosition(i),
-          x = _a.x,
-          y = _a.y;
-
-      return {
-        left: 50 + x * 50 + "%",
-        top: 50 + y * 50 + "%"
-      };
-    },
-    getPosition: function getPosition(value) {
-      var rotateRadians = this.rotate * Math.PI / 180;
-      return {
-        x: Math.sin((value - this.min) * this.degrees + rotateRadians) * this.handScale(value),
-        y: -Math.cos((value - this.min) * this.degrees + rotateRadians) * this.handScale(value)
-      };
-    },
-    onMouseDown: function onMouseDown(e) {
-      e.preventDefault();
-      this.valueOnMouseDown = null;
-      this.valueOnMouseUp = null;
-      this.isDragging = true;
-      this.onDragMove(e);
-    },
-    onMouseUp: function onMouseUp(e) {
-      e.stopPropagation();
-      this.isDragging = false;
-
-      if (this.valueOnMouseUp !== null && this.isAllowed(this.valueOnMouseUp)) {
-        this.$emit('change', this.valueOnMouseUp);
-      }
-    },
-    onDragMove: function onDragMove(e) {
-      e.preventDefault();
-      if (!this.isDragging && e.type !== 'click') return;
-
-      var _a = this.$refs.clock.getBoundingClientRect(),
-          width = _a.width,
-          top = _a.top,
-          left = _a.left;
-
-      var innerWidth = this.$refs.innerClock.getBoundingClientRect().width;
-
-      var _b = 'touches' in e ? e.touches[0] : e,
-          clientX = _b.clientX,
-          clientY = _b.clientY;
-
-      var center = {
-        x: width / 2,
-        y: -width / 2
-      };
-      var coords = {
-        x: clientX - left,
-        y: top - clientY
-      };
-      var handAngle = Math.round(this.angle(center, coords) - this.rotate + 360) % 360;
-      var insideClick = this.double && this.euclidean(center, coords) < (innerWidth + innerWidth * this.innerRadiusScale) / 4;
-      var checksCount = Math.ceil(15 / this.degreesPerUnit);
-      var value;
-
-      for (var i = 0; i < checksCount; i++) {
-        value = this.angleToValue(handAngle + i * this.degreesPerUnit, insideClick);
-        if (this.isAllowed(value)) return this.setMouseDownValue(value);
-        value = this.angleToValue(handAngle - i * this.degreesPerUnit, insideClick);
-        if (this.isAllowed(value)) return this.setMouseDownValue(value);
-      }
-    },
-    angleToValue: function angleToValue(angle, insideClick) {
-      var value = (Math.round(angle / this.degreesPerUnit) + (insideClick ? this.roundCount : 0)) % this.count + this.min; // Necessary to fix edge case when selecting left part of the value(s) at 12 o'clock
-
-      if (angle < 360 - this.degreesPerUnit / 2) return value;
-      return insideClick ? this.max - this.roundCount + 1 : this.min;
-    },
-    setMouseDownValue: function setMouseDownValue(value) {
-      if (this.valueOnMouseDown === null) {
-        this.valueOnMouseDown = value;
-      }
-
-      this.valueOnMouseUp = value;
-      this.update(value);
-    },
-    update: function update(value) {
-      if (this.inputValue !== value) {
-        this.inputValue = value;
-        this.$emit('input', value);
-      }
-    },
-    euclidean: function euclidean(p0, p1) {
-      var dx = p1.x - p0.x;
-      var dy = p1.y - p0.y;
-      return Math.sqrt(dx * dx + dy * dy);
-    },
-    angle: function angle(center, p1) {
-      var value = 2 * Math.atan2(p1.y - center.y - this.euclidean(center, p1), p1.x - center.x);
-      return Math.abs(value * 180 / Math.PI);
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var data = {
-      staticClass: 'v-time-picker-clock',
-      class: __assign({
-        'v-time-picker-clock--indeterminate': this.value == null
-      }, this.themeClasses),
-      on: this.readonly || this.disabled ? undefined : {
-        mousedown: this.onMouseDown,
-        mouseup: this.onMouseUp,
-        mouseleave: function mouseleave(e) {
-          return _this.isDragging && _this.onMouseUp(e);
-        },
-        touchstart: this.onMouseDown,
-        touchend: this.onMouseUp,
-        mousemove: this.onDragMove,
-        touchmove: this.onDragMove
-      },
-      ref: 'clock'
-    };
-
-    if (this.scrollable && data.on) {
-      data.on.wheel = this.wheel;
-    }
-
-    return h('div', data, [h('div', {
-      staticClass: 'v-time-picker-clock__inner',
-      ref: 'innerClock'
-    }, [this.genHand(), this.genValues()])]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTimePicker/VTimePickerTitle.sass":
-/*!**********************************************************!*\
-  !*** ./src/components/VTimePicker/VTimePickerTitle.sass ***!
-  \**********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTimePicker/VTimePickerTitle.ts":
-/*!********************************************************!*\
-  !*** ./src/components/VTimePicker/VTimePickerTitle.ts ***!
-  \********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTimePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTimePickerTitle.sass */ "./src/components/VTimePicker/VTimePickerTitle.sass");
-/* harmony import */ var _VTimePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTimePickerTitle_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_picker_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/picker-button */ "./src/mixins/picker-button/index.ts");
-/* harmony import */ var _VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VDatePicker/util */ "./src/components/VDatePicker/util/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SelectingTimes */ "./src/components/VTimePicker/SelectingTimes.ts");
- // Mixins
-
- // Utils
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_mixins_picker_button__WEBPACK_IMPORTED_MODULE_1__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-time-picker-title',
-  props: {
-    ampm: Boolean,
-    ampmReadonly: Boolean,
-    disabled: Boolean,
-    hour: Number,
-    minute: Number,
-    second: Number,
-    period: {
-      type: String,
-      validator: function validator(period) {
-        return period === 'am' || period === 'pm';
-      }
-    },
-    readonly: Boolean,
-    useSeconds: Boolean,
-    selecting: Number
-  },
-  methods: {
-    genTime: function genTime() {
-      var hour = this.hour;
-
-      if (this.ampm) {
-        hour = hour ? (hour - 1) % 12 + 1 : 12;
-      }
-
-      var displayedHour = this.hour == null ? '--' : this.ampm ? String(hour) : Object(_VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(hour);
-      var displayedMinute = this.minute == null ? '--' : Object(_VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(this.minute);
-      var titleContent = [this.genPickerButton('selecting', _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__["SelectingTimes"].Hour, displayedHour, this.disabled), this.$createElement('span', ':'), this.genPickerButton('selecting', _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__["SelectingTimes"].Minute, displayedMinute, this.disabled)];
-
-      if (this.useSeconds) {
-        var displayedSecond = this.second == null ? '--' : Object(_VDatePicker_util__WEBPACK_IMPORTED_MODULE_2__["pad"])(this.second);
-        titleContent.push(this.$createElement('span', ':'));
-        titleContent.push(this.genPickerButton('selecting', _SelectingTimes__WEBPACK_IMPORTED_MODULE_4__["SelectingTimes"].Second, displayedSecond, this.disabled));
-      }
-
-      return this.$createElement('div', {
-        class: 'v-time-picker-title__time'
-      }, titleContent);
-    },
-    genAmPm: function genAmPm() {
-      return this.$createElement('div', {
-        staticClass: 'v-time-picker-title__ampm',
-        class: {
-          'v-time-picker-title__ampm--readonly': this.ampmReadonly
-        }
-      }, [!this.ampmReadonly || this.period === 'am' ? this.genPickerButton('period', 'am', this.$vuetify.lang.t('$vuetify.timePicker.am'), this.disabled || this.readonly) : null, !this.ampmReadonly || this.period === 'pm' ? this.genPickerButton('period', 'pm', this.$vuetify.lang.t('$vuetify.timePicker.pm'), this.disabled || this.readonly) : null]);
-    }
-  },
-  render: function render(h) {
-    var children = [this.genTime()];
-    this.ampm && children.push(this.genAmPm());
-    return h('div', {
-      staticClass: 'v-time-picker-title'
-    }, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTimePicker/index.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VTimePicker/index.ts ***!
-  \*********************************************/
-/*! exports provided: VTimePicker, VTimePickerClock, VTimePickerTitle, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTimePicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTimePicker */ "./src/components/VTimePicker/VTimePicker.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimePicker", function() { return _VTimePicker__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VTimePickerClock */ "./src/components/VTimePicker/VTimePickerClock.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimePickerClock", function() { return _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-/* harmony import */ var _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VTimePickerTitle */ "./src/components/VTimePicker/VTimePickerTitle.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimePickerTitle", function() { return _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_2__["default"]; });
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VTimePicker: _VTimePicker__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VTimePickerClock: _VTimePickerClock__WEBPACK_IMPORTED_MODULE_1__["default"],
-    VTimePickerTitle: _VTimePickerTitle__WEBPACK_IMPORTED_MODULE_2__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VTimeline/VTimeline.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VTimeline/VTimeline.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTimeline/VTimeline.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VTimeline/VTimeline.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTimeline_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTimeline.sass */ "./src/components/VTimeline/VTimeline.sass");
-/* harmony import */ var _VTimeline_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTimeline_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
-
- // Mixins
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(_mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-timeline',
-  provide: function provide() {
-    return {
-      timeline: this
-    };
-  },
-  props: {
-    alignTop: Boolean,
-    dense: Boolean,
-    reverse: Boolean
-  },
-  computed: {
-    classes: function classes() {
-      return __assign({
-        'v-timeline--align-top': this.alignTop,
-        'v-timeline--dense': this.dense,
-        'v-timeline--reverse': this.reverse
-      }, this.themeClasses);
-    }
-  },
-  render: function render(h) {
-    return h('div', {
-      staticClass: 'v-timeline',
-      class: this.classes
-    }, this.$slots.default);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTimeline/VTimelineItem.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VTimeline/VTimelineItem.ts ***!
-  \***************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Types
-
-
-
- // Mixins
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
-/* @vue/component */
-);
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'v-timeline-item',
-  inject: ['timeline'],
-  props: {
-    color: {
-      type: String,
-      default: 'primary'
-    },
-    fillDot: Boolean,
-    hideDot: Boolean,
-    icon: String,
-    iconColor: String,
-    large: Boolean,
-    left: Boolean,
-    right: Boolean,
-    small: Boolean
-  },
-  computed: {
-    hasIcon: function hasIcon() {
-      return !!this.icon || !!this.$slots.icon;
-    }
-  },
-  methods: {
-    genBody: function genBody() {
-      return this.$createElement('div', {
-        staticClass: 'v-timeline-item__body'
-      }, this.$slots.default);
-    },
-    genIcon: function genIcon() {
-      if (this.$slots.icon) {
-        return this.$slots.icon;
-      }
-
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          color: this.iconColor,
-          dark: !this.theme.isDark,
-          small: this.small
-        }
-      }, this.icon);
-    },
-    genInnerDot: function genInnerDot() {
-      var data = this.setBackgroundColor(this.color);
-      return this.$createElement('div', __assign({
-        staticClass: 'v-timeline-item__inner-dot'
-      }, data), [this.hasIcon && this.genIcon()]);
-    },
-    genDot: function genDot() {
-      return this.$createElement('div', {
-        staticClass: 'v-timeline-item__dot',
-        class: {
-          'v-timeline-item__dot--small': this.small,
-          'v-timeline-item__dot--large': this.large
-        }
-      }, [this.genInnerDot()]);
-    },
-    genDivider: function genDivider() {
-      var children = [];
-      if (!this.hideDot) children.push(this.genDot());
-      return this.$createElement('div', {
-        staticClass: 'v-timeline-item__divider'
-      }, children);
-    },
-    genOpposite: function genOpposite() {
-      return this.$createElement('div', {
-        staticClass: 'v-timeline-item__opposite'
-      }, this.$slots.opposite);
-    }
-  },
-  render: function render(h) {
-    var children = [this.genBody(), this.genDivider()];
-    if (this.$slots.opposite) children.push(this.genOpposite());
-    return h('div', {
-      staticClass: 'v-timeline-item',
-      class: __assign({
-        'v-timeline-item--fill-dot': this.fillDot,
-        'v-timeline-item--before': this.timeline.reverse ? this.right : this.left,
-        'v-timeline-item--after': this.timeline.reverse ? this.left : this.right
-      }, this.themeClasses)
-    }, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTimeline/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VTimeline/index.ts ***!
-  \*******************************************/
-/*! exports provided: VTimeline, VTimelineItem, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTimeline__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTimeline */ "./src/components/VTimeline/VTimeline.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimeline", function() { return _VTimeline__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VTimelineItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VTimelineItem */ "./src/components/VTimeline/VTimelineItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimelineItem", function() { return _VTimelineItem__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VTimeline: _VTimeline__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VTimelineItem: _VTimelineItem__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VToolbar/VToolbar.sass":
-/*!***********************************************!*\
-  !*** ./src/components/VToolbar/VToolbar.sass ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VToolbar/VToolbar.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VToolbar/VToolbar.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VToolbar_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VToolbar.sass */ "./src/components/VToolbar/VToolbar.sass");
-/* harmony import */ var _VToolbar_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VToolbar_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VSheet/VSheet */ "./src/components/VSheet/VSheet.ts");
-/* harmony import */ var _VImg_VImg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VImg/VImg */ "./src/components/VImg/VImg.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-}; // Styles
-
-
- // Extensions
-
- // Components
-
- // Utilities
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-toolbar',
-  props: {
-    absolute: Boolean,
-    bottom: Boolean,
-    collapse: Boolean,
-    dense: Boolean,
-    extended: Boolean,
-    extensionHeight: {
-      default: 48,
-      type: [Number, String]
-    },
-    flat: Boolean,
-    floating: Boolean,
-    prominent: Boolean,
-    short: Boolean,
-    src: {
-      type: [String, Object],
-      default: ''
-    },
-    tag: {
-      type: String,
-      default: 'header'
-    }
-  },
-  data: function data() {
-    return {
-      isExtended: false
-    };
-  },
-  computed: {
-    computedHeight: function computedHeight() {
-      var height = this.computedContentHeight;
-      if (!this.isExtended) return height;
-      var extensionHeight = parseInt(this.extensionHeight);
-      return this.isCollapsed ? height : height + (!isNaN(extensionHeight) ? extensionHeight : 0);
-    },
-    computedContentHeight: function computedContentHeight() {
-      if (this.height) return parseInt(this.height);
-      if (this.isProminent && this.dense) return 96;
-      if (this.isProminent && this.short) return 112;
-      if (this.isProminent) return 128;
-      if (this.dense) return 48;
-      if (this.short || this.$vuetify.breakpoint.smAndDown) return 56;
-      return 64;
-    },
-    classes: function classes() {
-      return __assign(__assign({}, _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].options.computed.classes.call(this)), {
-        'v-toolbar': true,
-        'v-toolbar--absolute': this.absolute,
-        'v-toolbar--bottom': this.bottom,
-        'v-toolbar--collapse': this.collapse,
-        'v-toolbar--collapsed': this.isCollapsed,
-        'v-toolbar--dense': this.dense,
-        'v-toolbar--extended': this.isExtended,
-        'v-toolbar--flat': this.flat,
-        'v-toolbar--floating': this.floating,
-        'v-toolbar--prominent': this.isProminent
-      });
-    },
-    isCollapsed: function isCollapsed() {
-      return this.collapse;
-    },
-    isProminent: function isProminent() {
-      return this.prominent;
-    },
-    styles: function styles() {
-      return __assign(__assign({}, this.measurableStyles), {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(this.computedHeight)
-      });
-    }
-  },
-  created: function created() {
-    var _this = this;
-
-    var breakingProps = [['app', '<v-app-bar app>'], ['manual-scroll', '<v-app-bar :value="false">'], ['clipped-left', '<v-app-bar clipped-left>'], ['clipped-right', '<v-app-bar clipped-right>'], ['inverted-scroll', '<v-app-bar inverted-scroll>'], ['scroll-off-screen', '<v-app-bar scroll-off-screen>'], ['scroll-target', '<v-app-bar scroll-target>'], ['scroll-threshold', '<v-app-bar scroll-threshold>'], ['card', '<v-app-bar flat>']];
-    /* istanbul ignore next */
-
-    breakingProps.forEach(function (_a) {
-      var _b = __read(_a, 2),
-          original = _b[0],
-          replacement = _b[1];
-
-      if (_this.$attrs.hasOwnProperty(original)) Object(_util_console__WEBPACK_IMPORTED_MODULE_4__["breaking"])(original, replacement, _this);
-    });
-  },
-  methods: {
-    genBackground: function genBackground() {
-      var props = {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(this.computedHeight),
-        src: this.src
-      };
-      var image = this.$scopedSlots.img ? this.$scopedSlots.img({
-        props: props
-      }) : this.$createElement(_VImg_VImg__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: props
-      });
-      return this.$createElement('div', {
-        staticClass: 'v-toolbar__image'
-      }, [image]);
-    },
-    genContent: function genContent() {
-      return this.$createElement('div', {
-        staticClass: 'v-toolbar__content',
-        style: {
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(this.computedContentHeight)
-        }
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this));
-    },
-    genExtension: function genExtension() {
-      return this.$createElement('div', {
-        staticClass: 'v-toolbar__extension',
-        style: {
-          height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(this.extensionHeight)
-        }
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this, 'extension'));
-    }
-  },
-  render: function render(h) {
-    this.isExtended = this.extended || !!this.$scopedSlots.extension;
-    var children = [this.genContent()];
-    var data = this.setBackgroundColor(this.color, {
-      class: this.classes,
-      style: this.styles,
-      on: this.$listeners
-    });
-    if (this.isExtended) children.push(this.genExtension());
-    if (this.src || this.$scopedSlots.img) children.unshift(this.genBackground());
-    return h(this.tag, data, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VToolbar/index.ts":
-/*!******************************************!*\
-  !*** ./src/components/VToolbar/index.ts ***!
-  \******************************************/
-/*! exports provided: VToolbar, VToolbarItems, VToolbarTitle, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VToolbarItems", function() { return VToolbarItems; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VToolbarTitle", function() { return VToolbarTitle; });
-/* harmony import */ var _VToolbar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VToolbar */ "./src/components/VToolbar/VToolbar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VToolbar", function() { return _VToolbar__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-// Components
- // Utilities
-
-
-var VToolbarTitle = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["createSimpleFunctional"])('v-toolbar__title');
-var VToolbarItems = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["createSimpleFunctional"])('v-toolbar__items');
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VToolbar: _VToolbar__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VToolbarItems: VToolbarItems,
-    VToolbarTitle: VToolbarTitle
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VTooltip/VTooltip.sass":
-/*!***********************************************!*\
-  !*** ./src/components/VTooltip/VTooltip.sass ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTooltip/VTooltip.ts":
-/*!*********************************************!*\
-  !*** ./src/components/VTooltip/VTooltip.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTooltip_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTooltip.sass */ "./src/components/VTooltip/VTooltip.sass");
-/* harmony import */ var _VTooltip_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTooltip_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/activatable */ "./src/mixins/activatable/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts");
-/* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts");
-/* harmony import */ var _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../mixins/detachable */ "./src/mixins/detachable/index.ts");
-/* harmony import */ var _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../mixins/menuable */ "./src/mixins/menuable/index.ts");
-/* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
- // Mixins
-
-
-
-
-
-
-
- // Helpers
-
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_10__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"], _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__["default"], _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__["default"], _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__["default"], _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__["default"], _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__["default"]).extend({
-  name: 'v-tooltip',
-  props: {
-    closeDelay: {
-      type: [Number, String],
-      default: 0
-    },
-    disabled: Boolean,
-    fixed: {
-      type: Boolean,
-      default: true
-    },
-    openDelay: {
-      type: [Number, String],
-      default: 0
-    },
-    openOnHover: {
-      type: Boolean,
-      default: true
-    },
-    tag: {
-      type: String,
-      default: 'span'
-    },
-    transition: String
-  },
-  data: function data() {
-    return {
-      calculatedMinWidth: 0,
-      closeDependents: false
-    };
-  },
-  computed: {
-    calculatedLeft: function calculatedLeft() {
-      var _a = this.dimensions,
-          activator = _a.activator,
-          content = _a.content;
-      var unknown = !this.bottom && !this.left && !this.top && !this.right;
-      var activatorLeft = this.attach !== false ? activator.offsetLeft : activator.left;
-      var left = 0;
-
-      if (this.top || this.bottom || unknown) {
-        left = activatorLeft + activator.width / 2 - content.width / 2;
-      } else if (this.left || this.right) {
-        left = activatorLeft + (this.right ? activator.width : -content.width) + (this.right ? 10 : -10);
-      }
-
-      if (this.nudgeLeft) left -= parseInt(this.nudgeLeft);
-      if (this.nudgeRight) left += parseInt(this.nudgeRight);
-      return this.calcXOverflow(left, this.dimensions.content.width) + "px";
-    },
-    calculatedTop: function calculatedTop() {
-      var _a = this.dimensions,
-          activator = _a.activator,
-          content = _a.content;
-      var activatorTop = this.attach !== false ? activator.offsetTop : activator.top;
-      var top = 0;
-
-      if (this.top || this.bottom) {
-        top = activatorTop + (this.bottom ? activator.height : -content.height) + (this.bottom ? 10 : -10);
-      } else if (this.left || this.right) {
-        top = activatorTop + activator.height / 2 - content.height / 2;
-      }
-
-      if (this.nudgeTop) top -= parseInt(this.nudgeTop);
-      if (this.nudgeBottom) top += parseInt(this.nudgeBottom);
-      return this.calcYOverflow(top + this.pageYOffset) + "px";
-    },
-    classes: function classes() {
-      return {
-        'v-tooltip--top': this.top,
-        'v-tooltip--right': this.right,
-        'v-tooltip--bottom': this.bottom,
-        'v-tooltip--left': this.left,
-        'v-tooltip--attached': this.attach === '' || this.attach === true || this.attach === 'attach'
-      };
-    },
-    computedTransition: function computedTransition() {
-      if (this.transition) return this.transition;
-      return this.isActive ? 'scale-transition' : 'fade-transition';
-    },
-    offsetY: function offsetY() {
-      return this.top || this.bottom;
-    },
-    offsetX: function offsetX() {
-      return this.left || this.right;
-    },
-    styles: function styles() {
-      return {
-        left: this.calculatedLeft,
-        maxWidth: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.maxWidth),
-        minWidth: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["convertToUnit"])(this.minWidth),
-        opacity: this.isActive ? 0.9 : 0,
-        top: this.calculatedTop,
-        zIndex: this.zIndex || this.activeZIndex
-      };
-    }
-  },
-  beforeMount: function beforeMount() {
-    var _this = this;
-
-    this.$nextTick(function () {
-      _this.value && _this.callActivate();
-    });
-  },
-  mounted: function mounted() {
-    if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlotType"])(this, 'activator', true) === 'v-slot') {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_9__["consoleError"])("v-tooltip's activator slot must be bound, try '<template #activator=\"data\"><v-btn v-on=\"data.on>'", this);
-    }
-  },
-  methods: {
-    activate: function activate() {
-      // Update coordinates and dimensions of menu
-      // and its activator
-      this.updateDimensions(); // Start the transition
-
-      requestAnimationFrame(this.startTransition);
-    },
-    deactivate: function deactivate() {
-      this.runDelay('close');
-    },
-    genActivatorListeners: function genActivatorListeners() {
-      var _this = this;
-
-      var listeners = _mixins_activatable__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genActivatorListeners.call(this);
-
-      listeners.focus = function (e) {
-        _this.getActivator(e);
-
-        _this.runDelay('open');
-      };
-
-      listeners.blur = function (e) {
-        _this.getActivator(e);
-
-        _this.runDelay('close');
-      };
-
-      listeners.keydown = function (e) {
-        if (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_8__["keyCodes"].esc) {
-          _this.getActivator(e);
-
-          _this.runDelay('close');
-        }
-      };
-
-      return listeners;
-    },
-    genActivatorAttributes: function genActivatorAttributes() {
-      return {
-        'aria-haspopup': true,
-        'aria-expanded': String(this.isActive)
-      };
-    },
-    genTransition: function genTransition() {
-      var content = this.genContent();
-      if (!this.computedTransition) return content;
-      return this.$createElement('transition', {
-        props: {
-          name: this.computedTransition
-        }
-      }, [content]);
-    },
-    genContent: function genContent() {
-      var _a;
-
-      return this.$createElement('div', this.setBackgroundColor(this.color, {
-        staticClass: 'v-tooltip__content',
-        class: (_a = {}, _a[this.contentClass] = true, _a.menuable__content__active = this.isActive, _a['v-tooltip__content--fixed'] = this.activatorFixed, _a),
-        style: this.styles,
-        attrs: this.getScopeIdAttrs(),
-        directives: [{
-          name: 'show',
-          value: this.isContentActive
-        }],
-        ref: 'content'
-      }), this.getContentSlot());
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    return h(this.tag, {
-      staticClass: 'v-tooltip',
-      class: this.classes
-    }, [this.showLazyContent(function () {
-      return [_this.genTransition()];
-    }), this.genActivator()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTooltip/index.ts":
-/*!******************************************!*\
-  !*** ./src/components/VTooltip/index.ts ***!
-  \******************************************/
-/*! exports provided: VTooltip, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTooltip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTooltip */ "./src/components/VTooltip/VTooltip.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTooltip", function() { return _VTooltip__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VTooltip__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VTreeview/VTreeview.sass":
-/*!*************************************************!*\
-  !*** ./src/components/VTreeview/VTreeview.sass ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VTreeview/VTreeview.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VTreeview/VTreeview.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTreeview_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTreeview.sass */ "./src/components/VTreeview/VTreeview.sass");
-/* harmony import */ var _VTreeview_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VTreeview_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VTreeviewNode */ "./src/components/VTreeview/VTreeviewNode.ts");
-/* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_filterTreeItems__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./util/filterTreeItems */ "./src/components/VTreeview/util/filterTreeItems.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-};
-
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}; // Styles
-
-
- // Components
-
- // Mixins
-
-
- // Utils
-
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_3__["provide"])('treeview'), _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
-/* @vue/component */
-).extend({
-  name: 'v-treeview',
-  provide: function provide() {
-    return {
-      treeview: this
-    };
-  },
-  props: __assign({
-    active: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    dense: Boolean,
-    filter: Function,
-    hoverable: Boolean,
-    items: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    multipleActive: Boolean,
-    open: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    openAll: Boolean,
-    returnObject: {
-      type: Boolean,
-      default: false
-    },
-    search: String,
-    value: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    }
-  }, _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__["VTreeviewNodeProps"]),
-  data: function data() {
-    return {
-      level: -1,
-      activeCache: new Set(),
-      nodes: {},
-      openCache: new Set(),
-      selectedCache: new Set()
-    };
-  },
-  computed: {
-    excludedItems: function excludedItems() {
-      var excluded = new Set();
-      if (!this.search) return excluded;
-
-      for (var i = 0; i < this.items.length; i++) {
-        Object(_util_filterTreeItems__WEBPACK_IMPORTED_MODULE_7__["filterTreeItems"])(this.filter || _util_filterTreeItems__WEBPACK_IMPORTED_MODULE_7__["filterTreeItem"], this.items[i], this.search, this.itemKey, this.itemText, this.itemChildren, excluded);
-      }
-
-      return excluded;
-    }
-  },
-  watch: {
-    items: {
-      handler: function handler() {
-        var _this = this;
-
-        var oldKeys = Object.keys(this.nodes).map(function (k) {
-          return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(_this.nodes[k].item, _this.itemKey);
-        });
-        var newKeys = this.getKeys(this.items);
-        var diff = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["arrayDiff"])(newKeys, oldKeys); // We only want to do stuff if items have changed
-
-        if (!diff.length && newKeys.length < oldKeys.length) return; // If nodes are removed we need to clear them from this.nodes
-
-        diff.forEach(function (k) {
-          return delete _this.nodes[k];
-        });
-
-        var oldSelectedCache = __spread(this.selectedCache);
-
-        this.selectedCache = new Set();
-        this.activeCache = new Set();
-        this.openCache = new Set();
-        this.buildTree(this.items); // Only emit selected if selection has changed
-        // as a result of items changing. This fixes a
-        // potential double emit when selecting a node
-        // with dynamic children
-
-        if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["deepEqual"])(oldSelectedCache, __spread(this.selectedCache))) this.emitSelected();
-      },
-      deep: true
-    },
-    active: function active(value) {
-      this.handleNodeCacheWatcher(value, this.activeCache, this.updateActive, this.emitActive);
-    },
-    value: function value(_value) {
-      this.handleNodeCacheWatcher(_value, this.selectedCache, this.updateSelected, this.emitSelected);
-    },
-    open: function open(value) {
-      this.handleNodeCacheWatcher(value, this.openCache, this.updateOpen, this.emitOpen);
-    }
-  },
-  created: function created() {
-    var e_1, _a, e_2, _b;
-
-    var _this = this;
-
-    var getValue = function getValue(key) {
-      return _this.returnObject ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(key, _this.itemKey) : key;
-    };
-
-    this.buildTree(this.items);
-
-    try {
-      for (var _c = __values(this.value.map(getValue)), _d = _c.next(); !_d.done; _d = _c.next()) {
-        var value = _d.value;
-        this.updateSelected(value, true, true);
-      }
-    } catch (e_1_1) {
-      e_1 = {
-        error: e_1_1
-      };
-    } finally {
-      try {
-        if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
-      } finally {
-        if (e_1) throw e_1.error;
-      }
-    }
-
-    try {
-      for (var _e = __values(this.active.map(getValue)), _f = _e.next(); !_f.done; _f = _e.next()) {
-        var active = _f.value;
-        this.updateActive(active, true);
-      }
-    } catch (e_2_1) {
-      e_2 = {
-        error: e_2_1
-      };
-    } finally {
-      try {
-        if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
-      } finally {
-        if (e_2) throw e_2.error;
-      }
-    }
-  },
-  mounted: function mounted() {
-    var _this = this; // Save the developer from themselves
-
-
-    if (this.$slots.prepend || this.$slots.append) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_6__["consoleWarn"])('The prepend and append slots require a slot-scope attribute', this);
-    }
-
-    if (this.openAll) {
-      this.updateAll(true);
-    } else {
-      this.open.forEach(function (key) {
-        return _this.updateOpen(_this.returnObject ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(key, _this.itemKey) : key, true);
-      });
-      this.emitOpen();
-    }
-  },
-  methods: {
-    /** @public */
-    updateAll: function updateAll(value) {
-      var _this = this;
-
-      Object.keys(this.nodes).forEach(function (key) {
-        return _this.updateOpen(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(_this.nodes[key].item, _this.itemKey), value);
-      });
-      this.emitOpen();
-    },
-    getKeys: function getKeys(items, keys) {
-      if (keys === void 0) {
-        keys = [];
-      }
-
-      for (var i = 0; i < items.length; i++) {
-        var key = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(items[i], this.itemKey);
-        keys.push(key);
-        var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(items[i], this.itemChildren);
-
-        if (children) {
-          keys.push.apply(keys, __spread(this.getKeys(children)));
-        }
-      }
-
-      return keys;
-    },
-    buildTree: function buildTree(items, parent) {
-      var _this = this;
-
-      if (parent === void 0) {
-        parent = null;
-      }
-
-      for (var i = 0; i < items.length; i++) {
-        var item = items[i];
-        var key = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(item, this.itemKey);
-        var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(item, this.itemChildren, []);
-        var oldNode = this.nodes.hasOwnProperty(key) ? this.nodes[key] : {
-          isSelected: false,
-          isIndeterminate: false,
-          isActive: false,
-          isOpen: false,
-          vnode: null
-        };
-        var node = {
-          vnode: oldNode.vnode,
-          parent: parent,
-          children: children.map(function (c) {
-            return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(c, _this.itemKey);
-          }),
-          item: item
-        };
-        this.buildTree(children, key); // This fixed bug with dynamic children resetting selected parent state
-
-        if (!this.nodes.hasOwnProperty(key) && parent !== null && this.nodes.hasOwnProperty(parent)) {
-          node.isSelected = this.nodes[parent].isSelected;
-        } else {
-          node.isSelected = oldNode.isSelected;
-          node.isIndeterminate = oldNode.isIndeterminate;
-        }
-
-        node.isActive = oldNode.isActive;
-        node.isOpen = oldNode.isOpen;
-        this.nodes[key] = node;
-
-        if (children.length) {
-          var _a = this.calculateState(key, this.nodes),
-              isSelected = _a.isSelected,
-              isIndeterminate = _a.isIndeterminate;
-
-          node.isSelected = isSelected;
-          node.isIndeterminate = isIndeterminate;
-        } // Don't forget to rebuild cache
-
-
-        if (this.nodes[key].isSelected && (this.selectionType === 'independent' || node.children.length === 0)) this.selectedCache.add(key);
-        if (this.nodes[key].isActive) this.activeCache.add(key);
-        if (this.nodes[key].isOpen) this.openCache.add(key);
-        this.updateVnodeState(key);
-      }
-    },
-    calculateState: function calculateState(node, state) {
-      var children = state[node].children;
-      var counts = children.reduce(function (counts, child) {
-        counts[0] += +Boolean(state[child].isSelected);
-        counts[1] += +Boolean(state[child].isIndeterminate);
-        return counts;
-      }, [0, 0]);
-      var isSelected = !!children.length && counts[0] === children.length;
-      var isIndeterminate = !isSelected && (counts[0] > 0 || counts[1] > 0);
-      return {
-        isSelected: isSelected,
-        isIndeterminate: isIndeterminate
-      };
-    },
-    emitOpen: function emitOpen() {
-      this.emitNodeCache('update:open', this.openCache);
-    },
-    emitSelected: function emitSelected() {
-      this.emitNodeCache('input', this.selectedCache);
-    },
-    emitActive: function emitActive() {
-      this.emitNodeCache('update:active', this.activeCache);
-    },
-    emitNodeCache: function emitNodeCache(event, cache) {
-      var _this = this;
-
-      this.$emit(event, this.returnObject ? __spread(cache).map(function (key) {
-        return _this.nodes[key].item;
-      }) : __spread(cache));
-    },
-    handleNodeCacheWatcher: function handleNodeCacheWatcher(value, cache, updateFn, emitFn) {
-      var _this = this;
-
-      value = this.returnObject ? value.map(function (v) {
-        return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(v, _this.itemKey);
-      }) : value;
-
-      var old = __spread(cache);
-
-      if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["deepEqual"])(old, value)) return;
-      old.forEach(function (key) {
-        return updateFn(key, false);
-      });
-      value.forEach(function (key) {
-        return updateFn(key, true);
-      });
-      emitFn();
-    },
-    getDescendants: function getDescendants(key, descendants) {
-      if (descendants === void 0) {
-        descendants = [];
-      }
-
-      var children = this.nodes[key].children;
-      descendants.push.apply(descendants, __spread(children));
-
-      for (var i = 0; i < children.length; i++) {
-        descendants = this.getDescendants(children[i], descendants);
-      }
-
-      return descendants;
-    },
-    getParents: function getParents(key) {
-      var parent = this.nodes[key].parent;
-      var parents = [];
-
-      while (parent !== null) {
-        parents.push(parent);
-        parent = this.nodes[parent].parent;
-      }
-
-      return parents;
-    },
-    register: function register(node) {
-      var key = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(node.item, this.itemKey);
-      this.nodes[key].vnode = node;
-      this.updateVnodeState(key);
-    },
-    unregister: function unregister(node) {
-      var key = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(node.item, this.itemKey);
-      if (this.nodes[key]) this.nodes[key].vnode = null;
-    },
-    isParent: function isParent(key) {
-      return this.nodes[key].children && this.nodes[key].children.length;
-    },
-    updateActive: function updateActive(key, isActive) {
-      var _this = this;
-
-      if (!this.nodes.hasOwnProperty(key)) return;
-
-      if (!this.multipleActive) {
-        this.activeCache.forEach(function (active) {
-          _this.nodes[active].isActive = false;
-
-          _this.updateVnodeState(active);
-
-          _this.activeCache.delete(active);
-        });
-      }
-
-      var node = this.nodes[key];
-      if (!node) return;
-      if (isActive) this.activeCache.add(key);else this.activeCache.delete(key);
-      node.isActive = isActive;
-      this.updateVnodeState(key);
-    },
-    updateSelected: function updateSelected(key, isSelected, isForced) {
-      var e_3, _a, e_4, _b, e_5, _c;
-
-      if (isForced === void 0) {
-        isForced = false;
-      }
-
-      if (!this.nodes.hasOwnProperty(key)) return;
-      var changed = new Map();
-
-      if (this.selectionType !== 'independent') {
-        try {
-          for (var _d = __values(this.getDescendants(key)), _e = _d.next(); !_e.done; _e = _d.next()) {
-            var descendant = _e.value;
-
-            if (!Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(this.nodes[descendant].item, this.itemDisabled) || isForced) {
-              this.nodes[descendant].isSelected = isSelected;
-              this.nodes[descendant].isIndeterminate = false;
-              changed.set(descendant, isSelected);
-            }
-          }
-        } catch (e_3_1) {
-          e_3 = {
-            error: e_3_1
-          };
-        } finally {
-          try {
-            if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
-          } finally {
-            if (e_3) throw e_3.error;
-          }
-        }
-
-        var calculated = this.calculateState(key, this.nodes);
-        this.nodes[key].isSelected = isSelected;
-        this.nodes[key].isIndeterminate = calculated.isIndeterminate;
-        changed.set(key, isSelected);
-
-        try {
-          for (var _f = __values(this.getParents(key)), _g = _f.next(); !_g.done; _g = _f.next()) {
-            var parent = _g.value;
-            var calculated_1 = this.calculateState(parent, this.nodes);
-            this.nodes[parent].isSelected = calculated_1.isSelected;
-            this.nodes[parent].isIndeterminate = calculated_1.isIndeterminate;
-            changed.set(parent, calculated_1.isSelected);
-          }
-        } catch (e_4_1) {
-          e_4 = {
-            error: e_4_1
-          };
-        } finally {
-          try {
-            if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
-          } finally {
-            if (e_4) throw e_4.error;
-          }
-        }
-      } else {
-        this.nodes[key].isSelected = isSelected;
-        this.nodes[key].isIndeterminate = false;
-        changed.set(key, isSelected);
-      }
-
-      try {
-        for (var _h = __values(changed.entries()), _j = _h.next(); !_j.done; _j = _h.next()) {
-          var _k = __read(_j.value, 2),
-              key_1 = _k[0],
-              value = _k[1];
-
-          this.updateVnodeState(key_1);
-          if (this.selectionType === 'leaf' && this.isParent(key_1)) continue;
-          value === true ? this.selectedCache.add(key_1) : this.selectedCache.delete(key_1);
-        }
-      } catch (e_5_1) {
-        e_5 = {
-          error: e_5_1
-        };
-      } finally {
-        try {
-          if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
-        } finally {
-          if (e_5) throw e_5.error;
-        }
-      }
-    },
-    updateOpen: function updateOpen(key, isOpen) {
-      var _this = this;
-
-      if (!this.nodes.hasOwnProperty(key)) return;
-      var node = this.nodes[key];
-      var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(node.item, this.itemChildren);
-
-      if (children && !children.length && node.vnode && !node.vnode.hasLoaded) {
-        node.vnode.checkChildren().then(function () {
-          return _this.updateOpen(key, isOpen);
-        });
-      } else if (children && children.length) {
-        node.isOpen = isOpen;
-        node.isOpen ? this.openCache.add(key) : this.openCache.delete(key);
-        this.updateVnodeState(key);
-      }
-    },
-    updateVnodeState: function updateVnodeState(key) {
-      var node = this.nodes[key];
-
-      if (node && node.vnode) {
-        node.vnode.isSelected = node.isSelected;
-        node.vnode.isIndeterminate = node.isIndeterminate;
-        node.vnode.isActive = node.isActive;
-        node.vnode.isOpen = node.isOpen;
-      }
-    },
-    isExcluded: function isExcluded(key) {
-      return !!this.search && this.excludedItems.has(key);
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var children = this.items.length ? this.items.filter(function (item) {
-      return !_this.isExcluded(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(item, _this.itemKey));
-    }).map(function (item) {
-      var genChild = _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__["default"].options.methods.genChild.bind(_this);
-      return genChild(item, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["getObjectValueByPath"])(item, _this.itemDisabled));
-    })
-    /* istanbul ignore next */
-    : this.$slots.default; // TODO: remove type annotation with TS 3.2
-
-    return h('div', {
-      staticClass: 'v-treeview',
-      class: __assign({
-        'v-treeview--hoverable': this.hoverable,
-        'v-treeview--dense': this.dense
-      }, this.themeClasses)
-    }, children);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VTreeview/VTreeviewNode.ts":
-/*!***************************************************!*\
-  !*** ./src/components/VTreeview/VTreeviewNode.ts ***!
-  \***************************************************/
-/*! exports provided: VTreeviewNodeProps, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VTreeviewNodeProps", function() { return VTreeviewNodeProps; });
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../transitions */ "./src/components/transitions/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Components
-
-
-
- // Mixins
-
-
- // Utils
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"], Object(_mixins_registrable__WEBPACK_IMPORTED_MODULE_2__["inject"])('treeview'));
-var VTreeviewNodeProps = {
-  activatable: Boolean,
-  activeClass: {
-    type: String,
-    default: 'v-treeview-node--active'
-  },
-  color: {
-    type: String,
-    default: 'primary'
-  },
-  expandIcon: {
-    type: String,
-    default: '$subgroup'
-  },
-  indeterminateIcon: {
-    type: String,
-    default: '$checkboxIndeterminate'
-  },
-  itemChildren: {
-    type: String,
-    default: 'children'
-  },
-  itemDisabled: {
-    type: String,
-    default: 'disabled'
-  },
-  itemKey: {
-    type: String,
-    default: 'id'
-  },
-  itemText: {
-    type: String,
-    default: 'name'
-  },
-  loadChildren: Function,
-  loadingIcon: {
-    type: String,
-    default: '$loading'
-  },
-  offIcon: {
-    type: String,
-    default: '$checkboxOff'
-  },
-  onIcon: {
-    type: String,
-    default: '$checkboxOn'
-  },
-  openOnClick: Boolean,
-  rounded: Boolean,
-  selectable: Boolean,
-  selectedColor: {
-    type: String,
-    default: 'accent'
-  },
-  shaped: Boolean,
-  transition: Boolean,
-  selectionType: {
-    type: String,
-    default: 'leaf',
-    validator: function validator(v) {
-      return ['leaf', 'independent'].includes(v);
-    }
-  }
-};
-/* @vue/component */
-
-var VTreeviewNode = baseMixins.extend().extend({
-  name: 'v-treeview-node',
-  inject: {
-    treeview: {
-      default: null
-    }
-  },
-  props: __assign({
-    level: Number,
-    item: {
-      type: Object,
-      default: function _default() {
-        return null;
-      }
-    },
-    parentIsDisabled: Boolean
-  }, VTreeviewNodeProps),
-  data: function data() {
-    return {
-      hasLoaded: false,
-      isActive: false,
-      isIndeterminate: false,
-      isLoading: false,
-      isOpen: false,
-      isSelected: false
-    };
-  },
-  computed: {
-    disabled: function disabled() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(this.item, this.itemDisabled) || this.parentIsDisabled && this.selectionType === 'leaf';
-    },
-    key: function key() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(this.item, this.itemKey);
-    },
-    children: function children() {
-      var _this = this;
-
-      var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(this.item, this.itemChildren);
-      return children && children.filter(function (child) {
-        return !_this.treeview.isExcluded(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(child, _this.itemKey));
-      });
-    },
-    text: function text() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(this.item, this.itemText);
-    },
-    scopedProps: function scopedProps() {
-      return {
-        item: this.item,
-        leaf: !this.children,
-        selected: this.isSelected,
-        indeterminate: this.isIndeterminate,
-        active: this.isActive,
-        open: this.isOpen
-      };
-    },
-    computedIcon: function computedIcon() {
-      if (this.isIndeterminate) return this.indeterminateIcon;else if (this.isSelected) return this.onIcon;else return this.offIcon;
-    },
-    hasChildren: function hasChildren() {
-      return !!this.children && (!!this.children.length || !!this.loadChildren);
-    }
-  },
-  created: function created() {
-    this.treeview.register(this);
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.treeview.unregister(this);
-  },
-  methods: {
-    checkChildren: function checkChildren() {
-      var _this = this;
-
-      return new Promise(function (resolve) {
-        // TODO: Potential issue with always trying
-        // to load children if response is empty?
-        if (!_this.children || _this.children.length || !_this.loadChildren || _this.hasLoaded) return resolve();
-        _this.isLoading = true;
-        resolve(_this.loadChildren(_this.item));
-      }).then(function () {
-        _this.isLoading = false;
-        _this.hasLoaded = true;
-      });
-    },
-    open: function open() {
-      this.isOpen = !this.isOpen;
-      this.treeview.updateOpen(this.key, this.isOpen);
-      this.treeview.emitOpen();
-    },
-    genLabel: function genLabel() {
-      var children = [];
-      if (this.$scopedSlots.label) children.push(this.$scopedSlots.label(this.scopedProps));else children.push(this.text);
-      return this.$createElement('div', {
-        slot: 'label',
-        staticClass: 'v-treeview-node__label'
-      }, children);
-    },
-    genPrependSlot: function genPrependSlot() {
-      if (!this.$scopedSlots.prepend) return null;
-      return this.$createElement('div', {
-        staticClass: 'v-treeview-node__prepend'
-      }, this.$scopedSlots.prepend(this.scopedProps));
-    },
-    genAppendSlot: function genAppendSlot() {
-      if (!this.$scopedSlots.append) return null;
-      return this.$createElement('div', {
-        staticClass: 'v-treeview-node__append'
-      }, this.$scopedSlots.append(this.scopedProps));
-    },
-    genContent: function genContent() {
-      var children = [this.genPrependSlot(), this.genLabel(), this.genAppendSlot()];
-      return this.$createElement('div', {
-        staticClass: 'v-treeview-node__content'
-      }, children);
-    },
-    genToggle: function genToggle() {
-      var _this = this;
-
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["VIcon"], {
-        staticClass: 'v-treeview-node__toggle',
-        class: {
-          'v-treeview-node__toggle--open': this.isOpen,
-          'v-treeview-node__toggle--loading': this.isLoading
-        },
-        slot: 'prepend',
-        on: {
-          click: function click(e) {
-            e.stopPropagation();
-            if (_this.isLoading) return;
-
-            _this.checkChildren().then(function () {
-              return _this.open();
-            });
-          }
-        }
-      }, [this.isLoading ? this.loadingIcon : this.expandIcon]);
-    },
-    genCheckbox: function genCheckbox() {
-      var _this = this;
-
-      return this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_1__["VIcon"], {
-        staticClass: 'v-treeview-node__checkbox',
-        props: {
-          color: this.isSelected || this.isIndeterminate ? this.selectedColor : undefined,
-          disabled: this.disabled
-        },
-        on: {
-          click: function click(e) {
-            e.stopPropagation();
-            if (_this.isLoading) return;
-
-            _this.checkChildren().then(function () {
-              // We nextTick here so that items watch in VTreeview has a chance to run first
-              _this.$nextTick(function () {
-                _this.isSelected = !_this.isSelected;
-                _this.isIndeterminate = false;
-
-                _this.treeview.updateSelected(_this.key, _this.isSelected);
-
-                _this.treeview.emitSelected();
-              });
-            });
-          }
-        }
-      }, [this.computedIcon]);
-    },
-    genLevel: function genLevel(level) {
-      var _this = this;
-
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["createRange"])(level).map(function () {
-        return _this.$createElement('div', {
-          staticClass: 'v-treeview-node__level'
-        });
-      });
-    },
-    genNode: function genNode() {
-      var _a;
-
-      var _this = this;
-
-      var children = [this.genContent()];
-      if (this.selectable) children.unshift(this.genCheckbox());
-
-      if (this.hasChildren) {
-        children.unshift(this.genToggle());
-      } else {
-        children.unshift.apply(children, __spread(this.genLevel(1)));
-      }
-
-      children.unshift.apply(children, __spread(this.genLevel(this.level)));
-      return this.$createElement('div', this.setTextColor(this.isActive && this.color, {
-        staticClass: 'v-treeview-node__root',
-        class: (_a = {}, _a[this.activeClass] = this.isActive, _a),
-        on: {
-          click: function click() {
-            if (_this.openOnClick && _this.hasChildren) {
-              _this.checkChildren().then(_this.open);
-            } else if (_this.activatable && !_this.disabled) {
-              _this.isActive = !_this.isActive;
-
-              _this.treeview.updateActive(_this.key, _this.isActive);
-
-              _this.treeview.emitActive();
-            }
-          }
-        }
-      }), children);
-    },
-    genChild: function genChild(item, parentIsDisabled) {
-      return this.$createElement(VTreeviewNode, {
-        key: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_5__["getObjectValueByPath"])(item, this.itemKey),
-        props: {
-          activatable: this.activatable,
-          activeClass: this.activeClass,
-          item: item,
-          selectable: this.selectable,
-          selectedColor: this.selectedColor,
-          color: this.color,
-          expandIcon: this.expandIcon,
-          indeterminateIcon: this.indeterminateIcon,
-          offIcon: this.offIcon,
-          onIcon: this.onIcon,
-          loadingIcon: this.loadingIcon,
-          itemKey: this.itemKey,
-          itemText: this.itemText,
-          itemDisabled: this.itemDisabled,
-          itemChildren: this.itemChildren,
-          loadChildren: this.loadChildren,
-          transition: this.transition,
-          openOnClick: this.openOnClick,
-          rounded: this.rounded,
-          shaped: this.shaped,
-          level: this.level + 1,
-          selectionType: this.selectionType,
-          parentIsDisabled: parentIsDisabled
-        },
-        scopedSlots: this.$scopedSlots
-      });
-    },
-    genChildrenWrapper: function genChildrenWrapper() {
-      var _this = this;
-
-      if (!this.isOpen || !this.children) return null;
-      var children = [this.children.map(function (c) {
-        return _this.genChild(c, _this.disabled);
-      })];
-      return this.$createElement('div', {
-        staticClass: 'v-treeview-node__children'
-      }, children);
-    },
-    genTransition: function genTransition() {
-      return this.$createElement(_transitions__WEBPACK_IMPORTED_MODULE_0__["VExpandTransition"], [this.genChildrenWrapper()]);
-    }
-  },
-  render: function render(h) {
-    var children = [this.genNode()];
-    if (this.transition) children.push(this.genTransition());else children.push(this.genChildrenWrapper());
-    return h('div', {
-      staticClass: 'v-treeview-node',
-      class: {
-        'v-treeview-node--leaf': !this.hasChildren,
-        'v-treeview-node--click': this.openOnClick,
-        'v-treeview-node--disabled': this.disabled,
-        'v-treeview-node--rounded': this.rounded,
-        'v-treeview-node--shaped': this.shaped,
-        'v-treeview-node--selected': this.isSelected
-      },
-      attrs: {
-        'aria-expanded': String(this.isOpen)
-      }
-    }, children);
-  }
-});
-/* harmony default export */ __webpack_exports__["default"] = (VTreeviewNode);
-
-/***/ }),
-
-/***/ "./src/components/VTreeview/index.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VTreeview/index.ts ***!
-  \*******************************************/
-/*! exports provided: VTreeview, VTreeviewNode, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VTreeview__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VTreeview */ "./src/components/VTreeview/VTreeview.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTreeview", function() { return _VTreeview__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VTreeviewNode */ "./src/components/VTreeview/VTreeviewNode.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTreeviewNode", function() { return _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VTreeview: _VTreeview__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VTreeviewNode: _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/VTreeview/util/filterTreeItems.ts":
-/*!**********************************************************!*\
-  !*** ./src/components/VTreeview/util/filterTreeItems.ts ***!
-  \**********************************************************/
-/*! exports provided: filterTreeItem, filterTreeItems */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterTreeItem", function() { return filterTreeItem; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterTreeItems", function() { return filterTreeItems; });
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../util/helpers */ "./src/util/helpers.ts");
-
-function filterTreeItem(item, search, textKey) {
-  var text = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["getObjectValueByPath"])(item, textKey);
-  return text.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) > -1;
-}
-function filterTreeItems(filter, item, search, idKey, textKey, childrenKey, excluded) {
-  if (filter(item, search, textKey)) {
-    return true;
-  }
-
-  var children = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["getObjectValueByPath"])(item, childrenKey);
-
-  if (children) {
-    var match = false;
-
-    for (var i = 0; i < children.length; i++) {
-      if (filterTreeItems(filter, children[i], search, idKey, textKey, childrenKey, excluded)) {
-        match = true;
-      }
-    }
-
-    if (match) return true;
-  }
-
-  excluded.add(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["getObjectValueByPath"])(item, idKey));
-  return false;
-}
-
-/***/ }),
-
-/***/ "./src/components/VVirtualScroll/VVirtualScroll.sass":
-/*!***********************************************************!*\
-  !*** ./src/components/VVirtualScroll/VVirtualScroll.sass ***!
-  \***********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VVirtualScroll/VVirtualScroll.ts":
-/*!*********************************************************!*\
-  !*** ./src/components/VVirtualScroll/VVirtualScroll.ts ***!
-  \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VVirtualScroll_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VVirtualScroll.sass */ "./src/components/VVirtualScroll/VVirtualScroll.sass");
-/* harmony import */ var _VVirtualScroll_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VVirtualScroll_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts");
-/* harmony import */ var _directives_scroll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../directives/scroll */ "./src/directives/scroll/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-// Styles
- // Mixins
-
- // Directives
-
- // Utilities
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_mixins_measurable__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
-  name: 'v-virtual-scroll',
-  directives: {
-    Scroll: _directives_scroll__WEBPACK_IMPORTED_MODULE_2__["default"]
-  },
-  props: {
-    bench: {
-      type: [Number, String],
-      default: 0
-    },
-    itemHeight: {
-      type: [Number, String],
-      required: true
-    },
-    items: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    }
-  },
-  data: function data() {
-    return {
-      first: 0,
-      last: 0,
-      scrollTop: 0
-    };
-  },
-  computed: {
-    __bench: function __bench() {
-      return parseInt(this.bench, 10);
-    },
-    __itemHeight: function __itemHeight() {
-      return parseInt(this.itemHeight, 10);
-    },
-    firstToRender: function firstToRender() {
-      return Math.max(0, this.first - this.__bench);
-    },
-    lastToRender: function lastToRender() {
-      return Math.min(this.items.length, this.last + this.__bench);
-    }
-  },
-  watch: {
-    height: 'onScroll',
-    itemHeight: 'onScroll'
-  },
-  mounted: function mounted() {
-    this.last = this.getLast(0);
-  },
-  methods: {
-    getChildren: function getChildren() {
-      return this.items.slice(this.firstToRender, this.lastToRender).map(this.genChild);
-    },
-    genChild: function genChild(item, index) {
-      index += this.firstToRender;
-      var top = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(index * this.__itemHeight);
-      return this.$createElement('div', {
-        staticClass: 'v-virtual-scroll__item',
-        style: {
-          top: top
-        },
-        key: index
-      }, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this, 'default', {
-        index: index,
-        item: item
-      }));
-    },
-    getFirst: function getFirst() {
-      return Math.floor(this.scrollTop / this.__itemHeight);
-    },
-    getLast: function getLast(first) {
-      var height = parseInt(this.height || 0, 10) || this.$el.clientHeight;
-      return first + Math.ceil(height / this.__itemHeight);
-    },
-    onScroll: function onScroll() {
-      this.scrollTop = this.$el.scrollTop;
-      this.first = this.getFirst();
-      this.last = this.getLast(this.first);
-    }
-  },
-  render: function render(h) {
-    var content = h('div', {
-      staticClass: 'v-virtual-scroll__container',
-      style: {
-        height: Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(this.items.length * this.__itemHeight)
-      }
-    }, this.getChildren());
-    return h('div', {
-      staticClass: 'v-virtual-scroll',
-      style: this.measurableStyles,
-      directives: [{
-        name: 'scroll',
-        modifiers: {
-          self: true
-        },
-        value: this.onScroll
-      }],
-      on: this.$listeners
-    }, [content]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VVirtualScroll/index.ts":
-/*!************************************************!*\
-  !*** ./src/components/VVirtualScroll/index.ts ***!
-  \************************************************/
-/*! exports provided: VVirtualScroll, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VVirtualScroll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VVirtualScroll */ "./src/components/VVirtualScroll/VVirtualScroll.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VVirtualScroll", function() { return _VVirtualScroll__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_VVirtualScroll__WEBPACK_IMPORTED_MODULE_0__["default"]);
-
-/***/ }),
-
-/***/ "./src/components/VWindow/VWindow.sass":
-/*!*********************************************!*\
-  !*** ./src/components/VWindow/VWindow.sass ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/components/VWindow/VWindow.ts":
-/*!*******************************************!*\
-  !*** ./src/components/VWindow/VWindow.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VWindow_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VWindow.sass */ "./src/components/VWindow/VWindow.sass");
-/* harmony import */ var _VWindow_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VWindow_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../directives/touch */ "./src/directives/touch/index.ts");
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../VBtn */ "./src/components/VBtn/index.ts");
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../VIcon */ "./src/components/VIcon/index.ts");
-/* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Styles
-
-
- // Directives
-
- // Components
-
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_4__["BaseItemGroup"].extend({
-  name: 'v-window',
-  directives: {
-    Touch: _directives_touch__WEBPACK_IMPORTED_MODULE_1__["default"]
-  },
-  provide: function provide() {
-    return {
-      windowGroup: this
-    };
-  },
-  props: {
-    activeClass: {
-      type: String,
-      default: 'v-window-item--active'
-    },
-    continuous: Boolean,
-    mandatory: {
-      type: Boolean,
-      default: true
-    },
-    nextIcon: {
-      type: [Boolean, String],
-      default: '$next'
-    },
-    prevIcon: {
-      type: [Boolean, String],
-      default: '$prev'
-    },
-    reverse: Boolean,
-    showArrows: Boolean,
-    showArrowsOnHover: Boolean,
-    touch: Object,
-    touchless: Boolean,
-    value: {
-      required: false
-    },
-    vertical: Boolean
-  },
-  data: function data() {
-    return {
-      internalHeight: undefined,
-      transitionHeight: undefined,
-      transitionCount: 0,
-      isBooted: false,
-      isReverse: false
-    };
-  },
-  computed: {
-    isActive: function isActive() {
-      return this.transitionCount > 0;
-    },
-    classes: function classes() {
-      return __assign(__assign({}, _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_4__["BaseItemGroup"].options.computed.classes.call(this)), {
-        'v-window--show-arrows-on-hover': this.showArrowsOnHover
-      });
-    },
-    computedTransition: function computedTransition() {
-      if (!this.isBooted) return '';
-      var axis = this.vertical ? 'y' : 'x';
-      var reverse = this.internalReverse ? !this.isReverse : this.isReverse;
-      var direction = reverse ? '-reverse' : '';
-      return "v-window-" + axis + direction + "-transition";
-    },
-    hasActiveItems: function hasActiveItems() {
-      return Boolean(this.items.find(function (item) {
-        return !item.disabled;
-      }));
-    },
-    hasNext: function hasNext() {
-      return this.continuous || this.internalIndex < this.items.length - 1;
-    },
-    hasPrev: function hasPrev() {
-      return this.continuous || this.internalIndex > 0;
-    },
-    internalIndex: function internalIndex() {
-      var _this = this;
-
-      return this.items.findIndex(function (item, i) {
-        return _this.internalValue === _this.getValue(item, i);
-      });
-    },
-    internalReverse: function internalReverse() {
-      return this.$vuetify.rtl ? !this.reverse : this.reverse;
-    }
-  },
-  watch: {
-    internalIndex: function internalIndex(val, oldVal) {
-      this.isReverse = this.updateReverse(val, oldVal);
-    }
-  },
-  mounted: function mounted() {
-    var _this = this;
-
-    window.requestAnimationFrame(function () {
-      return _this.isBooted = true;
-    });
-  },
-  methods: {
-    genContainer: function genContainer() {
-      var children = [this.$slots.default];
-
-      if (this.showArrows) {
-        children.push(this.genControlIcons());
-      }
-
-      return this.$createElement('div', {
-        staticClass: 'v-window__container',
-        class: {
-          'v-window__container--is-active': this.isActive
-        },
-        style: {
-          height: this.internalHeight || this.transitionHeight
-        }
-      }, children);
-    },
-    genIcon: function genIcon(direction, icon, click) {
-      return this.$createElement('div', {
-        staticClass: "v-window__" + direction
-      }, [this.$createElement(_VBtn__WEBPACK_IMPORTED_MODULE_2__["default"], {
-        props: {
-          icon: true
-        },
-        attrs: {
-          'aria-label': this.$vuetify.lang.t("$vuetify.carousel." + direction)
-        },
-        on: {
-          click: click
-        }
-      }, [this.$createElement(_VIcon__WEBPACK_IMPORTED_MODULE_3__["default"], {
-        props: {
-          large: true
-        }
-      }, icon)])]);
-    },
-    genControlIcons: function genControlIcons() {
-      var icons = [];
-      var prevIcon = this.$vuetify.rtl ? this.nextIcon : this.prevIcon;
-      /* istanbul ignore else */
-
-      if (this.hasPrev && prevIcon && typeof prevIcon === 'string') {
-        var icon = this.genIcon('prev', prevIcon, this.prev);
-        icon && icons.push(icon);
-      }
-
-      var nextIcon = this.$vuetify.rtl ? this.prevIcon : this.nextIcon;
-      /* istanbul ignore else */
-
-      if (this.hasNext && nextIcon && typeof nextIcon === 'string') {
-        var icon = this.genIcon('next', nextIcon, this.next);
-        icon && icons.push(icon);
-      }
-
-      return icons;
-    },
-    getNextIndex: function getNextIndex(index) {
-      var nextIndex = (index + 1) % this.items.length;
-      var item = this.items[nextIndex];
-      if (item.disabled) return this.getNextIndex(nextIndex);
-      return nextIndex;
-    },
-    getPrevIndex: function getPrevIndex(index) {
-      var prevIndex = (index + this.items.length - 1) % this.items.length;
-      var item = this.items[prevIndex];
-      if (item.disabled) return this.getPrevIndex(prevIndex);
-      return prevIndex;
-    },
-    next: function next() {
-      /* istanbul ignore if */
-      if (!this.hasActiveItems || !this.hasNext) return;
-      var nextIndex = this.getNextIndex(this.internalIndex);
-      var item = this.items[nextIndex];
-      this.internalValue = this.getValue(item, nextIndex);
-    },
-    prev: function prev() {
-      /* istanbul ignore if */
-      if (!this.hasActiveItems || !this.hasPrev) return;
-      var lastIndex = this.getPrevIndex(this.internalIndex);
-      var item = this.items[lastIndex];
-      this.internalValue = this.getValue(item, lastIndex);
-    },
-    updateReverse: function updateReverse(val, oldVal) {
-      var lastIndex = this.items.length - 1;
-
-      if (val === lastIndex && oldVal === 0) {
-        return true;
-      } else if (val === 0 && oldVal === lastIndex) {
-        return false;
-      } else {
-        return val < oldVal;
-      }
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    var data = {
-      staticClass: 'v-window',
-      class: this.classes,
-      directives: []
-    };
-
-    if (!this.touchless) {
-      var value = this.touch || {
-        left: function left() {
-          _this.$vuetify.rtl ? _this.prev() : _this.next();
-        },
-        right: function right() {
-          _this.$vuetify.rtl ? _this.next() : _this.prev();
-        },
-        end: function end(e) {
-          e.stopPropagation();
-        },
-        start: function start(e) {
-          e.stopPropagation();
-        }
-      };
-      data.directives.push({
-        name: 'touch',
-        value: value
-      });
-    }
-
-    return h('div', data, [this.genContainer()]);
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VWindow/VWindowItem.ts":
-/*!***********************************************!*\
-  !*** ./src/components/VWindow/VWindowItem.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mixins_bootable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../mixins/bootable */ "./src/mixins/bootable/index.ts");
-/* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts");
-/* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../directives/touch */ "./src/directives/touch/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Mixins
-
- // Directives
-
- // Utilities
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_mixins_bootable__WEBPACK_IMPORTED_MODULE_0__["default"], Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_1__["factory"])('windowGroup', 'v-window-item', 'v-window'));
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend().extend({
-  name: 'v-window-item',
-  directives: {
-    Touch: _directives_touch__WEBPACK_IMPORTED_MODULE_2__["default"]
-  },
-  props: {
-    disabled: Boolean,
-    reverseTransition: {
-      type: [Boolean, String],
-      default: undefined
-    },
-    transition: {
-      type: [Boolean, String],
-      default: undefined
-    },
-    value: {
-      required: false
-    }
-  },
-  data: function data() {
-    return {
-      isActive: false,
-      inTransition: false
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return this.groupClasses;
-    },
-    computedTransition: function computedTransition() {
-      if (!this.windowGroup.internalReverse) {
-        return typeof this.transition !== 'undefined' ? this.transition || '' : this.windowGroup.computedTransition;
-      }
-
-      return typeof this.reverseTransition !== 'undefined' ? this.reverseTransition || '' : this.windowGroup.computedTransition;
-    }
-  },
-  methods: {
-    genDefaultSlot: function genDefaultSlot() {
-      return this.$slots.default;
-    },
-    genWindowItem: function genWindowItem() {
-      return this.$createElement('div', {
-        staticClass: 'v-window-item',
-        class: this.classes,
-        directives: [{
-          name: 'show',
-          value: this.isActive
-        }],
-        on: this.$listeners
-      }, this.genDefaultSlot());
-    },
-    onAfterTransition: function onAfterTransition() {
-      if (!this.inTransition) {
-        return;
-      } // Finalize transition state.
-
-
-      this.inTransition = false;
-
-      if (this.windowGroup.transitionCount > 0) {
-        this.windowGroup.transitionCount--; // Remove container height if we are out of transition.
-
-        if (this.windowGroup.transitionCount === 0) {
-          this.windowGroup.transitionHeight = undefined;
-        }
-      }
-    },
-    onBeforeTransition: function onBeforeTransition() {
-      if (this.inTransition) {
-        return;
-      } // Initialize transition state here.
-
-
-      this.inTransition = true;
-
-      if (this.windowGroup.transitionCount === 0) {
-        // Set initial height for height transition.
-        this.windowGroup.transitionHeight = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(this.windowGroup.$el.clientHeight);
-      }
-
-      this.windowGroup.transitionCount++;
-    },
-    onTransitionCancelled: function onTransitionCancelled() {
-      this.onAfterTransition(); // This should have the same path as normal transition end.
-    },
-    onEnter: function onEnter(el) {
-      var _this = this;
-
-      if (!this.inTransition) {
-        return;
-      }
-
-      this.$nextTick(function () {
-        // Do not set height if no transition or cancelled.
-        if (!_this.computedTransition || !_this.inTransition) {
-          return;
-        } // Set transition target height.
-
-
-        _this.windowGroup.transitionHeight = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["convertToUnit"])(el.clientHeight);
-      });
-    }
-  },
-  render: function render(h) {
-    var _this = this;
-
-    return h('transition', {
-      props: {
-        name: this.computedTransition
-      },
-      on: {
-        // Handlers for enter windows.
-        beforeEnter: this.onBeforeTransition,
-        afterEnter: this.onAfterTransition,
-        enterCancelled: this.onTransitionCancelled,
-        // Handlers for leave windows.
-        beforeLeave: this.onBeforeTransition,
-        afterLeave: this.onAfterTransition,
-        leaveCancelled: this.onTransitionCancelled,
-        // Enter handler for height transition.
-        enter: this.onEnter
-      }
-    }, this.showLazyContent(function () {
-      return [_this.genWindowItem()];
-    }));
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/components/VWindow/index.ts":
-/*!*****************************************!*\
-  !*** ./src/components/VWindow/index.ts ***!
-  \*****************************************/
-/*! exports provided: VWindow, VWindowItem, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VWindow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VWindow */ "./src/components/VWindow/VWindow.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VWindow", function() { return _VWindow__WEBPACK_IMPORTED_MODULE_0__["default"]; });
-
-/* harmony import */ var _VWindowItem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VWindowItem */ "./src/components/VWindow/VWindowItem.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VWindowItem", function() { return _VWindowItem__WEBPACK_IMPORTED_MODULE_1__["default"]; });
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VWindow: _VWindow__WEBPACK_IMPORTED_MODULE_0__["default"],
-    VWindowItem: _VWindowItem__WEBPACK_IMPORTED_MODULE_1__["default"]
-  }
-});
-
-/***/ }),
-
-/***/ "./src/components/index.ts":
-/*!*********************************!*\
-  !*** ./src/components/index.ts ***!
-  \*********************************/
-/*! exports provided: VApp, VAppBar, VAppBarNavIcon, VAlert, VAutocomplete, VAvatar, VBadge, VBanner, VBottomNavigation, VBottomSheet, VBreadcrumbs, VBreadcrumbsItem, VBreadcrumbsDivider, VBtn, VBtnToggle, VCalendar, VCalendarCategory, VCalendarDaily, VCalendarWeekly, VCalendarMonthly, VCard, VCardActions, VCardSubtitle, VCardText, VCardTitle, VCarousel, VCarouselItem, VCheckbox, VSimpleCheckbox, VChip, VChipGroup, VColorPicker, VColorPickerSwatches, VColorPickerCanvas, VContent, VCombobox, VCounter, VData, VDataIterator, VDataFooter, VDataTable, VEditDialog, VTableOverflow, VDataTableHeader, VSimpleTable, VVirtualTable, VDatePicker, VDatePickerTitle, VDatePickerHeader, VDatePickerDateTable, VDatePickerMonthTable, VDatePickerYears, VDialog, VDivider, VExpansionPanels, VExpansionPanel, VExpansionPanelHeader, VExpansionPanelContent, VFileInput, VFooter, VForm, VContainer, VCol, VRow, VSpacer, VLayout, VFlex, VHover, VIcon, VImg, VInput, VItem, VItemGroup, VLabel, VLazy, VListItemActionText, VListItemContent, VListItemTitle, VListItemSubtitle, VList, VListGroup, VListItem, VListItemAction, VListItemAvatar, VListItemIcon, VListItemGroup, VMain, VMenu, VMessages, VNavigationDrawer, VOverflowBtn, VOverlay, VPagination, VSheet, VParallax, VPicker, VProgressCircular, VProgressLinear, VRadioGroup, VRadio, VRangeSlider, VRating, VResponsive, VSelect, VSkeletonLoader, VSlider, VSlideGroup, VSlideItem, VSnackbar, VSparkline, VSpeedDial, VStepper, VStepperContent, VStepperStep, VStepperHeader, VStepperItems, VSubheader, VSwitch, VSystemBar, VTabs, VTab, VTabItem, VTabsItems, VTabsSlider, VTextarea, VTextField, VThemeProvider, VTimeline, VTimelineItem, VTimePicker, VTimePickerClock, VTimePickerTitle, VToolbar, VToolbarItems, VToolbarTitle, VTooltip, VTreeview, VTreeviewNode, VVirtualScroll, VWindow, VWindowItem, VCarouselTransition, VCarouselReverseTransition, VTabTransition, VTabReverseTransition, VMenuTransition, VFabTransition, VDialogTransition, VDialogBottomTransition, VFadeTransition, VScaleTransition, VScrollXTransition, VScrollXReverseTransition, VScrollYTransition, VScrollYReverseTransition, VSlideXTransition, VSlideXReverseTransition, VSlideYTransition, VSlideYReverseTransition, VExpandTransition, VExpandXTransition */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _VApp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VApp */ "./src/components/VApp/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VApp", function() { return _VApp__WEBPACK_IMPORTED_MODULE_0__["VApp"]; });
-
-/* harmony import */ var _VAppBar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VAppBar */ "./src/components/VAppBar/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAppBar", function() { return _VAppBar__WEBPACK_IMPORTED_MODULE_1__["VAppBar"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAppBarNavIcon", function() { return _VAppBar__WEBPACK_IMPORTED_MODULE_1__["VAppBarNavIcon"]; });
-
-/* harmony import */ var _VAlert__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VAlert */ "./src/components/VAlert/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAlert", function() { return _VAlert__WEBPACK_IMPORTED_MODULE_2__["VAlert"]; });
-
-/* harmony import */ var _VAutocomplete__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./VAutocomplete */ "./src/components/VAutocomplete/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAutocomplete", function() { return _VAutocomplete__WEBPACK_IMPORTED_MODULE_3__["VAutocomplete"]; });
-
-/* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./VAvatar */ "./src/components/VAvatar/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VAvatar", function() { return _VAvatar__WEBPACK_IMPORTED_MODULE_4__["VAvatar"]; });
-
-/* harmony import */ var _VBadge__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./VBadge */ "./src/components/VBadge/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBadge", function() { return _VBadge__WEBPACK_IMPORTED_MODULE_5__["VBadge"]; });
-
-/* harmony import */ var _VBanner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./VBanner */ "./src/components/VBanner/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBanner", function() { return _VBanner__WEBPACK_IMPORTED_MODULE_6__["VBanner"]; });
-
-/* harmony import */ var _VBottomNavigation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./VBottomNavigation */ "./src/components/VBottomNavigation/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBottomNavigation", function() { return _VBottomNavigation__WEBPACK_IMPORTED_MODULE_7__["VBottomNavigation"]; });
-
-/* harmony import */ var _VBottomSheet__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./VBottomSheet */ "./src/components/VBottomSheet/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBottomSheet", function() { return _VBottomSheet__WEBPACK_IMPORTED_MODULE_8__["VBottomSheet"]; });
-
-/* harmony import */ var _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./VBreadcrumbs */ "./src/components/VBreadcrumbs/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBreadcrumbs", function() { return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__["VBreadcrumbs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBreadcrumbsItem", function() { return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__["VBreadcrumbsItem"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBreadcrumbsDivider", function() { return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__["VBreadcrumbsDivider"]; });
-
-/* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./VBtn */ "./src/components/VBtn/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBtn", function() { return _VBtn__WEBPACK_IMPORTED_MODULE_10__["VBtn"]; });
-
-/* harmony import */ var _VBtnToggle__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./VBtnToggle */ "./src/components/VBtnToggle/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VBtnToggle", function() { return _VBtnToggle__WEBPACK_IMPORTED_MODULE_11__["VBtnToggle"]; });
-
-/* harmony import */ var _VCalendar__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./VCalendar */ "./src/components/VCalendar/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendar", function() { return _VCalendar__WEBPACK_IMPORTED_MODULE_12__["VCalendar"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarCategory", function() { return _VCalendar__WEBPACK_IMPORTED_MODULE_12__["VCalendarCategory"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarDaily", function() { return _VCalendar__WEBPACK_IMPORTED_MODULE_12__["VCalendarDaily"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarWeekly", function() { return _VCalendar__WEBPACK_IMPORTED_MODULE_12__["VCalendarWeekly"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCalendarMonthly", function() { return _VCalendar__WEBPACK_IMPORTED_MODULE_12__["VCalendarMonthly"]; });
-
-/* harmony import */ var _VCard__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./VCard */ "./src/components/VCard/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCard", function() { return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCard"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCardActions", function() { return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardActions"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCardSubtitle", function() { return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardSubtitle"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCardText", function() { return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardText"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCardTitle", function() { return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardTitle"]; });
-
-/* harmony import */ var _VCarousel__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./VCarousel */ "./src/components/VCarousel/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCarousel", function() { return _VCarousel__WEBPACK_IMPORTED_MODULE_14__["VCarousel"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCarouselItem", function() { return _VCarousel__WEBPACK_IMPORTED_MODULE_14__["VCarouselItem"]; });
-
-/* harmony import */ var _VCheckbox__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./VCheckbox */ "./src/components/VCheckbox/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCheckbox", function() { return _VCheckbox__WEBPACK_IMPORTED_MODULE_15__["VCheckbox"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSimpleCheckbox", function() { return _VCheckbox__WEBPACK_IMPORTED_MODULE_15__["VSimpleCheckbox"]; });
-
-/* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./VChip */ "./src/components/VChip/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VChip", function() { return _VChip__WEBPACK_IMPORTED_MODULE_16__["VChip"]; });
-
-/* harmony import */ var _VChipGroup__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./VChipGroup */ "./src/components/VChipGroup/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VChipGroup", function() { return _VChipGroup__WEBPACK_IMPORTED_MODULE_17__["VChipGroup"]; });
-
-/* harmony import */ var _VColorPicker__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./VColorPicker */ "./src/components/VColorPicker/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VColorPicker", function() { return _VColorPicker__WEBPACK_IMPORTED_MODULE_18__["VColorPicker"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VColorPickerSwatches", function() { return _VColorPicker__WEBPACK_IMPORTED_MODULE_18__["VColorPickerSwatches"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VColorPickerCanvas", function() { return _VColorPicker__WEBPACK_IMPORTED_MODULE_18__["VColorPickerCanvas"]; });
-
-/* harmony import */ var _VContent__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./VContent */ "./src/components/VContent/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VContent", function() { return _VContent__WEBPACK_IMPORTED_MODULE_19__["VContent"]; });
-
-/* harmony import */ var _VCombobox__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./VCombobox */ "./src/components/VCombobox/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCombobox", function() { return _VCombobox__WEBPACK_IMPORTED_MODULE_20__["VCombobox"]; });
-
-/* harmony import */ var _VCounter__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./VCounter */ "./src/components/VCounter/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCounter", function() { return _VCounter__WEBPACK_IMPORTED_MODULE_21__["VCounter"]; });
-
-/* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./VData */ "./src/components/VData/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VData", function() { return _VData__WEBPACK_IMPORTED_MODULE_22__["VData"]; });
-
-/* harmony import */ var _VDataIterator__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./VDataIterator */ "./src/components/VDataIterator/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataIterator", function() { return _VDataIterator__WEBPACK_IMPORTED_MODULE_23__["VDataIterator"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataFooter", function() { return _VDataIterator__WEBPACK_IMPORTED_MODULE_23__["VDataFooter"]; });
-
-/* harmony import */ var _VDataTable__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./VDataTable */ "./src/components/VDataTable/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataTable", function() { return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VDataTable"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VEditDialog", function() { return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VEditDialog"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTableOverflow", function() { return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VTableOverflow"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDataTableHeader", function() { return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VDataTableHeader"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSimpleTable", function() { return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VSimpleTable"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VVirtualTable", function() { return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VVirtualTable"]; });
-
-/* harmony import */ var _VDatePicker__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./VDatePicker */ "./src/components/VDatePicker/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePicker", function() { return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__["VDatePicker"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerTitle", function() { return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__["VDatePickerTitle"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerHeader", function() { return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__["VDatePickerHeader"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerDateTable", function() { return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__["VDatePickerDateTable"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerMonthTable", function() { return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__["VDatePickerMonthTable"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDatePickerYears", function() { return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__["VDatePickerYears"]; });
-
-/* harmony import */ var _VDialog__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./VDialog */ "./src/components/VDialog/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDialog", function() { return _VDialog__WEBPACK_IMPORTED_MODULE_26__["VDialog"]; });
-
-/* harmony import */ var _VDivider__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./VDivider */ "./src/components/VDivider/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDivider", function() { return _VDivider__WEBPACK_IMPORTED_MODULE_27__["VDivider"]; });
-
-/* harmony import */ var _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./VExpansionPanel */ "./src/components/VExpansionPanel/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanels", function() { return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__["VExpansionPanels"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanel", function() { return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__["VExpansionPanel"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanelHeader", function() { return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__["VExpansionPanelHeader"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpansionPanelContent", function() { return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__["VExpansionPanelContent"]; });
-
-/* harmony import */ var _VFileInput__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./VFileInput */ "./src/components/VFileInput/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFileInput", function() { return _VFileInput__WEBPACK_IMPORTED_MODULE_29__["VFileInput"]; });
-
-/* harmony import */ var _VFooter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./VFooter */ "./src/components/VFooter/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFooter", function() { return _VFooter__WEBPACK_IMPORTED_MODULE_30__["VFooter"]; });
-
-/* harmony import */ var _VForm__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./VForm */ "./src/components/VForm/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VForm", function() { return _VForm__WEBPACK_IMPORTED_MODULE_31__["VForm"]; });
-
-/* harmony import */ var _VGrid__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./VGrid */ "./src/components/VGrid/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VContainer", function() { return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VContainer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCol", function() { return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VCol"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRow", function() { return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VRow"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSpacer", function() { return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VSpacer"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VLayout", function() { return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VLayout"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFlex", function() { return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VFlex"]; });
-
-/* harmony import */ var _VHover__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./VHover */ "./src/components/VHover/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VHover", function() { return _VHover__WEBPACK_IMPORTED_MODULE_33__["VHover"]; });
-
-/* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./VIcon */ "./src/components/VIcon/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VIcon", function() { return _VIcon__WEBPACK_IMPORTED_MODULE_34__["VIcon"]; });
-
-/* harmony import */ var _VImg__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./VImg */ "./src/components/VImg/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VImg", function() { return _VImg__WEBPACK_IMPORTED_MODULE_35__["VImg"]; });
-
-/* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./VInput */ "./src/components/VInput/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VInput", function() { return _VInput__WEBPACK_IMPORTED_MODULE_36__["VInput"]; });
-
-/* harmony import */ var _VItemGroup__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./VItemGroup */ "./src/components/VItemGroup/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VItem", function() { return _VItemGroup__WEBPACK_IMPORTED_MODULE_37__["VItem"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VItemGroup", function() { return _VItemGroup__WEBPACK_IMPORTED_MODULE_37__["VItemGroup"]; });
-
-/* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./VLabel */ "./src/components/VLabel/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VLabel", function() { return _VLabel__WEBPACK_IMPORTED_MODULE_38__["VLabel"]; });
-
-/* harmony import */ var _VLazy__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./VLazy */ "./src/components/VLazy/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VLazy", function() { return _VLazy__WEBPACK_IMPORTED_MODULE_39__["VLazy"]; });
-
-/* harmony import */ var _VList__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./VList */ "./src/components/VList/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemActionText", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemActionText"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemContent", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemContent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemTitle", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemTitle"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemSubtitle", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemSubtitle"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VList", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VList"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListGroup", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListGroup"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItem", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItem"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemAction", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemAction"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemAvatar", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemAvatar"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemIcon", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemIcon"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VListItemGroup", function() { return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemGroup"]; });
-
-/* harmony import */ var _VMain__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./VMain */ "./src/components/VMain/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VMain", function() { return _VMain__WEBPACK_IMPORTED_MODULE_41__["VMain"]; });
-
-/* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./VMenu */ "./src/components/VMenu/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VMenu", function() { return _VMenu__WEBPACK_IMPORTED_MODULE_42__["VMenu"]; });
-
-/* harmony import */ var _VMessages__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./VMessages */ "./src/components/VMessages/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VMessages", function() { return _VMessages__WEBPACK_IMPORTED_MODULE_43__["VMessages"]; });
-
-/* harmony import */ var _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./VNavigationDrawer */ "./src/components/VNavigationDrawer/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VNavigationDrawer", function() { return _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_44__["VNavigationDrawer"]; });
-
-/* harmony import */ var _VOverflowBtn__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./VOverflowBtn */ "./src/components/VOverflowBtn/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VOverflowBtn", function() { return _VOverflowBtn__WEBPACK_IMPORTED_MODULE_45__["VOverflowBtn"]; });
-
-/* harmony import */ var _VOverlay__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./VOverlay */ "./src/components/VOverlay/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VOverlay", function() { return _VOverlay__WEBPACK_IMPORTED_MODULE_46__["VOverlay"]; });
-
-/* harmony import */ var _VPagination__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./VPagination */ "./src/components/VPagination/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VPagination", function() { return _VPagination__WEBPACK_IMPORTED_MODULE_47__["VPagination"]; });
-
-/* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./VSheet */ "./src/components/VSheet/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSheet", function() { return _VSheet__WEBPACK_IMPORTED_MODULE_48__["VSheet"]; });
-
-/* harmony import */ var _VParallax__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./VParallax */ "./src/components/VParallax/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VParallax", function() { return _VParallax__WEBPACK_IMPORTED_MODULE_49__["VParallax"]; });
-
-/* harmony import */ var _VPicker__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./VPicker */ "./src/components/VPicker/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VPicker", function() { return _VPicker__WEBPACK_IMPORTED_MODULE_50__["VPicker"]; });
-
-/* harmony import */ var _VProgressCircular__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./VProgressCircular */ "./src/components/VProgressCircular/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VProgressCircular", function() { return _VProgressCircular__WEBPACK_IMPORTED_MODULE_51__["VProgressCircular"]; });
-
-/* harmony import */ var _VProgressLinear__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./VProgressLinear */ "./src/components/VProgressLinear/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VProgressLinear", function() { return _VProgressLinear__WEBPACK_IMPORTED_MODULE_52__["VProgressLinear"]; });
-
-/* harmony import */ var _VRadioGroup__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./VRadioGroup */ "./src/components/VRadioGroup/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRadioGroup", function() { return _VRadioGroup__WEBPACK_IMPORTED_MODULE_53__["VRadioGroup"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRadio", function() { return _VRadioGroup__WEBPACK_IMPORTED_MODULE_53__["VRadio"]; });
-
-/* harmony import */ var _VRangeSlider__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./VRangeSlider */ "./src/components/VRangeSlider/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRangeSlider", function() { return _VRangeSlider__WEBPACK_IMPORTED_MODULE_54__["VRangeSlider"]; });
-
-/* harmony import */ var _VRating__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./VRating */ "./src/components/VRating/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VRating", function() { return _VRating__WEBPACK_IMPORTED_MODULE_55__["VRating"]; });
-
-/* harmony import */ var _VResponsive__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./VResponsive */ "./src/components/VResponsive/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VResponsive", function() { return _VResponsive__WEBPACK_IMPORTED_MODULE_56__["VResponsive"]; });
-
-/* harmony import */ var _VSelect__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./VSelect */ "./src/components/VSelect/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSelect", function() { return _VSelect__WEBPACK_IMPORTED_MODULE_57__["VSelect"]; });
-
-/* harmony import */ var _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./VSkeletonLoader */ "./src/components/VSkeletonLoader/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSkeletonLoader", function() { return _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_58__["VSkeletonLoader"]; });
-
-/* harmony import */ var _VSlider__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./VSlider */ "./src/components/VSlider/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlider", function() { return _VSlider__WEBPACK_IMPORTED_MODULE_59__["VSlider"]; });
-
-/* harmony import */ var _VSlideGroup__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./VSlideGroup */ "./src/components/VSlideGroup/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideGroup", function() { return _VSlideGroup__WEBPACK_IMPORTED_MODULE_60__["VSlideGroup"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideItem", function() { return _VSlideGroup__WEBPACK_IMPORTED_MODULE_60__["VSlideItem"]; });
-
-/* harmony import */ var _VSnackbar__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./VSnackbar */ "./src/components/VSnackbar/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSnackbar", function() { return _VSnackbar__WEBPACK_IMPORTED_MODULE_61__["VSnackbar"]; });
-
-/* harmony import */ var _VSparkline__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./VSparkline */ "./src/components/VSparkline/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSparkline", function() { return _VSparkline__WEBPACK_IMPORTED_MODULE_62__["VSparkline"]; });
-
-/* harmony import */ var _VSpeedDial__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./VSpeedDial */ "./src/components/VSpeedDial/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSpeedDial", function() { return _VSpeedDial__WEBPACK_IMPORTED_MODULE_63__["VSpeedDial"]; });
-
-/* harmony import */ var _VStepper__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./VStepper */ "./src/components/VStepper/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepper", function() { return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepper"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepperContent", function() { return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepperContent"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepperStep", function() { return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepperStep"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepperHeader", function() { return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepperHeader"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VStepperItems", function() { return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepperItems"]; });
-
-/* harmony import */ var _VSubheader__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./VSubheader */ "./src/components/VSubheader/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSubheader", function() { return _VSubheader__WEBPACK_IMPORTED_MODULE_65__["VSubheader"]; });
-
-/* harmony import */ var _VSwitch__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./VSwitch */ "./src/components/VSwitch/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSwitch", function() { return _VSwitch__WEBPACK_IMPORTED_MODULE_66__["VSwitch"]; });
-
-/* harmony import */ var _VSystemBar__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./VSystemBar */ "./src/components/VSystemBar/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSystemBar", function() { return _VSystemBar__WEBPACK_IMPORTED_MODULE_67__["VSystemBar"]; });
-
-/* harmony import */ var _VTabs__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./VTabs */ "./src/components/VTabs/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabs", function() { return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabs"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTab", function() { return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTab"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabItem", function() { return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabItem"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabsItems", function() { return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabsItems"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabsSlider", function() { return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabsSlider"]; });
-
-/* harmony import */ var _VTextarea__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./VTextarea */ "./src/components/VTextarea/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTextarea", function() { return _VTextarea__WEBPACK_IMPORTED_MODULE_69__["VTextarea"]; });
-
-/* harmony import */ var _VTextField__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./VTextField */ "./src/components/VTextField/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTextField", function() { return _VTextField__WEBPACK_IMPORTED_MODULE_70__["VTextField"]; });
-
-/* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./VThemeProvider */ "./src/components/VThemeProvider/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VThemeProvider", function() { return _VThemeProvider__WEBPACK_IMPORTED_MODULE_71__["VThemeProvider"]; });
-
-/* harmony import */ var _VTimeline__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./VTimeline */ "./src/components/VTimeline/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimeline", function() { return _VTimeline__WEBPACK_IMPORTED_MODULE_72__["VTimeline"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimelineItem", function() { return _VTimeline__WEBPACK_IMPORTED_MODULE_72__["VTimelineItem"]; });
-
-/* harmony import */ var _VTimePicker__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./VTimePicker */ "./src/components/VTimePicker/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimePicker", function() { return _VTimePicker__WEBPACK_IMPORTED_MODULE_73__["VTimePicker"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimePickerClock", function() { return _VTimePicker__WEBPACK_IMPORTED_MODULE_73__["VTimePickerClock"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTimePickerTitle", function() { return _VTimePicker__WEBPACK_IMPORTED_MODULE_73__["VTimePickerTitle"]; });
-
-/* harmony import */ var _VToolbar__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./VToolbar */ "./src/components/VToolbar/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VToolbar", function() { return _VToolbar__WEBPACK_IMPORTED_MODULE_74__["VToolbar"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VToolbarItems", function() { return _VToolbar__WEBPACK_IMPORTED_MODULE_74__["VToolbarItems"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VToolbarTitle", function() { return _VToolbar__WEBPACK_IMPORTED_MODULE_74__["VToolbarTitle"]; });
-
-/* harmony import */ var _VTooltip__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./VTooltip */ "./src/components/VTooltip/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTooltip", function() { return _VTooltip__WEBPACK_IMPORTED_MODULE_75__["VTooltip"]; });
-
-/* harmony import */ var _VTreeview__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./VTreeview */ "./src/components/VTreeview/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTreeview", function() { return _VTreeview__WEBPACK_IMPORTED_MODULE_76__["VTreeview"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTreeviewNode", function() { return _VTreeview__WEBPACK_IMPORTED_MODULE_76__["VTreeviewNode"]; });
-
-/* harmony import */ var _VVirtualScroll__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./VVirtualScroll */ "./src/components/VVirtualScroll/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VVirtualScroll", function() { return _VVirtualScroll__WEBPACK_IMPORTED_MODULE_77__["VVirtualScroll"]; });
-
-/* harmony import */ var _VWindow__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./VWindow */ "./src/components/VWindow/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VWindow", function() { return _VWindow__WEBPACK_IMPORTED_MODULE_78__["VWindow"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VWindowItem", function() { return _VWindow__WEBPACK_IMPORTED_MODULE_78__["VWindowItem"]; });
-
-/* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./transitions */ "./src/components/transitions/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCarouselTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VCarouselTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VCarouselReverseTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VCarouselReverseTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VTabTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VTabReverseTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VTabReverseTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VMenuTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VMenuTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFabTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VFabTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDialogTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VDialogTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VDialogBottomTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VDialogBottomTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VFadeTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VFadeTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VScaleTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VScaleTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VScrollXTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VScrollXTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VScrollXReverseTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VScrollXReverseTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VScrollYTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VScrollYTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VScrollYReverseTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VScrollYReverseTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideXTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VSlideXTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideXReverseTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VSlideXReverseTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideYTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VSlideYTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VSlideYReverseTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VSlideYReverseTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpandTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VExpandTransition"]; });
-
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VExpandXTransition", function() { return _transitions__WEBPACK_IMPORTED_MODULE_79__["VExpandXTransition"]; });
+                return ar;
+              }; // Styles
+
+            // Extensions
+
+            // Components
+
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__["default"].extend({
+                name: "v-toolbar",
+                props: {
+                  absolute: Boolean,
+                  bottom: Boolean,
+                  collapse: Boolean,
+                  dense: Boolean,
+                  extended: Boolean,
+                  extensionHeight: {
+                    default: 48,
+                    type: [Number, String],
+                  },
+                  flat: Boolean,
+                  floating: Boolean,
+                  prominent: Boolean,
+                  short: Boolean,
+                  src: {
+                    type: [String, Object],
+                    default: "",
+                  },
+                  tag: {
+                    type: String,
+                    default: "header",
+                  },
+                },
+                data: function data() {
+                  return {
+                    isExtended: false,
+                  };
+                },
+                computed: {
+                  computedHeight: function computedHeight() {
+                    var height = this.computedContentHeight;
+                    if (!this.isExtended) return height;
+                    var extensionHeight = parseInt(this.extensionHeight);
+                    return this.isCollapsed
+                      ? height
+                      : height +
+                          (!isNaN(extensionHeight) ? extensionHeight : 0);
+                  },
+                  computedContentHeight: function computedContentHeight() {
+                    if (this.height) return parseInt(this.height);
+                    if (this.isProminent && this.dense) return 96;
+                    if (this.isProminent && this.short) return 112;
+                    if (this.isProminent) return 128;
+                    if (this.dense) return 48;
+                    if (this.short || this.$vuetify.breakpoint.smAndDown)
+                      return 56;
+                    return 64;
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VSheet_VSheet__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-toolbar": true,
+                        "v-toolbar--absolute": this.absolute,
+                        "v-toolbar--bottom": this.bottom,
+                        "v-toolbar--collapse": this.collapse,
+                        "v-toolbar--collapsed": this.isCollapsed,
+                        "v-toolbar--dense": this.dense,
+                        "v-toolbar--extended": this.isExtended,
+                        "v-toolbar--flat": this.flat,
+                        "v-toolbar--floating": this.floating,
+                        "v-toolbar--prominent": this.isProminent,
+                      }
+                    );
+                  },
+                  isCollapsed: function isCollapsed() {
+                    return this.collapse;
+                  },
+                  isProminent: function isProminent() {
+                    return this.prominent;
+                  },
+                  styles: function styles() {
+                    return __assign(__assign({}, this.measurableStyles), {
+                      height: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                          "convertToUnit"
+                        ]
+                      )(this.computedHeight),
+                    });
+                  },
+                },
+                created: function created() {
+                  var _this = this;
+
+                  var breakingProps = [
+                    ["app", "<v-app-bar app>"],
+                    ["manual-scroll", '<v-app-bar :value="false">'],
+                    ["clipped-left", "<v-app-bar clipped-left>"],
+                    ["clipped-right", "<v-app-bar clipped-right>"],
+                    ["inverted-scroll", "<v-app-bar inverted-scroll>"],
+                    ["scroll-off-screen", "<v-app-bar scroll-off-screen>"],
+                    ["scroll-target", "<v-app-bar scroll-target>"],
+                    ["scroll-threshold", "<v-app-bar scroll-threshold>"],
+                    ["card", "<v-app-bar flat>"],
+                  ];
+                  /* istanbul ignore next */
+
+                  breakingProps.forEach(function (_a) {
+                    var _b = __read(_a, 2),
+                      original = _b[0],
+                      replacement = _b[1];
+
+                    if (_this.$attrs.hasOwnProperty(original))
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_4__["breaking"]
+                      )(original, replacement, _this);
+                  });
+                },
+                methods: {
+                  genBackground: function genBackground() {
+                    var props = {
+                      height: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                          "convertToUnit"
+                        ]
+                      )(this.computedHeight),
+                      src: this.src,
+                    };
+                    var image = this.$scopedSlots.img
+                      ? this.$scopedSlots.img({
+                          props: props,
+                        })
+                      : this.$createElement(
+                          _VImg_VImg__WEBPACK_IMPORTED_MODULE_2__["default"],
+                          {
+                            props: props,
+                          }
+                        );
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-toolbar__image",
+                      },
+                      [image]
+                    );
+                  },
+                  genContent: function genContent() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-toolbar__content",
+                        style: {
+                          height: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                              "convertToUnit"
+                            ]
+                          )(this.computedContentHeight),
+                        },
+                      },
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                      )(this)
+                    );
+                  },
+                  genExtension: function genExtension() {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-toolbar__extension",
+                        style: {
+                          height: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                              "convertToUnit"
+                            ]
+                          )(this.extensionHeight),
+                        },
+                      },
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                      )(this, "extension")
+                    );
+                  },
+                },
+                render: function render(h) {
+                  this.isExtended =
+                    this.extended || !!this.$scopedSlots.extension;
+                  var children = [this.genContent()];
+                  var data = this.setBackgroundColor(this.color, {
+                    class: this.classes,
+                    style: this.styles,
+                    on: this.$listeners,
+                  });
+                  if (this.isExtended) children.push(this.genExtension());
+                  if (this.src || this.$scopedSlots.img)
+                    children.unshift(this.genBackground());
+                  return h(this.tag, data, children);
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VToolbar/index.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VToolbar/index.ts ***!
+  \******************************************/
+          /*! exports provided: VToolbar, VToolbarItems, VToolbarTitle, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VToolbarItems",
+              function () {
+                return VToolbarItems;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VToolbarTitle",
+              function () {
+                return VToolbarTitle;
+              }
+            );
+            /* harmony import */ var _VToolbar__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VToolbar */ "./src/components/VToolbar/VToolbar.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VToolbar",
+              function () {
+                return _VToolbar__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // Components
+            // Utilities
+
+            var VToolbarTitle = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                "createSimpleFunctional"
+              ]
+            )("v-toolbar__title");
+            var VToolbarItems = Object(
+              _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                "createSimpleFunctional"
+              ]
+            )("v-toolbar__items");
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VToolbar: _VToolbar__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VToolbarItems: VToolbarItems,
+                VToolbarTitle: VToolbarTitle,
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/components/VTooltip/VTooltip.sass":
+          /*!***********************************************!*\
+  !*** ./src/components/VTooltip/VTooltip.sass ***!
+  \***********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VTooltip/VTooltip.ts":
+          /*!*********************************************!*\
+  !*** ./src/components/VTooltip/VTooltip.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTooltip_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTooltip.sass */ "./src/components/VTooltip/VTooltip.sass"
+              );
+            /* harmony import */ var _VTooltip_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTooltip_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_activatable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/activatable */ "./src/mixins/activatable/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/delayable */ "./src/mixins/delayable/index.ts"
+              );
+            /* harmony import */ var _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../mixins/dependent */ "./src/mixins/dependent/index.ts"
+              );
+            /* harmony import */ var _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../mixins/detachable */ "./src/mixins/detachable/index.ts"
+              );
+            /* harmony import */ var _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../mixins/menuable */ "./src/mixins/menuable/index.ts"
+              );
+            /* harmony import */ var _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ../../mixins/toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+
+            // Helpers
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_10__["default"])(
+                _mixins_colorable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _mixins_delayable__WEBPACK_IMPORTED_MODULE_3__["default"],
+                _mixins_dependent__WEBPACK_IMPORTED_MODULE_4__["default"],
+                _mixins_detachable__WEBPACK_IMPORTED_MODULE_5__["default"],
+                _mixins_menuable__WEBPACK_IMPORTED_MODULE_6__["default"],
+                _mixins_toggleable__WEBPACK_IMPORTED_MODULE_7__["default"]
+              ).extend({
+                name: "v-tooltip",
+                props: {
+                  closeDelay: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  disabled: Boolean,
+                  fixed: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  openDelay: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  openOnHover: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  tag: {
+                    type: String,
+                    default: "span",
+                  },
+                  transition: String,
+                },
+                data: function data() {
+                  return {
+                    calculatedMinWidth: 0,
+                    closeDependents: false,
+                  };
+                },
+                computed: {
+                  calculatedLeft: function calculatedLeft() {
+                    var _a = this.dimensions,
+                      activator = _a.activator,
+                      content = _a.content;
+                    var unknown =
+                      !this.bottom && !this.left && !this.top && !this.right;
+                    var activatorLeft =
+                      this.attach !== false
+                        ? activator.offsetLeft
+                        : activator.left;
+                    var left = 0;
+
+                    if (this.top || this.bottom || unknown) {
+                      left =
+                        activatorLeft + activator.width / 2 - content.width / 2;
+                    } else if (this.left || this.right) {
+                      left =
+                        activatorLeft +
+                        (this.right ? activator.width : -content.width) +
+                        (this.right ? 10 : -10);
+                    }
+
+                    if (this.nudgeLeft) left -= parseInt(this.nudgeLeft);
+                    if (this.nudgeRight) left += parseInt(this.nudgeRight);
+                    return (
+                      this.calcXOverflow(left, this.dimensions.content.width) +
+                      "px"
+                    );
+                  },
+                  calculatedTop: function calculatedTop() {
+                    var _a = this.dimensions,
+                      activator = _a.activator,
+                      content = _a.content;
+                    var activatorTop =
+                      this.attach !== false
+                        ? activator.offsetTop
+                        : activator.top;
+                    var top = 0;
+
+                    if (this.top || this.bottom) {
+                      top =
+                        activatorTop +
+                        (this.bottom ? activator.height : -content.height) +
+                        (this.bottom ? 10 : -10);
+                    } else if (this.left || this.right) {
+                      top =
+                        activatorTop +
+                        activator.height / 2 -
+                        content.height / 2;
+                    }
+
+                    if (this.nudgeTop) top -= parseInt(this.nudgeTop);
+                    if (this.nudgeBottom) top += parseInt(this.nudgeBottom);
+                    return this.calcYOverflow(top + this.pageYOffset) + "px";
+                  },
+                  classes: function classes() {
+                    return {
+                      "v-tooltip--top": this.top,
+                      "v-tooltip--right": this.right,
+                      "v-tooltip--bottom": this.bottom,
+                      "v-tooltip--left": this.left,
+                      "v-tooltip--attached":
+                        this.attach === "" ||
+                        this.attach === true ||
+                        this.attach === "attach",
+                    };
+                  },
+                  computedTransition: function computedTransition() {
+                    if (this.transition) return this.transition;
+                    return this.isActive
+                      ? "scale-transition"
+                      : "fade-transition";
+                  },
+                  offsetY: function offsetY() {
+                    return this.top || this.bottom;
+                  },
+                  offsetX: function offsetX() {
+                    return this.left || this.right;
+                  },
+                  styles: function styles() {
+                    return {
+                      left: this.calculatedLeft,
+                      maxWidth: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                          "convertToUnit"
+                        ]
+                      )(this.maxWidth),
+                      minWidth: Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__[
+                          "convertToUnit"
+                        ]
+                      )(this.minWidth),
+                      opacity: this.isActive ? 0.9 : 0,
+                      top: this.calculatedTop,
+                      zIndex: this.zIndex || this.activeZIndex,
+                    };
+                  },
+                },
+                beforeMount: function beforeMount() {
+                  var _this = this;
+
+                  this.$nextTick(function () {
+                    _this.value && _this.callActivate();
+                  });
+                },
+                mounted: function mounted() {
+                  if (
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_8__["getSlotType"]
+                    )(this, "activator", true) === "v-slot"
+                  ) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_9__["consoleError"]
+                    )(
+                      "v-tooltip's activator slot must be bound, try '<template #activator=\"data\"><v-btn v-on=\"data.on>'",
+                      this
+                    );
+                  }
+                },
+                methods: {
+                  activate: function activate() {
+                    // Update coordinates and dimensions of menu
+                    // and its activator
+                    this.updateDimensions(); // Start the transition
+
+                    requestAnimationFrame(this.startTransition);
+                  },
+                  deactivate: function deactivate() {
+                    this.runDelay("close");
+                  },
+                  genActivatorListeners: function genActivatorListeners() {
+                    var _this = this;
+
+                    var listeners =
+                      _mixins_activatable__WEBPACK_IMPORTED_MODULE_1__[
+                        "default"
+                      ].options.methods.genActivatorListeners.call(this);
+
+                    listeners.focus = function (e) {
+                      _this.getActivator(e);
+
+                      _this.runDelay("open");
+                    };
+
+                    listeners.blur = function (e) {
+                      _this.getActivator(e);
+
+                      _this.runDelay("close");
+                    };
+
+                    listeners.keydown = function (e) {
+                      if (
+                        e.keyCode ===
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_8__["keyCodes"]
+                          .esc
+                      ) {
+                        _this.getActivator(e);
+
+                        _this.runDelay("close");
+                      }
+                    };
+
+                    return listeners;
+                  },
+                  genActivatorAttributes: function genActivatorAttributes() {
+                    return {
+                      "aria-haspopup": true,
+                      "aria-expanded": String(this.isActive),
+                    };
+                  },
+                  genTransition: function genTransition() {
+                    var content = this.genContent();
+                    if (!this.computedTransition) return content;
+                    return this.$createElement(
+                      "transition",
+                      {
+                        props: {
+                          name: this.computedTransition,
+                        },
+                      },
+                      [content]
+                    );
+                  },
+                  genContent: function genContent() {
+                    var _a;
+
+                    return this.$createElement(
+                      "div",
+                      this.setBackgroundColor(this.color, {
+                        staticClass: "v-tooltip__content",
+                        class:
+                          ((_a = {}),
+                          (_a[this.contentClass] = true),
+                          (_a.menuable__content__active = this.isActive),
+                          (_a["v-tooltip__content--fixed"] =
+                            this.activatorFixed),
+                          _a),
+                        style: this.styles,
+                        attrs: this.getScopeIdAttrs(),
+                        directives: [
+                          {
+                            name: "show",
+                            value: this.isContentActive,
+                          },
+                        ],
+                        ref: "content",
+                      }),
+                      this.getContentSlot()
+                    );
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  return h(
+                    this.tag,
+                    {
+                      staticClass: "v-tooltip",
+                      class: this.classes,
+                    },
+                    [
+                      this.showLazyContent(function () {
+                        return [_this.genTransition()];
+                      }),
+                      this.genActivator(),
+                    ]
+                  );
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VTooltip/index.ts":
+          /*!******************************************!*\
+  !*** ./src/components/VTooltip/index.ts ***!
+  \******************************************/
+          /*! exports provided: VTooltip, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTooltip__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTooltip */ "./src/components/VTooltip/VTooltip.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTooltip",
+              function () {
+                return _VTooltip__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VTooltip__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VTreeview/VTreeview.sass":
+          /*!*************************************************!*\
+  !*** ./src/components/VTreeview/VTreeview.sass ***!
+  \*************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VTreeview/VTreeview.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VTreeview/VTreeview.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTreeview_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTreeview.sass */ "./src/components/VTreeview/VTreeview.sass"
+              );
+            /* harmony import */ var _VTreeview_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VTreeview_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VTreeviewNode */ "./src/components/VTreeview/VTreeviewNode.ts"
+              );
+            /* harmony import */ var _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_filterTreeItems__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ./util/filterTreeItems */ "./src/components/VTreeview/util/filterTreeItems.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
+                return ar;
+              };
 
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              }; // Styles
+
+            // Components
+
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(
+                Object(
+                  _mixins_registrable__WEBPACK_IMPORTED_MODULE_3__["provide"]
+                )("treeview"),
+                _mixins_themeable__WEBPACK_IMPORTED_MODULE_2__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "v-treeview",
+                provide: function provide() {
+                  return {
+                    treeview: this,
+                  };
+                },
+                props: __assign(
+                  {
+                    active: {
+                      type: Array,
+                      default: function _default() {
+                        return [];
+                      },
+                    },
+                    dense: Boolean,
+                    filter: Function,
+                    hoverable: Boolean,
+                    items: {
+                      type: Array,
+                      default: function _default() {
+                        return [];
+                      },
+                    },
+                    multipleActive: Boolean,
+                    open: {
+                      type: Array,
+                      default: function _default() {
+                        return [];
+                      },
+                    },
+                    openAll: Boolean,
+                    returnObject: {
+                      type: Boolean,
+                      default: false,
+                    },
+                    search: String,
+                    value: {
+                      type: Array,
+                      default: function _default() {
+                        return [];
+                      },
+                    },
+                  },
+                  _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__[
+                    "VTreeviewNodeProps"
+                  ]
+                ),
+                data: function data() {
+                  return {
+                    level: -1,
+                    activeCache: new Set(),
+                    nodes: {},
+                    openCache: new Set(),
+                    selectedCache: new Set(),
+                  };
+                },
+                computed: {
+                  excludedItems: function excludedItems() {
+                    var excluded = new Set();
+                    if (!this.search) return excluded;
+
+                    for (var i = 0; i < this.items.length; i++) {
+                      Object(
+                        _util_filterTreeItems__WEBPACK_IMPORTED_MODULE_7__[
+                          "filterTreeItems"
+                        ]
+                      )(
+                        this.filter ||
+                          _util_filterTreeItems__WEBPACK_IMPORTED_MODULE_7__[
+                            "filterTreeItem"
+                          ],
+                        this.items[i],
+                        this.search,
+                        this.itemKey,
+                        this.itemText,
+                        this.itemChildren,
+                        excluded
+                      );
+                    }
+
+                    return excluded;
+                  },
+                },
+                watch: {
+                  items: {
+                    handler: function handler() {
+                      var _this = this;
+
+                      var oldKeys = Object.keys(this.nodes).map(function (k) {
+                        return Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "getObjectValueByPath"
+                          ]
+                        )(_this.nodes[k].item, _this.itemKey);
+                      });
+                      var newKeys = this.getKeys(this.items);
+                      var diff = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["arrayDiff"]
+                      )(newKeys, oldKeys); // We only want to do stuff if items have changed
+
+                      if (!diff.length && newKeys.length < oldKeys.length)
+                        return; // If nodes are removed we need to clear them from this.nodes
+
+                      diff.forEach(function (k) {
+                        return delete _this.nodes[k];
+                      });
+
+                      var oldSelectedCache = __spread(this.selectedCache);
+
+                      this.selectedCache = new Set();
+                      this.activeCache = new Set();
+                      this.openCache = new Set();
+                      this.buildTree(this.items); // Only emit selected if selection has changed
+                      // as a result of items changing. This fixes a
+                      // potential double emit when selecting a node
+                      // with dynamic children
+
+                      if (
+                        !Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "deepEqual"
+                          ]
+                        )(oldSelectedCache, __spread(this.selectedCache))
+                      )
+                        this.emitSelected();
+                    },
+                    deep: true,
+                  },
+                  active: function active(value) {
+                    this.handleNodeCacheWatcher(
+                      value,
+                      this.activeCache,
+                      this.updateActive,
+                      this.emitActive
+                    );
+                  },
+                  value: function value(_value) {
+                    this.handleNodeCacheWatcher(
+                      _value,
+                      this.selectedCache,
+                      this.updateSelected,
+                      this.emitSelected
+                    );
+                  },
+                  open: function open(value) {
+                    this.handleNodeCacheWatcher(
+                      value,
+                      this.openCache,
+                      this.updateOpen,
+                      this.emitOpen
+                    );
+                  },
+                },
+                created: function created() {
+                  var e_1, _a, e_2, _b;
+
+                  var _this = this;
+
+                  var getValue = function getValue(key) {
+                    return _this.returnObject
+                      ? Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "getObjectValueByPath"
+                          ]
+                        )(key, _this.itemKey)
+                      : key;
+                  };
+
+                  this.buildTree(this.items);
+
+                  try {
+                    for (
+                      var _c = __values(this.value.map(getValue)),
+                        _d = _c.next();
+                      !_d.done;
+                      _d = _c.next()
+                    ) {
+                      var value = _d.value;
+                      this.updateSelected(value, true, true);
+                    }
+                  } catch (e_1_1) {
+                    e_1 = {
+                      error: e_1_1,
+                    };
+                  } finally {
+                    try {
+                      if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
+                    } finally {
+                      if (e_1) throw e_1.error;
+                    }
+                  }
 
+                  try {
+                    for (
+                      var _e = __values(this.active.map(getValue)),
+                        _f = _e.next();
+                      !_f.done;
+                      _f = _e.next()
+                    ) {
+                      var active = _f.value;
+                      this.updateActive(active, true);
+                    }
+                  } catch (e_2_1) {
+                    e_2 = {
+                      error: e_2_1,
+                    };
+                  } finally {
+                    try {
+                      if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
+                    } finally {
+                      if (e_2) throw e_2.error;
+                    }
+                  }
+                },
+                mounted: function mounted() {
+                  var _this = this; // Save the developer from themselves
+
+                  if (this.$slots.prepend || this.$slots.append) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_6__["consoleWarn"]
+                    )(
+                      "The prepend and append slots require a slot-scope attribute",
+                      this
+                    );
+                  }
 
+                  if (this.openAll) {
+                    this.updateAll(true);
+                  } else {
+                    this.open.forEach(function (key) {
+                      return _this.updateOpen(
+                        _this.returnObject
+                          ? Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                                "getObjectValueByPath"
+                              ]
+                            )(key, _this.itemKey)
+                          : key,
+                        true
+                      );
+                    });
+                    this.emitOpen();
+                  }
+                },
+                methods: {
+                  /** @public */
+                  updateAll: function updateAll(value) {
+                    var _this = this;
+
+                    Object.keys(this.nodes).forEach(function (key) {
+                      return _this.updateOpen(
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                            "getObjectValueByPath"
+                          ]
+                        )(_this.nodes[key].item, _this.itemKey),
+                        value
+                      );
+                    });
+                    this.emitOpen();
+                  },
+                  getKeys: function getKeys(items, keys) {
+                    if (keys === void 0) {
+                      keys = [];
+                    }
+
+                    for (var i = 0; i < items.length; i++) {
+                      var key = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                          "getObjectValueByPath"
+                        ]
+                      )(items[i], this.itemKey);
+                      keys.push(key);
+                      var children = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                          "getObjectValueByPath"
+                        ]
+                      )(items[i], this.itemChildren);
+
+                      if (children) {
+                        keys.push.apply(keys, __spread(this.getKeys(children)));
+                      }
+                    }
+
+                    return keys;
+                  },
+                  buildTree: function buildTree(items, parent) {
+                    var _this = this;
+
+                    if (parent === void 0) {
+                      parent = null;
+                    }
+
+                    for (var i = 0; i < items.length; i++) {
+                      var item = items[i];
+                      var key = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                          "getObjectValueByPath"
+                        ]
+                      )(item, this.itemKey);
+                      var children = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                          "getObjectValueByPath"
+                        ]
+                      )(item, this.itemChildren, []);
+                      var oldNode = this.nodes.hasOwnProperty(key)
+                        ? this.nodes[key]
+                        : {
+                            isSelected: false,
+                            isIndeterminate: false,
+                            isActive: false,
+                            isOpen: false,
+                            vnode: null,
+                          };
+                      var node = {
+                        vnode: oldNode.vnode,
+                        parent: parent,
+                        children: children.map(function (c) {
+                          return Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                              "getObjectValueByPath"
+                            ]
+                          )(c, _this.itemKey);
+                        }),
+                        item: item,
+                      };
+                      this.buildTree(children, key); // This fixed bug with dynamic children resetting selected parent state
+
+                      if (
+                        !this.nodes.hasOwnProperty(key) &&
+                        parent !== null &&
+                        this.nodes.hasOwnProperty(parent)
+                      ) {
+                        node.isSelected = this.nodes[parent].isSelected;
+                      } else {
+                        node.isSelected = oldNode.isSelected;
+                        node.isIndeterminate = oldNode.isIndeterminate;
+                      }
+
+                      node.isActive = oldNode.isActive;
+                      node.isOpen = oldNode.isOpen;
+                      this.nodes[key] = node;
+
+                      if (children.length) {
+                        var _a = this.calculateState(key, this.nodes),
+                          isSelected = _a.isSelected,
+                          isIndeterminate = _a.isIndeterminate;
+
+                        node.isSelected = isSelected;
+                        node.isIndeterminate = isIndeterminate;
+                      } // Don't forget to rebuild cache
+
+                      if (
+                        this.nodes[key].isSelected &&
+                        (this.selectionType === "independent" ||
+                          node.children.length === 0)
+                      )
+                        this.selectedCache.add(key);
+                      if (this.nodes[key].isActive) this.activeCache.add(key);
+                      if (this.nodes[key].isOpen) this.openCache.add(key);
+                      this.updateVnodeState(key);
+                    }
+                  },
+                  calculateState: function calculateState(node, state) {
+                    var children = state[node].children;
+                    var counts = children.reduce(
+                      function (counts, child) {
+                        counts[0] += +Boolean(state[child].isSelected);
+                        counts[1] += +Boolean(state[child].isIndeterminate);
+                        return counts;
+                      },
+                      [0, 0]
+                    );
+                    var isSelected =
+                      !!children.length && counts[0] === children.length;
+                    var isIndeterminate =
+                      !isSelected && (counts[0] > 0 || counts[1] > 0);
+                    return {
+                      isSelected: isSelected,
+                      isIndeterminate: isIndeterminate,
+                    };
+                  },
+                  emitOpen: function emitOpen() {
+                    this.emitNodeCache("update:open", this.openCache);
+                  },
+                  emitSelected: function emitSelected() {
+                    this.emitNodeCache("input", this.selectedCache);
+                  },
+                  emitActive: function emitActive() {
+                    this.emitNodeCache("update:active", this.activeCache);
+                  },
+                  emitNodeCache: function emitNodeCache(event, cache) {
+                    var _this = this;
+
+                    this.$emit(
+                      event,
+                      this.returnObject
+                        ? __spread(cache).map(function (key) {
+                            return _this.nodes[key].item;
+                          })
+                        : __spread(cache)
+                    );
+                  },
+                  handleNodeCacheWatcher: function handleNodeCacheWatcher(
+                    value,
+                    cache,
+                    updateFn,
+                    emitFn
+                  ) {
+                    var _this = this;
+
+                    value = this.returnObject
+                      ? value.map(function (v) {
+                          return Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                              "getObjectValueByPath"
+                            ]
+                          )(v, _this.itemKey);
+                        })
+                      : value;
+
+                    var old = __spread(cache);
+
+                    if (
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_4__["deepEqual"]
+                      )(old, value)
+                    )
+                      return;
+                    old.forEach(function (key) {
+                      return updateFn(key, false);
+                    });
+                    value.forEach(function (key) {
+                      return updateFn(key, true);
+                    });
+                    emitFn();
+                  },
+                  getDescendants: function getDescendants(key, descendants) {
+                    if (descendants === void 0) {
+                      descendants = [];
+                    }
+
+                    var children = this.nodes[key].children;
+                    descendants.push.apply(descendants, __spread(children));
+
+                    for (var i = 0; i < children.length; i++) {
+                      descendants = this.getDescendants(
+                        children[i],
+                        descendants
+                      );
+                    }
+
+                    return descendants;
+                  },
+                  getParents: function getParents(key) {
+                    var parent = this.nodes[key].parent;
+                    var parents = [];
+
+                    while (parent !== null) {
+                      parents.push(parent);
+                      parent = this.nodes[parent].parent;
+                    }
+
+                    return parents;
+                  },
+                  register: function register(node) {
+                    var key = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "getObjectValueByPath"
+                      ]
+                    )(node.item, this.itemKey);
+                    this.nodes[key].vnode = node;
+                    this.updateVnodeState(key);
+                  },
+                  unregister: function unregister(node) {
+                    var key = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "getObjectValueByPath"
+                      ]
+                    )(node.item, this.itemKey);
+                    if (this.nodes[key]) this.nodes[key].vnode = null;
+                  },
+                  isParent: function isParent(key) {
+                    return (
+                      this.nodes[key].children &&
+                      this.nodes[key].children.length
+                    );
+                  },
+                  updateActive: function updateActive(key, isActive) {
+                    var _this = this;
+
+                    if (!this.nodes.hasOwnProperty(key)) return;
+
+                    if (!this.multipleActive) {
+                      this.activeCache.forEach(function (active) {
+                        _this.nodes[active].isActive = false;
+
+                        _this.updateVnodeState(active);
+
+                        _this.activeCache.delete(active);
+                      });
+                    }
+
+                    var node = this.nodes[key];
+                    if (!node) return;
+                    if (isActive) this.activeCache.add(key);
+                    else this.activeCache.delete(key);
+                    node.isActive = isActive;
+                    this.updateVnodeState(key);
+                  },
+                  updateSelected: function updateSelected(
+                    key,
+                    isSelected,
+                    isForced
+                  ) {
+                    var e_3, _a, e_4, _b, e_5, _c;
+
+                    if (isForced === void 0) {
+                      isForced = false;
+                    }
+
+                    if (!this.nodes.hasOwnProperty(key)) return;
+                    var changed = new Map();
+
+                    if (this.selectionType !== "independent") {
+                      try {
+                        for (
+                          var _d = __values(this.getDescendants(key)),
+                            _e = _d.next();
+                          !_e.done;
+                          _e = _d.next()
+                        ) {
+                          var descendant = _e.value;
+
+                          if (
+                            !Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                                "getObjectValueByPath"
+                              ]
+                            )(this.nodes[descendant].item, this.itemDisabled) ||
+                            isForced
+                          ) {
+                            this.nodes[descendant].isSelected = isSelected;
+                            this.nodes[descendant].isIndeterminate = false;
+                            changed.set(descendant, isSelected);
+                          }
+                        }
+                      } catch (e_3_1) {
+                        e_3 = {
+                          error: e_3_1,
+                        };
+                      } finally {
+                        try {
+                          if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
+                        } finally {
+                          if (e_3) throw e_3.error;
+                        }
+                      }
+
+                      var calculated = this.calculateState(key, this.nodes);
+                      this.nodes[key].isSelected = isSelected;
+                      this.nodes[key].isIndeterminate =
+                        calculated.isIndeterminate;
+                      changed.set(key, isSelected);
+
+                      try {
+                        for (
+                          var _f = __values(this.getParents(key)),
+                            _g = _f.next();
+                          !_g.done;
+                          _g = _f.next()
+                        ) {
+                          var parent = _g.value;
+                          var calculated_1 = this.calculateState(
+                            parent,
+                            this.nodes
+                          );
+                          this.nodes[parent].isSelected =
+                            calculated_1.isSelected;
+                          this.nodes[parent].isIndeterminate =
+                            calculated_1.isIndeterminate;
+                          changed.set(parent, calculated_1.isSelected);
+                        }
+                      } catch (e_4_1) {
+                        e_4 = {
+                          error: e_4_1,
+                        };
+                      } finally {
+                        try {
+                          if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
+                        } finally {
+                          if (e_4) throw e_4.error;
+                        }
+                      }
+                    } else {
+                      this.nodes[key].isSelected = isSelected;
+                      this.nodes[key].isIndeterminate = false;
+                      changed.set(key, isSelected);
+                    }
+
+                    try {
+                      for (
+                        var _h = __values(changed.entries()), _j = _h.next();
+                        !_j.done;
+                        _j = _h.next()
+                      ) {
+                        var _k = __read(_j.value, 2),
+                          key_1 = _k[0],
+                          value = _k[1];
+
+                        this.updateVnodeState(key_1);
+                        if (
+                          this.selectionType === "leaf" &&
+                          this.isParent(key_1)
+                        )
+                          continue;
+                        value === true
+                          ? this.selectedCache.add(key_1)
+                          : this.selectedCache.delete(key_1);
+                      }
+                    } catch (e_5_1) {
+                      e_5 = {
+                        error: e_5_1,
+                      };
+                    } finally {
+                      try {
+                        if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
+                      } finally {
+                        if (e_5) throw e_5.error;
+                      }
+                    }
+                  },
+                  updateOpen: function updateOpen(key, isOpen) {
+                    var _this = this;
+
+                    if (!this.nodes.hasOwnProperty(key)) return;
+                    var node = this.nodes[key];
+                    var children = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "getObjectValueByPath"
+                      ]
+                    )(node.item, this.itemChildren);
+
+                    if (
+                      children &&
+                      !children.length &&
+                      node.vnode &&
+                      !node.vnode.hasLoaded
+                    ) {
+                      node.vnode.checkChildren().then(function () {
+                        return _this.updateOpen(key, isOpen);
+                      });
+                    } else if (children && children.length) {
+                      node.isOpen = isOpen;
+                      node.isOpen
+                        ? this.openCache.add(key)
+                        : this.openCache.delete(key);
+                      this.updateVnodeState(key);
+                    }
+                  },
+                  updateVnodeState: function updateVnodeState(key) {
+                    var node = this.nodes[key];
+
+                    if (node && node.vnode) {
+                      node.vnode.isSelected = node.isSelected;
+                      node.vnode.isIndeterminate = node.isIndeterminate;
+                      node.vnode.isActive = node.isActive;
+                      node.vnode.isOpen = node.isOpen;
+                    }
+                  },
+                  isExcluded: function isExcluded(key) {
+                    return !!this.search && this.excludedItems.has(key);
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var children = this.items.length
+                    ? this.items
+                        .filter(function (item) {
+                          return !_this.isExcluded(
+                            Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                                "getObjectValueByPath"
+                              ]
+                            )(item, _this.itemKey)
+                          );
+                        })
+                        .map(function (item) {
+                          var genChild =
+                            _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__[
+                              "default"
+                            ].options.methods.genChild.bind(_this);
+                          return genChild(
+                            item,
+                            Object(
+                              _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                                "getObjectValueByPath"
+                              ]
+                            )(item, _this.itemDisabled)
+                          );
+                        })
+                    : /* istanbul ignore next */
+                      this.$slots.default; // TODO: remove type annotation with TS 3.2
+
+                  return h(
+                    "div",
+                    {
+                      staticClass: "v-treeview",
+                      class: __assign(
+                        {
+                          "v-treeview--hoverable": this.hoverable,
+                          "v-treeview--dense": this.dense,
+                        },
+                        this.themeClasses
+                      ),
+                    },
+                    children
+                  );
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VTreeview/VTreeviewNode.ts":
+          /*!***************************************************!*\
+  !*** ./src/components/VTreeview/VTreeviewNode.ts ***!
+  \***************************************************/
+          /*! exports provided: VTreeviewNodeProps, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTreeviewNodeProps",
+              function () {
+                return VTreeviewNodeProps;
+              }
+            );
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../mixins/colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
+                return ar;
+              }; // Components
+
+            // Mixins
+
+            // Utils
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"]
+            )(
+              _mixins_colorable__WEBPACK_IMPORTED_MODULE_3__["default"],
+              Object(
+                _mixins_registrable__WEBPACK_IMPORTED_MODULE_2__["inject"]
+              )("treeview")
+            );
+            var VTreeviewNodeProps = {
+              activatable: Boolean,
+              activeClass: {
+                type: String,
+                default: "v-treeview-node--active",
+              },
+              color: {
+                type: String,
+                default: "primary",
+              },
+              expandIcon: {
+                type: String,
+                default: "$subgroup",
+              },
+              indeterminateIcon: {
+                type: String,
+                default: "$checkboxIndeterminate",
+              },
+              itemChildren: {
+                type: String,
+                default: "children",
+              },
+              itemDisabled: {
+                type: String,
+                default: "disabled",
+              },
+              itemKey: {
+                type: String,
+                default: "id",
+              },
+              itemText: {
+                type: String,
+                default: "name",
+              },
+              loadChildren: Function,
+              loadingIcon: {
+                type: String,
+                default: "$loading",
+              },
+              offIcon: {
+                type: String,
+                default: "$checkboxOff",
+              },
+              onIcon: {
+                type: String,
+                default: "$checkboxOn",
+              },
+              openOnClick: Boolean,
+              rounded: Boolean,
+              selectable: Boolean,
+              selectedColor: {
+                type: String,
+                default: "accent",
+              },
+              shaped: Boolean,
+              transition: Boolean,
+              selectionType: {
+                type: String,
+                default: "leaf",
+                validator: function validator(v) {
+                  return ["leaf", "independent"].includes(v);
+                },
+              },
+            };
+            /* @vue/component */
+
+            var VTreeviewNode = baseMixins.extend().extend({
+              name: "v-treeview-node",
+              inject: {
+                treeview: {
+                  default: null,
+                },
+              },
+              props: __assign(
+                {
+                  level: Number,
+                  item: {
+                    type: Object,
+                    default: function _default() {
+                      return null;
+                    },
+                  },
+                  parentIsDisabled: Boolean,
+                },
+                VTreeviewNodeProps
+              ),
+              data: function data() {
+                return {
+                  hasLoaded: false,
+                  isActive: false,
+                  isIndeterminate: false,
+                  isLoading: false,
+                  isOpen: false,
+                  isSelected: false,
+                };
+              },
+              computed: {
+                disabled: function disabled() {
+                  return (
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                        "getObjectValueByPath"
+                      ]
+                    )(this.item, this.itemDisabled) ||
+                    (this.parentIsDisabled && this.selectionType === "leaf")
+                  );
+                },
+                key: function key() {
+                  return Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                      "getObjectValueByPath"
+                    ]
+                  )(this.item, this.itemKey);
+                },
+                children: function children() {
+                  var _this = this;
+
+                  var children = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                      "getObjectValueByPath"
+                    ]
+                  )(this.item, this.itemChildren);
+                  return (
+                    children &&
+                    children.filter(function (child) {
+                      return !_this.treeview.isExcluded(
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                            "getObjectValueByPath"
+                          ]
+                        )(child, _this.itemKey)
+                      );
+                    })
+                  );
+                },
+                text: function text() {
+                  return Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                      "getObjectValueByPath"
+                    ]
+                  )(this.item, this.itemText);
+                },
+                scopedProps: function scopedProps() {
+                  return {
+                    item: this.item,
+                    leaf: !this.children,
+                    selected: this.isSelected,
+                    indeterminate: this.isIndeterminate,
+                    active: this.isActive,
+                    open: this.isOpen,
+                  };
+                },
+                computedIcon: function computedIcon() {
+                  if (this.isIndeterminate) return this.indeterminateIcon;
+                  else if (this.isSelected) return this.onIcon;
+                  else return this.offIcon;
+                },
+                hasChildren: function hasChildren() {
+                  return (
+                    !!this.children &&
+                    (!!this.children.length || !!this.loadChildren)
+                  );
+                },
+              },
+              created: function created() {
+                this.treeview.register(this);
+              },
+              beforeDestroy: function beforeDestroy() {
+                this.treeview.unregister(this);
+              },
+              methods: {
+                checkChildren: function checkChildren() {
+                  var _this = this;
+
+                  return new Promise(function (resolve) {
+                    // TODO: Potential issue with always trying
+                    // to load children if response is empty?
+                    if (
+                      !_this.children ||
+                      _this.children.length ||
+                      !_this.loadChildren ||
+                      _this.hasLoaded
+                    )
+                      return resolve();
+                    _this.isLoading = true;
+                    resolve(_this.loadChildren(_this.item));
+                  }).then(function () {
+                    _this.isLoading = false;
+                    _this.hasLoaded = true;
+                  });
+                },
+                open: function open() {
+                  this.isOpen = !this.isOpen;
+                  this.treeview.updateOpen(this.key, this.isOpen);
+                  this.treeview.emitOpen();
+                },
+                genLabel: function genLabel() {
+                  var children = [];
+                  if (this.$scopedSlots.label)
+                    children.push(this.$scopedSlots.label(this.scopedProps));
+                  else children.push(this.text);
+                  return this.$createElement(
+                    "div",
+                    {
+                      slot: "label",
+                      staticClass: "v-treeview-node__label",
+                    },
+                    children
+                  );
+                },
+                genPrependSlot: function genPrependSlot() {
+                  if (!this.$scopedSlots.prepend) return null;
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-treeview-node__prepend",
+                    },
+                    this.$scopedSlots.prepend(this.scopedProps)
+                  );
+                },
+                genAppendSlot: function genAppendSlot() {
+                  if (!this.$scopedSlots.append) return null;
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-treeview-node__append",
+                    },
+                    this.$scopedSlots.append(this.scopedProps)
+                  );
+                },
+                genContent: function genContent() {
+                  var children = [
+                    this.genPrependSlot(),
+                    this.genLabel(),
+                    this.genAppendSlot(),
+                  ];
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-treeview-node__content",
+                    },
+                    children
+                  );
+                },
+                genToggle: function genToggle() {
+                  var _this = this;
+
+                  return this.$createElement(
+                    _VIcon__WEBPACK_IMPORTED_MODULE_1__["VIcon"],
+                    {
+                      staticClass: "v-treeview-node__toggle",
+                      class: {
+                        "v-treeview-node__toggle--open": this.isOpen,
+                        "v-treeview-node__toggle--loading": this.isLoading,
+                      },
+                      slot: "prepend",
+                      on: {
+                        click: function click(e) {
+                          e.stopPropagation();
+                          if (_this.isLoading) return;
+
+                          _this.checkChildren().then(function () {
+                            return _this.open();
+                          });
+                        },
+                      },
+                    },
+                    [this.isLoading ? this.loadingIcon : this.expandIcon]
+                  );
+                },
+                genCheckbox: function genCheckbox() {
+                  var _this = this;
+
+                  return this.$createElement(
+                    _VIcon__WEBPACK_IMPORTED_MODULE_1__["VIcon"],
+                    {
+                      staticClass: "v-treeview-node__checkbox",
+                      props: {
+                        color:
+                          this.isSelected || this.isIndeterminate
+                            ? this.selectedColor
+                            : undefined,
+                        disabled: this.disabled,
+                      },
+                      on: {
+                        click: function click(e) {
+                          e.stopPropagation();
+                          if (_this.isLoading) return;
+
+                          _this.checkChildren().then(function () {
+                            // We nextTick here so that items watch in VTreeview has a chance to run first
+                            _this.$nextTick(function () {
+                              _this.isSelected = !_this.isSelected;
+                              _this.isIndeterminate = false;
+
+                              _this.treeview.updateSelected(
+                                _this.key,
+                                _this.isSelected
+                              );
+
+                              _this.treeview.emitSelected();
+                            });
+                          });
+                        },
+                      },
+                    },
+                    [this.computedIcon]
+                  );
+                },
+                genLevel: function genLevel(level) {
+                  var _this = this;
+
+                  return Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_5__["createRange"]
+                  )(level).map(function () {
+                    return _this.$createElement("div", {
+                      staticClass: "v-treeview-node__level",
+                    });
+                  });
+                },
+                genNode: function genNode() {
+                  var _a;
+
+                  var _this = this;
+
+                  var children = [this.genContent()];
+                  if (this.selectable) children.unshift(this.genCheckbox());
+
+                  if (this.hasChildren) {
+                    children.unshift(this.genToggle());
+                  } else {
+                    children.unshift.apply(
+                      children,
+                      __spread(this.genLevel(1))
+                    );
+                  }
 
+                  children.unshift.apply(
+                    children,
+                    __spread(this.genLevel(this.level))
+                  );
+                  return this.$createElement(
+                    "div",
+                    this.setTextColor(this.isActive && this.color, {
+                      staticClass: "v-treeview-node__root",
+                      class:
+                        ((_a = {}), (_a[this.activeClass] = this.isActive), _a),
+                      on: {
+                        click: function click() {
+                          if (_this.openOnClick && _this.hasChildren) {
+                            _this.checkChildren().then(_this.open);
+                          } else if (_this.activatable && !_this.disabled) {
+                            _this.isActive = !_this.isActive;
+
+                            _this.treeview.updateActive(
+                              _this.key,
+                              _this.isActive
+                            );
+
+                            _this.treeview.emitActive();
+                          }
+                        },
+                      },
+                    }),
+                    children
+                  );
+                },
+                genChild: function genChild(item, parentIsDisabled) {
+                  return this.$createElement(VTreeviewNode, {
+                    key: Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_5__[
+                        "getObjectValueByPath"
+                      ]
+                    )(item, this.itemKey),
+                    props: {
+                      activatable: this.activatable,
+                      activeClass: this.activeClass,
+                      item: item,
+                      selectable: this.selectable,
+                      selectedColor: this.selectedColor,
+                      color: this.color,
+                      expandIcon: this.expandIcon,
+                      indeterminateIcon: this.indeterminateIcon,
+                      offIcon: this.offIcon,
+                      onIcon: this.onIcon,
+                      loadingIcon: this.loadingIcon,
+                      itemKey: this.itemKey,
+                      itemText: this.itemText,
+                      itemDisabled: this.itemDisabled,
+                      itemChildren: this.itemChildren,
+                      loadChildren: this.loadChildren,
+                      transition: this.transition,
+                      openOnClick: this.openOnClick,
+                      rounded: this.rounded,
+                      shaped: this.shaped,
+                      level: this.level + 1,
+                      selectionType: this.selectionType,
+                      parentIsDisabled: parentIsDisabled,
+                    },
+                    scopedSlots: this.$scopedSlots,
+                  });
+                },
+                genChildrenWrapper: function genChildrenWrapper() {
+                  var _this = this;
+
+                  if (!this.isOpen || !this.children) return null;
+                  var children = [
+                    this.children.map(function (c) {
+                      return _this.genChild(c, _this.disabled);
+                    }),
+                  ];
+                  return this.$createElement(
+                    "div",
+                    {
+                      staticClass: "v-treeview-node__children",
+                    },
+                    children
+                  );
+                },
+                genTransition: function genTransition() {
+                  return this.$createElement(
+                    _transitions__WEBPACK_IMPORTED_MODULE_0__[
+                      "VExpandTransition"
+                    ],
+                    [this.genChildrenWrapper()]
+                  );
+                },
+              },
+              render: function render(h) {
+                var children = [this.genNode()];
+                if (this.transition) children.push(this.genTransition());
+                else children.push(this.genChildrenWrapper());
+                return h(
+                  "div",
+                  {
+                    staticClass: "v-treeview-node",
+                    class: {
+                      "v-treeview-node--leaf": !this.hasChildren,
+                      "v-treeview-node--click": this.openOnClick,
+                      "v-treeview-node--disabled": this.disabled,
+                      "v-treeview-node--rounded": this.rounded,
+                      "v-treeview-node--shaped": this.shaped,
+                      "v-treeview-node--selected": this.isSelected,
+                    },
+                    attrs: {
+                      "aria-expanded": String(this.isOpen),
+                    },
+                  },
+                  children
+                );
+              },
+            });
+            /* harmony default export */ __webpack_exports__["default"] =
+              VTreeviewNode;
 
+            /***/
+          },
 
+        /***/ "./src/components/VTreeview/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VTreeview/index.ts ***!
+  \*******************************************/
+          /*! exports provided: VTreeview, VTreeviewNode, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VTreeview__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VTreeview */ "./src/components/VTreeview/VTreeview.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTreeview",
+              function () {
+                return _VTreeview__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VTreeviewNode */ "./src/components/VTreeview/VTreeviewNode.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTreeviewNode",
+              function () {
+                return _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VTreeview: _VTreeview__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VTreeviewNode:
+                  _VTreeviewNode__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/components/VTreeview/util/filterTreeItems.ts":
+          /*!**********************************************************!*\
+  !*** ./src/components/VTreeview/util/filterTreeItems.ts ***!
+  \**********************************************************/
+          /*! exports provided: filterTreeItem, filterTreeItems */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "filterTreeItem",
+              function () {
+                return filterTreeItem;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "filterTreeItems",
+              function () {
+                return filterTreeItems;
+              }
+            );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            function filterTreeItem(item, search, textKey) {
+              var text = Object(
+                _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                  "getObjectValueByPath"
+                ]
+              )(item, textKey);
+              return (
+                text.toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) >
+                -1
+              );
+            }
+            function filterTreeItems(
+              filter,
+              item,
+              search,
+              idKey,
+              textKey,
+              childrenKey,
+              excluded
+            ) {
+              if (filter(item, search, textKey)) {
+                return true;
+              }
 
+              var children = Object(
+                _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                  "getObjectValueByPath"
+                ]
+              )(item, childrenKey);
+
+              if (children) {
+                var match = false;
+
+                for (var i = 0; i < children.length; i++) {
+                  if (
+                    filterTreeItems(
+                      filter,
+                      children[i],
+                      search,
+                      idKey,
+                      textKey,
+                      childrenKey,
+                      excluded
+                    )
+                  ) {
+                    match = true;
+                  }
+                }
 
+                if (match) return true;
+              }
 
+              excluded.add(
+                Object(
+                  _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                    "getObjectValueByPath"
+                  ]
+                )(item, idKey)
+              );
+              return false;
+            }
 
+            /***/
+          },
 
+        /***/ "./src/components/VVirtualScroll/VVirtualScroll.sass":
+          /*!***********************************************************!*\
+  !*** ./src/components/VVirtualScroll/VVirtualScroll.sass ***!
+  \***********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VVirtualScroll/VVirtualScroll.ts":
+          /*!*********************************************************!*\
+  !*** ./src/components/VVirtualScroll/VVirtualScroll.ts ***!
+  \*********************************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VVirtualScroll_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VVirtualScroll.sass */ "./src/components/VVirtualScroll/VVirtualScroll.sass"
+              );
+            /* harmony import */ var _VVirtualScroll_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VVirtualScroll_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _mixins_measurable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/measurable */ "./src/mixins/measurable/index.ts"
+              );
+            /* harmony import */ var _directives_scroll__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../directives/scroll */ "./src/directives/scroll/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // Styles
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _mixins_measurable__WEBPACK_IMPORTED_MODULE_1__["default"].extend(
+                {
+                  name: "v-virtual-scroll",
+                  directives: {
+                    Scroll:
+                      _directives_scroll__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ],
+                  },
+                  props: {
+                    bench: {
+                      type: [Number, String],
+                      default: 0,
+                    },
+                    itemHeight: {
+                      type: [Number, String],
+                      required: true,
+                    },
+                    items: {
+                      type: Array,
+                      default: function _default() {
+                        return [];
+                      },
+                    },
+                  },
+                  data: function data() {
+                    return {
+                      first: 0,
+                      last: 0,
+                      scrollTop: 0,
+                    };
+                  },
+                  computed: {
+                    __bench: function __bench() {
+                      return parseInt(this.bench, 10);
+                    },
+                    __itemHeight: function __itemHeight() {
+                      return parseInt(this.itemHeight, 10);
+                    },
+                    firstToRender: function firstToRender() {
+                      return Math.max(0, this.first - this.__bench);
+                    },
+                    lastToRender: function lastToRender() {
+                      return Math.min(
+                        this.items.length,
+                        this.last + this.__bench
+                      );
+                    },
+                  },
+                  watch: {
+                    height: "onScroll",
+                    itemHeight: "onScroll",
+                  },
+                  mounted: function mounted() {
+                    this.last = this.getLast(0);
+                  },
+                  methods: {
+                    getChildren: function getChildren() {
+                      return this.items
+                        .slice(this.firstToRender, this.lastToRender)
+                        .map(this.genChild);
+                    },
+                    genChild: function genChild(item, index) {
+                      index += this.firstToRender;
+                      var top = Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                          "convertToUnit"
+                        ]
+                      )(index * this.__itemHeight);
+                      return this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-virtual-scroll__item",
+                          style: {
+                            top: top,
+                          },
+                          key: index,
+                        },
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                        )(this, "default", {
+                          index: index,
+                          item: item,
+                        })
+                      );
+                    },
+                    getFirst: function getFirst() {
+                      return Math.floor(this.scrollTop / this.__itemHeight);
+                    },
+                    getLast: function getLast(first) {
+                      var height =
+                        parseInt(this.height || 0, 10) || this.$el.clientHeight;
+                      return first + Math.ceil(height / this.__itemHeight);
+                    },
+                    onScroll: function onScroll() {
+                      this.scrollTop = this.$el.scrollTop;
+                      this.first = this.getFirst();
+                      this.last = this.getLast(this.first);
+                    },
+                  },
+                  render: function render(h) {
+                    var content = h(
+                      "div",
+                      {
+                        staticClass: "v-virtual-scroll__container",
+                        style: {
+                          height: Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                              "convertToUnit"
+                            ]
+                          )(this.items.length * this.__itemHeight),
+                        },
+                      },
+                      this.getChildren()
+                    );
+                    return h(
+                      "div",
+                      {
+                        staticClass: "v-virtual-scroll",
+                        style: this.measurableStyles,
+                        directives: [
+                          {
+                            name: "scroll",
+                            modifiers: {
+                              self: true,
+                            },
+                            value: this.onScroll,
+                          },
+                        ],
+                        on: this.$listeners,
+                      },
+                      [content]
+                    );
+                  },
+                }
+              );
 
+            /***/
+          },
 
+        /***/ "./src/components/VVirtualScroll/index.ts":
+          /*!************************************************!*\
+  !*** ./src/components/VVirtualScroll/index.ts ***!
+  \************************************************/
+          /*! exports provided: VVirtualScroll, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VVirtualScroll__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VVirtualScroll */ "./src/components/VVirtualScroll/VVirtualScroll.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VVirtualScroll",
+              function () {
+                return _VVirtualScroll__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
 
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VVirtualScroll__WEBPACK_IMPORTED_MODULE_0__["default"];
 
+            /***/
+          },
 
+        /***/ "./src/components/VWindow/VWindow.sass":
+          /*!*********************************************!*\
+  !*** ./src/components/VWindow/VWindow.sass ***!
+  \*********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/components/VWindow/VWindow.ts":
+          /*!*******************************************!*\
+  !*** ./src/components/VWindow/VWindow.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VWindow_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VWindow.sass */ "./src/components/VWindow/VWindow.sass"
+              );
+            /* harmony import */ var _VWindow_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VWindow_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../directives/touch */ "./src/directives/touch/index.ts"
+              );
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony import */ var _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Styles
+
+            // Directives
+
+            // Components
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_4__[
+                "BaseItemGroup"
+              ].extend({
+                name: "v-window",
+                directives: {
+                  Touch:
+                    _directives_touch__WEBPACK_IMPORTED_MODULE_1__["default"],
+                },
+                provide: function provide() {
+                  return {
+                    windowGroup: this,
+                  };
+                },
+                props: {
+                  activeClass: {
+                    type: String,
+                    default: "v-window-item--active",
+                  },
+                  continuous: Boolean,
+                  mandatory: {
+                    type: Boolean,
+                    default: true,
+                  },
+                  nextIcon: {
+                    type: [Boolean, String],
+                    default: "$next",
+                  },
+                  prevIcon: {
+                    type: [Boolean, String],
+                    default: "$prev",
+                  },
+                  reverse: Boolean,
+                  showArrows: Boolean,
+                  showArrowsOnHover: Boolean,
+                  touch: Object,
+                  touchless: Boolean,
+                  value: {
+                    required: false,
+                  },
+                  vertical: Boolean,
+                },
+                data: function data() {
+                  return {
+                    internalHeight: undefined,
+                    transitionHeight: undefined,
+                    transitionCount: 0,
+                    isBooted: false,
+                    isReverse: false,
+                  };
+                },
+                computed: {
+                  isActive: function isActive() {
+                    return this.transitionCount > 0;
+                  },
+                  classes: function classes() {
+                    return __assign(
+                      __assign(
+                        {},
+                        _VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_4__[
+                          "BaseItemGroup"
+                        ].options.computed.classes.call(this)
+                      ),
+                      {
+                        "v-window--show-arrows-on-hover":
+                          this.showArrowsOnHover,
+                      }
+                    );
+                  },
+                  computedTransition: function computedTransition() {
+                    if (!this.isBooted) return "";
+                    var axis = this.vertical ? "y" : "x";
+                    var reverse = this.internalReverse
+                      ? !this.isReverse
+                      : this.isReverse;
+                    var direction = reverse ? "-reverse" : "";
+                    return "v-window-" + axis + direction + "-transition";
+                  },
+                  hasActiveItems: function hasActiveItems() {
+                    return Boolean(
+                      this.items.find(function (item) {
+                        return !item.disabled;
+                      })
+                    );
+                  },
+                  hasNext: function hasNext() {
+                    return (
+                      this.continuous ||
+                      this.internalIndex < this.items.length - 1
+                    );
+                  },
+                  hasPrev: function hasPrev() {
+                    return this.continuous || this.internalIndex > 0;
+                  },
+                  internalIndex: function internalIndex() {
+                    var _this = this;
+
+                    return this.items.findIndex(function (item, i) {
+                      return _this.internalValue === _this.getValue(item, i);
+                    });
+                  },
+                  internalReverse: function internalReverse() {
+                    return this.$vuetify.rtl ? !this.reverse : this.reverse;
+                  },
+                },
+                watch: {
+                  internalIndex: function internalIndex(val, oldVal) {
+                    this.isReverse = this.updateReverse(val, oldVal);
+                  },
+                },
+                mounted: function mounted() {
+                  var _this = this;
+
+                  window.requestAnimationFrame(function () {
+                    return (_this.isBooted = true);
+                  });
+                },
+                methods: {
+                  genContainer: function genContainer() {
+                    var children = [this.$slots.default];
+
+                    if (this.showArrows) {
+                      children.push(this.genControlIcons());
+                    }
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-window__container",
+                        class: {
+                          "v-window__container--is-active": this.isActive,
+                        },
+                        style: {
+                          height: this.internalHeight || this.transitionHeight,
+                        },
+                      },
+                      children
+                    );
+                  },
+                  genIcon: function genIcon(direction, icon, click) {
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: "v-window__" + direction,
+                      },
+                      [
+                        this.$createElement(
+                          _VBtn__WEBPACK_IMPORTED_MODULE_2__["default"],
+                          {
+                            props: {
+                              icon: true,
+                            },
+                            attrs: {
+                              "aria-label": this.$vuetify.lang.t(
+                                "$vuetify.carousel." + direction
+                              ),
+                            },
+                            on: {
+                              click: click,
+                            },
+                          },
+                          [
+                            this.$createElement(
+                              _VIcon__WEBPACK_IMPORTED_MODULE_3__["default"],
+                              {
+                                props: {
+                                  large: true,
+                                },
+                              },
+                              icon
+                            ),
+                          ]
+                        ),
+                      ]
+                    );
+                  },
+                  genControlIcons: function genControlIcons() {
+                    var icons = [];
+                    var prevIcon = this.$vuetify.rtl
+                      ? this.nextIcon
+                      : this.prevIcon;
+                    /* istanbul ignore else */
+
+                    if (
+                      this.hasPrev &&
+                      prevIcon &&
+                      typeof prevIcon === "string"
+                    ) {
+                      var icon = this.genIcon("prev", prevIcon, this.prev);
+                      icon && icons.push(icon);
+                    }
+
+                    var nextIcon = this.$vuetify.rtl
+                      ? this.prevIcon
+                      : this.nextIcon;
+                    /* istanbul ignore else */
+
+                    if (
+                      this.hasNext &&
+                      nextIcon &&
+                      typeof nextIcon === "string"
+                    ) {
+                      var icon = this.genIcon("next", nextIcon, this.next);
+                      icon && icons.push(icon);
+                    }
+
+                    return icons;
+                  },
+                  getNextIndex: function getNextIndex(index) {
+                    var nextIndex = (index + 1) % this.items.length;
+                    var item = this.items[nextIndex];
+                    if (item.disabled) return this.getNextIndex(nextIndex);
+                    return nextIndex;
+                  },
+                  getPrevIndex: function getPrevIndex(index) {
+                    var prevIndex =
+                      (index + this.items.length - 1) % this.items.length;
+                    var item = this.items[prevIndex];
+                    if (item.disabled) return this.getPrevIndex(prevIndex);
+                    return prevIndex;
+                  },
+                  next: function next() {
+                    /* istanbul ignore if */
+                    if (!this.hasActiveItems || !this.hasNext) return;
+                    var nextIndex = this.getNextIndex(this.internalIndex);
+                    var item = this.items[nextIndex];
+                    this.internalValue = this.getValue(item, nextIndex);
+                  },
+                  prev: function prev() {
+                    /* istanbul ignore if */
+                    if (!this.hasActiveItems || !this.hasPrev) return;
+                    var lastIndex = this.getPrevIndex(this.internalIndex);
+                    var item = this.items[lastIndex];
+                    this.internalValue = this.getValue(item, lastIndex);
+                  },
+                  updateReverse: function updateReverse(val, oldVal) {
+                    var lastIndex = this.items.length - 1;
+
+                    if (val === lastIndex && oldVal === 0) {
+                      return true;
+                    } else if (val === 0 && oldVal === lastIndex) {
+                      return false;
+                    } else {
+                      return val < oldVal;
+                    }
+                  },
+                },
+                render: function render(h) {
+                  var _this = this;
+
+                  var data = {
+                    staticClass: "v-window",
+                    class: this.classes,
+                    directives: [],
+                  };
+
+                  if (!this.touchless) {
+                    var value = this.touch || {
+                      left: function left() {
+                        _this.$vuetify.rtl ? _this.prev() : _this.next();
+                      },
+                      right: function right() {
+                        _this.$vuetify.rtl ? _this.next() : _this.prev();
+                      },
+                      end: function end(e) {
+                        e.stopPropagation();
+                      },
+                      start: function start(e) {
+                        e.stopPropagation();
+                      },
+                    };
+                    data.directives.push({
+                      name: "touch",
+                      value: value,
+                    });
+                  }
 
+                  return h("div", data, [this.genContainer()]);
+                },
+              });
 
+            /***/
+          },
 
+        /***/ "./src/components/VWindow/VWindowItem.ts":
+          /*!***********************************************!*\
+  !*** ./src/components/VWindow/VWindowItem.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mixins_bootable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../mixins/bootable */ "./src/mixins/bootable/index.ts"
+              );
+            /* harmony import */ var _mixins_groupable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../mixins/groupable */ "./src/mixins/groupable/index.ts"
+              );
+            /* harmony import */ var _directives_touch__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../directives/touch */ "./src/directives/touch/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Mixins
+
+            // Directives
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"]
+            )(
+              _mixins_bootable__WEBPACK_IMPORTED_MODULE_0__["default"],
+              Object(_mixins_groupable__WEBPACK_IMPORTED_MODULE_1__["factory"])(
+                "windowGroup",
+                "v-window-item",
+                "v-window"
+              )
+            );
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins
+                .extend()
+                .extend()
+                .extend({
+                  name: "v-window-item",
+                  directives: {
+                    Touch:
+                      _directives_touch__WEBPACK_IMPORTED_MODULE_2__["default"],
+                  },
+                  props: {
+                    disabled: Boolean,
+                    reverseTransition: {
+                      type: [Boolean, String],
+                      default: undefined,
+                    },
+                    transition: {
+                      type: [Boolean, String],
+                      default: undefined,
+                    },
+                    value: {
+                      required: false,
+                    },
+                  },
+                  data: function data() {
+                    return {
+                      isActive: false,
+                      inTransition: false,
+                    };
+                  },
+                  computed: {
+                    classes: function classes() {
+                      return this.groupClasses;
+                    },
+                    computedTransition: function computedTransition() {
+                      if (!this.windowGroup.internalReverse) {
+                        return typeof this.transition !== "undefined"
+                          ? this.transition || ""
+                          : this.windowGroup.computedTransition;
+                      }
+
+                      return typeof this.reverseTransition !== "undefined"
+                        ? this.reverseTransition || ""
+                        : this.windowGroup.computedTransition;
+                    },
+                  },
+                  methods: {
+                    genDefaultSlot: function genDefaultSlot() {
+                      return this.$slots.default;
+                    },
+                    genWindowItem: function genWindowItem() {
+                      return this.$createElement(
+                        "div",
+                        {
+                          staticClass: "v-window-item",
+                          class: this.classes,
+                          directives: [
+                            {
+                              name: "show",
+                              value: this.isActive,
+                            },
+                          ],
+                          on: this.$listeners,
+                        },
+                        this.genDefaultSlot()
+                      );
+                    },
+                    onAfterTransition: function onAfterTransition() {
+                      if (!this.inTransition) {
+                        return;
+                      } // Finalize transition state.
+
+                      this.inTransition = false;
+
+                      if (this.windowGroup.transitionCount > 0) {
+                        this.windowGroup.transitionCount--; // Remove container height if we are out of transition.
+
+                        if (this.windowGroup.transitionCount === 0) {
+                          this.windowGroup.transitionHeight = undefined;
+                        }
+                      }
+                    },
+                    onBeforeTransition: function onBeforeTransition() {
+                      if (this.inTransition) {
+                        return;
+                      } // Initialize transition state here.
+
+                      this.inTransition = true;
+
+                      if (this.windowGroup.transitionCount === 0) {
+                        // Set initial height for height transition.
+                        this.windowGroup.transitionHeight = Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                            "convertToUnit"
+                          ]
+                        )(this.windowGroup.$el.clientHeight);
+                      }
+
+                      this.windowGroup.transitionCount++;
+                    },
+                    onTransitionCancelled: function onTransitionCancelled() {
+                      this.onAfterTransition(); // This should have the same path as normal transition end.
+                    },
+                    onEnter: function onEnter(el) {
+                      var _this = this;
+
+                      if (!this.inTransition) {
+                        return;
+                      }
+
+                      this.$nextTick(function () {
+                        // Do not set height if no transition or cancelled.
+                        if (!_this.computedTransition || !_this.inTransition) {
+                          return;
+                        } // Set transition target height.
+
+                        _this.windowGroup.transitionHeight = Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                            "convertToUnit"
+                          ]
+                        )(el.clientHeight);
+                      });
+                    },
+                  },
+                  render: function render(h) {
+                    var _this = this;
+
+                    return h(
+                      "transition",
+                      {
+                        props: {
+                          name: this.computedTransition,
+                        },
+                        on: {
+                          // Handlers for enter windows.
+                          beforeEnter: this.onBeforeTransition,
+                          afterEnter: this.onAfterTransition,
+                          enterCancelled: this.onTransitionCancelled,
+                          // Handlers for leave windows.
+                          beforeLeave: this.onBeforeTransition,
+                          afterLeave: this.onAfterTransition,
+                          leaveCancelled: this.onTransitionCancelled,
+                          // Enter handler for height transition.
+                          enter: this.onEnter,
+                        },
+                      },
+                      this.showLazyContent(function () {
+                        return [_this.genWindowItem()];
+                      })
+                    );
+                  },
+                });
+
+            /***/
+          },
 
+        /***/ "./src/components/VWindow/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/components/VWindow/index.ts ***!
+  \*****************************************/
+          /*! exports provided: VWindow, VWindowItem, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VWindow__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VWindow */ "./src/components/VWindow/VWindow.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VWindow",
+              function () {
+                return _VWindow__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _VWindowItem__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VWindowItem */ "./src/components/VWindow/VWindowItem.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VWindowItem",
+              function () {
+                return _VWindowItem__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VWindow: _VWindow__WEBPACK_IMPORTED_MODULE_0__["default"],
+                VWindowItem:
+                  _VWindowItem__WEBPACK_IMPORTED_MODULE_1__["default"],
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/components/index.ts":
+          /*!*********************************!*\
+  !*** ./src/components/index.ts ***!
+  \*********************************/
+          /*! exports provided: VApp, VAppBar, VAppBarNavIcon, VAlert, VAutocomplete, VAvatar, VBadge, VBanner, VBottomNavigation, VBottomSheet, VBreadcrumbs, VBreadcrumbsItem, VBreadcrumbsDivider, VBtn, VBtnToggle, VCalendar, VCalendarCategory, VCalendarDaily, VCalendarWeekly, VCalendarMonthly, VCard, VCardActions, VCardSubtitle, VCardText, VCardTitle, VCarousel, VCarouselItem, VCheckbox, VSimpleCheckbox, VChip, VChipGroup, VColorPicker, VColorPickerSwatches, VColorPickerCanvas, VContent, VCombobox, VCounter, VData, VDataIterator, VDataFooter, VDataTable, VEditDialog, VTableOverflow, VDataTableHeader, VSimpleTable, VVirtualTable, VDatePicker, VDatePickerTitle, VDatePickerHeader, VDatePickerDateTable, VDatePickerMonthTable, VDatePickerYears, VDialog, VDivider, VExpansionPanels, VExpansionPanel, VExpansionPanelHeader, VExpansionPanelContent, VFileInput, VFooter, VForm, VContainer, VCol, VRow, VSpacer, VLayout, VFlex, VHover, VIcon, VImg, VInput, VItem, VItemGroup, VLabel, VLazy, VListItemActionText, VListItemContent, VListItemTitle, VListItemSubtitle, VList, VListGroup, VListItem, VListItemAction, VListItemAvatar, VListItemIcon, VListItemGroup, VMain, VMenu, VMessages, VNavigationDrawer, VOverflowBtn, VOverlay, VPagination, VSheet, VParallax, VPicker, VProgressCircular, VProgressLinear, VRadioGroup, VRadio, VRangeSlider, VRating, VResponsive, VSelect, VSkeletonLoader, VSlider, VSlideGroup, VSlideItem, VSnackbar, VSparkline, VSpeedDial, VStepper, VStepperContent, VStepperStep, VStepperHeader, VStepperItems, VSubheader, VSwitch, VSystemBar, VTabs, VTab, VTabItem, VTabsItems, VTabsSlider, VTextarea, VTextField, VThemeProvider, VTimeline, VTimelineItem, VTimePicker, VTimePickerClock, VTimePickerTitle, VToolbar, VToolbarItems, VToolbarTitle, VTooltip, VTreeview, VTreeviewNode, VVirtualScroll, VWindow, VWindowItem, VCarouselTransition, VCarouselReverseTransition, VTabTransition, VTabReverseTransition, VMenuTransition, VFabTransition, VDialogTransition, VDialogBottomTransition, VFadeTransition, VScaleTransition, VScrollXTransition, VScrollXReverseTransition, VScrollYTransition, VScrollYReverseTransition, VSlideXTransition, VSlideXReverseTransition, VSlideYTransition, VSlideYReverseTransition, VExpandTransition, VExpandXTransition */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _VApp__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VApp */ "./src/components/VApp/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VApp",
+              function () {
+                return _VApp__WEBPACK_IMPORTED_MODULE_0__["VApp"];
+              }
+            );
+
+            /* harmony import */ var _VAppBar__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./VAppBar */ "./src/components/VAppBar/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAppBar",
+              function () {
+                return _VAppBar__WEBPACK_IMPORTED_MODULE_1__["VAppBar"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAppBarNavIcon",
+              function () {
+                return _VAppBar__WEBPACK_IMPORTED_MODULE_1__["VAppBarNavIcon"];
+              }
+            );
+
+            /* harmony import */ var _VAlert__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./VAlert */ "./src/components/VAlert/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAlert",
+              function () {
+                return _VAlert__WEBPACK_IMPORTED_MODULE_2__["VAlert"];
+              }
+            );
+
+            /* harmony import */ var _VAutocomplete__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./VAutocomplete */ "./src/components/VAutocomplete/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAutocomplete",
+              function () {
+                return _VAutocomplete__WEBPACK_IMPORTED_MODULE_3__[
+                  "VAutocomplete"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VAvatar__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./VAvatar */ "./src/components/VAvatar/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VAvatar",
+              function () {
+                return _VAvatar__WEBPACK_IMPORTED_MODULE_4__["VAvatar"];
+              }
+            );
+
+            /* harmony import */ var _VBadge__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./VBadge */ "./src/components/VBadge/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBadge",
+              function () {
+                return _VBadge__WEBPACK_IMPORTED_MODULE_5__["VBadge"];
+              }
+            );
+
+            /* harmony import */ var _VBanner__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./VBanner */ "./src/components/VBanner/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBanner",
+              function () {
+                return _VBanner__WEBPACK_IMPORTED_MODULE_6__["VBanner"];
+              }
+            );
+
+            /* harmony import */ var _VBottomNavigation__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(
+                /*! ./VBottomNavigation */ "./src/components/VBottomNavigation/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBottomNavigation",
+              function () {
+                return _VBottomNavigation__WEBPACK_IMPORTED_MODULE_7__[
+                  "VBottomNavigation"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VBottomSheet__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(
+                /*! ./VBottomSheet */ "./src/components/VBottomSheet/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBottomSheet",
+              function () {
+                return _VBottomSheet__WEBPACK_IMPORTED_MODULE_8__[
+                  "VBottomSheet"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(
+                /*! ./VBreadcrumbs */ "./src/components/VBreadcrumbs/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBreadcrumbs",
+              function () {
+                return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__[
+                  "VBreadcrumbs"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBreadcrumbsItem",
+              function () {
+                return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__[
+                  "VBreadcrumbsItem"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBreadcrumbsDivider",
+              function () {
+                return _VBreadcrumbs__WEBPACK_IMPORTED_MODULE_9__[
+                  "VBreadcrumbsDivider"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VBtn__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(
+                /*! ./VBtn */ "./src/components/VBtn/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBtn",
+              function () {
+                return _VBtn__WEBPACK_IMPORTED_MODULE_10__["VBtn"];
+              }
+            );
+
+            /* harmony import */ var _VBtnToggle__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(
+                /*! ./VBtnToggle */ "./src/components/VBtnToggle/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VBtnToggle",
+              function () {
+                return _VBtnToggle__WEBPACK_IMPORTED_MODULE_11__["VBtnToggle"];
+              }
+            );
+
+            /* harmony import */ var _VCalendar__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(
+                /*! ./VCalendar */ "./src/components/VCalendar/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendar",
+              function () {
+                return _VCalendar__WEBPACK_IMPORTED_MODULE_12__["VCalendar"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarCategory",
+              function () {
+                return _VCalendar__WEBPACK_IMPORTED_MODULE_12__[
+                  "VCalendarCategory"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarDaily",
+              function () {
+                return _VCalendar__WEBPACK_IMPORTED_MODULE_12__[
+                  "VCalendarDaily"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarWeekly",
+              function () {
+                return _VCalendar__WEBPACK_IMPORTED_MODULE_12__[
+                  "VCalendarWeekly"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCalendarMonthly",
+              function () {
+                return _VCalendar__WEBPACK_IMPORTED_MODULE_12__[
+                  "VCalendarMonthly"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VCard__WEBPACK_IMPORTED_MODULE_13__ =
+              __webpack_require__(
+                /*! ./VCard */ "./src/components/VCard/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCard",
+              function () {
+                return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCard"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardActions",
+              function () {
+                return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardActions"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardSubtitle",
+              function () {
+                return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardSubtitle"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardText",
+              function () {
+                return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardText"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCardTitle",
+              function () {
+                return _VCard__WEBPACK_IMPORTED_MODULE_13__["VCardTitle"];
+              }
+            );
+
+            /* harmony import */ var _VCarousel__WEBPACK_IMPORTED_MODULE_14__ =
+              __webpack_require__(
+                /*! ./VCarousel */ "./src/components/VCarousel/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarousel",
+              function () {
+                return _VCarousel__WEBPACK_IMPORTED_MODULE_14__["VCarousel"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarouselItem",
+              function () {
+                return _VCarousel__WEBPACK_IMPORTED_MODULE_14__[
+                  "VCarouselItem"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VCheckbox__WEBPACK_IMPORTED_MODULE_15__ =
+              __webpack_require__(
+                /*! ./VCheckbox */ "./src/components/VCheckbox/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCheckbox",
+              function () {
+                return _VCheckbox__WEBPACK_IMPORTED_MODULE_15__["VCheckbox"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSimpleCheckbox",
+              function () {
+                return _VCheckbox__WEBPACK_IMPORTED_MODULE_15__[
+                  "VSimpleCheckbox"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VChip__WEBPACK_IMPORTED_MODULE_16__ =
+              __webpack_require__(
+                /*! ./VChip */ "./src/components/VChip/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VChip",
+              function () {
+                return _VChip__WEBPACK_IMPORTED_MODULE_16__["VChip"];
+              }
+            );
+
+            /* harmony import */ var _VChipGroup__WEBPACK_IMPORTED_MODULE_17__ =
+              __webpack_require__(
+                /*! ./VChipGroup */ "./src/components/VChipGroup/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VChipGroup",
+              function () {
+                return _VChipGroup__WEBPACK_IMPORTED_MODULE_17__["VChipGroup"];
+              }
+            );
+
+            /* harmony import */ var _VColorPicker__WEBPACK_IMPORTED_MODULE_18__ =
+              __webpack_require__(
+                /*! ./VColorPicker */ "./src/components/VColorPicker/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VColorPicker",
+              function () {
+                return _VColorPicker__WEBPACK_IMPORTED_MODULE_18__[
+                  "VColorPicker"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VColorPickerSwatches",
+              function () {
+                return _VColorPicker__WEBPACK_IMPORTED_MODULE_18__[
+                  "VColorPickerSwatches"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VColorPickerCanvas",
+              function () {
+                return _VColorPicker__WEBPACK_IMPORTED_MODULE_18__[
+                  "VColorPickerCanvas"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VContent__WEBPACK_IMPORTED_MODULE_19__ =
+              __webpack_require__(
+                /*! ./VContent */ "./src/components/VContent/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VContent",
+              function () {
+                return _VContent__WEBPACK_IMPORTED_MODULE_19__["VContent"];
+              }
+            );
+
+            /* harmony import */ var _VCombobox__WEBPACK_IMPORTED_MODULE_20__ =
+              __webpack_require__(
+                /*! ./VCombobox */ "./src/components/VCombobox/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCombobox",
+              function () {
+                return _VCombobox__WEBPACK_IMPORTED_MODULE_20__["VCombobox"];
+              }
+            );
+
+            /* harmony import */ var _VCounter__WEBPACK_IMPORTED_MODULE_21__ =
+              __webpack_require__(
+                /*! ./VCounter */ "./src/components/VCounter/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCounter",
+              function () {
+                return _VCounter__WEBPACK_IMPORTED_MODULE_21__["VCounter"];
+              }
+            );
+
+            /* harmony import */ var _VData__WEBPACK_IMPORTED_MODULE_22__ =
+              __webpack_require__(
+                /*! ./VData */ "./src/components/VData/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VData",
+              function () {
+                return _VData__WEBPACK_IMPORTED_MODULE_22__["VData"];
+              }
+            );
+
+            /* harmony import */ var _VDataIterator__WEBPACK_IMPORTED_MODULE_23__ =
+              __webpack_require__(
+                /*! ./VDataIterator */ "./src/components/VDataIterator/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataIterator",
+              function () {
+                return _VDataIterator__WEBPACK_IMPORTED_MODULE_23__[
+                  "VDataIterator"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataFooter",
+              function () {
+                return _VDataIterator__WEBPACK_IMPORTED_MODULE_23__[
+                  "VDataFooter"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VDataTable__WEBPACK_IMPORTED_MODULE_24__ =
+              __webpack_require__(
+                /*! ./VDataTable */ "./src/components/VDataTable/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataTable",
+              function () {
+                return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VDataTable"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VEditDialog",
+              function () {
+                return _VDataTable__WEBPACK_IMPORTED_MODULE_24__["VEditDialog"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTableOverflow",
+              function () {
+                return _VDataTable__WEBPACK_IMPORTED_MODULE_24__[
+                  "VTableOverflow"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDataTableHeader",
+              function () {
+                return _VDataTable__WEBPACK_IMPORTED_MODULE_24__[
+                  "VDataTableHeader"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSimpleTable",
+              function () {
+                return _VDataTable__WEBPACK_IMPORTED_MODULE_24__[
+                  "VSimpleTable"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VVirtualTable",
+              function () {
+                return _VDataTable__WEBPACK_IMPORTED_MODULE_24__[
+                  "VVirtualTable"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VDatePicker__WEBPACK_IMPORTED_MODULE_25__ =
+              __webpack_require__(
+                /*! ./VDatePicker */ "./src/components/VDatePicker/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePicker",
+              function () {
+                return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__[
+                  "VDatePicker"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerTitle",
+              function () {
+                return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__[
+                  "VDatePickerTitle"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerHeader",
+              function () {
+                return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__[
+                  "VDatePickerHeader"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerDateTable",
+              function () {
+                return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__[
+                  "VDatePickerDateTable"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerMonthTable",
+              function () {
+                return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__[
+                  "VDatePickerMonthTable"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDatePickerYears",
+              function () {
+                return _VDatePicker__WEBPACK_IMPORTED_MODULE_25__[
+                  "VDatePickerYears"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VDialog__WEBPACK_IMPORTED_MODULE_26__ =
+              __webpack_require__(
+                /*! ./VDialog */ "./src/components/VDialog/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDialog",
+              function () {
+                return _VDialog__WEBPACK_IMPORTED_MODULE_26__["VDialog"];
+              }
+            );
+
+            /* harmony import */ var _VDivider__WEBPACK_IMPORTED_MODULE_27__ =
+              __webpack_require__(
+                /*! ./VDivider */ "./src/components/VDivider/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDivider",
+              function () {
+                return _VDivider__WEBPACK_IMPORTED_MODULE_27__["VDivider"];
+              }
+            );
+
+            /* harmony import */ var _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__ =
+              __webpack_require__(
+                /*! ./VExpansionPanel */ "./src/components/VExpansionPanel/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanels",
+              function () {
+                return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__[
+                  "VExpansionPanels"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanel",
+              function () {
+                return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__[
+                  "VExpansionPanel"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanelHeader",
+              function () {
+                return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__[
+                  "VExpansionPanelHeader"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpansionPanelContent",
+              function () {
+                return _VExpansionPanel__WEBPACK_IMPORTED_MODULE_28__[
+                  "VExpansionPanelContent"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VFileInput__WEBPACK_IMPORTED_MODULE_29__ =
+              __webpack_require__(
+                /*! ./VFileInput */ "./src/components/VFileInput/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFileInput",
+              function () {
+                return _VFileInput__WEBPACK_IMPORTED_MODULE_29__["VFileInput"];
+              }
+            );
+
+            /* harmony import */ var _VFooter__WEBPACK_IMPORTED_MODULE_30__ =
+              __webpack_require__(
+                /*! ./VFooter */ "./src/components/VFooter/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFooter",
+              function () {
+                return _VFooter__WEBPACK_IMPORTED_MODULE_30__["VFooter"];
+              }
+            );
+
+            /* harmony import */ var _VForm__WEBPACK_IMPORTED_MODULE_31__ =
+              __webpack_require__(
+                /*! ./VForm */ "./src/components/VForm/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VForm",
+              function () {
+                return _VForm__WEBPACK_IMPORTED_MODULE_31__["VForm"];
+              }
+            );
+
+            /* harmony import */ var _VGrid__WEBPACK_IMPORTED_MODULE_32__ =
+              __webpack_require__(
+                /*! ./VGrid */ "./src/components/VGrid/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VContainer",
+              function () {
+                return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VContainer"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCol",
+              function () {
+                return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VCol"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRow",
+              function () {
+                return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VRow"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSpacer",
+              function () {
+                return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VSpacer"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VLayout",
+              function () {
+                return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VLayout"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFlex",
+              function () {
+                return _VGrid__WEBPACK_IMPORTED_MODULE_32__["VFlex"];
+              }
+            );
+
+            /* harmony import */ var _VHover__WEBPACK_IMPORTED_MODULE_33__ =
+              __webpack_require__(
+                /*! ./VHover */ "./src/components/VHover/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VHover",
+              function () {
+                return _VHover__WEBPACK_IMPORTED_MODULE_33__["VHover"];
+              }
+            );
+
+            /* harmony import */ var _VIcon__WEBPACK_IMPORTED_MODULE_34__ =
+              __webpack_require__(
+                /*! ./VIcon */ "./src/components/VIcon/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VIcon",
+              function () {
+                return _VIcon__WEBPACK_IMPORTED_MODULE_34__["VIcon"];
+              }
+            );
+
+            /* harmony import */ var _VImg__WEBPACK_IMPORTED_MODULE_35__ =
+              __webpack_require__(
+                /*! ./VImg */ "./src/components/VImg/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VImg",
+              function () {
+                return _VImg__WEBPACK_IMPORTED_MODULE_35__["VImg"];
+              }
+            );
+
+            /* harmony import */ var _VInput__WEBPACK_IMPORTED_MODULE_36__ =
+              __webpack_require__(
+                /*! ./VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VInput",
+              function () {
+                return _VInput__WEBPACK_IMPORTED_MODULE_36__["VInput"];
+              }
+            );
+
+            /* harmony import */ var _VItemGroup__WEBPACK_IMPORTED_MODULE_37__ =
+              __webpack_require__(
+                /*! ./VItemGroup */ "./src/components/VItemGroup/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VItem",
+              function () {
+                return _VItemGroup__WEBPACK_IMPORTED_MODULE_37__["VItem"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VItemGroup",
+              function () {
+                return _VItemGroup__WEBPACK_IMPORTED_MODULE_37__["VItemGroup"];
+              }
+            );
+
+            /* harmony import */ var _VLabel__WEBPACK_IMPORTED_MODULE_38__ =
+              __webpack_require__(
+                /*! ./VLabel */ "./src/components/VLabel/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VLabel",
+              function () {
+                return _VLabel__WEBPACK_IMPORTED_MODULE_38__["VLabel"];
+              }
+            );
+
+            /* harmony import */ var _VLazy__WEBPACK_IMPORTED_MODULE_39__ =
+              __webpack_require__(
+                /*! ./VLazy */ "./src/components/VLazy/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VLazy",
+              function () {
+                return _VLazy__WEBPACK_IMPORTED_MODULE_39__["VLazy"];
+              }
+            );
+
+            /* harmony import */ var _VList__WEBPACK_IMPORTED_MODULE_40__ =
+              __webpack_require__(
+                /*! ./VList */ "./src/components/VList/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemActionText",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__[
+                  "VListItemActionText"
+                ];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemContent",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemContent"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemTitle",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemTitle"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemSubtitle",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__[
+                  "VListItemSubtitle"
+                ];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VList",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VList"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListGroup",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListGroup"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItem",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItem"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemAction",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemAction"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemAvatar",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemAvatar"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemIcon",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemIcon"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VListItemGroup",
+              function () {
+                return _VList__WEBPACK_IMPORTED_MODULE_40__["VListItemGroup"];
+              }
+            );
+
+            /* harmony import */ var _VMain__WEBPACK_IMPORTED_MODULE_41__ =
+              __webpack_require__(
+                /*! ./VMain */ "./src/components/VMain/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMain",
+              function () {
+                return _VMain__WEBPACK_IMPORTED_MODULE_41__["VMain"];
+              }
+            );
+
+            /* harmony import */ var _VMenu__WEBPACK_IMPORTED_MODULE_42__ =
+              __webpack_require__(
+                /*! ./VMenu */ "./src/components/VMenu/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMenu",
+              function () {
+                return _VMenu__WEBPACK_IMPORTED_MODULE_42__["VMenu"];
+              }
+            );
+
+            /* harmony import */ var _VMessages__WEBPACK_IMPORTED_MODULE_43__ =
+              __webpack_require__(
+                /*! ./VMessages */ "./src/components/VMessages/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMessages",
+              function () {
+                return _VMessages__WEBPACK_IMPORTED_MODULE_43__["VMessages"];
+              }
+            );
+
+            /* harmony import */ var _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_44__ =
+              __webpack_require__(
+                /*! ./VNavigationDrawer */ "./src/components/VNavigationDrawer/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VNavigationDrawer",
+              function () {
+                return _VNavigationDrawer__WEBPACK_IMPORTED_MODULE_44__[
+                  "VNavigationDrawer"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VOverflowBtn__WEBPACK_IMPORTED_MODULE_45__ =
+              __webpack_require__(
+                /*! ./VOverflowBtn */ "./src/components/VOverflowBtn/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VOverflowBtn",
+              function () {
+                return _VOverflowBtn__WEBPACK_IMPORTED_MODULE_45__[
+                  "VOverflowBtn"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VOverlay__WEBPACK_IMPORTED_MODULE_46__ =
+              __webpack_require__(
+                /*! ./VOverlay */ "./src/components/VOverlay/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VOverlay",
+              function () {
+                return _VOverlay__WEBPACK_IMPORTED_MODULE_46__["VOverlay"];
+              }
+            );
+
+            /* harmony import */ var _VPagination__WEBPACK_IMPORTED_MODULE_47__ =
+              __webpack_require__(
+                /*! ./VPagination */ "./src/components/VPagination/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VPagination",
+              function () {
+                return _VPagination__WEBPACK_IMPORTED_MODULE_47__[
+                  "VPagination"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VSheet__WEBPACK_IMPORTED_MODULE_48__ =
+              __webpack_require__(
+                /*! ./VSheet */ "./src/components/VSheet/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSheet",
+              function () {
+                return _VSheet__WEBPACK_IMPORTED_MODULE_48__["VSheet"];
+              }
+            );
+
+            /* harmony import */ var _VParallax__WEBPACK_IMPORTED_MODULE_49__ =
+              __webpack_require__(
+                /*! ./VParallax */ "./src/components/VParallax/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VParallax",
+              function () {
+                return _VParallax__WEBPACK_IMPORTED_MODULE_49__["VParallax"];
+              }
+            );
+
+            /* harmony import */ var _VPicker__WEBPACK_IMPORTED_MODULE_50__ =
+              __webpack_require__(
+                /*! ./VPicker */ "./src/components/VPicker/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VPicker",
+              function () {
+                return _VPicker__WEBPACK_IMPORTED_MODULE_50__["VPicker"];
+              }
+            );
+
+            /* harmony import */ var _VProgressCircular__WEBPACK_IMPORTED_MODULE_51__ =
+              __webpack_require__(
+                /*! ./VProgressCircular */ "./src/components/VProgressCircular/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VProgressCircular",
+              function () {
+                return _VProgressCircular__WEBPACK_IMPORTED_MODULE_51__[
+                  "VProgressCircular"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VProgressLinear__WEBPACK_IMPORTED_MODULE_52__ =
+              __webpack_require__(
+                /*! ./VProgressLinear */ "./src/components/VProgressLinear/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VProgressLinear",
+              function () {
+                return _VProgressLinear__WEBPACK_IMPORTED_MODULE_52__[
+                  "VProgressLinear"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VRadioGroup__WEBPACK_IMPORTED_MODULE_53__ =
+              __webpack_require__(
+                /*! ./VRadioGroup */ "./src/components/VRadioGroup/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRadioGroup",
+              function () {
+                return _VRadioGroup__WEBPACK_IMPORTED_MODULE_53__[
+                  "VRadioGroup"
+                ];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRadio",
+              function () {
+                return _VRadioGroup__WEBPACK_IMPORTED_MODULE_53__["VRadio"];
+              }
+            );
+
+            /* harmony import */ var _VRangeSlider__WEBPACK_IMPORTED_MODULE_54__ =
+              __webpack_require__(
+                /*! ./VRangeSlider */ "./src/components/VRangeSlider/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRangeSlider",
+              function () {
+                return _VRangeSlider__WEBPACK_IMPORTED_MODULE_54__[
+                  "VRangeSlider"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VRating__WEBPACK_IMPORTED_MODULE_55__ =
+              __webpack_require__(
+                /*! ./VRating */ "./src/components/VRating/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VRating",
+              function () {
+                return _VRating__WEBPACK_IMPORTED_MODULE_55__["VRating"];
+              }
+            );
+
+            /* harmony import */ var _VResponsive__WEBPACK_IMPORTED_MODULE_56__ =
+              __webpack_require__(
+                /*! ./VResponsive */ "./src/components/VResponsive/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VResponsive",
+              function () {
+                return _VResponsive__WEBPACK_IMPORTED_MODULE_56__[
+                  "VResponsive"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VSelect__WEBPACK_IMPORTED_MODULE_57__ =
+              __webpack_require__(
+                /*! ./VSelect */ "./src/components/VSelect/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSelect",
+              function () {
+                return _VSelect__WEBPACK_IMPORTED_MODULE_57__["VSelect"];
+              }
+            );
+
+            /* harmony import */ var _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_58__ =
+              __webpack_require__(
+                /*! ./VSkeletonLoader */ "./src/components/VSkeletonLoader/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSkeletonLoader",
+              function () {
+                return _VSkeletonLoader__WEBPACK_IMPORTED_MODULE_58__[
+                  "VSkeletonLoader"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VSlider__WEBPACK_IMPORTED_MODULE_59__ =
+              __webpack_require__(
+                /*! ./VSlider */ "./src/components/VSlider/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlider",
+              function () {
+                return _VSlider__WEBPACK_IMPORTED_MODULE_59__["VSlider"];
+              }
+            );
+
+            /* harmony import */ var _VSlideGroup__WEBPACK_IMPORTED_MODULE_60__ =
+              __webpack_require__(
+                /*! ./VSlideGroup */ "./src/components/VSlideGroup/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideGroup",
+              function () {
+                return _VSlideGroup__WEBPACK_IMPORTED_MODULE_60__[
+                  "VSlideGroup"
+                ];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideItem",
+              function () {
+                return _VSlideGroup__WEBPACK_IMPORTED_MODULE_60__["VSlideItem"];
+              }
+            );
+
+            /* harmony import */ var _VSnackbar__WEBPACK_IMPORTED_MODULE_61__ =
+              __webpack_require__(
+                /*! ./VSnackbar */ "./src/components/VSnackbar/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSnackbar",
+              function () {
+                return _VSnackbar__WEBPACK_IMPORTED_MODULE_61__["VSnackbar"];
+              }
+            );
+
+            /* harmony import */ var _VSparkline__WEBPACK_IMPORTED_MODULE_62__ =
+              __webpack_require__(
+                /*! ./VSparkline */ "./src/components/VSparkline/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSparkline",
+              function () {
+                return _VSparkline__WEBPACK_IMPORTED_MODULE_62__["VSparkline"];
+              }
+            );
+
+            /* harmony import */ var _VSpeedDial__WEBPACK_IMPORTED_MODULE_63__ =
+              __webpack_require__(
+                /*! ./VSpeedDial */ "./src/components/VSpeedDial/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSpeedDial",
+              function () {
+                return _VSpeedDial__WEBPACK_IMPORTED_MODULE_63__["VSpeedDial"];
+              }
+            );
+
+            /* harmony import */ var _VStepper__WEBPACK_IMPORTED_MODULE_64__ =
+              __webpack_require__(
+                /*! ./VStepper */ "./src/components/VStepper/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepper",
+              function () {
+                return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepper"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperContent",
+              function () {
+                return _VStepper__WEBPACK_IMPORTED_MODULE_64__[
+                  "VStepperContent"
+                ];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperStep",
+              function () {
+                return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepperStep"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperHeader",
+              function () {
+                return _VStepper__WEBPACK_IMPORTED_MODULE_64__[
+                  "VStepperHeader"
+                ];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VStepperItems",
+              function () {
+                return _VStepper__WEBPACK_IMPORTED_MODULE_64__["VStepperItems"];
+              }
+            );
+
+            /* harmony import */ var _VSubheader__WEBPACK_IMPORTED_MODULE_65__ =
+              __webpack_require__(
+                /*! ./VSubheader */ "./src/components/VSubheader/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSubheader",
+              function () {
+                return _VSubheader__WEBPACK_IMPORTED_MODULE_65__["VSubheader"];
+              }
+            );
+
+            /* harmony import */ var _VSwitch__WEBPACK_IMPORTED_MODULE_66__ =
+              __webpack_require__(
+                /*! ./VSwitch */ "./src/components/VSwitch/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSwitch",
+              function () {
+                return _VSwitch__WEBPACK_IMPORTED_MODULE_66__["VSwitch"];
+              }
+            );
+
+            /* harmony import */ var _VSystemBar__WEBPACK_IMPORTED_MODULE_67__ =
+              __webpack_require__(
+                /*! ./VSystemBar */ "./src/components/VSystemBar/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSystemBar",
+              function () {
+                return _VSystemBar__WEBPACK_IMPORTED_MODULE_67__["VSystemBar"];
+              }
+            );
+
+            /* harmony import */ var _VTabs__WEBPACK_IMPORTED_MODULE_68__ =
+              __webpack_require__(
+                /*! ./VTabs */ "./src/components/VTabs/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabs",
+              function () {
+                return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabs"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTab",
+              function () {
+                return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTab"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabItem",
+              function () {
+                return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabItem"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabsItems",
+              function () {
+                return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabsItems"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabsSlider",
+              function () {
+                return _VTabs__WEBPACK_IMPORTED_MODULE_68__["VTabsSlider"];
+              }
+            );
+
+            /* harmony import */ var _VTextarea__WEBPACK_IMPORTED_MODULE_69__ =
+              __webpack_require__(
+                /*! ./VTextarea */ "./src/components/VTextarea/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTextarea",
+              function () {
+                return _VTextarea__WEBPACK_IMPORTED_MODULE_69__["VTextarea"];
+              }
+            );
+
+            /* harmony import */ var _VTextField__WEBPACK_IMPORTED_MODULE_70__ =
+              __webpack_require__(
+                /*! ./VTextField */ "./src/components/VTextField/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTextField",
+              function () {
+                return _VTextField__WEBPACK_IMPORTED_MODULE_70__["VTextField"];
+              }
+            );
+
+            /* harmony import */ var _VThemeProvider__WEBPACK_IMPORTED_MODULE_71__ =
+              __webpack_require__(
+                /*! ./VThemeProvider */ "./src/components/VThemeProvider/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VThemeProvider",
+              function () {
+                return _VThemeProvider__WEBPACK_IMPORTED_MODULE_71__[
+                  "VThemeProvider"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VTimeline__WEBPACK_IMPORTED_MODULE_72__ =
+              __webpack_require__(
+                /*! ./VTimeline */ "./src/components/VTimeline/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimeline",
+              function () {
+                return _VTimeline__WEBPACK_IMPORTED_MODULE_72__["VTimeline"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimelineItem",
+              function () {
+                return _VTimeline__WEBPACK_IMPORTED_MODULE_72__[
+                  "VTimelineItem"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VTimePicker__WEBPACK_IMPORTED_MODULE_73__ =
+              __webpack_require__(
+                /*! ./VTimePicker */ "./src/components/VTimePicker/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimePicker",
+              function () {
+                return _VTimePicker__WEBPACK_IMPORTED_MODULE_73__[
+                  "VTimePicker"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimePickerClock",
+              function () {
+                return _VTimePicker__WEBPACK_IMPORTED_MODULE_73__[
+                  "VTimePickerClock"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTimePickerTitle",
+              function () {
+                return _VTimePicker__WEBPACK_IMPORTED_MODULE_73__[
+                  "VTimePickerTitle"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VToolbar__WEBPACK_IMPORTED_MODULE_74__ =
+              __webpack_require__(
+                /*! ./VToolbar */ "./src/components/VToolbar/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VToolbar",
+              function () {
+                return _VToolbar__WEBPACK_IMPORTED_MODULE_74__["VToolbar"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VToolbarItems",
+              function () {
+                return _VToolbar__WEBPACK_IMPORTED_MODULE_74__["VToolbarItems"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VToolbarTitle",
+              function () {
+                return _VToolbar__WEBPACK_IMPORTED_MODULE_74__["VToolbarTitle"];
+              }
+            );
+
+            /* harmony import */ var _VTooltip__WEBPACK_IMPORTED_MODULE_75__ =
+              __webpack_require__(
+                /*! ./VTooltip */ "./src/components/VTooltip/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTooltip",
+              function () {
+                return _VTooltip__WEBPACK_IMPORTED_MODULE_75__["VTooltip"];
+              }
+            );
+
+            /* harmony import */ var _VTreeview__WEBPACK_IMPORTED_MODULE_76__ =
+              __webpack_require__(
+                /*! ./VTreeview */ "./src/components/VTreeview/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTreeview",
+              function () {
+                return _VTreeview__WEBPACK_IMPORTED_MODULE_76__["VTreeview"];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTreeviewNode",
+              function () {
+                return _VTreeview__WEBPACK_IMPORTED_MODULE_76__[
+                  "VTreeviewNode"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VVirtualScroll__WEBPACK_IMPORTED_MODULE_77__ =
+              __webpack_require__(
+                /*! ./VVirtualScroll */ "./src/components/VVirtualScroll/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VVirtualScroll",
+              function () {
+                return _VVirtualScroll__WEBPACK_IMPORTED_MODULE_77__[
+                  "VVirtualScroll"
+                ];
+              }
+            );
+
+            /* harmony import */ var _VWindow__WEBPACK_IMPORTED_MODULE_78__ =
+              __webpack_require__(
+                /*! ./VWindow */ "./src/components/VWindow/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VWindow",
+              function () {
+                return _VWindow__WEBPACK_IMPORTED_MODULE_78__["VWindow"];
+              }
+            );
 
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VWindowItem",
+              function () {
+                return _VWindow__WEBPACK_IMPORTED_MODULE_78__["VWindowItem"];
+              }
+            );
+
+            /* harmony import */ var _transitions__WEBPACK_IMPORTED_MODULE_79__ =
+              __webpack_require__(
+                /*! ./transitions */ "./src/components/transitions/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarouselTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VCarouselTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarouselReverseTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VCarouselReverseTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VTabTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabReverseTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VTabReverseTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMenuTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VMenuTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFabTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VFabTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDialogTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VDialogTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDialogBottomTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VDialogBottomTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFadeTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VFadeTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScaleTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VScaleTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollXTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VScrollXTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollXReverseTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VScrollXReverseTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollYTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VScrollYTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollYReverseTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VScrollYReverseTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideXTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VSlideXTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideXReverseTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VSlideXReverseTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideYTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VSlideYTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideYReverseTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VSlideYReverseTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpandTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VExpandTransition"
+                ];
+              }
+            );
+
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpandXTransition",
+              function () {
+                return _transitions__WEBPACK_IMPORTED_MODULE_79__[
+                  "VExpandXTransition"
+                ];
+              }
+            );
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/transitions/createTransition.ts":
-/*!********************************************************!*\
+        /***/ "./src/components/transitions/createTransition.ts":
+          /*!********************************************************!*\
   !*** ./src/components/transitions/createTransition.ts ***!
   \********************************************************/
-/*! exports provided: createSimpleTransition, createJavascriptTransition */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSimpleTransition", function() { return createSimpleTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createJavascriptTransition", function() { return createJavascriptTransition; });
-/* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/mergeData */ "./src/util/mergeData.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
+          /*! exports provided: createSimpleTransition, createJavascriptTransition */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createSimpleTransition",
+              function () {
+                return createSimpleTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createJavascriptTransition",
+              function () {
+                return createJavascriptTransition;
+              }
+            );
+            /* harmony import */ var _util_mergeData__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/mergeData */ "./src/util/mergeData.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-  return ar;
-};
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
+                return ar;
+              };
 
-function mergeTransitions(dest) {
-  var _a;
+            function mergeTransitions(dest) {
+              var _a;
 
-  if (dest === void 0) {
-    dest = [];
-  }
+              if (dest === void 0) {
+                dest = [];
+              }
 
-  var transitions = [];
+              var transitions = [];
 
-  for (var _i = 1; _i < arguments.length; _i++) {
-    transitions[_i - 1] = arguments[_i];
-  }
-  /* eslint-disable-next-line no-array-constructor */
+              for (var _i = 1; _i < arguments.length; _i++) {
+                transitions[_i - 1] = arguments[_i];
+              }
+              /* eslint-disable-next-line no-array-constructor */
 
+              return (_a = Array()).concat.apply(
+                _a,
+                __spread([dest], transitions)
+              );
+            }
 
-  return (_a = Array()).concat.apply(_a, __spread([dest], transitions));
-}
+            function createSimpleTransition(name, origin, mode) {
+              if (origin === void 0) {
+                origin = "top center 0";
+              }
 
-function createSimpleTransition(name, origin, mode) {
-  if (origin === void 0) {
-    origin = 'top center 0';
-  }
+              return {
+                name: name,
+                functional: true,
+                props: {
+                  group: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  hideOnLeave: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  leaveAbsolute: {
+                    type: Boolean,
+                    default: false,
+                  },
+                  mode: {
+                    type: String,
+                    default: mode,
+                  },
+                  origin: {
+                    type: String,
+                    default: origin,
+                  },
+                },
+                render: function render(h, context) {
+                  var tag =
+                    "transition" + (context.props.group ? "-group" : "");
+                  var data = {
+                    props: {
+                      name: name,
+                      mode: context.props.mode,
+                    },
+                    on: {
+                      beforeEnter: function beforeEnter(el) {
+                        el.style.transformOrigin = context.props.origin;
+                        el.style.webkitTransformOrigin = context.props.origin;
+                      },
+                    },
+                  };
+
+                  if (context.props.leaveAbsolute) {
+                    data.on.leave = mergeTransitions(
+                      data.on.leave,
+                      function (el) {
+                        return (el.style.position = "absolute");
+                      }
+                    );
+                  }
 
-  return {
-    name: name,
-    functional: true,
-    props: {
-      group: {
-        type: Boolean,
-        default: false
-      },
-      hideOnLeave: {
-        type: Boolean,
-        default: false
-      },
-      leaveAbsolute: {
-        type: Boolean,
-        default: false
-      },
-      mode: {
-        type: String,
-        default: mode
-      },
-      origin: {
-        type: String,
-        default: origin
-      }
-    },
-    render: function render(h, context) {
-      var tag = "transition" + (context.props.group ? '-group' : '');
-      var data = {
-        props: {
-          name: name,
-          mode: context.props.mode
-        },
-        on: {
-          beforeEnter: function beforeEnter(el) {
-            el.style.transformOrigin = context.props.origin;
-            el.style.webkitTransformOrigin = context.props.origin;
-          }
-        }
-      };
+                  if (context.props.hideOnLeave) {
+                    data.on.leave = mergeTransitions(
+                      data.on.leave,
+                      function (el) {
+                        return (el.style.display = "none");
+                      }
+                    );
+                  }
 
-      if (context.props.leaveAbsolute) {
-        data.on.leave = mergeTransitions(data.on.leave, function (el) {
-          return el.style.position = 'absolute';
-        });
-      }
+                  return h(
+                    tag,
+                    Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_0__["default"]
+                    )(context.data, data),
+                    context.children
+                  );
+                },
+              };
+            }
+            function createJavascriptTransition(name, functions, mode) {
+              if (mode === void 0) {
+                mode = "in-out";
+              }
 
-      if (context.props.hideOnLeave) {
-        data.on.leave = mergeTransitions(data.on.leave, function (el) {
-          return el.style.display = 'none';
-        });
-      }
+              return {
+                name: name,
+                functional: true,
+                props: {
+                  mode: {
+                    type: String,
+                    default: mode,
+                  },
+                },
+                render: function render(h, context) {
+                  return h(
+                    "transition",
+                    Object(
+                      _util_mergeData__WEBPACK_IMPORTED_MODULE_0__["default"]
+                    )(context.data, {
+                      props: {
+                        name: name,
+                      },
+                      on: functions,
+                    }),
+                    context.children
+                  );
+                },
+              };
+            }
 
-      return h(tag, Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_0__["default"])(context.data, data), context.children);
-    }
-  };
-}
-function createJavascriptTransition(name, functions, mode) {
-  if (mode === void 0) {
-    mode = 'in-out';
-  }
+            /***/
+          },
 
-  return {
-    name: name,
-    functional: true,
-    props: {
-      mode: {
-        type: String,
-        default: mode
-      }
-    },
-    render: function render(h, context) {
-      return h('transition', Object(_util_mergeData__WEBPACK_IMPORTED_MODULE_0__["default"])(context.data, {
-        props: {
-          name: name
-        },
-        on: functions
-      }), context.children);
-    }
-  };
-}
-
-/***/ }),
-
-/***/ "./src/components/transitions/expand-transition.ts":
-/*!*********************************************************!*\
+        /***/ "./src/components/transitions/expand-transition.ts":
+          /*!*********************************************************!*\
   !*** ./src/components/transitions/expand-transition.ts ***!
   \*********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              function (expandedParentClass, x) {
+                if (expandedParentClass === void 0) {
+                  expandedParentClass = "";
+                }
 
-/* harmony default export */ __webpack_exports__["default"] = (function (expandedParentClass, x) {
-  if (expandedParentClass === void 0) {
-    expandedParentClass = '';
-  }
+                if (x === void 0) {
+                  x = false;
+                }
 
-  if (x === void 0) {
-    x = false;
-  }
+                var sizeProperty = x ? "width" : "height";
+                var offsetProperty =
+                  "offset" +
+                  Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_0__["upperFirst"]
+                  )(sizeProperty);
+                return {
+                  beforeEnter: function beforeEnter(el) {
+                    var _a;
+
+                    el._parent = el.parentNode;
+                    el._initialStyle =
+                      ((_a = {
+                        transition: el.style.transition,
+                        overflow: el.style.overflow,
+                      }),
+                      (_a[sizeProperty] = el.style[sizeProperty]),
+                      _a);
+                  },
+                  enter: function enter(el) {
+                    var initialStyle = el._initialStyle;
+                    el.style.setProperty("transition", "none", "important"); // Hide overflow to account for collapsed margins in the calculated height
+
+                    el.style.overflow = "hidden";
+                    var offset = el[offsetProperty] + "px";
+                    el.style[sizeProperty] = "0";
+                    void el.offsetHeight; // force reflow
+
+                    el.style.transition = initialStyle.transition;
+
+                    if (expandedParentClass && el._parent) {
+                      el._parent.classList.add(expandedParentClass);
+                    }
+
+                    requestAnimationFrame(function () {
+                      el.style[sizeProperty] = offset;
+                    });
+                  },
+                  afterEnter: resetStyles,
+                  enterCancelled: resetStyles,
+                  leave: function leave(el) {
+                    var _a;
+
+                    el._initialStyle =
+                      ((_a = {
+                        transition: "",
+                        overflow: el.style.overflow,
+                      }),
+                      (_a[sizeProperty] = el.style[sizeProperty]),
+                      _a);
+                    el.style.overflow = "hidden";
+                    el.style[sizeProperty] = el[offsetProperty] + "px";
+                    void el.offsetHeight; // force reflow
+
+                    requestAnimationFrame(function () {
+                      return (el.style[sizeProperty] = "0");
+                    });
+                  },
+                  afterLeave: afterLeave,
+                  leaveCancelled: afterLeave,
+                };
 
-  var sizeProperty = x ? 'width' : 'height';
-  var offsetProperty = "offset" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["upperFirst"])(sizeProperty);
-  return {
-    beforeEnter: function beforeEnter(el) {
-      var _a;
-
-      el._parent = el.parentNode;
-      el._initialStyle = (_a = {
-        transition: el.style.transition,
-        overflow: el.style.overflow
-      }, _a[sizeProperty] = el.style[sizeProperty], _a);
-    },
-    enter: function enter(el) {
-      var initialStyle = el._initialStyle;
-      el.style.setProperty('transition', 'none', 'important'); // Hide overflow to account for collapsed margins in the calculated height
-
-      el.style.overflow = 'hidden';
-      var offset = el[offsetProperty] + "px";
-      el.style[sizeProperty] = '0';
-      void el.offsetHeight; // force reflow
-
-      el.style.transition = initialStyle.transition;
-
-      if (expandedParentClass && el._parent) {
-        el._parent.classList.add(expandedParentClass);
-      }
+                function afterLeave(el) {
+                  if (expandedParentClass && el._parent) {
+                    el._parent.classList.remove(expandedParentClass);
+                  }
 
-      requestAnimationFrame(function () {
-        el.style[sizeProperty] = offset;
-      });
-    },
-    afterEnter: resetStyles,
-    enterCancelled: resetStyles,
-    leave: function leave(el) {
-      var _a;
-
-      el._initialStyle = (_a = {
-        transition: '',
-        overflow: el.style.overflow
-      }, _a[sizeProperty] = el.style[sizeProperty], _a);
-      el.style.overflow = 'hidden';
-      el.style[sizeProperty] = el[offsetProperty] + "px";
-      void el.offsetHeight; // force reflow
-
-      requestAnimationFrame(function () {
-        return el.style[sizeProperty] = '0';
-      });
-    },
-    afterLeave: afterLeave,
-    leaveCancelled: afterLeave
-  };
-
-  function afterLeave(el) {
-    if (expandedParentClass && el._parent) {
-      el._parent.classList.remove(expandedParentClass);
-    }
-
-    resetStyles(el);
-  }
+                  resetStyles(el);
+                }
 
-  function resetStyles(el) {
-    var size = el._initialStyle[sizeProperty];
-    el.style.overflow = el._initialStyle.overflow;
-    if (size != null) el.style[sizeProperty] = size;
-    delete el._initialStyle;
-  }
-});
+                function resetStyles(el) {
+                  var size = el._initialStyle[sizeProperty];
+                  el.style.overflow = el._initialStyle.overflow;
+                  if (size != null) el.style[sizeProperty] = size;
+                  delete el._initialStyle;
+                }
+              };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/components/transitions/index.ts":
-/*!*********************************************!*\
+        /***/ "./src/components/transitions/index.ts":
+          /*!*********************************************!*\
   !*** ./src/components/transitions/index.ts ***!
   \*********************************************/
-/*! exports provided: VCarouselTransition, VCarouselReverseTransition, VTabTransition, VTabReverseTransition, VMenuTransition, VFabTransition, VDialogTransition, VDialogBottomTransition, VFadeTransition, VScaleTransition, VScrollXTransition, VScrollXReverseTransition, VScrollYTransition, VScrollYReverseTransition, VSlideXTransition, VSlideXReverseTransition, VSlideYTransition, VSlideYReverseTransition, VExpandTransition, VExpandXTransition, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VCarouselTransition", function() { return VCarouselTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VCarouselReverseTransition", function() { return VCarouselReverseTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VTabTransition", function() { return VTabTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VTabReverseTransition", function() { return VTabReverseTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VMenuTransition", function() { return VMenuTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VFabTransition", function() { return VFabTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VDialogTransition", function() { return VDialogTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VDialogBottomTransition", function() { return VDialogBottomTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VFadeTransition", function() { return VFadeTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VScaleTransition", function() { return VScaleTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VScrollXTransition", function() { return VScrollXTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VScrollXReverseTransition", function() { return VScrollXReverseTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VScrollYTransition", function() { return VScrollYTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VScrollYReverseTransition", function() { return VScrollYReverseTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VSlideXTransition", function() { return VSlideXTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VSlideXReverseTransition", function() { return VSlideXReverseTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VSlideYTransition", function() { return VSlideYTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VSlideYReverseTransition", function() { return VSlideYReverseTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VExpandTransition", function() { return VExpandTransition; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VExpandXTransition", function() { return VExpandXTransition; });
-/* harmony import */ var _createTransition__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createTransition */ "./src/components/transitions/createTransition.ts");
-/* harmony import */ var _expand_transition__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./expand-transition */ "./src/components/transitions/expand-transition.ts");
-
- // Component specific transitions
-
-var VCarouselTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('carousel-transition');
-var VCarouselReverseTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('carousel-reverse-transition');
-var VTabTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('tab-transition');
-var VTabReverseTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('tab-reverse-transition');
-var VMenuTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('menu-transition');
-var VFabTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('fab-transition', 'center center', 'out-in'); // Generic transitions
-
-var VDialogTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('dialog-transition');
-var VDialogBottomTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('dialog-bottom-transition');
-var VFadeTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('fade-transition');
-var VScaleTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('scale-transition');
-var VScrollXTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('scroll-x-transition');
-var VScrollXReverseTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('scroll-x-reverse-transition');
-var VScrollYTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('scroll-y-transition');
-var VScrollYReverseTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('scroll-y-reverse-transition');
-var VSlideXTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('slide-x-transition');
-var VSlideXReverseTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('slide-x-reverse-transition');
-var VSlideYTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('slide-y-transition');
-var VSlideYReverseTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createSimpleTransition"])('slide-y-reverse-transition'); // Javascript transitions
-
-var VExpandTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createJavascriptTransition"])('expand-transition', Object(_expand_transition__WEBPACK_IMPORTED_MODULE_1__["default"])());
-var VExpandXTransition = Object(_createTransition__WEBPACK_IMPORTED_MODULE_0__["createJavascriptTransition"])('expand-x-transition', Object(_expand_transition__WEBPACK_IMPORTED_MODULE_1__["default"])('', true));
-/* harmony default export */ __webpack_exports__["default"] = ({
-  $_vuetify_subcomponents: {
-    VCarouselTransition: VCarouselTransition,
-    VCarouselReverseTransition: VCarouselReverseTransition,
-    VDialogTransition: VDialogTransition,
-    VDialogBottomTransition: VDialogBottomTransition,
-    VFabTransition: VFabTransition,
-    VFadeTransition: VFadeTransition,
-    VMenuTransition: VMenuTransition,
-    VScaleTransition: VScaleTransition,
-    VScrollXTransition: VScrollXTransition,
-    VScrollXReverseTransition: VScrollXReverseTransition,
-    VScrollYTransition: VScrollYTransition,
-    VScrollYReverseTransition: VScrollYReverseTransition,
-    VSlideXTransition: VSlideXTransition,
-    VSlideXReverseTransition: VSlideXReverseTransition,
-    VSlideYTransition: VSlideYTransition,
-    VSlideYReverseTransition: VSlideYReverseTransition,
-    VTabReverseTransition: VTabReverseTransition,
-    VTabTransition: VTabTransition,
-    VExpandTransition: VExpandTransition,
-    VExpandXTransition: VExpandXTransition
-  }
-});
-
-/***/ }),
-
-/***/ "./src/directives/click-outside/index.ts":
-/*!***********************************************!*\
-  !*** ./src/directives/click-outside/index.ts ***!
-  \***********************************************/
-/*! exports provided: ClickOutside, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClickOutside", function() { return ClickOutside; });
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function defaultConditional() {
-  return true;
-}
-
-function directive(e, el, binding) {
-  var handler = typeof binding.value === 'function' ? binding.value : binding.value.handler;
-  var isActive = _typeof(binding.value) === 'object' && binding.value.closeConditional || defaultConditional; // The include element callbacks below can be expensive
-  // so we should avoid calling them when we're not active.
-  // Explicitly check for false to allow fallback compatibility
-  // with non-toggleable components
-
-  if (!e || isActive(e) === false) return; // Check if additional elements were passed to be included in check
-  // (click must be outside all included elements, if any)
-
-  var elements = (_typeof(binding.value) === 'object' && binding.value.include || function () {
-    return [];
-  })(); // Add the root element for the component this directive was defined on
-
-
-  elements.push(el); // Check if it's a click outside our elements, and then if our callback returns true.
-  // Non-toggleable components should take action in their callback and return falsy.
-  // Toggleable can return true if it wants to deactivate.
-  // Note that, because we're in the capture phase, this callback will occur before
-  // the bubbling click event on any outside elements.
-
-  !elements.some(function (el) {
-    return el.contains(e.target);
-  }) && setTimeout(function () {
-    isActive(e) && handler && handler(e);
-  }, 0);
-}
-
-var ClickOutside = {
-  // [data-app] may not be found
-  // if using bind, inserted makes
-  // sure that the root element is
-  // available, iOS does not support
-  // clicks on body
-  inserted: function inserted(el, binding) {
-    var onClick = function onClick(e) {
-      return directive(e, el, binding);
-    }; // iOS does not recognize click events on document
-    // or body, this is the entire purpose of the v-app
-    // component and [data-app], stop removing this
-
-
-    var app = document.querySelector('[data-app]') || document.body; // This is only for unit tests
-
-    app.addEventListener('click', onClick, true);
-    el._clickOutside = onClick;
-  },
-  unbind: function unbind(el) {
-    if (!el._clickOutside) return;
-    var app = document.querySelector('[data-app]') || document.body; // This is only for unit tests
-
-    app && app.removeEventListener('click', el._clickOutside, true);
-    delete el._clickOutside;
-  }
-};
-/* harmony default export */ __webpack_exports__["default"] = (ClickOutside);
-
-/***/ }),
-
-/***/ "./src/directives/index.ts":
-/*!*********************************!*\
-  !*** ./src/directives/index.ts ***!
-  \*********************************/
-/*! exports provided: ClickOutside, Intersect, Mutate, Resize, Ripple, Scroll, Touch */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _click_outside__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./click-outside */ "./src/directives/click-outside/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ClickOutside", function() { return _click_outside__WEBPACK_IMPORTED_MODULE_0__["ClickOutside"]; });
-
-/* harmony import */ var _intersect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./intersect */ "./src/directives/intersect/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Intersect", function() { return _intersect__WEBPACK_IMPORTED_MODULE_1__["Intersect"]; });
-
-/* harmony import */ var _mutate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mutate */ "./src/directives/mutate/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Mutate", function() { return _mutate__WEBPACK_IMPORTED_MODULE_2__["Mutate"]; });
-
-/* harmony import */ var _resize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./resize */ "./src/directives/resize/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Resize", function() { return _resize__WEBPACK_IMPORTED_MODULE_3__["Resize"]; });
-
-/* harmony import */ var _ripple__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ripple */ "./src/directives/ripple/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Ripple", function() { return _ripple__WEBPACK_IMPORTED_MODULE_4__["Ripple"]; });
-
-/* harmony import */ var _scroll__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./scroll */ "./src/directives/scroll/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Scroll", function() { return _scroll__WEBPACK_IMPORTED_MODULE_5__["Scroll"]; });
-
-/* harmony import */ var _touch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./touch */ "./src/directives/touch/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Touch", function() { return _touch__WEBPACK_IMPORTED_MODULE_6__["Touch"]; });
-
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ "./src/directives/intersect/index.ts":
-/*!*******************************************!*\
-  !*** ./src/directives/intersect/index.ts ***!
-  \*******************************************/
-/*! exports provided: Intersect, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Intersect", function() { return Intersect; });
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function inserted(el, binding) {
-  var modifiers = binding.modifiers || {};
-  var value = binding.value;
-
-  var _a = _typeof(value) === 'object' ? value : {
-    handler: value,
-    options: {}
-  },
-      handler = _a.handler,
-      options = _a.options;
-
-  var observer = new IntersectionObserver(function (entries, observer) {
-    if (entries === void 0) {
-      entries = [];
-    }
-    /* istanbul ignore if */
-
-
-    if (!el._observe) return; // Just in case, should never fire
-    // If is not quiet or has already been
-    // initted, invoke the user callback
-
-    if (handler && (!modifiers.quiet || el._observe.init)) {
-      var isIntersecting = Boolean(entries.find(function (entry) {
-        return entry.isIntersecting;
-      }));
-      handler(entries, observer, isIntersecting);
-    } // If has already been initted and
-    // has the once modifier, unbind
-
-
-    if (el._observe.init && modifiers.once) unbind(el); // Otherwise, mark the observer as initted
-    else el._observe.init = true;
-  }, options);
-  el._observe = {
-    init: false,
-    observer: observer
-  };
-  observer.observe(el);
-}
-
-function unbind(el) {
-  /* istanbul ignore if */
-  if (!el._observe) return;
-
-  el._observe.observer.unobserve(el);
-
-  delete el._observe;
-}
-
-var Intersect = {
-  inserted: inserted,
-  unbind: unbind
-};
-/* harmony default export */ __webpack_exports__["default"] = (Intersect);
-
-/***/ }),
-
-/***/ "./src/directives/mutate/index.ts":
-/*!****************************************!*\
-  !*** ./src/directives/mutate/index.ts ***!
-  \****************************************/
-/*! exports provided: Mutate, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Mutate", function() { return Mutate; });
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __rest = undefined && undefined.__rest || function (s, e) {
-  var t = {};
-
-  for (var p in s) {
-    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
-  }
-
-  if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
-    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
-  }
-  return t;
-};
-
-function inserted(el, binding) {
-  var modifiers = binding.modifiers || {};
-  var value = binding.value;
-  var callback = _typeof(value) === 'object' ? value.handler : value;
-
-  var once = modifiers.once,
-      modifierKeys = __rest(modifiers, ["once"]);
-
-  var hasModifiers = Object.keys(modifierKeys).length > 0; // Options take top priority
-
-  var options = _typeof(value) === 'object' && value.options ? value.options : hasModifiers // If we have modifiers, use only those provided
-  ? {
-    attributes: modifierKeys.attr,
-    childList: modifierKeys.child,
-    subtree: modifierKeys.sub,
-    characterData: modifierKeys.char // Defaults to everything on
-
-  } : {
-    attributes: true,
-    childList: true,
-    subtree: true,
-    characterData: true
-  };
-  var observer = new MutationObserver(function (mutationsList, observer) {
-    /* istanbul ignore if */
-    if (!el._mutate) return; // Just in case, should never fire
-
-    callback(mutationsList, observer); // If has the once modifier, unbind
-
-    once && unbind(el);
-  });
-  observer.observe(el, options);
-  el._mutate = {
-    observer: observer
-  };
-}
-
-function unbind(el) {
-  /* istanbul ignore if */
-  if (!el._mutate) return;
-
-  el._mutate.observer.disconnect();
-
-  delete el._mutate;
-}
-
-var Mutate = {
-  inserted: inserted,
-  unbind: unbind
-};
-/* harmony default export */ __webpack_exports__["default"] = (Mutate);
-
-/***/ }),
-
-/***/ "./src/directives/resize/index.ts":
-/*!****************************************!*\
-  !*** ./src/directives/resize/index.ts ***!
-  \****************************************/
-/*! exports provided: Resize, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Resize", function() { return Resize; });
-function inserted(el, binding) {
-  var callback = binding.value;
-  var options = binding.options || {
-    passive: true
-  };
-  window.addEventListener('resize', callback, options);
-  el._onResize = {
-    callback: callback,
-    options: options
-  };
-
-  if (!binding.modifiers || !binding.modifiers.quiet) {
-    callback();
-  }
-}
-
-function unbind(el) {
-  if (!el._onResize) return;
-  var _a = el._onResize,
-      callback = _a.callback,
-      options = _a.options;
-  window.removeEventListener('resize', callback, options);
-  delete el._onResize;
-}
-
-var Resize = {
-  inserted: inserted,
-  unbind: unbind
-};
-/* harmony default export */ __webpack_exports__["default"] = (Resize);
-
-/***/ }),
-
-/***/ "./src/directives/ripple/VRipple.sass":
-/*!********************************************!*\
-  !*** ./src/directives/ripple/VRipple.sass ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// extracted by mini-css-extract-plugin
-
-/***/ }),
-
-/***/ "./src/directives/ripple/index.ts":
-/*!****************************************!*\
-  !*** ./src/directives/ripple/index.ts ***!
-  \****************************************/
-/*! exports provided: Ripple, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Ripple", function() { return Ripple; });
-/* harmony import */ var _VRipple_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VRipple.sass */ "./src/directives/ripple/VRipple.sass");
-/* harmony import */ var _VRipple_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_VRipple_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-}; // Styles
-
-
- // Utilities
-
-
-
-var DELAY_RIPPLE = 80;
-
-function transform(el, value) {
-  el.style.transform = value;
-  el.style.webkitTransform = value;
-}
-
-function opacity(el, value) {
-  el.style.opacity = value.toString();
-}
-
-function isTouchEvent(e) {
-  return e.constructor.name === 'TouchEvent';
-}
-
-function isKeyboardEvent(e) {
-  return e.constructor.name === 'KeyboardEvent';
-}
-
-var calculate = function calculate(e, el, value) {
-  if (value === void 0) {
-    value = {};
-  }
-
-  var localX = 0;
-  var localY = 0;
-
-  if (!isKeyboardEvent(e)) {
-    var offset = el.getBoundingClientRect();
-    var target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e;
-    localX = target.clientX - offset.left;
-    localY = target.clientY - offset.top;
-  }
-
-  var radius = 0;
-  var scale = 0.3;
-
-  if (el._ripple && el._ripple.circle) {
-    scale = 0.15;
-    radius = el.clientWidth / 2;
-    radius = value.center ? radius : radius + Math.sqrt(Math.pow(localX - radius, 2) + Math.pow(localY - radius, 2)) / 4;
-  } else {
-    radius = Math.sqrt(Math.pow(el.clientWidth, 2) + Math.pow(el.clientHeight, 2)) / 2;
-  }
-
-  var centerX = (el.clientWidth - radius * 2) / 2 + "px";
-  var centerY = (el.clientHeight - radius * 2) / 2 + "px";
-  var x = value.center ? centerX : localX - radius + "px";
-  var y = value.center ? centerY : localY - radius + "px";
-  return {
-    radius: radius,
-    scale: scale,
-    x: x,
-    y: y,
-    centerX: centerX,
-    centerY: centerY
-  };
-};
-
-var ripples = {
-  /* eslint-disable max-statements */
-  show: function show(e, el, value) {
-    if (value === void 0) {
-      value = {};
-    }
-
-    if (!el._ripple || !el._ripple.enabled) {
-      return;
-    }
-
-    var container = document.createElement('span');
-    var animation = document.createElement('span');
-    container.appendChild(animation);
-    container.className = 'v-ripple__container';
-
-    if (value.class) {
-      container.className += " " + value.class;
-    }
-
-    var _a = calculate(e, el, value),
-        radius = _a.radius,
-        scale = _a.scale,
-        x = _a.x,
-        y = _a.y,
-        centerX = _a.centerX,
-        centerY = _a.centerY;
-
-    var size = radius * 2 + "px";
-    animation.className = 'v-ripple__animation';
-    animation.style.width = size;
-    animation.style.height = size;
-    el.appendChild(container);
-    var computed = window.getComputedStyle(el);
-
-    if (computed && computed.position === 'static') {
-      el.style.position = 'relative';
-      el.dataset.previousPosition = 'static';
-    }
-
-    animation.classList.add('v-ripple__animation--enter');
-    animation.classList.add('v-ripple__animation--visible');
-    transform(animation, "translate(" + x + ", " + y + ") scale3d(" + scale + "," + scale + "," + scale + ")");
-    opacity(animation, 0);
-    animation.dataset.activated = String(performance.now());
-    setTimeout(function () {
-      animation.classList.remove('v-ripple__animation--enter');
-      animation.classList.add('v-ripple__animation--in');
-      transform(animation, "translate(" + centerX + ", " + centerY + ") scale3d(1,1,1)");
-      opacity(animation, 0.25);
-    }, 0);
-  },
-  hide: function hide(el) {
-    if (!el || !el._ripple || !el._ripple.enabled) return;
-    var ripples = el.getElementsByClassName('v-ripple__animation');
-    if (ripples.length === 0) return;
-    var animation = ripples[ripples.length - 1];
-    if (animation.dataset.isHiding) return;else animation.dataset.isHiding = 'true';
-    var diff = performance.now() - Number(animation.dataset.activated);
-    var delay = Math.max(250 - diff, 0);
-    setTimeout(function () {
-      animation.classList.remove('v-ripple__animation--in');
-      animation.classList.add('v-ripple__animation--out');
-      opacity(animation, 0);
-      setTimeout(function () {
-        var ripples = el.getElementsByClassName('v-ripple__animation');
-
-        if (ripples.length === 1 && el.dataset.previousPosition) {
-          el.style.position = el.dataset.previousPosition;
-          delete el.dataset.previousPosition;
-        }
-
-        animation.parentNode && el.removeChild(animation.parentNode);
-      }, 300);
-    }, delay);
-  }
-};
-
-function isRippleEnabled(value) {
-  return typeof value === 'undefined' || !!value;
-}
-
-function rippleShow(e) {
-  var value = {};
-  var element = e.currentTarget;
-  if (!element || !element._ripple || element._ripple.touched) return;
-
-  if (isTouchEvent(e)) {
-    element._ripple.touched = true;
-    element._ripple.isTouch = true;
-  } else {
-    // It's possible for touch events to fire
-    // as mouse events on Android/iOS, this
-    // will skip the event call if it has
-    // already been registered as touch
-    if (element._ripple.isTouch) return;
-  }
-
-  value.center = element._ripple.centered || isKeyboardEvent(e);
-
-  if (element._ripple.class) {
-    value.class = element._ripple.class;
-  }
-
-  if (isTouchEvent(e)) {
-    // already queued that shows or hides the ripple
-    if (element._ripple.showTimerCommit) return;
-
-    element._ripple.showTimerCommit = function () {
-      ripples.show(e, element, value);
-    };
-
-    element._ripple.showTimer = window.setTimeout(function () {
-      if (element && element._ripple && element._ripple.showTimerCommit) {
-        element._ripple.showTimerCommit();
+          /*! exports provided: VCarouselTransition, VCarouselReverseTransition, VTabTransition, VTabReverseTransition, VMenuTransition, VFabTransition, VDialogTransition, VDialogBottomTransition, VFadeTransition, VScaleTransition, VScrollXTransition, VScrollXReverseTransition, VScrollYTransition, VScrollYReverseTransition, VSlideXTransition, VSlideXReverseTransition, VSlideYTransition, VSlideYReverseTransition, VExpandTransition, VExpandXTransition, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarouselTransition",
+              function () {
+                return VCarouselTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VCarouselReverseTransition",
+              function () {
+                return VCarouselReverseTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabTransition",
+              function () {
+                return VTabTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VTabReverseTransition",
+              function () {
+                return VTabReverseTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VMenuTransition",
+              function () {
+                return VMenuTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFabTransition",
+              function () {
+                return VFabTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDialogTransition",
+              function () {
+                return VDialogTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VDialogBottomTransition",
+              function () {
+                return VDialogBottomTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VFadeTransition",
+              function () {
+                return VFadeTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScaleTransition",
+              function () {
+                return VScaleTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollXTransition",
+              function () {
+                return VScrollXTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollXReverseTransition",
+              function () {
+                return VScrollXReverseTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollYTransition",
+              function () {
+                return VScrollYTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VScrollYReverseTransition",
+              function () {
+                return VScrollYReverseTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideXTransition",
+              function () {
+                return VSlideXTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideXReverseTransition",
+              function () {
+                return VSlideXReverseTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideYTransition",
+              function () {
+                return VSlideYTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VSlideYReverseTransition",
+              function () {
+                return VSlideYReverseTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpandTransition",
+              function () {
+                return VExpandTransition;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "VExpandXTransition",
+              function () {
+                return VExpandXTransition;
+              }
+            );
+            /* harmony import */ var _createTransition__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./createTransition */ "./src/components/transitions/createTransition.ts"
+              );
+            /* harmony import */ var _expand_transition__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./expand-transition */ "./src/components/transitions/expand-transition.ts"
+              );
+
+            // Component specific transitions
+
+            var VCarouselTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("carousel-transition");
+            var VCarouselReverseTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("carousel-reverse-transition");
+            var VTabTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("tab-transition");
+            var VTabReverseTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("tab-reverse-transition");
+            var VMenuTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("menu-transition");
+            var VFabTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("fab-transition", "center center", "out-in"); // Generic transitions
+
+            var VDialogTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("dialog-transition");
+            var VDialogBottomTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("dialog-bottom-transition");
+            var VFadeTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("fade-transition");
+            var VScaleTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("scale-transition");
+            var VScrollXTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("scroll-x-transition");
+            var VScrollXReverseTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("scroll-x-reverse-transition");
+            var VScrollYTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("scroll-y-transition");
+            var VScrollYReverseTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("scroll-y-reverse-transition");
+            var VSlideXTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("slide-x-transition");
+            var VSlideXReverseTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("slide-x-reverse-transition");
+            var VSlideYTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("slide-y-transition");
+            var VSlideYReverseTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createSimpleTransition"
+              ]
+            )("slide-y-reverse-transition"); // Javascript transitions
+
+            var VExpandTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createJavascriptTransition"
+              ]
+            )(
+              "expand-transition",
+              Object(
+                _expand_transition__WEBPACK_IMPORTED_MODULE_1__["default"]
+              )()
+            );
+            var VExpandXTransition = Object(
+              _createTransition__WEBPACK_IMPORTED_MODULE_0__[
+                "createJavascriptTransition"
+              ]
+            )(
+              "expand-x-transition",
+              Object(
+                _expand_transition__WEBPACK_IMPORTED_MODULE_1__["default"]
+              )("", true)
+            );
+            /* harmony default export */ __webpack_exports__["default"] = {
+              $_vuetify_subcomponents: {
+                VCarouselTransition: VCarouselTransition,
+                VCarouselReverseTransition: VCarouselReverseTransition,
+                VDialogTransition: VDialogTransition,
+                VDialogBottomTransition: VDialogBottomTransition,
+                VFabTransition: VFabTransition,
+                VFadeTransition: VFadeTransition,
+                VMenuTransition: VMenuTransition,
+                VScaleTransition: VScaleTransition,
+                VScrollXTransition: VScrollXTransition,
+                VScrollXReverseTransition: VScrollXReverseTransition,
+                VScrollYTransition: VScrollYTransition,
+                VScrollYReverseTransition: VScrollYReverseTransition,
+                VSlideXTransition: VSlideXTransition,
+                VSlideXReverseTransition: VSlideXReverseTransition,
+                VSlideYTransition: VSlideYTransition,
+                VSlideYReverseTransition: VSlideYReverseTransition,
+                VTabReverseTransition: VTabReverseTransition,
+                VTabTransition: VTabTransition,
+                VExpandTransition: VExpandTransition,
+                VExpandXTransition: VExpandXTransition,
+              },
+            };
 
-        element._ripple.showTimerCommit = null;
-      }
-    }, DELAY_RIPPLE);
-  } else {
-    ripples.show(e, element, value);
-  }
-}
+            /***/
+          },
 
-function rippleHide(e) {
-  var element = e.currentTarget;
-  if (!element || !element._ripple) return;
-  window.clearTimeout(element._ripple.showTimer); // The touch interaction occurs before the show timer is triggered.
-  // We still want to show ripple effect.
+        /***/ "./src/directives/click-outside/index.ts":
+          /*!***********************************************!*\
+  !*** ./src/directives/click-outside/index.ts ***!
+  \***********************************************/
+          /*! exports provided: ClickOutside, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ClickOutside",
+              function () {
+                return ClickOutside;
+              }
+            );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-  if (e.type === 'touchend' && element._ripple.showTimerCommit) {
-    element._ripple.showTimerCommit();
+            function defaultConditional() {
+              return true;
+            }
 
-    element._ripple.showTimerCommit = null; // re-queue ripple hiding
+            function directive(e, el, binding) {
+              var handler =
+                typeof binding.value === "function"
+                  ? binding.value
+                  : binding.value.handler;
+              var isActive =
+                (_typeof(binding.value) === "object" &&
+                  binding.value.closeConditional) ||
+                defaultConditional; // The include element callbacks below can be expensive
+              // so we should avoid calling them when we're not active.
+              // Explicitly check for false to allow fallback compatibility
+              // with non-toggleable components
+
+              if (!e || isActive(e) === false) return; // Check if additional elements were passed to be included in check
+              // (click must be outside all included elements, if any)
+
+              var elements = (
+                (_typeof(binding.value) === "object" &&
+                  binding.value.include) ||
+                function () {
+                  return [];
+                }
+              )(); // Add the root element for the component this directive was defined on
+
+              elements.push(el); // Check if it's a click outside our elements, and then if our callback returns true.
+              // Non-toggleable components should take action in their callback and return falsy.
+              // Toggleable can return true if it wants to deactivate.
+              // Note that, because we're in the capture phase, this callback will occur before
+              // the bubbling click event on any outside elements.
+
+              !elements.some(function (el) {
+                return el.contains(e.target);
+              }) &&
+                setTimeout(function () {
+                  isActive(e) && handler && handler(e);
+                }, 0);
+            }
 
-    element._ripple.showTimer = setTimeout(function () {
-      rippleHide(e);
-    });
-    return;
-  }
+            var ClickOutside = {
+              // [data-app] may not be found
+              // if using bind, inserted makes
+              // sure that the root element is
+              // available, iOS does not support
+              // clicks on body
+              inserted: function inserted(el, binding) {
+                var onClick = function onClick(e) {
+                  return directive(e, el, binding);
+                }; // iOS does not recognize click events on document
+                // or body, this is the entire purpose of the v-app
+                // component and [data-app], stop removing this
+
+                var app = document.querySelector("[data-app]") || document.body; // This is only for unit tests
+
+                app.addEventListener("click", onClick, true);
+                el._clickOutside = onClick;
+              },
+              unbind: function unbind(el) {
+                if (!el._clickOutside) return;
+                var app = document.querySelector("[data-app]") || document.body; // This is only for unit tests
+
+                app && app.removeEventListener("click", el._clickOutside, true);
+                delete el._clickOutside;
+              },
+            };
+            /* harmony default export */ __webpack_exports__["default"] =
+              ClickOutside;
 
-  window.setTimeout(function () {
-    if (element._ripple) {
-      element._ripple.touched = false;
-    }
-  });
-  ripples.hide(element);
-}
+            /***/
+          },
 
-function rippleCancelShow(e) {
-  var element = e.currentTarget;
-  if (!element || !element._ripple) return;
+        /***/ "./src/directives/index.ts":
+          /*!*********************************!*\
+  !*** ./src/directives/index.ts ***!
+  \*********************************/
+          /*! exports provided: ClickOutside, Intersect, Mutate, Resize, Ripple, Scroll, Touch */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _click_outside__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./click-outside */ "./src/directives/click-outside/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ClickOutside",
+              function () {
+                return _click_outside__WEBPACK_IMPORTED_MODULE_0__[
+                  "ClickOutside"
+                ];
+              }
+            );
+
+            /* harmony import */ var _intersect__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./intersect */ "./src/directives/intersect/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Intersect",
+              function () {
+                return _intersect__WEBPACK_IMPORTED_MODULE_1__["Intersect"];
+              }
+            );
+
+            /* harmony import */ var _mutate__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./mutate */ "./src/directives/mutate/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Mutate",
+              function () {
+                return _mutate__WEBPACK_IMPORTED_MODULE_2__["Mutate"];
+              }
+            );
+
+            /* harmony import */ var _resize__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./resize */ "./src/directives/resize/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Resize",
+              function () {
+                return _resize__WEBPACK_IMPORTED_MODULE_3__["Resize"];
+              }
+            );
+
+            /* harmony import */ var _ripple__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Ripple",
+              function () {
+                return _ripple__WEBPACK_IMPORTED_MODULE_4__["Ripple"];
+              }
+            );
+
+            /* harmony import */ var _scroll__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./scroll */ "./src/directives/scroll/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Scroll",
+              function () {
+                return _scroll__WEBPACK_IMPORTED_MODULE_5__["Scroll"];
+              }
+            );
+
+            /* harmony import */ var _touch__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./touch */ "./src/directives/touch/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Touch",
+              function () {
+                return _touch__WEBPACK_IMPORTED_MODULE_6__["Touch"];
+              }
+            );
 
-  if (element._ripple.showTimerCommit) {
-    element._ripple.showTimerCommit = null;
-  }
+            /***/
+          },
 
-  window.clearTimeout(element._ripple.showTimer);
-}
+        /***/ "./src/directives/intersect/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/directives/intersect/index.ts ***!
+  \*******************************************/
+          /*! exports provided: Intersect, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Intersect",
+              function () {
+                return Intersect;
+              }
+            );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-var keyboardRipple = false;
+            function inserted(el, binding) {
+              var modifiers = binding.modifiers || {};
+              var value = binding.value;
+
+              var _a =
+                  _typeof(value) === "object"
+                    ? value
+                    : {
+                        handler: value,
+                        options: {},
+                      },
+                handler = _a.handler,
+                options = _a.options;
+
+              var observer = new IntersectionObserver(function (
+                entries,
+                observer
+              ) {
+                if (entries === void 0) {
+                  entries = [];
+                }
+                /* istanbul ignore if */
+
+                if (!el._observe) return; // Just in case, should never fire
+                // If is not quiet or has already been
+                // initted, invoke the user callback
+
+                if (handler && (!modifiers.quiet || el._observe.init)) {
+                  var isIntersecting = Boolean(
+                    entries.find(function (entry) {
+                      return entry.isIntersecting;
+                    })
+                  );
+                  handler(entries, observer, isIntersecting);
+                } // If has already been initted and
+                // has the once modifier, unbind
+
+                if (el._observe.init && modifiers.once)
+                  unbind(el); // Otherwise, mark the observer as initted
+                else el._observe.init = true;
+              },
+              options);
+              el._observe = {
+                init: false,
+                observer: observer,
+              };
+              observer.observe(el);
+            }
 
-function keyboardRippleShow(e) {
-  if (!keyboardRipple && (e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_2__["keyCodes"].enter || e.keyCode === _util_helpers__WEBPACK_IMPORTED_MODULE_2__["keyCodes"].space)) {
-    keyboardRipple = true;
-    rippleShow(e);
-  }
-}
+            function unbind(el) {
+              /* istanbul ignore if */
+              if (!el._observe) return;
 
-function keyboardRippleHide(e) {
-  keyboardRipple = false;
-  rippleHide(e);
-}
+              el._observe.observer.unobserve(el);
 
-function updateRipple(el, binding, wasEnabled) {
-  var enabled = isRippleEnabled(binding.value);
+              delete el._observe;
+            }
 
-  if (!enabled) {
-    ripples.hide(el);
-  }
+            var Intersect = {
+              inserted: inserted,
+              unbind: unbind,
+            };
+            /* harmony default export */ __webpack_exports__["default"] =
+              Intersect;
 
-  el._ripple = el._ripple || {};
-  el._ripple.enabled = enabled;
-  var value = binding.value || {};
+            /***/
+          },
 
-  if (value.center) {
-    el._ripple.centered = true;
-  }
+        /***/ "./src/directives/mutate/index.ts":
+          /*!****************************************!*\
+  !*** ./src/directives/mutate/index.ts ***!
+  \****************************************/
+          /*! exports provided: Mutate, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Mutate",
+              function () {
+                return Mutate;
+              }
+            );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-  if (value.class) {
-    el._ripple.class = binding.value.class;
-  }
+            var __rest =
+              (undefined && undefined.__rest) ||
+              function (s, e) {
+                var t = {};
+
+                for (var p in s) {
+                  if (
+                    Object.prototype.hasOwnProperty.call(s, p) &&
+                    e.indexOf(p) < 0
+                  )
+                    t[p] = s[p];
+                }
 
-  if (value.circle) {
-    el._ripple.circle = value.circle;
-  }
+                if (
+                  s != null &&
+                  typeof Object.getOwnPropertySymbols === "function"
+                )
+                  for (
+                    var i = 0, p = Object.getOwnPropertySymbols(s);
+                    i < p.length;
+                    i++
+                  ) {
+                    if (
+                      e.indexOf(p[i]) < 0 &&
+                      Object.prototype.propertyIsEnumerable.call(s, p[i])
+                    )
+                      t[p[i]] = s[p[i]];
+                  }
+                return t;
+              };
 
-  if (enabled && !wasEnabled) {
-    el.addEventListener('touchstart', rippleShow, {
-      passive: true
-    });
-    el.addEventListener('touchend', rippleHide, {
-      passive: true
-    });
-    el.addEventListener('touchmove', rippleCancelShow, {
-      passive: true
-    });
-    el.addEventListener('touchcancel', rippleHide);
-    el.addEventListener('mousedown', rippleShow);
-    el.addEventListener('mouseup', rippleHide);
-    el.addEventListener('mouseleave', rippleHide);
-    el.addEventListener('keydown', keyboardRippleShow);
-    el.addEventListener('keyup', keyboardRippleHide); // Anchor tags can be dragged, causes other hides to fail - #1537
-
-    el.addEventListener('dragstart', rippleHide, {
-      passive: true
-    });
-  } else if (!enabled && wasEnabled) {
-    removeListeners(el);
-  }
-}
-
-function removeListeners(el) {
-  el.removeEventListener('mousedown', rippleShow);
-  el.removeEventListener('touchstart', rippleShow);
-  el.removeEventListener('touchend', rippleHide);
-  el.removeEventListener('touchmove', rippleCancelShow);
-  el.removeEventListener('touchcancel', rippleHide);
-  el.removeEventListener('mouseup', rippleHide);
-  el.removeEventListener('mouseleave', rippleHide);
-  el.removeEventListener('keydown', keyboardRippleShow);
-  el.removeEventListener('keyup', keyboardRippleHide);
-  el.removeEventListener('dragstart', rippleHide);
-}
-
-function directive(el, binding, node) {
-  updateRipple(el, binding, false);
-
-  if (true) {
-    // warn if an inline element is used, waiting for el to be in the DOM first
-    node.context && node.context.$nextTick(function () {
-      var computed = window.getComputedStyle(el);
-
-      if (computed && computed.display === 'inline') {
-        var context = node.fnOptions ? [node.fnOptions, node.context] : [node.componentInstance];
-        _util_console__WEBPACK_IMPORTED_MODULE_1__["consoleWarn"].apply(void 0, __spread(['v-ripple can only be used on block-level elements'], context));
-      }
-    });
-  }
-}
+            function inserted(el, binding) {
+              var modifiers = binding.modifiers || {};
+              var value = binding.value;
+              var callback =
+                _typeof(value) === "object" ? value.handler : value;
+
+              var once = modifiers.once,
+                modifierKeys = __rest(modifiers, ["once"]);
+
+              var hasModifiers = Object.keys(modifierKeys).length > 0; // Options take top priority
+
+              var options =
+                _typeof(value) === "object" && value.options
+                  ? value.options
+                  : hasModifiers // If we have modifiers, use only those provided
+                  ? {
+                      attributes: modifierKeys.attr,
+                      childList: modifierKeys.child,
+                      subtree: modifierKeys.sub,
+                      characterData: modifierKeys.char, // Defaults to everything on
+                    }
+                  : {
+                      attributes: true,
+                      childList: true,
+                      subtree: true,
+                      characterData: true,
+                    };
+              var observer = new MutationObserver(function (
+                mutationsList,
+                observer
+              ) {
+                /* istanbul ignore if */
+                if (!el._mutate) return; // Just in case, should never fire
+
+                callback(mutationsList, observer); // If has the once modifier, unbind
+
+                once && unbind(el);
+              });
+              observer.observe(el, options);
+              el._mutate = {
+                observer: observer,
+              };
+            }
 
-function unbind(el) {
-  delete el._ripple;
-  removeListeners(el);
-}
+            function unbind(el) {
+              /* istanbul ignore if */
+              if (!el._mutate) return;
 
-function update(el, binding) {
-  if (binding.value === binding.oldValue) {
-    return;
-  }
+              el._mutate.observer.disconnect();
 
-  var wasEnabled = isRippleEnabled(binding.oldValue);
-  updateRipple(el, binding, wasEnabled);
-}
+              delete el._mutate;
+            }
 
-var Ripple = {
-  bind: directive,
-  unbind: unbind,
-  update: update
-};
-/* harmony default export */ __webpack_exports__["default"] = (Ripple);
+            var Mutate = {
+              inserted: inserted,
+              unbind: unbind,
+            };
+            /* harmony default export */ __webpack_exports__["default"] =
+              Mutate;
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/directives/scroll/index.ts":
-/*!****************************************!*\
-  !*** ./src/directives/scroll/index.ts ***!
+        /***/ "./src/directives/resize/index.ts":
+          /*!****************************************!*\
+  !*** ./src/directives/resize/index.ts ***!
   \****************************************/
-/*! exports provided: Scroll, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scroll", function() { return Scroll; });
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-function inserted(el, binding) {
-  var _a = (binding.modifiers || {}).self,
-      self = _a === void 0 ? false : _a;
-  var value = binding.value;
-  var options = _typeof(value) === 'object' && value.options || {
-    passive: true
-  };
-  var handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler;
-  var target = self ? el : binding.arg ? document.querySelector(binding.arg) : window;
-  if (!target) return;
-  target.addEventListener('scroll', handler, options);
-  el._onScroll = {
-    handler: handler,
-    options: options,
-    // Don't reference self
-    target: self ? undefined : target
-  };
-}
-
-function unbind(el) {
-  if (!el._onScroll) return;
-  var _a = el._onScroll,
-      handler = _a.handler,
-      options = _a.options,
-      _b = _a.target,
-      target = _b === void 0 ? el : _b;
-  target.removeEventListener('scroll', handler, options);
-  delete el._onScroll;
-}
-
-var Scroll = {
-  inserted: inserted,
-  unbind: unbind
-};
-/* harmony default export */ __webpack_exports__["default"] = (Scroll);
-
-/***/ }),
-
-/***/ "./src/directives/touch/index.ts":
-/*!***************************************!*\
-  !*** ./src/directives/touch/index.ts ***!
-  \***************************************/
-/*! exports provided: Touch, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Touch", function() { return Touch; });
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-
-
-var handleGesture = function handleGesture(wrapper) {
-  var touchstartX = wrapper.touchstartX,
-      touchendX = wrapper.touchendX,
-      touchstartY = wrapper.touchstartY,
-      touchendY = wrapper.touchendY;
-  var dirRatio = 0.5;
-  var minDistance = 16;
-  wrapper.offsetX = touchendX - touchstartX;
-  wrapper.offsetY = touchendY - touchstartY;
-
-  if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {
-    wrapper.left && touchendX < touchstartX - minDistance && wrapper.left(wrapper);
-    wrapper.right && touchendX > touchstartX + minDistance && wrapper.right(wrapper);
-  }
-
-  if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {
-    wrapper.up && touchendY < touchstartY - minDistance && wrapper.up(wrapper);
-    wrapper.down && touchendY > touchstartY + minDistance && wrapper.down(wrapper);
-  }
-};
-
-function _touchstart(event, wrapper) {
-  var touch = event.changedTouches[0];
-  wrapper.touchstartX = touch.clientX;
-  wrapper.touchstartY = touch.clientY;
-  wrapper.start && wrapper.start(Object.assign(event, wrapper));
-}
-
-function _touchend(event, wrapper) {
-  var touch = event.changedTouches[0];
-  wrapper.touchendX = touch.clientX;
-  wrapper.touchendY = touch.clientY;
-  wrapper.end && wrapper.end(Object.assign(event, wrapper));
-  handleGesture(wrapper);
-}
-
-function _touchmove(event, wrapper) {
-  var touch = event.changedTouches[0];
-  wrapper.touchmoveX = touch.clientX;
-  wrapper.touchmoveY = touch.clientY;
-  wrapper.move && wrapper.move(Object.assign(event, wrapper));
-}
-
-function createHandlers(value) {
-  var wrapper = {
-    touchstartX: 0,
-    touchstartY: 0,
-    touchendX: 0,
-    touchendY: 0,
-    touchmoveX: 0,
-    touchmoveY: 0,
-    offsetX: 0,
-    offsetY: 0,
-    left: value.left,
-    right: value.right,
-    up: value.up,
-    down: value.down,
-    start: value.start,
-    move: value.move,
-    end: value.end
-  };
-  return {
-    touchstart: function touchstart(e) {
-      return _touchstart(e, wrapper);
-    },
-    touchend: function touchend(e) {
-      return _touchend(e, wrapper);
-    },
-    touchmove: function touchmove(e) {
-      return _touchmove(e, wrapper);
-    }
-  };
-}
-
-function inserted(el, binding, vnode) {
-  var value = binding.value;
-  var target = value.parent ? el.parentElement : el;
-  var options = value.options || {
-    passive: true
-  }; // Needed to pass unit tests
-
-  if (!target) return;
-  var handlers = createHandlers(binding.value);
-  target._touchHandlers = Object(target._touchHandlers);
-  target._touchHandlers[vnode.context._uid] = handlers;
-  Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["keys"])(handlers).forEach(function (eventName) {
-    target.addEventListener(eventName, handlers[eventName], options);
-  });
-}
-
-function unbind(el, binding, vnode) {
-  var target = binding.value.parent ? el.parentElement : el;
-  if (!target || !target._touchHandlers) return;
-  var handlers = target._touchHandlers[vnode.context._uid];
-  Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["keys"])(handlers).forEach(function (eventName) {
-    target.removeEventListener(eventName, handlers[eventName]);
-  });
-  delete target._touchHandlers[vnode.context._uid];
-}
-
-var Touch = {
-  inserted: inserted,
-  unbind: unbind
-};
-/* harmony default export */ __webpack_exports__["default"] = (Touch);
-
-/***/ }),
-
-/***/ "./src/framework.ts":
-/*!**************************!*\
-  !*** ./src/framework.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _install__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./install */ "./src/install.ts");
-/* harmony import */ var _services__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./services */ "./src/services/index.ts");
- // Services
-
-
-
-var Vuetify =
-/** @class */
-function () {
-  function Vuetify(userPreset) {
-    if (userPreset === void 0) {
-      userPreset = {};
-    }
-
-    this.framework = {
-      isHydrating: false
-    };
-    this.installed = [];
-    this.preset = {};
-    this.userPreset = {};
-    this.userPreset = userPreset;
-    this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Presets"]);
-    this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Application"]);
-    this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Breakpoint"]);
-    this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Goto"]);
-    this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Icons"]);
-    this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Lang"]);
-    this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Theme"]);
-  } // Called on the new vuetify instance
-  // bootstrap in install beforeCreate
-  // Exposes ssrContext if available
-
-
-  Vuetify.prototype.init = function (root, ssrContext) {
-    var _this = this;
-
-    this.installed.forEach(function (property) {
-      var service = _this.framework[property];
-      service.framework = _this.framework;
-      service.init(root, ssrContext);
-    }); // rtl is not installed and
-    // will never be called by
-    // the init process
-
-    this.framework.rtl = Boolean(this.preset.rtl);
-  }; // Instantiate a VuetifyService
-
-
-  Vuetify.prototype.use = function (Service) {
-    var property = Service.property;
-    if (this.installed.includes(property)) return; // TODO maybe a specific type for arg 2?
-
-    this.framework[property] = new Service(this.preset, this);
-    this.installed.push(property);
-  };
-
-  Vuetify.install = _install__WEBPACK_IMPORTED_MODULE_0__["install"];
-  Vuetify.installed = false;
-  Vuetify.version = "2.3.19";
-  Vuetify.config = {
-    silent: false
-  };
-  return Vuetify;
-}();
-
-/* harmony default export */ __webpack_exports__["default"] = (Vuetify);
-
-/***/ }),
-
-/***/ "./src/index.ts":
-/*!**********************!*\
-  !*** ./src/index.ts ***!
-  \**********************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components */ "./src/components/index.ts");
-/* harmony import */ var _directives__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./directives */ "./src/directives/index.ts");
-/* harmony import */ var _framework__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./framework */ "./src/framework.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
-
-
-/* harmony default export */ __webpack_exports__["default"] = (_framework__WEBPACK_IMPORTED_MODULE_2__["default"]);
-var install = _framework__WEBPACK_IMPORTED_MODULE_2__["default"].install;
+          /*! exports provided: Resize, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Resize",
+              function () {
+                return Resize;
+              }
+            );
+            function inserted(el, binding) {
+              var callback = binding.value;
+              var options = binding.options || {
+                passive: true,
+              };
+              window.addEventListener("resize", callback, options);
+              el._onResize = {
+                callback: callback,
+                options: options,
+              };
 
-_framework__WEBPACK_IMPORTED_MODULE_2__["default"].install = function (Vue, args) {
-  install.call(_framework__WEBPACK_IMPORTED_MODULE_2__["default"], Vue, __assign({
-    components: _components__WEBPACK_IMPORTED_MODULE_0__,
-    directives: _directives__WEBPACK_IMPORTED_MODULE_1__
-  }, args));
-};
+              if (!binding.modifiers || !binding.modifiers.quiet) {
+                callback();
+              }
+            }
 
-if (typeof window !== 'undefined' && window.Vue) {
-  window.Vue.use(_framework__WEBPACK_IMPORTED_MODULE_2__["default"]);
-}
+            function unbind(el) {
+              if (!el._onResize) return;
+              var _a = el._onResize,
+                callback = _a.callback,
+                options = _a.options;
+              window.removeEventListener("resize", callback, options);
+              delete el._onResize;
+            }
 
-/***/ }),
+            var Resize = {
+              inserted: inserted,
+              unbind: unbind,
+            };
+            /* harmony default export */ __webpack_exports__["default"] =
+              Resize;
 
-/***/ "./src/install.ts":
-/*!************************!*\
-  !*** ./src/install.ts ***!
-  \************************/
-/*! exports provided: install */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+            /***/
+          },
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "install", function() { return install; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util/console */ "./src/util/console.ts");
+        /***/ "./src/directives/ripple/VRipple.sass":
+          /*!********************************************!*\
+  !*** ./src/directives/ripple/VRipple.sass ***!
+  \********************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
+        /***/ "./src/directives/ripple/index.ts":
+          /*!****************************************!*\
+  !*** ./src/directives/ripple/index.ts ***!
+  \****************************************/
+          /*! exports provided: Ripple, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Ripple",
+              function () {
+                return Ripple;
+              }
+            );
+            /* harmony import */ var _VRipple_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./VRipple.sass */ "./src/directives/ripple/VRipple.sass"
+              );
+            /* harmony import */ var _VRipple_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _VRipple_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-function install(Vue, args) {
-  if (args === void 0) {
-    args = {};
-  }
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-  if (install.installed) return;
-  install.installed = true;
+                return ar;
+              };
 
-  if (vue__WEBPACK_IMPORTED_MODULE_0___default.a !== Vue) {
-    Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleError"])("Multiple instances of Vue detected\nSee https://github.com/vuetifyjs/vuetify/issues/4068\n\nIf you're seeing \"$attrs is readonly\", it's caused by this");
-  }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-  var components = args.components || {};
-  var directives = args.directives || {};
+                return ar;
+              }; // Styles
 
-  for (var name in directives) {
-    var directive = directives[name];
-    Vue.directive(name, directive);
-  }
+            // Utilities
 
-  (function registerComponents(components) {
-    if (components) {
-      for (var key in components) {
-        var component = components[key];
+            var DELAY_RIPPLE = 80;
 
-        if (component && !registerComponents(component.$_vuetify_subcomponents)) {
-          Vue.component(key, component);
-        }
-      }
+            function transform(el, value) {
+              el.style.transform = value;
+              el.style.webkitTransform = value;
+            }
 
-      return true;
-    }
+            function opacity(el, value) {
+              el.style.opacity = value.toString();
+            }
 
-    return false;
-  })(components); // Used to avoid multiple mixins being setup
-  // when in dev mode and hot module reload
-  // https://github.com/vuejs/vue/issues/5089#issuecomment-284260111
+            function isTouchEvent(e) {
+              return e.constructor.name === "TouchEvent";
+            }
 
+            function isKeyboardEvent(e) {
+              return e.constructor.name === "KeyboardEvent";
+            }
 
-  if (Vue.$_vuetify_installed) return;
-  Vue.$_vuetify_installed = true;
-  Vue.mixin({
-    beforeCreate: function beforeCreate() {
-      var options = this.$options;
+            var calculate = function calculate(e, el, value) {
+              if (value === void 0) {
+                value = {};
+              }
 
-      if (options.vuetify) {
-        options.vuetify.init(this, this.$ssrContext);
-        this.$vuetify = Vue.observable(options.vuetify.framework);
-      } else {
-        this.$vuetify = options.parent && options.parent.$vuetify || this;
-      }
-    },
-    beforeMount: function beforeMount() {
-      // @ts-ignore
-      if (this.$options.vuetify && this.$el && this.$el.hasAttribute('data-server-rendered')) {
-        // @ts-ignore
-        this.$vuetify.isHydrating = true; // @ts-ignore
-
-        this.$vuetify.breakpoint.update(true);
-      }
-    },
-    mounted: function mounted() {
-      // @ts-ignore
-      if (this.$options.vuetify && this.$vuetify.isHydrating) {
-        // @ts-ignore
-        this.$vuetify.isHydrating = false; // @ts-ignore
-
-        this.$vuetify.breakpoint.update();
-      }
-    }
-  });
-}
+              var localX = 0;
+              var localY = 0;
 
-/***/ }),
+              if (!isKeyboardEvent(e)) {
+                var offset = el.getBoundingClientRect();
+                var target = isTouchEvent(e)
+                  ? e.touches[e.touches.length - 1]
+                  : e;
+                localX = target.clientX - offset.left;
+                localY = target.clientY - offset.top;
+              }
 
-/***/ "./src/locale/af.ts":
-/*!**************************!*\
-  !*** ./src/locale/af.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'badge',
-  close: 'Close',
-  dataIterator: {
-    noResultsText: 'Geen ooreenstemmende resultate is gevind nie',
-    loadingText: 'Loading item...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rye per bladsy:',
-    ariaLabel: {
-      sortDescending: 'Sorted descending.',
-      sortAscending: 'Sorted ascending..',
-      sortNone: 'Not sorted.',
-      activateNone: 'Activate to remove sorting.',
-      activateDescending: 'Activate to sort descending.',
-      activateAscending: 'Activate to sort ascending.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Aantal per bladsy:',
-    itemsPerPageAll: 'Alles',
-    nextPage: 'Volgende bladsy',
-    prevPage: 'Vorige bladsy',
-    firstPage: 'Eerste bladsy',
-    lastPage: 'Laaste bladsy',
-    pageText: '{0}-{1} van {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} gekies',
-    nextMonthAriaLabel: 'Volgende maand',
-    nextYearAriaLabel: 'Volgende jaar',
-    prevMonthAriaLabel: 'Vorige maand',
-    prevYearAriaLabel: 'Vorige jaar'
-  },
-  noDataText: 'Geen data is beskikbaar nie',
-  carousel: {
-    prev: 'Vorige visuele',
-    next: 'Volgende visuele',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} meer'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Paginasie-navigasie',
-      next: 'Volgende bladsy',
-      previous: 'Vorige bladsy',
-      page: 'Gaan na bladsy {0}',
-      currentPage: 'Huidige bladsy, Bladsy {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+              var radius = 0;
+              var scale = 0.3;
+
+              if (el._ripple && el._ripple.circle) {
+                scale = 0.15;
+                radius = el.clientWidth / 2;
+                radius = value.center
+                  ? radius
+                  : radius +
+                    Math.sqrt(
+                      Math.pow(localX - radius, 2) +
+                        Math.pow(localY - radius, 2)
+                    ) /
+                      4;
+              } else {
+                radius =
+                  Math.sqrt(
+                    Math.pow(el.clientWidth, 2) + Math.pow(el.clientHeight, 2)
+                  ) / 2;
+              }
 
-/***/ }),
+              var centerX = (el.clientWidth - radius * 2) / 2 + "px";
+              var centerY = (el.clientHeight - radius * 2) / 2 + "px";
+              var x = value.center ? centerX : localX - radius + "px";
+              var y = value.center ? centerY : localY - radius + "px";
+              return {
+                radius: radius,
+                scale: scale,
+                x: x,
+                y: y,
+                centerX: centerX,
+                centerY: centerY,
+              };
+            };
 
-/***/ "./src/locale/ar.ts":
-/*!**************************!*\
-  !*** ./src/locale/ar.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'شارة',
-  close: 'إغلاق',
-  dataIterator: {
-    noResultsText: 'لا توجد سجلات مطابقة',
-    loadingText: 'تحميل العنصر...'
-  },
-  dataTable: {
-    itemsPerPageText: 'الصفوف لكل صفحة:',
-    ariaLabel: {
-      sortDescending: 'مفروز تنازلي. تنشيط لإزالة الفرز.',
-      sortAscending: 'مفروز تصاعدي. تنشيط للفرز التنازلي.',
-      sortNone: 'غير مفروزة. تفعيل لفرز تصاعدي.',
-      activateNone: 'Activate to remove sorting.',
-      activateDescending: 'Activate to sort descending.',
-      activateAscending: 'Activate to sort ascending.'
-    },
-    sortBy: 'مفروزة حسب'
-  },
-  dataFooter: {
-    itemsPerPageText: 'العناصر لكل صفحة:',
-    itemsPerPageAll: 'الكل',
-    nextPage: 'الصفحة التالية',
-    prevPage: 'الصفحة السابقة',
-    firstPage: 'الصفحة الأولى',
-    lastPage: 'الصفحة الأخيرة',
-    pageText: '{0}-{1} من {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} مختارة',
-    nextMonthAriaLabel: 'الشهر القادم',
-    nextYearAriaLabel: 'العام القادم',
-    prevMonthAriaLabel: 'الشهر الماضى',
-    prevYearAriaLabel: 'السنة الماضية'
-  },
-  noDataText: 'لا توجد بيانات متاحة',
-  carousel: {
-    prev: 'البصري السابق',
-    next: 'البصري التالي',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} أكثر'
-  },
-  fileInput: {
-    counter: '{0} ملفات',
-    counterSize: '{0} ملفات ({1} في المجموع)'
-  },
-  timePicker: {
-    am: 'صباحاً',
-    pm: 'مساءً'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'ترقيم الصفحات الملاحة',
-      next: 'الصفحة التالية',
-      previous: 'الصفحة السابقة',
-      page: '{0} انتقل إلى صفحة',
-      currentPage: '{0} الصفحة الحالية ، الصفحة'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+            var ripples = {
+              /* eslint-disable max-statements */
+              show: function show(e, el, value) {
+                if (value === void 0) {
+                  value = {};
+                }
 
-/***/ }),
+                if (!el._ripple || !el._ripple.enabled) {
+                  return;
+                }
 
-/***/ "./src/locale/ca.ts":
-/*!**************************!*\
-  !*** ./src/locale/ca.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Insígnia',
-  close: 'Tancar',
-  dataIterator: {
-    noResultsText: 'Sense dades per mostrar',
-    loadingText: 'Carregant...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Files per pàgina:',
-    ariaLabel: {
-      sortDescending: 'Ordre descendent. Premi per treure la ordenació.',
-      sortAscending: 'Ordre ascendent. Premi per ordenar descendent.',
-      sortNone: 'Sense ordenar. Premi per ordenar ascendent.',
-      activateNone: 'Activate to remove sorting.',
-      activateDescending: 'Activate to sort descending.',
-      activateAscending: 'Activate to sort ascending.'
-    },
-    sortBy: 'Ordenat per'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Elements per pàgina:',
-    itemsPerPageAll: 'Tot',
-    nextPage: 'Pàgina següent',
-    prevPage: 'Pàgina anterior',
-    firstPage: 'Primera pàgina',
-    lastPage: 'Última pàgina',
-    pageText: '{0}-{1} de {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} seleccionats',
-    nextMonthAriaLabel: 'El mes que ve',
-    nextYearAriaLabel: "L'any que ve",
-    prevMonthAriaLabel: 'Mes anterior',
-    prevYearAriaLabel: 'Any anterior'
-  },
-  noDataText: 'Sense dades',
-  carousel: {
-    prev: 'Visualització prèvia',
-    next: 'Visualització següent',
-    ariaLabel: {
-      delimiter: 'Diapositiva {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} més'
-  },
-  fileInput: {
-    counter: '{0} fitxers',
-    counterSize: '{0} fitxers ({1} en total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navegació de la pàgina',
-      next: 'Pàgina següent',
-      previous: 'Pàgina anterior',
-      page: 'Ves a la pàgina {0}',
-      currentPage: 'Pàgina actual, pàgina {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+                var container = document.createElement("span");
+                var animation = document.createElement("span");
+                container.appendChild(animation);
+                container.className = "v-ripple__container";
 
-/***/ }),
+                if (value.class) {
+                  container.className += " " + value.class;
+                }
 
-/***/ "./src/locale/cs.ts":
-/*!**************************!*\
-  !*** ./src/locale/cs.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Odznak',
-  close: 'Zavřít',
-  dataIterator: {
-    noResultsText: 'Nenalezeny žádné záznamy',
-    loadingText: 'Načítám položky...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Řádků na stránku:',
-    ariaLabel: {
-      sortDescending: 'Řazeno sestupně.',
-      sortAscending: 'Řazeno vzestupně.',
-      sortNone: 'Neseřazeno.',
-      activateNone: 'Aktivováním vypnete řazení.',
-      activateDescending: 'Aktivováním se bude řadit sestupně.',
-      activateAscending: 'Aktivováním se bude řadit vzestupně.'
-    },
-    sortBy: 'Řadit dle'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Položek na stránku:',
-    itemsPerPageAll: 'Vše',
-    nextPage: 'Další strana',
-    prevPage: 'Předchozí strana',
-    firstPage: 'První strana',
-    lastPage: 'Poslední strana',
-    pageText: '{0}-{1} z {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} vybráno',
-    nextMonthAriaLabel: 'Příští měsíc',
-    nextYearAriaLabel: 'Příští rok',
-    prevMonthAriaLabel: 'Předchozí měsíc',
-    prevYearAriaLabel: 'Předchozí rok'
-  },
-  noDataText: 'Nejsou dostupná žádná data',
-  carousel: {
-    prev: 'Předchozí obrázek',
-    next: 'Další obrázek',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} dalších'
-  },
-  fileInput: {
-    counter: '{0} souborů',
-    counterSize: '{0} souborů ({1} celkem)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigace stránkování',
-      next: 'Další strana',
-      previous: 'Předchozí strana',
-      page: 'Přejít na stránku {0}',
-      currentPage: 'Aktuální stránka, stránka {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+                var _a = calculate(e, el, value),
+                  radius = _a.radius,
+                  scale = _a.scale,
+                  x = _a.x,
+                  y = _a.y,
+                  centerX = _a.centerX,
+                  centerY = _a.centerY;
+
+                var size = radius * 2 + "px";
+                animation.className = "v-ripple__animation";
+                animation.style.width = size;
+                animation.style.height = size;
+                el.appendChild(container);
+                var computed = window.getComputedStyle(el);
+
+                if (computed && computed.position === "static") {
+                  el.style.position = "relative";
+                  el.dataset.previousPosition = "static";
+                }
 
-/***/ }),
+                animation.classList.add("v-ripple__animation--enter");
+                animation.classList.add("v-ripple__animation--visible");
+                transform(
+                  animation,
+                  "translate(" +
+                    x +
+                    ", " +
+                    y +
+                    ") scale3d(" +
+                    scale +
+                    "," +
+                    scale +
+                    "," +
+                    scale +
+                    ")"
+                );
+                opacity(animation, 0);
+                animation.dataset.activated = String(performance.now());
+                setTimeout(function () {
+                  animation.classList.remove("v-ripple__animation--enter");
+                  animation.classList.add("v-ripple__animation--in");
+                  transform(
+                    animation,
+                    "translate(" + centerX + ", " + centerY + ") scale3d(1,1,1)"
+                  );
+                  opacity(animation, 0.25);
+                }, 0);
+              },
+              hide: function hide(el) {
+                if (!el || !el._ripple || !el._ripple.enabled) return;
+                var ripples = el.getElementsByClassName("v-ripple__animation");
+                if (ripples.length === 0) return;
+                var animation = ripples[ripples.length - 1];
+                if (animation.dataset.isHiding) return;
+                else animation.dataset.isHiding = "true";
+                var diff =
+                  performance.now() - Number(animation.dataset.activated);
+                var delay = Math.max(250 - diff, 0);
+                setTimeout(function () {
+                  animation.classList.remove("v-ripple__animation--in");
+                  animation.classList.add("v-ripple__animation--out");
+                  opacity(animation, 0);
+                  setTimeout(function () {
+                    var ripples = el.getElementsByClassName(
+                      "v-ripple__animation"
+                    );
+
+                    if (ripples.length === 1 && el.dataset.previousPosition) {
+                      el.style.position = el.dataset.previousPosition;
+                      delete el.dataset.previousPosition;
+                    }
+
+                    animation.parentNode &&
+                      el.removeChild(animation.parentNode);
+                  }, 300);
+                }, delay);
+              },
+            };
 
-/***/ "./src/locale/de.ts":
-/*!**************************!*\
-  !*** ./src/locale/de.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Abzeichen',
-  close: 'Schließen',
-  dataIterator: {
-    noResultsText: 'Keine Elemente gefunden',
-    loadingText: 'Lade Elemente...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Zeilen pro Seite:',
-    ariaLabel: {
-      sortDescending: 'Absteigend sortiert.',
-      sortAscending: 'Aufsteigend sortiert.',
-      sortNone: 'Nicht sortiert.',
-      activateNone: 'Aktivieren um Sortierung zu entfernen.',
-      activateDescending: 'Aktivieren um absteigend zu sortieren.',
-      activateAscending: 'Aktivieren um aufsteigend zu sortieren.'
-    },
-    sortBy: 'Sortiere nach'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Elemente pro Seite:',
-    itemsPerPageAll: 'Alle',
-    nextPage: 'Nächste Seite',
-    prevPage: 'Vorherige Seite',
-    firstPage: 'Erste Seite',
-    lastPage: 'Letzte Seite',
-    pageText: '{0}-{1} von {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} ausgewählt',
-    nextMonthAriaLabel: 'Nächsten Monat',
-    nextYearAriaLabel: 'Nächstes Jahr',
-    prevMonthAriaLabel: 'Vorheriger Monat',
-    prevYearAriaLabel: 'Vorheriges Jahr'
-  },
-  noDataText: 'Keine Daten vorhanden',
-  carousel: {
-    prev: 'Vorheriges Bild',
-    next: 'Nächstes Bild',
-    ariaLabel: {
-      delimiter: 'Element {0} von {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} mehr'
-  },
-  fileInput: {
-    counter: '{0} Dateien',
-    counterSize: '{0} Dateien ({1} gesamt)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Seitennavigation',
-      next: 'Nächste Seite',
-      previous: 'Vorherige Seite',
-      page: 'Gehe zu Seite {0}',
-      currentPage: 'Aktuelle Seite, Seite {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+            function isRippleEnabled(value) {
+              return typeof value === "undefined" || !!value;
+            }
 
-/***/ }),
+            function rippleShow(e) {
+              var value = {};
+              var element = e.currentTarget;
+              if (!element || !element._ripple || element._ripple.touched)
+                return;
+
+              if (isTouchEvent(e)) {
+                element._ripple.touched = true;
+                element._ripple.isTouch = true;
+              } else {
+                // It's possible for touch events to fire
+                // as mouse events on Android/iOS, this
+                // will skip the event call if it has
+                // already been registered as touch
+                if (element._ripple.isTouch) return;
+              }
 
-/***/ "./src/locale/el.ts":
-/*!**************************!*\
-  !*** ./src/locale/el.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Σήμα',
-  close: 'Close',
-  dataIterator: {
-    noResultsText: 'Δε βρέθηκαν αποτελέσματα',
-    loadingText: 'Loading item...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Γραμμές ανά σελίδα:',
-    ariaLabel: {
-      sortDescending: 'Sorted descending.',
-      sortAscending: 'Sorted ascending.',
-      sortNone: 'Not sorted.',
-      activateNone: 'Activate to remove sorting.',
-      activateDescending: 'Activate to sort descending.',
-      activateAscending: 'Activate to sort ascending.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Αντικείμενα ανά σελίδα:',
-    itemsPerPageAll: 'Όλα',
-    nextPage: 'Επόμενη σελίδα',
-    prevPage: 'Προηγούμενη σελίδα',
-    firstPage: 'Πρώτη σελίδα',
-    lastPage: 'Τελευταία σελίδα',
-    pageText: '{0}-{1} από {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} επιλεγμένα',
-    nextMonthAriaLabel: 'Τον επόμενο μήνα',
-    nextYearAriaLabel: 'Του χρόνου',
-    prevMonthAriaLabel: 'Προηγούμενος μήνας',
-    prevYearAriaLabel: 'Προηγούμενο έτος'
-  },
-  noDataText: 'Χωρίς δεδομένα',
-  carousel: {
-    prev: 'הקודם חזותי',
-    next: 'הבא חזותי',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} ακόμη'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Πλοήγηση με προορισμούς',
-      next: 'Επόμενη σελίδα',
-      previous: 'Προηγούμενη σελίδα',
-      page: 'Πήγαινε στην σελίδα {0}',
-      currentPage: 'Τρέχουσα σελίδα, σελίδα {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+              value.center = element._ripple.centered || isKeyboardEvent(e);
 
-/***/ }),
+              if (element._ripple.class) {
+                value.class = element._ripple.class;
+              }
 
-/***/ "./src/locale/en.ts":
-/*!**************************!*\
-  !*** ./src/locale/en.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Badge',
-  close: 'Close',
-  dataIterator: {
-    noResultsText: 'No matching records found',
-    loadingText: 'Loading items...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rows per page:',
-    ariaLabel: {
-      sortDescending: 'Sorted descending.',
-      sortAscending: 'Sorted ascending.',
-      sortNone: 'Not sorted.',
-      activateNone: 'Activate to remove sorting.',
-      activateDescending: 'Activate to sort descending.',
-      activateAscending: 'Activate to sort ascending.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Items per page:',
-    itemsPerPageAll: 'All',
-    nextPage: 'Next page',
-    prevPage: 'Previous page',
-    firstPage: 'First page',
-    lastPage: 'Last page',
-    pageText: '{0}-{1} of {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} selected',
-    nextMonthAriaLabel: 'Next month',
-    nextYearAriaLabel: 'Next year',
-    prevMonthAriaLabel: 'Previous month',
-    prevYearAriaLabel: 'Previous year'
-  },
-  noDataText: 'No data available',
-  carousel: {
-    prev: 'Previous visual',
-    next: 'Next visual',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} more'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Pagination Navigation',
-      next: 'Next page',
-      previous: 'Previous page',
-      page: 'Goto Page {0}',
-      currentPage: 'Current Page, Page {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+              if (isTouchEvent(e)) {
+                // already queued that shows or hides the ripple
+                if (element._ripple.showTimerCommit) return;
 
-/***/ }),
+                element._ripple.showTimerCommit = function () {
+                  ripples.show(e, element, value);
+                };
 
-/***/ "./src/locale/es.ts":
-/*!**************************!*\
-  !*** ./src/locale/es.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Placa',
-  close: 'Cerrar',
-  dataIterator: {
-    noResultsText: 'Ningún elemento coincide con la búsqueda',
-    loadingText: 'Cargando...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Filas por página:',
-    ariaLabel: {
-      sortDescending: 'Orden descendente.',
-      sortAscending: 'Orden ascendente.',
-      sortNone: 'Sin ordenar.',
-      activateNone: 'Pulse para quitar orden.',
-      activateDescending: 'Pulse para ordenar descendente.',
-      activateAscending: 'Pulse para ordenar ascendente.'
-    },
-    sortBy: 'Ordenado por'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Elementos por página:',
-    itemsPerPageAll: 'Todos',
-    nextPage: 'Página siguiente',
-    prevPage: 'Página anterior',
-    firstPage: 'Primer página',
-    lastPage: 'Última página',
-    pageText: '{0}-{1} de {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} seleccionados',
-    nextMonthAriaLabel: 'Próximo mes',
-    nextYearAriaLabel: 'Próximo año',
-    prevMonthAriaLabel: 'Mes anterior',
-    prevYearAriaLabel: 'Año anterior'
-  },
-  noDataText: 'No hay datos disponibles',
-  carousel: {
-    prev: 'Visual anterior',
-    next: 'Visual siguiente',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} más'
-  },
-  fileInput: {
-    counter: '{0} archivos',
-    counterSize: '{0} archivos ({1} en total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navegación de paginación',
-      next: 'Página siguiente',
-      previous: 'Página anterior',
-      page: 'Ir a la página {0}',
-      currentPage: 'Página actual, página {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+                element._ripple.showTimer = window.setTimeout(function () {
+                  if (
+                    element &&
+                    element._ripple &&
+                    element._ripple.showTimerCommit
+                  ) {
+                    element._ripple.showTimerCommit();
 
-/***/ }),
+                    element._ripple.showTimerCommit = null;
+                  }
+                }, DELAY_RIPPLE);
+              } else {
+                ripples.show(e, element, value);
+              }
+            }
 
-/***/ "./src/locale/et.ts":
-/*!**************************!*\
-  !*** ./src/locale/et.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Märk',
-  close: 'Sulge',
-  dataIterator: {
-    noResultsText: 'Vastavaid kirjeid ei leitud',
-    loadingText: 'Andmeid laaditakse...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Ridu leheküljel:',
-    ariaLabel: {
-      sortDescending: 'Kahanevalt sorteeritud.',
-      sortAscending: 'Kasvavalt sorteeritud.',
-      sortNone: 'Ei ole sorteeritud.',
-      activateNone: 'Vajuta uuesti sorteerimise eemaldamiseks.',
-      activateDescending: 'Vajuta uuesti, et sorteerida kahanevalt.',
-      activateAscending: 'Vajuta kasvavalt sorteerimiseks.'
-    },
-    sortBy: 'Sorteerimise alus'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Kirjeid leheküljel:',
-    itemsPerPageAll: 'Kõik',
-    nextPage: 'Järgmine lehekülg',
-    prevPage: 'Eelmine lehekülg',
-    firstPage: 'Esimene lehekülg',
-    lastPage: 'Viimane lehekülg',
-    pageText: '{0}-{1} {2}st'
-  },
-  datePicker: {
-    itemsSelected: '{0} valitud',
-    nextMonthAriaLabel: 'Järgmine kuu',
-    nextYearAriaLabel: 'Järgmine aasta',
-    prevMonthAriaLabel: 'Eelmine kuu',
-    prevYearAriaLabel: 'Eelmine aasta'
-  },
-  noDataText: 'Andmed puuduvad',
-  carousel: {
-    prev: 'Eelmine visuaalne',
-    next: 'Järgmine visuaalne',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} veel'
-  },
-  fileInput: {
-    counter: '{0} faili',
-    counterSize: '{0} faili (kokku {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Pagination Navigation',
-      next: 'Järgmine lehekülg',
-      previous: 'Eelmine lehekülg',
-      page: 'Mine lehele {0}',
-      currentPage: 'Praegune leht, leht {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+            function rippleHide(e) {
+              var element = e.currentTarget;
+              if (!element || !element._ripple) return;
+              window.clearTimeout(element._ripple.showTimer); // The touch interaction occurs before the show timer is triggered.
+              // We still want to show ripple effect.
 
-/***/ }),
+              if (e.type === "touchend" && element._ripple.showTimerCommit) {
+                element._ripple.showTimerCommit();
 
-/***/ "./src/locale/fa.ts":
-/*!**************************!*\
-  !*** ./src/locale/fa.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'نشان',
-  close: 'بستن',
-  dataIterator: {
-    noResultsText: 'نتیجه‌ای یافت نشد',
-    loadingText: 'در حال بارگذاری...'
-  },
-  dataTable: {
-    itemsPerPageText: 'ردیف در صفحه:',
-    ariaLabel: {
-      sortDescending: 'مرتب‌سازی نزولی',
-      sortAscending: 'مرتب‌سازی صعودی',
-      sortNone: 'بدون مرتب‌سازی',
-      activateNone: 'غیرفعال‌سازی مرتب‌سازی',
-      activateDescending: 'غیرفعال‌سازی مرتب‌سازی نزولی',
-      activateAscending: 'غیرفعال‌سازی مرتب‌سازی صعودی'
-    },
-    sortBy: 'مرتب‌سازی براساس'
-  },
-  dataFooter: {
-    itemsPerPageText: 'ردیف در صفحه:',
-    itemsPerPageAll: 'همه',
-    nextPage: 'صفحه‌ی بعد',
-    prevPage: 'صفحه‌ی قبل',
-    firstPage: 'صفحه‌ی یکم',
-    lastPage: 'صفحه‌ی آخر',
-    pageText: '{0} تا {1} از {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} انتخاب شده',
-    nextMonthAriaLabel: 'ماه بعد',
-    nextYearAriaLabel: 'سال بعد',
-    prevMonthAriaLabel: 'ماه قبل',
-    prevYearAriaLabel: 'سال قبل'
-  },
-  noDataText: 'داده‌ای موجود نیست',
-  carousel: {
-    prev: 'اسلاید قبلی',
-    next: 'اسلاید بعدی',
-    ariaLabel: {
-      delimiter: 'اسلاید {0} از {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{بیشتر {0'
-  },
-  fileInput: {
-    counter: '{0} پرونده',
-    counterSize: '{0} پرونده ({1} در کل)'
-  },
-  timePicker: {
-    am: 'قبل از ظهر',
-    pm: 'بعد از ظهر'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'جهت یابی صفحه',
-      next: 'صفحه بعد',
-      previous: 'صفحه قبلی',
-      page: 'برو صفحه {0}',
-      currentPage: '{0} صفحه فعلی ، صفحه'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+                element._ripple.showTimerCommit = null; // re-queue ripple hiding
 
-/***/ }),
+                element._ripple.showTimer = setTimeout(function () {
+                  rippleHide(e);
+                });
+                return;
+              }
 
-/***/ "./src/locale/fi.ts":
-/*!**************************!*\
-  !*** ./src/locale/fi.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Infopiste',
-  close: 'Sulje',
-  dataIterator: {
-    noResultsText: 'Ei osumia',
-    loadingText: 'Ladataan kohteita...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rivejä sivulla:',
-    ariaLabel: {
-      sortDescending: ': Järjestetty laskevasti. Poista järjestäminen aktivoimalla.',
-      sortAscending: ': Järjestetty nousevasti. Järjestä laskevasti aktivoimalla.',
-      sortNone: ': Ei järjestetty. Järjestä nousevasti aktivoimalla.',
-      activateNone: 'Aktivoi lajittelun poistamiseksi.',
-      activateDescending: 'Aktivoi laskevien laskevien lajittelemiseksi.',
-      activateAscending: 'Aktivoi lajitella nouseva.'
-    },
-    sortBy: 'Järjestä'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Kohteita sivulla:',
-    itemsPerPageAll: 'Kaikki',
-    nextPage: 'Seuraava sivu',
-    prevPage: 'Edellinen sivu',
-    firstPage: 'Ensimmäinen sivu',
-    lastPage: 'Viimeinen sivu',
-    pageText: '{0}-{1} ({2})'
-  },
-  datePicker: {
-    itemsSelected: '{0} valittu',
-    nextMonthAriaLabel: 'Seuraava kuukausi',
-    nextYearAriaLabel: 'Ensi vuosi',
-    prevMonthAriaLabel: 'Edellinen kuukausi',
-    prevYearAriaLabel: 'Edellinen vuosi'
-  },
-  noDataText: 'Ei dataa',
-  carousel: {
-    prev: 'Edellinen kuva',
-    next: 'Seuraava kuva',
-    ariaLabel: {
-      delimiter: 'Karusellin kuva {0}/{1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} lisää'
-  },
-  fileInput: {
-    counter: '{0} tiedostoa',
-    counterSize: '{0} tiedostoa ({1} yhteensä)'
-  },
-  timePicker: {
-    am: 'ap.',
-    pm: 'ip.'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Pagination Navigation',
-      next: 'Next page',
-      previous: 'Previous page',
-      page: 'Goto Page {0}',
-      currentPage: 'Current Page, Page {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+              window.setTimeout(function () {
+                if (element._ripple) {
+                  element._ripple.touched = false;
+                }
+              });
+              ripples.hide(element);
+            }
 
-/***/ }),
+            function rippleCancelShow(e) {
+              var element = e.currentTarget;
+              if (!element || !element._ripple) return;
 
-/***/ "./src/locale/fr.ts":
-/*!**************************!*\
-  !*** ./src/locale/fr.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Badge',
-  close: 'Fermer',
-  dataIterator: {
-    noResultsText: 'Aucun enregistrement correspondant trouvé',
-    loadingText: "Chargement de l'\xE9l\xE9ment..."
-  },
-  dataTable: {
-    itemsPerPageText: 'Lignes par page :',
-    ariaLabel: {
-      sortDescending: 'Tri décroissant.',
-      sortAscending: 'Tri croissant.',
-      sortNone: 'Non trié.',
-      activateNone: 'Activer pour supprimer le tri.',
-      activateDescending: 'Activer pour trier par ordre décroissant.',
-      activateAscending: 'Activer pour trier par ordre croissant.'
-    },
-    sortBy: 'Trier par'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Élements par page :',
-    itemsPerPageAll: 'Tous',
-    nextPage: 'Page suivante',
-    prevPage: 'Page précédente',
-    firstPage: 'Première page',
-    lastPage: 'Dernière page',
-    pageText: '{0}-{1} de {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} sélectionné(s)',
-    nextMonthAriaLabel: 'Le mois prochain',
-    nextYearAriaLabel: "L'ann\xE9e prochaine",
-    prevMonthAriaLabel: 'Le mois précédent',
-    prevYearAriaLabel: 'Année précédente'
-  },
-  noDataText: 'Aucune donnée disponible',
-  carousel: {
-    prev: 'Visuel précédent',
-    next: 'Visuel suivant',
-    ariaLabel: {
-      delimiter: 'Diapositive {0} de {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} de plus'
-  },
-  fileInput: {
-    counter: '{0} fichier(s)',
-    counterSize: '{0} fichier(s) ({1} au total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigation de pagination',
-      next: 'Page suivante',
-      previous: 'Page précédente',
-      page: 'Aller à la page {0}',
-      currentPage: 'Page actuelle, Page {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+              if (element._ripple.showTimerCommit) {
+                element._ripple.showTimerCommit = null;
+              }
 
-/***/ }),
+              window.clearTimeout(element._ripple.showTimer);
+            }
 
-/***/ "./src/locale/he.ts":
-/*!**************************!*\
-  !*** ./src/locale/he.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'תג',
-  close: 'סגור',
-  dataIterator: {
-    noResultsText: 'לא נמצאו תוצאות מתאימות',
-    loadingText: 'טוען פריט...'
-  },
-  dataTable: {
-    itemsPerPageText: 'שורות לעמוד:',
-    ariaLabel: {
-      sortDescending: 'ממוין לפי סדר עולה. לחץ להספקת המיון.',
-      sortAscending: 'ממוין לפי סדר יורד. לחץ למיון לפי סדר עולה.',
-      sortNone: 'לא ממוין. לחץ למיון לפי סדר עולה.',
-      activateNone: 'הפעל להסרת המיון.',
-      activateDescending: 'הפעל למיון יורד.',
-      activateAscending: 'הפעל למיון עולה.'
-    },
-    sortBy: 'סדר לפי'
-  },
-  dataFooter: {
-    itemsPerPageText: 'פריטים לדף:',
-    itemsPerPageAll: 'הכל',
-    nextPage: 'עמוד הבא',
-    prevPage: 'עמוד הקודם',
-    firstPage: 'עמוד ראשון',
-    lastPage: 'עמוד אחרון',
-    pageText: '{0}-{1} מתוך {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} נבחרו',
-    nextMonthAriaLabel: 'חודש הבא',
-    nextYearAriaLabel: 'שנה הבאה',
-    prevMonthAriaLabel: 'חודש שעבר',
-    prevYearAriaLabel: 'שנה שעברה'
-  },
-  noDataText: 'אין נתונים זמינים',
-  carousel: {
-    prev: 'מצג קודם',
-    next: 'מצג הבא',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} נוספים'
-  },
-  fileInput: {
-    counter: '{0} קבצים',
-    counterSize: '{0} קבצים ({1} בסך הכל)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'ניווט עימוד',
-      next: 'עמוד הבא',
-      previous: 'עמוד הקודם',
-      page: '{0} לך לעמוד',
-      currentPage: '{0} עמוד נוכחי, עמוד'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+            var keyboardRipple = false;
+
+            function keyboardRippleShow(e) {
+              if (
+                !keyboardRipple &&
+                (e.keyCode ===
+                  _util_helpers__WEBPACK_IMPORTED_MODULE_2__["keyCodes"]
+                    .enter ||
+                  e.keyCode ===
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_2__["keyCodes"]
+                      .space)
+              ) {
+                keyboardRipple = true;
+                rippleShow(e);
+              }
+            }
 
-/***/ }),
+            function keyboardRippleHide(e) {
+              keyboardRipple = false;
+              rippleHide(e);
+            }
 
-/***/ "./src/locale/hr.ts":
-/*!**************************!*\
-  !*** ./src/locale/hr.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Bedž',
-  close: 'Zatvori',
-  dataIterator: {
-    noResultsText: 'Nisu pronađene odgovarajuće stavke',
-    loadingText: 'Učitavanje...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Redaka po stranici:',
-    ariaLabel: {
-      sortDescending: 'Sortirano silazno.',
-      sortAscending: 'Sortirano uzlazno.',
-      sortNone: 'Nije sortirano.',
-      activateNone: 'Odaberite za uklanjanje sortiranja.',
-      activateDescending: 'Odaberite za silazno sortiranje.',
-      activateAscending: 'Odaberite za uzlazno sortiranje.'
-    },
-    sortBy: 'Sortirajte po'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Stavki po stranici:',
-    itemsPerPageAll: 'Sve',
-    nextPage: 'Sljedeća stranica',
-    prevPage: 'Prethodna stranica',
-    firstPage: 'Prva stranica',
-    lastPage: 'Posljednja stranica',
-    pageText: '{0}-{1} od {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} odabrano',
-    nextMonthAriaLabel: 'Sljedeći mjesec',
-    nextYearAriaLabel: 'Slijedeće godine',
-    prevMonthAriaLabel: 'Prethodni mjesec',
-    prevYearAriaLabel: 'Prošla godina'
-  },
-  noDataText: 'Nema dostupnih podataka',
-  carousel: {
-    prev: 'Prethodno',
-    next: 'Sljedeće',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: 'Još {0}'
-  },
-  fileInput: {
-    counter: 'Odabranih datoteka: {0}',
-    counterSize: 'Odabranih datoteka: {0} ({1} ukupno)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigacija stranicama',
-      next: 'Sljedeća stranica',
-      previous: 'Prethodna stranica',
-      page: 'Idi na stranicu {0}',
-      currentPage: 'Trenutna stranica, stranica {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+            function updateRipple(el, binding, wasEnabled) {
+              var enabled = isRippleEnabled(binding.value);
 
-/***/ }),
+              if (!enabled) {
+                ripples.hide(el);
+              }
 
-/***/ "./src/locale/hu.ts":
-/*!**************************!*\
-  !*** ./src/locale/hu.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Jelvény',
-  close: 'Bezárás',
-  dataIterator: {
-    noResultsText: 'Nincs egyező találat',
-    loadingText: 'Betöltés...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Elem oldalanként:',
-    ariaLabel: {
-      sortDescending: 'Csökkenő sorrendbe rendezve.',
-      sortAscending: 'Növekvő sorrendbe rendezve.',
-      sortNone: 'Rendezetlen.',
-      activateNone: 'Rendezés törlése.',
-      activateDescending: 'Aktiváld a csökkenő rendezésért.',
-      activateAscending: 'Aktiváld a növekvő rendezésért.'
-    },
-    sortBy: 'Rendezés'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Elem oldalanként:',
-    itemsPerPageAll: 'Mind',
-    nextPage: 'Következő oldal',
-    prevPage: 'Előző oldal',
-    firstPage: 'Első oldal',
-    lastPage: 'Utolsó oldal',
-    pageText: '{0}-{1} / {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} kiválasztva',
-    nextMonthAriaLabel: 'Következő hónap',
-    nextYearAriaLabel: 'Következő év',
-    prevMonthAriaLabel: 'Előző hónap',
-    prevYearAriaLabel: 'Előző év'
-  },
-  noDataText: 'Nincs elérhető adat',
-  carousel: {
-    prev: 'Előző',
-    next: 'Következő',
-    ariaLabel: {
-      delimiter: 'Dia {0}/{1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} további'
-  },
-  fileInput: {
-    counter: '{0} fájl',
-    counterSize: '{0} fájl ({1} összesen)'
-  },
-  timePicker: {
-    am: 'de',
-    pm: 'du'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Oldal navigáció',
-      next: 'Következő oldal',
-      previous: 'Előző oldal',
-      page: 'Menj a(z) {0}. oldalra',
-      currentPage: 'Aktuális oldal: {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+              el._ripple = el._ripple || {};
+              el._ripple.enabled = enabled;
+              var value = binding.value || {};
 
-/***/ }),
+              if (value.center) {
+                el._ripple.centered = true;
+              }
 
-/***/ "./src/locale/id.ts":
-/*!**************************!*\
-  !*** ./src/locale/id.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Lencana',
-  close: 'Tutup',
-  dataIterator: {
-    noResultsText: 'Tidak ditemukan catatan yang cocok',
-    loadingText: 'Memuat data...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Baris per halaman:',
-    ariaLabel: {
-      sortDescending: 'Diurutkan kebawah.',
-      sortAscending: 'Diurutkan keatas.',
-      sortNone: 'Tidak diurutkan.',
-      activateNone: 'Aktifkan untuk menghapus penyortiran.',
-      activateDescending: 'Aktifkan untuk mengurutkan kebawah.',
-      activateAscending: 'Aktifkan untuk mengurutkan keatas.'
-    },
-    sortBy: 'Urutkan berdasar'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Item per halaman:',
-    itemsPerPageAll: 'Semua',
-    nextPage: 'Halaman selanjutnya',
-    prevPage: 'Halaman sebelumnya',
-    firstPage: 'Halaman pertama',
-    lastPage: 'Halaman terakhir',
-    pageText: '{0}-{1} dari {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} dipilih',
-    nextMonthAriaLabel: 'Bulan depan',
-    nextYearAriaLabel: 'Tahun depan',
-    prevMonthAriaLabel: 'Bulan sebelumnya',
-    prevYearAriaLabel: 'Tahun sebelumnya'
-  },
-  noDataText: 'Tidak ada data tersedia',
-  carousel: {
-    prev: 'Visual sebelumnya',
-    next: 'Visual selanjutnya',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} lagi'
-  },
-  fileInput: {
-    counter: '{0} berkas',
-    counterSize: '{0} berkas (dari total {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigasi Pagination',
-      next: 'Halaman selanjutnya',
-      previous: 'Halaman sebelumnya',
-      page: 'Buka halaman {0}',
-      currentPage: 'Halaman Saat Ini, Halaman {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+              if (value.class) {
+                el._ripple.class = binding.value.class;
+              }
 
-/***/ }),
+              if (value.circle) {
+                el._ripple.circle = value.circle;
+              }
 
-/***/ "./src/locale/index.ts":
-/*!*****************************!*\
-  !*** ./src/locale/index.ts ***!
-  \*****************************/
-/*! exports provided: af, ar, ca, cs, de, el, en, es, et, fa, fi, fr, hr, hu, he, id, it, ja, ko, lv, lt, nl, no, pl, pt, ro, ru, sk, sl, srCyrl, sv, th, tr, uk, zhHans, zhHant */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+              if (enabled && !wasEnabled) {
+                el.addEventListener("touchstart", rippleShow, {
+                  passive: true,
+                });
+                el.addEventListener("touchend", rippleHide, {
+                  passive: true,
+                });
+                el.addEventListener("touchmove", rippleCancelShow, {
+                  passive: true,
+                });
+                el.addEventListener("touchcancel", rippleHide);
+                el.addEventListener("mousedown", rippleShow);
+                el.addEventListener("mouseup", rippleHide);
+                el.addEventListener("mouseleave", rippleHide);
+                el.addEventListener("keydown", keyboardRippleShow);
+                el.addEventListener("keyup", keyboardRippleHide); // Anchor tags can be dragged, causes other hides to fail - #1537
+
+                el.addEventListener("dragstart", rippleHide, {
+                  passive: true,
+                });
+              } else if (!enabled && wasEnabled) {
+                removeListeners(el);
+              }
+            }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _af__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./af */ "./src/locale/af.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "af", function() { return _af__WEBPACK_IMPORTED_MODULE_0__["default"]; });
+            function removeListeners(el) {
+              el.removeEventListener("mousedown", rippleShow);
+              el.removeEventListener("touchstart", rippleShow);
+              el.removeEventListener("touchend", rippleHide);
+              el.removeEventListener("touchmove", rippleCancelShow);
+              el.removeEventListener("touchcancel", rippleHide);
+              el.removeEventListener("mouseup", rippleHide);
+              el.removeEventListener("mouseleave", rippleHide);
+              el.removeEventListener("keydown", keyboardRippleShow);
+              el.removeEventListener("keyup", keyboardRippleHide);
+              el.removeEventListener("dragstart", rippleHide);
+            }
 
-/* harmony import */ var _ar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ar */ "./src/locale/ar.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ar", function() { return _ar__WEBPACK_IMPORTED_MODULE_1__["default"]; });
+            function directive(el, binding, node) {
+              updateRipple(el, binding, false);
+
+              if (true) {
+                // warn if an inline element is used, waiting for el to be in the DOM first
+                node.context &&
+                  node.context.$nextTick(function () {
+                    var computed = window.getComputedStyle(el);
+
+                    if (computed && computed.display === "inline") {
+                      var context = node.fnOptions
+                        ? [node.fnOptions, node.context]
+                        : [node.componentInstance];
+                      _util_console__WEBPACK_IMPORTED_MODULE_1__[
+                        "consoleWarn"
+                      ].apply(
+                        void 0,
+                        __spread(
+                          ["v-ripple can only be used on block-level elements"],
+                          context
+                        )
+                      );
+                    }
+                  });
+              }
+            }
 
-/* harmony import */ var _ca__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ca */ "./src/locale/ca.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ca", function() { return _ca__WEBPACK_IMPORTED_MODULE_2__["default"]; });
+            function unbind(el) {
+              delete el._ripple;
+              removeListeners(el);
+            }
 
-/* harmony import */ var _cs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cs */ "./src/locale/cs.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "cs", function() { return _cs__WEBPACK_IMPORTED_MODULE_3__["default"]; });
+            function update(el, binding) {
+              if (binding.value === binding.oldValue) {
+                return;
+              }
 
-/* harmony import */ var _de__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./de */ "./src/locale/de.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "de", function() { return _de__WEBPACK_IMPORTED_MODULE_4__["default"]; });
+              var wasEnabled = isRippleEnabled(binding.oldValue);
+              updateRipple(el, binding, wasEnabled);
+            }
 
-/* harmony import */ var _el__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./el */ "./src/locale/el.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "el", function() { return _el__WEBPACK_IMPORTED_MODULE_5__["default"]; });
+            var Ripple = {
+              bind: directive,
+              unbind: unbind,
+              update: update,
+            };
+            /* harmony default export */ __webpack_exports__["default"] =
+              Ripple;
 
-/* harmony import */ var _en__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./en */ "./src/locale/en.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "en", function() { return _en__WEBPACK_IMPORTED_MODULE_6__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _es__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./es */ "./src/locale/es.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "es", function() { return _es__WEBPACK_IMPORTED_MODULE_7__["default"]; });
+        /***/ "./src/directives/scroll/index.ts":
+          /*!****************************************!*\
+  !*** ./src/directives/scroll/index.ts ***!
+  \****************************************/
+          /*! exports provided: Scroll, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Scroll",
+              function () {
+                return Scroll;
+              }
+            );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-/* harmony import */ var _et__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./et */ "./src/locale/et.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "et", function() { return _et__WEBPACK_IMPORTED_MODULE_8__["default"]; });
+            function inserted(el, binding) {
+              var _a = (binding.modifiers || {}).self,
+                self = _a === void 0 ? false : _a;
+              var value = binding.value;
+              var options = (_typeof(value) === "object" && value.options) || {
+                passive: true,
+              };
+              var handler =
+                typeof value === "function" || "handleEvent" in value
+                  ? value
+                  : value.handler;
+              var target = self
+                ? el
+                : binding.arg
+                ? document.querySelector(binding.arg)
+                : window;
+              if (!target) return;
+              target.addEventListener("scroll", handler, options);
+              el._onScroll = {
+                handler: handler,
+                options: options,
+                // Don't reference self
+                target: self ? undefined : target,
+              };
+            }
 
-/* harmony import */ var _fa__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./fa */ "./src/locale/fa.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fa", function() { return _fa__WEBPACK_IMPORTED_MODULE_9__["default"]; });
+            function unbind(el) {
+              if (!el._onScroll) return;
+              var _a = el._onScroll,
+                handler = _a.handler,
+                options = _a.options,
+                _b = _a.target,
+                target = _b === void 0 ? el : _b;
+              target.removeEventListener("scroll", handler, options);
+              delete el._onScroll;
+            }
 
-/* harmony import */ var _fi__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./fi */ "./src/locale/fi.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fi", function() { return _fi__WEBPACK_IMPORTED_MODULE_10__["default"]; });
+            var Scroll = {
+              inserted: inserted,
+              unbind: unbind,
+            };
+            /* harmony default export */ __webpack_exports__["default"] =
+              Scroll;
 
-/* harmony import */ var _fr__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./fr */ "./src/locale/fr.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fr", function() { return _fr__WEBPACK_IMPORTED_MODULE_11__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _hr__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hr */ "./src/locale/hr.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hr", function() { return _hr__WEBPACK_IMPORTED_MODULE_12__["default"]; });
+        /***/ "./src/directives/touch/index.ts":
+          /*!***************************************!*\
+  !*** ./src/directives/touch/index.ts ***!
+  \***************************************/
+          /*! exports provided: Touch, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Touch",
+              function () {
+                return Touch;
+              }
+            );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            var handleGesture = function handleGesture(wrapper) {
+              var touchstartX = wrapper.touchstartX,
+                touchendX = wrapper.touchendX,
+                touchstartY = wrapper.touchstartY,
+                touchendY = wrapper.touchendY;
+              var dirRatio = 0.5;
+              var minDistance = 16;
+              wrapper.offsetX = touchendX - touchstartX;
+              wrapper.offsetY = touchendY - touchstartY;
+
+              if (
+                Math.abs(wrapper.offsetY) <
+                dirRatio * Math.abs(wrapper.offsetX)
+              ) {
+                wrapper.left &&
+                  touchendX < touchstartX - minDistance &&
+                  wrapper.left(wrapper);
+                wrapper.right &&
+                  touchendX > touchstartX + minDistance &&
+                  wrapper.right(wrapper);
+              }
 
-/* harmony import */ var _hu__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./hu */ "./src/locale/hu.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hu", function() { return _hu__WEBPACK_IMPORTED_MODULE_13__["default"]; });
+              if (
+                Math.abs(wrapper.offsetX) <
+                dirRatio * Math.abs(wrapper.offsetY)
+              ) {
+                wrapper.up &&
+                  touchendY < touchstartY - minDistance &&
+                  wrapper.up(wrapper);
+                wrapper.down &&
+                  touchendY > touchstartY + minDistance &&
+                  wrapper.down(wrapper);
+              }
+            };
 
-/* harmony import */ var _he__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./he */ "./src/locale/he.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "he", function() { return _he__WEBPACK_IMPORTED_MODULE_14__["default"]; });
+            function _touchstart(event, wrapper) {
+              var touch = event.changedTouches[0];
+              wrapper.touchstartX = touch.clientX;
+              wrapper.touchstartY = touch.clientY;
+              wrapper.start && wrapper.start(Object.assign(event, wrapper));
+            }
 
-/* harmony import */ var _id__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./id */ "./src/locale/id.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "id", function() { return _id__WEBPACK_IMPORTED_MODULE_15__["default"]; });
+            function _touchend(event, wrapper) {
+              var touch = event.changedTouches[0];
+              wrapper.touchendX = touch.clientX;
+              wrapper.touchendY = touch.clientY;
+              wrapper.end && wrapper.end(Object.assign(event, wrapper));
+              handleGesture(wrapper);
+            }
 
-/* harmony import */ var _it__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./it */ "./src/locale/it.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "it", function() { return _it__WEBPACK_IMPORTED_MODULE_16__["default"]; });
+            function _touchmove(event, wrapper) {
+              var touch = event.changedTouches[0];
+              wrapper.touchmoveX = touch.clientX;
+              wrapper.touchmoveY = touch.clientY;
+              wrapper.move && wrapper.move(Object.assign(event, wrapper));
+            }
 
-/* harmony import */ var _ja__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ja */ "./src/locale/ja.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ja", function() { return _ja__WEBPACK_IMPORTED_MODULE_17__["default"]; });
+            function createHandlers(value) {
+              var wrapper = {
+                touchstartX: 0,
+                touchstartY: 0,
+                touchendX: 0,
+                touchendY: 0,
+                touchmoveX: 0,
+                touchmoveY: 0,
+                offsetX: 0,
+                offsetY: 0,
+                left: value.left,
+                right: value.right,
+                up: value.up,
+                down: value.down,
+                start: value.start,
+                move: value.move,
+                end: value.end,
+              };
+              return {
+                touchstart: function touchstart(e) {
+                  return _touchstart(e, wrapper);
+                },
+                touchend: function touchend(e) {
+                  return _touchend(e, wrapper);
+                },
+                touchmove: function touchmove(e) {
+                  return _touchmove(e, wrapper);
+                },
+              };
+            }
 
-/* harmony import */ var _ko__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./ko */ "./src/locale/ko.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ko", function() { return _ko__WEBPACK_IMPORTED_MODULE_18__["default"]; });
+            function inserted(el, binding, vnode) {
+              var value = binding.value;
+              var target = value.parent ? el.parentElement : el;
+              var options = value.options || {
+                passive: true,
+              }; // Needed to pass unit tests
+
+              if (!target) return;
+              var handlers = createHandlers(binding.value);
+              target._touchHandlers = Object(target._touchHandlers);
+              target._touchHandlers[vnode.context._uid] = handlers;
+              Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["keys"])(
+                handlers
+              ).forEach(function (eventName) {
+                target.addEventListener(
+                  eventName,
+                  handlers[eventName],
+                  options
+                );
+              });
+            }
 
-/* harmony import */ var _lv__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./lv */ "./src/locale/lv.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lv", function() { return _lv__WEBPACK_IMPORTED_MODULE_19__["default"]; });
+            function unbind(el, binding, vnode) {
+              var target = binding.value.parent ? el.parentElement : el;
+              if (!target || !target._touchHandlers) return;
+              var handlers = target._touchHandlers[vnode.context._uid];
+              Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["keys"])(
+                handlers
+              ).forEach(function (eventName) {
+                target.removeEventListener(eventName, handlers[eventName]);
+              });
+              delete target._touchHandlers[vnode.context._uid];
+            }
 
-/* harmony import */ var _lt__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./lt */ "./src/locale/lt.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "lt", function() { return _lt__WEBPACK_IMPORTED_MODULE_20__["default"]; });
+            var Touch = {
+              inserted: inserted,
+              unbind: unbind,
+            };
+            /* harmony default export */ __webpack_exports__["default"] = Touch;
 
-/* harmony import */ var _nl__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./nl */ "./src/locale/nl.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "nl", function() { return _nl__WEBPACK_IMPORTED_MODULE_21__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _no__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./no */ "./src/locale/no.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "no", function() { return _no__WEBPACK_IMPORTED_MODULE_22__["default"]; });
+        /***/ "./src/framework.ts":
+          /*!**************************!*\
+  !*** ./src/framework.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _install__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! ./install */ "./src/install.ts");
+            /* harmony import */ var _services__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! ./services */ "./src/services/index.ts");
+            // Services
+
+            var Vuetify =
+              /** @class */
+              (function () {
+                function Vuetify(userPreset) {
+                  if (userPreset === void 0) {
+                    userPreset = {};
+                  }
 
-/* harmony import */ var _pl__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./pl */ "./src/locale/pl.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pl", function() { return _pl__WEBPACK_IMPORTED_MODULE_23__["default"]; });
+                  this.framework = {
+                    isHydrating: false,
+                  };
+                  this.installed = [];
+                  this.preset = {};
+                  this.userPreset = {};
+                  this.userPreset = userPreset;
+                  this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Presets"]);
+                  this.use(
+                    _services__WEBPACK_IMPORTED_MODULE_1__["Application"]
+                  );
+                  this.use(
+                    _services__WEBPACK_IMPORTED_MODULE_1__["Breakpoint"]
+                  );
+                  this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Goto"]);
+                  this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Icons"]);
+                  this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Lang"]);
+                  this.use(_services__WEBPACK_IMPORTED_MODULE_1__["Theme"]);
+                } // Called on the new vuetify instance
+                // bootstrap in install beforeCreate
+                // Exposes ssrContext if available
+
+                Vuetify.prototype.init = function (root, ssrContext) {
+                  var _this = this;
+
+                  this.installed.forEach(function (property) {
+                    var service = _this.framework[property];
+                    service.framework = _this.framework;
+                    service.init(root, ssrContext);
+                  }); // rtl is not installed and
+                  // will never be called by
+                  // the init process
+
+                  this.framework.rtl = Boolean(this.preset.rtl);
+                }; // Instantiate a VuetifyService
+
+                Vuetify.prototype.use = function (Service) {
+                  var property = Service.property;
+                  if (this.installed.includes(property)) return; // TODO maybe a specific type for arg 2?
+
+                  this.framework[property] = new Service(this.preset, this);
+                  this.installed.push(property);
+                };
 
-/* harmony import */ var _pt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./pt */ "./src/locale/pt.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pt", function() { return _pt__WEBPACK_IMPORTED_MODULE_24__["default"]; });
+                Vuetify.install =
+                  _install__WEBPACK_IMPORTED_MODULE_0__["install"];
+                Vuetify.installed = false;
+                Vuetify.version = "2.3.19";
+                Vuetify.config = {
+                  silent: false,
+                };
+                return Vuetify;
+              })();
 
-/* harmony import */ var _ro__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./ro */ "./src/locale/ro.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ro", function() { return _ro__WEBPACK_IMPORTED_MODULE_25__["default"]; });
+            /* harmony default export */ __webpack_exports__["default"] =
+              Vuetify;
 
-/* harmony import */ var _ru__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./ru */ "./src/locale/ru.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ru", function() { return _ru__WEBPACK_IMPORTED_MODULE_26__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _sk__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./sk */ "./src/locale/sk.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sk", function() { return _sk__WEBPACK_IMPORTED_MODULE_27__["default"]; });
+        /***/ "./src/index.ts":
+          /*!**********************!*\
+  !*** ./src/index.ts ***!
+  \**********************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./components */ "./src/components/index.ts"
+              );
+            /* harmony import */ var _directives__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./directives */ "./src/directives/index.ts"
+              );
+            /* harmony import */ var _framework__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! ./framework */ "./src/framework.ts");
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-/* harmony import */ var _sl__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./sl */ "./src/locale/sl.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sl", function() { return _sl__WEBPACK_IMPORTED_MODULE_28__["default"]; });
+            /* harmony default export */ __webpack_exports__["default"] =
+              _framework__WEBPACK_IMPORTED_MODULE_2__["default"];
+            var install =
+              _framework__WEBPACK_IMPORTED_MODULE_2__["default"].install;
+
+            _framework__WEBPACK_IMPORTED_MODULE_2__["default"].install =
+              function (Vue, args) {
+                install.call(
+                  _framework__WEBPACK_IMPORTED_MODULE_2__["default"],
+                  Vue,
+                  __assign(
+                    {
+                      components: _components__WEBPACK_IMPORTED_MODULE_0__,
+                      directives: _directives__WEBPACK_IMPORTED_MODULE_1__,
+                    },
+                    args
+                  )
+                );
+              };
 
-/* harmony import */ var _sr_Cyrl__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./sr-Cyrl */ "./src/locale/sr-Cyrl.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "srCyrl", function() { return _sr_Cyrl__WEBPACK_IMPORTED_MODULE_29__["default"]; });
+            if (typeof window !== "undefined" && window.Vue) {
+              window.Vue.use(
+                _framework__WEBPACK_IMPORTED_MODULE_2__["default"]
+              );
+            }
 
-/* harmony import */ var _sv__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./sv */ "./src/locale/sv.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sv", function() { return _sv__WEBPACK_IMPORTED_MODULE_30__["default"]; });
+            /***/
+          },
 
-/* harmony import */ var _th__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./th */ "./src/locale/th.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "th", function() { return _th__WEBPACK_IMPORTED_MODULE_31__["default"]; });
+        /***/ "./src/install.ts":
+          /*!************************!*\
+  !*** ./src/install.ts ***!
+  \************************/
+          /*! exports provided: install */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "install",
+              function () {
+                return install;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./util/console */ "./src/util/console.ts"
+              );
+
+            function install(Vue, args) {
+              if (args === void 0) {
+                args = {};
+              }
 
-/* harmony import */ var _tr__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./tr */ "./src/locale/tr.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tr", function() { return _tr__WEBPACK_IMPORTED_MODULE_32__["default"]; });
+              if (install.installed) return;
+              install.installed = true;
 
-/* harmony import */ var _uk__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./uk */ "./src/locale/uk.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "uk", function() { return _uk__WEBPACK_IMPORTED_MODULE_33__["default"]; });
+              if (vue__WEBPACK_IMPORTED_MODULE_0___default.a !== Vue) {
+                Object(
+                  _util_console__WEBPACK_IMPORTED_MODULE_1__["consoleError"]
+                )(
+                  "Multiple instances of Vue detected\nSee https://github.com/vuetifyjs/vuetify/issues/4068\n\nIf you're seeing \"$attrs is readonly\", it's caused by this"
+                );
+              }
 
-/* harmony import */ var _zh_Hans__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./zh-Hans */ "./src/locale/zh-Hans.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zhHans", function() { return _zh_Hans__WEBPACK_IMPORTED_MODULE_34__["default"]; });
+              var components = args.components || {};
+              var directives = args.directives || {};
 
-/* harmony import */ var _zh_Hant__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./zh-Hant */ "./src/locale/zh-Hant.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zhHant", function() { return _zh_Hant__WEBPACK_IMPORTED_MODULE_35__["default"]; });
+              for (var name in directives) {
+                var directive = directives[name];
+                Vue.directive(name, directive);
+              }
 
+              (function registerComponents(components) {
+                if (components) {
+                  for (var key in components) {
+                    var component = components[key];
+
+                    if (
+                      component &&
+                      !registerComponents(component.$_vuetify_subcomponents)
+                    ) {
+                      Vue.component(key, component);
+                    }
+                  }
 
+                  return true;
+                }
 
+                return false;
+              })(components); // Used to avoid multiple mixins being setup
+              // when in dev mode and hot module reload
+              // https://github.com/vuejs/vue/issues/5089#issuecomment-284260111
+
+              if (Vue.$_vuetify_installed) return;
+              Vue.$_vuetify_installed = true;
+              Vue.mixin({
+                beforeCreate: function beforeCreate() {
+                  var options = this.$options;
+
+                  if (options.vuetify) {
+                    options.vuetify.init(this, this.$ssrContext);
+                    this.$vuetify = Vue.observable(options.vuetify.framework);
+                  } else {
+                    this.$vuetify =
+                      (options.parent && options.parent.$vuetify) || this;
+                  }
+                },
+                beforeMount: function beforeMount() {
+                  // @ts-ignore
+                  if (
+                    this.$options.vuetify &&
+                    this.$el &&
+                    this.$el.hasAttribute("data-server-rendered")
+                  ) {
+                    // @ts-ignore
+                    this.$vuetify.isHydrating = true; // @ts-ignore
+
+                    this.$vuetify.breakpoint.update(true);
+                  }
+                },
+                mounted: function mounted() {
+                  // @ts-ignore
+                  if (this.$options.vuetify && this.$vuetify.isHydrating) {
+                    // @ts-ignore
+                    this.$vuetify.isHydrating = false; // @ts-ignore
+
+                    this.$vuetify.breakpoint.update();
+                  }
+                },
+              });
+            }
 
+            /***/
+          },
 
+        /***/ "./src/locale/af.ts":
+          /*!**************************!*\
+  !*** ./src/locale/af.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "badge",
+              close: "Close",
+              dataIterator: {
+                noResultsText: "Geen ooreenstemmende resultate is gevind nie",
+                loadingText: "Loading item...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rye per bladsy:",
+                ariaLabel: {
+                  sortDescending: "Sorted descending.",
+                  sortAscending: "Sorted ascending..",
+                  sortNone: "Not sorted.",
+                  activateNone: "Activate to remove sorting.",
+                  activateDescending: "Activate to sort descending.",
+                  activateAscending: "Activate to sort ascending.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "Aantal per bladsy:",
+                itemsPerPageAll: "Alles",
+                nextPage: "Volgende bladsy",
+                prevPage: "Vorige bladsy",
+                firstPage: "Eerste bladsy",
+                lastPage: "Laaste bladsy",
+                pageText: "{0}-{1} van {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} gekies",
+                nextMonthAriaLabel: "Volgende maand",
+                nextYearAriaLabel: "Volgende jaar",
+                prevMonthAriaLabel: "Vorige maand",
+                prevYearAriaLabel: "Vorige jaar",
+              },
+              noDataText: "Geen data is beskikbaar nie",
+              carousel: {
+                prev: "Vorige visuele",
+                next: "Volgende visuele",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} meer",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Paginasie-navigasie",
+                  next: "Volgende bladsy",
+                  previous: "Vorige bladsy",
+                  page: "Gaan na bladsy {0}",
+                  currentPage: "Huidige bladsy, Bladsy {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/ar.ts":
+          /*!**************************!*\
+  !*** ./src/locale/ar.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "شارة",
+              close: "إغلاق",
+              dataIterator: {
+                noResultsText: "لا توجد سجلات مطابقة",
+                loadingText: "تحميل العنصر...",
+              },
+              dataTable: {
+                itemsPerPageText: "الصفوف لكل صفحة:",
+                ariaLabel: {
+                  sortDescending: "مفروز تنازلي. تنشيط لإزالة الفرز.",
+                  sortAscending: "مفروز تصاعدي. تنشيط للفرز التنازلي.",
+                  sortNone: "غير مفروزة. تفعيل لفرز تصاعدي.",
+                  activateNone: "Activate to remove sorting.",
+                  activateDescending: "Activate to sort descending.",
+                  activateAscending: "Activate to sort ascending.",
+                },
+                sortBy: "مفروزة حسب",
+              },
+              dataFooter: {
+                itemsPerPageText: "العناصر لكل صفحة:",
+                itemsPerPageAll: "الكل",
+                nextPage: "الصفحة التالية",
+                prevPage: "الصفحة السابقة",
+                firstPage: "الصفحة الأولى",
+                lastPage: "الصفحة الأخيرة",
+                pageText: "{0}-{1} من {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} مختارة",
+                nextMonthAriaLabel: "الشهر القادم",
+                nextYearAriaLabel: "العام القادم",
+                prevMonthAriaLabel: "الشهر الماضى",
+                prevYearAriaLabel: "السنة الماضية",
+              },
+              noDataText: "لا توجد بيانات متاحة",
+              carousel: {
+                prev: "البصري السابق",
+                next: "البصري التالي",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} أكثر",
+              },
+              fileInput: {
+                counter: "{0} ملفات",
+                counterSize: "{0} ملفات ({1} في المجموع)",
+              },
+              timePicker: {
+                am: "صباحاً",
+                pm: "مساءً",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "ترقيم الصفحات الملاحة",
+                  next: "الصفحة التالية",
+                  previous: "الصفحة السابقة",
+                  page: "{0} انتقل إلى صفحة",
+                  currentPage: "{0} الصفحة الحالية ، الصفحة",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/ca.ts":
+          /*!**************************!*\
+  !*** ./src/locale/ca.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Insígnia",
+              close: "Tancar",
+              dataIterator: {
+                noResultsText: "Sense dades per mostrar",
+                loadingText: "Carregant...",
+              },
+              dataTable: {
+                itemsPerPageText: "Files per pàgina:",
+                ariaLabel: {
+                  sortDescending:
+                    "Ordre descendent. Premi per treure la ordenació.",
+                  sortAscending:
+                    "Ordre ascendent. Premi per ordenar descendent.",
+                  sortNone: "Sense ordenar. Premi per ordenar ascendent.",
+                  activateNone: "Activate to remove sorting.",
+                  activateDescending: "Activate to sort descending.",
+                  activateAscending: "Activate to sort ascending.",
+                },
+                sortBy: "Ordenat per",
+              },
+              dataFooter: {
+                itemsPerPageText: "Elements per pàgina:",
+                itemsPerPageAll: "Tot",
+                nextPage: "Pàgina següent",
+                prevPage: "Pàgina anterior",
+                firstPage: "Primera pàgina",
+                lastPage: "Última pàgina",
+                pageText: "{0}-{1} de {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} seleccionats",
+                nextMonthAriaLabel: "El mes que ve",
+                nextYearAriaLabel: "L'any que ve",
+                prevMonthAriaLabel: "Mes anterior",
+                prevYearAriaLabel: "Any anterior",
+              },
+              noDataText: "Sense dades",
+              carousel: {
+                prev: "Visualització prèvia",
+                next: "Visualització següent",
+                ariaLabel: {
+                  delimiter: "Diapositiva {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} més",
+              },
+              fileInput: {
+                counter: "{0} fitxers",
+                counterSize: "{0} fitxers ({1} en total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navegació de la pàgina",
+                  next: "Pàgina següent",
+                  previous: "Pàgina anterior",
+                  page: "Ves a la pàgina {0}",
+                  currentPage: "Pàgina actual, pàgina {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/cs.ts":
+          /*!**************************!*\
+  !*** ./src/locale/cs.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Odznak",
+              close: "Zavřít",
+              dataIterator: {
+                noResultsText: "Nenalezeny žádné záznamy",
+                loadingText: "Načítám položky...",
+              },
+              dataTable: {
+                itemsPerPageText: "Řádků na stránku:",
+                ariaLabel: {
+                  sortDescending: "Řazeno sestupně.",
+                  sortAscending: "Řazeno vzestupně.",
+                  sortNone: "Neseřazeno.",
+                  activateNone: "Aktivováním vypnete řazení.",
+                  activateDescending: "Aktivováním se bude řadit sestupně.",
+                  activateAscending: "Aktivováním se bude řadit vzestupně.",
+                },
+                sortBy: "Řadit dle",
+              },
+              dataFooter: {
+                itemsPerPageText: "Položek na stránku:",
+                itemsPerPageAll: "Vše",
+                nextPage: "Další strana",
+                prevPage: "Předchozí strana",
+                firstPage: "První strana",
+                lastPage: "Poslední strana",
+                pageText: "{0}-{1} z {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} vybráno",
+                nextMonthAriaLabel: "Příští měsíc",
+                nextYearAriaLabel: "Příští rok",
+                prevMonthAriaLabel: "Předchozí měsíc",
+                prevYearAriaLabel: "Předchozí rok",
+              },
+              noDataText: "Nejsou dostupná žádná data",
+              carousel: {
+                prev: "Předchozí obrázek",
+                next: "Další obrázek",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} dalších",
+              },
+              fileInput: {
+                counter: "{0} souborů",
+                counterSize: "{0} souborů ({1} celkem)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigace stránkování",
+                  next: "Další strana",
+                  previous: "Předchozí strana",
+                  page: "Přejít na stránku {0}",
+                  currentPage: "Aktuální stránka, stránka {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/de.ts":
+          /*!**************************!*\
+  !*** ./src/locale/de.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Abzeichen",
+              close: "Schließen",
+              dataIterator: {
+                noResultsText: "Keine Elemente gefunden",
+                loadingText: "Lade Elemente...",
+              },
+              dataTable: {
+                itemsPerPageText: "Zeilen pro Seite:",
+                ariaLabel: {
+                  sortDescending: "Absteigend sortiert.",
+                  sortAscending: "Aufsteigend sortiert.",
+                  sortNone: "Nicht sortiert.",
+                  activateNone: "Aktivieren um Sortierung zu entfernen.",
+                  activateDescending: "Aktivieren um absteigend zu sortieren.",
+                  activateAscending: "Aktivieren um aufsteigend zu sortieren.",
+                },
+                sortBy: "Sortiere nach",
+              },
+              dataFooter: {
+                itemsPerPageText: "Elemente pro Seite:",
+                itemsPerPageAll: "Alle",
+                nextPage: "Nächste Seite",
+                prevPage: "Vorherige Seite",
+                firstPage: "Erste Seite",
+                lastPage: "Letzte Seite",
+                pageText: "{0}-{1} von {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} ausgewählt",
+                nextMonthAriaLabel: "Nächsten Monat",
+                nextYearAriaLabel: "Nächstes Jahr",
+                prevMonthAriaLabel: "Vorheriger Monat",
+                prevYearAriaLabel: "Vorheriges Jahr",
+              },
+              noDataText: "Keine Daten vorhanden",
+              carousel: {
+                prev: "Vorheriges Bild",
+                next: "Nächstes Bild",
+                ariaLabel: {
+                  delimiter: "Element {0} von {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} mehr",
+              },
+              fileInput: {
+                counter: "{0} Dateien",
+                counterSize: "{0} Dateien ({1} gesamt)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Seitennavigation",
+                  next: "Nächste Seite",
+                  previous: "Vorherige Seite",
+                  page: "Gehe zu Seite {0}",
+                  currentPage: "Aktuelle Seite, Seite {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/el.ts":
+          /*!**************************!*\
+  !*** ./src/locale/el.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Σήμα",
+              close: "Close",
+              dataIterator: {
+                noResultsText: "Δε βρέθηκαν αποτελέσματα",
+                loadingText: "Loading item...",
+              },
+              dataTable: {
+                itemsPerPageText: "Γραμμές ανά σελίδα:",
+                ariaLabel: {
+                  sortDescending: "Sorted descending.",
+                  sortAscending: "Sorted ascending.",
+                  sortNone: "Not sorted.",
+                  activateNone: "Activate to remove sorting.",
+                  activateDescending: "Activate to sort descending.",
+                  activateAscending: "Activate to sort ascending.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "Αντικείμενα ανά σελίδα:",
+                itemsPerPageAll: "Όλα",
+                nextPage: "Επόμενη σελίδα",
+                prevPage: "Προηγούμενη σελίδα",
+                firstPage: "Πρώτη σελίδα",
+                lastPage: "Τελευταία σελίδα",
+                pageText: "{0}-{1} από {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} επιλεγμένα",
+                nextMonthAriaLabel: "Τον επόμενο μήνα",
+                nextYearAriaLabel: "Του χρόνου",
+                prevMonthAriaLabel: "Προηγούμενος μήνας",
+                prevYearAriaLabel: "Προηγούμενο έτος",
+              },
+              noDataText: "Χωρίς δεδομένα",
+              carousel: {
+                prev: "הקודם חזותי",
+                next: "הבא חזותי",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} ακόμη",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Πλοήγηση με προορισμούς",
+                  next: "Επόμενη σελίδα",
+                  previous: "Προηγούμενη σελίδα",
+                  page: "Πήγαινε στην σελίδα {0}",
+                  currentPage: "Τρέχουσα σελίδα, σελίδα {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/en.ts":
+          /*!**************************!*\
+  !*** ./src/locale/en.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Badge",
+              close: "Close",
+              dataIterator: {
+                noResultsText: "No matching records found",
+                loadingText: "Loading items...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rows per page:",
+                ariaLabel: {
+                  sortDescending: "Sorted descending.",
+                  sortAscending: "Sorted ascending.",
+                  sortNone: "Not sorted.",
+                  activateNone: "Activate to remove sorting.",
+                  activateDescending: "Activate to sort descending.",
+                  activateAscending: "Activate to sort ascending.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "Items per page:",
+                itemsPerPageAll: "All",
+                nextPage: "Next page",
+                prevPage: "Previous page",
+                firstPage: "First page",
+                lastPage: "Last page",
+                pageText: "{0}-{1} of {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} selected",
+                nextMonthAriaLabel: "Next month",
+                nextYearAriaLabel: "Next year",
+                prevMonthAriaLabel: "Previous month",
+                prevYearAriaLabel: "Previous year",
+              },
+              noDataText: "No data available",
+              carousel: {
+                prev: "Previous visual",
+                next: "Next visual",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} more",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Pagination Navigation",
+                  next: "Next page",
+                  previous: "Previous page",
+                  page: "Goto Page {0}",
+                  currentPage: "Current Page, Page {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/es.ts":
+          /*!**************************!*\
+  !*** ./src/locale/es.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Placa",
+              close: "Cerrar",
+              dataIterator: {
+                noResultsText: "Ningún elemento coincide con la búsqueda",
+                loadingText: "Cargando...",
+              },
+              dataTable: {
+                itemsPerPageText: "Filas por página:",
+                ariaLabel: {
+                  sortDescending: "Orden descendente.",
+                  sortAscending: "Orden ascendente.",
+                  sortNone: "Sin ordenar.",
+                  activateNone: "Pulse para quitar orden.",
+                  activateDescending: "Pulse para ordenar descendente.",
+                  activateAscending: "Pulse para ordenar ascendente.",
+                },
+                sortBy: "Ordenado por",
+              },
+              dataFooter: {
+                itemsPerPageText: "Elementos por página:",
+                itemsPerPageAll: "Todos",
+                nextPage: "Página siguiente",
+                prevPage: "Página anterior",
+                firstPage: "Primer página",
+                lastPage: "Última página",
+                pageText: "{0}-{1} de {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} seleccionados",
+                nextMonthAriaLabel: "Próximo mes",
+                nextYearAriaLabel: "Próximo año",
+                prevMonthAriaLabel: "Mes anterior",
+                prevYearAriaLabel: "Año anterior",
+              },
+              noDataText: "No hay datos disponibles",
+              carousel: {
+                prev: "Visual anterior",
+                next: "Visual siguiente",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} más",
+              },
+              fileInput: {
+                counter: "{0} archivos",
+                counterSize: "{0} archivos ({1} en total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navegación de paginación",
+                  next: "Página siguiente",
+                  previous: "Página anterior",
+                  page: "Ir a la página {0}",
+                  currentPage: "Página actual, página {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/et.ts":
+          /*!**************************!*\
+  !*** ./src/locale/et.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Märk",
+              close: "Sulge",
+              dataIterator: {
+                noResultsText: "Vastavaid kirjeid ei leitud",
+                loadingText: "Andmeid laaditakse...",
+              },
+              dataTable: {
+                itemsPerPageText: "Ridu leheküljel:",
+                ariaLabel: {
+                  sortDescending: "Kahanevalt sorteeritud.",
+                  sortAscending: "Kasvavalt sorteeritud.",
+                  sortNone: "Ei ole sorteeritud.",
+                  activateNone: "Vajuta uuesti sorteerimise eemaldamiseks.",
+                  activateDescending:
+                    "Vajuta uuesti, et sorteerida kahanevalt.",
+                  activateAscending: "Vajuta kasvavalt sorteerimiseks.",
+                },
+                sortBy: "Sorteerimise alus",
+              },
+              dataFooter: {
+                itemsPerPageText: "Kirjeid leheküljel:",
+                itemsPerPageAll: "Kõik",
+                nextPage: "Järgmine lehekülg",
+                prevPage: "Eelmine lehekülg",
+                firstPage: "Esimene lehekülg",
+                lastPage: "Viimane lehekülg",
+                pageText: "{0}-{1} {2}st",
+              },
+              datePicker: {
+                itemsSelected: "{0} valitud",
+                nextMonthAriaLabel: "Järgmine kuu",
+                nextYearAriaLabel: "Järgmine aasta",
+                prevMonthAriaLabel: "Eelmine kuu",
+                prevYearAriaLabel: "Eelmine aasta",
+              },
+              noDataText: "Andmed puuduvad",
+              carousel: {
+                prev: "Eelmine visuaalne",
+                next: "Järgmine visuaalne",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} veel",
+              },
+              fileInput: {
+                counter: "{0} faili",
+                counterSize: "{0} faili (kokku {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Pagination Navigation",
+                  next: "Järgmine lehekülg",
+                  previous: "Eelmine lehekülg",
+                  page: "Mine lehele {0}",
+                  currentPage: "Praegune leht, leht {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/fa.ts":
+          /*!**************************!*\
+  !*** ./src/locale/fa.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "نشان",
+              close: "بستن",
+              dataIterator: {
+                noResultsText: "نتیجه‌ای یافت نشد",
+                loadingText: "در حال بارگذاری...",
+              },
+              dataTable: {
+                itemsPerPageText: "ردیف در صفحه:",
+                ariaLabel: {
+                  sortDescending: "مرتب‌سازی نزولی",
+                  sortAscending: "مرتب‌سازی صعودی",
+                  sortNone: "بدون مرتب‌سازی",
+                  activateNone: "غیرفعال‌سازی مرتب‌سازی",
+                  activateDescending: "غیرفعال‌سازی مرتب‌سازی نزولی",
+                  activateAscending: "غیرفعال‌سازی مرتب‌سازی صعودی",
+                },
+                sortBy: "مرتب‌سازی براساس",
+              },
+              dataFooter: {
+                itemsPerPageText: "ردیف در صفحه:",
+                itemsPerPageAll: "همه",
+                nextPage: "صفحه‌ی بعد",
+                prevPage: "صفحه‌ی قبل",
+                firstPage: "صفحه‌ی یکم",
+                lastPage: "صفحه‌ی آخر",
+                pageText: "{0} تا {1} از {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} انتخاب شده",
+                nextMonthAriaLabel: "ماه بعد",
+                nextYearAriaLabel: "سال بعد",
+                prevMonthAriaLabel: "ماه قبل",
+                prevYearAriaLabel: "سال قبل",
+              },
+              noDataText: "داده‌ای موجود نیست",
+              carousel: {
+                prev: "اسلاید قبلی",
+                next: "اسلاید بعدی",
+                ariaLabel: {
+                  delimiter: "اسلاید {0} از {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{بیشتر {0",
+              },
+              fileInput: {
+                counter: "{0} پرونده",
+                counterSize: "{0} پرونده ({1} در کل)",
+              },
+              timePicker: {
+                am: "قبل از ظهر",
+                pm: "بعد از ظهر",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "جهت یابی صفحه",
+                  next: "صفحه بعد",
+                  previous: "صفحه قبلی",
+                  page: "برو صفحه {0}",
+                  currentPage: "{0} صفحه فعلی ، صفحه",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/fi.ts":
+          /*!**************************!*\
+  !*** ./src/locale/fi.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Infopiste",
+              close: "Sulje",
+              dataIterator: {
+                noResultsText: "Ei osumia",
+                loadingText: "Ladataan kohteita...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rivejä sivulla:",
+                ariaLabel: {
+                  sortDescending:
+                    ": Järjestetty laskevasti. Poista järjestäminen aktivoimalla.",
+                  sortAscending:
+                    ": Järjestetty nousevasti. Järjestä laskevasti aktivoimalla.",
+                  sortNone:
+                    ": Ei järjestetty. Järjestä nousevasti aktivoimalla.",
+                  activateNone: "Aktivoi lajittelun poistamiseksi.",
+                  activateDescending:
+                    "Aktivoi laskevien laskevien lajittelemiseksi.",
+                  activateAscending: "Aktivoi lajitella nouseva.",
+                },
+                sortBy: "Järjestä",
+              },
+              dataFooter: {
+                itemsPerPageText: "Kohteita sivulla:",
+                itemsPerPageAll: "Kaikki",
+                nextPage: "Seuraava sivu",
+                prevPage: "Edellinen sivu",
+                firstPage: "Ensimmäinen sivu",
+                lastPage: "Viimeinen sivu",
+                pageText: "{0}-{1} ({2})",
+              },
+              datePicker: {
+                itemsSelected: "{0} valittu",
+                nextMonthAriaLabel: "Seuraava kuukausi",
+                nextYearAriaLabel: "Ensi vuosi",
+                prevMonthAriaLabel: "Edellinen kuukausi",
+                prevYearAriaLabel: "Edellinen vuosi",
+              },
+              noDataText: "Ei dataa",
+              carousel: {
+                prev: "Edellinen kuva",
+                next: "Seuraava kuva",
+                ariaLabel: {
+                  delimiter: "Karusellin kuva {0}/{1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} lisää",
+              },
+              fileInput: {
+                counter: "{0} tiedostoa",
+                counterSize: "{0} tiedostoa ({1} yhteensä)",
+              },
+              timePicker: {
+                am: "ap.",
+                pm: "ip.",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Pagination Navigation",
+                  next: "Next page",
+                  previous: "Previous page",
+                  page: "Goto Page {0}",
+                  currentPage: "Current Page, Page {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/fr.ts":
+          /*!**************************!*\
+  !*** ./src/locale/fr.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Badge",
+              close: "Fermer",
+              dataIterator: {
+                noResultsText: "Aucun enregistrement correspondant trouvé",
+                loadingText: "Chargement de l'\xE9l\xE9ment...",
+              },
+              dataTable: {
+                itemsPerPageText: "Lignes par page :",
+                ariaLabel: {
+                  sortDescending: "Tri décroissant.",
+                  sortAscending: "Tri croissant.",
+                  sortNone: "Non trié.",
+                  activateNone: "Activer pour supprimer le tri.",
+                  activateDescending:
+                    "Activer pour trier par ordre décroissant.",
+                  activateAscending: "Activer pour trier par ordre croissant.",
+                },
+                sortBy: "Trier par",
+              },
+              dataFooter: {
+                itemsPerPageText: "Élements par page :",
+                itemsPerPageAll: "Tous",
+                nextPage: "Page suivante",
+                prevPage: "Page précédente",
+                firstPage: "Première page",
+                lastPage: "Dernière page",
+                pageText: "{0}-{1} de {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} sélectionné(s)",
+                nextMonthAriaLabel: "Le mois prochain",
+                nextYearAriaLabel: "L'ann\xE9e prochaine",
+                prevMonthAriaLabel: "Le mois précédent",
+                prevYearAriaLabel: "Année précédente",
+              },
+              noDataText: "Aucune donnée disponible",
+              carousel: {
+                prev: "Visuel précédent",
+                next: "Visuel suivant",
+                ariaLabel: {
+                  delimiter: "Diapositive {0} de {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} de plus",
+              },
+              fileInput: {
+                counter: "{0} fichier(s)",
+                counterSize: "{0} fichier(s) ({1} au total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigation de pagination",
+                  next: "Page suivante",
+                  previous: "Page précédente",
+                  page: "Aller à la page {0}",
+                  currentPage: "Page actuelle, Page {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/he.ts":
+          /*!**************************!*\
+  !*** ./src/locale/he.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "תג",
+              close: "סגור",
+              dataIterator: {
+                noResultsText: "לא נמצאו תוצאות מתאימות",
+                loadingText: "טוען פריט...",
+              },
+              dataTable: {
+                itemsPerPageText: "שורות לעמוד:",
+                ariaLabel: {
+                  sortDescending: "ממוין לפי סדר עולה. לחץ להספקת המיון.",
+                  sortAscending: "ממוין לפי סדר יורד. לחץ למיון לפי סדר עולה.",
+                  sortNone: "לא ממוין. לחץ למיון לפי סדר עולה.",
+                  activateNone: "הפעל להסרת המיון.",
+                  activateDescending: "הפעל למיון יורד.",
+                  activateAscending: "הפעל למיון עולה.",
+                },
+                sortBy: "סדר לפי",
+              },
+              dataFooter: {
+                itemsPerPageText: "פריטים לדף:",
+                itemsPerPageAll: "הכל",
+                nextPage: "עמוד הבא",
+                prevPage: "עמוד הקודם",
+                firstPage: "עמוד ראשון",
+                lastPage: "עמוד אחרון",
+                pageText: "{0}-{1} מתוך {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} נבחרו",
+                nextMonthAriaLabel: "חודש הבא",
+                nextYearAriaLabel: "שנה הבאה",
+                prevMonthAriaLabel: "חודש שעבר",
+                prevYearAriaLabel: "שנה שעברה",
+              },
+              noDataText: "אין נתונים זמינים",
+              carousel: {
+                prev: "מצג קודם",
+                next: "מצג הבא",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} נוספים",
+              },
+              fileInput: {
+                counter: "{0} קבצים",
+                counterSize: "{0} קבצים ({1} בסך הכל)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "ניווט עימוד",
+                  next: "עמוד הבא",
+                  previous: "עמוד הקודם",
+                  page: "{0} לך לעמוד",
+                  currentPage: "{0} עמוד נוכחי, עמוד",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/hr.ts":
+          /*!**************************!*\
+  !*** ./src/locale/hr.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Bedž",
+              close: "Zatvori",
+              dataIterator: {
+                noResultsText: "Nisu pronađene odgovarajuće stavke",
+                loadingText: "Učitavanje...",
+              },
+              dataTable: {
+                itemsPerPageText: "Redaka po stranici:",
+                ariaLabel: {
+                  sortDescending: "Sortirano silazno.",
+                  sortAscending: "Sortirano uzlazno.",
+                  sortNone: "Nije sortirano.",
+                  activateNone: "Odaberite za uklanjanje sortiranja.",
+                  activateDescending: "Odaberite za silazno sortiranje.",
+                  activateAscending: "Odaberite za uzlazno sortiranje.",
+                },
+                sortBy: "Sortirajte po",
+              },
+              dataFooter: {
+                itemsPerPageText: "Stavki po stranici:",
+                itemsPerPageAll: "Sve",
+                nextPage: "Sljedeća stranica",
+                prevPage: "Prethodna stranica",
+                firstPage: "Prva stranica",
+                lastPage: "Posljednja stranica",
+                pageText: "{0}-{1} od {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} odabrano",
+                nextMonthAriaLabel: "Sljedeći mjesec",
+                nextYearAriaLabel: "Slijedeće godine",
+                prevMonthAriaLabel: "Prethodni mjesec",
+                prevYearAriaLabel: "Prošla godina",
+              },
+              noDataText: "Nema dostupnih podataka",
+              carousel: {
+                prev: "Prethodno",
+                next: "Sljedeće",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "Još {0}",
+              },
+              fileInput: {
+                counter: "Odabranih datoteka: {0}",
+                counterSize: "Odabranih datoteka: {0} ({1} ukupno)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigacija stranicama",
+                  next: "Sljedeća stranica",
+                  previous: "Prethodna stranica",
+                  page: "Idi na stranicu {0}",
+                  currentPage: "Trenutna stranica, stranica {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/hu.ts":
+          /*!**************************!*\
+  !*** ./src/locale/hu.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Jelvény",
+              close: "Bezárás",
+              dataIterator: {
+                noResultsText: "Nincs egyező találat",
+                loadingText: "Betöltés...",
+              },
+              dataTable: {
+                itemsPerPageText: "Elem oldalanként:",
+                ariaLabel: {
+                  sortDescending: "Csökkenő sorrendbe rendezve.",
+                  sortAscending: "Növekvő sorrendbe rendezve.",
+                  sortNone: "Rendezetlen.",
+                  activateNone: "Rendezés törlése.",
+                  activateDescending: "Aktiváld a csökkenő rendezésért.",
+                  activateAscending: "Aktiváld a növekvő rendezésért.",
+                },
+                sortBy: "Rendezés",
+              },
+              dataFooter: {
+                itemsPerPageText: "Elem oldalanként:",
+                itemsPerPageAll: "Mind",
+                nextPage: "Következő oldal",
+                prevPage: "Előző oldal",
+                firstPage: "Első oldal",
+                lastPage: "Utolsó oldal",
+                pageText: "{0}-{1} / {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} kiválasztva",
+                nextMonthAriaLabel: "Következő hónap",
+                nextYearAriaLabel: "Következő év",
+                prevMonthAriaLabel: "Előző hónap",
+                prevYearAriaLabel: "Előző év",
+              },
+              noDataText: "Nincs elérhető adat",
+              carousel: {
+                prev: "Előző",
+                next: "Következő",
+                ariaLabel: {
+                  delimiter: "Dia {0}/{1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} további",
+              },
+              fileInput: {
+                counter: "{0} fájl",
+                counterSize: "{0} fájl ({1} összesen)",
+              },
+              timePicker: {
+                am: "de",
+                pm: "du",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Oldal navigáció",
+                  next: "Következő oldal",
+                  previous: "Előző oldal",
+                  page: "Menj a(z) {0}. oldalra",
+                  currentPage: "Aktuális oldal: {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/id.ts":
+          /*!**************************!*\
+  !*** ./src/locale/id.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Lencana",
+              close: "Tutup",
+              dataIterator: {
+                noResultsText: "Tidak ditemukan catatan yang cocok",
+                loadingText: "Memuat data...",
+              },
+              dataTable: {
+                itemsPerPageText: "Baris per halaman:",
+                ariaLabel: {
+                  sortDescending: "Diurutkan kebawah.",
+                  sortAscending: "Diurutkan keatas.",
+                  sortNone: "Tidak diurutkan.",
+                  activateNone: "Aktifkan untuk menghapus penyortiran.",
+                  activateDescending: "Aktifkan untuk mengurutkan kebawah.",
+                  activateAscending: "Aktifkan untuk mengurutkan keatas.",
+                },
+                sortBy: "Urutkan berdasar",
+              },
+              dataFooter: {
+                itemsPerPageText: "Item per halaman:",
+                itemsPerPageAll: "Semua",
+                nextPage: "Halaman selanjutnya",
+                prevPage: "Halaman sebelumnya",
+                firstPage: "Halaman pertama",
+                lastPage: "Halaman terakhir",
+                pageText: "{0}-{1} dari {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} dipilih",
+                nextMonthAriaLabel: "Bulan depan",
+                nextYearAriaLabel: "Tahun depan",
+                prevMonthAriaLabel: "Bulan sebelumnya",
+                prevYearAriaLabel: "Tahun sebelumnya",
+              },
+              noDataText: "Tidak ada data tersedia",
+              carousel: {
+                prev: "Visual sebelumnya",
+                next: "Visual selanjutnya",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} lagi",
+              },
+              fileInput: {
+                counter: "{0} berkas",
+                counterSize: "{0} berkas (dari total {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigasi Pagination",
+                  next: "Halaman selanjutnya",
+                  previous: "Halaman sebelumnya",
+                  page: "Buka halaman {0}",
+                  currentPage: "Halaman Saat Ini, Halaman {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
+            /***/
+          },
 
+        /***/ "./src/locale/index.ts":
+          /*!*****************************!*\
+  !*** ./src/locale/index.ts ***!
+  \*****************************/
+          /*! exports provided: af, ar, ca, cs, de, el, en, es, et, fa, fi, fr, hr, hu, he, id, it, ja, ko, lv, lt, nl, no, pl, pt, ro, ru, sk, sl, srCyrl, sv, th, tr, uk, zhHans, zhHant */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _af__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! ./af */ "./src/locale/af.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "af",
+              function () {
+                return _af__WEBPACK_IMPORTED_MODULE_0__["default"];
+              }
+            );
+
+            /* harmony import */ var _ar__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! ./ar */ "./src/locale/ar.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ar",
+              function () {
+                return _ar__WEBPACK_IMPORTED_MODULE_1__["default"];
+              }
+            );
+
+            /* harmony import */ var _ca__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! ./ca */ "./src/locale/ca.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ca",
+              function () {
+                return _ca__WEBPACK_IMPORTED_MODULE_2__["default"];
+              }
+            );
+
+            /* harmony import */ var _cs__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(/*! ./cs */ "./src/locale/cs.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "cs",
+              function () {
+                return _cs__WEBPACK_IMPORTED_MODULE_3__["default"];
+              }
+            );
+
+            /* harmony import */ var _de__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(/*! ./de */ "./src/locale/de.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "de",
+              function () {
+                return _de__WEBPACK_IMPORTED_MODULE_4__["default"];
+              }
+            );
+
+            /* harmony import */ var _el__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(/*! ./el */ "./src/locale/el.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "el",
+              function () {
+                return _el__WEBPACK_IMPORTED_MODULE_5__["default"];
+              }
+            );
+
+            /* harmony import */ var _en__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(/*! ./en */ "./src/locale/en.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "en",
+              function () {
+                return _en__WEBPACK_IMPORTED_MODULE_6__["default"];
+              }
+            );
+
+            /* harmony import */ var _es__WEBPACK_IMPORTED_MODULE_7__ =
+              __webpack_require__(/*! ./es */ "./src/locale/es.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "es",
+              function () {
+                return _es__WEBPACK_IMPORTED_MODULE_7__["default"];
+              }
+            );
+
+            /* harmony import */ var _et__WEBPACK_IMPORTED_MODULE_8__ =
+              __webpack_require__(/*! ./et */ "./src/locale/et.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "et",
+              function () {
+                return _et__WEBPACK_IMPORTED_MODULE_8__["default"];
+              }
+            );
+
+            /* harmony import */ var _fa__WEBPACK_IMPORTED_MODULE_9__ =
+              __webpack_require__(/*! ./fa */ "./src/locale/fa.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fa",
+              function () {
+                return _fa__WEBPACK_IMPORTED_MODULE_9__["default"];
+              }
+            );
+
+            /* harmony import */ var _fi__WEBPACK_IMPORTED_MODULE_10__ =
+              __webpack_require__(/*! ./fi */ "./src/locale/fi.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fi",
+              function () {
+                return _fi__WEBPACK_IMPORTED_MODULE_10__["default"];
+              }
+            );
+
+            /* harmony import */ var _fr__WEBPACK_IMPORTED_MODULE_11__ =
+              __webpack_require__(/*! ./fr */ "./src/locale/fr.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fr",
+              function () {
+                return _fr__WEBPACK_IMPORTED_MODULE_11__["default"];
+              }
+            );
+
+            /* harmony import */ var _hr__WEBPACK_IMPORTED_MODULE_12__ =
+              __webpack_require__(/*! ./hr */ "./src/locale/hr.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "hr",
+              function () {
+                return _hr__WEBPACK_IMPORTED_MODULE_12__["default"];
+              }
+            );
+
+            /* harmony import */ var _hu__WEBPACK_IMPORTED_MODULE_13__ =
+              __webpack_require__(/*! ./hu */ "./src/locale/hu.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "hu",
+              function () {
+                return _hu__WEBPACK_IMPORTED_MODULE_13__["default"];
+              }
+            );
+
+            /* harmony import */ var _he__WEBPACK_IMPORTED_MODULE_14__ =
+              __webpack_require__(/*! ./he */ "./src/locale/he.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "he",
+              function () {
+                return _he__WEBPACK_IMPORTED_MODULE_14__["default"];
+              }
+            );
+
+            /* harmony import */ var _id__WEBPACK_IMPORTED_MODULE_15__ =
+              __webpack_require__(/*! ./id */ "./src/locale/id.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "id",
+              function () {
+                return _id__WEBPACK_IMPORTED_MODULE_15__["default"];
+              }
+            );
+
+            /* harmony import */ var _it__WEBPACK_IMPORTED_MODULE_16__ =
+              __webpack_require__(/*! ./it */ "./src/locale/it.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "it",
+              function () {
+                return _it__WEBPACK_IMPORTED_MODULE_16__["default"];
+              }
+            );
+
+            /* harmony import */ var _ja__WEBPACK_IMPORTED_MODULE_17__ =
+              __webpack_require__(/*! ./ja */ "./src/locale/ja.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ja",
+              function () {
+                return _ja__WEBPACK_IMPORTED_MODULE_17__["default"];
+              }
+            );
+
+            /* harmony import */ var _ko__WEBPACK_IMPORTED_MODULE_18__ =
+              __webpack_require__(/*! ./ko */ "./src/locale/ko.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ko",
+              function () {
+                return _ko__WEBPACK_IMPORTED_MODULE_18__["default"];
+              }
+            );
+
+            /* harmony import */ var _lv__WEBPACK_IMPORTED_MODULE_19__ =
+              __webpack_require__(/*! ./lv */ "./src/locale/lv.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "lv",
+              function () {
+                return _lv__WEBPACK_IMPORTED_MODULE_19__["default"];
+              }
+            );
+
+            /* harmony import */ var _lt__WEBPACK_IMPORTED_MODULE_20__ =
+              __webpack_require__(/*! ./lt */ "./src/locale/lt.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "lt",
+              function () {
+                return _lt__WEBPACK_IMPORTED_MODULE_20__["default"];
+              }
+            );
+
+            /* harmony import */ var _nl__WEBPACK_IMPORTED_MODULE_21__ =
+              __webpack_require__(/*! ./nl */ "./src/locale/nl.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "nl",
+              function () {
+                return _nl__WEBPACK_IMPORTED_MODULE_21__["default"];
+              }
+            );
+
+            /* harmony import */ var _no__WEBPACK_IMPORTED_MODULE_22__ =
+              __webpack_require__(/*! ./no */ "./src/locale/no.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "no",
+              function () {
+                return _no__WEBPACK_IMPORTED_MODULE_22__["default"];
+              }
+            );
+
+            /* harmony import */ var _pl__WEBPACK_IMPORTED_MODULE_23__ =
+              __webpack_require__(/*! ./pl */ "./src/locale/pl.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "pl",
+              function () {
+                return _pl__WEBPACK_IMPORTED_MODULE_23__["default"];
+              }
+            );
+
+            /* harmony import */ var _pt__WEBPACK_IMPORTED_MODULE_24__ =
+              __webpack_require__(/*! ./pt */ "./src/locale/pt.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "pt",
+              function () {
+                return _pt__WEBPACK_IMPORTED_MODULE_24__["default"];
+              }
+            );
+
+            /* harmony import */ var _ro__WEBPACK_IMPORTED_MODULE_25__ =
+              __webpack_require__(/*! ./ro */ "./src/locale/ro.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ro",
+              function () {
+                return _ro__WEBPACK_IMPORTED_MODULE_25__["default"];
+              }
+            );
+
+            /* harmony import */ var _ru__WEBPACK_IMPORTED_MODULE_26__ =
+              __webpack_require__(/*! ./ru */ "./src/locale/ru.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "ru",
+              function () {
+                return _ru__WEBPACK_IMPORTED_MODULE_26__["default"];
+              }
+            );
+
+            /* harmony import */ var _sk__WEBPACK_IMPORTED_MODULE_27__ =
+              __webpack_require__(/*! ./sk */ "./src/locale/sk.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "sk",
+              function () {
+                return _sk__WEBPACK_IMPORTED_MODULE_27__["default"];
+              }
+            );
+
+            /* harmony import */ var _sl__WEBPACK_IMPORTED_MODULE_28__ =
+              __webpack_require__(/*! ./sl */ "./src/locale/sl.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "sl",
+              function () {
+                return _sl__WEBPACK_IMPORTED_MODULE_28__["default"];
+              }
+            );
+
+            /* harmony import */ var _sr_Cyrl__WEBPACK_IMPORTED_MODULE_29__ =
+              __webpack_require__(/*! ./sr-Cyrl */ "./src/locale/sr-Cyrl.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "srCyrl",
+              function () {
+                return _sr_Cyrl__WEBPACK_IMPORTED_MODULE_29__["default"];
+              }
+            );
+
+            /* harmony import */ var _sv__WEBPACK_IMPORTED_MODULE_30__ =
+              __webpack_require__(/*! ./sv */ "./src/locale/sv.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "sv",
+              function () {
+                return _sv__WEBPACK_IMPORTED_MODULE_30__["default"];
+              }
+            );
+
+            /* harmony import */ var _th__WEBPACK_IMPORTED_MODULE_31__ =
+              __webpack_require__(/*! ./th */ "./src/locale/th.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "th",
+              function () {
+                return _th__WEBPACK_IMPORTED_MODULE_31__["default"];
+              }
+            );
+
+            /* harmony import */ var _tr__WEBPACK_IMPORTED_MODULE_32__ =
+              __webpack_require__(/*! ./tr */ "./src/locale/tr.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "tr",
+              function () {
+                return _tr__WEBPACK_IMPORTED_MODULE_32__["default"];
+              }
+            );
+
+            /* harmony import */ var _uk__WEBPACK_IMPORTED_MODULE_33__ =
+              __webpack_require__(/*! ./uk */ "./src/locale/uk.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "uk",
+              function () {
+                return _uk__WEBPACK_IMPORTED_MODULE_33__["default"];
+              }
+            );
+
+            /* harmony import */ var _zh_Hans__WEBPACK_IMPORTED_MODULE_34__ =
+              __webpack_require__(/*! ./zh-Hans */ "./src/locale/zh-Hans.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "zhHans",
+              function () {
+                return _zh_Hans__WEBPACK_IMPORTED_MODULE_34__["default"];
+              }
+            );
+
+            /* harmony import */ var _zh_Hant__WEBPACK_IMPORTED_MODULE_35__ =
+              __webpack_require__(/*! ./zh-Hant */ "./src/locale/zh-Hant.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "zhHant",
+              function () {
+                return _zh_Hant__WEBPACK_IMPORTED_MODULE_35__["default"];
+              }
+            );
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/it.ts":
-/*!**************************!*\
+        /***/ "./src/locale/it.ts":
+          /*!**************************!*\
   !*** ./src/locale/it.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Distintivo',
-  close: 'Chiudi',
-  dataIterator: {
-    noResultsText: 'Nessun risultato trovato',
-    loadingText: 'Caricamento in corso...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Righe per pagina:',
-    ariaLabel: {
-      sortDescending: 'Ordinati in ordine decrescente.',
-      sortAscending: 'Ordinati in ordine crescente.',
-      sortNone: 'Non ordinato.',
-      activateNone: "Attiva per rimuovere l'ordinamento.",
-      activateDescending: 'Attiva per ordinare in ordine decrescente.',
-      activateAscending: 'Attiva per ordinare in ordine crescente.'
-    },
-    sortBy: 'Ordina per'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Elementi per pagina:',
-    itemsPerPageAll: 'Tutti',
-    nextPage: 'Pagina seguente',
-    prevPage: 'Pagina precedente',
-    firstPage: 'Pagina prima',
-    lastPage: 'Pagina ultima',
-    pageText: '{0}-{1} di {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} selezionati',
-    nextMonthAriaLabel: 'Il prossimo mese',
-    nextYearAriaLabel: "L'anno prossimo",
-    prevMonthAriaLabel: 'Il mese scorso',
-    prevYearAriaLabel: "L'anno scorso"
-  },
-  noDataText: 'Nessun elemento disponibile',
-  carousel: {
-    prev: 'Vista precedente',
-    next: 'Prossima vista',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} di più'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in totale)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigazione impaginazione',
-      next: 'Pagina seguente',
-      previous: 'Pagina precedente',
-      page: 'Vai alla pagina {0}',
-      currentPage: 'Pagina corrente, pagina {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Distintivo",
+              close: "Chiudi",
+              dataIterator: {
+                noResultsText: "Nessun risultato trovato",
+                loadingText: "Caricamento in corso...",
+              },
+              dataTable: {
+                itemsPerPageText: "Righe per pagina:",
+                ariaLabel: {
+                  sortDescending: "Ordinati in ordine decrescente.",
+                  sortAscending: "Ordinati in ordine crescente.",
+                  sortNone: "Non ordinato.",
+                  activateNone: "Attiva per rimuovere l'ordinamento.",
+                  activateDescending:
+                    "Attiva per ordinare in ordine decrescente.",
+                  activateAscending: "Attiva per ordinare in ordine crescente.",
+                },
+                sortBy: "Ordina per",
+              },
+              dataFooter: {
+                itemsPerPageText: "Elementi per pagina:",
+                itemsPerPageAll: "Tutti",
+                nextPage: "Pagina seguente",
+                prevPage: "Pagina precedente",
+                firstPage: "Pagina prima",
+                lastPage: "Pagina ultima",
+                pageText: "{0}-{1} di {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} selezionati",
+                nextMonthAriaLabel: "Il prossimo mese",
+                nextYearAriaLabel: "L'anno prossimo",
+                prevMonthAriaLabel: "Il mese scorso",
+                prevYearAriaLabel: "L'anno scorso",
+              },
+              noDataText: "Nessun elemento disponibile",
+              carousel: {
+                prev: "Vista precedente",
+                next: "Prossima vista",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} di più",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in totale)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigazione impaginazione",
+                  next: "Pagina seguente",
+                  previous: "Pagina precedente",
+                  page: "Vai alla pagina {0}",
+                  currentPage: "Pagina corrente, pagina {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/ja.ts":
-/*!**************************!*\
+        /***/ "./src/locale/ja.ts":
+          /*!**************************!*\
   !*** ./src/locale/ja.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'バッジ',
-  close: '閉じる',
-  dataIterator: {
-    noResultsText: '検索結果が見つかりません。',
-    loadingText: '項目をロード中です...'
-  },
-  dataTable: {
-    itemsPerPageText: '1ページあたりの行数:',
-    ariaLabel: {
-      sortDescending: '降順の並び替え。',
-      sortAscending: '昇順の並び替え。',
-      sortNone: 'ソートされていません。',
-      activateNone: 'ソートを削除するには有効にしてください。',
-      activateDescending: '降順の並び替えのためには有効にしてください。',
-      activateAscending: '昇順のソートのためには有効にしてください。'
-    },
-    sortBy: 'ソート方式'
-  },
-  dataFooter: {
-    itemsPerPageText: '1ページあたりの件数:',
-    itemsPerPageAll: 'すべて',
-    nextPage: '次のページ',
-    prevPage: '前のページ',
-    firstPage: '最初のページ',
-    lastPage: '最後のページ',
-    pageText: '{0}-{1} 件目 / {2}件'
-  },
-  datePicker: {
-    itemsSelected: '{0}日付選択',
-    nextMonthAriaLabel: '来月',
-    nextYearAriaLabel: '来年',
-    prevMonthAriaLabel: '前月',
-    prevYearAriaLabel: '前年'
-  },
-  noDataText: 'データはありません。',
-  carousel: {
-    prev: '前のビジュアル',
-    next: '次のビジュアル',
-    ariaLabel: {
-      delimiter: 'カルーセルのスライド {0}件目 / {1}件'
-    }
-  },
-  calendar: {
-    moreEvents: 'さらに{0}'
-  },
-  fileInput: {
-    counter: '{0} ファイル',
-    counterSize: '{0} ファイル (合計 {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'ページネーションナビゲーション',
-      next: '次のページ',
-      previous: '前のページ',
-      page: '{0}ページ目に移動',
-      currentPage: '現在のページ、ページ {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "バッジ",
+              close: "閉じる",
+              dataIterator: {
+                noResultsText: "検索結果が見つかりません。",
+                loadingText: "項目をロード中です...",
+              },
+              dataTable: {
+                itemsPerPageText: "1ページあたりの行数:",
+                ariaLabel: {
+                  sortDescending: "降順の並び替え。",
+                  sortAscending: "昇順の並び替え。",
+                  sortNone: "ソートされていません。",
+                  activateNone: "ソートを削除するには有効にしてください。",
+                  activateDescending:
+                    "降順の並び替えのためには有効にしてください。",
+                  activateAscending:
+                    "昇順のソートのためには有効にしてください。",
+                },
+                sortBy: "ソート方式",
+              },
+              dataFooter: {
+                itemsPerPageText: "1ページあたりの件数:",
+                itemsPerPageAll: "すべて",
+                nextPage: "次のページ",
+                prevPage: "前のページ",
+                firstPage: "最初のページ",
+                lastPage: "最後のページ",
+                pageText: "{0}-{1} 件目 / {2}件",
+              },
+              datePicker: {
+                itemsSelected: "{0}日付選択",
+                nextMonthAriaLabel: "来月",
+                nextYearAriaLabel: "来年",
+                prevMonthAriaLabel: "前月",
+                prevYearAriaLabel: "前年",
+              },
+              noDataText: "データはありません。",
+              carousel: {
+                prev: "前のビジュアル",
+                next: "次のビジュアル",
+                ariaLabel: {
+                  delimiter: "カルーセルのスライド {0}件目 / {1}件",
+                },
+              },
+              calendar: {
+                moreEvents: "さらに{0}",
+              },
+              fileInput: {
+                counter: "{0} ファイル",
+                counterSize: "{0} ファイル (合計 {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "ページネーションナビゲーション",
+                  next: "次のページ",
+                  previous: "前のページ",
+                  page: "{0}ページ目に移動",
+                  currentPage: "現在のページ、ページ {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/ko.ts":
-/*!**************************!*\
+        /***/ "./src/locale/ko.ts":
+          /*!**************************!*\
   !*** ./src/locale/ko.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: '배지',
-  close: '닫기',
-  dataIterator: {
-    noResultsText: '일치하는 항목이 없습니다.',
-    loadingText: '불러오는 중...'
-  },
-  dataTable: {
-    itemsPerPageText: '페이지 당 행 수:',
-    ariaLabel: {
-      sortDescending: '내림차순 정렬.',
-      sortAscending: '오름차순 정렬.',
-      sortNone: '정렬하지 않음.',
-      activateNone: '정렬을 취소하려면 활성화하세요.',
-      activateDescending: '내림차순 정렬을 위해 활성화하세요.',
-      activateAscending: '오름차순 정렬을 위해 활성화하세요.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: '페이지 당 항목 수:',
-    itemsPerPageAll: '전체',
-    nextPage: '다음 페이지',
-    prevPage: '이전 페이지',
-    firstPage: '첫 페이지',
-    lastPage: '마지막 페이지',
-    pageText: '{2} 중 {0}-{1}'
-  },
-  datePicker: {
-    itemsSelected: '{0} 선택됨',
-    nextMonthAriaLabel: '다음 달',
-    nextYearAriaLabel: '내년',
-    prevMonthAriaLabel: '지난달',
-    prevYearAriaLabel: '전년도'
-  },
-  noDataText: '데이터가 없습니다.',
-  carousel: {
-    prev: '이전 화면',
-    next: '다음 화면',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} 더보기'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in total)'
-  },
-  timePicker: {
-    am: '오전',
-    pm: '오후'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Pagination Navigation',
-      next: '다음 페이지',
-      previous: '이전 페이지',
-      page: '고토 페이지 {0}',
-      currentPage: '현재 페이지, 페이지 {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "배지",
+              close: "닫기",
+              dataIterator: {
+                noResultsText: "일치하는 항목이 없습니다.",
+                loadingText: "불러오는 중...",
+              },
+              dataTable: {
+                itemsPerPageText: "페이지 당 행 수:",
+                ariaLabel: {
+                  sortDescending: "내림차순 정렬.",
+                  sortAscending: "오름차순 정렬.",
+                  sortNone: "정렬하지 않음.",
+                  activateNone: "정렬을 취소하려면 활성화하세요.",
+                  activateDescending: "내림차순 정렬을 위해 활성화하세요.",
+                  activateAscending: "오름차순 정렬을 위해 활성화하세요.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "페이지 당 항목 수:",
+                itemsPerPageAll: "전체",
+                nextPage: "다음 페이지",
+                prevPage: "이전 페이지",
+                firstPage: "첫 페이지",
+                lastPage: "마지막 페이지",
+                pageText: "{2} 중 {0}-{1}",
+              },
+              datePicker: {
+                itemsSelected: "{0} 선택됨",
+                nextMonthAriaLabel: "다음 달",
+                nextYearAriaLabel: "내년",
+                prevMonthAriaLabel: "지난달",
+                prevYearAriaLabel: "전년도",
+              },
+              noDataText: "데이터가 없습니다.",
+              carousel: {
+                prev: "이전 화면",
+                next: "다음 화면",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} 더보기",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in total)",
+              },
+              timePicker: {
+                am: "오전",
+                pm: "오후",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Pagination Navigation",
+                  next: "다음 페이지",
+                  previous: "이전 페이지",
+                  page: "고토 페이지 {0}",
+                  currentPage: "현재 페이지, 페이지 {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/lt.ts":
-/*!**************************!*\
+        /***/ "./src/locale/lt.ts":
+          /*!**************************!*\
   !*** ./src/locale/lt.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Ženklelis',
-  close: 'Uždaryti',
-  dataIterator: {
-    noResultsText: 'Nerasta atitinkančių įrašų',
-    loadingText: 'Kraunama...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Eilutės per puslapį:',
-    ariaLabel: {
-      sortDescending: 'Išrikiuota mažėjimo tvarka.',
-      sortAscending: 'Išrikiuota didėjimo tvarka.',
-      sortNone: 'Nerikiuota.',
-      activateNone: 'Suaktyvinkite, jei norite rikiavimą pašalinti.',
-      activateDescending: 'Suaktyvinkite, jei norite rikiuoti mažėjimo tvarka.',
-      activateAscending: 'Suaktyvinkite, jei norite rikiuoti didėjimo tvarka.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Įrašai per puslapį:',
-    itemsPerPageAll: 'Visi',
-    nextPage: 'Kitas puslapis',
-    prevPage: 'Ankstesnis puslapis',
-    firstPage: 'Pirmas puslapis',
-    lastPage: 'Paskutinis puslapis',
-    pageText: '{0}-{1} iš {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} pasirinkta',
-    nextMonthAriaLabel: 'Kitą mėnesį',
-    nextYearAriaLabel: 'Kitais metais',
-    prevMonthAriaLabel: 'Praeita mėnesį',
-    prevYearAriaLabel: 'Praeiti metai'
-  },
-  noDataText: 'Nėra duomenų',
-  carousel: {
-    prev: 'Ankstesnioji skaidrė',
-    next: 'Kita skaidrė',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: 'Daugiau {0}'
-  },
-  fileInput: {
-    counter: '{0} failų',
-    counterSize: '{0} failų ({1} iš viso)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Puslapio naršymas',
-      next: 'Kitas puslapis',
-      previous: 'Ankstesnis puslapis',
-      page: 'Eiti į puslapį {0}',
-      currentPage: 'Dabartinis puslapis, puslapis {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Ženklelis",
+              close: "Uždaryti",
+              dataIterator: {
+                noResultsText: "Nerasta atitinkančių įrašų",
+                loadingText: "Kraunama...",
+              },
+              dataTable: {
+                itemsPerPageText: "Eilutės per puslapį:",
+                ariaLabel: {
+                  sortDescending: "Išrikiuota mažėjimo tvarka.",
+                  sortAscending: "Išrikiuota didėjimo tvarka.",
+                  sortNone: "Nerikiuota.",
+                  activateNone:
+                    "Suaktyvinkite, jei norite rikiavimą pašalinti.",
+                  activateDescending:
+                    "Suaktyvinkite, jei norite rikiuoti mažėjimo tvarka.",
+                  activateAscending:
+                    "Suaktyvinkite, jei norite rikiuoti didėjimo tvarka.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "Įrašai per puslapį:",
+                itemsPerPageAll: "Visi",
+                nextPage: "Kitas puslapis",
+                prevPage: "Ankstesnis puslapis",
+                firstPage: "Pirmas puslapis",
+                lastPage: "Paskutinis puslapis",
+                pageText: "{0}-{1} iš {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} pasirinkta",
+                nextMonthAriaLabel: "Kitą mėnesį",
+                nextYearAriaLabel: "Kitais metais",
+                prevMonthAriaLabel: "Praeita mėnesį",
+                prevYearAriaLabel: "Praeiti metai",
+              },
+              noDataText: "Nėra duomenų",
+              carousel: {
+                prev: "Ankstesnioji skaidrė",
+                next: "Kita skaidrė",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "Daugiau {0}",
+              },
+              fileInput: {
+                counter: "{0} failų",
+                counterSize: "{0} failų ({1} iš viso)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Puslapio naršymas",
+                  next: "Kitas puslapis",
+                  previous: "Ankstesnis puslapis",
+                  page: "Eiti į puslapį {0}",
+                  currentPage: "Dabartinis puslapis, puslapis {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/lv.ts":
-/*!**************************!*\
+        /***/ "./src/locale/lv.ts":
+          /*!**************************!*\
   !*** ./src/locale/lv.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Žetons',
-  close: 'Aizvērt',
-  dataIterator: {
-    noResultsText: 'Nekas netika atrasts',
-    loadingText: 'Ielādē...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rādīt lapā:',
-    ariaLabel: {
-      sortDescending: 'Sakārtots dilstošā secībā.',
-      sortAscending: 'Sakārtots augošā secībā.',
-      sortNone: 'Nav sakārtots.',
-      activateNone: 'Aktivizēt, lai noņemtu kārtošanu.',
-      activateDescending: 'Aktivizēt, lai sakārtotu dilstošā secībā.',
-      activateAscending: 'Aktivizēt, lai sakārtotu augošā secībā.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Rādīt lapā:',
-    itemsPerPageAll: 'Visu',
-    nextPage: 'Nākamā lapa',
-    prevPage: 'Iepriekšējā lapa',
-    firstPage: 'Pirmā lapa',
-    lastPage: 'Pēdējā lapa',
-    pageText: '{0}-{1} no {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} izvēlēts',
-    nextMonthAriaLabel: 'Nākammēnes',
-    nextYearAriaLabel: 'Nākamgad',
-    prevMonthAriaLabel: 'Iepriekšējais mēnesis',
-    prevYearAriaLabel: 'Iepriekšējais gads'
-  },
-  noDataText: 'Nav pieejamu datu',
-  carousel: {
-    prev: 'Iepriekšējais slaids',
-    next: 'Nākamais slaids',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: 'Vēl {0}'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigācija paginationā',
-      next: 'Nākamā lapa',
-      previous: 'Iepriekšējā lapa',
-      page: 'Iet uz lapu {0}',
-      currentPage: 'Pašreizējā lapa, lapa {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Žetons",
+              close: "Aizvērt",
+              dataIterator: {
+                noResultsText: "Nekas netika atrasts",
+                loadingText: "Ielādē...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rādīt lapā:",
+                ariaLabel: {
+                  sortDescending: "Sakārtots dilstošā secībā.",
+                  sortAscending: "Sakārtots augošā secībā.",
+                  sortNone: "Nav sakārtots.",
+                  activateNone: "Aktivizēt, lai noņemtu kārtošanu.",
+                  activateDescending:
+                    "Aktivizēt, lai sakārtotu dilstošā secībā.",
+                  activateAscending: "Aktivizēt, lai sakārtotu augošā secībā.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "Rādīt lapā:",
+                itemsPerPageAll: "Visu",
+                nextPage: "Nākamā lapa",
+                prevPage: "Iepriekšējā lapa",
+                firstPage: "Pirmā lapa",
+                lastPage: "Pēdējā lapa",
+                pageText: "{0}-{1} no {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} izvēlēts",
+                nextMonthAriaLabel: "Nākammēnes",
+                nextYearAriaLabel: "Nākamgad",
+                prevMonthAriaLabel: "Iepriekšējais mēnesis",
+                prevYearAriaLabel: "Iepriekšējais gads",
+              },
+              noDataText: "Nav pieejamu datu",
+              carousel: {
+                prev: "Iepriekšējais slaids",
+                next: "Nākamais slaids",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "Vēl {0}",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigācija paginationā",
+                  next: "Nākamā lapa",
+                  previous: "Iepriekšējā lapa",
+                  page: "Iet uz lapu {0}",
+                  currentPage: "Pašreizējā lapa, lapa {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/nl.ts":
-/*!**************************!*\
+        /***/ "./src/locale/nl.ts":
+          /*!**************************!*\
   !*** ./src/locale/nl.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'insigne',
-  close: 'Sluiten',
-  dataIterator: {
-    noResultsText: 'Geen overeenkomende resultaten gevonden',
-    loadingText: 'Items aan het laden...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rijen per pagina:',
-    ariaLabel: {
-      sortDescending: 'Aflopend gesorteerd.',
-      sortAscending: 'Oplopend gesorteerd.',
-      sortNone: 'Niet gesorteerd.',
-      activateNone: 'Activeer om de sortering te verwijderen.',
-      activateDescending: 'Activeer om aflopend te sorteren.',
-      activateAscending: 'Activeer om oplopend te sorteren.'
-    },
-    sortBy: 'Sorteer volgens'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Aantal per pagina:',
-    itemsPerPageAll: 'Alles',
-    nextPage: 'Volgende pagina',
-    prevPage: 'Vorige pagina',
-    firstPage: 'Eerste pagina',
-    lastPage: 'Laatste pagina',
-    pageText: '{0}-{1} van {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} geselecteerd',
-    nextMonthAriaLabel: 'Volgende maand',
-    nextYearAriaLabel: 'Volgend jaar',
-    prevMonthAriaLabel: 'Vorige maand',
-    prevYearAriaLabel: 'Vorig jaar'
-  },
-  noDataText: 'Geen gegevens beschikbaar',
-  carousel: {
-    prev: 'Vorig beeld',
-    next: 'Volgend beeld',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} meer'
-  },
-  fileInput: {
-    counter: '{0} bestanden',
-    counterSize: '{0} bestanden ({1} in totaal)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Paginanavigatie',
-      next: 'Volgende pagina',
-      previous: 'Vorige pagina',
-      page: 'Ga naar pagina {0}',
-      currentPage: 'Huidige pagina, pagina {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "insigne",
+              close: "Sluiten",
+              dataIterator: {
+                noResultsText: "Geen overeenkomende resultaten gevonden",
+                loadingText: "Items aan het laden...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rijen per pagina:",
+                ariaLabel: {
+                  sortDescending: "Aflopend gesorteerd.",
+                  sortAscending: "Oplopend gesorteerd.",
+                  sortNone: "Niet gesorteerd.",
+                  activateNone: "Activeer om de sortering te verwijderen.",
+                  activateDescending: "Activeer om aflopend te sorteren.",
+                  activateAscending: "Activeer om oplopend te sorteren.",
+                },
+                sortBy: "Sorteer volgens",
+              },
+              dataFooter: {
+                itemsPerPageText: "Aantal per pagina:",
+                itemsPerPageAll: "Alles",
+                nextPage: "Volgende pagina",
+                prevPage: "Vorige pagina",
+                firstPage: "Eerste pagina",
+                lastPage: "Laatste pagina",
+                pageText: "{0}-{1} van {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} geselecteerd",
+                nextMonthAriaLabel: "Volgende maand",
+                nextYearAriaLabel: "Volgend jaar",
+                prevMonthAriaLabel: "Vorige maand",
+                prevYearAriaLabel: "Vorig jaar",
+              },
+              noDataText: "Geen gegevens beschikbaar",
+              carousel: {
+                prev: "Vorig beeld",
+                next: "Volgend beeld",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} meer",
+              },
+              fileInput: {
+                counter: "{0} bestanden",
+                counterSize: "{0} bestanden ({1} in totaal)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Paginanavigatie",
+                  next: "Volgende pagina",
+                  previous: "Vorige pagina",
+                  page: "Ga naar pagina {0}",
+                  currentPage: "Huidige pagina, pagina {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/no.ts":
-/*!**************************!*\
+        /***/ "./src/locale/no.ts":
+          /*!**************************!*\
   !*** ./src/locale/no.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Skilt',
-  close: 'Lukk',
-  dataIterator: {
-    noResultsText: 'Fant ingen matchende elementer.',
-    loadingText: 'Laster elementer...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rader per side:',
-    ariaLabel: {
-      sortDescending: 'Sortert synkende.',
-      sortAscending: 'Sortert stigende.',
-      sortNone: 'Ikke sortert.',
-      activateNone: 'Aktiver for å fjerne sortering.',
-      activateDescending: 'Aktiver for å sortere synkende.',
-      activateAscending: 'Aktiver for å sortere stigende.'
-    },
-    sortBy: 'Sorter etter'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Elementer per side:',
-    itemsPerPageAll: 'Alle',
-    nextPage: 'Neste side',
-    prevPage: 'Forrige side',
-    firstPage: 'Første side',
-    lastPage: 'Siste side',
-    pageText: '{0}-{1} av {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} valgt',
-    nextMonthAriaLabel: 'Neste måned',
-    nextYearAriaLabel: 'Neste år',
-    prevMonthAriaLabel: 'Forrige måned',
-    prevYearAriaLabel: 'Forrige år'
-  },
-  noDataText: 'Ingen data er tilgjengelig',
-  carousel: {
-    prev: 'Forrige bilde',
-    next: 'Neste bilde',
-    ariaLabel: {
-      delimiter: 'Karusellbilde {0} av {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} flere'
-  },
-  fileInput: {
-    counter: '{0} filer',
-    counterSize: '{0} filer ({1} totalt)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Paginasjonsnavigasjon',
-      next: 'Neste side',
-      previous: 'Forrige side',
-      page: 'Gå til side {0}',
-      currentPage: 'Gjeldende side, side {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Skilt",
+              close: "Lukk",
+              dataIterator: {
+                noResultsText: "Fant ingen matchende elementer.",
+                loadingText: "Laster elementer...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rader per side:",
+                ariaLabel: {
+                  sortDescending: "Sortert synkende.",
+                  sortAscending: "Sortert stigende.",
+                  sortNone: "Ikke sortert.",
+                  activateNone: "Aktiver for å fjerne sortering.",
+                  activateDescending: "Aktiver for å sortere synkende.",
+                  activateAscending: "Aktiver for å sortere stigende.",
+                },
+                sortBy: "Sorter etter",
+              },
+              dataFooter: {
+                itemsPerPageText: "Elementer per side:",
+                itemsPerPageAll: "Alle",
+                nextPage: "Neste side",
+                prevPage: "Forrige side",
+                firstPage: "Første side",
+                lastPage: "Siste side",
+                pageText: "{0}-{1} av {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} valgt",
+                nextMonthAriaLabel: "Neste måned",
+                nextYearAriaLabel: "Neste år",
+                prevMonthAriaLabel: "Forrige måned",
+                prevYearAriaLabel: "Forrige år",
+              },
+              noDataText: "Ingen data er tilgjengelig",
+              carousel: {
+                prev: "Forrige bilde",
+                next: "Neste bilde",
+                ariaLabel: {
+                  delimiter: "Karusellbilde {0} av {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} flere",
+              },
+              fileInput: {
+                counter: "{0} filer",
+                counterSize: "{0} filer ({1} totalt)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Paginasjonsnavigasjon",
+                  next: "Neste side",
+                  previous: "Forrige side",
+                  page: "Gå til side {0}",
+                  currentPage: "Gjeldende side, side {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/pl.ts":
-/*!**************************!*\
+        /***/ "./src/locale/pl.ts":
+          /*!**************************!*\
   !*** ./src/locale/pl.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Odznaka',
-  close: 'Zamknij',
-  dataIterator: {
-    noResultsText: 'Nie znaleziono danych odpowiadających wyszukiwaniu',
-    loadingText: 'Wczytywanie danych...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Wierszy na stronie:',
-    ariaLabel: {
-      sortDescending: 'Sortowanie malejąco. Kliknij aby zmienić.',
-      sortAscending: 'Sortowanie rosnąco. Kliknij aby zmienić.',
-      sortNone: 'Bez sortowania. Kliknij aby posortować rosnąco.',
-      activateNone: 'Kliknij aby usunąć sortowanie.',
-      activateDescending: 'Kliknij aby posortować malejąco.',
-      activateAscending: 'Kliknij aby posortować rosnąco.'
-    },
-    sortBy: 'Sortuj według'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Pozycji na stronie:',
-    itemsPerPageAll: 'Wszystkie',
-    nextPage: 'Następna strona',
-    prevPage: 'Poprzednia strona',
-    firstPage: 'Pierwsza strona',
-    lastPage: 'Ostatnia strona',
-    pageText: '{0}-{1} z {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} dat(y)',
-    nextMonthAriaLabel: 'Następny miesiąc',
-    nextYearAriaLabel: 'Następny rok',
-    prevMonthAriaLabel: 'Poprzedni miesiąc',
-    prevYearAriaLabel: 'Poprzedni rok'
-  },
-  noDataText: 'Brak danych',
-  carousel: {
-    prev: 'Poprzedni obraz',
-    next: 'Następny obraz',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} więcej'
-  },
-  fileInput: {
-    counter: 'Liczba plików: {0}',
-    counterSize: 'Liczba plików: {0} (łącznie {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Nawigacja paginacyjna',
-      next: 'Następna strona',
-      previous: 'Poprzednia strona',
-      page: 'Idź do strony {0}',
-      currentPage: 'Bieżąca strona, strona {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Odznaka",
+              close: "Zamknij",
+              dataIterator: {
+                noResultsText:
+                  "Nie znaleziono danych odpowiadających wyszukiwaniu",
+                loadingText: "Wczytywanie danych...",
+              },
+              dataTable: {
+                itemsPerPageText: "Wierszy na stronie:",
+                ariaLabel: {
+                  sortDescending: "Sortowanie malejąco. Kliknij aby zmienić.",
+                  sortAscending: "Sortowanie rosnąco. Kliknij aby zmienić.",
+                  sortNone: "Bez sortowania. Kliknij aby posortować rosnąco.",
+                  activateNone: "Kliknij aby usunąć sortowanie.",
+                  activateDescending: "Kliknij aby posortować malejąco.",
+                  activateAscending: "Kliknij aby posortować rosnąco.",
+                },
+                sortBy: "Sortuj według",
+              },
+              dataFooter: {
+                itemsPerPageText: "Pozycji na stronie:",
+                itemsPerPageAll: "Wszystkie",
+                nextPage: "Następna strona",
+                prevPage: "Poprzednia strona",
+                firstPage: "Pierwsza strona",
+                lastPage: "Ostatnia strona",
+                pageText: "{0}-{1} z {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} dat(y)",
+                nextMonthAriaLabel: "Następny miesiąc",
+                nextYearAriaLabel: "Następny rok",
+                prevMonthAriaLabel: "Poprzedni miesiąc",
+                prevYearAriaLabel: "Poprzedni rok",
+              },
+              noDataText: "Brak danych",
+              carousel: {
+                prev: "Poprzedni obraz",
+                next: "Następny obraz",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} więcej",
+              },
+              fileInput: {
+                counter: "Liczba plików: {0}",
+                counterSize: "Liczba plików: {0} (łącznie {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Nawigacja paginacyjna",
+                  next: "Następna strona",
+                  previous: "Poprzednia strona",
+                  page: "Idź do strony {0}",
+                  currentPage: "Bieżąca strona, strona {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/pt.ts":
-/*!**************************!*\
+        /***/ "./src/locale/pt.ts":
+          /*!**************************!*\
   !*** ./src/locale/pt.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Distintivo',
-  close: 'Fechar',
-  dataIterator: {
-    noResultsText: 'Nenhum dado encontrado',
-    loadingText: 'Carregando itens...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Linhas por página:',
-    ariaLabel: {
-      sortDescending: 'Ordenado decrescente.',
-      sortAscending: 'Ordenado crescente.',
-      sortNone: 'Não ordenado.',
-      activateNone: 'Ative para remover a ordenação.',
-      activateDescending: 'Ative para ordenar decrescente.',
-      activateAscending: 'Ative para ordenar crescente.'
-    },
-    sortBy: 'Ordenar por'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Itens por página:',
-    itemsPerPageAll: 'Todos',
-    nextPage: 'Próxima página',
-    prevPage: 'Página anterior',
-    firstPage: 'Primeira página',
-    lastPage: 'Última página',
-    pageText: '{0}-{1} de {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} selecionado(s)',
-    nextMonthAriaLabel: 'Próximo mês',
-    nextYearAriaLabel: 'Próximo ano',
-    prevMonthAriaLabel: 'Mês anterior',
-    prevYearAriaLabel: 'Ano anterior'
-  },
-  noDataText: 'Não há dados disponíveis',
-  carousel: {
-    prev: 'Visão anterior',
-    next: 'Próxima visão',
-    ariaLabel: {
-      delimiter: 'Slide {0} de {1} do carrossel'
-    }
-  },
-  calendar: {
-    moreEvents: 'Mais {0}'
-  },
-  fileInput: {
-    counter: '{0} arquivo(s)',
-    counterSize: '{0} arquivo(s) ({1} no total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navegação de paginação',
-      next: 'Próxima página',
-      previous: 'Página anterior',
-      page: 'Ir à página {0}',
-      currentPage: 'Página atual, página {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Distintivo",
+              close: "Fechar",
+              dataIterator: {
+                noResultsText: "Nenhum dado encontrado",
+                loadingText: "Carregando itens...",
+              },
+              dataTable: {
+                itemsPerPageText: "Linhas por página:",
+                ariaLabel: {
+                  sortDescending: "Ordenado decrescente.",
+                  sortAscending: "Ordenado crescente.",
+                  sortNone: "Não ordenado.",
+                  activateNone: "Ative para remover a ordenação.",
+                  activateDescending: "Ative para ordenar decrescente.",
+                  activateAscending: "Ative para ordenar crescente.",
+                },
+                sortBy: "Ordenar por",
+              },
+              dataFooter: {
+                itemsPerPageText: "Itens por página:",
+                itemsPerPageAll: "Todos",
+                nextPage: "Próxima página",
+                prevPage: "Página anterior",
+                firstPage: "Primeira página",
+                lastPage: "Última página",
+                pageText: "{0}-{1} de {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} selecionado(s)",
+                nextMonthAriaLabel: "Próximo mês",
+                nextYearAriaLabel: "Próximo ano",
+                prevMonthAriaLabel: "Mês anterior",
+                prevYearAriaLabel: "Ano anterior",
+              },
+              noDataText: "Não há dados disponíveis",
+              carousel: {
+                prev: "Visão anterior",
+                next: "Próxima visão",
+                ariaLabel: {
+                  delimiter: "Slide {0} de {1} do carrossel",
+                },
+              },
+              calendar: {
+                moreEvents: "Mais {0}",
+              },
+              fileInput: {
+                counter: "{0} arquivo(s)",
+                counterSize: "{0} arquivo(s) ({1} no total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navegação de paginação",
+                  next: "Próxima página",
+                  previous: "Página anterior",
+                  page: "Ir à página {0}",
+                  currentPage: "Página atual, página {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/ro.ts":
-/*!**************************!*\
+        /***/ "./src/locale/ro.ts":
+          /*!**************************!*\
   !*** ./src/locale/ro.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Insignă',
-  close: 'Close',
-  dataIterator: {
-    noResultsText: 'Nu au fost găsite înregistrări care să se potrivească',
-    loadingText: 'Loading item...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rânduri pe pagină:',
-    ariaLabel: {
-      sortDescending: 'Sorted descending.',
-      sortAscending: 'Sorted ascending.',
-      sortNone: 'Not sorted.',
-      activateNone: 'Activate to remove sorting.',
-      activateDescending: 'Activate to sort descending.',
-      activateAscending: 'Activate to sort ascending.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Articole pe pagină:',
-    itemsPerPageAll: 'Toate',
-    nextPage: 'Pagina următoare',
-    prevPage: 'Pagina anterioară',
-    firstPage: 'Pagina prima',
-    lastPage: 'Pagina ultima',
-    pageText: '{0}-{1} din {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} selectate',
-    nextMonthAriaLabel: 'Luna viitoare',
-    nextYearAriaLabel: 'Anul urmator',
-    prevMonthAriaLabel: 'Luna trecută',
-    prevYearAriaLabel: 'Anul precedent'
-  },
-  noDataText: 'Nu există date disponibile',
-  carousel: {
-    prev: 'Anterior vizual',
-    next: 'Următorul vizual',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} mai mult'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigare prin paginare',
-      next: 'Pagina următoare',
-      previous: 'Pagina anterioară',
-      page: 'Mergi la pagina {0}',
-      currentPage: 'Pagina curentă, pagina {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Insignă",
+              close: "Close",
+              dataIterator: {
+                noResultsText:
+                  "Nu au fost găsite înregistrări care să se potrivească",
+                loadingText: "Loading item...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rânduri pe pagină:",
+                ariaLabel: {
+                  sortDescending: "Sorted descending.",
+                  sortAscending: "Sorted ascending.",
+                  sortNone: "Not sorted.",
+                  activateNone: "Activate to remove sorting.",
+                  activateDescending: "Activate to sort descending.",
+                  activateAscending: "Activate to sort ascending.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "Articole pe pagină:",
+                itemsPerPageAll: "Toate",
+                nextPage: "Pagina următoare",
+                prevPage: "Pagina anterioară",
+                firstPage: "Pagina prima",
+                lastPage: "Pagina ultima",
+                pageText: "{0}-{1} din {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} selectate",
+                nextMonthAriaLabel: "Luna viitoare",
+                nextYearAriaLabel: "Anul urmator",
+                prevMonthAriaLabel: "Luna trecută",
+                prevYearAriaLabel: "Anul precedent",
+              },
+              noDataText: "Nu există date disponibile",
+              carousel: {
+                prev: "Anterior vizual",
+                next: "Următorul vizual",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} mai mult",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigare prin paginare",
+                  next: "Pagina următoare",
+                  previous: "Pagina anterioară",
+                  page: "Mergi la pagina {0}",
+                  currentPage: "Pagina curentă, pagina {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/ru.ts":
-/*!**************************!*\
+        /***/ "./src/locale/ru.ts":
+          /*!**************************!*\
   !*** ./src/locale/ru.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'знак',
-  close: 'Закрыть',
-  dataIterator: {
-    noResultsText: 'Не найдено подходящих записей',
-    loadingText: 'Запись загружается...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Строк на странице:',
-    ariaLabel: {
-      sortDescending: 'Упорядочено по убыванию.',
-      sortAscending: 'Упорядочено по возрастанию.',
-      sortNone: 'Не упорядочено.',
-      activateNone: 'Активируйте, чтобы убрать сортировку.',
-      activateDescending: 'Активируйте для упорядочивания убыванию.',
-      activateAscending: 'Активируйте для упорядочивания по возрастанию.'
-    },
-    sortBy: 'Сортировать по'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Записей на странице:',
-    itemsPerPageAll: 'Все',
-    nextPage: 'Следующая страница',
-    prevPage: 'Предыдущая страница',
-    firstPage: 'Первая страница',
-    lastPage: 'Последняя страница',
-    pageText: '{0}-{1} из {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} выбран',
-    nextMonthAriaLabel: 'Следующий месяц',
-    nextYearAriaLabel: 'Следующий год',
-    prevMonthAriaLabel: 'Прошлый месяц',
-    prevYearAriaLabel: 'Предыдущий год'
-  },
-  noDataText: 'Отсутствуют данные',
-  carousel: {
-    prev: 'Предыдущий слайд',
-    next: 'Следующий слайд',
-    ariaLabel: {
-      delimiter: 'Слайд {0} из {1}'
-    }
-  },
-  calendar: {
-    moreEvents: 'Еще {0}'
-  },
-  fileInput: {
-    counter: 'Файлов: {0}',
-    counterSize: 'Файлов: {0} (всего {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Навигация по страницам',
-      next: 'Следующая страница',
-      previous: 'Предыдущая страница',
-      page: 'Перейти на страницу {0}',
-      currentPage: 'Текущая страница, Страница {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "знак",
+              close: "Закрыть",
+              dataIterator: {
+                noResultsText: "Не найдено подходящих записей",
+                loadingText: "Запись загружается...",
+              },
+              dataTable: {
+                itemsPerPageText: "Строк на странице:",
+                ariaLabel: {
+                  sortDescending: "Упорядочено по убыванию.",
+                  sortAscending: "Упорядочено по возрастанию.",
+                  sortNone: "Не упорядочено.",
+                  activateNone: "Активируйте, чтобы убрать сортировку.",
+                  activateDescending:
+                    "Активируйте для упорядочивания убыванию.",
+                  activateAscending:
+                    "Активируйте для упорядочивания по возрастанию.",
+                },
+                sortBy: "Сортировать по",
+              },
+              dataFooter: {
+                itemsPerPageText: "Записей на странице:",
+                itemsPerPageAll: "Все",
+                nextPage: "Следующая страница",
+                prevPage: "Предыдущая страница",
+                firstPage: "Первая страница",
+                lastPage: "Последняя страница",
+                pageText: "{0}-{1} из {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} выбран",
+                nextMonthAriaLabel: "Следующий месяц",
+                nextYearAriaLabel: "Следующий год",
+                prevMonthAriaLabel: "Прошлый месяц",
+                prevYearAriaLabel: "Предыдущий год",
+              },
+              noDataText: "Отсутствуют данные",
+              carousel: {
+                prev: "Предыдущий слайд",
+                next: "Следующий слайд",
+                ariaLabel: {
+                  delimiter: "Слайд {0} из {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "Еще {0}",
+              },
+              fileInput: {
+                counter: "Файлов: {0}",
+                counterSize: "Файлов: {0} (всего {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Навигация по страницам",
+                  next: "Следующая страница",
+                  previous: "Предыдущая страница",
+                  page: "Перейти на страницу {0}",
+                  currentPage: "Текущая страница, Страница {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/sk.ts":
-/*!**************************!*\
+        /***/ "./src/locale/sk.ts":
+          /*!**************************!*\
   !*** ./src/locale/sk.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Odznak',
-  close: 'Zavrieť',
-  dataIterator: {
-    noResultsText: 'Neboli nájdené žiadne záznamy',
-    loadingText: 'Načítavam položky...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Počet riadkov na stránku:',
-    ariaLabel: {
-      sortDescending: 'Zoradené zostupne.',
-      sortAscending: 'Zoradené vzostupne.',
-      sortNone: 'Nezoradené.',
-      activateNone: 'Aktivujte na zrušenie triedenia.',
-      activateDescending: 'Aktivujte na zoradenie zostupne.',
-      activateAscending: 'Aktivujte na zoradenie vzostupne.'
-    },
-    sortBy: 'Zoradiť podľa'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Počet položiek na stránku:',
-    itemsPerPageAll: 'Všetko',
-    nextPage: 'Ďalšia stránka',
-    prevPage: 'Predchádzajúca stránka',
-    firstPage: 'Prvá stránka',
-    lastPage: 'Posledná stránka',
-    pageText: '{0}–{1} z {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} vybrané',
-    nextMonthAriaLabel: 'Ďalší mesiac',
-    nextYearAriaLabel: 'Ďalší rok',
-    prevMonthAriaLabel: 'Predchádzajúci mesiac',
-    prevYearAriaLabel: 'Predchádzajúci rok'
-  },
-  noDataText: 'Nie sú dostupné žiadne dáta',
-  carousel: {
-    prev: 'Predchádzajúci obrázok',
-    next: 'Další obrázok',
-    ariaLabel: {
-      delimiter: 'Snímka {0} z {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} ďalších'
-  },
-  fileInput: {
-    counter: '{0} súborov',
-    counterSize: '{0} súborov ({1} celkom)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigácia stránkovania',
-      next: 'Ďalšia stránka',
-      previous: 'Predchádzajúca stránka',
-      page: 'Ísť na stránku {0}',
-      currentPage: 'Aktuálna stránka, stránka {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Odznak",
+              close: "Zavrieť",
+              dataIterator: {
+                noResultsText: "Neboli nájdené žiadne záznamy",
+                loadingText: "Načítavam položky...",
+              },
+              dataTable: {
+                itemsPerPageText: "Počet riadkov na stránku:",
+                ariaLabel: {
+                  sortDescending: "Zoradené zostupne.",
+                  sortAscending: "Zoradené vzostupne.",
+                  sortNone: "Nezoradené.",
+                  activateNone: "Aktivujte na zrušenie triedenia.",
+                  activateDescending: "Aktivujte na zoradenie zostupne.",
+                  activateAscending: "Aktivujte na zoradenie vzostupne.",
+                },
+                sortBy: "Zoradiť podľa",
+              },
+              dataFooter: {
+                itemsPerPageText: "Počet položiek na stránku:",
+                itemsPerPageAll: "Všetko",
+                nextPage: "Ďalšia stránka",
+                prevPage: "Predchádzajúca stránka",
+                firstPage: "Prvá stránka",
+                lastPage: "Posledná stránka",
+                pageText: "{0}–{1} z {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} vybrané",
+                nextMonthAriaLabel: "Ďalší mesiac",
+                nextYearAriaLabel: "Ďalší rok",
+                prevMonthAriaLabel: "Predchádzajúci mesiac",
+                prevYearAriaLabel: "Predchádzajúci rok",
+              },
+              noDataText: "Nie sú dostupné žiadne dáta",
+              carousel: {
+                prev: "Predchádzajúci obrázok",
+                next: "Další obrázok",
+                ariaLabel: {
+                  delimiter: "Snímka {0} z {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} ďalších",
+              },
+              fileInput: {
+                counter: "{0} súborov",
+                counterSize: "{0} súborov ({1} celkom)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigácia stránkovania",
+                  next: "Ďalšia stránka",
+                  previous: "Predchádzajúca stránka",
+                  page: "Ísť na stránku {0}",
+                  currentPage: "Aktuálna stránka, stránka {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/sl.ts":
-/*!**************************!*\
+        /***/ "./src/locale/sl.ts":
+          /*!**************************!*\
   !*** ./src/locale/sl.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Značka',
-  close: 'Zapri',
-  dataIterator: {
-    noResultsText: 'Ni iskanega zapisa',
-    loadingText: 'Nalaganje...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Vrstic na stran:',
-    ariaLabel: {
-      sortDescending: 'Razvrščeno padajoče.',
-      sortAscending: 'Razvrščeno naraščajoče.',
-      sortNone: 'Ni razvrščeno.',
-      activateNone: 'Aktivirajte za odstranitev razvrščanja.',
-      activateDescending: 'Aktivirajte za padajoče razvrščanje.',
-      activateAscending: 'Aktivirajte za naraščajoče razvrščanje.'
-    },
-    sortBy: 'Razvrsti po'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Predmetov na stran:',
-    itemsPerPageAll: 'Vse',
-    nextPage: 'Naslednja stran',
-    prevPage: 'Prejšnja stran',
-    firstPage: 'Prva stran',
-    lastPage: 'Zadnja stran',
-    pageText: '{0}-{1} od {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} izbrano/-ih',
-    nextMonthAriaLabel: 'Naslednji mesec',
-    nextYearAriaLabel: 'Naslednje leto',
-    prevMonthAriaLabel: 'Prejšnji mesec',
-    prevYearAriaLabel: 'Prejšnje leto'
-  },
-  noDataText: 'Ni podatkov',
-  carousel: {
-    prev: 'Prejšnji prikaz',
-    next: 'Naslednji prikaz',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: 'Še {0}'
-  },
-  fileInput: {
-    counter: '{0} datotek',
-    counterSize: '{0} datotek ({1} skupno)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Navigacija po strani po strani',
-      next: 'Naslednja stran',
-      previous: 'Prejšnja stran',
-      page: 'Pojdi na stran {0}',
-      currentPage: 'Trenutna stran, stran {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Značka",
+              close: "Zapri",
+              dataIterator: {
+                noResultsText: "Ni iskanega zapisa",
+                loadingText: "Nalaganje...",
+              },
+              dataTable: {
+                itemsPerPageText: "Vrstic na stran:",
+                ariaLabel: {
+                  sortDescending: "Razvrščeno padajoče.",
+                  sortAscending: "Razvrščeno naraščajoče.",
+                  sortNone: "Ni razvrščeno.",
+                  activateNone: "Aktivirajte za odstranitev razvrščanja.",
+                  activateDescending: "Aktivirajte za padajoče razvrščanje.",
+                  activateAscending: "Aktivirajte za naraščajoče razvrščanje.",
+                },
+                sortBy: "Razvrsti po",
+              },
+              dataFooter: {
+                itemsPerPageText: "Predmetov na stran:",
+                itemsPerPageAll: "Vse",
+                nextPage: "Naslednja stran",
+                prevPage: "Prejšnja stran",
+                firstPage: "Prva stran",
+                lastPage: "Zadnja stran",
+                pageText: "{0}-{1} od {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} izbrano/-ih",
+                nextMonthAriaLabel: "Naslednji mesec",
+                nextYearAriaLabel: "Naslednje leto",
+                prevMonthAriaLabel: "Prejšnji mesec",
+                prevYearAriaLabel: "Prejšnje leto",
+              },
+              noDataText: "Ni podatkov",
+              carousel: {
+                prev: "Prejšnji prikaz",
+                next: "Naslednji prikaz",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "Še {0}",
+              },
+              fileInput: {
+                counter: "{0} datotek",
+                counterSize: "{0} datotek ({1} skupno)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Navigacija po strani po strani",
+                  next: "Naslednja stran",
+                  previous: "Prejšnja stran",
+                  page: "Pojdi na stran {0}",
+                  currentPage: "Trenutna stran, stran {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/sr-Cyrl.ts":
-/*!*******************************!*\
+        /***/ "./src/locale/sr-Cyrl.ts":
+          /*!*******************************!*\
   !*** ./src/locale/sr-Cyrl.ts ***!
   \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Значка',
-  close: 'Close',
-  dataIterator: {
-    noResultsText: 'Ни један запис није пронађен',
-    loadingText: 'Loading item...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Редова по страници:',
-    ariaLabel: {
-      sortDescending: 'Sorted descending.',
-      sortAscending: 'Sorted ascending.',
-      sortNone: 'Not sorted.',
-      activateNone: 'Activate to remove sorting.',
-      activateDescending: 'Activate to sort descending.',
-      activateAscending: 'Activate to sort ascending.'
-    },
-    sortBy: 'Sort by'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Ставки по страници:',
-    itemsPerPageAll: 'Све',
-    nextPage: 'Следећа страница',
-    prevPage: 'Претходна страница',
-    firstPage: 'Прва страница',
-    lastPage: 'Последња страница',
-    pageText: '{0}-{1} од {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} одабрано',
-    nextMonthAriaLabel: 'Следећег месеца',
-    nextYearAriaLabel: 'Следеће године',
-    prevMonthAriaLabel: 'Претходни мјесец',
-    prevYearAriaLabel: 'Претходна година'
-  },
-  noDataText: 'Нема доступних података',
-  carousel: {
-    prev: 'Превиоус висуал',
-    next: 'Нект висуал',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} море'
-  },
-  fileInput: {
-    counter: '{0} files',
-    counterSize: '{0} files ({1} in total)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Навигација страницама',
-      next: 'Следећа страница',
-      previous: 'Претходна страница',
-      page: 'Иди на страну {0}',
-      currentPage: 'Тренутна страница, страница {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Значка",
+              close: "Close",
+              dataIterator: {
+                noResultsText: "Ни један запис није пронађен",
+                loadingText: "Loading item...",
+              },
+              dataTable: {
+                itemsPerPageText: "Редова по страници:",
+                ariaLabel: {
+                  sortDescending: "Sorted descending.",
+                  sortAscending: "Sorted ascending.",
+                  sortNone: "Not sorted.",
+                  activateNone: "Activate to remove sorting.",
+                  activateDescending: "Activate to sort descending.",
+                  activateAscending: "Activate to sort ascending.",
+                },
+                sortBy: "Sort by",
+              },
+              dataFooter: {
+                itemsPerPageText: "Ставки по страници:",
+                itemsPerPageAll: "Све",
+                nextPage: "Следећа страница",
+                prevPage: "Претходна страница",
+                firstPage: "Прва страница",
+                lastPage: "Последња страница",
+                pageText: "{0}-{1} од {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} одабрано",
+                nextMonthAriaLabel: "Следећег месеца",
+                nextYearAriaLabel: "Следеће године",
+                prevMonthAriaLabel: "Претходни мјесец",
+                prevYearAriaLabel: "Претходна година",
+              },
+              noDataText: "Нема доступних података",
+              carousel: {
+                prev: "Превиоус висуал",
+                next: "Нект висуал",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} море",
+              },
+              fileInput: {
+                counter: "{0} files",
+                counterSize: "{0} files ({1} in total)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Навигација страницама",
+                  next: "Следећа страница",
+                  previous: "Претходна страница",
+                  page: "Иди на страну {0}",
+                  currentPage: "Тренутна страница, страница {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/sv.ts":
-/*!**************************!*\
+        /***/ "./src/locale/sv.ts":
+          /*!**************************!*\
   !*** ./src/locale/sv.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Bricka',
-  close: 'Stäng',
-  dataIterator: {
-    noResultsText: 'Inga poster funna',
-    loadingText: 'Laddar data...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Rader per sida:',
-    ariaLabel: {
-      sortDescending: 'Sorterat fallande.',
-      sortAscending: 'Sorterat stigande.',
-      sortNone: 'Osorterat.',
-      activateNone: 'Aktivera för att ta bort sortering.',
-      activateDescending: 'Aktivera för sortering fallande.',
-      activateAscending: 'Aktivera för sortering stigande.'
-    },
-    sortBy: 'Sortera efter'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Objekt per sida:',
-    itemsPerPageAll: 'Alla',
-    nextPage: 'Nästa sida',
-    prevPage: 'Föregående sida',
-    firstPage: 'Första sidan',
-    lastPage: 'Sista sidan',
-    pageText: '{0}-{1} av {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} markerade',
-    nextMonthAriaLabel: 'Nästa månad',
-    nextYearAriaLabel: 'Nästa år',
-    prevMonthAriaLabel: 'Förra månaden',
-    prevYearAriaLabel: 'Förra året'
-  },
-  noDataText: 'Ingen data tillgänglig',
-  carousel: {
-    prev: 'Föregående vy',
-    next: 'Nästa vy',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} fler'
-  },
-  fileInput: {
-    counter: '{0} filer',
-    counterSize: '{0} filer (av {1} totalt)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Pagination Navigation',
-      next: 'Nästa sida',
-      previous: 'Föregående sida',
-      page: 'Gå till sidan {0}',
-      currentPage: 'Aktuell sida, sida {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Bricka",
+              close: "Stäng",
+              dataIterator: {
+                noResultsText: "Inga poster funna",
+                loadingText: "Laddar data...",
+              },
+              dataTable: {
+                itemsPerPageText: "Rader per sida:",
+                ariaLabel: {
+                  sortDescending: "Sorterat fallande.",
+                  sortAscending: "Sorterat stigande.",
+                  sortNone: "Osorterat.",
+                  activateNone: "Aktivera för att ta bort sortering.",
+                  activateDescending: "Aktivera för sortering fallande.",
+                  activateAscending: "Aktivera för sortering stigande.",
+                },
+                sortBy: "Sortera efter",
+              },
+              dataFooter: {
+                itemsPerPageText: "Objekt per sida:",
+                itemsPerPageAll: "Alla",
+                nextPage: "Nästa sida",
+                prevPage: "Föregående sida",
+                firstPage: "Första sidan",
+                lastPage: "Sista sidan",
+                pageText: "{0}-{1} av {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} markerade",
+                nextMonthAriaLabel: "Nästa månad",
+                nextYearAriaLabel: "Nästa år",
+                prevMonthAriaLabel: "Förra månaden",
+                prevYearAriaLabel: "Förra året",
+              },
+              noDataText: "Ingen data tillgänglig",
+              carousel: {
+                prev: "Föregående vy",
+                next: "Nästa vy",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} fler",
+              },
+              fileInput: {
+                counter: "{0} filer",
+                counterSize: "{0} filer (av {1} totalt)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Pagination Navigation",
+                  next: "Nästa sida",
+                  previous: "Föregående sida",
+                  page: "Gå till sidan {0}",
+                  currentPage: "Aktuell sida, sida {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/locale/th.ts":
-/*!**************************!*\
+        /***/ "./src/locale/th.ts":
+          /*!**************************!*\
   !*** ./src/locale/th.ts ***!
   \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'สัญลักษณ์',
-  close: 'ปิด',
-  dataIterator: {
-    noResultsText: 'ไม่พบข้อมูลที่ค้นหา',
-    loadingText: 'กำลังโหลดข้อมูล...'
-  },
-  dataTable: {
-    itemsPerPageText: 'แถวต่อหน้า:',
-    ariaLabel: {
-      sortDescending: 'เรียงจากมากไปน้อยอยู่',
-      sortAscending: 'เรียงจากน้อยไปมากอยู่',
-      sortNone: 'ไม่ได้เรียงลำดับ',
-      activateNone: 'กดเพื่อปิดการเรียงลำดับ',
-      activateDescending: 'กดเพื่อเรียงจากมากไปน้อย',
-      activateAscending: 'กดเพื่อเรียงจากน้อยไปมาก'
-    },
-    sortBy: 'เรียงตาม'
-  },
-  dataFooter: {
-    itemsPerPageText: 'รายการต่อหน้า:',
-    itemsPerPageAll: 'ทั้งหมด',
-    nextPage: 'หน้าต่อไป',
-    prevPage: 'หน้าที่แล้ว',
-    firstPage: 'หน้าแรก',
-    lastPage: 'หน้าสุดท้าย',
-    pageText: '{0}-{1} จาก {2}'
-  },
-  datePicker: {
-    itemsSelected: 'เลือก {0} วัน',
-    nextMonthAriaLabel: 'เดือนถัดไป',
-    nextYearAriaLabel: 'ปีถัดไป',
-    prevMonthAriaLabel: 'เดือนก่อนหน้า',
-    prevYearAriaLabel: 'ปีก่อนหน้า'
-  },
-  noDataText: 'ไม่มีข้อมูล',
-  carousel: {
-    prev: 'ภาพก่อนหน้า',
-    next: 'ภาพถัดไป',
-    ariaLabel: {
-      delimiter: 'ภาพสไลด์ที่ {0} จาก {1}'
-    }
-  },
-  calendar: {
-    moreEvents: 'มีอีก {0}'
-  },
-  fileInput: {
-    counter: '{0} ไฟล์',
-    counterSize: '{0} ไฟล์ (รวม {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'การนำทางไปยังหน้า',
-      next: 'หน้าต่อไป',
-      previous: 'หน้าที่แล้ว',
-      page: 'ไปที่หน้า {0}',
-      currentPage: 'หน้าปัจจุบัน (หน้า {0})'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
-
-/***/ }),
-
-/***/ "./src/locale/tr.ts":
-/*!**************************!*\
-  !*** ./src/locale/tr.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'rozet',
-  close: 'Kapat',
-  dataIterator: {
-    noResultsText: 'Eşleşen veri bulunamadı',
-    loadingText: 'Yükleniyor... Lütfen bekleyin.'
-  },
-  dataTable: {
-    itemsPerPageText: 'Sayfa başına satır:',
-    ariaLabel: {
-      sortDescending: 'Z den A ya sıralı.',
-      sortAscending: 'A dan Z ye sıralı.',
-      sortNone: 'Sıralı değil. ',
-      activateNone: 'Sıralamayı kaldırmak için etkinleştir.',
-      activateDescending: 'Z den A ya sıralamak için etkinleştir.',
-      activateAscending: 'A dan Z ye sıralamak için etkinleştir.'
-    },
-    sortBy: 'Sırala'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Sayfa başına satır:',
-    itemsPerPageAll: 'Hepsi',
-    nextPage: 'Sonraki sayfa',
-    prevPage: 'Önceki sayfa',
-    firstPage: 'İlk sayfa',
-    lastPage: 'Son sayfa',
-    pageText: '{0} - {1} arası, Toplam: {2} kayıt'
-  },
-  datePicker: {
-    itemsSelected: '{0} öge seçildi',
-    nextMonthAriaLabel: 'Gelecek ay',
-    nextYearAriaLabel: 'Gelecek yıl',
-    prevMonthAriaLabel: 'Geçtiğimiz ay',
-    prevYearAriaLabel: 'Geçen yıl'
-  },
-  noDataText: 'Bu görünümde veri yok.',
-  carousel: {
-    prev: 'Önceki görsel',
-    next: 'Sonraki görsel',
-    ariaLabel: {
-      delimiter: 'Galeri sayfa {0} / {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '{0} tane daha'
-  },
-  fileInput: {
-    counter: '{0} dosya',
-    counterSize: '{0} dosya (toplamda {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Sayfalandırma Navigasyonu',
-      next: 'Sonraki sayfa',
-      previous: 'Önceki sayfa',
-      page: 'Sayfaya git {0}',
-      currentPage: 'Geçerli Sayfa, Sayfa {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
-
-/***/ }),
-
-/***/ "./src/locale/uk.ts":
-/*!**************************!*\
-  !*** ./src/locale/uk.ts ***!
-  \**************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: 'Знак',
-  close: 'Закрити',
-  dataIterator: {
-    noResultsText: 'В результаті пошуку нічого не знайдено',
-    loadingText: 'Завантаження...'
-  },
-  dataTable: {
-    itemsPerPageText: 'Рядків на сторінці:',
-    ariaLabel: {
-      sortDescending: 'Відсортовано за спаданням.',
-      sortAscending: 'Відсортовано за зростанням.',
-      sortNone: 'Не відсортовано.',
-      activateNone: 'Активувати, щоб видалити сортування.',
-      activateDescending: 'Активувати, щоб відсортувати за спаданням.',
-      activateAscending: 'Активувати, щоб відсортувати за зростанням.'
-    },
-    sortBy: 'Відсортувати за'
-  },
-  dataFooter: {
-    itemsPerPageText: 'Елементів на сторінці:',
-    itemsPerPageAll: 'Всі',
-    nextPage: 'Наступна сторінка',
-    prevPage: 'Попередня сторінка',
-    firstPage: 'Перша сторінка',
-    lastPage: 'Остання сторінка',
-    pageText: '{0}-{1} з {2}'
-  },
-  datePicker: {
-    itemsSelected: '{0} вибрано',
-    nextMonthAriaLabel: 'Наступного місяця',
-    nextYearAriaLabel: 'Наступного року',
-    prevMonthAriaLabel: 'Попередній місяць',
-    prevYearAriaLabel: 'Попередній рік'
-  },
-  noDataText: 'Немає даних для відображення',
-  carousel: {
-    prev: 'Попередній слайд',
-    next: 'Наступий слайд',
-    ariaLabel: {
-      delimiter: 'Слайд {0} з {1}'
-    }
-  },
-  calendar: {
-    moreEvents: 'Ще {0}'
-  },
-  fileInput: {
-    counter: '{0} файлів',
-    counterSize: '{0} файлів ({1} загалом)'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: 'Навігація по сторінках',
-      next: 'Наступна сторінка',
-      previous: 'Попередня сторінка',
-      page: 'Перейти на сторінку {0}',
-      currentPage: 'Поточна сторінка, Сторінка {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
-
-/***/ }),
-
-/***/ "./src/locale/zh-Hans.ts":
-/*!*******************************!*\
-  !*** ./src/locale/zh-Hans.ts ***!
-  \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: '徽章',
-  close: '关闭',
-  dataIterator: {
-    noResultsText: '没有符合条件的结果',
-    loadingText: '加载中……'
-  },
-  dataTable: {
-    itemsPerPageText: '每页数目:',
-    ariaLabel: {
-      sortDescending: ':降序排列。',
-      sortAscending: ':升序排列。',
-      sortNone: ':未排序。',
-      activateNone: '点击以移除排序。',
-      activateDescending: '点击以降序排列。',
-      activateAscending: '点击以升序排列。'
-    },
-    sortBy: '排序方式'
-  },
-  dataFooter: {
-    itemsPerPageText: '每页数目:',
-    itemsPerPageAll: '全部',
-    nextPage: '下一页',
-    prevPage: '上一页',
-    firstPage: '首页',
-    lastPage: '尾页',
-    pageText: '{0}-{1} 共 {2}'
-  },
-  datePicker: {
-    itemsSelected: '已选择 {0}',
-    nextMonthAriaLabel: '下个月',
-    nextYearAriaLabel: '明年',
-    prevMonthAriaLabel: '前一个月',
-    prevYearAriaLabel: '前一年'
-  },
-  noDataText: '没有数据',
-  carousel: {
-    prev: '上一张',
-    next: '下一张',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '还有 {0} 项'
-  },
-  fileInput: {
-    counter: '{0} 个文件',
-    counterSize: '{0} 个文件(共 {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: '分页导航',
-      next: '下一页',
-      previous: '上一页',
-      page: '转到页面 {0}',
-      currentPage: '当前页 {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
-
-/***/ }),
-
-/***/ "./src/locale/zh-Hant.ts":
-/*!*******************************!*\
-  !*** ./src/locale/zh-Hant.ts ***!
-  \*******************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = ({
-  badge: '徽章',
-  close: '關閉',
-  dataIterator: {
-    noResultsText: '沒有符合條件的結果',
-    loadingText: '讀取中...'
-  },
-  dataTable: {
-    itemsPerPageText: '每頁列數:',
-    ariaLabel: {
-      sortDescending: ':降序排列。',
-      sortAscending: ':升序排列。',
-      sortNone: '無排序方式。點擊以升序排列。',
-      activateNone: '點擊以移除排序方式。',
-      activateDescending: '點擊以降序排列。',
-      activateAscending: '點擊以移除排序方式。'
-    },
-    sortBy: '排序方式'
-  },
-  dataFooter: {
-    itemsPerPageText: '每頁項目:',
-    itemsPerPageAll: '全部',
-    nextPage: '下一頁',
-    prevPage: '上一頁',
-    firstPage: '第一頁',
-    lastPage: '最後頁',
-    pageText: '{2} 條中的 {0}~{1} 條'
-  },
-  datePicker: {
-    itemsSelected: '已選擇 {0}',
-    nextMonthAriaLabel: '下個月',
-    nextYearAriaLabel: '明年',
-    prevMonthAriaLabel: '前一個月',
-    prevYearAriaLabel: '前一年'
-  },
-  noDataText: '沒有資料',
-  carousel: {
-    prev: '上一張',
-    next: '下一張',
-    ariaLabel: {
-      delimiter: 'Carousel slide {0} of {1}'
-    }
-  },
-  calendar: {
-    moreEvents: '還有其他 {0} 項'
-  },
-  fileInput: {
-    counter: '{0} 個檔案',
-    counterSize: '{0} 個檔案(共 {1})'
-  },
-  timePicker: {
-    am: 'AM',
-    pm: 'PM'
-  },
-  pagination: {
-    ariaLabel: {
-      wrapper: '分頁導航',
-      next: '下一頁',
-      previous: '上一頁',
-      page: '轉到頁面 {0}',
-      currentPage: '當前頁 {0}'
-    }
-  },
-  rating: {
-    ariaLabel: {
-      icon: 'Rating {0} of {1}'
-    }
-  }
-});
-
-/***/ }),
-
-/***/ "./src/mixins/activatable/index.ts":
-/*!*****************************************!*\
-  !*** ./src/mixins/activatable/index.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _delayable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../delayable */ "./src/mixins/delayable/index.ts");
-/* harmony import */ var _toggleable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../toggleable */ "./src/mixins/toggleable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}; // Mixins
-
-
-
- // Utilities
-
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_delayable__WEBPACK_IMPORTED_MODULE_0__["default"], _toggleable__WEBPACK_IMPORTED_MODULE_1__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'activatable',
-  props: {
-    activator: {
-      default: null,
-      validator: function validator(val) {
-        return ['string', 'object'].includes(_typeof(val));
-      }
-    },
-    disabled: Boolean,
-    internalActivator: Boolean,
-    openOnHover: Boolean,
-    openOnFocus: Boolean
-  },
-  data: function data() {
-    return {
-      // Do not use this directly, call getActivator() instead
-      activatorElement: null,
-      activatorNode: [],
-      events: ['click', 'mouseenter', 'mouseleave', 'focus'],
-      listeners: {}
-    };
-  },
-  watch: {
-    activator: 'resetActivator',
-    openOnFocus: 'resetActivator',
-    openOnHover: 'resetActivator'
-  },
-  mounted: function mounted() {
-    var slotType = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlotType"])(this, 'activator', true);
-
-    if (slotType && ['v-slot', 'normal'].includes(slotType)) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_4__["consoleError"])("The activator slot must be bound, try '<template v-slot:activator=\"{ on }\"><v-btn v-on=\"on\">'", this);
-    }
-
-    this.addActivatorEvents();
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.removeActivatorEvents();
-  },
-  methods: {
-    addActivatorEvents: function addActivatorEvents() {
-      var e_1, _a;
-
-      if (!this.activator || this.disabled || !this.getActivator()) return;
-      this.listeners = this.genActivatorListeners();
-      var keys = Object.keys(this.listeners);
-
-      try {
-        for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {
-          var key = keys_1_1.value;
-          this.getActivator().addEventListener(key, this.listeners[key]);
-        }
-      } catch (e_1_1) {
-        e_1 = {
-          error: e_1_1
-        };
-      } finally {
-        try {
-          if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);
-        } finally {
-          if (e_1) throw e_1.error;
-        }
-      }
-    },
-    genActivator: function genActivator() {
-      var node = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this, 'activator', Object.assign(this.getValueProxy(), {
-        on: this.genActivatorListeners(),
-        attrs: this.genActivatorAttributes()
-      })) || [];
-      this.activatorNode = node;
-      return node;
-    },
-    genActivatorAttributes: function genActivatorAttributes() {
-      return {
-        role: 'button',
-        'aria-haspopup': true,
-        'aria-expanded': String(this.isActive)
-      };
-    },
-    genActivatorListeners: function genActivatorListeners() {
-      var _this = this;
-
-      if (this.disabled) return {};
-      var listeners = {};
-
-      if (this.openOnHover) {
-        listeners.mouseenter = function (e) {
-          _this.getActivator(e);
-
-          _this.runDelay('open');
-        };
-
-        listeners.mouseleave = function (e) {
-          _this.getActivator(e);
-
-          _this.runDelay('close');
-        };
-      } else {
-        listeners.click = function (e) {
-          var activator = _this.getActivator(e);
-
-          if (activator) activator.focus();
-          e.stopPropagation();
-          _this.isActive = !_this.isActive;
-        };
-      }
-
-      if (this.openOnFocus) {
-        listeners.focus = function (e) {
-          _this.getActivator(e);
-
-          e.stopPropagation();
-          _this.isActive = !_this.isActive;
-        };
-      }
-
-      return listeners;
-    },
-    getActivator: function getActivator(e) {
-      // If we've already fetched the activator, re-use
-      if (this.activatorElement) return this.activatorElement;
-      var activator = null;
-
-      if (this.activator) {
-        var target = this.internalActivator ? this.$el : document;
-
-        if (typeof this.activator === 'string') {
-          // Selector
-          activator = target.querySelector(this.activator);
-        } else if (this.activator.$el) {
-          // Component (ref)
-          activator = this.activator.$el;
-        } else {
-          // HTMLElement | Element
-          activator = this.activator;
-        }
-      } else if (this.activatorNode.length === 1 || this.activatorNode.length && !e) {
-        // Use the contents of the activator slot
-        // There's either only one element in it or we
-        // don't have a click event to use as a last resort
-        var vm = this.activatorNode[0].componentInstance;
-
-        if (vm && vm.$options.mixins && //                         Activatable is indirectly used via Menuable
-        vm.$options.mixins.some(function (m) {
-          return m.options && ['activatable', 'menuable'].includes(m.options.name);
-        })) {
-          // Activator is actually another activatible component, use its activator (#8846)
-          activator = vm.getActivator();
-        } else {
-          activator = this.activatorNode[0].elm;
-        }
-      } else if (e) {
-        // Activated by a click or focus event
-        activator = e.currentTarget || e.target;
-      }
-
-      this.activatorElement = activator;
-      return this.activatorElement;
-    },
-    getContentSlot: function getContentSlot() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"])(this, 'default', this.getValueProxy(), true);
-    },
-    getValueProxy: function getValueProxy() {
-      var self = this;
-      return {
-        get value() {
-          return self.isActive;
-        },
-
-        set value(isActive) {
-          self.isActive = isActive;
-        }
-
-      };
-    },
-    removeActivatorEvents: function removeActivatorEvents() {
-      var e_2, _a;
-
-      if (!this.activator || !this.activatorElement) return;
-      var keys = Object.keys(this.listeners);
-
-      try {
-        for (var keys_2 = __values(keys), keys_2_1 = keys_2.next(); !keys_2_1.done; keys_2_1 = keys_2.next()) {
-          var key = keys_2_1.value;
-          this.activatorElement.removeEventListener(key, this.listeners[key]);
-        }
-      } catch (e_2_1) {
-        e_2 = {
-          error: e_2_1
-        };
-      } finally {
-        try {
-          if (keys_2_1 && !keys_2_1.done && (_a = keys_2.return)) _a.call(keys_2);
-        } finally {
-          if (e_2) throw e_2.error;
-        }
-      }
-
-      this.listeners = {};
-    },
-    resetActivator: function resetActivator() {
-      this.removeActivatorEvents();
-      this.activatorElement = null;
-      this.getActivator();
-      this.addActivatorEvents();
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/mixins/applicationable/index.ts":
-/*!*********************************************!*\
-  !*** ./src/mixins/applicationable/index.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return applicationable; });
-/* harmony import */ var _positionable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../positionable */ "./src/mixins/positionable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
- // Util
-
-
-function applicationable(value, events) {
-  if (events === void 0) {
-    events = [];
-  }
-  /* @vue/component */
-
-
-  return Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(Object(_positionable__WEBPACK_IMPORTED_MODULE_0__["factory"])(['absolute', 'fixed'])).extend({
-    name: 'applicationable',
-    props: {
-      app: Boolean
-    },
-    computed: {
-      applicationProperty: function applicationProperty() {
-        return value;
-      }
-    },
-    watch: {
-      // If previous value was app
-      // reset the provided prop
-      app: function app(x, prev) {
-        prev ? this.removeApplication(true) : this.callUpdate();
-      },
-      applicationProperty: function applicationProperty(newVal, oldVal) {
-        this.$vuetify.application.unregister(this._uid, oldVal);
-      }
-    },
-    activated: function activated() {
-      this.callUpdate();
-    },
-    created: function created() {
-      for (var i = 0, length = events.length; i < length; i++) {
-        this.$watch(events[i], this.callUpdate);
-      }
-
-      this.callUpdate();
-    },
-    mounted: function mounted() {
-      this.callUpdate();
-    },
-    deactivated: function deactivated() {
-      this.removeApplication();
-    },
-    destroyed: function destroyed() {
-      this.removeApplication();
-    },
-    methods: {
-      callUpdate: function callUpdate() {
-        if (!this.app) return;
-        this.$vuetify.application.register(this._uid, this.applicationProperty, this.updateApplication());
-      },
-      removeApplication: function removeApplication(force) {
-        if (force === void 0) {
-          force = false;
-        }
-
-        if (!force && !this.app) return;
-        this.$vuetify.application.unregister(this._uid, this.applicationProperty);
-      },
-      updateApplication: function updateApplication() {
-        return 0;
-      }
-    }
-  });
-}
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "สัญลักษณ์",
+              close: "ปิด",
+              dataIterator: {
+                noResultsText: "ไม่พบข้อมูลที่ค้นหา",
+                loadingText: "กำลังโหลดข้อมูล...",
+              },
+              dataTable: {
+                itemsPerPageText: "แถวต่อหน้า:",
+                ariaLabel: {
+                  sortDescending: "เรียงจากมากไปน้อยอยู่",
+                  sortAscending: "เรียงจากน้อยไปมากอยู่",
+                  sortNone: "ไม่ได้เรียงลำดับ",
+                  activateNone: "กดเพื่อปิดการเรียงลำดับ",
+                  activateDescending: "กดเพื่อเรียงจากมากไปน้อย",
+                  activateAscending: "กดเพื่อเรียงจากน้อยไปมาก",
+                },
+                sortBy: "เรียงตาม",
+              },
+              dataFooter: {
+                itemsPerPageText: "รายการต่อหน้า:",
+                itemsPerPageAll: "ทั้งหมด",
+                nextPage: "หน้าต่อไป",
+                prevPage: "หน้าที่แล้ว",
+                firstPage: "หน้าแรก",
+                lastPage: "หน้าสุดท้าย",
+                pageText: "{0}-{1} จาก {2}",
+              },
+              datePicker: {
+                itemsSelected: "เลือก {0} วัน",
+                nextMonthAriaLabel: "เดือนถัดไป",
+                nextYearAriaLabel: "ปีถัดไป",
+                prevMonthAriaLabel: "เดือนก่อนหน้า",
+                prevYearAriaLabel: "ปีก่อนหน้า",
+              },
+              noDataText: "ไม่มีข้อมูล",
+              carousel: {
+                prev: "ภาพก่อนหน้า",
+                next: "ภาพถัดไป",
+                ariaLabel: {
+                  delimiter: "ภาพสไลด์ที่ {0} จาก {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "มีอีก {0}",
+              },
+              fileInput: {
+                counter: "{0} ไฟล์",
+                counterSize: "{0} ไฟล์ (รวม {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "การนำทางไปยังหน้า",
+                  next: "หน้าต่อไป",
+                  previous: "หน้าที่แล้ว",
+                  page: "ไปที่หน้า {0}",
+                  currentPage: "หน้าปัจจุบัน (หน้า {0})",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/binds-attrs/index.ts":
-/*!*****************************************!*\
-  !*** ./src/mixins/binds-attrs/index.ts ***!
-  \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/**
- * This mixin provides `attrs$` and `listeners$` to work around
- * vue bug https://github.com/vuejs/vue/issues/10115
- */
-
-function makeWatcher(property) {
-  return function (val, oldVal) {
-    for (var attr in oldVal) {
-      if (!Object.prototype.hasOwnProperty.call(val, attr)) {
-        this.$delete(this.$data[property], attr);
-      }
-    }
-
-    for (var attr in val) {
-      this.$set(this.$data[property], attr, val[attr]);
-    }
-  };
-}
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  data: function data() {
-    return {
-      attrs$: {},
-      listeners$: {}
-    };
-  },
-  created: function created() {
-    // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115
-    // Make sure to use `attrs$` instead of `$attrs` (confusing right?)
-    this.$watch('$attrs', makeWatcher('attrs$'), {
-      immediate: true
-    });
-    this.$watch('$listeners', makeWatcher('listeners$'), {
-      immediate: true
-    });
-  }
-}));
+        /***/ "./src/locale/tr.ts":
+          /*!**************************!*\
+  !*** ./src/locale/tr.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "rozet",
+              close: "Kapat",
+              dataIterator: {
+                noResultsText: "Eşleşen veri bulunamadı",
+                loadingText: "Yükleniyor... Lütfen bekleyin.",
+              },
+              dataTable: {
+                itemsPerPageText: "Sayfa başına satır:",
+                ariaLabel: {
+                  sortDescending: "Z den A ya sıralı.",
+                  sortAscending: "A dan Z ye sıralı.",
+                  sortNone: "Sıralı değil. ",
+                  activateNone: "Sıralamayı kaldırmak için etkinleştir.",
+                  activateDescending: "Z den A ya sıralamak için etkinleştir.",
+                  activateAscending: "A dan Z ye sıralamak için etkinleştir.",
+                },
+                sortBy: "Sırala",
+              },
+              dataFooter: {
+                itemsPerPageText: "Sayfa başına satır:",
+                itemsPerPageAll: "Hepsi",
+                nextPage: "Sonraki sayfa",
+                prevPage: "Önceki sayfa",
+                firstPage: "İlk sayfa",
+                lastPage: "Son sayfa",
+                pageText: "{0} - {1} arası, Toplam: {2} kayıt",
+              },
+              datePicker: {
+                itemsSelected: "{0} öge seçildi",
+                nextMonthAriaLabel: "Gelecek ay",
+                nextYearAriaLabel: "Gelecek yıl",
+                prevMonthAriaLabel: "Geçtiğimiz ay",
+                prevYearAriaLabel: "Geçen yıl",
+              },
+              noDataText: "Bu görünümde veri yok.",
+              carousel: {
+                prev: "Önceki görsel",
+                next: "Sonraki görsel",
+                ariaLabel: {
+                  delimiter: "Galeri sayfa {0} / {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "{0} tane daha",
+              },
+              fileInput: {
+                counter: "{0} dosya",
+                counterSize: "{0} dosya (toplamda {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Sayfalandırma Navigasyonu",
+                  next: "Sonraki sayfa",
+                  previous: "Önceki sayfa",
+                  page: "Sayfaya git {0}",
+                  currentPage: "Geçerli Sayfa, Sayfa {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/bootable/index.ts":
-/*!**************************************!*\
-  !*** ./src/mixins/bootable/index.ts ***!
-  \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);
-// Utilities
- // Types
-
-
-/**
- * Bootable
- * @mixin
- *
- * Used to add lazy content functionality to components
- * Looks for change in "isActive" to automatically boot
- * Otherwise can be set manually
- */
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend().extend({
-  name: 'bootable',
-  props: {
-    eager: Boolean
-  },
-  data: function data() {
-    return {
-      isBooted: false
-    };
-  },
-  computed: {
-    hasContent: function hasContent() {
-      return this.isBooted || this.eager || this.isActive;
-    }
-  },
-  watch: {
-    isActive: function isActive() {
-      this.isBooted = true;
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if ('lazy' in this.$attrs) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_0__["removed"])('lazy', this);
-    }
-  },
-  methods: {
-    showLazyContent: function showLazyContent(content) {
-      return this.hasContent && content ? content() : [this.$createElement()];
-    }
-  }
-}));
+        /***/ "./src/locale/uk.ts":
+          /*!**************************!*\
+  !*** ./src/locale/uk.ts ***!
+  \**************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "Знак",
+              close: "Закрити",
+              dataIterator: {
+                noResultsText: "В результаті пошуку нічого не знайдено",
+                loadingText: "Завантаження...",
+              },
+              dataTable: {
+                itemsPerPageText: "Рядків на сторінці:",
+                ariaLabel: {
+                  sortDescending: "Відсортовано за спаданням.",
+                  sortAscending: "Відсортовано за зростанням.",
+                  sortNone: "Не відсортовано.",
+                  activateNone: "Активувати, щоб видалити сортування.",
+                  activateDescending:
+                    "Активувати, щоб відсортувати за спаданням.",
+                  activateAscending:
+                    "Активувати, щоб відсортувати за зростанням.",
+                },
+                sortBy: "Відсортувати за",
+              },
+              dataFooter: {
+                itemsPerPageText: "Елементів на сторінці:",
+                itemsPerPageAll: "Всі",
+                nextPage: "Наступна сторінка",
+                prevPage: "Попередня сторінка",
+                firstPage: "Перша сторінка",
+                lastPage: "Остання сторінка",
+                pageText: "{0}-{1} з {2}",
+              },
+              datePicker: {
+                itemsSelected: "{0} вибрано",
+                nextMonthAriaLabel: "Наступного місяця",
+                nextYearAriaLabel: "Наступного року",
+                prevMonthAriaLabel: "Попередній місяць",
+                prevYearAriaLabel: "Попередній рік",
+              },
+              noDataText: "Немає даних для відображення",
+              carousel: {
+                prev: "Попередній слайд",
+                next: "Наступий слайд",
+                ariaLabel: {
+                  delimiter: "Слайд {0} з {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "Ще {0}",
+              },
+              fileInput: {
+                counter: "{0} файлів",
+                counterSize: "{0} файлів ({1} загалом)",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "Навігація по сторінках",
+                  next: "Наступна сторінка",
+                  previous: "Попередня сторінка",
+                  page: "Перейти на сторінку {0}",
+                  currentPage: "Поточна сторінка, Сторінка {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/button-group/index.ts":
-/*!******************************************!*\
-  !*** ./src/mixins/button-group/index.ts ***!
-  \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts");
-// Extensions
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (_components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__["BaseItemGroup"].extend({
-  name: 'button-group',
-  provide: function provide() {
-    return {
-      btnToggle: this
-    };
-  },
-  computed: {
-    classes: function classes() {
-      return _components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__["BaseItemGroup"].options.computed.classes.call(this);
-    }
-  },
-  methods: {
-    // Isn't being passed down through types
-    genData: _components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__["BaseItemGroup"].options.methods.genData
-  }
-}));
+        /***/ "./src/locale/zh-Hans.ts":
+          /*!*******************************!*\
+  !*** ./src/locale/zh-Hans.ts ***!
+  \*******************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "徽章",
+              close: "关闭",
+              dataIterator: {
+                noResultsText: "没有符合条件的结果",
+                loadingText: "加载中……",
+              },
+              dataTable: {
+                itemsPerPageText: "每页数目:",
+                ariaLabel: {
+                  sortDescending: ":降序排列。",
+                  sortAscending: ":升序排列。",
+                  sortNone: ":未排序。",
+                  activateNone: "点击以移除排序。",
+                  activateDescending: "点击以降序排列。",
+                  activateAscending: "点击以升序排列。",
+                },
+                sortBy: "排序方式",
+              },
+              dataFooter: {
+                itemsPerPageText: "每页数目:",
+                itemsPerPageAll: "全部",
+                nextPage: "下一页",
+                prevPage: "上一页",
+                firstPage: "首页",
+                lastPage: "尾页",
+                pageText: "{0}-{1} 共 {2}",
+              },
+              datePicker: {
+                itemsSelected: "已选择 {0}",
+                nextMonthAriaLabel: "下个月",
+                nextYearAriaLabel: "明年",
+                prevMonthAriaLabel: "前一个月",
+                prevYearAriaLabel: "前一年",
+              },
+              noDataText: "没有数据",
+              carousel: {
+                prev: "上一张",
+                next: "下一张",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "还有 {0} 项",
+              },
+              fileInput: {
+                counter: "{0} 个文件",
+                counterSize: "{0} 个文件(共 {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "分页导航",
+                  next: "下一页",
+                  previous: "上一页",
+                  page: "转到页面 {0}",
+                  currentPage: "当前页 {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/colorable/index.ts":
-/*!***************************************!*\
-  !*** ./src/mixins/colorable/index.ts ***!
-  \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/colorUtils */ "./src/util/colorUtils.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+        /***/ "./src/locale/zh-Hant.ts":
+          /*!*******************************!*\
+  !*** ./src/locale/zh-Hant.ts ***!
+  \*******************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony default export */ __webpack_exports__["default"] = {
+              badge: "徽章",
+              close: "關閉",
+              dataIterator: {
+                noResultsText: "沒有符合條件的結果",
+                loadingText: "讀取中...",
+              },
+              dataTable: {
+                itemsPerPageText: "每頁列數:",
+                ariaLabel: {
+                  sortDescending: ":降序排列。",
+                  sortAscending: ":升序排列。",
+                  sortNone: "無排序方式。點擊以升序排列。",
+                  activateNone: "點擊以移除排序方式。",
+                  activateDescending: "點擊以降序排列。",
+                  activateAscending: "點擊以移除排序方式。",
+                },
+                sortBy: "排序方式",
+              },
+              dataFooter: {
+                itemsPerPageText: "每頁項目:",
+                itemsPerPageAll: "全部",
+                nextPage: "下一頁",
+                prevPage: "上一頁",
+                firstPage: "第一頁",
+                lastPage: "最後頁",
+                pageText: "{2} 條中的 {0}~{1} 條",
+              },
+              datePicker: {
+                itemsSelected: "已選擇 {0}",
+                nextMonthAriaLabel: "下個月",
+                nextYearAriaLabel: "明年",
+                prevMonthAriaLabel: "前一個月",
+                prevYearAriaLabel: "前一年",
+              },
+              noDataText: "沒有資料",
+              carousel: {
+                prev: "上一張",
+                next: "下一張",
+                ariaLabel: {
+                  delimiter: "Carousel slide {0} of {1}",
+                },
+              },
+              calendar: {
+                moreEvents: "還有其他 {0} 項",
+              },
+              fileInput: {
+                counter: "{0} 個檔案",
+                counterSize: "{0} 個檔案(共 {1})",
+              },
+              timePicker: {
+                am: "AM",
+                pm: "PM",
+              },
+              pagination: {
+                ariaLabel: {
+                  wrapper: "分頁導航",
+                  next: "下一頁",
+                  previous: "上一頁",
+                  page: "轉到頁面 {0}",
+                  currentPage: "當前頁 {0}",
+                },
+              },
+              rating: {
+                ariaLabel: {
+                  icon: "Rating {0} of {1}",
+                },
+              },
+            };
 
-  return ar;
-};
+            /***/
+          },
 
+        /***/ "./src/mixins/activatable/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/mixins/activatable/index.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _delayable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../delayable */ "./src/mixins/delayable/index.ts"
+              );
+            /* harmony import */ var _toggleable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../toggleable */ "./src/mixins/toggleable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              }; // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"]
+            )(
+              _delayable__WEBPACK_IMPORTED_MODULE_0__["default"],
+              _toggleable__WEBPACK_IMPORTED_MODULE_1__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "activatable",
+                props: {
+                  activator: {
+                    default: null,
+                    validator: function validator(val) {
+                      return ["string", "object"].includes(_typeof(val));
+                    },
+                  },
+                  disabled: Boolean,
+                  internalActivator: Boolean,
+                  openOnHover: Boolean,
+                  openOnFocus: Boolean,
+                },
+                data: function data() {
+                  return {
+                    // Do not use this directly, call getActivator() instead
+                    activatorElement: null,
+                    activatorNode: [],
+                    events: ["click", "mouseenter", "mouseleave", "focus"],
+                    listeners: {},
+                  };
+                },
+                watch: {
+                  activator: "resetActivator",
+                  openOnFocus: "resetActivator",
+                  openOnHover: "resetActivator",
+                },
+                mounted: function mounted() {
+                  var slotType = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlotType"]
+                  )(this, "activator", true);
+
+                  if (slotType && ["v-slot", "normal"].includes(slotType)) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_4__["consoleError"]
+                    )(
+                      'The activator slot must be bound, try \'<template v-slot:activator="{ on }"><v-btn v-on="on">\'',
+                      this
+                    );
+                  }
 
+                  this.addActivatorEvents();
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.removeActivatorEvents();
+                },
+                methods: {
+                  addActivatorEvents: function addActivatorEvents() {
+                    var e_1, _a;
+
+                    if (
+                      !this.activator ||
+                      this.disabled ||
+                      !this.getActivator()
+                    )
+                      return;
+                    this.listeners = this.genActivatorListeners();
+                    var keys = Object.keys(this.listeners);
+
+                    try {
+                      for (
+                        var keys_1 = __values(keys), keys_1_1 = keys_1.next();
+                        !keys_1_1.done;
+                        keys_1_1 = keys_1.next()
+                      ) {
+                        var key = keys_1_1.value;
+                        this.getActivator().addEventListener(
+                          key,
+                          this.listeners[key]
+                        );
+                      }
+                    } catch (e_1_1) {
+                      e_1 = {
+                        error: e_1_1,
+                      };
+                    } finally {
+                      try {
+                        if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return))
+                          _a.call(keys_1);
+                      } finally {
+                        if (e_1) throw e_1.error;
+                      }
+                    }
+                  },
+                  genActivator: function genActivator() {
+                    var node =
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                      )(
+                        this,
+                        "activator",
+                        Object.assign(this.getValueProxy(), {
+                          on: this.genActivatorListeners(),
+                          attrs: this.genActivatorAttributes(),
+                        })
+                      ) || [];
+                    this.activatorNode = node;
+                    return node;
+                  },
+                  genActivatorAttributes: function genActivatorAttributes() {
+                    return {
+                      role: "button",
+                      "aria-haspopup": true,
+                      "aria-expanded": String(this.isActive),
+                    };
+                  },
+                  genActivatorListeners: function genActivatorListeners() {
+                    var _this = this;
+
+                    if (this.disabled) return {};
+                    var listeners = {};
+
+                    if (this.openOnHover) {
+                      listeners.mouseenter = function (e) {
+                        _this.getActivator(e);
+
+                        _this.runDelay("open");
+                      };
+
+                      listeners.mouseleave = function (e) {
+                        _this.getActivator(e);
+
+                        _this.runDelay("close");
+                      };
+                    } else {
+                      listeners.click = function (e) {
+                        var activator = _this.getActivator(e);
+
+                        if (activator) activator.focus();
+                        e.stopPropagation();
+                        _this.isActive = !_this.isActive;
+                      };
+                    }
+
+                    if (this.openOnFocus) {
+                      listeners.focus = function (e) {
+                        _this.getActivator(e);
+
+                        e.stopPropagation();
+                        _this.isActive = !_this.isActive;
+                      };
+                    }
+
+                    return listeners;
+                  },
+                  getActivator: function getActivator(e) {
+                    // If we've already fetched the activator, re-use
+                    if (this.activatorElement) return this.activatorElement;
+                    var activator = null;
+
+                    if (this.activator) {
+                      var target = this.internalActivator ? this.$el : document;
+
+                      if (typeof this.activator === "string") {
+                        // Selector
+                        activator = target.querySelector(this.activator);
+                      } else if (this.activator.$el) {
+                        // Component (ref)
+                        activator = this.activator.$el;
+                      } else {
+                        // HTMLElement | Element
+                        activator = this.activator;
+                      }
+                    } else if (
+                      this.activatorNode.length === 1 ||
+                      (this.activatorNode.length && !e)
+                    ) {
+                      // Use the contents of the activator slot
+                      // There's either only one element in it or we
+                      // don't have a click event to use as a last resort
+                      var vm = this.activatorNode[0].componentInstance;
+
+                      if (
+                        vm &&
+                        vm.$options.mixins && //                         Activatable is indirectly used via Menuable
+                        vm.$options.mixins.some(function (m) {
+                          return (
+                            m.options &&
+                            ["activatable", "menuable"].includes(m.options.name)
+                          );
+                        })
+                      ) {
+                        // Activator is actually another activatible component, use its activator (#8846)
+                        activator = vm.getActivator();
+                      } else {
+                        activator = this.activatorNode[0].elm;
+                      }
+                    } else if (e) {
+                      // Activated by a click or focus event
+                      activator = e.currentTarget || e.target;
+                    }
+
+                    this.activatorElement = activator;
+                    return this.activatorElement;
+                  },
+                  getContentSlot: function getContentSlot() {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_3__["getSlot"]
+                    )(this, "default", this.getValueProxy(), true);
+                  },
+                  getValueProxy: function getValueProxy() {
+                    var self = this;
+                    return {
+                      get value() {
+                        return self.isActive;
+                      },
+
+                      set value(isActive) {
+                        self.isActive = isActive;
+                      },
+                    };
+                  },
+                  removeActivatorEvents: function removeActivatorEvents() {
+                    var e_2, _a;
+
+                    if (!this.activator || !this.activatorElement) return;
+                    var keys = Object.keys(this.listeners);
+
+                    try {
+                      for (
+                        var keys_2 = __values(keys), keys_2_1 = keys_2.next();
+                        !keys_2_1.done;
+                        keys_2_1 = keys_2.next()
+                      ) {
+                        var key = keys_2_1.value;
+                        this.activatorElement.removeEventListener(
+                          key,
+                          this.listeners[key]
+                        );
+                      }
+                    } catch (e_2_1) {
+                      e_2 = {
+                        error: e_2_1,
+                      };
+                    } finally {
+                      try {
+                        if (keys_2_1 && !keys_2_1.done && (_a = keys_2.return))
+                          _a.call(keys_2);
+                      } finally {
+                        if (e_2) throw e_2.error;
+                      }
+                    }
+
+                    this.listeners = {};
+                  },
+                  resetActivator: function resetActivator() {
+                    this.removeActivatorEvents();
+                    this.activatorElement = null;
+                    this.getActivator();
+                    this.addActivatorEvents();
+                  },
+                },
+              });
 
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'colorable',
-  props: {
-    color: String
-  },
-  methods: {
-    setBackgroundColor: function setBackgroundColor(color, data) {
-      var _a;
+            /***/
+          },
 
-      if (data === void 0) {
-        data = {};
-      }
+        /***/ "./src/mixins/applicationable/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/mixins/applicationable/index.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return applicationable;
+              }
+            );
+            /* harmony import */ var _positionable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../positionable */ "./src/mixins/positionable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Util
+
+            function applicationable(value, events) {
+              if (events === void 0) {
+                events = [];
+              }
+              /* @vue/component */
+
+              return Object(
+                _util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"]
+              )(
+                Object(_positionable__WEBPACK_IMPORTED_MODULE_0__["factory"])([
+                  "absolute",
+                  "fixed",
+                ])
+              ).extend({
+                name: "applicationable",
+                props: {
+                  app: Boolean,
+                },
+                computed: {
+                  applicationProperty: function applicationProperty() {
+                    return value;
+                  },
+                },
+                watch: {
+                  // If previous value was app
+                  // reset the provided prop
+                  app: function app(x, prev) {
+                    prev ? this.removeApplication(true) : this.callUpdate();
+                  },
+                  applicationProperty: function applicationProperty(
+                    newVal,
+                    oldVal
+                  ) {
+                    this.$vuetify.application.unregister(this._uid, oldVal);
+                  },
+                },
+                activated: function activated() {
+                  this.callUpdate();
+                },
+                created: function created() {
+                  for (var i = 0, length = events.length; i < length; i++) {
+                    this.$watch(events[i], this.callUpdate);
+                  }
 
-      if (typeof data.style === 'string') {
-        // istanbul ignore next
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleError"])('style must be an object', this); // istanbul ignore next
+                  this.callUpdate();
+                },
+                mounted: function mounted() {
+                  this.callUpdate();
+                },
+                deactivated: function deactivated() {
+                  this.removeApplication();
+                },
+                destroyed: function destroyed() {
+                  this.removeApplication();
+                },
+                methods: {
+                  callUpdate: function callUpdate() {
+                    if (!this.app) return;
+                    this.$vuetify.application.register(
+                      this._uid,
+                      this.applicationProperty,
+                      this.updateApplication()
+                    );
+                  },
+                  removeApplication: function removeApplication(force) {
+                    if (force === void 0) {
+                      force = false;
+                    }
+
+                    if (!force && !this.app) return;
+                    this.$vuetify.application.unregister(
+                      this._uid,
+                      this.applicationProperty
+                    );
+                  },
+                  updateApplication: function updateApplication() {
+                    return 0;
+                  },
+                },
+              });
+            }
 
-        return data;
-      }
+            /***/
+          },
 
-      if (typeof data.class === 'string') {
-        // istanbul ignore next
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleError"])('class must be an object', this); // istanbul ignore next
+        /***/ "./src/mixins/binds-attrs/index.ts":
+          /*!*****************************************!*\
+  !*** ./src/mixins/binds-attrs/index.ts ***!
+  \*****************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /**
+             * This mixin provides `attrs$` and `listeners$` to work around
+             * vue bug https://github.com/vuejs/vue/issues/10115
+             */
+
+            function makeWatcher(property) {
+              return function (val, oldVal) {
+                for (var attr in oldVal) {
+                  if (!Object.prototype.hasOwnProperty.call(val, attr)) {
+                    this.$delete(this.$data[property], attr);
+                  }
+                }
 
-        return data;
-      }
+                for (var attr in val) {
+                  this.$set(this.$data[property], attr, val[attr]);
+                }
+              };
+            }
 
-      if (Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_2__["isCssColor"])(color)) {
-        data.style = __assign(__assign({}, data.style), {
-          'background-color': "" + color,
-          'border-color': "" + color
-        });
-      } else if (color) {
-        data.class = __assign(__assign({}, data.class), (_a = {}, _a[color] = true, _a));
-      }
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                data: function data() {
+                  return {
+                    attrs$: {},
+                    listeners$: {},
+                  };
+                },
+                created: function created() {
+                  // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115
+                  // Make sure to use `attrs$` instead of `$attrs` (confusing right?)
+                  this.$watch("$attrs", makeWatcher("attrs$"), {
+                    immediate: true,
+                  });
+                  this.$watch("$listeners", makeWatcher("listeners$"), {
+                    immediate: true,
+                  });
+                },
+              });
 
-      return data;
-    },
-    setTextColor: function setTextColor(color, data) {
-      var _a;
+            /***/
+          },
 
-      if (data === void 0) {
-        data = {};
-      }
+        /***/ "./src/mixins/bootable/index.ts":
+          /*!**************************************!*\
+  !*** ./src/mixins/bootable/index.ts ***!
+  \**************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_1__
+              );
+            // Utilities
+            // Types
+
+            /**
+             * Bootable
+             * @mixin
+             *
+             * Used to add lazy content functionality to components
+             * Looks for change in "isActive" to automatically boot
+             * Otherwise can be set manually
+             */
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend().extend({
+                name: "bootable",
+                props: {
+                  eager: Boolean,
+                },
+                data: function data() {
+                  return {
+                    isBooted: false,
+                  };
+                },
+                computed: {
+                  hasContent: function hasContent() {
+                    return this.isBooted || this.eager || this.isActive;
+                  },
+                },
+                watch: {
+                  isActive: function isActive() {
+                    this.isBooted = true;
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if ("lazy" in this.$attrs) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_0__["removed"]
+                    )("lazy", this);
+                  }
+                },
+                methods: {
+                  showLazyContent: function showLazyContent(content) {
+                    return this.hasContent && content
+                      ? content()
+                      : [this.$createElement()];
+                  },
+                },
+              });
 
-      if (typeof data.style === 'string') {
-        // istanbul ignore next
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleError"])('style must be an object', this); // istanbul ignore next
+            /***/
+          },
 
-        return data;
-      }
+        /***/ "./src/mixins/button-group/index.ts":
+          /*!******************************************!*\
+  !*** ./src/mixins/button-group/index.ts ***!
+  \******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../components/VItemGroup/VItemGroup */ "./src/components/VItemGroup/VItemGroup.ts"
+              );
+            // Extensions
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              _components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__[
+                "BaseItemGroup"
+              ].extend({
+                name: "button-group",
+                provide: function provide() {
+                  return {
+                    btnToggle: this,
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    return _components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__[
+                      "BaseItemGroup"
+                    ].options.computed.classes.call(this);
+                  },
+                },
+                methods: {
+                  // Isn't being passed down through types
+                  genData:
+                    _components_VItemGroup_VItemGroup__WEBPACK_IMPORTED_MODULE_0__[
+                      "BaseItemGroup"
+                    ].options.methods.genData,
+                },
+              });
 
-      if (typeof data.class === 'string') {
-        // istanbul ignore next
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleError"])('class must be an object', this); // istanbul ignore next
+            /***/
+          },
 
-        return data;
-      }
+        /***/ "./src/mixins/colorable/index.ts":
+          /*!***************************************!*\
+  !*** ./src/mixins/colorable/index.ts ***!
+  \***************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/colorUtils */ "./src/util/colorUtils.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      if (Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_2__["isCssColor"])(color)) {
-        data.style = __assign(__assign({}, data.style), {
-          color: "" + color,
-          'caret-color': "" + color
-        });
-      } else if (color) {
-        var _b = __read(color.toString().trim().split(' ', 2), 2),
-            colorName = _b[0],
-            colorModifier = _b[1];
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-        data.class = __assign(__assign({}, data.class), (_a = {}, _a[colorName + '--text'] = true, _a));
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-        if (colorModifier) {
-          data.class['text--' + colorModifier] = true;
-        }
-      }
+                return ar;
+              };
 
-      return data;
-    }
-  }
-}));
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "colorable",
+                props: {
+                  color: String,
+                },
+                methods: {
+                  setBackgroundColor: function setBackgroundColor(color, data) {
+                    var _a;
+
+                    if (data === void 0) {
+                      data = {};
+                    }
+
+                    if (typeof data.style === "string") {
+                      // istanbul ignore next
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_1__[
+                          "consoleError"
+                        ]
+                      )("style must be an object", this); // istanbul ignore next
+
+                      return data;
+                    }
+
+                    if (typeof data.class === "string") {
+                      // istanbul ignore next
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_1__[
+                          "consoleError"
+                        ]
+                      )("class must be an object", this); // istanbul ignore next
+
+                      return data;
+                    }
+
+                    if (
+                      Object(
+                        _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__[
+                          "isCssColor"
+                        ]
+                      )(color)
+                    ) {
+                      data.style = __assign(__assign({}, data.style), {
+                        "background-color": "" + color,
+                        "border-color": "" + color,
+                      });
+                    } else if (color) {
+                      data.class = __assign(
+                        __assign({}, data.class),
+                        ((_a = {}), (_a[color] = true), _a)
+                      );
+                    }
+
+                    return data;
+                  },
+                  setTextColor: function setTextColor(color, data) {
+                    var _a;
+
+                    if (data === void 0) {
+                      data = {};
+                    }
+
+                    if (typeof data.style === "string") {
+                      // istanbul ignore next
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_1__[
+                          "consoleError"
+                        ]
+                      )("style must be an object", this); // istanbul ignore next
+
+                      return data;
+                    }
+
+                    if (typeof data.class === "string") {
+                      // istanbul ignore next
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_1__[
+                          "consoleError"
+                        ]
+                      )("class must be an object", this); // istanbul ignore next
+
+                      return data;
+                    }
+
+                    if (
+                      Object(
+                        _util_colorUtils__WEBPACK_IMPORTED_MODULE_2__[
+                          "isCssColor"
+                        ]
+                      )(color)
+                    ) {
+                      data.style = __assign(__assign({}, data.style), {
+                        color: "" + color,
+                        "caret-color": "" + color,
+                      });
+                    } else if (color) {
+                      var _b = __read(color.toString().trim().split(" ", 2), 2),
+                        colorName = _b[0],
+                        colorModifier = _b[1];
+
+                      data.class = __assign(
+                        __assign({}, data.class),
+                        ((_a = {}), (_a[colorName + "--text"] = true), _a)
+                      );
+
+                      if (colorModifier) {
+                        data.class["text--" + colorModifier] = true;
+                      }
+                    }
+
+                    return data;
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/comparable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/comparable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/comparable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'comparable',
-  props: {
-    valueComparator: {
-      type: Function,
-      default: _util_helpers__WEBPACK_IMPORTED_MODULE_1__["deepEqual"]
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "comparable",
+                props: {
+                  valueComparator: {
+                    type: Function,
+                    default:
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_1__["deepEqual"],
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/delayable/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/delayable/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/delayable/index.ts ***!
   \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/**
- * Delayable
- *
- * @mixin
- *
- * Changes the open or close delay time for elements
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend().extend({
-  name: 'delayable',
-  props: {
-    openDelay: {
-      type: [Number, String],
-      default: 0
-    },
-    closeDelay: {
-      type: [Number, String],
-      default: 0
-    }
-  },
-  data: function data() {
-    return {
-      openTimeout: undefined,
-      closeTimeout: undefined
-    };
-  },
-  methods: {
-    /**
-     * Clear any pending delay timers from executing
-     */
-    clearDelay: function clearDelay() {
-      clearTimeout(this.openTimeout);
-      clearTimeout(this.closeTimeout);
-    },
-
-    /**
-     * Runs callback after a specified delay
-     */
-    runDelay: function runDelay(type, cb) {
-      var _this = this;
-
-      this.clearDelay();
-      var delay = parseInt(this[type + "Delay"], 10);
-      this[type + "Timeout"] = setTimeout(cb || function () {
-        _this.isActive = {
-          open: true,
-          close: false
-        }[type];
-      }, delay);
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /**
+             * Delayable
+             *
+             * @mixin
+             *
+             * Changes the open or close delay time for elements
+             */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend().extend({
+                name: "delayable",
+                props: {
+                  openDelay: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  closeDelay: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                },
+                data: function data() {
+                  return {
+                    openTimeout: undefined,
+                    closeTimeout: undefined,
+                  };
+                },
+                methods: {
+                  /**
+                   * Clear any pending delay timers from executing
+                   */
+                  clearDelay: function clearDelay() {
+                    clearTimeout(this.openTimeout);
+                    clearTimeout(this.closeTimeout);
+                  },
+
+                  /**
+                   * Runs callback after a specified delay
+                   */
+                  runDelay: function runDelay(type, cb) {
+                    var _this = this;
+
+                    this.clearDelay();
+                    var delay = parseInt(this[type + "Delay"], 10);
+                    this[type + "Timeout"] = setTimeout(
+                      cb ||
+                        function () {
+                          _this.isActive = {
+                            open: true,
+                            close: false,
+                          }[type];
+                        },
+                      delay
+                    );
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/dependent/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/dependent/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/dependent/index.ts ***!
   \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
-
-  return ar;
-};
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-function searchChildren(children) {
-  var results = [];
+                return ar;
+              };
 
-  for (var index = 0; index < children.length; index++) {
-    var child = children[index];
+            function searchChildren(children) {
+              var results = [];
 
-    if (child.isActive && child.isDependent) {
-      results.push(child);
-    } else {
-      results.push.apply(results, __spread(searchChildren(child.$children)));
-    }
-  }
+              for (var index = 0; index < children.length; index++) {
+                var child = children[index];
 
-  return results;
-}
-/* @vue/component */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"])().extend({
-  name: 'dependent',
-  data: function data() {
-    return {
-      closeDependents: true,
-      isActive: false,
-      isDependent: true
-    };
-  },
-  watch: {
-    isActive: function isActive(val) {
-      if (val) return;
-      var openDependents = this.getOpenDependents();
-
-      for (var index = 0; index < openDependents.length; index++) {
-        openDependents[index].isActive = false;
-      }
-    }
-  },
-  methods: {
-    getOpenDependents: function getOpenDependents() {
-      if (this.closeDependents) return searchChildren(this.$children);
-      return [];
-    },
-    getOpenDependentElements: function getOpenDependentElements() {
-      var result = [];
-      var openDependents = this.getOpenDependents();
-
-      for (var index = 0; index < openDependents.length; index++) {
-        result.push.apply(result, __spread(openDependents[index].getClickableDependentElements()));
-      }
+                if (child.isActive && child.isDependent) {
+                  results.push(child);
+                } else {
+                  results.push.apply(
+                    results,
+                    __spread(searchChildren(child.$children))
+                  );
+                }
+              }
 
-      return result;
-    },
-    getClickableDependentElements: function getClickableDependentElements() {
-      var result = [this.$el];
-      if (this.$refs.content) result.push(this.$refs.content);
-      if (this.overlay) result.push(this.overlay.$el);
-      result.push.apply(result, __spread(this.getOpenDependentElements()));
-      return result;
-    }
-  }
-}));
+              return results;
+            }
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(
+                _util_mixins__WEBPACK_IMPORTED_MODULE_0__["default"]
+              )().extend({
+                name: "dependent",
+                data: function data() {
+                  return {
+                    closeDependents: true,
+                    isActive: false,
+                    isDependent: true,
+                  };
+                },
+                watch: {
+                  isActive: function isActive(val) {
+                    if (val) return;
+                    var openDependents = this.getOpenDependents();
+
+                    for (
+                      var index = 0;
+                      index < openDependents.length;
+                      index++
+                    ) {
+                      openDependents[index].isActive = false;
+                    }
+                  },
+                },
+                methods: {
+                  getOpenDependents: function getOpenDependents() {
+                    if (this.closeDependents)
+                      return searchChildren(this.$children);
+                    return [];
+                  },
+                  getOpenDependentElements:
+                    function getOpenDependentElements() {
+                      var result = [];
+                      var openDependents = this.getOpenDependents();
+
+                      for (
+                        var index = 0;
+                        index < openDependents.length;
+                        index++
+                      ) {
+                        result.push.apply(
+                          result,
+                          __spread(
+                            openDependents[
+                              index
+                            ].getClickableDependentElements()
+                          )
+                        );
+                      }
+
+                      return result;
+                    },
+                  getClickableDependentElements:
+                    function getClickableDependentElements() {
+                      var result = [this.$el];
+                      if (this.$refs.content) result.push(this.$refs.content);
+                      if (this.overlay) result.push(this.overlay.$el);
+                      result.push.apply(
+                        result,
+                        __spread(this.getOpenDependentElements())
+                      );
+                      return result;
+                    },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/detachable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/detachable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/detachable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _bootable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../bootable */ "./src/mixins/bootable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-// Mixins
- // Utilities
-
-
-
-
-
-function validateAttachTarget(val) {
-  var type = _typeof(val);
-
-  if (type === 'boolean' || type === 'string') return true;
-  return val.nodeType === Node.ELEMENT_NODE;
-}
-/* @vue/component */
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(_bootable__WEBPACK_IMPORTED_MODULE_0__["default"]).extend({
-  name: 'detachable',
-  props: {
-    attach: {
-      default: false,
-      validator: validateAttachTarget
-    },
-    contentClass: {
-      type: String,
-      default: ''
-    }
-  },
-  data: function data() {
-    return {
-      activatorNode: null,
-      hasDetached: false
-    };
-  },
-  watch: {
-    attach: function attach() {
-      this.hasDetached = false;
-      this.initDetach();
-    },
-    hasContent: function hasContent() {
-      this.$nextTick(this.initDetach);
-    }
-  },
-  beforeMount: function beforeMount() {
-    var _this = this;
-
-    this.$nextTick(function () {
-      if (_this.activatorNode) {
-        var activator = Array.isArray(_this.activatorNode) ? _this.activatorNode : [_this.activatorNode];
-        activator.forEach(function (node) {
-          if (!node.elm) return;
-          if (!_this.$el.parentNode) return;
-          var target = _this.$el === _this.$el.parentNode.firstChild ? _this.$el : _this.$el.nextSibling;
-
-          _this.$el.parentNode.insertBefore(node.elm, target);
-        });
-      }
-    });
-  },
-  mounted: function mounted() {
-    this.hasContent && this.initDetach();
-  },
-  deactivated: function deactivated() {
-    this.isActive = false;
-  },
-  beforeDestroy: function beforeDestroy() {
-    // IE11 Fix
-    try {
-      if (this.$refs.content && this.$refs.content.parentNode) {
-        this.$refs.content.parentNode.removeChild(this.$refs.content);
-      }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _bootable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../bootable */ "./src/mixins/bootable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-      if (this.activatorNode) {
-        var activator = Array.isArray(this.activatorNode) ? this.activatorNode : [this.activatorNode];
-        activator.forEach(function (node) {
-          node.elm && node.elm.parentNode && node.elm.parentNode.removeChild(node.elm);
-        });
-      }
-    } catch (e) {
-      console.log(e);
-    }
-  },
-  methods: {
-    getScopeIdAttrs: function getScopeIdAttrs() {
-      var _a;
-
-      var scopeId = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getObjectValueByPath"])(this.$vnode, 'context.$options._scopeId');
-      return scopeId && (_a = {}, _a[scopeId] = '', _a);
-    },
-    initDetach: function initDetach() {
-      if (this._isDestroyed || !this.$refs.content || this.hasDetached || // Leave menu in place if attached
-      // and dev has not changed target
-      this.attach === '' || // If used as a boolean prop (<v-menu attach>)
-      this.attach === true || // If bound to a boolean (<v-menu :attach="true">)
-      this.attach === 'attach' // If bound as boolean prop in pug (v-menu(attach))
-      ) return;
-      var target;
-
-      if (this.attach === false) {
-        // Default, detach to app
-        target = document.querySelector('[data-app]');
-      } else if (typeof this.attach === 'string') {
-        // CSS selector
-        target = document.querySelector(this.attach);
-      } else {
-        // DOM Element
-        target = this.attach;
-      }
+            // Mixins
+            // Utilities
 
-      if (!target) {
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_3__["consoleWarn"])("Unable to locate target " + (this.attach || '[data-app]'), this);
-        return;
-      }
+            function validateAttachTarget(val) {
+              var type = _typeof(val);
 
-      target.appendChild(this.$refs.content);
-      this.hasDetached = true;
-    }
-  }
-}));
+              if (type === "boolean" || type === "string") return true;
+              return val.nodeType === Node.ELEMENT_NODE;
+            }
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_2__["default"])(
+                _bootable__WEBPACK_IMPORTED_MODULE_0__["default"]
+              ).extend({
+                name: "detachable",
+                props: {
+                  attach: {
+                    default: false,
+                    validator: validateAttachTarget,
+                  },
+                  contentClass: {
+                    type: String,
+                    default: "",
+                  },
+                },
+                data: function data() {
+                  return {
+                    activatorNode: null,
+                    hasDetached: false,
+                  };
+                },
+                watch: {
+                  attach: function attach() {
+                    this.hasDetached = false;
+                    this.initDetach();
+                  },
+                  hasContent: function hasContent() {
+                    this.$nextTick(this.initDetach);
+                  },
+                },
+                beforeMount: function beforeMount() {
+                  var _this = this;
+
+                  this.$nextTick(function () {
+                    if (_this.activatorNode) {
+                      var activator = Array.isArray(_this.activatorNode)
+                        ? _this.activatorNode
+                        : [_this.activatorNode];
+                      activator.forEach(function (node) {
+                        if (!node.elm) return;
+                        if (!_this.$el.parentNode) return;
+                        var target =
+                          _this.$el === _this.$el.parentNode.firstChild
+                            ? _this.$el
+                            : _this.$el.nextSibling;
+
+                        _this.$el.parentNode.insertBefore(node.elm, target);
+                      });
+                    }
+                  });
+                },
+                mounted: function mounted() {
+                  this.hasContent && this.initDetach();
+                },
+                deactivated: function deactivated() {
+                  this.isActive = false;
+                },
+                beforeDestroy: function beforeDestroy() {
+                  // IE11 Fix
+                  try {
+                    if (this.$refs.content && this.$refs.content.parentNode) {
+                      this.$refs.content.parentNode.removeChild(
+                        this.$refs.content
+                      );
+                    }
+
+                    if (this.activatorNode) {
+                      var activator = Array.isArray(this.activatorNode)
+                        ? this.activatorNode
+                        : [this.activatorNode];
+                      activator.forEach(function (node) {
+                        node.elm &&
+                          node.elm.parentNode &&
+                          node.elm.parentNode.removeChild(node.elm);
+                      });
+                    }
+                  } catch (e) {
+                    //console.log(e);
+                  }
+                },
+                methods: {
+                  getScopeIdAttrs: function getScopeIdAttrs() {
+                    var _a;
+
+                    var scopeId = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                        "getObjectValueByPath"
+                      ]
+                    )(this.$vnode, "context.$options._scopeId");
+                    return scopeId && ((_a = {}), (_a[scopeId] = ""), _a);
+                  },
+                  initDetach: function initDetach() {
+                    if (
+                      this._isDestroyed ||
+                      !this.$refs.content ||
+                      this.hasDetached || // Leave menu in place if attached
+                      // and dev has not changed target
+                      this.attach === "" || // If used as a boolean prop (<v-menu attach>)
+                      this.attach === true || // If bound to a boolean (<v-menu :attach="true">)
+                      this.attach === "attach" // If bound as boolean prop in pug (v-menu(attach))
+                    )
+                      return;
+                    var target;
+
+                    if (this.attach === false) {
+                      // Default, detach to app
+                      target = document.querySelector("[data-app]");
+                    } else if (typeof this.attach === "string") {
+                      // CSS selector
+                      target = document.querySelector(this.attach);
+                    } else {
+                      // DOM Element
+                      target = this.attach;
+                    }
+
+                    if (!target) {
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_3__[
+                          "consoleWarn"
+                        ]
+                      )(
+                        "Unable to locate target " +
+                          (this.attach || "[data-app]"),
+                        this
+                      );
+                      return;
+                    }
+
+                    target.appendChild(this.$refs.content);
+                    this.hasDetached = true;
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/elevatable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/elevatable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/elevatable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'elevatable',
-  props: {
-    elevation: [Number, String]
-  },
-  computed: {
-    computedElevation: function computedElevation() {
-      return this.elevation;
-    },
-    elevationClasses: function elevationClasses() {
-      var _a;
-
-      var elevation = this.computedElevation;
-      if (elevation == null) return {};
-      if (isNaN(parseInt(elevation))) return {};
-      return _a = {}, _a["elevation-" + this.elevation] = true, _a;
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "elevatable",
+                props: {
+                  elevation: [Number, String],
+                },
+                computed: {
+                  computedElevation: function computedElevation() {
+                    return this.elevation;
+                  },
+                  elevationClasses: function elevationClasses() {
+                    var _a;
+
+                    var elevation = this.computedElevation;
+                    if (elevation == null) return {};
+                    if (isNaN(parseInt(elevation))) return {};
+                    return (
+                      (_a = {}), (_a["elevation-" + this.elevation] = true), _a
+                    );
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/filterable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/filterable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/filterable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'filterable',
-  props: {
-    noDataText: {
-      type: String,
-      default: '$vuetify.noDataText'
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "filterable",
+                props: {
+                  noDataText: {
+                    type: String,
+                    default: "$vuetify.noDataText",
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/groupable/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/groupable/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/groupable/index.ts ***!
   \***************************************/
-/*! exports provided: factory, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "factory", function() { return factory; });
-/* harmony import */ var _registrable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../registrable */ "./src/mixins/registrable/index.ts");
-// Mixins
-
-function factory(namespace, child, parent) {
-  return Object(_registrable__WEBPACK_IMPORTED_MODULE_0__["inject"])(namespace, child, parent).extend({
-    name: 'groupable',
-    props: {
-      activeClass: {
-        type: String,
-        default: function _default() {
-          if (!this[namespace]) return undefined;
-          return this[namespace].activeClass;
-        }
-      },
-      disabled: Boolean
-    },
-    data: function data() {
-      return {
-        isActive: false
-      };
-    },
-    computed: {
-      groupClasses: function groupClasses() {
-        var _a;
-
-        if (!this.activeClass) return {};
-        return _a = {}, _a[this.activeClass] = this.isActive, _a;
-      }
-    },
-    created: function created() {
-      this[namespace] && this[namespace].register(this);
-    },
-    beforeDestroy: function beforeDestroy() {
-      this[namespace] && this[namespace].unregister(this);
-    },
-    methods: {
-      toggle: function toggle() {
-        this.$emit('change');
-      }
-    }
-  });
-}
-/* eslint-disable-next-line @typescript-eslint/no-redeclare */
+          /*! exports provided: factory, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "factory",
+              function () {
+                return factory;
+              }
+            );
+            /* harmony import */ var _registrable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../registrable */ "./src/mixins/registrable/index.ts"
+              );
+            // Mixins
+
+            function factory(namespace, child, parent) {
+              return Object(
+                _registrable__WEBPACK_IMPORTED_MODULE_0__["inject"]
+              )(namespace, child, parent).extend({
+                name: "groupable",
+                props: {
+                  activeClass: {
+                    type: String,
+                    default: function _default() {
+                      if (!this[namespace]) return undefined;
+                      return this[namespace].activeClass;
+                    },
+                  },
+                  disabled: Boolean,
+                },
+                data: function data() {
+                  return {
+                    isActive: false,
+                  };
+                },
+                computed: {
+                  groupClasses: function groupClasses() {
+                    var _a;
+
+                    if (!this.activeClass) return {};
+                    return (
+                      (_a = {}), (_a[this.activeClass] = this.isActive), _a
+                    );
+                  },
+                },
+                created: function created() {
+                  this[namespace] && this[namespace].register(this);
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this[namespace] && this[namespace].unregister(this);
+                },
+                methods: {
+                  toggle: function toggle() {
+                    this.$emit("change");
+                  },
+                },
+              });
+            }
+            /* eslint-disable-next-line @typescript-eslint/no-redeclare */
 
-var Groupable = factory('itemGroup');
-/* harmony default export */ __webpack_exports__["default"] = (Groupable);
+            var Groupable = factory("itemGroup");
+            /* harmony default export */ __webpack_exports__["default"] =
+              Groupable;
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/intersectable/index.ts":
-/*!*******************************************!*\
+        /***/ "./src/mixins/intersectable/index.ts":
+          /*!*******************************************!*\
   !*** ./src/mixins/intersectable/index.ts ***!
   \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return intersectable; });
-/* harmony import */ var _directives_intersect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../directives/intersect */ "./src/directives/intersect/index.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_2__);
-// Directives
- // Utilities
-
- // Types
-
-
-function intersectable(options) {
-  if (typeof window === 'undefined' || !('IntersectionObserver' in window)) {
-    // do nothing because intersection observer is not available
-    return vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
-      name: 'intersectable'
-    });
-  }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return intersectable;
+              }
+            );
+            /* harmony import */ var _directives_intersect__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../directives/intersect */ "./src/directives/intersect/index.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_2__
+              );
+            // Directives
+            // Utilities
+
+            // Types
+
+            function intersectable(options) {
+              if (
+                typeof window === "undefined" ||
+                !("IntersectionObserver" in window)
+              ) {
+                // do nothing because intersection observer is not available
+                return vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
+                  name: "intersectable",
+                });
+              }
 
-  return vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
-    name: 'intersectable',
-    mounted: function mounted() {
-      _directives_intersect__WEBPACK_IMPORTED_MODULE_0__["default"].inserted(this.$el, {
-        name: 'intersect',
-        value: this.onObserve
-      });
-    },
-    destroyed: function destroyed() {
-      _directives_intersect__WEBPACK_IMPORTED_MODULE_0__["default"].unbind(this.$el);
-    },
-    methods: {
-      onObserve: function onObserve(entries, observer, isIntersecting) {
-        if (!isIntersecting) return;
-
-        for (var i = 0, length = options.onVisible.length; i < length; i++) {
-          var callback = this[options.onVisible[i]];
-
-          if (typeof callback === 'function') {
-            callback();
-            continue;
-          }
-
-          Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleWarn"])(options.onVisible[i] + ' method is not available on the instance but referenced in intersectable mixin options');
-        }
-      }
-    }
-  });
-}
+              return vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
+                name: "intersectable",
+                mounted: function mounted() {
+                  _directives_intersect__WEBPACK_IMPORTED_MODULE_0__[
+                    "default"
+                  ].inserted(this.$el, {
+                    name: "intersect",
+                    value: this.onObserve,
+                  });
+                },
+                destroyed: function destroyed() {
+                  _directives_intersect__WEBPACK_IMPORTED_MODULE_0__[
+                    "default"
+                  ].unbind(this.$el);
+                },
+                methods: {
+                  onObserve: function onObserve(
+                    entries,
+                    observer,
+                    isIntersecting
+                  ) {
+                    if (!isIntersecting) return;
+
+                    for (
+                      var i = 0, length = options.onVisible.length;
+                      i < length;
+                      i++
+                    ) {
+                      var callback = this[options.onVisible[i]];
+
+                      if (typeof callback === "function") {
+                        callback();
+                        continue;
+                      }
+
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_1__[
+                          "consoleWarn"
+                        ]
+                      )(
+                        options.onVisible[i] +
+                          " method is not available on the instance but referenced in intersectable mixin options"
+                      );
+                    }
+                  },
+                },
+              });
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/loadable/index.ts":
-/*!**************************************!*\
+        /***/ "./src/mixins/loadable/index.ts":
+          /*!**************************************!*\
   !*** ./src/mixins/loadable/index.ts ***!
   \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _components_VProgressLinear__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/VProgressLinear */ "./src/components/VProgressLinear/index.ts");
-
-
-/**
- * Loadable
- *
- * @mixin
- *
- * Used to add linear progress bar to components
- * Can use a default bar with a specific color
- * or designate a custom progress linear bar
- */
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend().extend({
-  name: 'loadable',
-  props: {
-    loading: {
-      type: [Boolean, String],
-      default: false
-    },
-    loaderHeight: {
-      type: [Number, String],
-      default: 2
-    }
-  },
-  methods: {
-    genProgress: function genProgress() {
-      if (this.loading === false) return null;
-      return this.$slots.progress || this.$createElement(_components_VProgressLinear__WEBPACK_IMPORTED_MODULE_1__["default"], {
-        props: {
-          absolute: true,
-          color: this.loading === true || this.loading === '' ? this.color || 'primary' : this.loading,
-          height: this.loaderHeight,
-          indeterminate: true
-        }
-      });
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _components_VProgressLinear__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../components/VProgressLinear */ "./src/components/VProgressLinear/index.ts"
+              );
+
+            /**
+             * Loadable
+             *
+             * @mixin
+             *
+             * Used to add linear progress bar to components
+             * Can use a default bar with a specific color
+             * or designate a custom progress linear bar
+             */
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend().extend({
+                name: "loadable",
+                props: {
+                  loading: {
+                    type: [Boolean, String],
+                    default: false,
+                  },
+                  loaderHeight: {
+                    type: [Number, String],
+                    default: 2,
+                  },
+                },
+                methods: {
+                  genProgress: function genProgress() {
+                    if (this.loading === false) return null;
+                    return (
+                      this.$slots.progress ||
+                      this.$createElement(
+                        _components_VProgressLinear__WEBPACK_IMPORTED_MODULE_1__[
+                          "default"
+                        ],
+                        {
+                          props: {
+                            absolute: true,
+                            color:
+                              this.loading === true || this.loading === ""
+                                ? this.color || "primary"
+                                : this.loading,
+                            height: this.loaderHeight,
+                            indeterminate: true,
+                          },
+                        }
+                      )
+                    );
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/localable/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/localable/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/localable/index.ts ***!
   \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'localable',
-  props: {
-    locale: String
-  },
-  computed: {
-    currentLocale: function currentLocale() {
-      return this.locale || this.$vuetify.lang.current;
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "localable",
+                props: {
+                  locale: String,
+                },
+                computed: {
+                  currentLocale: function currentLocale() {
+                    return this.locale || this.$vuetify.lang.current;
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/measurable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/measurable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/measurable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);
-// Helpers
- // Types
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
-  name: 'measurable',
-  props: {
-    height: [Number, String],
-    maxHeight: [Number, String],
-    maxWidth: [Number, String],
-    minHeight: [Number, String],
-    minWidth: [Number, String],
-    width: [Number, String]
-  },
-  computed: {
-    measurableStyles: function measurableStyles() {
-      var styles = {};
-      var height = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["convertToUnit"])(this.height);
-      var minHeight = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["convertToUnit"])(this.minHeight);
-      var minWidth = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["convertToUnit"])(this.minWidth);
-      var maxHeight = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["convertToUnit"])(this.maxHeight);
-      var maxWidth = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["convertToUnit"])(this.maxWidth);
-      var width = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["convertToUnit"])(this.width);
-      if (height) styles.height = height;
-      if (minHeight) styles.minHeight = minHeight;
-      if (minWidth) styles.minWidth = minWidth;
-      if (maxHeight) styles.maxHeight = maxHeight;
-      if (maxWidth) styles.maxWidth = maxWidth;
-      if (width) styles.width = width;
-      return styles;
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_1__
+              );
+            // Helpers
+            // Types
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
+                name: "measurable",
+                props: {
+                  height: [Number, String],
+                  maxHeight: [Number, String],
+                  maxWidth: [Number, String],
+                  minHeight: [Number, String],
+                  minWidth: [Number, String],
+                  width: [Number, String],
+                },
+                computed: {
+                  measurableStyles: function measurableStyles() {
+                    var styles = {};
+                    var height = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                        "convertToUnit"
+                      ]
+                    )(this.height);
+                    var minHeight = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                        "convertToUnit"
+                      ]
+                    )(this.minHeight);
+                    var minWidth = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                        "convertToUnit"
+                      ]
+                    )(this.minWidth);
+                    var maxHeight = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                        "convertToUnit"
+                      ]
+                    )(this.maxHeight);
+                    var maxWidth = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                        "convertToUnit"
+                      ]
+                    )(this.maxWidth);
+                    var width = Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_0__[
+                        "convertToUnit"
+                      ]
+                    )(this.width);
+                    if (height) styles.height = height;
+                    if (minHeight) styles.minHeight = minHeight;
+                    if (minWidth) styles.minWidth = minWidth;
+                    if (maxHeight) styles.maxHeight = maxHeight;
+                    if (maxWidth) styles.maxWidth = maxWidth;
+                    if (width) styles.width = width;
+                    return styles;
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/menuable/index.ts":
-/*!**************************************!*\
+        /***/ "./src/mixins/menuable/index.ts":
+          /*!**************************************!*\
   !*** ./src/mixins/menuable/index.ts ***!
   \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _positionable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../positionable */ "./src/mixins/positionable/index.ts");
-/* harmony import */ var _stackable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../stackable */ "./src/mixins/stackable/index.ts");
-/* harmony import */ var _activatable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../activatable */ "./src/mixins/activatable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Mixins
-
-
-
-
- // Utilities
-
-
- // Types
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_stackable__WEBPACK_IMPORTED_MODULE_1__["default"], _positionable__WEBPACK_IMPORTED_MODULE_0__["default"], _activatable__WEBPACK_IMPORTED_MODULE_2__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend().extend({
-  name: 'menuable',
-  props: {
-    allowOverflow: Boolean,
-    light: Boolean,
-    dark: Boolean,
-    maxWidth: {
-      type: [Number, String],
-      default: 'auto'
-    },
-    minWidth: [Number, String],
-    nudgeBottom: {
-      type: [Number, String],
-      default: 0
-    },
-    nudgeLeft: {
-      type: [Number, String],
-      default: 0
-    },
-    nudgeRight: {
-      type: [Number, String],
-      default: 0
-    },
-    nudgeTop: {
-      type: [Number, String],
-      default: 0
-    },
-    nudgeWidth: {
-      type: [Number, String],
-      default: 0
-    },
-    offsetOverflow: Boolean,
-    openOnClick: Boolean,
-    positionX: {
-      type: Number,
-      default: null
-    },
-    positionY: {
-      type: Number,
-      default: null
-    },
-    zIndex: {
-      type: [Number, String],
-      default: null
-    }
-  },
-  data: function data() {
-    return {
-      absoluteX: 0,
-      absoluteY: 0,
-      activatedBy: null,
-      activatorFixed: false,
-      dimensions: {
-        activator: {
-          top: 0,
-          left: 0,
-          bottom: 0,
-          right: 0,
-          width: 0,
-          height: 0,
-          offsetTop: 0,
-          scrollHeight: 0,
-          offsetLeft: 0
-        },
-        content: {
-          top: 0,
-          left: 0,
-          bottom: 0,
-          right: 0,
-          width: 0,
-          height: 0,
-          offsetTop: 0,
-          scrollHeight: 0
-        }
-      },
-      hasJustFocused: false,
-      hasWindow: false,
-      inputActivator: false,
-      isContentActive: false,
-      pageWidth: 0,
-      pageYOffset: 0,
-      stackClass: 'v-menu__content--active',
-      stackMinZIndex: 6
-    };
-  },
-  computed: {
-    computedLeft: function computedLeft() {
-      var a = this.dimensions.activator;
-      var c = this.dimensions.content;
-      var activatorLeft = (this.attach !== false ? a.offsetLeft : a.left) || 0;
-      var minWidth = Math.max(a.width, c.width);
-      var left = 0;
-      left += this.left ? activatorLeft - (minWidth - a.width) : activatorLeft;
-
-      if (this.offsetX) {
-        var maxWidth = isNaN(Number(this.maxWidth)) ? a.width : Math.min(a.width, Number(this.maxWidth));
-        left += this.left ? -maxWidth : a.width;
-      }
-
-      if (this.nudgeLeft) left -= parseInt(this.nudgeLeft);
-      if (this.nudgeRight) left += parseInt(this.nudgeRight);
-      return left;
-    },
-    computedTop: function computedTop() {
-      var a = this.dimensions.activator;
-      var c = this.dimensions.content;
-      var top = 0;
-      if (this.top) top += a.height - c.height;
-      if (this.attach !== false) top += a.offsetTop;else top += a.top + this.pageYOffset;
-      if (this.offsetY) top += this.top ? -a.height : a.height;
-      if (this.nudgeTop) top -= parseInt(this.nudgeTop);
-      if (this.nudgeBottom) top += parseInt(this.nudgeBottom);
-      return top;
-    },
-    hasActivator: function hasActivator() {
-      return !!this.$slots.activator || !!this.$scopedSlots.activator || !!this.activator || !!this.inputActivator;
-    }
-  },
-  watch: {
-    disabled: function disabled(val) {
-      val && this.callDeactivate();
-    },
-    isActive: function isActive(val) {
-      if (this.disabled) return;
-      val ? this.callActivate() : this.callDeactivate();
-    },
-    positionX: 'updateDimensions',
-    positionY: 'updateDimensions'
-  },
-  beforeMount: function beforeMount() {
-    this.hasWindow = typeof window !== 'undefined';
-  },
-  methods: {
-    absolutePosition: function absolutePosition() {
-      return {
-        offsetTop: 0,
-        offsetLeft: 0,
-        scrollHeight: 0,
-        top: this.positionY || this.absoluteY,
-        bottom: this.positionY || this.absoluteY,
-        left: this.positionX || this.absoluteX,
-        right: this.positionX || this.absoluteX,
-        height: 0,
-        width: 0
-      };
-    },
-    activate: function activate() {},
-    calcLeft: function calcLeft(menuWidth) {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.attach !== false ? this.computedLeft : this.calcXOverflow(this.computedLeft, menuWidth));
-    },
-    calcTop: function calcTop() {
-      return Object(_util_helpers__WEBPACK_IMPORTED_MODULE_4__["convertToUnit"])(this.attach !== false ? this.computedTop : this.calcYOverflow(this.computedTop));
-    },
-    calcXOverflow: function calcXOverflow(left, menuWidth) {
-      var xOverflow = left + menuWidth - this.pageWidth + 12;
-
-      if ((!this.left || this.right) && xOverflow > 0) {
-        left = Math.max(left - xOverflow, 0);
-      } else {
-        left = Math.max(left, 12);
-      }
-
-      return left + this.getOffsetLeft();
-    },
-    calcYOverflow: function calcYOverflow(top) {
-      var documentHeight = this.getInnerHeight();
-      var toTop = this.pageYOffset + documentHeight;
-      var activator = this.dimensions.activator;
-      var contentHeight = this.dimensions.content.height;
-      var totalHeight = top + contentHeight;
-      var isOverflowing = toTop < totalHeight; // If overflowing bottom and offset
-      // TODO: set 'bottom' position instead of 'top'
-
-      if (isOverflowing && this.offsetOverflow && // If we don't have enough room to offset
-      // the overflow, don't offset
-      activator.top > contentHeight) {
-        top = this.pageYOffset + (activator.top - contentHeight); // If overflowing bottom
-      } else if (isOverflowing && !this.allowOverflow) {
-        top = toTop - contentHeight - 12; // If overflowing top
-      } else if (top < this.pageYOffset && !this.allowOverflow) {
-        top = this.pageYOffset + 12;
-      }
-
-      return top < 12 ? 12 : top;
-    },
-    callActivate: function callActivate() {
-      if (!this.hasWindow) return;
-      this.activate();
-    },
-    callDeactivate: function callDeactivate() {
-      this.isContentActive = false;
-      this.deactivate();
-    },
-    checkForPageYOffset: function checkForPageYOffset() {
-      if (this.hasWindow) {
-        this.pageYOffset = this.activatorFixed ? 0 : this.getOffsetTop();
-      }
-    },
-    checkActivatorFixed: function checkActivatorFixed() {
-      if (this.attach !== false) return;
-      var el = this.getActivator();
-
-      while (el) {
-        if (window.getComputedStyle(el).position === 'fixed') {
-          this.activatorFixed = true;
-          return;
-        }
-
-        el = el.offsetParent;
-      }
-
-      this.activatorFixed = false;
-    },
-    deactivate: function deactivate() {},
-    genActivatorListeners: function genActivatorListeners() {
-      var _this = this;
-
-      var listeners = _activatable__WEBPACK_IMPORTED_MODULE_2__["default"].options.methods.genActivatorListeners.call(this);
-      var onClick = listeners.click;
-
-      listeners.click = function (e) {
-        if (_this.openOnClick) {
-          onClick && onClick(e);
-        }
-
-        _this.absoluteX = e.clientX;
-        _this.absoluteY = e.clientY;
-      };
-
-      return listeners;
-    },
-    getInnerHeight: function getInnerHeight() {
-      if (!this.hasWindow) return 0;
-      return window.innerHeight || document.documentElement.clientHeight;
-    },
-    getOffsetLeft: function getOffsetLeft() {
-      if (!this.hasWindow) return 0;
-      return window.pageXOffset || document.documentElement.scrollLeft;
-    },
-    getOffsetTop: function getOffsetTop() {
-      if (!this.hasWindow) return 0;
-      return window.pageYOffset || document.documentElement.scrollTop;
-    },
-    getRoundedBoundedClientRect: function getRoundedBoundedClientRect(el) {
-      var rect = el.getBoundingClientRect();
-      return {
-        top: Math.round(rect.top),
-        left: Math.round(rect.left),
-        bottom: Math.round(rect.bottom),
-        right: Math.round(rect.right),
-        width: Math.round(rect.width),
-        height: Math.round(rect.height)
-      };
-    },
-    measure: function measure(el) {
-      if (!el || !this.hasWindow) return null;
-      var rect = this.getRoundedBoundedClientRect(el); // Account for activator margin
-
-      if (this.attach !== false) {
-        var style = window.getComputedStyle(el);
-        rect.left = parseInt(style.marginLeft);
-        rect.top = parseInt(style.marginTop);
-      }
-
-      return rect;
-    },
-    sneakPeek: function sneakPeek(cb) {
-      var _this = this;
-
-      requestAnimationFrame(function () {
-        var el = _this.$refs.content;
-
-        if (!el || el.style.display !== 'none') {
-          cb();
-          return;
-        }
-
-        el.style.display = 'inline-block';
-        cb();
-        el.style.display = 'none';
-      });
-    },
-    startTransition: function startTransition() {
-      var _this = this;
-
-      return new Promise(function (resolve) {
-        return requestAnimationFrame(function () {
-          _this.isContentActive = _this.hasJustFocused = _this.isActive;
-          resolve();
-        });
-      });
-    },
-    updateDimensions: function updateDimensions() {
-      var _this = this;
-
-      this.hasWindow = typeof window !== 'undefined';
-      this.checkActivatorFixed();
-      this.checkForPageYOffset();
-      this.pageWidth = document.documentElement.clientWidth;
-      var dimensions = {
-        activator: __assign({}, this.dimensions.activator),
-        content: __assign({}, this.dimensions.content)
-      }; // Activator should already be shown
-
-      if (!this.hasActivator || this.absolute) {
-        dimensions.activator = this.absolutePosition();
-      } else {
-        var activator = this.getActivator();
-        if (!activator) return;
-        dimensions.activator = this.measure(activator);
-        dimensions.activator.offsetLeft = activator.offsetLeft;
-
-        if (this.attach !== false) {
-          // account for css padding causing things to not line up
-          // this is mostly for v-autocomplete, hopefully it won't break anything
-          dimensions.activator.offsetTop = activator.offsetTop;
-        } else {
-          dimensions.activator.offsetTop = 0;
-        }
-      } // Display and hide to get dimensions
-
-
-      this.sneakPeek(function () {
-        _this.$refs.content && (dimensions.content = _this.measure(_this.$refs.content));
-        _this.dimensions = dimensions;
-      });
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _positionable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../positionable */ "./src/mixins/positionable/index.ts"
+              );
+            /* harmony import */ var _stackable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../stackable */ "./src/mixins/stackable/index.ts"
+              );
+            /* harmony import */ var _activatable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../activatable */ "./src/mixins/activatable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Mixins
+
+            // Utilities
+
+            // Types
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"]
+            )(
+              _stackable__WEBPACK_IMPORTED_MODULE_1__["default"],
+              _positionable__WEBPACK_IMPORTED_MODULE_0__["default"],
+              _activatable__WEBPACK_IMPORTED_MODULE_2__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend().extend({
+                name: "menuable",
+                props: {
+                  allowOverflow: Boolean,
+                  light: Boolean,
+                  dark: Boolean,
+                  maxWidth: {
+                    type: [Number, String],
+                    default: "auto",
+                  },
+                  minWidth: [Number, String],
+                  nudgeBottom: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  nudgeLeft: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  nudgeRight: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  nudgeTop: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  nudgeWidth: {
+                    type: [Number, String],
+                    default: 0,
+                  },
+                  offsetOverflow: Boolean,
+                  openOnClick: Boolean,
+                  positionX: {
+                    type: Number,
+                    default: null,
+                  },
+                  positionY: {
+                    type: Number,
+                    default: null,
+                  },
+                  zIndex: {
+                    type: [Number, String],
+                    default: null,
+                  },
+                },
+                data: function data() {
+                  return {
+                    absoluteX: 0,
+                    absoluteY: 0,
+                    activatedBy: null,
+                    activatorFixed: false,
+                    dimensions: {
+                      activator: {
+                        top: 0,
+                        left: 0,
+                        bottom: 0,
+                        right: 0,
+                        width: 0,
+                        height: 0,
+                        offsetTop: 0,
+                        scrollHeight: 0,
+                        offsetLeft: 0,
+                      },
+                      content: {
+                        top: 0,
+                        left: 0,
+                        bottom: 0,
+                        right: 0,
+                        width: 0,
+                        height: 0,
+                        offsetTop: 0,
+                        scrollHeight: 0,
+                      },
+                    },
+                    hasJustFocused: false,
+                    hasWindow: false,
+                    inputActivator: false,
+                    isContentActive: false,
+                    pageWidth: 0,
+                    pageYOffset: 0,
+                    stackClass: "v-menu__content--active",
+                    stackMinZIndex: 6,
+                  };
+                },
+                computed: {
+                  computedLeft: function computedLeft() {
+                    var a = this.dimensions.activator;
+                    var c = this.dimensions.content;
+                    var activatorLeft =
+                      (this.attach !== false ? a.offsetLeft : a.left) || 0;
+                    var minWidth = Math.max(a.width, c.width);
+                    var left = 0;
+                    left += this.left
+                      ? activatorLeft - (minWidth - a.width)
+                      : activatorLeft;
+
+                    if (this.offsetX) {
+                      var maxWidth = isNaN(Number(this.maxWidth))
+                        ? a.width
+                        : Math.min(a.width, Number(this.maxWidth));
+                      left += this.left ? -maxWidth : a.width;
+                    }
+
+                    if (this.nudgeLeft) left -= parseInt(this.nudgeLeft);
+                    if (this.nudgeRight) left += parseInt(this.nudgeRight);
+                    return left;
+                  },
+                  computedTop: function computedTop() {
+                    var a = this.dimensions.activator;
+                    var c = this.dimensions.content;
+                    var top = 0;
+                    if (this.top) top += a.height - c.height;
+                    if (this.attach !== false) top += a.offsetTop;
+                    else top += a.top + this.pageYOffset;
+                    if (this.offsetY) top += this.top ? -a.height : a.height;
+                    if (this.nudgeTop) top -= parseInt(this.nudgeTop);
+                    if (this.nudgeBottom) top += parseInt(this.nudgeBottom);
+                    return top;
+                  },
+                  hasActivator: function hasActivator() {
+                    return (
+                      !!this.$slots.activator ||
+                      !!this.$scopedSlots.activator ||
+                      !!this.activator ||
+                      !!this.inputActivator
+                    );
+                  },
+                },
+                watch: {
+                  disabled: function disabled(val) {
+                    val && this.callDeactivate();
+                  },
+                  isActive: function isActive(val) {
+                    if (this.disabled) return;
+                    val ? this.callActivate() : this.callDeactivate();
+                  },
+                  positionX: "updateDimensions",
+                  positionY: "updateDimensions",
+                },
+                beforeMount: function beforeMount() {
+                  this.hasWindow = typeof window !== "undefined";
+                },
+                methods: {
+                  absolutePosition: function absolutePosition() {
+                    return {
+                      offsetTop: 0,
+                      offsetLeft: 0,
+                      scrollHeight: 0,
+                      top: this.positionY || this.absoluteY,
+                      bottom: this.positionY || this.absoluteY,
+                      left: this.positionX || this.absoluteX,
+                      right: this.positionX || this.absoluteX,
+                      height: 0,
+                      width: 0,
+                    };
+                  },
+                  activate: function activate() {},
+                  calcLeft: function calcLeft(menuWidth) {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "convertToUnit"
+                      ]
+                    )(
+                      this.attach !== false
+                        ? this.computedLeft
+                        : this.calcXOverflow(this.computedLeft, menuWidth)
+                    );
+                  },
+                  calcTop: function calcTop() {
+                    return Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_4__[
+                        "convertToUnit"
+                      ]
+                    )(
+                      this.attach !== false
+                        ? this.computedTop
+                        : this.calcYOverflow(this.computedTop)
+                    );
+                  },
+                  calcXOverflow: function calcXOverflow(left, menuWidth) {
+                    var xOverflow = left + menuWidth - this.pageWidth + 12;
+
+                    if ((!this.left || this.right) && xOverflow > 0) {
+                      left = Math.max(left - xOverflow, 0);
+                    } else {
+                      left = Math.max(left, 12);
+                    }
+
+                    return left + this.getOffsetLeft();
+                  },
+                  calcYOverflow: function calcYOverflow(top) {
+                    var documentHeight = this.getInnerHeight();
+                    var toTop = this.pageYOffset + documentHeight;
+                    var activator = this.dimensions.activator;
+                    var contentHeight = this.dimensions.content.height;
+                    var totalHeight = top + contentHeight;
+                    var isOverflowing = toTop < totalHeight; // If overflowing bottom and offset
+                    // TODO: set 'bottom' position instead of 'top'
+
+                    if (
+                      isOverflowing &&
+                      this.offsetOverflow && // If we don't have enough room to offset
+                      // the overflow, don't offset
+                      activator.top > contentHeight
+                    ) {
+                      top = this.pageYOffset + (activator.top - contentHeight); // If overflowing bottom
+                    } else if (isOverflowing && !this.allowOverflow) {
+                      top = toTop - contentHeight - 12; // If overflowing top
+                    } else if (top < this.pageYOffset && !this.allowOverflow) {
+                      top = this.pageYOffset + 12;
+                    }
+
+                    return top < 12 ? 12 : top;
+                  },
+                  callActivate: function callActivate() {
+                    if (!this.hasWindow) return;
+                    this.activate();
+                  },
+                  callDeactivate: function callDeactivate() {
+                    this.isContentActive = false;
+                    this.deactivate();
+                  },
+                  checkForPageYOffset: function checkForPageYOffset() {
+                    if (this.hasWindow) {
+                      this.pageYOffset = this.activatorFixed
+                        ? 0
+                        : this.getOffsetTop();
+                    }
+                  },
+                  checkActivatorFixed: function checkActivatorFixed() {
+                    if (this.attach !== false) return;
+                    var el = this.getActivator();
+
+                    while (el) {
+                      if (window.getComputedStyle(el).position === "fixed") {
+                        this.activatorFixed = true;
+                        return;
+                      }
+
+                      el = el.offsetParent;
+                    }
+
+                    this.activatorFixed = false;
+                  },
+                  deactivate: function deactivate() {},
+                  genActivatorListeners: function genActivatorListeners() {
+                    var _this = this;
+
+                    var listeners =
+                      _activatable__WEBPACK_IMPORTED_MODULE_2__[
+                        "default"
+                      ].options.methods.genActivatorListeners.call(this);
+                    var onClick = listeners.click;
+
+                    listeners.click = function (e) {
+                      if (_this.openOnClick) {
+                        onClick && onClick(e);
+                      }
+
+                      _this.absoluteX = e.clientX;
+                      _this.absoluteY = e.clientY;
+                    };
+
+                    return listeners;
+                  },
+                  getInnerHeight: function getInnerHeight() {
+                    if (!this.hasWindow) return 0;
+                    return (
+                      window.innerHeight ||
+                      document.documentElement.clientHeight
+                    );
+                  },
+                  getOffsetLeft: function getOffsetLeft() {
+                    if (!this.hasWindow) return 0;
+                    return (
+                      window.pageXOffset || document.documentElement.scrollLeft
+                    );
+                  },
+                  getOffsetTop: function getOffsetTop() {
+                    if (!this.hasWindow) return 0;
+                    return (
+                      window.pageYOffset || document.documentElement.scrollTop
+                    );
+                  },
+                  getRoundedBoundedClientRect:
+                    function getRoundedBoundedClientRect(el) {
+                      var rect = el.getBoundingClientRect();
+                      return {
+                        top: Math.round(rect.top),
+                        left: Math.round(rect.left),
+                        bottom: Math.round(rect.bottom),
+                        right: Math.round(rect.right),
+                        width: Math.round(rect.width),
+                        height: Math.round(rect.height),
+                      };
+                    },
+                  measure: function measure(el) {
+                    if (!el || !this.hasWindow) return null;
+                    var rect = this.getRoundedBoundedClientRect(el); // Account for activator margin
+
+                    if (this.attach !== false) {
+                      var style = window.getComputedStyle(el);
+                      rect.left = parseInt(style.marginLeft);
+                      rect.top = parseInt(style.marginTop);
+                    }
+
+                    return rect;
+                  },
+                  sneakPeek: function sneakPeek(cb) {
+                    var _this = this;
+
+                    requestAnimationFrame(function () {
+                      var el = _this.$refs.content;
+
+                      if (!el || el.style.display !== "none") {
+                        cb();
+                        return;
+                      }
+
+                      el.style.display = "inline-block";
+                      cb();
+                      el.style.display = "none";
+                    });
+                  },
+                  startTransition: function startTransition() {
+                    var _this = this;
+
+                    return new Promise(function (resolve) {
+                      return requestAnimationFrame(function () {
+                        _this.isContentActive = _this.hasJustFocused =
+                          _this.isActive;
+                        resolve();
+                      });
+                    });
+                  },
+                  updateDimensions: function updateDimensions() {
+                    var _this = this;
+
+                    this.hasWindow = typeof window !== "undefined";
+                    this.checkActivatorFixed();
+                    this.checkForPageYOffset();
+                    this.pageWidth = document.documentElement.clientWidth;
+                    var dimensions = {
+                      activator: __assign({}, this.dimensions.activator),
+                      content: __assign({}, this.dimensions.content),
+                    }; // Activator should already be shown
+
+                    if (!this.hasActivator || this.absolute) {
+                      dimensions.activator = this.absolutePosition();
+                    } else {
+                      var activator = this.getActivator();
+                      if (!activator) return;
+                      dimensions.activator = this.measure(activator);
+                      dimensions.activator.offsetLeft = activator.offsetLeft;
+
+                      if (this.attach !== false) {
+                        // account for css padding causing things to not line up
+                        // this is mostly for v-autocomplete, hopefully it won't break anything
+                        dimensions.activator.offsetTop = activator.offsetTop;
+                      } else {
+                        dimensions.activator.offsetTop = 0;
+                      }
+                    } // Display and hide to get dimensions
+
+                    this.sneakPeek(function () {
+                      _this.$refs.content &&
+                        (dimensions.content = _this.measure(
+                          _this.$refs.content
+                        ));
+                      _this.dimensions = dimensions;
+                    });
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/mobile/index.ts":
-/*!************************************!*\
+        /***/ "./src/mixins/mobile/index.ts":
+          /*!************************************!*\
   !*** ./src/mixins/mobile/index.ts ***!
   \************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
-  name: 'mobile',
-  props: {
-    mobileBreakpoint: {
-      type: [Number, String],
-      default: function _default() {
-        // Avoid destroying unit
-        // tests for users
-        return this.$vuetify ? this.$vuetify.breakpoint.mobileBreakpoint : undefined;
-      },
-      validator: function validator(v) {
-        return !isNaN(Number(v)) || ['xs', 'sm', 'md', 'lg', 'xl'].includes(String(v));
-      }
-    }
-  },
-  computed: {
-    isMobile: function isMobile() {
-      var _a = this.$vuetify.breakpoint,
-          mobile = _a.mobile,
-          width = _a.width,
-          name = _a.name,
-          mobileBreakpoint = _a.mobileBreakpoint; // Check if local mobileBreakpoint matches
-      // the application's mobileBreakpoint
-
-      if (mobileBreakpoint === this.mobileBreakpoint) return mobile;
-      var mobileWidth = parseInt(this.mobileBreakpoint, 10);
-      var isNumber = !isNaN(mobileWidth);
-      return isNumber ? width < mobileWidth : name === this.mobileBreakpoint;
-    }
-  },
-  created: function created() {
-    /* istanbul ignore next */
-    if (this.$attrs.hasOwnProperty('mobile-break-point')) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_0__["deprecate"])('mobile-break-point', 'mobile-breakpoint', this);
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_1__
+              );
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
+                name: "mobile",
+                props: {
+                  mobileBreakpoint: {
+                    type: [Number, String],
+                    default: function _default() {
+                      // Avoid destroying unit
+                      // tests for users
+                      return this.$vuetify
+                        ? this.$vuetify.breakpoint.mobileBreakpoint
+                        : undefined;
+                    },
+                    validator: function validator(v) {
+                      return (
+                        !isNaN(Number(v)) ||
+                        ["xs", "sm", "md", "lg", "xl"].includes(String(v))
+                      );
+                    },
+                  },
+                },
+                computed: {
+                  isMobile: function isMobile() {
+                    var _a = this.$vuetify.breakpoint,
+                      mobile = _a.mobile,
+                      width = _a.width,
+                      name = _a.name,
+                      mobileBreakpoint = _a.mobileBreakpoint; // Check if local mobileBreakpoint matches
+                    // the application's mobileBreakpoint
+
+                    if (mobileBreakpoint === this.mobileBreakpoint)
+                      return mobile;
+                    var mobileWidth = parseInt(this.mobileBreakpoint, 10);
+                    var isNumber = !isNaN(mobileWidth);
+                    return isNumber
+                      ? width < mobileWidth
+                      : name === this.mobileBreakpoint;
+                  },
+                },
+                created: function created() {
+                  /* istanbul ignore next */
+                  if (this.$attrs.hasOwnProperty("mobile-break-point")) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_0__["deprecate"]
+                    )("mobile-break-point", "mobile-breakpoint", this);
+                  }
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/overlayable/index.ts":
-/*!*****************************************!*\
+        /***/ "./src/mixins/overlayable/index.ts":
+          /*!*****************************************!*\
   !*** ./src/mixins/overlayable/index.ts ***!
   \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _components_VOverlay__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/VOverlay */ "./src/components/VOverlay/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_2__);
-// Components
- // Utilities
-
- // Types
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend().extend({
-  name: 'overlayable',
-  props: {
-    hideOverlay: Boolean,
-    overlayColor: String,
-    overlayOpacity: [Number, String]
-  },
-  data: function data() {
-    return {
-      animationFrame: 0,
-      overlay: null
-    };
-  },
-  watch: {
-    hideOverlay: function hideOverlay(value) {
-      if (!this.isActive) return;
-      if (value) this.removeOverlay();else this.genOverlay();
-    }
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.removeOverlay();
-  },
-  methods: {
-    createOverlay: function createOverlay() {
-      var overlay = new _components_VOverlay__WEBPACK_IMPORTED_MODULE_0__["default"]({
-        propsData: {
-          absolute: this.absolute,
-          value: false,
-          color: this.overlayColor,
-          opacity: this.overlayOpacity
-        }
-      });
-      overlay.$mount();
-      var parent = this.absolute ? this.$el.parentNode : document.querySelector('[data-app]');
-      parent && parent.insertBefore(overlay.$el, parent.firstChild);
-      this.overlay = overlay;
-    },
-    genOverlay: function genOverlay() {
-      var _this = this;
-
-      this.hideScroll();
-      if (this.hideOverlay) return;
-      if (!this.overlay) this.createOverlay();
-      this.animationFrame = requestAnimationFrame(function () {
-        if (!_this.overlay) return;
-
-        if (_this.activeZIndex !== undefined) {
-          _this.overlay.zIndex = String(_this.activeZIndex - 1);
-        } else if (_this.$el) {
-          _this.overlay.zIndex = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getZIndex"])(_this.$el);
-        }
-
-        _this.overlay.value = true;
-      });
-      return true;
-    },
-
-    /** removeOverlay(false) will not restore the scollbar afterwards */
-    removeOverlay: function removeOverlay(showScroll) {
-      var _this = this;
-
-      if (showScroll === void 0) {
-        showScroll = true;
-      }
-
-      if (this.overlay) {
-        Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["addOnceEventListener"])(this.overlay.$el, 'transitionend', function () {
-          if (!_this.overlay || !_this.overlay.$el || !_this.overlay.$el.parentNode || _this.overlay.value) return;
-
-          _this.overlay.$el.parentNode.removeChild(_this.overlay.$el);
-
-          _this.overlay.$destroy();
-
-          _this.overlay = null;
-        }); // Cancel animation frame in case
-        // overlay is removed before it
-        // has finished its animation
-
-        cancelAnimationFrame(this.animationFrame);
-        this.overlay.value = false;
-      }
-
-      showScroll && this.showScroll();
-    },
-    scrollListener: function scrollListener(e) {
-      if (e.type === 'keydown') {
-        if (['INPUT', 'TEXTAREA', 'SELECT'].includes(e.target.tagName) || // https://github.com/vuetifyjs/vuetify/issues/4715
-        e.target.isContentEditable) return;
-        var up = [_util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"].up, _util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"].pageup];
-        var down = [_util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"].down, _util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"].pagedown];
-
-        if (up.includes(e.keyCode)) {
-          e.deltaY = -1;
-        } else if (down.includes(e.keyCode)) {
-          e.deltaY = 1;
-        } else {
-          return;
-        }
-      }
-
-      if (e.target === this.overlay || e.type !== 'keydown' && e.target === document.body || this.checkPath(e)) e.preventDefault();
-    },
-    hasScrollbar: function hasScrollbar(el) {
-      if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
-      var style = window.getComputedStyle(el);
-      return ['auto', 'scroll'].includes(style.overflowY) && el.scrollHeight > el.clientHeight;
-    },
-    shouldScroll: function shouldScroll(el, delta) {
-      if (el.scrollTop === 0 && delta < 0) return true;
-      return el.scrollTop + el.clientHeight === el.scrollHeight && delta > 0;
-    },
-    isInside: function isInside(el, parent) {
-      if (el === parent) {
-        return true;
-      } else if (el === null || el === document.body) {
-        return false;
-      } else {
-        return this.isInside(el.parentNode, parent);
-      }
-    },
-    checkPath: function checkPath(e) {
-      var path = e.path || this.composedPath(e);
-      var delta = e.deltaY;
-
-      if (e.type === 'keydown' && path[0] === document.body) {
-        var dialog = this.$refs.dialog; // getSelection returns null in firefox in some edge cases, can be ignored
-
-        var selected = window.getSelection().anchorNode;
-
-        if (dialog && this.hasScrollbar(dialog) && this.isInside(selected, dialog)) {
-          return this.shouldScroll(dialog, delta);
-        }
-
-        return true;
-      }
-
-      for (var index = 0; index < path.length; index++) {
-        var el = path[index];
-        if (el === document) return true;
-        if (el === document.documentElement) return true;
-        if (el === this.$refs.content) return true;
-        if (this.hasScrollbar(el)) return this.shouldScroll(el, delta);
-      }
-
-      return true;
-    },
-
-    /**
-     * Polyfill for Event.prototype.composedPath
-     */
-    composedPath: function composedPath(e) {
-      if (e.composedPath) return e.composedPath();
-      var path = [];
-      var el = e.target;
-
-      while (el) {
-        path.push(el);
-
-        if (el.tagName === 'HTML') {
-          path.push(document);
-          path.push(window);
-          return path;
-        }
-
-        el = el.parentElement;
-      }
-
-      return path;
-    },
-    hideScroll: function hideScroll() {
-      if (this.$vuetify.breakpoint.smAndDown) {
-        document.documentElement.classList.add('overflow-y-hidden');
-      } else {
-        Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["addPassiveEventListener"])(window, 'wheel', this.scrollListener, {
-          passive: false
-        });
-        window.addEventListener('keydown', this.scrollListener);
-      }
-    },
-    showScroll: function showScroll() {
-      document.documentElement.classList.remove('overflow-y-hidden');
-      window.removeEventListener('wheel', this.scrollListener);
-      window.removeEventListener('keydown', this.scrollListener);
-    }
-  }
-}));
-
-/***/ }),
-
-/***/ "./src/mixins/picker-button/index.ts":
-/*!*******************************************!*\
-  !*** ./src/mixins/picker-button/index.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _colorable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-// Mixins
- // Utilities
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(_colorable__WEBPACK_IMPORTED_MODULE_0__["default"]).extend({
-  methods: {
-    genPickerButton: function genPickerButton(prop, value, content, readonly, staticClass) {
-      var _this = this;
-
-      if (readonly === void 0) {
-        readonly = false;
-      }
-
-      if (staticClass === void 0) {
-        staticClass = '';
-      }
-
-      var active = this[prop] === value;
-
-      var click = function click(event) {
-        event.stopPropagation();
-
-        _this.$emit("update:" + Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["kebabCase"])(prop), value);
-      };
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _components_VOverlay__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../components/VOverlay */ "./src/components/VOverlay/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_2__
+              );
+            // Components
+            // Utilities
+
+            // Types
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend().extend({
+                name: "overlayable",
+                props: {
+                  hideOverlay: Boolean,
+                  overlayColor: String,
+                  overlayOpacity: [Number, String],
+                },
+                data: function data() {
+                  return {
+                    animationFrame: 0,
+                    overlay: null,
+                  };
+                },
+                watch: {
+                  hideOverlay: function hideOverlay(value) {
+                    if (!this.isActive) return;
+                    if (value) this.removeOverlay();
+                    else this.genOverlay();
+                  },
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.removeOverlay();
+                },
+                methods: {
+                  createOverlay: function createOverlay() {
+                    var overlay =
+                      new _components_VOverlay__WEBPACK_IMPORTED_MODULE_0__[
+                        "default"
+                      ]({
+                        propsData: {
+                          absolute: this.absolute,
+                          value: false,
+                          color: this.overlayColor,
+                          opacity: this.overlayOpacity,
+                        },
+                      });
+                    overlay.$mount();
+                    var parent = this.absolute
+                      ? this.$el.parentNode
+                      : document.querySelector("[data-app]");
+                    parent &&
+                      parent.insertBefore(overlay.$el, parent.firstChild);
+                    this.overlay = overlay;
+                  },
+                  genOverlay: function genOverlay() {
+                    var _this = this;
+
+                    this.hideScroll();
+                    if (this.hideOverlay) return;
+                    if (!this.overlay) this.createOverlay();
+                    this.animationFrame = requestAnimationFrame(function () {
+                      if (!_this.overlay) return;
+
+                      if (_this.activeZIndex !== undefined) {
+                        _this.overlay.zIndex = String(_this.activeZIndex - 1);
+                      } else if (_this.$el) {
+                        _this.overlay.zIndex = Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                            "getZIndex"
+                          ]
+                        )(_this.$el);
+                      }
+
+                      _this.overlay.value = true;
+                    });
+                    return true;
+                  },
+
+                  /** removeOverlay(false) will not restore the scollbar afterwards */
+                  removeOverlay: function removeOverlay(showScroll) {
+                    var _this = this;
+
+                    if (showScroll === void 0) {
+                      showScroll = true;
+                    }
+
+                    if (this.overlay) {
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                          "addOnceEventListener"
+                        ]
+                      )(this.overlay.$el, "transitionend", function () {
+                        if (
+                          !_this.overlay ||
+                          !_this.overlay.$el ||
+                          !_this.overlay.$el.parentNode ||
+                          _this.overlay.value
+                        )
+                          return;
+
+                        _this.overlay.$el.parentNode.removeChild(
+                          _this.overlay.$el
+                        );
+
+                        _this.overlay.$destroy();
+
+                        _this.overlay = null;
+                      }); // Cancel animation frame in case
+                      // overlay is removed before it
+                      // has finished its animation
+
+                      cancelAnimationFrame(this.animationFrame);
+                      this.overlay.value = false;
+                    }
+
+                    showScroll && this.showScroll();
+                  },
+                  scrollListener: function scrollListener(e) {
+                    if (e.type === "keydown") {
+                      if (
+                        ["INPUT", "TEXTAREA", "SELECT"].includes(
+                          e.target.tagName
+                        ) || // https://github.com/vuetifyjs/vuetify/issues/4715
+                        e.target.isContentEditable
+                      )
+                        return;
+                      var up = [
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"]
+                          .up,
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"]
+                          .pageup,
+                      ];
+                      var down = [
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"]
+                          .down,
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_1__["keyCodes"]
+                          .pagedown,
+                      ];
+
+                      if (up.includes(e.keyCode)) {
+                        e.deltaY = -1;
+                      } else if (down.includes(e.keyCode)) {
+                        e.deltaY = 1;
+                      } else {
+                        return;
+                      }
+                    }
+
+                    if (
+                      e.target === this.overlay ||
+                      (e.type !== "keydown" && e.target === document.body) ||
+                      this.checkPath(e)
+                    )
+                      e.preventDefault();
+                  },
+                  hasScrollbar: function hasScrollbar(el) {
+                    if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
+                    var style = window.getComputedStyle(el);
+                    return (
+                      ["auto", "scroll"].includes(style.overflowY) &&
+                      el.scrollHeight > el.clientHeight
+                    );
+                  },
+                  shouldScroll: function shouldScroll(el, delta) {
+                    if (el.scrollTop === 0 && delta < 0) return true;
+                    return (
+                      el.scrollTop + el.clientHeight === el.scrollHeight &&
+                      delta > 0
+                    );
+                  },
+                  isInside: function isInside(el, parent) {
+                    if (el === parent) {
+                      return true;
+                    } else if (el === null || el === document.body) {
+                      return false;
+                    } else {
+                      return this.isInside(el.parentNode, parent);
+                    }
+                  },
+                  checkPath: function checkPath(e) {
+                    var path = e.path || this.composedPath(e);
+                    var delta = e.deltaY;
+
+                    if (e.type === "keydown" && path[0] === document.body) {
+                      var dialog = this.$refs.dialog; // getSelection returns null in firefox in some edge cases, can be ignored
+
+                      var selected = window.getSelection().anchorNode;
+
+                      if (
+                        dialog &&
+                        this.hasScrollbar(dialog) &&
+                        this.isInside(selected, dialog)
+                      ) {
+                        return this.shouldScroll(dialog, delta);
+                      }
+
+                      return true;
+                    }
+
+                    for (var index = 0; index < path.length; index++) {
+                      var el = path[index];
+                      if (el === document) return true;
+                      if (el === document.documentElement) return true;
+                      if (el === this.$refs.content) return true;
+                      if (this.hasScrollbar(el))
+                        return this.shouldScroll(el, delta);
+                    }
+
+                    return true;
+                  },
+
+                  /**
+                   * Polyfill for Event.prototype.composedPath
+                   */
+                  composedPath: function composedPath(e) {
+                    if (e.composedPath) return e.composedPath();
+                    var path = [];
+                    var el = e.target;
+
+                    while (el) {
+                      path.push(el);
+
+                      if (el.tagName === "HTML") {
+                        path.push(document);
+                        path.push(window);
+                        return path;
+                      }
+
+                      el = el.parentElement;
+                    }
+
+                    return path;
+                  },
+                  hideScroll: function hideScroll() {
+                    if (this.$vuetify.breakpoint.smAndDown) {
+                      document.documentElement.classList.add(
+                        "overflow-y-hidden"
+                      );
+                    } else {
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                          "addPassiveEventListener"
+                        ]
+                      )(window, "wheel", this.scrollListener, {
+                        passive: false,
+                      });
+                      window.addEventListener("keydown", this.scrollListener);
+                    }
+                  },
+                  showScroll: function showScroll() {
+                    document.documentElement.classList.remove(
+                      "overflow-y-hidden"
+                    );
+                    window.removeEventListener("wheel", this.scrollListener);
+                    window.removeEventListener("keydown", this.scrollListener);
+                  },
+                },
+              });
 
-      return this.$createElement('div', {
-        staticClass: ("v-picker__title__btn " + staticClass).trim(),
-        class: {
-          'v-picker__title__btn--active': active,
-          'v-picker__title__btn--readonly': readonly
-        },
-        on: active || readonly ? undefined : {
-          click: click
-        }
-      }, Array.isArray(content) ? content : [content]);
-    }
-  }
-}));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/mixins/picker-button/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/mixins/picker-button/index.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _colorable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // Mixins
+            // Utilities
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_1__["default"])(
+                _colorable__WEBPACK_IMPORTED_MODULE_0__["default"]
+              ).extend({
+                methods: {
+                  genPickerButton: function genPickerButton(
+                    prop,
+                    value,
+                    content,
+                    readonly,
+                    staticClass
+                  ) {
+                    var _this = this;
+
+                    if (readonly === void 0) {
+                      readonly = false;
+                    }
+
+                    if (staticClass === void 0) {
+                      staticClass = "";
+                    }
+
+                    var active = this[prop] === value;
+
+                    var click = function click(event) {
+                      event.stopPropagation();
+
+                      _this.$emit(
+                        "update:" +
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                              "kebabCase"
+                            ]
+                          )(prop),
+                        value
+                      );
+                    };
+
+                    return this.$createElement(
+                      "div",
+                      {
+                        staticClass: (
+                          "v-picker__title__btn " + staticClass
+                        ).trim(),
+                        class: {
+                          "v-picker__title__btn--active": active,
+                          "v-picker__title__btn--readonly": readonly,
+                        },
+                        on:
+                          active || readonly
+                            ? undefined
+                            : {
+                                click: click,
+                              },
+                      },
+                      Array.isArray(content) ? content : [content]
+                    );
+                  },
+                },
+              });
+
+            /***/
+          },
 
-/***/ "./src/mixins/picker/index.ts":
-/*!************************************!*\
+        /***/ "./src/mixins/picker/index.ts":
+          /*!************************************!*\
   !*** ./src/mixins/picker/index.ts ***!
   \************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _components_VPicker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/VPicker */ "./src/components/VPicker/index.ts");
-/* harmony import */ var _colorable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts");
-/* harmony import */ var _themeable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Components
- // Mixins
-
-
-
- // Utils
-
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(_colorable__WEBPACK_IMPORTED_MODULE_1__["default"], _mixins_elevatable__WEBPACK_IMPORTED_MODULE_2__["default"], _themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
-/* @vue/component */
-).extend({
-  name: 'picker',
-  props: {
-    flat: Boolean,
-    fullWidth: Boolean,
-    headerColor: String,
-    landscape: Boolean,
-    noTitle: Boolean,
-    width: {
-      type: [Number, String],
-      default: 290
-    }
-  },
-  methods: {
-    genPickerTitle: function genPickerTitle() {
-      return null;
-    },
-    genPickerBody: function genPickerBody() {
-      return null;
-    },
-    genPickerActionsSlot: function genPickerActionsSlot() {
-      return this.$scopedSlots.default ? this.$scopedSlots.default({
-        save: this.save,
-        cancel: this.cancel
-      }) : this.$slots.default;
-    },
-    genPicker: function genPicker(staticClass) {
-      var children = [];
-
-      if (!this.noTitle) {
-        var title = this.genPickerTitle();
-        title && children.push(title);
-      }
-
-      var body = this.genPickerBody();
-      body && children.push(body);
-      children.push(this.$createElement('template', {
-        slot: 'actions'
-      }, [this.genPickerActionsSlot()]));
-      return this.$createElement(_components_VPicker__WEBPACK_IMPORTED_MODULE_0__["default"], {
-        staticClass: staticClass,
-        props: {
-          color: this.headerColor || this.color,
-          dark: this.dark,
-          elevation: this.elevation,
-          flat: this.flat,
-          fullWidth: this.fullWidth,
-          landscape: this.landscape,
-          light: this.light,
-          width: this.width,
-          noTitle: this.noTitle
-        }
-      }, children);
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _components_VPicker__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../components/VPicker */ "./src/components/VPicker/index.ts"
+              );
+            /* harmony import */ var _colorable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _mixins_elevatable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../mixins/elevatable */ "./src/mixins/elevatable/index.ts"
+              );
+            /* harmony import */ var _themeable__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Components
+            // Mixins
+
+            // Utils
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_4__["default"])(
+                _colorable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _mixins_elevatable__WEBPACK_IMPORTED_MODULE_2__["default"],
+                _themeable__WEBPACK_IMPORTED_MODULE_3__["default"]
+                /* @vue/component */
+              ).extend({
+                name: "picker",
+                props: {
+                  flat: Boolean,
+                  fullWidth: Boolean,
+                  headerColor: String,
+                  landscape: Boolean,
+                  noTitle: Boolean,
+                  width: {
+                    type: [Number, String],
+                    default: 290,
+                  },
+                },
+                methods: {
+                  genPickerTitle: function genPickerTitle() {
+                    return null;
+                  },
+                  genPickerBody: function genPickerBody() {
+                    return null;
+                  },
+                  genPickerActionsSlot: function genPickerActionsSlot() {
+                    return this.$scopedSlots.default
+                      ? this.$scopedSlots.default({
+                          save: this.save,
+                          cancel: this.cancel,
+                        })
+                      : this.$slots.default;
+                  },
+                  genPicker: function genPicker(staticClass) {
+                    var children = [];
+
+                    if (!this.noTitle) {
+                      var title = this.genPickerTitle();
+                      title && children.push(title);
+                    }
+
+                    var body = this.genPickerBody();
+                    body && children.push(body);
+                    children.push(
+                      this.$createElement(
+                        "template",
+                        {
+                          slot: "actions",
+                        },
+                        [this.genPickerActionsSlot()]
+                      )
+                    );
+                    return this.$createElement(
+                      _components_VPicker__WEBPACK_IMPORTED_MODULE_0__[
+                        "default"
+                      ],
+                      {
+                        staticClass: staticClass,
+                        props: {
+                          color: this.headerColor || this.color,
+                          dark: this.dark,
+                          elevation: this.elevation,
+                          flat: this.flat,
+                          fullWidth: this.fullWidth,
+                          landscape: this.landscape,
+                          light: this.light,
+                          width: this.width,
+                          noTitle: this.noTitle,
+                        },
+                      },
+                      children
+                    );
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/positionable/index.ts":
-/*!******************************************!*\
+        /***/ "./src/mixins/positionable/index.ts":
+          /*!******************************************!*\
   !*** ./src/mixins/positionable/index.ts ***!
   \******************************************/
-/*! exports provided: factory, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "factory", function() { return factory; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-
-
-var availableProps = {
-  absolute: Boolean,
-  bottom: Boolean,
-  fixed: Boolean,
-  left: Boolean,
-  right: Boolean,
-  top: Boolean
-};
-function factory(selected) {
-  if (selected === void 0) {
-    selected = [];
-  }
+          /*! exports provided: factory, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "factory",
+              function () {
+                return factory;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+
+            var availableProps = {
+              absolute: Boolean,
+              bottom: Boolean,
+              fixed: Boolean,
+              left: Boolean,
+              right: Boolean,
+              top: Boolean,
+            };
+            function factory(selected) {
+              if (selected === void 0) {
+                selected = [];
+              }
 
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    name: 'positionable',
-    props: selected.length ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["filterObjectOnKeys"])(availableProps, selected) : availableProps
-  });
-}
-/* harmony default export */ __webpack_exports__["default"] = (factory()); // Add a `*` before the second `/`
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "positionable",
+                props: selected.length
+                  ? Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                        "filterObjectOnKeys"
+                      ]
+                    )(availableProps, selected)
+                  : availableProps,
+              });
+            }
+            /* harmony default export */ __webpack_exports__["default"] =
+              factory(); // Add a `*` before the second `/`
 
-/* Tests /
+            /* Tests /
 let single = factory(['top']).extend({
   created () {
     this.top
@@ -38732,5267 +55941,7181 @@ let all = factory().extend({
 })
 /**/
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/proxyable/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/proxyable/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/proxyable/index.ts ***!
   \***************************************/
-/*! exports provided: factory, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "factory", function() { return factory; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-function factory(prop, event) {
-  var _a, _b;
-
-  if (prop === void 0) {
-    prop = 'value';
-  }
+          /*! exports provided: factory, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "factory",
+              function () {
+                return factory;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            function factory(prop, event) {
+              var _a, _b;
+
+              if (prop === void 0) {
+                prop = "value";
+              }
 
-  if (event === void 0) {
-    event = 'change';
-  }
+              if (event === void 0) {
+                event = "change";
+              }
 
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    name: 'proxyable',
-    model: {
-      prop: prop,
-      event: event
-    },
-    props: (_a = {}, _a[prop] = {
-      required: false
-    }, _a),
-    data: function data() {
-      return {
-        internalLazyValue: this[prop]
-      };
-    },
-    computed: {
-      internalValue: {
-        get: function get() {
-          return this.internalLazyValue;
-        },
-        set: function set(val) {
-          if (val === this.internalLazyValue) return;
-          this.internalLazyValue = val;
-          this.$emit(event, val);
-        }
-      }
-    },
-    watch: (_b = {}, _b[prop] = function (val) {
-      this.internalLazyValue = val;
-    }, _b)
-  });
-}
-/* eslint-disable-next-line @typescript-eslint/no-redeclare */
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "proxyable",
+                model: {
+                  prop: prop,
+                  event: event,
+                },
+                props:
+                  ((_a = {}),
+                  (_a[prop] = {
+                    required: false,
+                  }),
+                  _a),
+                data: function data() {
+                  return {
+                    internalLazyValue: this[prop],
+                  };
+                },
+                computed: {
+                  internalValue: {
+                    get: function get() {
+                      return this.internalLazyValue;
+                    },
+                    set: function set(val) {
+                      if (val === this.internalLazyValue) return;
+                      this.internalLazyValue = val;
+                      this.$emit(event, val);
+                    },
+                  },
+                },
+                watch:
+                  ((_b = {}),
+                  (_b[prop] = function (val) {
+                    this.internalLazyValue = val;
+                  }),
+                  _b),
+              });
+            }
+            /* eslint-disable-next-line @typescript-eslint/no-redeclare */
 
-var Proxyable = factory();
-/* harmony default export */ __webpack_exports__["default"] = (Proxyable);
+            var Proxyable = factory();
+            /* harmony default export */ __webpack_exports__["default"] =
+              Proxyable;
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/registrable/index.ts":
-/*!*****************************************!*\
+        /***/ "./src/mixins/registrable/index.ts":
+          /*!*****************************************!*\
   !*** ./src/mixins/registrable/index.ts ***!
   \*****************************************/
-/*! exports provided: inject, provide */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inject", function() { return inject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "provide", function() { return provide; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-
-
-
-function generateWarning(child, parent) {
-  return function () {
-    return Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleWarn"])("The " + child + " component must be used inside a " + parent);
-  };
-}
-
-function inject(namespace, child, parent) {
-  var _a;
-
-  var defaultImpl = child && parent ? {
-    register: generateWarning(child, parent),
-    unregister: generateWarning(child, parent)
-  } : null;
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    name: 'registrable-inject',
-    inject: (_a = {}, _a[namespace] = {
-      default: defaultImpl
-    }, _a)
-  });
-}
-function provide(namespace, self) {
-  if (self === void 0) {
-    self = false;
-  }
+          /*! exports provided: inject, provide */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "inject",
+              function () {
+                return inject;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "provide",
+              function () {
+                return provide;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+
+            function generateWarning(child, parent) {
+              return function () {
+                return Object(
+                  _util_console__WEBPACK_IMPORTED_MODULE_1__["consoleWarn"]
+                )(
+                  "The " + child + " component must be used inside a " + parent
+                );
+              };
+            }
+
+            function inject(namespace, child, parent) {
+              var _a;
 
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    name: 'registrable-provide',
-    provide: function provide() {
-      var _a;
+              var defaultImpl =
+                child && parent
+                  ? {
+                      register: generateWarning(child, parent),
+                      unregister: generateWarning(child, parent),
+                    }
+                  : null;
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "registrable-inject",
+                inject:
+                  ((_a = {}),
+                  (_a[namespace] = {
+                    default: defaultImpl,
+                  }),
+                  _a),
+              });
+            }
+            function provide(namespace, self) {
+              if (self === void 0) {
+                self = false;
+              }
 
-      return _a = {}, _a[namespace] = self ? this : {
-        register: this.register,
-        unregister: this.unregister
-      }, _a;
-    }
-  });
-}
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "registrable-provide",
+                provide: function provide() {
+                  var _a;
+
+                  return (
+                    (_a = {}),
+                    (_a[namespace] = self
+                      ? this
+                      : {
+                          register: this.register,
+                          unregister: this.unregister,
+                        }),
+                    _a
+                  );
+                },
+              });
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/returnable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/returnable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/returnable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'returnable',
-  props: {
-    returnValue: null
-  },
-  data: function data() {
-    return {
-      isActive: false,
-      originalValue: null
-    };
-  },
-  watch: {
-    isActive: function isActive(val) {
-      if (val) {
-        this.originalValue = this.returnValue;
-      } else {
-        this.$emit('update:return-value', this.originalValue);
-      }
-    }
-  },
-  methods: {
-    save: function save(value) {
-      var _this = this;
-
-      this.originalValue = value;
-      setTimeout(function () {
-        _this.isActive = false;
-      });
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "returnable",
+                props: {
+                  returnValue: null,
+                },
+                data: function data() {
+                  return {
+                    isActive: false,
+                    originalValue: null,
+                  };
+                },
+                watch: {
+                  isActive: function isActive(val) {
+                    if (val) {
+                      this.originalValue = this.returnValue;
+                    } else {
+                      this.$emit("update:return-value", this.originalValue);
+                    }
+                  },
+                },
+                methods: {
+                  save: function save(value) {
+                    var _this = this;
+
+                    this.originalValue = value;
+                    setTimeout(function () {
+                      _this.isActive = false;
+                    });
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/rippleable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/rippleable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/rippleable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_1__);
-// Directives
- // Types
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
-  name: 'rippleable',
-  directives: {
-    ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_0__["default"]
-  },
-  props: {
-    ripple: {
-      type: [Boolean, Object],
-      default: true
-    }
-  },
-  methods: {
-    genRipple: function genRipple(data) {
-      if (data === void 0) {
-        data = {};
-      }
-
-      if (!this.ripple) return null;
-      data.staticClass = 'v-input--selection-controls__ripple';
-      data.directives = data.directives || [];
-      data.directives.push({
-        name: 'ripple',
-        value: {
-          center: true
-        }
-      });
-      return this.$createElement('div', data);
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_1__
+              );
+            // Directives
+            // Types
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_1___default.a.extend({
+                name: "rippleable",
+                directives: {
+                  ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_0__["default"],
+                },
+                props: {
+                  ripple: {
+                    type: [Boolean, Object],
+                    default: true,
+                  },
+                },
+                methods: {
+                  genRipple: function genRipple(data) {
+                    if (data === void 0) {
+                      data = {};
+                    }
+
+                    if (!this.ripple) return null;
+                    data.staticClass = "v-input--selection-controls__ripple";
+                    data.directives = data.directives || [];
+                    data.directives.push({
+                      name: "ripple",
+                      value: {
+                        center: true,
+                      },
+                    });
+                    return this.$createElement("div", data);
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/roundable/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/roundable/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/roundable/index.ts ***!
   \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-};
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'roundable',
-  props: {
-    rounded: [Boolean, String],
-    tile: Boolean
-  },
-  computed: {
-    roundedClasses: function roundedClasses() {
-      var e_1, _a, _b;
-
-      var composite = [];
-      var rounded = typeof this.rounded === 'string' ? String(this.rounded) : this.rounded === true;
-
-      if (this.tile) {
-        composite.push('rounded-0');
-      } else if (typeof rounded === 'string') {
-        var values = rounded.split(' ');
-
-        try {
-          for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {
-            var value = values_1_1.value;
-            composite.push("rounded-" + value);
-          }
-        } catch (e_1_1) {
-          e_1 = {
-            error: e_1_1
-          };
-        } finally {
-          try {
-            if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
-          } finally {
-            if (e_1) throw e_1.error;
-          }
-        }
-      } else if (rounded) {
-        composite.push('rounded');
-      }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              };
 
-      return composite.length > 0 ? (_b = {}, _b[composite.join(' ')] = true, _b) : {};
-    }
-  }
-}));
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "roundable",
+                props: {
+                  rounded: [Boolean, String],
+                  tile: Boolean,
+                },
+                computed: {
+                  roundedClasses: function roundedClasses() {
+                    var e_1, _a, _b;
+
+                    var composite = [];
+                    var rounded =
+                      typeof this.rounded === "string"
+                        ? String(this.rounded)
+                        : this.rounded === true;
+
+                    if (this.tile) {
+                      composite.push("rounded-0");
+                    } else if (typeof rounded === "string") {
+                      var values = rounded.split(" ");
+
+                      try {
+                        for (
+                          var values_1 = __values(values),
+                            values_1_1 = values_1.next();
+                          !values_1_1.done;
+                          values_1_1 = values_1.next()
+                        ) {
+                          var value = values_1_1.value;
+                          composite.push("rounded-" + value);
+                        }
+                      } catch (e_1_1) {
+                        e_1 = {
+                          error: e_1_1,
+                        };
+                      } finally {
+                        try {
+                          if (
+                            values_1_1 &&
+                            !values_1_1.done &&
+                            (_a = values_1.return)
+                          )
+                            _a.call(values_1);
+                        } finally {
+                          if (e_1) throw e_1.error;
+                        }
+                      }
+                    } else if (rounded) {
+                      composite.push("rounded");
+                    }
+
+                    return composite.length > 0
+                      ? ((_b = {}), (_b[composite.join(" ")] = true), _b)
+                      : {};
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/routable/index.ts":
-/*!**************************************!*\
+        /***/ "./src/mixins/routable/index.ts":
+          /*!**************************************!*\
   !*** ./src/mixins/routable/index.ts ***!
   \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../directives/ripple */ "./src/directives/ripple/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
- // Directives
-
- // Utilities
-
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'routable',
-  directives: {
-    Ripple: _directives_ripple__WEBPACK_IMPORTED_MODULE_1__["default"]
-  },
-  props: {
-    activeClass: String,
-    append: Boolean,
-    disabled: Boolean,
-    exact: {
-      type: Boolean,
-      default: undefined
-    },
-    exactActiveClass: String,
-    link: Boolean,
-    href: [String, Object],
-    to: [String, Object],
-    nuxt: Boolean,
-    replace: Boolean,
-    ripple: {
-      type: [Boolean, Object],
-      default: null
-    },
-    tag: String,
-    target: String
-  },
-  data: function data() {
-    return {
-      isActive: false,
-      proxyClass: ''
-    };
-  },
-  computed: {
-    classes: function classes() {
-      var classes = {};
-      if (this.to) return classes;
-      if (this.activeClass) classes[this.activeClass] = this.isActive;
-      if (this.proxyClass) classes[this.proxyClass] = this.isActive;
-      return classes;
-    },
-    computedRipple: function computedRipple() {
-      var _a;
-
-      return (_a = this.ripple) !== null && _a !== void 0 ? _a : !this.disabled && this.isClickable;
-    },
-    isClickable: function isClickable() {
-      if (this.disabled) return false;
-      return Boolean(this.isLink || this.$listeners.click || this.$listeners['!click'] || this.$attrs.tabindex);
-    },
-    isLink: function isLink() {
-      return this.to || this.href || this.link;
-    },
-    styles: function styles() {
-      return {};
-    }
-  },
-  watch: {
-    $route: 'onRouteChange'
-  },
-  methods: {
-    click: function click(e) {
-      this.$emit('click', e);
-    },
-    generateRouteLink: function generateRouteLink() {
-      var _a;
-
-      var exact = this.exact;
-      var tag;
-      var data = (_a = {
-        attrs: {
-          tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined
-        },
-        class: this.classes,
-        style: this.styles,
-        props: {},
-        directives: [{
-          name: 'ripple',
-          value: this.computedRipple
-        }]
-      }, _a[this.to ? 'nativeOn' : 'on'] = __assign(__assign({}, this.$listeners), {
-        click: this.click
-      }), _a.ref = 'link', _a);
-
-      if (typeof this.exact === 'undefined') {
-        exact = this.to === '/' || this.to === Object(this.to) && this.to.path === '/';
-      }
-
-      if (this.to) {
-        // Add a special activeClass hook
-        // for component level styles
-        var activeClass = this.activeClass;
-        var exactActiveClass = this.exactActiveClass || activeClass;
-
-        if (this.proxyClass) {
-          activeClass = (activeClass + " " + this.proxyClass).trim();
-          exactActiveClass = (exactActiveClass + " " + this.proxyClass).trim();
-        }
-
-        tag = this.nuxt ? 'nuxt-link' : 'router-link';
-        Object.assign(data.props, {
-          to: this.to,
-          exact: exact,
-          activeClass: activeClass,
-          exactActiveClass: exactActiveClass,
-          append: this.append,
-          replace: this.replace
-        });
-      } else {
-        tag = this.href && 'a' || this.tag || 'div';
-        if (tag === 'a' && this.href) data.attrs.href = this.href;
-      }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _directives_ripple__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../directives/ripple */ "./src/directives/ripple/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      if (this.target) data.attrs.target = this.target;
-      return {
-        tag: tag,
-        data: data
-      };
-    },
-    onRouteChange: function onRouteChange() {
-      var _this = this;
-
-      if (!this.to || !this.$refs.link || !this.$route) return;
-      var activeClass = (this.activeClass + " " + (this.proxyClass || '')).trim();
-      var path = "_vnode.data.class." + activeClass;
-      this.$nextTick(function () {
-        /* istanbul ignore else */
-        if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["getObjectValueByPath"])(_this.$refs.link, path)) {
-          _this.toggle();
-        }
-      });
-    },
-    toggle: function toggle() {}
-  }
-}));
+            // Directives
+
+            // Utilities
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "routable",
+                directives: {
+                  Ripple:
+                    _directives_ripple__WEBPACK_IMPORTED_MODULE_1__["default"],
+                },
+                props: {
+                  activeClass: String,
+                  append: Boolean,
+                  disabled: Boolean,
+                  exact: {
+                    type: Boolean,
+                    default: undefined,
+                  },
+                  exactActiveClass: String,
+                  link: Boolean,
+                  href: [String, Object],
+                  to: [String, Object],
+                  nuxt: Boolean,
+                  replace: Boolean,
+                  ripple: {
+                    type: [Boolean, Object],
+                    default: null,
+                  },
+                  tag: String,
+                  target: String,
+                },
+                data: function data() {
+                  return {
+                    isActive: false,
+                    proxyClass: "",
+                  };
+                },
+                computed: {
+                  classes: function classes() {
+                    var classes = {};
+                    if (this.to) return classes;
+                    if (this.activeClass)
+                      classes[this.activeClass] = this.isActive;
+                    if (this.proxyClass)
+                      classes[this.proxyClass] = this.isActive;
+                    return classes;
+                  },
+                  computedRipple: function computedRipple() {
+                    var _a;
+
+                    return (_a = this.ripple) !== null && _a !== void 0
+                      ? _a
+                      : !this.disabled && this.isClickable;
+                  },
+                  isClickable: function isClickable() {
+                    if (this.disabled) return false;
+                    return Boolean(
+                      this.isLink ||
+                        this.$listeners.click ||
+                        this.$listeners["!click"] ||
+                        this.$attrs.tabindex
+                    );
+                  },
+                  isLink: function isLink() {
+                    return this.to || this.href || this.link;
+                  },
+                  styles: function styles() {
+                    return {};
+                  },
+                },
+                watch: {
+                  $route: "onRouteChange",
+                },
+                methods: {
+                  click: function click(e) {
+                    this.$emit("click", e);
+                  },
+                  generateRouteLink: function generateRouteLink() {
+                    var _a;
+
+                    var exact = this.exact;
+                    var tag;
+                    var data =
+                      ((_a = {
+                        attrs: {
+                          tabindex:
+                            "tabindex" in this.$attrs
+                              ? this.$attrs.tabindex
+                              : undefined,
+                        },
+                        class: this.classes,
+                        style: this.styles,
+                        props: {},
+                        directives: [
+                          {
+                            name: "ripple",
+                            value: this.computedRipple,
+                          },
+                        ],
+                      }),
+                      (_a[this.to ? "nativeOn" : "on"] = __assign(
+                        __assign({}, this.$listeners),
+                        {
+                          click: this.click,
+                        }
+                      )),
+                      (_a.ref = "link"),
+                      _a);
+
+                    if (typeof this.exact === "undefined") {
+                      exact =
+                        this.to === "/" ||
+                        (this.to === Object(this.to) && this.to.path === "/");
+                    }
+
+                    if (this.to) {
+                      // Add a special activeClass hook
+                      // for component level styles
+                      var activeClass = this.activeClass;
+                      var exactActiveClass =
+                        this.exactActiveClass || activeClass;
+
+                      if (this.proxyClass) {
+                        activeClass = (
+                          activeClass +
+                          " " +
+                          this.proxyClass
+                        ).trim();
+                        exactActiveClass = (
+                          exactActiveClass +
+                          " " +
+                          this.proxyClass
+                        ).trim();
+                      }
+
+                      tag = this.nuxt ? "nuxt-link" : "router-link";
+                      Object.assign(data.props, {
+                        to: this.to,
+                        exact: exact,
+                        activeClass: activeClass,
+                        exactActiveClass: exactActiveClass,
+                        append: this.append,
+                        replace: this.replace,
+                      });
+                    } else {
+                      tag = (this.href && "a") || this.tag || "div";
+                      if (tag === "a" && this.href) data.attrs.href = this.href;
+                    }
+
+                    if (this.target) data.attrs.target = this.target;
+                    return {
+                      tag: tag,
+                      data: data,
+                    };
+                  },
+                  onRouteChange: function onRouteChange() {
+                    var _this = this;
+
+                    if (!this.to || !this.$refs.link || !this.$route) return;
+                    var activeClass = (
+                      this.activeClass +
+                      " " +
+                      (this.proxyClass || "")
+                    ).trim();
+                    var path = "_vnode.data.class." + activeClass;
+                    this.$nextTick(function () {
+                      /* istanbul ignore else */
+                      if (
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                            "getObjectValueByPath"
+                          ]
+                        )(_this.$refs.link, path)
+                      ) {
+                        _this.toggle();
+                      }
+                    });
+                  },
+                  toggle: function toggle() {},
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/scrollable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/scrollable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/scrollable/index.ts ***!
   \****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _directives__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../directives */ "./src/directives/index.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_2__);
-// Directives
- // Utilities
-
- // Types
-
-
-/**
- * Scrollable
- *
- * Used for monitoring scrolling and
- * invoking functions based upon
- * scrolling thresholds being
- * met.
- */
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
-  name: 'scrollable',
-  directives: {
-    Scroll: _directives__WEBPACK_IMPORTED_MODULE_0__["Scroll"]
-  },
-  props: {
-    scrollTarget: String,
-    scrollThreshold: [String, Number]
-  },
-  data: function data() {
-    return {
-      currentScroll: 0,
-      currentThreshold: 0,
-      isActive: false,
-      isScrollingUp: false,
-      previousScroll: 0,
-      savedScroll: 0,
-      target: null
-    };
-  },
-  computed: {
-    /**
-     * A computed property that returns
-     * whether scrolling features are
-     * enabled or disabled
-     */
-    canScroll: function canScroll() {
-      return typeof window !== 'undefined';
-    },
-
-    /**
-     * The threshold that must be met before
-     * thresholdMet function is invoked
-     */
-    computedScrollThreshold: function computedScrollThreshold() {
-      return this.scrollThreshold ? Number(this.scrollThreshold) : 300;
-    }
-  },
-  watch: {
-    isScrollingUp: function isScrollingUp() {
-      this.savedScroll = this.savedScroll || this.currentScroll;
-    },
-    isActive: function isActive() {
-      this.savedScroll = 0;
-    }
-  },
-  mounted: function mounted() {
-    if (this.scrollTarget) {
-      this.target = document.querySelector(this.scrollTarget);
-
-      if (!this.target) {
-        Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleWarn"])("Unable to locate element with identifier " + this.scrollTarget, this);
-      }
-    }
-  },
-  methods: {
-    onScroll: function onScroll() {
-      var _this = this;
-
-      if (!this.canScroll) return;
-      this.previousScroll = this.currentScroll;
-      this.currentScroll = this.target ? this.target.scrollTop : window.pageYOffset;
-      this.isScrollingUp = this.currentScroll < this.previousScroll;
-      this.currentThreshold = Math.abs(this.currentScroll - this.computedScrollThreshold);
-      this.$nextTick(function () {
-        if (Math.abs(_this.currentScroll - _this.savedScroll) > _this.computedScrollThreshold) _this.thresholdMet();
-      });
-    },
-
-    /**
-     * The method invoked when
-     * scrolling in any direction
-     * has exceeded the threshold
-     */
-    thresholdMet: function thresholdMet() {}
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _directives__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../directives */ "./src/directives/index.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_2___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_2__
+              );
+            // Directives
+            // Utilities
+
+            // Types
+
+            /**
+             * Scrollable
+             *
+             * Used for monitoring scrolling and
+             * invoking functions based upon
+             * scrolling thresholds being
+             * met.
+             */
+
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_2___default.a.extend({
+                name: "scrollable",
+                directives: {
+                  Scroll: _directives__WEBPACK_IMPORTED_MODULE_0__["Scroll"],
+                },
+                props: {
+                  scrollTarget: String,
+                  scrollThreshold: [String, Number],
+                },
+                data: function data() {
+                  return {
+                    currentScroll: 0,
+                    currentThreshold: 0,
+                    isActive: false,
+                    isScrollingUp: false,
+                    previousScroll: 0,
+                    savedScroll: 0,
+                    target: null,
+                  };
+                },
+                computed: {
+                  /**
+                   * A computed property that returns
+                   * whether scrolling features are
+                   * enabled or disabled
+                   */
+                  canScroll: function canScroll() {
+                    return typeof window !== "undefined";
+                  },
+
+                  /**
+                   * The threshold that must be met before
+                   * thresholdMet function is invoked
+                   */
+                  computedScrollThreshold: function computedScrollThreshold() {
+                    return this.scrollThreshold
+                      ? Number(this.scrollThreshold)
+                      : 300;
+                  },
+                },
+                watch: {
+                  isScrollingUp: function isScrollingUp() {
+                    this.savedScroll = this.savedScroll || this.currentScroll;
+                  },
+                  isActive: function isActive() {
+                    this.savedScroll = 0;
+                  },
+                },
+                mounted: function mounted() {
+                  if (this.scrollTarget) {
+                    this.target = document.querySelector(this.scrollTarget);
+
+                    if (!this.target) {
+                      Object(
+                        _util_console__WEBPACK_IMPORTED_MODULE_1__[
+                          "consoleWarn"
+                        ]
+                      )(
+                        "Unable to locate element with identifier " +
+                          this.scrollTarget,
+                        this
+                      );
+                    }
+                  }
+                },
+                methods: {
+                  onScroll: function onScroll() {
+                    var _this = this;
+
+                    if (!this.canScroll) return;
+                    this.previousScroll = this.currentScroll;
+                    this.currentScroll = this.target
+                      ? this.target.scrollTop
+                      : window.pageYOffset;
+                    this.isScrollingUp =
+                      this.currentScroll < this.previousScroll;
+                    this.currentThreshold = Math.abs(
+                      this.currentScroll - this.computedScrollThreshold
+                    );
+                    this.$nextTick(function () {
+                      if (
+                        Math.abs(_this.currentScroll - _this.savedScroll) >
+                        _this.computedScrollThreshold
+                      )
+                        _this.thresholdMet();
+                    });
+                  },
+
+                  /**
+                   * The method invoked when
+                   * scrolling in any direction
+                   * has exceeded the threshold
+                   */
+                  thresholdMet: function thresholdMet() {},
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/selectable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/selectable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/selectable/index.ts ***!
   \****************************************/
-/*! exports provided: prevent, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prevent", function() { return prevent; });
-/* harmony import */ var _components_VInput__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../components/VInput */ "./src/components/VInput/index.ts");
-/* harmony import */ var _rippleable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../rippleable */ "./src/mixins/rippleable/index.ts");
-/* harmony import */ var _comparable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../comparable */ "./src/mixins/comparable/index.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-// Components
- // Mixins
-
-
- // Utilities
-
-
-function prevent(e) {
-  e.preventDefault();
-}
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(_components_VInput__WEBPACK_IMPORTED_MODULE_0__["default"], _rippleable__WEBPACK_IMPORTED_MODULE_1__["default"], _comparable__WEBPACK_IMPORTED_MODULE_2__["default"]).extend({
-  name: 'selectable',
-  model: {
-    prop: 'inputValue',
-    event: 'change'
-  },
-  props: {
-    id: String,
-    inputValue: null,
-    falseValue: null,
-    trueValue: null,
-    multiple: {
-      type: Boolean,
-      default: null
-    },
-    label: String
-  },
-  data: function data() {
-    return {
-      hasColor: this.inputValue,
-      lazyValue: this.inputValue
-    };
-  },
-  computed: {
-    computedColor: function computedColor() {
-      if (!this.isActive) return undefined;
-      if (this.color) return this.color;
-      if (this.isDark && !this.appIsDark) return 'white';
-      return 'primary';
-    },
-    isMultiple: function isMultiple() {
-      return this.multiple === true || this.multiple === null && Array.isArray(this.internalValue);
-    },
-    isActive: function isActive() {
-      var _this = this;
-
-      var value = this.value;
-      var input = this.internalValue;
-
-      if (this.isMultiple) {
-        if (!Array.isArray(input)) return false;
-        return input.some(function (item) {
-          return _this.valueComparator(item, value);
-        });
-      }
-
-      if (this.trueValue === undefined || this.falseValue === undefined) {
-        return value ? this.valueComparator(value, input) : Boolean(input);
-      }
-
-      return this.valueComparator(input, this.trueValue);
-    },
-    isDirty: function isDirty() {
-      return this.isActive;
-    },
-    rippleState: function rippleState() {
-      return !this.isDisabled && !this.validationState ? undefined : this.validationState;
-    }
-  },
-  watch: {
-    inputValue: function inputValue(val) {
-      this.lazyValue = val;
-      this.hasColor = val;
-    }
-  },
-  methods: {
-    genLabel: function genLabel() {
-      var label = _components_VInput__WEBPACK_IMPORTED_MODULE_0__["default"].options.methods.genLabel.call(this);
-      if (!label) return label;
-      label.data.on = {
-        // Label shouldn't cause the input to focus
-        click: prevent
-      };
-      return label;
-    },
-    genInput: function genInput(type, attrs) {
-      return this.$createElement('input', {
-        attrs: Object.assign({
-          'aria-checked': this.isActive.toString(),
-          disabled: this.isDisabled,
-          id: this.computedId,
-          role: type,
-          type: type
-        }, attrs),
-        domProps: {
-          value: this.value,
-          checked: this.isActive
-        },
-        on: {
-          blur: this.onBlur,
-          change: this.onChange,
-          focus: this.onFocus,
-          keydown: this.onKeydown,
-          click: prevent
-        },
-        ref: 'input'
-      });
-    },
-    onBlur: function onBlur() {
-      this.isFocused = false;
-    },
-    onClick: function onClick(e) {
-      this.onChange();
-      this.$emit('click', e);
-    },
-    onChange: function onChange() {
-      var _this = this;
-
-      if (!this.isInteractive) return;
-      var value = this.value;
-      var input = this.internalValue;
-
-      if (this.isMultiple) {
-        if (!Array.isArray(input)) {
-          input = [];
-        }
-
-        var length = input.length;
-        input = input.filter(function (item) {
-          return !_this.valueComparator(item, value);
-        });
-
-        if (input.length === length) {
-          input.push(value);
-        }
-      } else if (this.trueValue !== undefined && this.falseValue !== undefined) {
-        input = this.valueComparator(input, this.trueValue) ? this.falseValue : this.trueValue;
-      } else if (value) {
-        input = this.valueComparator(input, value) ? null : value;
-      } else {
-        input = !input;
-      }
-
-      this.validate(true, input);
-      this.internalValue = input;
-      this.hasColor = input;
-    },
-    onFocus: function onFocus() {
-      this.isFocused = true;
-    },
-
-    /** @abstract */
-    onKeydown: function onKeydown(e) {}
-  }
-}));
+          /*! exports provided: prevent, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "prevent",
+              function () {
+                return prevent;
+              }
+            );
+            /* harmony import */ var _components_VInput__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../components/VInput */ "./src/components/VInput/index.ts"
+              );
+            /* harmony import */ var _rippleable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../rippleable */ "./src/mixins/rippleable/index.ts"
+              );
+            /* harmony import */ var _comparable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../comparable */ "./src/mixins/comparable/index.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            // Components
+            // Mixins
+
+            // Utilities
+
+            function prevent(e) {
+              e.preventDefault();
+            }
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object(_util_mixins__WEBPACK_IMPORTED_MODULE_3__["default"])(
+                _components_VInput__WEBPACK_IMPORTED_MODULE_0__["default"],
+                _rippleable__WEBPACK_IMPORTED_MODULE_1__["default"],
+                _comparable__WEBPACK_IMPORTED_MODULE_2__["default"]
+              ).extend({
+                name: "selectable",
+                model: {
+                  prop: "inputValue",
+                  event: "change",
+                },
+                props: {
+                  id: String,
+                  inputValue: null,
+                  falseValue: null,
+                  trueValue: null,
+                  multiple: {
+                    type: Boolean,
+                    default: null,
+                  },
+                  label: String,
+                },
+                data: function data() {
+                  return {
+                    hasColor: this.inputValue,
+                    lazyValue: this.inputValue,
+                  };
+                },
+                computed: {
+                  computedColor: function computedColor() {
+                    if (!this.isActive) return undefined;
+                    if (this.color) return this.color;
+                    if (this.isDark && !this.appIsDark) return "white";
+                    return "primary";
+                  },
+                  isMultiple: function isMultiple() {
+                    return (
+                      this.multiple === true ||
+                      (this.multiple === null &&
+                        Array.isArray(this.internalValue))
+                    );
+                  },
+                  isActive: function isActive() {
+                    var _this = this;
+
+                    var value = this.value;
+                    var input = this.internalValue;
+
+                    if (this.isMultiple) {
+                      if (!Array.isArray(input)) return false;
+                      return input.some(function (item) {
+                        return _this.valueComparator(item, value);
+                      });
+                    }
+
+                    if (
+                      this.trueValue === undefined ||
+                      this.falseValue === undefined
+                    ) {
+                      return value
+                        ? this.valueComparator(value, input)
+                        : Boolean(input);
+                    }
+
+                    return this.valueComparator(input, this.trueValue);
+                  },
+                  isDirty: function isDirty() {
+                    return this.isActive;
+                  },
+                  rippleState: function rippleState() {
+                    return !this.isDisabled && !this.validationState
+                      ? undefined
+                      : this.validationState;
+                  },
+                },
+                watch: {
+                  inputValue: function inputValue(val) {
+                    this.lazyValue = val;
+                    this.hasColor = val;
+                  },
+                },
+                methods: {
+                  genLabel: function genLabel() {
+                    var label =
+                      _components_VInput__WEBPACK_IMPORTED_MODULE_0__[
+                        "default"
+                      ].options.methods.genLabel.call(this);
+                    if (!label) return label;
+                    label.data.on = {
+                      // Label shouldn't cause the input to focus
+                      click: prevent,
+                    };
+                    return label;
+                  },
+                  genInput: function genInput(type, attrs) {
+                    return this.$createElement("input", {
+                      attrs: Object.assign(
+                        {
+                          "aria-checked": this.isActive.toString(),
+                          disabled: this.isDisabled,
+                          id: this.computedId,
+                          role: type,
+                          type: type,
+                        },
+                        attrs
+                      ),
+                      domProps: {
+                        value: this.value,
+                        checked: this.isActive,
+                      },
+                      on: {
+                        blur: this.onBlur,
+                        change: this.onChange,
+                        focus: this.onFocus,
+                        keydown: this.onKeydown,
+                        click: prevent,
+                      },
+                      ref: "input",
+                    });
+                  },
+                  onBlur: function onBlur() {
+                    this.isFocused = false;
+                  },
+                  onClick: function onClick(e) {
+                    this.onChange();
+                    this.$emit("click", e);
+                  },
+                  onChange: function onChange() {
+                    var _this = this;
+
+                    if (!this.isInteractive) return;
+                    var value = this.value;
+                    var input = this.internalValue;
+
+                    if (this.isMultiple) {
+                      if (!Array.isArray(input)) {
+                        input = [];
+                      }
+
+                      var length = input.length;
+                      input = input.filter(function (item) {
+                        return !_this.valueComparator(item, value);
+                      });
+
+                      if (input.length === length) {
+                        input.push(value);
+                      }
+                    } else if (
+                      this.trueValue !== undefined &&
+                      this.falseValue !== undefined
+                    ) {
+                      input = this.valueComparator(input, this.trueValue)
+                        ? this.falseValue
+                        : this.trueValue;
+                    } else if (value) {
+                      input = this.valueComparator(input, value) ? null : value;
+                    } else {
+                      input = !input;
+                    }
+
+                    this.validate(true, input);
+                    this.internalValue = input;
+                    this.hasColor = input;
+                  },
+                  onFocus: function onFocus() {
+                    this.isFocused = true;
+                  },
+
+                  /** @abstract */
+                  onKeydown: function onKeydown(e) {},
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/sizeable/index.ts":
-/*!**************************************!*\
+        /***/ "./src/mixins/sizeable/index.ts":
+          /*!**************************************!*\
   !*** ./src/mixins/sizeable/index.ts ***!
   \**************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'sizeable',
-  props: {
-    large: Boolean,
-    small: Boolean,
-    xLarge: Boolean,
-    xSmall: Boolean
-  },
-  computed: {
-    medium: function medium() {
-      return Boolean(!this.xSmall && !this.small && !this.large && !this.xLarge);
-    },
-    sizeableClasses: function sizeableClasses() {
-      return {
-        'v-size--x-small': this.xSmall,
-        'v-size--small': this.small,
-        'v-size--default': this.medium,
-        'v-size--large': this.large,
-        'v-size--x-large': this.xLarge
-      };
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "sizeable",
+                props: {
+                  large: Boolean,
+                  small: Boolean,
+                  xLarge: Boolean,
+                  xSmall: Boolean,
+                },
+                computed: {
+                  medium: function medium() {
+                    return Boolean(
+                      !this.xSmall && !this.small && !this.large && !this.xLarge
+                    );
+                  },
+                  sizeableClasses: function sizeableClasses() {
+                    return {
+                      "v-size--x-small": this.xSmall,
+                      "v-size--small": this.small,
+                      "v-size--default": this.medium,
+                      "v-size--large": this.large,
+                      "v-size--x-large": this.xLarge,
+                    };
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/ssr-bootable/index.ts":
-/*!******************************************!*\
+        /***/ "./src/mixins/ssr-bootable/index.ts":
+          /*!******************************************!*\
   !*** ./src/mixins/ssr-bootable/index.ts ***!
   \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/**
- * SSRBootable
- *
- * @mixin
- *
- * Used in layout components (drawer, toolbar, content)
- * to avoid an entry animation when using SSR
- */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'ssr-bootable',
-  data: function data() {
-    return {
-      isBooted: false
-    };
-  },
-  mounted: function mounted() {
-    var _this = this; // Use setAttribute instead of dataset
-    // because dataset does not work well
-    // with unit tests
-
-
-    window.requestAnimationFrame(function () {
-      _this.$el.setAttribute('data-booted', 'true');
-
-      _this.isBooted = true;
-    });
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /**
+             * SSRBootable
+             *
+             * @mixin
+             *
+             * Used in layout components (drawer, toolbar, content)
+             * to avoid an entry animation when using SSR
+             */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "ssr-bootable",
+                data: function data() {
+                  return {
+                    isBooted: false,
+                  };
+                },
+                mounted: function mounted() {
+                  var _this = this; // Use setAttribute instead of dataset
+                  // because dataset does not work well
+                  // with unit tests
+
+                  window.requestAnimationFrame(function () {
+                    _this.$el.setAttribute("data-booted", "true");
+
+                    _this.isBooted = true;
+                  });
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/stackable/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/stackable/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/stackable/index.ts ***!
   \***************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-  return ar;
-};
-
-
-
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend().extend({
-  name: 'stackable',
-  data: function data() {
-    return {
-      stackElement: null,
-      stackExclude: null,
-      stackMinZIndex: 0,
-      isActive: false
-    };
-  },
-  computed: {
-    activeZIndex: function activeZIndex() {
-      if (typeof window === 'undefined') return 0;
-      var content = this.stackElement || this.$refs.content; // Return current zindex if not active
-
-      var index = !this.isActive ? Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getZIndex"])(content) : this.getMaxZIndex(this.stackExclude || [content]) + 2;
-      if (index == null) return index; // Return max current z-index (excluding self) + 2
-      // (2 to leave room for an overlay below, if needed)
-
-      return parseInt(index);
-    }
-  },
-  methods: {
-    getMaxZIndex: function getMaxZIndex(exclude) {
-      if (exclude === void 0) {
-        exclude = [];
-      }
-
-      var base = this.$el; // Start with lowest allowed z-index or z-index of
-      // base component's element, whichever is greater
-
-      var zis = [this.stackMinZIndex, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getZIndex"])(base)]; // Convert the NodeList to an array to
-      // prevent an Edge bug with Symbol.iterator
-      // https://github.com/vuetifyjs/vuetify/issues/2146
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-      var activeElements = __spread(document.getElementsByClassName('v-menu__content--active'), document.getElementsByClassName('v-dialog__content--active')); // Get z-index for all active dialogs
+                return ar;
+              };
 
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-      for (var index = 0; index < activeElements.length; index++) {
-        if (!exclude.includes(activeElements[index])) {
-          zis.push(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getZIndex"])(activeElements[index]));
-        }
-      }
+                return ar;
+              };
 
-      return Math.max.apply(Math, __spread(zis));
-    }
-  }
-}));
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend().extend({
+                name: "stackable",
+                data: function data() {
+                  return {
+                    stackElement: null,
+                    stackExclude: null,
+                    stackMinZIndex: 0,
+                    isActive: false,
+                  };
+                },
+                computed: {
+                  activeZIndex: function activeZIndex() {
+                    if (typeof window === "undefined") return 0;
+                    var content = this.stackElement || this.$refs.content; // Return current zindex if not active
+
+                    var index = !this.isActive
+                      ? Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                            "getZIndex"
+                          ]
+                        )(content)
+                      : this.getMaxZIndex(this.stackExclude || [content]) + 2;
+                    if (index == null) return index; // Return max current z-index (excluding self) + 2
+                    // (2 to leave room for an overlay below, if needed)
+
+                    return parseInt(index);
+                  },
+                },
+                methods: {
+                  getMaxZIndex: function getMaxZIndex(exclude) {
+                    if (exclude === void 0) {
+                      exclude = [];
+                    }
+
+                    var base = this.$el; // Start with lowest allowed z-index or z-index of
+                    // base component's element, whichever is greater
+
+                    var zis = [
+                      this.stackMinZIndex,
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_1__["getZIndex"]
+                      )(base),
+                    ]; // Convert the NodeList to an array to
+                    // prevent an Edge bug with Symbol.iterator
+                    // https://github.com/vuetifyjs/vuetify/issues/2146
+
+                    var activeElements = __spread(
+                      document.getElementsByClassName(
+                        "v-menu__content--active"
+                      ),
+                      document.getElementsByClassName(
+                        "v-dialog__content--active"
+                      )
+                    ); // Get z-index for all active dialogs
+
+                    for (
+                      var index = 0;
+                      index < activeElements.length;
+                      index++
+                    ) {
+                      if (!exclude.includes(activeElements[index])) {
+                        zis.push(
+                          Object(
+                            _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                              "getZIndex"
+                            ]
+                          )(activeElements[index])
+                        );
+                      }
+                    }
+
+                    return Math.max.apply(Math, __spread(zis));
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/themeable/index.ts":
-/*!***************************************!*\
+        /***/ "./src/mixins/themeable/index.ts":
+          /*!***************************************!*\
   !*** ./src/mixins/themeable/index.ts ***!
   \***************************************/
-/*! exports provided: default, functionalThemeClasses */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "functionalThemeClasses", function() { return functionalThemeClasses; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-
-/* @vue/component */
-
-var Themeable = vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend().extend({
-  name: 'themeable',
-  provide: function provide() {
-    return {
-      theme: this.themeableProvide
-    };
-  },
-  inject: {
-    theme: {
-      default: {
-        isDark: false
-      }
-    }
-  },
-  props: {
-    dark: {
-      type: Boolean,
-      default: null
-    },
-    light: {
-      type: Boolean,
-      default: null
-    }
-  },
-  data: function data() {
-    return {
-      themeableProvide: {
-        isDark: false
-      }
-    };
-  },
-  computed: {
-    appIsDark: function appIsDark() {
-      return this.$vuetify.theme.dark || false;
-    },
-    isDark: function isDark() {
-      if (this.dark === true) {
-        // explicitly dark
-        return true;
-      } else if (this.light === true) {
-        // explicitly light
-        return false;
-      } else {
-        // inherit from parent, or default false if there is none
-        return this.theme.isDark;
-      }
-    },
-    themeClasses: function themeClasses() {
-      return {
-        'theme--dark': this.isDark,
-        'theme--light': !this.isDark
-      };
-    },
-
-    /** Used by menus and dialogs, inherits from v-app instead of the parent */
-    rootIsDark: function rootIsDark() {
-      if (this.dark === true) {
-        // explicitly dark
-        return true;
-      } else if (this.light === true) {
-        // explicitly light
-        return false;
-      } else {
-        // inherit from v-app
-        return this.appIsDark;
-      }
-    },
-    rootThemeClasses: function rootThemeClasses() {
-      return {
-        'theme--dark': this.rootIsDark,
-        'theme--light': !this.rootIsDark
-      };
-    }
-  },
-  watch: {
-    isDark: {
-      handler: function handler(newVal, oldVal) {
-        if (newVal !== oldVal) {
-          this.themeableProvide.isDark = this.isDark;
-        }
-      },
-      immediate: true
-    }
-  }
-});
-/* harmony default export */ __webpack_exports__["default"] = (Themeable);
-function functionalThemeClasses(context) {
-  var vm = __assign(__assign({}, context.props), context.injections);
+          /*! exports provided: default, functionalThemeClasses */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "functionalThemeClasses",
+              function () {
+                return functionalThemeClasses;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  var isDark = Themeable.options.computed.isDark.call(vm);
-  return Themeable.options.computed.themeClasses.call({
-    isDark: isDark
-  });
-}
+            /* @vue/component */
+
+            var Themeable = vue__WEBPACK_IMPORTED_MODULE_0___default.a
+              .extend()
+              .extend({
+                name: "themeable",
+                provide: function provide() {
+                  return {
+                    theme: this.themeableProvide,
+                  };
+                },
+                inject: {
+                  theme: {
+                    default: {
+                      isDark: false,
+                    },
+                  },
+                },
+                props: {
+                  dark: {
+                    type: Boolean,
+                    default: null,
+                  },
+                  light: {
+                    type: Boolean,
+                    default: null,
+                  },
+                },
+                data: function data() {
+                  return {
+                    themeableProvide: {
+                      isDark: false,
+                    },
+                  };
+                },
+                computed: {
+                  appIsDark: function appIsDark() {
+                    return this.$vuetify.theme.dark || false;
+                  },
+                  isDark: function isDark() {
+                    if (this.dark === true) {
+                      // explicitly dark
+                      return true;
+                    } else if (this.light === true) {
+                      // explicitly light
+                      return false;
+                    } else {
+                      // inherit from parent, or default false if there is none
+                      return this.theme.isDark;
+                    }
+                  },
+                  themeClasses: function themeClasses() {
+                    return {
+                      "theme--dark": this.isDark,
+                      "theme--light": !this.isDark,
+                    };
+                  },
+
+                  /** Used by menus and dialogs, inherits from v-app instead of the parent */
+                  rootIsDark: function rootIsDark() {
+                    if (this.dark === true) {
+                      // explicitly dark
+                      return true;
+                    } else if (this.light === true) {
+                      // explicitly light
+                      return false;
+                    } else {
+                      // inherit from v-app
+                      return this.appIsDark;
+                    }
+                  },
+                  rootThemeClasses: function rootThemeClasses() {
+                    return {
+                      "theme--dark": this.rootIsDark,
+                      "theme--light": !this.rootIsDark,
+                    };
+                  },
+                },
+                watch: {
+                  isDark: {
+                    handler: function handler(newVal, oldVal) {
+                      if (newVal !== oldVal) {
+                        this.themeableProvide.isDark = this.isDark;
+                      }
+                    },
+                    immediate: true,
+                  },
+                },
+              });
+            /* harmony default export */ __webpack_exports__["default"] =
+              Themeable;
+            function functionalThemeClasses(context) {
+              var vm = __assign(
+                __assign({}, context.props),
+                context.injections
+              );
+
+              var isDark = Themeable.options.computed.isDark.call(vm);
+              return Themeable.options.computed.themeClasses.call({
+                isDark: isDark,
+              });
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/toggleable/index.ts":
-/*!****************************************!*\
+        /***/ "./src/mixins/toggleable/index.ts":
+          /*!****************************************!*\
   !*** ./src/mixins/toggleable/index.ts ***!
   \****************************************/
-/*! exports provided: factory, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+          /*! exports provided: factory, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "factory",
+              function () {
+                return factory;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            function factory(prop, event) {
+              var _a, _b;
+
+              if (prop === void 0) {
+                prop = "value";
+              }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "factory", function() { return factory; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
+              if (event === void 0) {
+                event = "input";
+              }
 
-function factory(prop, event) {
-  var _a, _b;
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "toggleable",
+                model: {
+                  prop: prop,
+                  event: event,
+                },
+                props:
+                  ((_a = {}),
+                  (_a[prop] = {
+                    required: false,
+                  }),
+                  _a),
+                data: function data() {
+                  return {
+                    isActive: !!this[prop],
+                  };
+                },
+                watch:
+                  ((_b = {}),
+                  (_b[prop] = function (val) {
+                    this.isActive = !!val;
+                  }),
+                  (_b.isActive = function (val) {
+                    !!val !== this[prop] && this.$emit(event, val);
+                  }),
+                  _b),
+              });
+            }
+            /* eslint-disable-next-line @typescript-eslint/no-redeclare */
 
-  if (prop === void 0) {
-    prop = 'value';
-  }
+            var Toggleable = factory();
+            /* harmony default export */ __webpack_exports__["default"] =
+              Toggleable;
 
-  if (event === void 0) {
-    event = 'input';
-  }
+            /***/
+          },
 
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    name: 'toggleable',
-    model: {
-      prop: prop,
-      event: event
-    },
-    props: (_a = {}, _a[prop] = {
-      required: false
-    }, _a),
-    data: function data() {
-      return {
-        isActive: !!this[prop]
-      };
-    },
-    watch: (_b = {}, _b[prop] = function (val) {
-      this.isActive = !!val;
-    }, _b.isActive = function (val) {
-      !!val !== this[prop] && this.$emit(event, val);
-    }, _b)
-  });
-}
-/* eslint-disable-next-line @typescript-eslint/no-redeclare */
-
-var Toggleable = factory();
-/* harmony default export */ __webpack_exports__["default"] = (Toggleable);
-
-/***/ }),
-
-/***/ "./src/mixins/transitionable/index.ts":
-/*!********************************************!*\
+        /***/ "./src/mixins/transitionable/index.ts":
+          /*!********************************************!*\
   !*** ./src/mixins/transitionable/index.ts ***!
   \********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'transitionable',
-  props: {
-    mode: String,
-    origin: String,
-    transition: String
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "transitionable",
+                props: {
+                  mode: String,
+                  origin: String,
+                  transition: String,
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/translatable/index.ts":
-/*!******************************************!*\
+        /***/ "./src/mixins/translatable/index.ts":
+          /*!******************************************!*\
   !*** ./src/mixins/translatable/index.ts ***!
   \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-
-/* harmony default export */ __webpack_exports__["default"] = (vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-  name: 'translatable',
-  props: {
-    height: Number
-  },
-  data: function data() {
-    return {
-      elOffsetTop: 0,
-      parallax: 0,
-      parallaxDist: 0,
-      percentScrolled: 0,
-      scrollTop: 0,
-      windowHeight: 0,
-      windowBottom: 0
-    };
-  },
-  computed: {
-    imgHeight: function imgHeight() {
-      return this.objHeight();
-    }
-  },
-  beforeDestroy: function beforeDestroy() {
-    window.removeEventListener('scroll', this.translate, false);
-    window.removeEventListener('resize', this.translate, false);
-  },
-  methods: {
-    calcDimensions: function calcDimensions() {
-      var offset = this.$el.getBoundingClientRect();
-      this.scrollTop = window.pageYOffset;
-      this.parallaxDist = this.imgHeight - this.height;
-      this.elOffsetTop = offset.top + this.scrollTop;
-      this.windowHeight = window.innerHeight;
-      this.windowBottom = this.scrollTop + this.windowHeight;
-    },
-    listeners: function listeners() {
-      window.addEventListener('scroll', this.translate, false);
-      window.addEventListener('resize', this.translate, false);
-    },
-
-    /** @abstract **/
-    objHeight: function objHeight() {
-      throw new Error('Not implemented !');
-    },
-    translate: function translate() {
-      this.calcDimensions();
-      this.percentScrolled = (this.windowBottom - this.elOffsetTop) / (parseInt(this.height) + this.windowHeight);
-      this.parallax = Math.round(this.parallaxDist * this.percentScrolled);
-    }
-  }
-}));
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: "translatable",
+                props: {
+                  height: Number,
+                },
+                data: function data() {
+                  return {
+                    elOffsetTop: 0,
+                    parallax: 0,
+                    parallaxDist: 0,
+                    percentScrolled: 0,
+                    scrollTop: 0,
+                    windowHeight: 0,
+                    windowBottom: 0,
+                  };
+                },
+                computed: {
+                  imgHeight: function imgHeight() {
+                    return this.objHeight();
+                  },
+                },
+                beforeDestroy: function beforeDestroy() {
+                  window.removeEventListener("scroll", this.translate, false);
+                  window.removeEventListener("resize", this.translate, false);
+                },
+                methods: {
+                  calcDimensions: function calcDimensions() {
+                    var offset = this.$el.getBoundingClientRect();
+                    this.scrollTop = window.pageYOffset;
+                    this.parallaxDist = this.imgHeight - this.height;
+                    this.elOffsetTop = offset.top + this.scrollTop;
+                    this.windowHeight = window.innerHeight;
+                    this.windowBottom = this.scrollTop + this.windowHeight;
+                  },
+                  listeners: function listeners() {
+                    window.addEventListener("scroll", this.translate, false);
+                    window.addEventListener("resize", this.translate, false);
+                  },
+
+                  /** @abstract **/
+                  objHeight: function objHeight() {
+                    throw new Error("Not implemented !");
+                  },
+                  translate: function translate() {
+                    this.calcDimensions();
+                    this.percentScrolled =
+                      (this.windowBottom - this.elOffsetTop) /
+                      (parseInt(this.height) + this.windowHeight);
+                    this.parallax = Math.round(
+                      this.parallaxDist * this.percentScrolled
+                    );
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/mixins/validatable/index.ts":
-/*!*****************************************!*\
+        /***/ "./src/mixins/validatable/index.ts":
+          /*!*****************************************!*\
   !*** ./src/mixins/validatable/index.ts ***!
   \*****************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _colorable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../colorable */ "./src/mixins/colorable/index.ts");
-/* harmony import */ var _themeable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../themeable */ "./src/mixins/themeable/index.ts");
-/* harmony import */ var _registrable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../registrable */ "./src/mixins/registrable/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../util/mixins */ "./src/util/mixins.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-// Mixins
-
-
- // Utilities
-
-
-
-
-var baseMixins = Object(_util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"])(_colorable__WEBPACK_IMPORTED_MODULE_0__["default"], Object(_registrable__WEBPACK_IMPORTED_MODULE_2__["inject"])('form'), _themeable__WEBPACK_IMPORTED_MODULE_1__["default"]);
-/* @vue/component */
-
-/* harmony default export */ __webpack_exports__["default"] = (baseMixins.extend({
-  name: 'validatable',
-  props: {
-    disabled: Boolean,
-    error: Boolean,
-    errorCount: {
-      type: [Number, String],
-      default: 1
-    },
-    errorMessages: {
-      type: [String, Array],
-      default: function _default() {
-        return [];
-      }
-    },
-    messages: {
-      type: [String, Array],
-      default: function _default() {
-        return [];
-      }
-    },
-    readonly: Boolean,
-    rules: {
-      type: Array,
-      default: function _default() {
-        return [];
-      }
-    },
-    success: Boolean,
-    successMessages: {
-      type: [String, Array],
-      default: function _default() {
-        return [];
-      }
-    },
-    validateOnBlur: Boolean,
-    value: {
-      required: false
-    }
-  },
-  data: function data() {
-    return {
-      errorBucket: [],
-      hasColor: false,
-      hasFocused: false,
-      hasInput: false,
-      isFocused: false,
-      isResetting: false,
-      lazyValue: this.value,
-      valid: false
-    };
-  },
-  computed: {
-    computedColor: function computedColor() {
-      if (this.isDisabled) return undefined;
-      if (this.color) return this.color; // It's assumed that if the input is on a
-      // dark background, the user will want to
-      // have a white color. If the entire app
-      // is setup to be dark, then they will
-      // like want to use their primary color
-
-      if (this.isDark && !this.appIsDark) return 'white';else return 'primary';
-    },
-    hasError: function hasError() {
-      return this.internalErrorMessages.length > 0 || this.errorBucket.length > 0 || this.error;
-    },
-    // TODO: Add logic that allows the user to enable based
-    // upon a good validation
-    hasSuccess: function hasSuccess() {
-      return this.internalSuccessMessages.length > 0 || this.success;
-    },
-    externalError: function externalError() {
-      return this.internalErrorMessages.length > 0 || this.error;
-    },
-    hasMessages: function hasMessages() {
-      return this.validationTarget.length > 0;
-    },
-    hasState: function hasState() {
-      if (this.isDisabled) return false;
-      return this.hasSuccess || this.shouldValidate && this.hasError;
-    },
-    internalErrorMessages: function internalErrorMessages() {
-      return this.genInternalMessages(this.errorMessages);
-    },
-    internalMessages: function internalMessages() {
-      return this.genInternalMessages(this.messages);
-    },
-    internalSuccessMessages: function internalSuccessMessages() {
-      return this.genInternalMessages(this.successMessages);
-    },
-    internalValue: {
-      get: function get() {
-        return this.lazyValue;
-      },
-      set: function set(val) {
-        this.lazyValue = val;
-        this.$emit('input', val);
-      }
-    },
-    isDisabled: function isDisabled() {
-      return this.disabled || !!this.form && this.form.disabled;
-    },
-    isInteractive: function isInteractive() {
-      return !this.isDisabled && !this.isReadonly;
-    },
-    isReadonly: function isReadonly() {
-      return this.readonly || !!this.form && this.form.readonly;
-    },
-    shouldValidate: function shouldValidate() {
-      if (this.externalError) return true;
-      if (this.isResetting) return false;
-      return this.validateOnBlur ? this.hasFocused && !this.isFocused : this.hasInput || this.hasFocused;
-    },
-    validations: function validations() {
-      return this.validationTarget.slice(0, Number(this.errorCount));
-    },
-    validationState: function validationState() {
-      if (this.isDisabled) return undefined;
-      if (this.hasError && this.shouldValidate) return 'error';
-      if (this.hasSuccess) return 'success';
-      if (this.hasColor) return this.computedColor;
-      return undefined;
-    },
-    validationTarget: function validationTarget() {
-      if (this.internalErrorMessages.length > 0) {
-        return this.internalErrorMessages;
-      } else if (this.successMessages && this.successMessages.length > 0) {
-        return this.internalSuccessMessages;
-      } else if (this.messages && this.messages.length > 0) {
-        return this.internalMessages;
-      } else if (this.shouldValidate) {
-        return this.errorBucket;
-      } else return [];
-    }
-  },
-  watch: {
-    rules: {
-      handler: function handler(newVal, oldVal) {
-        if (Object(_util_helpers__WEBPACK_IMPORTED_MODULE_3__["deepEqual"])(newVal, oldVal)) return;
-        this.validate();
-      },
-      deep: true
-    },
-    internalValue: function internalValue() {
-      // If it's the first time we're setting input,
-      // mark it with hasInput
-      this.hasInput = true;
-      this.validateOnBlur || this.$nextTick(this.validate);
-    },
-    isFocused: function isFocused(val) {
-      // Should not check validation
-      // if disabled
-      if (!val && !this.isDisabled) {
-        this.hasFocused = true;
-        this.validateOnBlur && this.$nextTick(this.validate);
-      }
-    },
-    isResetting: function isResetting() {
-      var _this = this;
-
-      setTimeout(function () {
-        _this.hasInput = false;
-        _this.hasFocused = false;
-        _this.isResetting = false;
-
-        _this.validate();
-      }, 0);
-    },
-    hasError: function hasError(val) {
-      if (this.shouldValidate) {
-        this.$emit('update:error', val);
-      }
-    },
-    value: function value(val) {
-      this.lazyValue = val;
-    }
-  },
-  beforeMount: function beforeMount() {
-    this.validate();
-  },
-  created: function created() {
-    this.form && this.form.register(this);
-  },
-  beforeDestroy: function beforeDestroy() {
-    this.form && this.form.unregister(this);
-  },
-  methods: {
-    genInternalMessages: function genInternalMessages(messages) {
-      if (!messages) return [];else if (Array.isArray(messages)) return messages;else return [messages];
-    },
-
-    /** @public */
-    reset: function reset() {
-      this.isResetting = true;
-      this.internalValue = Array.isArray(this.internalValue) ? [] : undefined;
-    },
-
-    /** @public */
-    resetValidation: function resetValidation() {
-      this.isResetting = true;
-    },
-
-    /** @public */
-    validate: function validate(force, value) {
-      if (force === void 0) {
-        force = false;
-      }
-
-      var errorBucket = [];
-      value = value || this.internalValue;
-      if (force) this.hasInput = this.hasFocused = true;
-
-      for (var index = 0; index < this.rules.length; index++) {
-        var rule = this.rules[index];
-        var valid = typeof rule === 'function' ? rule(value) : rule;
-
-        if (valid === false || typeof valid === 'string') {
-          errorBucket.push(valid || '');
-        } else if (typeof valid !== 'boolean') {
-          Object(_util_console__WEBPACK_IMPORTED_MODULE_4__["consoleError"])("Rules should return a string or boolean, received '" + _typeof(valid) + "' instead", this);
-        }
-      }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _colorable__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../colorable */ "./src/mixins/colorable/index.ts"
+              );
+            /* harmony import */ var _themeable__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../themeable */ "./src/mixins/themeable/index.ts"
+              );
+            /* harmony import */ var _registrable__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../registrable */ "./src/mixins/registrable/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_mixins__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ../../util/mixins */ "./src/util/mixins.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-      this.errorBucket = errorBucket;
-      this.valid = errorBucket.length === 0;
-      return this.valid;
-    }
-  }
-}));
+            // Mixins
+
+            // Utilities
+
+            var baseMixins = Object(
+              _util_mixins__WEBPACK_IMPORTED_MODULE_5__["default"]
+            )(
+              _colorable__WEBPACK_IMPORTED_MODULE_0__["default"],
+              Object(_registrable__WEBPACK_IMPORTED_MODULE_2__["inject"])(
+                "form"
+              ),
+              _themeable__WEBPACK_IMPORTED_MODULE_1__["default"]
+            );
+            /* @vue/component */
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              baseMixins.extend({
+                name: "validatable",
+                props: {
+                  disabled: Boolean,
+                  error: Boolean,
+                  errorCount: {
+                    type: [Number, String],
+                    default: 1,
+                  },
+                  errorMessages: {
+                    type: [String, Array],
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  messages: {
+                    type: [String, Array],
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  readonly: Boolean,
+                  rules: {
+                    type: Array,
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  success: Boolean,
+                  successMessages: {
+                    type: [String, Array],
+                    default: function _default() {
+                      return [];
+                    },
+                  },
+                  validateOnBlur: Boolean,
+                  value: {
+                    required: false,
+                  },
+                },
+                data: function data() {
+                  return {
+                    errorBucket: [],
+                    hasColor: false,
+                    hasFocused: false,
+                    hasInput: false,
+                    isFocused: false,
+                    isResetting: false,
+                    lazyValue: this.value,
+                    valid: false,
+                  };
+                },
+                computed: {
+                  computedColor: function computedColor() {
+                    if (this.isDisabled) return undefined;
+                    if (this.color) return this.color; // It's assumed that if the input is on a
+                    // dark background, the user will want to
+                    // have a white color. If the entire app
+                    // is setup to be dark, then they will
+                    // like want to use their primary color
+
+                    if (this.isDark && !this.appIsDark) return "white";
+                    else return "primary";
+                  },
+                  hasError: function hasError() {
+                    return (
+                      this.internalErrorMessages.length > 0 ||
+                      this.errorBucket.length > 0 ||
+                      this.error
+                    );
+                  },
+                  // TODO: Add logic that allows the user to enable based
+                  // upon a good validation
+                  hasSuccess: function hasSuccess() {
+                    return (
+                      this.internalSuccessMessages.length > 0 || this.success
+                    );
+                  },
+                  externalError: function externalError() {
+                    return this.internalErrorMessages.length > 0 || this.error;
+                  },
+                  hasMessages: function hasMessages() {
+                    return this.validationTarget.length > 0;
+                  },
+                  hasState: function hasState() {
+                    if (this.isDisabled) return false;
+                    return (
+                      this.hasSuccess || (this.shouldValidate && this.hasError)
+                    );
+                  },
+                  internalErrorMessages: function internalErrorMessages() {
+                    return this.genInternalMessages(this.errorMessages);
+                  },
+                  internalMessages: function internalMessages() {
+                    return this.genInternalMessages(this.messages);
+                  },
+                  internalSuccessMessages: function internalSuccessMessages() {
+                    return this.genInternalMessages(this.successMessages);
+                  },
+                  internalValue: {
+                    get: function get() {
+                      return this.lazyValue;
+                    },
+                    set: function set(val) {
+                      this.lazyValue = val;
+                      this.$emit("input", val);
+                    },
+                  },
+                  isDisabled: function isDisabled() {
+                    return this.disabled || (!!this.form && this.form.disabled);
+                  },
+                  isInteractive: function isInteractive() {
+                    return !this.isDisabled && !this.isReadonly;
+                  },
+                  isReadonly: function isReadonly() {
+                    return this.readonly || (!!this.form && this.form.readonly);
+                  },
+                  shouldValidate: function shouldValidate() {
+                    if (this.externalError) return true;
+                    if (this.isResetting) return false;
+                    return this.validateOnBlur
+                      ? this.hasFocused && !this.isFocused
+                      : this.hasInput || this.hasFocused;
+                  },
+                  validations: function validations() {
+                    return this.validationTarget.slice(
+                      0,
+                      Number(this.errorCount)
+                    );
+                  },
+                  validationState: function validationState() {
+                    if (this.isDisabled) return undefined;
+                    if (this.hasError && this.shouldValidate) return "error";
+                    if (this.hasSuccess) return "success";
+                    if (this.hasColor) return this.computedColor;
+                    return undefined;
+                  },
+                  validationTarget: function validationTarget() {
+                    if (this.internalErrorMessages.length > 0) {
+                      return this.internalErrorMessages;
+                    } else if (
+                      this.successMessages &&
+                      this.successMessages.length > 0
+                    ) {
+                      return this.internalSuccessMessages;
+                    } else if (this.messages && this.messages.length > 0) {
+                      return this.internalMessages;
+                    } else if (this.shouldValidate) {
+                      return this.errorBucket;
+                    } else return [];
+                  },
+                },
+                watch: {
+                  rules: {
+                    handler: function handler(newVal, oldVal) {
+                      if (
+                        Object(
+                          _util_helpers__WEBPACK_IMPORTED_MODULE_3__[
+                            "deepEqual"
+                          ]
+                        )(newVal, oldVal)
+                      )
+                        return;
+                      this.validate();
+                    },
+                    deep: true,
+                  },
+                  internalValue: function internalValue() {
+                    // If it's the first time we're setting input,
+                    // mark it with hasInput
+                    this.hasInput = true;
+                    this.validateOnBlur || this.$nextTick(this.validate);
+                  },
+                  isFocused: function isFocused(val) {
+                    // Should not check validation
+                    // if disabled
+                    if (!val && !this.isDisabled) {
+                      this.hasFocused = true;
+                      this.validateOnBlur && this.$nextTick(this.validate);
+                    }
+                  },
+                  isResetting: function isResetting() {
+                    var _this = this;
+
+                    setTimeout(function () {
+                      _this.hasInput = false;
+                      _this.hasFocused = false;
+                      _this.isResetting = false;
+
+                      _this.validate();
+                    }, 0);
+                  },
+                  hasError: function hasError(val) {
+                    if (this.shouldValidate) {
+                      this.$emit("update:error", val);
+                    }
+                  },
+                  value: function value(val) {
+                    this.lazyValue = val;
+                  },
+                },
+                beforeMount: function beforeMount() {
+                  this.validate();
+                },
+                created: function created() {
+                  this.form && this.form.register(this);
+                },
+                beforeDestroy: function beforeDestroy() {
+                  this.form && this.form.unregister(this);
+                },
+                methods: {
+                  genInternalMessages: function genInternalMessages(messages) {
+                    if (!messages) return [];
+                    else if (Array.isArray(messages)) return messages;
+                    else return [messages];
+                  },
+
+                  /** @public */
+                  reset: function reset() {
+                    this.isResetting = true;
+                    this.internalValue = Array.isArray(this.internalValue)
+                      ? []
+                      : undefined;
+                  },
+
+                  /** @public */
+                  resetValidation: function resetValidation() {
+                    this.isResetting = true;
+                  },
+
+                  /** @public */
+                  validate: function validate(force, value) {
+                    if (force === void 0) {
+                      force = false;
+                    }
+
+                    var errorBucket = [];
+                    value = value || this.internalValue;
+                    if (force) this.hasInput = this.hasFocused = true;
+
+                    for (var index = 0; index < this.rules.length; index++) {
+                      var rule = this.rules[index];
+                      var valid =
+                        typeof rule === "function" ? rule(value) : rule;
+
+                      if (valid === false || typeof valid === "string") {
+                        errorBucket.push(valid || "");
+                      } else if (typeof valid !== "boolean") {
+                        Object(
+                          _util_console__WEBPACK_IMPORTED_MODULE_4__[
+                            "consoleError"
+                          ]
+                        )(
+                          "Rules should return a string or boolean, received '" +
+                            _typeof(valid) +
+                            "' instead",
+                          this
+                        );
+                      }
+                    }
+
+                    this.errorBucket = errorBucket;
+                    this.valid = errorBucket.length === 0;
+                    return this.valid;
+                  },
+                },
+              });
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/presets/default/index.ts":
-/*!**************************************!*\
+        /***/ "./src/presets/default/index.ts":
+          /*!**************************************!*\
   !*** ./src/presets/default/index.ts ***!
   \**************************************/
-/*! exports provided: preset */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "preset", function() { return preset; });
-/* harmony import */ var _styles_main_sass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../styles/main.sass */ "./src/styles/main.sass");
-/* harmony import */ var _styles_main_sass__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_styles_main_sass__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../locale */ "./src/locale/index.ts");
-// Styles
- // Locale
-
-
-var preset = {
-  breakpoint: {
-    // TODO: update to MD2 spec in v3 - 1280
-    mobileBreakpoint: 1264,
-    scrollBarWidth: 16,
-    thresholds: {
-      xs: 600,
-      sm: 960,
-      md: 1280,
-      lg: 1920
-    }
-  },
-  icons: {
-    // TODO: remove v3
-    iconfont: 'mdi',
-    values: {}
-  },
-  lang: {
-    current: 'en',
-    locales: {
-      en: _locale__WEBPACK_IMPORTED_MODULE_1__["en"]
-    },
-    // Default translator exists in lang service
-    t: undefined
-  },
-  rtl: false,
-  theme: {
-    dark: false,
-    default: 'light',
-    disable: false,
-    options: {
-      cspNonce: undefined,
-      customProperties: undefined,
-      minifyTheme: undefined,
-      themeCache: undefined,
-      variations: true
-    },
-    themes: {
-      light: {
-        primary: '#1976D2',
-        secondary: '#424242',
-        accent: '#82B1FF',
-        error: '#FF5252',
-        info: '#2196F3',
-        success: '#4CAF50',
-        warning: '#FB8C00'
-      },
-      dark: {
-        primary: '#2196F3',
-        secondary: '#424242',
-        accent: '#FF4081',
-        error: '#FF5252',
-        info: '#2196F3',
-        success: '#4CAF50',
-        warning: '#FB8C00'
-      }
-    }
-  }
-};
-
-/***/ }),
-
-/***/ "./src/services/application/index.ts":
-/*!*******************************************!*\
-  !*** ./src/services/application/index.ts ***!
-  \*******************************************/
-/*! exports provided: Application */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Application", function() { return Application; });
-/* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../service */ "./src/services/service/index.ts");
-var __extends = undefined && undefined.__extends || function () {
-  var _extendStatics = function extendStatics(d, b) {
-    _extendStatics = Object.setPrototypeOf || {
-      __proto__: []
-    } instanceof Array && function (d, b) {
-      d.__proto__ = b;
-    } || function (d, b) {
-      for (var p in b) {
-        if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
-      }
-    };
-
-    return _extendStatics(d, b);
-  };
-
-  return function (d, b) {
-    _extendStatics(d, b);
-
-    function __() {
-      this.constructor = d;
-    }
-
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-  };
-}(); // Extensions
-
-
-
-
-var Application =
-/** @class */
-function (_super) {
-  __extends(Application, _super);
-
-  function Application() {
-    var _this = _super !== null && _super.apply(this, arguments) || this;
-
-    _this.bar = 0;
-    _this.top = 0;
-    _this.left = 0;
-    _this.insetFooter = 0;
-    _this.right = 0;
-    _this.bottom = 0;
-    _this.footer = 0;
-    _this.application = {
-      bar: {},
-      top: {},
-      left: {},
-      insetFooter: {},
-      right: {},
-      bottom: {},
-      footer: {}
-    };
-    return _this;
-  }
-
-  Application.prototype.register = function (uid, location, size) {
-    var _a;
-
-    this.application[location] = (_a = {}, _a[uid] = size, _a);
-    this.update(location);
-  };
-
-  Application.prototype.unregister = function (uid, location) {
-    if (this.application[location][uid] == null) return;
-    delete this.application[location][uid];
-    this.update(location);
-  };
-
-  Application.prototype.update = function (location) {
-    this[location] = Object.values(this.application[location]).reduce(function (acc, cur) {
-      return acc + cur;
-    }, 0);
-  };
-
-  Application.property = 'application';
-  return Application;
-}(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
-
-
-
-/***/ }),
-
-/***/ "./src/services/breakpoint/index.ts":
-/*!******************************************!*\
-  !*** ./src/services/breakpoint/index.ts ***!
-  \******************************************/
-/*! exports provided: Breakpoint */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Breakpoint", function() { return Breakpoint; });
-/* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../service */ "./src/services/service/index.ts");
-var __extends = undefined && undefined.__extends || function () {
-  var _extendStatics = function extendStatics(d, b) {
-    _extendStatics = Object.setPrototypeOf || {
-      __proto__: []
-    } instanceof Array && function (d, b) {
-      d.__proto__ = b;
-    } || function (d, b) {
-      for (var p in b) {
-        if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
-      }
-    };
-
-    return _extendStatics(d, b);
-  };
-
-  return function (d, b) {
-    _extendStatics(d, b);
-
-    function __() {
-      this.constructor = d;
-    }
-
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-  };
-}(); // Extensions
-
-
-
-
-var Breakpoint =
-/** @class */
-function (_super) {
-  __extends(Breakpoint, _super);
-
-  function Breakpoint(preset) {
-    var _this = _super.call(this) || this; // Public
-
-
-    _this.xs = false;
-    _this.sm = false;
-    _this.md = false;
-    _this.lg = false;
-    _this.xl = false;
-    _this.xsOnly = false;
-    _this.smOnly = false;
-    _this.smAndDown = false;
-    _this.smAndUp = false;
-    _this.mdOnly = false;
-    _this.mdAndDown = false;
-    _this.mdAndUp = false;
-    _this.lgOnly = false;
-    _this.lgAndDown = false;
-    _this.lgAndUp = false;
-    _this.xlOnly = false; // Value is xs to match v2.x functionality
-
-    _this.name = 'xs';
-    _this.height = 0;
-    _this.width = 0; // TODO: Add functionality to detect this dynamically in v3
-    // Value is true to match v2.x functionality
-
-    _this.mobile = true;
-    _this.resizeTimeout = 0;
-    var _a = preset[Breakpoint.property],
-        mobileBreakpoint = _a.mobileBreakpoint,
-        scrollBarWidth = _a.scrollBarWidth,
-        thresholds = _a.thresholds;
-    _this.mobileBreakpoint = mobileBreakpoint;
-    _this.scrollBarWidth = scrollBarWidth;
-    _this.thresholds = thresholds;
-    return _this;
-  }
-
-  Breakpoint.prototype.init = function () {
-    this.update();
-    /* istanbul ignore if */
-
-    if (typeof window === 'undefined') return;
-    window.addEventListener('resize', this.onResize.bind(this), {
-      passive: true
-    });
-  };
-  /* eslint-disable-next-line max-statements */
-
-
-  Breakpoint.prototype.update = function (ssr) {
-    if (ssr === void 0) {
-      ssr = false;
-    }
-
-    var height = ssr ? 0 : this.getClientHeight();
-    var width = ssr ? 0 : this.getClientWidth();
-    var xs = width < this.thresholds.xs;
-    var sm = width < this.thresholds.sm && !xs;
-    var md = width < this.thresholds.md - this.scrollBarWidth && !(sm || xs);
-    var lg = width < this.thresholds.lg - this.scrollBarWidth && !(md || sm || xs);
-    var xl = width >= this.thresholds.lg - this.scrollBarWidth;
-    this.height = height;
-    this.width = width;
-    this.xs = xs;
-    this.sm = sm;
-    this.md = md;
-    this.lg = lg;
-    this.xl = xl;
-    this.xsOnly = xs;
-    this.smOnly = sm;
-    this.smAndDown = (xs || sm) && !(md || lg || xl);
-    this.smAndUp = !xs && (sm || md || lg || xl);
-    this.mdOnly = md;
-    this.mdAndDown = (xs || sm || md) && !(lg || xl);
-    this.mdAndUp = !(xs || sm) && (md || lg || xl);
-    this.lgOnly = lg;
-    this.lgAndDown = (xs || sm || md || lg) && !xl;
-    this.lgAndUp = !(xs || sm || md) && (lg || xl);
-    this.xlOnly = xl;
-
-    switch (true) {
-      case xs:
-        this.name = 'xs';
-        break;
-
-      case sm:
-        this.name = 'sm';
-        break;
-
-      case md:
-        this.name = 'md';
-        break;
-
-      case lg:
-        this.name = 'lg';
-        break;
-
-      default:
-        this.name = 'xl';
-        break;
-    }
-
-    if (typeof this.mobileBreakpoint === 'number') {
-      this.mobile = width < parseInt(this.mobileBreakpoint, 10);
-      return;
-    }
-
-    var breakpoints = {
-      xs: 0,
-      sm: 1,
-      md: 2,
-      lg: 3,
-      xl: 4
-    };
-    var current = breakpoints[this.name];
-    var max = breakpoints[this.mobileBreakpoint];
-    this.mobile = current <= max;
-  };
-
-  Breakpoint.prototype.onResize = function () {
-    clearTimeout(this.resizeTimeout); // Added debounce to match what
-    // v-resize used to do but was
-    // removed due to a memory leak
-    // https://github.com/vuetifyjs/vuetify/pull/2997
-
-    this.resizeTimeout = window.setTimeout(this.update.bind(this), 200);
-  }; // Cross-browser support as described in:
-  // https://stackoverflow.com/questions/1248081
-
-
-  Breakpoint.prototype.getClientWidth = function () {
-    /* istanbul ignore if */
-    if (typeof document === 'undefined') return 0; // SSR
-
-    return Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
-  };
-
-  Breakpoint.prototype.getClientHeight = function () {
-    /* istanbul ignore if */
-    if (typeof document === 'undefined') return 0; // SSR
-
-    return Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
-  };
-
-  Breakpoint.property = 'breakpoint';
-  return Breakpoint;
-}(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
-
-
-
-/***/ }),
-
-/***/ "./src/services/goto/easing-patterns.ts":
-/*!**********************************************!*\
-  !*** ./src/services/goto/easing-patterns.ts ***!
-  \**********************************************/
-/*! exports provided: linear, easeInQuad, easeOutQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, easeInOutQuart, easeInQuint, easeOutQuint, easeInOutQuint */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "linear", function() { return linear; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInQuad", function() { return easeInQuad; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeOutQuad", function() { return easeOutQuad; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInOutQuad", function() { return easeInOutQuad; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInCubic", function() { return easeInCubic; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeOutCubic", function() { return easeOutCubic; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInOutCubic", function() { return easeInOutCubic; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInQuart", function() { return easeInQuart; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeOutQuart", function() { return easeOutQuart; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInOutQuart", function() { return easeInOutQuart; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInQuint", function() { return easeInQuint; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeOutQuint", function() { return easeOutQuint; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "easeInOutQuint", function() { return easeInOutQuint; });
-// linear
-var linear = function linear(t) {
-  return t;
-}; // accelerating from zero velocity
-
-var easeInQuad = function easeInQuad(t) {
-  return Math.pow(t, 2);
-}; // decelerating to zero velocity
-
-var easeOutQuad = function easeOutQuad(t) {
-  return t * (2 - t);
-}; // acceleration until halfway, then deceleration
-
-var easeInOutQuad = function easeInOutQuad(t) {
-  return t < 0.5 ? 2 * Math.pow(t, 2) : -1 + (4 - 2 * t) * t;
-}; // accelerating from zero velocity
-
-var easeInCubic = function easeInCubic(t) {
-  return Math.pow(t, 3);
-}; // decelerating to zero velocity
-
-var easeOutCubic = function easeOutCubic(t) {
-  return Math.pow(--t, 3) + 1;
-}; // acceleration until halfway, then deceleration
-
-var easeInOutCubic = function easeInOutCubic(t) {
-  return t < 0.5 ? 4 * Math.pow(t, 3) : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
-}; // accelerating from zero velocity
-
-var easeInQuart = function easeInQuart(t) {
-  return Math.pow(t, 4);
-}; // decelerating to zero velocity
-
-var easeOutQuart = function easeOutQuart(t) {
-  return 1 - Math.pow(--t, 4);
-}; // acceleration until halfway, then deceleration
-
-var easeInOutQuart = function easeInOutQuart(t) {
-  return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;
-}; // accelerating from zero velocity
-
-var easeInQuint = function easeInQuint(t) {
-  return Math.pow(t, 5);
-}; // decelerating to zero velocity
-
-var easeOutQuint = function easeOutQuint(t) {
-  return 1 + Math.pow(--t, 5);
-}; // acceleration until halfway, then deceleration
-
-var easeInOutQuint = function easeInOutQuint(t) {
-  return t < 0.5 ? 16 * Math.pow(t, 5) : 1 + 16 * Math.pow(--t, 5);
-};
-
-/***/ }),
-
-/***/ "./src/services/goto/index.ts":
-/*!************************************!*\
-  !*** ./src/services/goto/index.ts ***!
-  \************************************/
-/*! exports provided: default, Goto */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return goTo; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Goto", function() { return Goto; });
-/* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../service */ "./src/services/service/index.ts");
-/* harmony import */ var _easing_patterns__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./easing-patterns */ "./src/services/goto/easing-patterns.ts");
-/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./src/services/goto/util.ts");
-var __extends = undefined && undefined.__extends || function () {
-  var _extendStatics = function extendStatics(d, b) {
-    _extendStatics = Object.setPrototypeOf || {
-      __proto__: []
-    } instanceof Array && function (d, b) {
-      d.__proto__ = b;
-    } || function (d, b) {
-      for (var p in b) {
-        if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
-      }
-    };
-
-    return _extendStatics(d, b);
-  };
-
-  return function (d, b) {
-    _extendStatics(d, b);
-
-    function __() {
-      this.constructor = d;
-    }
-
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-  };
-}();
-
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-}; // Extensions
-
-
- // Utilities
-
-
-
-function goTo(_target, _settings) {
-  if (_settings === void 0) {
-    _settings = {};
-  }
-
-  var settings = __assign({
-    container: document.scrollingElement || document.body || document.documentElement,
-    duration: 500,
-    offset: 0,
-    easing: 'easeInOutCubic',
-    appOffset: true
-  }, _settings);
-
-  var container = Object(_util__WEBPACK_IMPORTED_MODULE_2__["getContainer"])(settings.container);
-  /* istanbul ignore else */
-
-  if (settings.appOffset && goTo.framework.application) {
-    var isDrawer = container.classList.contains('v-navigation-drawer');
-    var isClipped = container.classList.contains('v-navigation-drawer--clipped');
-    var _a = goTo.framework.application,
-        bar = _a.bar,
-        top = _a.top;
-    settings.offset += bar;
-    /* istanbul ignore else */
-
-    if (!isDrawer || isClipped) settings.offset += top;
-  }
-
-  var startTime = performance.now();
-  var targetLocation;
-
-  if (typeof _target === 'number') {
-    targetLocation = Object(_util__WEBPACK_IMPORTED_MODULE_2__["getOffset"])(_target) - settings.offset;
-  } else {
-    targetLocation = Object(_util__WEBPACK_IMPORTED_MODULE_2__["getOffset"])(_target) - Object(_util__WEBPACK_IMPORTED_MODULE_2__["getOffset"])(container) - settings.offset;
-  }
-
-  var startLocation = container.scrollTop;
-  if (targetLocation === startLocation) return Promise.resolve(targetLocation);
-  var ease = typeof settings.easing === 'function' ? settings.easing : _easing_patterns__WEBPACK_IMPORTED_MODULE_1__[settings.easing];
-  /* istanbul ignore else */
-
-  if (!ease) throw new TypeError("Easing function \"" + settings.easing + "\" not found."); // Cannot be tested properly in jsdom
-
-  /* istanbul ignore next */
-
-  return new Promise(function (resolve) {
-    return requestAnimationFrame(function step(currentTime) {
-      var timeElapsed = currentTime - startTime;
-      var progress = Math.abs(settings.duration ? Math.min(timeElapsed / settings.duration, 1) : 1);
-      container.scrollTop = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress));
-      var clientHeight = container === document.body ? document.documentElement.clientHeight : container.clientHeight;
-
-      if (progress === 1 || clientHeight + container.scrollTop === container.scrollHeight) {
-        return resolve(targetLocation);
-      }
-
-      requestAnimationFrame(step);
-    });
-  });
-}
-goTo.framework = {};
-
-goTo.init = function () {};
-
-var Goto =
-/** @class */
-function (_super) {
-  __extends(Goto, _super);
-
-  function Goto() {
-    var _this = _super.call(this) || this;
-
-    return goTo;
-  }
-
-  Goto.property = 'goTo';
-  return Goto;
-}(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
-
+          /*! exports provided: preset */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "preset",
+              function () {
+                return preset;
+              }
+            );
+            /* harmony import */ var _styles_main_sass__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../styles/main.sass */ "./src/styles/main.sass"
+              );
+            /* harmony import */ var _styles_main_sass__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                _styles_main_sass__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* harmony import */ var _locale__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! ../../locale */ "./src/locale/index.ts");
+            // Styles
+            // Locale
+
+            var preset = {
+              breakpoint: {
+                // TODO: update to MD2 spec in v3 - 1280
+                mobileBreakpoint: 1264,
+                scrollBarWidth: 16,
+                thresholds: {
+                  xs: 600,
+                  sm: 960,
+                  md: 1280,
+                  lg: 1920,
+                },
+              },
+              icons: {
+                // TODO: remove v3
+                iconfont: "mdi",
+                values: {},
+              },
+              lang: {
+                current: "en",
+                locales: {
+                  en: _locale__WEBPACK_IMPORTED_MODULE_1__["en"],
+                },
+                // Default translator exists in lang service
+                t: undefined,
+              },
+              rtl: false,
+              theme: {
+                dark: false,
+                default: "light",
+                disable: false,
+                options: {
+                  cspNonce: undefined,
+                  customProperties: undefined,
+                  minifyTheme: undefined,
+                  themeCache: undefined,
+                  variations: true,
+                },
+                themes: {
+                  light: {
+                    primary: "#1976D2",
+                    secondary: "#424242",
+                    accent: "#82B1FF",
+                    error: "#FF5252",
+                    info: "#2196F3",
+                    success: "#4CAF50",
+                    warning: "#FB8C00",
+                  },
+                  dark: {
+                    primary: "#2196F3",
+                    secondary: "#424242",
+                    accent: "#FF4081",
+                    error: "#FF5252",
+                    info: "#2196F3",
+                    success: "#4CAF50",
+                    warning: "#FB8C00",
+                  },
+                },
+              },
+            };
 
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/services/application/index.ts":
+          /*!*******************************************!*\
+  !*** ./src/services/application/index.ts ***!
+  \*******************************************/
+          /*! exports provided: Application */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Application",
+              function () {
+                return Application;
+              }
+            );
+            /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../service */ "./src/services/service/index.ts"
+              );
+            var __extends =
+              (undefined && undefined.__extends) ||
+              (function () {
+                var _extendStatics = function extendStatics(d, b) {
+                  _extendStatics =
+                    Object.setPrototypeOf ||
+                    ({
+                      __proto__: [],
+                    } instanceof Array &&
+                      function (d, b) {
+                        d.__proto__ = b;
+                      }) ||
+                    function (d, b) {
+                      for (var p in b) {
+                        if (Object.prototype.hasOwnProperty.call(b, p))
+                          d[p] = b[p];
+                      }
+                    };
+
+                  return _extendStatics(d, b);
+                };
 
-/***/ "./src/services/goto/util.ts":
-/*!***********************************!*\
-  !*** ./src/services/goto/util.ts ***!
-  \***********************************/
-/*! exports provided: getOffset, getContainer */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getOffset", function() { return getOffset; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getContainer", function() { return getContainer; });
-// Return target's cumulative offset from the top
-function getOffset(target) {
-  if (typeof target === 'number') {
-    return target;
-  }
+                return function (d, b) {
+                  _extendStatics(d, b);
 
-  var el = $(target);
+                  function __() {
+                    this.constructor = d;
+                  }
 
-  if (!el) {
-    throw typeof target === 'string' ? new Error("Target element \"" + target + "\" not found.") : new TypeError("Target must be a Number/Selector/HTMLElement/VueComponent, received " + type(target) + " instead.");
-  }
+                  d.prototype =
+                    b === null
+                      ? Object.create(b)
+                      : ((__.prototype = b.prototype), new __());
+                };
+              })(); // Extensions
+
+            var Application =
+              /** @class */
+              (function (_super) {
+                __extends(Application, _super);
+
+                function Application() {
+                  var _this =
+                    (_super !== null && _super.apply(this, arguments)) || this;
+
+                  _this.bar = 0;
+                  _this.top = 0;
+                  _this.left = 0;
+                  _this.insetFooter = 0;
+                  _this.right = 0;
+                  _this.bottom = 0;
+                  _this.footer = 0;
+                  _this.application = {
+                    bar: {},
+                    top: {},
+                    left: {},
+                    insetFooter: {},
+                    right: {},
+                    bottom: {},
+                    footer: {},
+                  };
+                  return _this;
+                }
 
-  var totalOffset = 0;
+                Application.prototype.register = function (
+                  uid,
+                  location,
+                  size
+                ) {
+                  var _a;
 
-  while (el) {
-    totalOffset += el.offsetTop;
-    el = el.offsetParent;
-  }
+                  this.application[location] =
+                    ((_a = {}), (_a[uid] = size), _a);
+                  this.update(location);
+                };
 
-  return totalOffset;
-}
-function getContainer(container) {
-  var el = $(container);
-  if (el) return el;
-  throw typeof container === 'string' ? new Error("Container element \"" + container + "\" not found.") : new TypeError("Container must be a Selector/HTMLElement/VueComponent, received " + type(container) + " instead.");
-}
-
-function type(el) {
-  return el == null ? el : el.constructor.name;
-}
-
-function $(el) {
-  if (typeof el === 'string') {
-    return document.querySelector(el);
-  } else if (el && el._isVue) {
-    return el.$el;
-  } else if (el instanceof HTMLElement) {
-    return el;
-  } else {
-    return null;
-  }
-}
+                Application.prototype.unregister = function (uid, location) {
+                  if (this.application[location][uid] == null) return;
+                  delete this.application[location][uid];
+                  this.update(location);
+                };
 
-/***/ }),
+                Application.prototype.update = function (location) {
+                  this[location] = Object.values(
+                    this.application[location]
+                  ).reduce(function (acc, cur) {
+                    return acc + cur;
+                  }, 0);
+                };
 
-/***/ "./src/services/icons/index.ts":
-/*!*************************************!*\
-  !*** ./src/services/icons/index.ts ***!
-  \*************************************/
-/*! exports provided: Icons */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Icons", function() { return Icons; });
-/* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../service */ "./src/services/service/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _presets__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./presets */ "./src/services/icons/presets/index.ts");
-var __extends = undefined && undefined.__extends || function () {
-  var _extendStatics = function extendStatics(d, b) {
-    _extendStatics = Object.setPrototypeOf || {
-      __proto__: []
-    } instanceof Array && function (d, b) {
-      d.__proto__ = b;
-    } || function (d, b) {
-      for (var p in b) {
-        if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
-      }
-    };
+                Application.property = "application";
+                return Application;
+              })(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
 
-    return _extendStatics(d, b);
-  };
+            /***/
+          },
 
-  return function (d, b) {
-    _extendStatics(d, b);
+        /***/ "./src/services/breakpoint/index.ts":
+          /*!******************************************!*\
+  !*** ./src/services/breakpoint/index.ts ***!
+  \******************************************/
+          /*! exports provided: Breakpoint */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Breakpoint",
+              function () {
+                return Breakpoint;
+              }
+            );
+            /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../service */ "./src/services/service/index.ts"
+              );
+            var __extends =
+              (undefined && undefined.__extends) ||
+              (function () {
+                var _extendStatics = function extendStatics(d, b) {
+                  _extendStatics =
+                    Object.setPrototypeOf ||
+                    ({
+                      __proto__: [],
+                    } instanceof Array &&
+                      function (d, b) {
+                        d.__proto__ = b;
+                      }) ||
+                    function (d, b) {
+                      for (var p in b) {
+                        if (Object.prototype.hasOwnProperty.call(b, p))
+                          d[p] = b[p];
+                      }
+                    };
+
+                  return _extendStatics(d, b);
+                };
 
-    function __() {
-      this.constructor = d;
-    }
+                return function (d, b) {
+                  _extendStatics(d, b);
 
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-  };
-}(); // Extensions
+                  function __() {
+                    this.constructor = d;
+                  }
 
+                  d.prototype =
+                    b === null
+                      ? Object.create(b)
+                      : ((__.prototype = b.prototype), new __());
+                };
+              })(); // Extensions
+
+            var Breakpoint =
+              /** @class */
+              (function (_super) {
+                __extends(Breakpoint, _super);
+
+                function Breakpoint(preset) {
+                  var _this = _super.call(this) || this; // Public
+
+                  _this.xs = false;
+                  _this.sm = false;
+                  _this.md = false;
+                  _this.lg = false;
+                  _this.xl = false;
+                  _this.xsOnly = false;
+                  _this.smOnly = false;
+                  _this.smAndDown = false;
+                  _this.smAndUp = false;
+                  _this.mdOnly = false;
+                  _this.mdAndDown = false;
+                  _this.mdAndUp = false;
+                  _this.lgOnly = false;
+                  _this.lgAndDown = false;
+                  _this.lgAndUp = false;
+                  _this.xlOnly = false; // Value is xs to match v2.x functionality
+
+                  _this.name = "xs";
+                  _this.height = 0;
+                  _this.width = 0; // TODO: Add functionality to detect this dynamically in v3
+                  // Value is true to match v2.x functionality
+
+                  _this.mobile = true;
+                  _this.resizeTimeout = 0;
+                  var _a = preset[Breakpoint.property],
+                    mobileBreakpoint = _a.mobileBreakpoint,
+                    scrollBarWidth = _a.scrollBarWidth,
+                    thresholds = _a.thresholds;
+                  _this.mobileBreakpoint = mobileBreakpoint;
+                  _this.scrollBarWidth = scrollBarWidth;
+                  _this.thresholds = thresholds;
+                  return _this;
+                }
 
- // Utilities
+                Breakpoint.prototype.init = function () {
+                  this.update();
+                  /* istanbul ignore if */
 
- // Presets
+                  if (typeof window === "undefined") return;
+                  window.addEventListener("resize", this.onResize.bind(this), {
+                    passive: true,
+                  });
+                };
+                /* eslint-disable-next-line max-statements */
 
+                Breakpoint.prototype.update = function (ssr) {
+                  if (ssr === void 0) {
+                    ssr = false;
+                  }
 
+                  var height = ssr ? 0 : this.getClientHeight();
+                  var width = ssr ? 0 : this.getClientWidth();
+                  var xs = width < this.thresholds.xs;
+                  var sm = width < this.thresholds.sm && !xs;
+                  var md =
+                    width < this.thresholds.md - this.scrollBarWidth &&
+                    !(sm || xs);
+                  var lg =
+                    width < this.thresholds.lg - this.scrollBarWidth &&
+                    !(md || sm || xs);
+                  var xl = width >= this.thresholds.lg - this.scrollBarWidth;
+                  this.height = height;
+                  this.width = width;
+                  this.xs = xs;
+                  this.sm = sm;
+                  this.md = md;
+                  this.lg = lg;
+                  this.xl = xl;
+                  this.xsOnly = xs;
+                  this.smOnly = sm;
+                  this.smAndDown = (xs || sm) && !(md || lg || xl);
+                  this.smAndUp = !xs && (sm || md || lg || xl);
+                  this.mdOnly = md;
+                  this.mdAndDown = (xs || sm || md) && !(lg || xl);
+                  this.mdAndUp = !(xs || sm) && (md || lg || xl);
+                  this.lgOnly = lg;
+                  this.lgAndDown = (xs || sm || md || lg) && !xl;
+                  this.lgAndUp = !(xs || sm || md) && (lg || xl);
+                  this.xlOnly = xl;
+
+                  switch (true) {
+                    case xs:
+                      this.name = "xs";
+                      break;
+
+                    case sm:
+                      this.name = "sm";
+                      break;
+
+                    case md:
+                      this.name = "md";
+                      break;
+
+                    case lg:
+                      this.name = "lg";
+                      break;
+
+                    default:
+                      this.name = "xl";
+                      break;
+                  }
 
-var Icons =
-/** @class */
-function (_super) {
-  __extends(Icons, _super);
+                  if (typeof this.mobileBreakpoint === "number") {
+                    this.mobile = width < parseInt(this.mobileBreakpoint, 10);
+                    return;
+                  }
 
-  function Icons(preset) {
-    var _this = _super.call(this) || this;
+                  var breakpoints = {
+                    xs: 0,
+                    sm: 1,
+                    md: 2,
+                    lg: 3,
+                    xl: 4,
+                  };
+                  var current = breakpoints[this.name];
+                  var max = breakpoints[this.mobileBreakpoint];
+                  this.mobile = current <= max;
+                };
 
-    var _a = preset[Icons.property],
-        iconfont = _a.iconfont,
-        values = _a.values;
-    _this.iconfont = iconfont;
-    _this.values = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["mergeDeep"])(_presets__WEBPACK_IMPORTED_MODULE_2__["default"][iconfont], values);
-    return _this;
-  }
+                Breakpoint.prototype.onResize = function () {
+                  clearTimeout(this.resizeTimeout); // Added debounce to match what
+                  // v-resize used to do but was
+                  // removed due to a memory leak
+                  // https://github.com/vuetifyjs/vuetify/pull/2997
+
+                  this.resizeTimeout = window.setTimeout(
+                    this.update.bind(this),
+                    200
+                  );
+                }; // Cross-browser support as described in:
+                // https://stackoverflow.com/questions/1248081
+
+                Breakpoint.prototype.getClientWidth = function () {
+                  /* istanbul ignore if */
+                  if (typeof document === "undefined") return 0; // SSR
+
+                  return Math.max(
+                    document.documentElement.clientWidth,
+                    window.innerWidth || 0
+                  );
+                };
 
-  Icons.property = 'icons';
-  return Icons;
-}(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
+                Breakpoint.prototype.getClientHeight = function () {
+                  /* istanbul ignore if */
+                  if (typeof document === "undefined") return 0; // SSR
 
+                  return Math.max(
+                    document.documentElement.clientHeight,
+                    window.innerHeight || 0
+                  );
+                };
 
+                Breakpoint.property = "breakpoint";
+                return Breakpoint;
+              })(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/services/icons/presets/fa-svg.ts":
-/*!**********************************************!*\
-  !*** ./src/services/icons/presets/fa-svg.ts ***!
+        /***/ "./src/services/goto/easing-patterns.ts":
+          /*!**********************************************!*\
+  !*** ./src/services/goto/easing-patterns.ts ***!
   \**********************************************/
-/*! exports provided: convertToComponentDeclarations, default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertToComponentDeclarations", function() { return convertToComponentDeclarations; });
-/* harmony import */ var _fa__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./fa */ "./src/services/icons/presets/fa.ts");
-
-function convertToComponentDeclarations(component, iconSet) {
-  var result = {};
-
-  for (var key in iconSet) {
-    result[key] = {
-      component: component,
-      props: {
-        icon: iconSet[key].split(' fa-')
-      }
-    };
-  }
+          /*! exports provided: linear, easeInQuad, easeOutQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, easeInOutQuart, easeInQuint, easeOutQuint, easeInOutQuint */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "linear",
+              function () {
+                return linear;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInQuad",
+              function () {
+                return easeInQuad;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeOutQuad",
+              function () {
+                return easeOutQuad;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInOutQuad",
+              function () {
+                return easeInOutQuad;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInCubic",
+              function () {
+                return easeInCubic;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeOutCubic",
+              function () {
+                return easeOutCubic;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInOutCubic",
+              function () {
+                return easeInOutCubic;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInQuart",
+              function () {
+                return easeInQuart;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeOutQuart",
+              function () {
+                return easeOutQuart;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInOutQuart",
+              function () {
+                return easeInOutQuart;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInQuint",
+              function () {
+                return easeInQuint;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeOutQuint",
+              function () {
+                return easeOutQuint;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "easeInOutQuint",
+              function () {
+                return easeInOutQuint;
+              }
+            );
+            // linear
+            var linear = function linear(t) {
+              return t;
+            }; // accelerating from zero velocity
+
+            var easeInQuad = function easeInQuad(t) {
+              return Math.pow(t, 2);
+            }; // decelerating to zero velocity
+
+            var easeOutQuad = function easeOutQuad(t) {
+              return t * (2 - t);
+            }; // acceleration until halfway, then deceleration
+
+            var easeInOutQuad = function easeInOutQuad(t) {
+              return t < 0.5 ? 2 * Math.pow(t, 2) : -1 + (4 - 2 * t) * t;
+            }; // accelerating from zero velocity
+
+            var easeInCubic = function easeInCubic(t) {
+              return Math.pow(t, 3);
+            }; // decelerating to zero velocity
+
+            var easeOutCubic = function easeOutCubic(t) {
+              return Math.pow(--t, 3) + 1;
+            }; // acceleration until halfway, then deceleration
+
+            var easeInOutCubic = function easeInOutCubic(t) {
+              return t < 0.5
+                ? 4 * Math.pow(t, 3)
+                : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
+            }; // accelerating from zero velocity
+
+            var easeInQuart = function easeInQuart(t) {
+              return Math.pow(t, 4);
+            }; // decelerating to zero velocity
+
+            var easeOutQuart = function easeOutQuart(t) {
+              return 1 - Math.pow(--t, 4);
+            }; // acceleration until halfway, then deceleration
+
+            var easeInOutQuart = function easeInOutQuart(t) {
+              return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;
+            }; // accelerating from zero velocity
+
+            var easeInQuint = function easeInQuint(t) {
+              return Math.pow(t, 5);
+            }; // decelerating to zero velocity
+
+            var easeOutQuint = function easeOutQuint(t) {
+              return 1 + Math.pow(--t, 5);
+            }; // acceleration until halfway, then deceleration
+
+            var easeInOutQuint = function easeInOutQuint(t) {
+              return t < 0.5 ? 16 * Math.pow(t, 5) : 1 + 16 * Math.pow(--t, 5);
+            };
 
-  return result;
-}
-/* harmony default export */ __webpack_exports__["default"] = (convertToComponentDeclarations('font-awesome-icon', _fa__WEBPACK_IMPORTED_MODULE_0__["default"]));
+            /***/
+          },
 
-/***/ }),
+        /***/ "./src/services/goto/index.ts":
+          /*!************************************!*\
+  !*** ./src/services/goto/index.ts ***!
+  \************************************/
+          /*! exports provided: default, Goto */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return goTo;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Goto",
+              function () {
+                return Goto;
+              }
+            );
+            /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../service */ "./src/services/service/index.ts"
+              );
+            /* harmony import */ var _easing_patterns__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./easing-patterns */ "./src/services/goto/easing-patterns.ts"
+              );
+            /* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! ./util */ "./src/services/goto/util.ts");
+            var __extends =
+              (undefined && undefined.__extends) ||
+              (function () {
+                var _extendStatics = function extendStatics(d, b) {
+                  _extendStatics =
+                    Object.setPrototypeOf ||
+                    ({
+                      __proto__: [],
+                    } instanceof Array &&
+                      function (d, b) {
+                        d.__proto__ = b;
+                      }) ||
+                    function (d, b) {
+                      for (var p in b) {
+                        if (Object.prototype.hasOwnProperty.call(b, p))
+                          d[p] = b[p];
+                      }
+                    };
+
+                  return _extendStatics(d, b);
+                };
 
-/***/ "./src/services/icons/presets/fa.ts":
-/*!******************************************!*\
-  !*** ./src/services/icons/presets/fa.ts ***!
-  \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var icons = {
-  complete: 'fas fa-check',
-  cancel: 'fas fa-times-circle',
-  close: 'fas fa-times',
-  delete: 'fas fa-times-circle',
-  clear: 'fas fa-times-circle',
-  success: 'fas fa-check-circle',
-  info: 'fas fa-info-circle',
-  warning: 'fas fa-exclamation',
-  error: 'fas fa-exclamation-triangle',
-  prev: 'fas fa-chevron-left',
-  next: 'fas fa-chevron-right',
-  checkboxOn: 'fas fa-check-square',
-  checkboxOff: 'far fa-square',
-  checkboxIndeterminate: 'fas fa-minus-square',
-  delimiter: 'fas fa-circle',
-  sort: 'fas fa-sort-up',
-  expand: 'fas fa-chevron-down',
-  menu: 'fas fa-bars',
-  subgroup: 'fas fa-caret-down',
-  dropdown: 'fas fa-caret-down',
-  radioOn: 'far fa-dot-circle',
-  radioOff: 'far fa-circle',
-  edit: 'fas fa-edit',
-  ratingEmpty: 'far fa-star',
-  ratingFull: 'fas fa-star',
-  ratingHalf: 'fas fa-star-half',
-  loading: 'fas fa-sync',
-  first: 'fas fa-step-backward',
-  last: 'fas fa-step-forward',
-  unfold: 'fas fa-arrows-alt-v',
-  file: 'fas fa-paperclip',
-  plus: 'fas fa-plus',
-  minus: 'fas fa-minus'
-};
-/* harmony default export */ __webpack_exports__["default"] = (icons);
-
-/***/ }),
-
-/***/ "./src/services/icons/presets/fa4.ts":
-/*!*******************************************!*\
-  !*** ./src/services/icons/presets/fa4.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var icons = {
-  complete: 'fa fa-check',
-  cancel: 'fa fa-times-circle',
-  close: 'fa fa-times',
-  delete: 'fa fa-times-circle',
-  clear: 'fa fa-times-circle',
-  success: 'fa fa-check-circle',
-  info: 'fa fa-info-circle',
-  warning: 'fa fa-exclamation',
-  error: 'fa fa-exclamation-triangle',
-  prev: 'fa fa-chevron-left',
-  next: 'fa fa-chevron-right',
-  checkboxOn: 'fa fa-check-square',
-  checkboxOff: 'fa fa-square-o',
-  checkboxIndeterminate: 'fa fa-minus-square',
-  delimiter: 'fa fa-circle',
-  sort: 'fa fa-sort-up',
-  expand: 'fa fa-chevron-down',
-  menu: 'fa fa-bars',
-  subgroup: 'fa fa-caret-down',
-  dropdown: 'fa fa-caret-down',
-  radioOn: 'fa fa-dot-circle-o',
-  radioOff: 'fa fa-circle-o',
-  edit: 'fa fa-pencil',
-  ratingEmpty: 'fa fa-star-o',
-  ratingFull: 'fa fa-star',
-  ratingHalf: 'fa fa-star-half-o',
-  loading: 'fa fa-refresh',
-  first: 'fa fa-step-backward',
-  last: 'fa fa-step-forward',
-  unfold: 'fa fa-angle-double-down',
-  file: 'fa fa-paperclip',
-  plus: 'fa fa-plus',
-  minus: 'fa fa-minus'
-};
-/* harmony default export */ __webpack_exports__["default"] = (icons);
-
-/***/ }),
-
-/***/ "./src/services/icons/presets/index.ts":
-/*!*********************************************!*\
-  !*** ./src/services/icons/presets/index.ts ***!
-  \*********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                return function (d, b) {
+                  _extendStatics(d, b);
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _mdi_svg__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mdi-svg */ "./src/services/icons/presets/mdi-svg.ts");
-/* harmony import */ var _md__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./md */ "./src/services/icons/presets/md.ts");
-/* harmony import */ var _mdi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mdi */ "./src/services/icons/presets/mdi.ts");
-/* harmony import */ var _fa__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fa */ "./src/services/icons/presets/fa.ts");
-/* harmony import */ var _fa4__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fa4 */ "./src/services/icons/presets/fa4.ts");
-/* harmony import */ var _fa_svg__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fa-svg */ "./src/services/icons/presets/fa-svg.ts");
+                  function __() {
+                    this.constructor = d;
+                  }
 
+                  d.prototype =
+                    b === null
+                      ? Object.create(b)
+                      : ((__.prototype = b.prototype), new __());
+                };
+              })();
+
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              }; // Extensions
+
+            // Utilities
+
+            function goTo(_target, _settings) {
+              if (_settings === void 0) {
+                _settings = {};
+              }
 
+              var settings = __assign(
+                {
+                  container:
+                    document.scrollingElement ||
+                    document.body ||
+                    document.documentElement,
+                  duration: 500,
+                  offset: 0,
+                  easing: "easeInOutCubic",
+                  appOffset: true,
+                },
+                _settings
+              );
+
+              var container = Object(
+                _util__WEBPACK_IMPORTED_MODULE_2__["getContainer"]
+              )(settings.container);
+              /* istanbul ignore else */
+
+              if (settings.appOffset && goTo.framework.application) {
+                var isDrawer = container.classList.contains(
+                  "v-navigation-drawer"
+                );
+                var isClipped = container.classList.contains(
+                  "v-navigation-drawer--clipped"
+                );
+                var _a = goTo.framework.application,
+                  bar = _a.bar,
+                  top = _a.top;
+                settings.offset += bar;
+                /* istanbul ignore else */
+
+                if (!isDrawer || isClipped) settings.offset += top;
+              }
 
+              var startTime = performance.now();
+              var targetLocation;
+
+              if (typeof _target === "number") {
+                targetLocation =
+                  Object(_util__WEBPACK_IMPORTED_MODULE_2__["getOffset"])(
+                    _target
+                  ) - settings.offset;
+              } else {
+                targetLocation =
+                  Object(_util__WEBPACK_IMPORTED_MODULE_2__["getOffset"])(
+                    _target
+                  ) -
+                  Object(_util__WEBPACK_IMPORTED_MODULE_2__["getOffset"])(
+                    container
+                  ) -
+                  settings.offset;
+              }
 
+              var startLocation = container.scrollTop;
+              if (targetLocation === startLocation)
+                return Promise.resolve(targetLocation);
+              var ease =
+                typeof settings.easing === "function"
+                  ? settings.easing
+                  : _easing_patterns__WEBPACK_IMPORTED_MODULE_1__[
+                      settings.easing
+                    ];
+              /* istanbul ignore else */
+
+              if (!ease)
+                throw new TypeError(
+                  'Easing function "' + settings.easing + '" not found.'
+                ); // Cannot be tested properly in jsdom
+
+              /* istanbul ignore next */
+
+              return new Promise(function (resolve) {
+                return requestAnimationFrame(function step(currentTime) {
+                  var timeElapsed = currentTime - startTime;
+                  var progress = Math.abs(
+                    settings.duration
+                      ? Math.min(timeElapsed / settings.duration, 1)
+                      : 1
+                  );
+                  container.scrollTop = Math.floor(
+                    startLocation +
+                      (targetLocation - startLocation) * ease(progress)
+                  );
+                  var clientHeight =
+                    container === document.body
+                      ? document.documentElement.clientHeight
+                      : container.clientHeight;
+
+                  if (
+                    progress === 1 ||
+                    clientHeight + container.scrollTop ===
+                      container.scrollHeight
+                  ) {
+                    return resolve(targetLocation);
+                  }
 
+                  requestAnimationFrame(step);
+                });
+              });
+            }
+            goTo.framework = {};
 
-/* harmony default export */ __webpack_exports__["default"] = (Object.freeze({
-  mdiSvg: _mdi_svg__WEBPACK_IMPORTED_MODULE_0__["default"],
-  md: _md__WEBPACK_IMPORTED_MODULE_1__["default"],
-  mdi: _mdi__WEBPACK_IMPORTED_MODULE_2__["default"],
-  fa: _fa__WEBPACK_IMPORTED_MODULE_3__["default"],
-  fa4: _fa4__WEBPACK_IMPORTED_MODULE_4__["default"],
-  faSvg: _fa_svg__WEBPACK_IMPORTED_MODULE_5__["default"]
-}));
+            goTo.init = function () {};
 
-/***/ }),
+            var Goto =
+              /** @class */
+              (function (_super) {
+                __extends(Goto, _super);
 
-/***/ "./src/services/icons/presets/md.ts":
-/*!******************************************!*\
-  !*** ./src/services/icons/presets/md.ts ***!
-  \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var icons = {
-  complete: 'check',
-  cancel: 'cancel',
-  close: 'close',
-  delete: 'cancel',
-  clear: 'clear',
-  success: 'check_circle',
-  info: 'info',
-  warning: 'priority_high',
-  error: 'warning',
-  prev: 'chevron_left',
-  next: 'chevron_right',
-  checkboxOn: 'check_box',
-  checkboxOff: 'check_box_outline_blank',
-  checkboxIndeterminate: 'indeterminate_check_box',
-  delimiter: 'fiber_manual_record',
-  sort: 'arrow_upward',
-  expand: 'keyboard_arrow_down',
-  menu: 'menu',
-  subgroup: 'arrow_drop_down',
-  dropdown: 'arrow_drop_down',
-  radioOn: 'radio_button_checked',
-  radioOff: 'radio_button_unchecked',
-  edit: 'edit',
-  ratingEmpty: 'star_border',
-  ratingFull: 'star',
-  ratingHalf: 'star_half',
-  loading: 'cached',
-  first: 'first_page',
-  last: 'last_page',
-  unfold: 'unfold_more',
-  file: 'attach_file',
-  plus: 'add',
-  minus: 'remove'
-};
-/* harmony default export */ __webpack_exports__["default"] = (icons);
-
-/***/ }),
-
-/***/ "./src/services/icons/presets/mdi-svg.ts":
-/*!***********************************************!*\
-  !*** ./src/services/icons/presets/mdi-svg.ts ***!
-  \***********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var icons = {
-  complete: 'M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z',
-  cancel: 'M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z',
-  close: 'M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z',
-  delete: 'M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z',
-  clear: 'M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z',
-  success: 'M12,2C17.52,2 22,6.48 22,12C22,17.52 17.52,22 12,22C6.48,22 2,17.52 2,12C2,6.48 6.48,2 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z',
-  info: 'M13,9H11V7H13M13,17H11V11H13M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z',
-  warning: 'M11,4.5H13V15.5H11V4.5M13,17.5V19.5H11V17.5H13Z',
-  error: 'M13,14H11V10H13M13,18H11V16H13M1,21H23L12,2L1,21Z',
-  prev: 'M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z',
-  next: 'M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z',
-  checkboxOn: 'M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z',
-  checkboxOff: 'M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z',
-  checkboxIndeterminate: 'M17,13H7V11H17M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z',
-  delimiter: 'M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z',
-  sort: 'M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z',
-  expand: 'M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z',
-  menu: 'M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z',
-  subgroup: 'M7,10L12,15L17,10H7Z',
-  dropdown: 'M7,10L12,15L17,10H7Z',
-  radioOn: 'M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M12,7C9.24,7 7,9.24 7,12C7,14.76 9.24,17 12,17C14.76,17 17,14.76 17,12C17,9.24 14.76,7 12,7Z',
-  radioOff: 'M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z',
-  edit: 'M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z',
-  ratingEmpty: 'M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z',
-  ratingFull: 'M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z',
-  ratingHalf: 'M12,15.4V6.1L13.71,10.13L18.09,10.5L14.77,13.39L15.76,17.67M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z',
-  loading: 'M19,8L15,12H18C18,15.31 15.31,18 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20C16.42,20 20,16.42 20,12H23M6,12C6,8.69 8.69,6 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4C7.58,4 4,7.58 4,12H1L5,16L9,12',
-  first: 'M18.41,16.59L13.82,12L18.41,7.41L17,6L11,12L17,18L18.41,16.59M6,6H8V18H6V6Z',
-  last: 'M5.59,7.41L10.18,12L5.59,16.59L7,18L13,12L7,6L5.59,7.41M16,6H18V18H16V6Z',
-  unfold: 'M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z',
-  file: 'M16.5,6V17.5C16.5,19.71 14.71,21.5 12.5,21.5C10.29,21.5 8.5,19.71 8.5,17.5V5C8.5,3.62 9.62,2.5 11,2.5C12.38,2.5 13.5,3.62 13.5,5V15.5C13.5,16.05 13.05,16.5 12.5,16.5C11.95,16.5 11.5,16.05 11.5,15.5V6H10V15.5C10,16.88 11.12,18 12.5,18C13.88,18 15,16.88 15,15.5V5C15,2.79 13.21,1 11,1C8.79,1 7,2.79 7,5V17.5C7,20.54 9.46,23 12.5,23C15.54,23 18,20.54 18,17.5V6H16.5Z',
-  plus: 'M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z',
-  minus: 'M19,13H5V11H19V13Z'
-};
-/* harmony default export */ __webpack_exports__["default"] = (icons);
-
-/***/ }),
-
-/***/ "./src/services/icons/presets/mdi.ts":
-/*!*******************************************!*\
-  !*** ./src/services/icons/presets/mdi.ts ***!
-  \*******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var icons = {
-  complete: 'mdi-check',
-  cancel: 'mdi-close-circle',
-  close: 'mdi-close',
-  delete: 'mdi-close-circle',
-  clear: 'mdi-close',
-  success: 'mdi-check-circle',
-  info: 'mdi-information',
-  warning: 'mdi-exclamation',
-  error: 'mdi-alert',
-  prev: 'mdi-chevron-left',
-  next: 'mdi-chevron-right',
-  checkboxOn: 'mdi-checkbox-marked',
-  checkboxOff: 'mdi-checkbox-blank-outline',
-  checkboxIndeterminate: 'mdi-minus-box',
-  delimiter: 'mdi-circle',
-  sort: 'mdi-arrow-up',
-  expand: 'mdi-chevron-down',
-  menu: 'mdi-menu',
-  subgroup: 'mdi-menu-down',
-  dropdown: 'mdi-menu-down',
-  radioOn: 'mdi-radiobox-marked',
-  radioOff: 'mdi-radiobox-blank',
-  edit: 'mdi-pencil',
-  ratingEmpty: 'mdi-star-outline',
-  ratingFull: 'mdi-star',
-  ratingHalf: 'mdi-star-half-full',
-  loading: 'mdi-cached',
-  first: 'mdi-page-first',
-  last: 'mdi-page-last',
-  unfold: 'mdi-unfold-more-horizontal',
-  file: 'mdi-paperclip',
-  plus: 'mdi-plus',
-  minus: 'mdi-minus'
-};
-/* harmony default export */ __webpack_exports__["default"] = (icons);
-
-/***/ }),
-
-/***/ "./src/services/index.ts":
-/*!*******************************!*\
-  !*** ./src/services/index.ts ***!
-  \*******************************/
-/*! exports provided: Application, Breakpoint, Goto, Icons, Lang, Presets, Theme */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                function Goto() {
+                  var _this = _super.call(this) || this;
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _application__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./application */ "./src/services/application/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Application", function() { return _application__WEBPACK_IMPORTED_MODULE_0__["Application"]; });
+                  return goTo;
+                }
 
-/* harmony import */ var _breakpoint__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./breakpoint */ "./src/services/breakpoint/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Breakpoint", function() { return _breakpoint__WEBPACK_IMPORTED_MODULE_1__["Breakpoint"]; });
+                Goto.property = "goTo";
+                return Goto;
+              })(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
 
-/* harmony import */ var _goto__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./goto */ "./src/services/goto/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Goto", function() { return _goto__WEBPACK_IMPORTED_MODULE_2__["Goto"]; });
+            /***/
+          },
 
-/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icons */ "./src/services/icons/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Icons", function() { return _icons__WEBPACK_IMPORTED_MODULE_3__["Icons"]; });
+        /***/ "./src/services/goto/util.ts":
+          /*!***********************************!*\
+  !*** ./src/services/goto/util.ts ***!
+  \***********************************/
+          /*! exports provided: getOffset, getContainer */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getOffset",
+              function () {
+                return getOffset;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getContainer",
+              function () {
+                return getContainer;
+              }
+            );
+            // Return target's cumulative offset from the top
+            function getOffset(target) {
+              if (typeof target === "number") {
+                return target;
+              }
 
-/* harmony import */ var _lang__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lang */ "./src/services/lang/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Lang", function() { return _lang__WEBPACK_IMPORTED_MODULE_4__["Lang"]; });
+              var el = $(target);
 
-/* harmony import */ var _presets__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./presets */ "./src/services/presets/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Presets", function() { return _presets__WEBPACK_IMPORTED_MODULE_5__["Presets"]; });
+              if (!el) {
+                throw typeof target === "string"
+                  ? new Error('Target element "' + target + '" not found.')
+                  : new TypeError(
+                      "Target must be a Number/Selector/HTMLElement/VueComponent, received " +
+                        type(target) +
+                        " instead."
+                    );
+              }
 
-/* harmony import */ var _theme__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./theme */ "./src/services/theme/index.ts");
-/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Theme", function() { return _theme__WEBPACK_IMPORTED_MODULE_6__["Theme"]; });
+              var totalOffset = 0;
 
+              while (el) {
+                totalOffset += el.offsetTop;
+                el = el.offsetParent;
+              }
 
+              return totalOffset;
+            }
+            function getContainer(container) {
+              var el = $(container);
+              if (el) return el;
+              throw typeof container === "string"
+                ? new Error('Container element "' + container + '" not found.')
+                : new TypeError(
+                    "Container must be a Selector/HTMLElement/VueComponent, received " +
+                      type(container) +
+                      " instead."
+                  );
+            }
 
+            function type(el) {
+              return el == null ? el : el.constructor.name;
+            }
 
+            function $(el) {
+              if (typeof el === "string") {
+                return document.querySelector(el);
+              } else if (el && el._isVue) {
+                return el.$el;
+              } else if (el instanceof HTMLElement) {
+                return el;
+              } else {
+                return null;
+              }
+            }
 
+            /***/
+          },
 
+        /***/ "./src/services/icons/index.ts":
+          /*!*************************************!*\
+  !*** ./src/services/icons/index.ts ***!
+  \*************************************/
+          /*! exports provided: Icons */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Icons",
+              function () {
+                return Icons;
+              }
+            );
+            /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../service */ "./src/services/service/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _presets__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./presets */ "./src/services/icons/presets/index.ts"
+              );
+            var __extends =
+              (undefined && undefined.__extends) ||
+              (function () {
+                var _extendStatics = function extendStatics(d, b) {
+                  _extendStatics =
+                    Object.setPrototypeOf ||
+                    ({
+                      __proto__: [],
+                    } instanceof Array &&
+                      function (d, b) {
+                        d.__proto__ = b;
+                      }) ||
+                    function (d, b) {
+                      for (var p in b) {
+                        if (Object.prototype.hasOwnProperty.call(b, p))
+                          d[p] = b[p];
+                      }
+                    };
+
+                  return _extendStatics(d, b);
+                };
 
+                return function (d, b) {
+                  _extendStatics(d, b);
 
+                  function __() {
+                    this.constructor = d;
+                  }
 
-/***/ }),
+                  d.prototype =
+                    b === null
+                      ? Object.create(b)
+                      : ((__.prototype = b.prototype), new __());
+                };
+              })(); // Extensions
+
+            // Utilities
+
+            // Presets
+
+            var Icons =
+              /** @class */
+              (function (_super) {
+                __extends(Icons, _super);
+
+                function Icons(preset) {
+                  var _this = _super.call(this) || this;
+
+                  var _a = preset[Icons.property],
+                    iconfont = _a.iconfont,
+                    values = _a.values;
+                  _this.iconfont = iconfont;
+                  _this.values = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_1__["mergeDeep"]
+                  )(
+                    _presets__WEBPACK_IMPORTED_MODULE_2__["default"][iconfont],
+                    values
+                  );
+                  return _this;
+                }
 
-/***/ "./src/services/lang/index.ts":
-/*!************************************!*\
-  !*** ./src/services/lang/index.ts ***!
-  \************************************/
-/*! exports provided: Lang */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Lang", function() { return Lang; });
-/* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../service */ "./src/services/service/index.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-var __extends = undefined && undefined.__extends || function () {
-  var _extendStatics = function extendStatics(d, b) {
-    _extendStatics = Object.setPrototypeOf || {
-      __proto__: []
-    } instanceof Array && function (d, b) {
-      d.__proto__ = b;
-    } || function (d, b) {
-      for (var p in b) {
-        if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
-      }
-    };
-
-    return _extendStatics(d, b);
-  };
-
-  return function (d, b) {
-    _extendStatics(d, b);
-
-    function __() {
-      this.constructor = d;
-    }
-
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-  };
-}();
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+                Icons.property = "icons";
+                return Icons;
+              })(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
 
-  return ar;
-};
+            /***/
+          },
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+        /***/ "./src/services/icons/presets/fa-svg.ts":
+          /*!**********************************************!*\
+  !*** ./src/services/icons/presets/fa-svg.ts ***!
+  \**********************************************/
+          /*! exports provided: convertToComponentDeclarations, default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "convertToComponentDeclarations",
+              function () {
+                return convertToComponentDeclarations;
+              }
+            );
+            /* harmony import */ var _fa__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./fa */ "./src/services/icons/presets/fa.ts"
+              );
+
+            function convertToComponentDeclarations(component, iconSet) {
+              var result = {};
+
+              for (var key in iconSet) {
+                result[key] = {
+                  component: component,
+                  props: {
+                    icon: iconSet[key].split(" fa-"),
+                  },
+                };
+              }
 
-  return ar;
-}; // Extensions
+              return result;
+            }
+            /* harmony default export */ __webpack_exports__["default"] =
+              convertToComponentDeclarations(
+                "font-awesome-icon",
+                _fa__WEBPACK_IMPORTED_MODULE_0__["default"]
+              );
 
+            /***/
+          },
 
- // Utilities
+        /***/ "./src/services/icons/presets/fa.ts":
+          /*!******************************************!*\
+  !*** ./src/services/icons/presets/fa.ts ***!
+  \******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            var icons = {
+              complete: "fas fa-check",
+              cancel: "fas fa-times-circle",
+              close: "fas fa-times",
+              delete: "fas fa-times-circle",
+              clear: "fas fa-times-circle",
+              success: "fas fa-check-circle",
+              info: "fas fa-info-circle",
+              warning: "fas fa-exclamation",
+              error: "fas fa-exclamation-triangle",
+              prev: "fas fa-chevron-left",
+              next: "fas fa-chevron-right",
+              checkboxOn: "fas fa-check-square",
+              checkboxOff: "far fa-square",
+              checkboxIndeterminate: "fas fa-minus-square",
+              delimiter: "fas fa-circle",
+              sort: "fas fa-sort-up",
+              expand: "fas fa-chevron-down",
+              menu: "fas fa-bars",
+              subgroup: "fas fa-caret-down",
+              dropdown: "fas fa-caret-down",
+              radioOn: "far fa-dot-circle",
+              radioOff: "far fa-circle",
+              edit: "fas fa-edit",
+              ratingEmpty: "far fa-star",
+              ratingFull: "fas fa-star",
+              ratingHalf: "fas fa-star-half",
+              loading: "fas fa-sync",
+              first: "fas fa-step-backward",
+              last: "fas fa-step-forward",
+              unfold: "fas fa-arrows-alt-v",
+              file: "fas fa-paperclip",
+              plus: "fas fa-plus",
+              minus: "fas fa-minus",
+            };
+            /* harmony default export */ __webpack_exports__["default"] = icons;
 
+            /***/
+          },
 
+        /***/ "./src/services/icons/presets/fa4.ts":
+          /*!*******************************************!*\
+  !*** ./src/services/icons/presets/fa4.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            var icons = {
+              complete: "fa fa-check",
+              cancel: "fa fa-times-circle",
+              close: "fa fa-times",
+              delete: "fa fa-times-circle",
+              clear: "fa fa-times-circle",
+              success: "fa fa-check-circle",
+              info: "fa fa-info-circle",
+              warning: "fa fa-exclamation",
+              error: "fa fa-exclamation-triangle",
+              prev: "fa fa-chevron-left",
+              next: "fa fa-chevron-right",
+              checkboxOn: "fa fa-check-square",
+              checkboxOff: "fa fa-square-o",
+              checkboxIndeterminate: "fa fa-minus-square",
+              delimiter: "fa fa-circle",
+              sort: "fa fa-sort-up",
+              expand: "fa fa-chevron-down",
+              menu: "fa fa-bars",
+              subgroup: "fa fa-caret-down",
+              dropdown: "fa fa-caret-down",
+              radioOn: "fa fa-dot-circle-o",
+              radioOff: "fa fa-circle-o",
+              edit: "fa fa-pencil",
+              ratingEmpty: "fa fa-star-o",
+              ratingFull: "fa fa-star",
+              ratingHalf: "fa fa-star-half-o",
+              loading: "fa fa-refresh",
+              first: "fa fa-step-backward",
+              last: "fa fa-step-forward",
+              unfold: "fa fa-angle-double-down",
+              file: "fa fa-paperclip",
+              plus: "fa fa-plus",
+              minus: "fa fa-minus",
+            };
+            /* harmony default export */ __webpack_exports__["default"] = icons;
 
-var LANG_PREFIX = '$vuetify.';
-var fallback = Symbol('Lang fallback');
+            /***/
+          },
 
-function getTranslation(locale, key, usingDefault, defaultLocale) {
-  if (usingDefault === void 0) {
-    usingDefault = false;
-  }
+        /***/ "./src/services/icons/presets/index.ts":
+          /*!*********************************************!*\
+  !*** ./src/services/icons/presets/index.ts ***!
+  \*********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _mdi_svg__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./mdi-svg */ "./src/services/icons/presets/mdi-svg.ts"
+              );
+            /* harmony import */ var _md__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./md */ "./src/services/icons/presets/md.ts"
+              );
+            /* harmony import */ var _mdi__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./mdi */ "./src/services/icons/presets/mdi.ts"
+              );
+            /* harmony import */ var _fa__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./fa */ "./src/services/icons/presets/fa.ts"
+              );
+            /* harmony import */ var _fa4__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(
+                /*! ./fa4 */ "./src/services/icons/presets/fa4.ts"
+              );
+            /* harmony import */ var _fa_svg__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./fa-svg */ "./src/services/icons/presets/fa-svg.ts"
+              );
+
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object.freeze({
+                mdiSvg: _mdi_svg__WEBPACK_IMPORTED_MODULE_0__["default"],
+                md: _md__WEBPACK_IMPORTED_MODULE_1__["default"],
+                mdi: _mdi__WEBPACK_IMPORTED_MODULE_2__["default"],
+                fa: _fa__WEBPACK_IMPORTED_MODULE_3__["default"],
+                fa4: _fa4__WEBPACK_IMPORTED_MODULE_4__["default"],
+                faSvg: _fa_svg__WEBPACK_IMPORTED_MODULE_5__["default"],
+              });
 
-  var shortKey = key.replace(LANG_PREFIX, '');
-  var translation = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_1__["getObjectValueByPath"])(locale, shortKey, fallback);
-
-  if (translation === fallback) {
-    if (usingDefault) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_2__["consoleError"])("Translation key \"" + shortKey + "\" not found in fallback");
-      translation = key;
-    } else {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_2__["consoleWarn"])("Translation key \"" + shortKey + "\" not found, falling back to default");
-      translation = getTranslation(defaultLocale, key, true, defaultLocale);
-    }
-  }
+            /***/
+          },
 
-  return translation;
-}
-
-var Lang =
-/** @class */
-function (_super) {
-  __extends(Lang, _super);
-
-  function Lang(preset) {
-    var _this = _super.call(this) || this;
-
-    _this.defaultLocale = 'en';
-    var _a = preset[Lang.property],
-        current = _a.current,
-        locales = _a.locales,
-        t = _a.t;
-    _this.current = current;
-    _this.locales = locales;
-    _this.translator = t || _this.defaultTranslator;
-    return _this;
-  }
+        /***/ "./src/services/icons/presets/md.ts":
+          /*!******************************************!*\
+  !*** ./src/services/icons/presets/md.ts ***!
+  \******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            var icons = {
+              complete: "check",
+              cancel: "cancel",
+              close: "close",
+              delete: "cancel",
+              clear: "clear",
+              success: "check_circle",
+              info: "info",
+              warning: "priority_high",
+              error: "warning",
+              prev: "chevron_left",
+              next: "chevron_right",
+              checkboxOn: "check_box",
+              checkboxOff: "check_box_outline_blank",
+              checkboxIndeterminate: "indeterminate_check_box",
+              delimiter: "fiber_manual_record",
+              sort: "arrow_upward",
+              expand: "keyboard_arrow_down",
+              menu: "menu",
+              subgroup: "arrow_drop_down",
+              dropdown: "arrow_drop_down",
+              radioOn: "radio_button_checked",
+              radioOff: "radio_button_unchecked",
+              edit: "edit",
+              ratingEmpty: "star_border",
+              ratingFull: "star",
+              ratingHalf: "star_half",
+              loading: "cached",
+              first: "first_page",
+              last: "last_page",
+              unfold: "unfold_more",
+              file: "attach_file",
+              plus: "add",
+              minus: "remove",
+            };
+            /* harmony default export */ __webpack_exports__["default"] = icons;
+
+            /***/
+          },
 
-  Lang.prototype.currentLocale = function (key) {
-    var translation = this.locales[this.current];
-    var defaultLocale = this.locales[this.defaultLocale];
-    return getTranslation(translation, key, false, defaultLocale);
-  };
+        /***/ "./src/services/icons/presets/mdi-svg.ts":
+          /*!***********************************************!*\
+  !*** ./src/services/icons/presets/mdi-svg.ts ***!
+  \***********************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            var icons = {
+              complete:
+                "M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z",
+              cancel:
+                "M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z",
+              close:
+                "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z",
+              delete:
+                "M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z",
+              clear:
+                "M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z",
+              success:
+                "M12,2C17.52,2 22,6.48 22,12C22,17.52 17.52,22 12,22C6.48,22 2,17.52 2,12C2,6.48 6.48,2 12,2M11,16.5L18,9.5L16.59,8.09L11,13.67L7.91,10.59L6.5,12L11,16.5Z",
+              info: "M13,9H11V7H13M13,17H11V11H13M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z",
+              warning: "M11,4.5H13V15.5H11V4.5M13,17.5V19.5H11V17.5H13Z",
+              error: "M13,14H11V10H13M13,18H11V16H13M1,21H23L12,2L1,21Z",
+              prev: "M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z",
+              next: "M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z",
+              checkboxOn:
+                "M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z",
+              checkboxOff:
+                "M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z",
+              checkboxIndeterminate:
+                "M17,13H7V11H17M19,3H5C3.89,3 3,3.89 3,5V19C3,20.1 3.9,21 5,21H19C20.1,21 21,20.1 21,19V5C21,3.89 20.1,3 19,3Z",
+              delimiter:
+                "M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z",
+              sort: "M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z",
+              expand:
+                "M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z",
+              menu: "M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z",
+              subgroup: "M7,10L12,15L17,10H7Z",
+              dropdown: "M7,10L12,15L17,10H7Z",
+              radioOn:
+                "M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2M12,7C9.24,7 7,9.24 7,12C7,14.76 9.24,17 12,17C14.76,17 17,14.76 17,12C17,9.24 14.76,7 12,7Z",
+              radioOff:
+                "M12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,16.42 16.42,20 12,20M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2Z",
+              edit: "M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z",
+              ratingEmpty:
+                "M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z",
+              ratingFull:
+                "M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z",
+              ratingHalf:
+                "M12,15.4V6.1L13.71,10.13L18.09,10.5L14.77,13.39L15.76,17.67M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z",
+              loading:
+                "M19,8L15,12H18C18,15.31 15.31,18 12,18C11,18 10.03,17.75 9.2,17.3L7.74,18.76C8.97,19.54 10.43,20 12,20C16.42,20 20,16.42 20,12H23M6,12C6,8.69 8.69,6 12,6C13,6 13.97,6.25 14.8,6.7L16.26,5.24C15.03,4.46 13.57,4 12,4C7.58,4 4,7.58 4,12H1L5,16L9,12",
+              first:
+                "M18.41,16.59L13.82,12L18.41,7.41L17,6L11,12L17,18L18.41,16.59M6,6H8V18H6V6Z",
+              last: "M5.59,7.41L10.18,12L5.59,16.59L7,18L13,12L7,6L5.59,7.41M16,6H18V18H16V6Z",
+              unfold:
+                "M12,18.17L8.83,15L7.42,16.41L12,21L16.59,16.41L15.17,15M12,5.83L15.17,9L16.58,7.59L12,3L7.41,7.59L8.83,9L12,5.83Z",
+              file: "M16.5,6V17.5C16.5,19.71 14.71,21.5 12.5,21.5C10.29,21.5 8.5,19.71 8.5,17.5V5C8.5,3.62 9.62,2.5 11,2.5C12.38,2.5 13.5,3.62 13.5,5V15.5C13.5,16.05 13.05,16.5 12.5,16.5C11.95,16.5 11.5,16.05 11.5,15.5V6H10V15.5C10,16.88 11.12,18 12.5,18C13.88,18 15,16.88 15,15.5V5C15,2.79 13.21,1 11,1C8.79,1 7,2.79 7,5V17.5C7,20.54 9.46,23 12.5,23C15.54,23 18,20.54 18,17.5V6H16.5Z",
+              plus: "M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z",
+              minus: "M19,13H5V11H19V13Z",
+            };
+            /* harmony default export */ __webpack_exports__["default"] = icons;
 
-  Lang.prototype.t = function (key) {
-    var params = [];
+            /***/
+          },
 
-    for (var _i = 1; _i < arguments.length; _i++) {
-      params[_i - 1] = arguments[_i];
-    }
+        /***/ "./src/services/icons/presets/mdi.ts":
+          /*!*******************************************!*\
+  !*** ./src/services/icons/presets/mdi.ts ***!
+  \*******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            var icons = {
+              complete: "mdi-check",
+              cancel: "mdi-close-circle",
+              close: "mdi-close",
+              delete: "mdi-close-circle",
+              clear: "mdi-close",
+              success: "mdi-check-circle",
+              info: "mdi-information",
+              warning: "mdi-exclamation",
+              error: "mdi-alert",
+              prev: "mdi-chevron-left",
+              next: "mdi-chevron-right",
+              checkboxOn: "mdi-checkbox-marked",
+              checkboxOff: "mdi-checkbox-blank-outline",
+              checkboxIndeterminate: "mdi-minus-box",
+              delimiter: "mdi-circle",
+              sort: "mdi-arrow-up",
+              expand: "mdi-chevron-down",
+              menu: "mdi-menu",
+              subgroup: "mdi-menu-down",
+              dropdown: "mdi-menu-down",
+              radioOn: "mdi-radiobox-marked",
+              radioOff: "mdi-radiobox-blank",
+              edit: "mdi-pencil",
+              ratingEmpty: "mdi-star-outline",
+              ratingFull: "mdi-star",
+              ratingHalf: "mdi-star-half-full",
+              loading: "mdi-cached",
+              first: "mdi-page-first",
+              last: "mdi-page-last",
+              unfold: "mdi-unfold-more-horizontal",
+              file: "mdi-paperclip",
+              plus: "mdi-plus",
+              minus: "mdi-minus",
+            };
+            /* harmony default export */ __webpack_exports__["default"] = icons;
 
-    if (!key.startsWith(LANG_PREFIX)) return this.replace(key, params);
-    return this.translator.apply(this, __spread([key], params));
-  };
+            /***/
+          },
 
-  Lang.prototype.defaultTranslator = function (key) {
-    var params = [];
+        /***/ "./src/services/index.ts":
+          /*!*******************************!*\
+  !*** ./src/services/index.ts ***!
+  \*******************************/
+          /*! exports provided: Application, Breakpoint, Goto, Icons, Lang, Presets, Theme */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony import */ var _application__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ./application */ "./src/services/application/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Application",
+              function () {
+                return _application__WEBPACK_IMPORTED_MODULE_0__["Application"];
+              }
+            );
+
+            /* harmony import */ var _breakpoint__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./breakpoint */ "./src/services/breakpoint/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Breakpoint",
+              function () {
+                return _breakpoint__WEBPACK_IMPORTED_MODULE_1__["Breakpoint"];
+              }
+            );
+
+            /* harmony import */ var _goto__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(/*! ./goto */ "./src/services/goto/index.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Goto",
+              function () {
+                return _goto__WEBPACK_IMPORTED_MODULE_2__["Goto"];
+              }
+            );
+
+            /* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ./icons */ "./src/services/icons/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Icons",
+              function () {
+                return _icons__WEBPACK_IMPORTED_MODULE_3__["Icons"];
+              }
+            );
+
+            /* harmony import */ var _lang__WEBPACK_IMPORTED_MODULE_4__ =
+              __webpack_require__(/*! ./lang */ "./src/services/lang/index.ts");
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Lang",
+              function () {
+                return _lang__WEBPACK_IMPORTED_MODULE_4__["Lang"];
+              }
+            );
+
+            /* harmony import */ var _presets__WEBPACK_IMPORTED_MODULE_5__ =
+              __webpack_require__(
+                /*! ./presets */ "./src/services/presets/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Presets",
+              function () {
+                return _presets__WEBPACK_IMPORTED_MODULE_5__["Presets"];
+              }
+            );
+
+            /* harmony import */ var _theme__WEBPACK_IMPORTED_MODULE_6__ =
+              __webpack_require__(
+                /*! ./theme */ "./src/services/theme/index.ts"
+              );
+            /* harmony reexport (safe) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Theme",
+              function () {
+                return _theme__WEBPACK_IMPORTED_MODULE_6__["Theme"];
+              }
+            );
 
-    for (var _i = 1; _i < arguments.length; _i++) {
-      params[_i - 1] = arguments[_i];
-    }
+            /***/
+          },
 
-    return this.replace(this.currentLocale(key), params);
-  };
+        /***/ "./src/services/lang/index.ts":
+          /*!************************************!*\
+  !*** ./src/services/lang/index.ts ***!
+  \************************************/
+          /*! exports provided: Lang */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Lang",
+              function () {
+                return Lang;
+              }
+            );
+            /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../service */ "./src/services/service/index.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            var __extends =
+              (undefined && undefined.__extends) ||
+              (function () {
+                var _extendStatics = function extendStatics(d, b) {
+                  _extendStatics =
+                    Object.setPrototypeOf ||
+                    ({
+                      __proto__: [],
+                    } instanceof Array &&
+                      function (d, b) {
+                        d.__proto__ = b;
+                      }) ||
+                    function (d, b) {
+                      for (var p in b) {
+                        if (Object.prototype.hasOwnProperty.call(b, p))
+                          d[p] = b[p];
+                      }
+                    };
+
+                  return _extendStatics(d, b);
+                };
 
-  Lang.prototype.replace = function (str, params) {
-    return str.replace(/\{(\d+)\}/g, function (match, index) {
-      /* istanbul ignore next */
-      return String(params[+index]);
-    });
-  };
+                return function (d, b) {
+                  _extendStatics(d, b);
 
-  Lang.property = 'lang';
-  return Lang;
-}(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
+                  function __() {
+                    this.constructor = d;
+                  }
 
+                  d.prototype =
+                    b === null
+                      ? Object.create(b)
+                      : ((__.prototype = b.prototype), new __());
+                };
+              })();
+
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ }),
+                return ar;
+              };
 
-/***/ "./src/services/presets/index.ts":
-/*!***************************************!*\
-  !*** ./src/services/presets/index.ts ***!
-  \***************************************/
-/*! exports provided: Presets */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Presets", function() { return Presets; });
-/* harmony import */ var _presets_default__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../presets/default */ "./src/presets/default/index.ts");
-/* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/console */ "./src/util/console.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../service */ "./src/services/service/index.ts");
-var __extends = undefined && undefined.__extends || function () {
-  var _extendStatics = function extendStatics(d, b) {
-    _extendStatics = Object.setPrototypeOf || {
-      __proto__: []
-    } instanceof Array && function (d, b) {
-      d.__proto__ = b;
-    } || function (d, b) {
-      for (var p in b) {
-        if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
-      }
-    };
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-    return _extendStatics(d, b);
-  };
+                return ar;
+              }; // Extensions
 
-  return function (d, b) {
-    _extendStatics(d, b);
+            // Utilities
 
-    function __() {
-      this.constructor = d;
-    }
+            var LANG_PREFIX = "$vuetify.";
+            var fallback = Symbol("Lang fallback");
 
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-  };
-}();
+            function getTranslation(locale, key, usingDefault, defaultLocale) {
+              if (usingDefault === void 0) {
+                usingDefault = false;
+              }
 
-var __rest = undefined && undefined.__rest || function (s, e) {
-  var t = {};
+              var shortKey = key.replace(LANG_PREFIX, "");
+              var translation = Object(
+                _util_helpers__WEBPACK_IMPORTED_MODULE_1__[
+                  "getObjectValueByPath"
+                ]
+              )(locale, shortKey, fallback);
+
+              if (translation === fallback) {
+                if (usingDefault) {
+                  Object(
+                    _util_console__WEBPACK_IMPORTED_MODULE_2__["consoleError"]
+                  )('Translation key "' + shortKey + '" not found in fallback');
+                  translation = key;
+                } else {
+                  Object(
+                    _util_console__WEBPACK_IMPORTED_MODULE_2__["consoleWarn"]
+                  )(
+                    'Translation key "' +
+                      shortKey +
+                      '" not found, falling back to default'
+                  );
+                  translation = getTranslation(
+                    defaultLocale,
+                    key,
+                    true,
+                    defaultLocale
+                  );
+                }
+              }
 
-  for (var p in s) {
-    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
-  }
+              return translation;
+            }
 
-  if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
-    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
-  }
-  return t;
-}; // Preset
+            var Lang =
+              /** @class */
+              (function (_super) {
+                __extends(Lang, _super);
+
+                function Lang(preset) {
+                  var _this = _super.call(this) || this;
+
+                  _this.defaultLocale = "en";
+                  var _a = preset[Lang.property],
+                    current = _a.current,
+                    locales = _a.locales,
+                    t = _a.t;
+                  _this.current = current;
+                  _this.locales = locales;
+                  _this.translator = t || _this.defaultTranslator;
+                  return _this;
+                }
 
+                Lang.prototype.currentLocale = function (key) {
+                  var translation = this.locales[this.current];
+                  var defaultLocale = this.locales[this.defaultLocale];
+                  return getTranslation(translation, key, false, defaultLocale);
+                };
 
- // Utilities
+                Lang.prototype.t = function (key) {
+                  var params = [];
 
+                  for (var _i = 1; _i < arguments.length; _i++) {
+                    params[_i - 1] = arguments[_i];
+                  }
 
+                  if (!key.startsWith(LANG_PREFIX))
+                    return this.replace(key, params);
+                  return this.translator.apply(this, __spread([key], params));
+                };
 
+                Lang.prototype.defaultTranslator = function (key) {
+                  var params = [];
 
+                  for (var _i = 1; _i < arguments.length; _i++) {
+                    params[_i - 1] = arguments[_i];
+                  }
 
-var Presets =
-/** @class */
-function (_super) {
-  __extends(Presets, _super);
+                  return this.replace(this.currentLocale(key), params);
+                };
 
-  function Presets(parentPreset, parent) {
-    var _this = _super.call(this) || this; // The default preset
+                Lang.prototype.replace = function (str, params) {
+                  return str.replace(/\{(\d+)\}/g, function (match, index) {
+                    /* istanbul ignore next */
+                    return String(params[+index]);
+                  });
+                };
 
+                Lang.property = "lang";
+                return Lang;
+              })(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
 
-    var defaultPreset = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["mergeDeep"])({}, _presets_default__WEBPACK_IMPORTED_MODULE_0__["preset"]); // The user provided preset
+            /***/
+          },
 
-    var userPreset = parent.userPreset; // The user provided global preset
+        /***/ "./src/services/presets/index.ts":
+          /*!***************************************!*\
+  !*** ./src/services/presets/index.ts ***!
+  \***************************************/
+          /*! exports provided: Presets */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Presets",
+              function () {
+                return Presets;
+              }
+            );
+            /* harmony import */ var _presets_default__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../presets/default */ "./src/presets/default/index.ts"
+              );
+            /* harmony import */ var _util_console__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/console */ "./src/util/console.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(
+                /*! ../service */ "./src/services/service/index.ts"
+              );
+            var __extends =
+              (undefined && undefined.__extends) ||
+              (function () {
+                var _extendStatics = function extendStatics(d, b) {
+                  _extendStatics =
+                    Object.setPrototypeOf ||
+                    ({
+                      __proto__: [],
+                    } instanceof Array &&
+                      function (d, b) {
+                        d.__proto__ = b;
+                      }) ||
+                    function (d, b) {
+                      for (var p in b) {
+                        if (Object.prototype.hasOwnProperty.call(b, p))
+                          d[p] = b[p];
+                      }
+                    };
+
+                  return _extendStatics(d, b);
+                };
 
-    var _a = userPreset.preset,
-        globalPreset = _a === void 0 ? {} : _a,
-        preset = __rest(userPreset, ["preset"]);
+                return function (d, b) {
+                  _extendStatics(d, b);
 
-    if (globalPreset.preset != null) {
-      Object(_util_console__WEBPACK_IMPORTED_MODULE_1__["consoleWarn"])('Global presets do not support the **preset** option, it can be safely omitted');
-    }
+                  function __() {
+                    this.constructor = d;
+                  }
 
-    parent.preset = Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["mergeDeep"])(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["mergeDeep"])(defaultPreset, globalPreset), preset);
-    return _this;
-  }
+                  d.prototype =
+                    b === null
+                      ? Object.create(b)
+                      : ((__.prototype = b.prototype), new __());
+                };
+              })();
+
+            var __rest =
+              (undefined && undefined.__rest) ||
+              function (s, e) {
+                var t = {};
+
+                for (var p in s) {
+                  if (
+                    Object.prototype.hasOwnProperty.call(s, p) &&
+                    e.indexOf(p) < 0
+                  )
+                    t[p] = s[p];
+                }
 
-  Presets.property = 'presets';
-  return Presets;
-}(_service__WEBPACK_IMPORTED_MODULE_3__["Service"]);
+                if (
+                  s != null &&
+                  typeof Object.getOwnPropertySymbols === "function"
+                )
+                  for (
+                    var i = 0, p = Object.getOwnPropertySymbols(s);
+                    i < p.length;
+                    i++
+                  ) {
+                    if (
+                      e.indexOf(p[i]) < 0 &&
+                      Object.prototype.propertyIsEnumerable.call(s, p[i])
+                    )
+                      t[p[i]] = s[p[i]];
+                  }
+                return t;
+              }; // Preset
+
+            // Utilities
+
+            var Presets =
+              /** @class */
+              (function (_super) {
+                __extends(Presets, _super);
+
+                function Presets(parentPreset, parent) {
+                  var _this = _super.call(this) || this; // The default preset
+
+                  var defaultPreset = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_2__["mergeDeep"]
+                  )(
+                    {},
+                    _presets_default__WEBPACK_IMPORTED_MODULE_0__["preset"]
+                  ); // The user provided preset
+
+                  var userPreset = parent.userPreset; // The user provided global preset
+
+                  var _a = userPreset.preset,
+                    globalPreset = _a === void 0 ? {} : _a,
+                    preset = __rest(userPreset, ["preset"]);
+
+                  if (globalPreset.preset != null) {
+                    Object(
+                      _util_console__WEBPACK_IMPORTED_MODULE_1__["consoleWarn"]
+                    )(
+                      "Global presets do not support the **preset** option, it can be safely omitted"
+                    );
+                  }
 
+                  parent.preset = Object(
+                    _util_helpers__WEBPACK_IMPORTED_MODULE_2__["mergeDeep"]
+                  )(
+                    Object(
+                      _util_helpers__WEBPACK_IMPORTED_MODULE_2__["mergeDeep"]
+                    )(defaultPreset, globalPreset),
+                    preset
+                  );
+                  return _this;
+                }
 
+                Presets.property = "presets";
+                return Presets;
+              })(_service__WEBPACK_IMPORTED_MODULE_3__["Service"]);
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/services/service/index.ts":
-/*!***************************************!*\
+        /***/ "./src/services/service/index.ts":
+          /*!***************************************!*\
   !*** ./src/services/service/index.ts ***!
   \***************************************/
-/*! exports provided: Service */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Service", function() { return Service; });
-var Service =
-/** @class */
-function () {
-  function Service() {
-    this.framework = {};
-  }
-
-  Service.prototype.init = function (root, ssrContext) {};
-
-  return Service;
-}();
+          /*! exports provided: Service */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Service",
+              function () {
+                return Service;
+              }
+            );
+            var Service =
+              /** @class */
+              (function () {
+                function Service() {
+                  this.framework = {};
+                }
 
+                Service.prototype.init = function (root, ssrContext) {};
 
+                return Service;
+              })();
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/services/theme/index.ts":
-/*!*************************************!*\
+        /***/ "./src/services/theme/index.ts":
+          /*!*************************************!*\
   !*** ./src/services/theme/index.ts ***!
   \*************************************/
-/*! exports provided: Theme */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Theme", function() { return Theme; });
-/* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../service */ "./src/services/service/index.ts");
-/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./src/services/theme/utils.ts");
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_3__);
-var __extends = undefined && undefined.__extends || function () {
-  var _extendStatics = function extendStatics(d, b) {
-    _extendStatics = Object.setPrototypeOf || {
-      __proto__: []
-    } instanceof Array && function (d, b) {
-      d.__proto__ = b;
-    } || function (d, b) {
-      for (var p in b) {
-        if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
-      }
-    };
+          /*! exports provided: Theme */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "Theme",
+              function () {
+                return Theme;
+              }
+            );
+            /* harmony import */ var _service__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../service */ "./src/services/service/index.ts"
+              );
+            /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ./utils */ "./src/services/theme/utils.ts"
+              );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_3__
+              );
+            var __extends =
+              (undefined && undefined.__extends) ||
+              (function () {
+                var _extendStatics = function extendStatics(d, b) {
+                  _extendStatics =
+                    Object.setPrototypeOf ||
+                    ({
+                      __proto__: [],
+                    } instanceof Array &&
+                      function (d, b) {
+                        d.__proto__ = b;
+                      }) ||
+                    function (d, b) {
+                      for (var p in b) {
+                        if (Object.prototype.hasOwnProperty.call(b, p))
+                          d[p] = b[p];
+                      }
+                    };
+
+                  return _extendStatics(d, b);
+                };
 
-    return _extendStatics(d, b);
-  };
+                return function (d, b) {
+                  _extendStatics(d, b);
+
+                  function __() {
+                    this.constructor = d;
+                  }
 
-  return function (d, b) {
-    _extendStatics(d, b);
+                  d.prototype =
+                    b === null
+                      ? Object.create(b)
+                      : ((__.prototype = b.prototype), new __());
+                };
+              })();
+            /* eslint-disable no-multi-spaces */
+            // Extensions
+
+            // Utilities
+
+            // Types
+
+            var Theme =
+              /** @class */
+              (function (_super) {
+                __extends(Theme, _super);
+
+                function Theme(preset) {
+                  var _this = _super.call(this) || this;
+
+                  _this.disabled = false;
+                  _this.isDark = null;
+                  _this.unwatch = null;
+                  _this.vueMeta = null;
+                  var _a = preset[Theme.property],
+                    dark = _a.dark,
+                    disable = _a.disable,
+                    options = _a.options,
+                    themes = _a.themes;
+                  _this.dark = Boolean(dark);
+                  _this.defaults = _this.themes = themes;
+                  _this.options = options;
+
+                  if (disable) {
+                    _this.disabled = true;
+                    return _this;
+                  }
 
-    function __() {
-      this.constructor = d;
-    }
+                  _this.themes = {
+                    dark: _this.fillVariant(themes.dark, true),
+                    light: _this.fillVariant(themes.light, false),
+                  };
+                  return _this;
+                }
 
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-  };
-}();
-/* eslint-disable no-multi-spaces */
-// Extensions
+                Object.defineProperty(Theme.prototype, "css", {
+                  // When setting css, check for element and apply new values
+
+                  /* eslint-disable-next-line accessor-pairs */
+                  set: function set(val) {
+                    if (this.vueMeta) {
+                      if (this.isVueMeta23) {
+                        this.applyVueMeta23();
+                      }
+
+                      return;
+                    }
+
+                    this.checkOrCreateStyleElement() &&
+                      (this.styleEl.innerHTML = val);
+                  },
+                  enumerable: false,
+                  configurable: true,
+                });
+                Object.defineProperty(Theme.prototype, "dark", {
+                  get: function get() {
+                    return Boolean(this.isDark);
+                  },
+                  set: function set(val) {
+                    var oldDark = this.isDark;
+                    this.isDark = val; // Only apply theme after dark
+                    // has already been set before
+
+                    oldDark != null && this.applyTheme();
+                  },
+                  enumerable: false,
+                  configurable: true,
+                }); // Apply current theme default
+                // only called on client side
+
+                Theme.prototype.applyTheme = function () {
+                  if (this.disabled) return this.clearCss();
+                  this.css = this.generatedStyles;
+                };
 
+                Theme.prototype.clearCss = function () {
+                  this.css = "";
+                }; // Initialize theme for SSR and SPA
+                // Attach to ssrContext head or
+                // apply new theme to document
 
- // Utilities
+                Theme.prototype.init = function (root, ssrContext) {
+                  if (this.disabled) return;
+                  /* istanbul ignore else */
 
+                  if (root.$meta) {
+                    this.initVueMeta(root);
+                  } else if (ssrContext) {
+                    this.initSSR(ssrContext);
+                  }
 
- // Types
+                  this.initTheme(root);
+                }; // Allows for you to set target theme
 
+                Theme.prototype.setTheme = function (theme, value) {
+                  this.themes[theme] = Object.assign(this.themes[theme], value);
+                  this.applyTheme();
+                }; // Reset theme defaults
 
+                Theme.prototype.resetThemes = function () {
+                  this.themes.light = Object.assign({}, this.defaults.light);
+                  this.themes.dark = Object.assign({}, this.defaults.dark);
+                  this.applyTheme();
+                }; // Check for existence of style element
 
-var Theme =
-/** @class */
-function (_super) {
-  __extends(Theme, _super);
+                Theme.prototype.checkOrCreateStyleElement = function () {
+                  this.styleEl = document.getElementById(
+                    "vuetify-theme-stylesheet"
+                  );
+                  /* istanbul ignore next */
 
-  function Theme(preset) {
-    var _this = _super.call(this) || this;
+                  if (this.styleEl) return true;
+                  this.genStyleElement(); // If doesn't have it, create it
 
-    _this.disabled = false;
-    _this.isDark = null;
-    _this.unwatch = null;
-    _this.vueMeta = null;
-    var _a = preset[Theme.property],
-        dark = _a.dark,
-        disable = _a.disable,
-        options = _a.options,
-        themes = _a.themes;
-    _this.dark = Boolean(dark);
-    _this.defaults = _this.themes = themes;
-    _this.options = options;
+                  return Boolean(this.styleEl);
+                };
 
-    if (disable) {
-      _this.disabled = true;
-      return _this;
-    }
+                Theme.prototype.fillVariant = function (theme, dark) {
+                  if (theme === void 0) {
+                    theme = {};
+                  }
 
-    _this.themes = {
-      dark: _this.fillVariant(themes.dark, true),
-      light: _this.fillVariant(themes.light, false)
-    };
-    return _this;
-  }
+                  var defaultTheme = this.themes[dark ? "dark" : "light"];
+                  return Object.assign({}, defaultTheme, theme);
+                }; // Generate the style element
+                // if applicable
 
-  Object.defineProperty(Theme.prototype, "css", {
-    // When setting css, check for element and apply new values
+                Theme.prototype.genStyleElement = function () {
+                  /* istanbul ignore if */
+                  if (typeof document === "undefined") return;
+                  /* istanbul ignore next */
 
-    /* eslint-disable-next-line accessor-pairs */
-    set: function set(val) {
-      if (this.vueMeta) {
-        if (this.isVueMeta23) {
-          this.applyVueMeta23();
-        }
+                  this.styleEl = document.createElement("style");
+                  this.styleEl.type = "text/css";
+                  this.styleEl.id = "vuetify-theme-stylesheet";
 
-        return;
-      }
+                  if (this.options.cspNonce) {
+                    this.styleEl.setAttribute("nonce", this.options.cspNonce);
+                  }
 
-      this.checkOrCreateStyleElement() && (this.styleEl.innerHTML = val);
-    },
-    enumerable: false,
-    configurable: true
-  });
-  Object.defineProperty(Theme.prototype, "dark", {
-    get: function get() {
-      return Boolean(this.isDark);
-    },
-    set: function set(val) {
-      var oldDark = this.isDark;
-      this.isDark = val; // Only apply theme after dark
-      // has already been set before
+                  document.head.appendChild(this.styleEl);
+                };
 
-      oldDark != null && this.applyTheme();
-    },
-    enumerable: false,
-    configurable: true
-  }); // Apply current theme default
-  // only called on client side
-
-  Theme.prototype.applyTheme = function () {
-    if (this.disabled) return this.clearCss();
-    this.css = this.generatedStyles;
-  };
-
-  Theme.prototype.clearCss = function () {
-    this.css = '';
-  }; // Initialize theme for SSR and SPA
-  // Attach to ssrContext head or
-  // apply new theme to document
-
-
-  Theme.prototype.init = function (root, ssrContext) {
-    if (this.disabled) return;
-    /* istanbul ignore else */
-
-    if (root.$meta) {
-      this.initVueMeta(root);
-    } else if (ssrContext) {
-      this.initSSR(ssrContext);
-    }
-
-    this.initTheme(root);
-  }; // Allows for you to set target theme
-
-
-  Theme.prototype.setTheme = function (theme, value) {
-    this.themes[theme] = Object.assign(this.themes[theme], value);
-    this.applyTheme();
-  }; // Reset theme defaults
-
-
-  Theme.prototype.resetThemes = function () {
-    this.themes.light = Object.assign({}, this.defaults.light);
-    this.themes.dark = Object.assign({}, this.defaults.dark);
-    this.applyTheme();
-  }; // Check for existence of style element
-
-
-  Theme.prototype.checkOrCreateStyleElement = function () {
-    this.styleEl = document.getElementById('vuetify-theme-stylesheet');
-    /* istanbul ignore next */
-
-    if (this.styleEl) return true;
-    this.genStyleElement(); // If doesn't have it, create it
-
-    return Boolean(this.styleEl);
-  };
-
-  Theme.prototype.fillVariant = function (theme, dark) {
-    if (theme === void 0) {
-      theme = {};
-    }
-
-    var defaultTheme = this.themes[dark ? 'dark' : 'light'];
-    return Object.assign({}, defaultTheme, theme);
-  }; // Generate the style element
-  // if applicable
-
-
-  Theme.prototype.genStyleElement = function () {
-    /* istanbul ignore if */
-    if (typeof document === 'undefined') return;
-    /* istanbul ignore next */
-
-    this.styleEl = document.createElement('style');
-    this.styleEl.type = 'text/css';
-    this.styleEl.id = 'vuetify-theme-stylesheet';
-
-    if (this.options.cspNonce) {
-      this.styleEl.setAttribute('nonce', this.options.cspNonce);
-    }
-
-    document.head.appendChild(this.styleEl);
-  };
-
-  Theme.prototype.initVueMeta = function (root) {
-    var _this = this;
-
-    this.vueMeta = root.$meta();
-
-    if (this.isVueMeta23) {
-      // vue-meta needs to apply after mounted()
-      root.$nextTick(function () {
-        _this.applyVueMeta23();
-      });
-      return;
-    }
-
-    var metaKeyName = typeof this.vueMeta.getOptions === 'function' ? this.vueMeta.getOptions().keyName : 'metaInfo';
-    var metaInfo = root.$options[metaKeyName] || {};
+                Theme.prototype.initVueMeta = function (root) {
+                  var _this = this;
 
-    root.$options[metaKeyName] = function () {
-      metaInfo.style = metaInfo.style || [];
-      var vuetifyStylesheet = metaInfo.style.find(function (s) {
-        return s.id === 'vuetify-theme-stylesheet';
-      });
+                  this.vueMeta = root.$meta();
 
-      if (!vuetifyStylesheet) {
-        metaInfo.style.push({
-          cssText: _this.generatedStyles,
-          type: 'text/css',
-          id: 'vuetify-theme-stylesheet',
-          nonce: (_this.options || {}).cspNonce
-        });
-      } else {
-        vuetifyStylesheet.cssText = _this.generatedStyles;
-      }
+                  if (this.isVueMeta23) {
+                    // vue-meta needs to apply after mounted()
+                    root.$nextTick(function () {
+                      _this.applyVueMeta23();
+                    });
+                    return;
+                  }
 
-      return metaInfo;
-    };
-  };
-
-  Theme.prototype.applyVueMeta23 = function () {
-    var set = this.vueMeta.addApp('vuetify').set;
-    set({
-      style: [{
-        cssText: this.generatedStyles,
-        type: 'text/css',
-        id: 'vuetify-theme-stylesheet',
-        nonce: this.options.cspNonce
-      }]
-    });
-  };
-
-  Theme.prototype.initSSR = function (ssrContext) {
-    // SSR
-    var nonce = this.options.cspNonce ? " nonce=\"" + this.options.cspNonce + "\"" : '';
-    ssrContext.head = ssrContext.head || '';
-    ssrContext.head += "<style type=\"text/css\" id=\"vuetify-theme-stylesheet\"" + nonce + ">" + this.generatedStyles + "</style>";
-  };
-
-  Theme.prototype.initTheme = function (root) {
-    var _this = this; // Only watch for reactivity on client side
-
-
-    if (typeof document === 'undefined') return; // If we get here somehow, ensure
-    // existing instance is removed
-
-    if (this.unwatch) {
-      this.unwatch();
-      this.unwatch = null;
-    } // TODO: Update to use RFC if merged
-    // https://github.com/vuejs/rfcs/blob/advanced-reactivity-api/active-rfcs/0000-advanced-reactivity-api.md
-
-
-    root.$once('hook:created', function () {
-      var obs = vue__WEBPACK_IMPORTED_MODULE_3___default.a.observable({
-        themes: _this.themes
-      });
-      _this.unwatch = root.$watch(function () {
-        return obs.themes;
-      }, function () {
-        return _this.applyTheme();
-      }, {
-        deep: true
-      });
-    });
-    this.applyTheme();
-  };
-
-  Object.defineProperty(Theme.prototype, "currentTheme", {
-    get: function get() {
-      var target = this.dark ? 'dark' : 'light';
-      return this.themes[target];
-    },
-    enumerable: false,
-    configurable: true
-  });
-  Object.defineProperty(Theme.prototype, "generatedStyles", {
-    get: function get() {
-      var theme = this.parsedTheme;
-      /* istanbul ignore next */
-
-      var options = this.options || {};
-      var css;
-
-      if (options.themeCache != null) {
-        css = options.themeCache.get(theme);
-        /* istanbul ignore if */
-
-        if (css != null) return css;
-      }
+                  var metaKeyName =
+                    typeof this.vueMeta.getOptions === "function"
+                      ? this.vueMeta.getOptions().keyName
+                      : "metaInfo";
+                  var metaInfo = root.$options[metaKeyName] || {};
+
+                  root.$options[metaKeyName] = function () {
+                    metaInfo.style = metaInfo.style || [];
+                    var vuetifyStylesheet = metaInfo.style.find(function (s) {
+                      return s.id === "vuetify-theme-stylesheet";
+                    });
+
+                    if (!vuetifyStylesheet) {
+                      metaInfo.style.push({
+                        cssText: _this.generatedStyles,
+                        type: "text/css",
+                        id: "vuetify-theme-stylesheet",
+                        nonce: (_this.options || {}).cspNonce,
+                      });
+                    } else {
+                      vuetifyStylesheet.cssText = _this.generatedStyles;
+                    }
+
+                    return metaInfo;
+                  };
+                };
 
-      css = _utils__WEBPACK_IMPORTED_MODULE_1__["genStyles"](theme, options.customProperties);
+                Theme.prototype.applyVueMeta23 = function () {
+                  var set = this.vueMeta.addApp("vuetify").set;
+                  set({
+                    style: [
+                      {
+                        cssText: this.generatedStyles,
+                        type: "text/css",
+                        id: "vuetify-theme-stylesheet",
+                        nonce: this.options.cspNonce,
+                      },
+                    ],
+                  });
+                };
 
-      if (options.minifyTheme != null) {
-        css = options.minifyTheme(css);
-      }
+                Theme.prototype.initSSR = function (ssrContext) {
+                  // SSR
+                  var nonce = this.options.cspNonce
+                    ? ' nonce="' + this.options.cspNonce + '"'
+                    : "";
+                  ssrContext.head = ssrContext.head || "";
+                  ssrContext.head +=
+                    '<style type="text/css" id="vuetify-theme-stylesheet"' +
+                    nonce +
+                    ">" +
+                    this.generatedStyles +
+                    "</style>";
+                };
 
-      if (options.themeCache != null) {
-        options.themeCache.set(theme, css);
-      }
+                Theme.prototype.initTheme = function (root) {
+                  var _this = this; // Only watch for reactivity on client side
+
+                  if (typeof document === "undefined") return; // If we get here somehow, ensure
+                  // existing instance is removed
+
+                  if (this.unwatch) {
+                    this.unwatch();
+                    this.unwatch = null;
+                  } // TODO: Update to use RFC if merged
+                  // https://github.com/vuejs/rfcs/blob/advanced-reactivity-api/active-rfcs/0000-advanced-reactivity-api.md
+
+                  root.$once("hook:created", function () {
+                    var obs =
+                      vue__WEBPACK_IMPORTED_MODULE_3___default.a.observable({
+                        themes: _this.themes,
+                      });
+                    _this.unwatch = root.$watch(
+                      function () {
+                        return obs.themes;
+                      },
+                      function () {
+                        return _this.applyTheme();
+                      },
+                      {
+                        deep: true,
+                      }
+                    );
+                  });
+                  this.applyTheme();
+                };
+
+                Object.defineProperty(Theme.prototype, "currentTheme", {
+                  get: function get() {
+                    var target = this.dark ? "dark" : "light";
+                    return this.themes[target];
+                  },
+                  enumerable: false,
+                  configurable: true,
+                });
+                Object.defineProperty(Theme.prototype, "generatedStyles", {
+                  get: function get() {
+                    var theme = this.parsedTheme;
+                    /* istanbul ignore next */
+
+                    var options = this.options || {};
+                    var css;
+
+                    if (options.themeCache != null) {
+                      css = options.themeCache.get(theme);
+                      /* istanbul ignore if */
+
+                      if (css != null) return css;
+                    }
+
+                    css = _utils__WEBPACK_IMPORTED_MODULE_1__["genStyles"](
+                      theme,
+                      options.customProperties
+                    );
+
+                    if (options.minifyTheme != null) {
+                      css = options.minifyTheme(css);
+                    }
+
+                    if (options.themeCache != null) {
+                      options.themeCache.set(theme, css);
+                    }
+
+                    return css;
+                  },
+                  enumerable: false,
+                  configurable: true,
+                });
+                Object.defineProperty(Theme.prototype, "parsedTheme", {
+                  get: function get() {
+                    return _utils__WEBPACK_IMPORTED_MODULE_1__["parse"](
+                      this.currentTheme || {},
+                      undefined,
+                      Object(
+                        _util_helpers__WEBPACK_IMPORTED_MODULE_2__[
+                          "getNestedValue"
+                        ]
+                      )(this.options, ["variations"], true)
+                    );
+                  },
+                  enumerable: false,
+                  configurable: true,
+                });
+                Object.defineProperty(Theme.prototype, "isVueMeta23", {
+                  // Is using v2.3 of vue-meta
+                  // https://github.com/nuxt/vue-meta/releases/tag/v2.3.0
+                  get: function get() {
+                    return typeof this.vueMeta.addApp === "function";
+                  },
+                  enumerable: false,
+                  configurable: true,
+                });
+                Theme.property = "theme";
+                return Theme;
+              })(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
+
+            /***/
+          },
 
-      return css;
-    },
-    enumerable: false,
-    configurable: true
-  });
-  Object.defineProperty(Theme.prototype, "parsedTheme", {
-    get: function get() {
-      return _utils__WEBPACK_IMPORTED_MODULE_1__["parse"](this.currentTheme || {}, undefined, Object(_util_helpers__WEBPACK_IMPORTED_MODULE_2__["getNestedValue"])(this.options, ['variations'], true));
-    },
-    enumerable: false,
-    configurable: true
-  });
-  Object.defineProperty(Theme.prototype, "isVueMeta23", {
-    // Is using v2.3 of vue-meta
-    // https://github.com/nuxt/vue-meta/releases/tag/v2.3.0
-    get: function get() {
-      return typeof this.vueMeta.addApp === 'function';
-    },
-    enumerable: false,
-    configurable: true
-  });
-  Theme.property = 'theme';
-  return Theme;
-}(_service__WEBPACK_IMPORTED_MODULE_0__["Service"]);
-
-
-
-/***/ }),
-
-/***/ "./src/services/theme/utils.ts":
-/*!*************************************!*\
+        /***/ "./src/services/theme/utils.ts":
+          /*!*************************************!*\
   !*** ./src/services/theme/utils.ts ***!
   \*************************************/
-/*! exports provided: parse, genStyles, genVariations, lighten, darken */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genStyles", function() { return genStyles; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "genVariations", function() { return genVariations; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lighten", function() { return lighten; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "darken", function() { return darken; });
-/* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/colorUtils */ "./src/util/colorUtils.ts");
-/* harmony import */ var _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../util/color/transformSRGB */ "./src/util/color/transformSRGB.ts");
-/* harmony import */ var _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../util/color/transformCIELAB */ "./src/util/color/transformCIELAB.ts");
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __rest = undefined && undefined.__rest || function (s, e) {
-  var t = {};
-
-  for (var p in s) {
-    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
-  }
+          /*! exports provided: parse, genStyles, genVariations, lighten, darken */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parse",
+              function () {
+                return parse;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "genStyles",
+              function () {
+                return genStyles;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "genVariations",
+              function () {
+                return genVariations;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "lighten",
+              function () {
+                return lighten;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "darken",
+              function () {
+                return darken;
+              }
+            );
+            /* harmony import */ var _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/colorUtils */ "./src/util/colorUtils.ts"
+              );
+            /* harmony import */ var _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(
+                /*! ../../util/color/transformSRGB */ "./src/util/color/transformSRGB.ts"
+              );
+            /* harmony import */ var _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ../../util/color/transformCIELAB */ "./src/util/color/transformCIELAB.ts"
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
+
+            var __rest =
+              (undefined && undefined.__rest) ||
+              function (s, e) {
+                var t = {};
+
+                for (var p in s) {
+                  if (
+                    Object.prototype.hasOwnProperty.call(s, p) &&
+                    e.indexOf(p) < 0
+                  )
+                    t[p] = s[p];
+                }
+
+                if (
+                  s != null &&
+                  typeof Object.getOwnPropertySymbols === "function"
+                )
+                  for (
+                    var i = 0, p = Object.getOwnPropertySymbols(s);
+                    i < p.length;
+                    i++
+                  ) {
+                    if (
+                      e.indexOf(p[i]) < 0 &&
+                      Object.prototype.propertyIsEnumerable.call(s, p[i])
+                    )
+                      t[p[i]] = s[p[i]];
+                  }
+                return t;
+              };
+
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
+
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
+
+                return ar;
+              };
 
-  if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
-    if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
-  }
-  return t;
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+            function parse(theme, isItem, variations) {
+              if (isItem === void 0) {
+                isItem = false;
+              }
 
-  return ar;
-};
+              if (variations === void 0) {
+                variations = true;
+              }
 
+              var anchor = theme.anchor,
+                variant = __rest(theme, ["anchor"]);
+
+              var colors = Object.keys(variant);
+              var parsedTheme = {};
+
+              for (var i = 0; i < colors.length; ++i) {
+                var name = colors[i];
+                var value = theme[name];
+                if (value == null) continue;
+
+                if (!variations) {
+                  parsedTheme[name] = {
+                    base: Object(
+                      _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"]
+                    )(
+                      Object(
+                        _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__[
+                          "colorToInt"
+                        ]
+                      )(value)
+                    ),
+                  };
+                } else if (isItem) {
+                  /* istanbul ignore else */
+                  if (
+                    name === "base" ||
+                    name.startsWith("lighten") ||
+                    name.startsWith("darken")
+                  ) {
+                    parsedTheme[name] = Object(
+                      _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__[
+                        "colorToHex"
+                      ]
+                    )(value);
+                  }
+                } else if (_typeof(value) === "object") {
+                  parsedTheme[name] = parse(value, true, variations);
+                } else {
+                  parsedTheme[name] = genVariations(
+                    name,
+                    Object(
+                      _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__[
+                        "colorToInt"
+                      ]
+                    )(value)
+                  );
+                }
+              }
 
+              if (!isItem) {
+                parsedTheme.anchor =
+                  anchor || parsedTheme.base || parsedTheme.primary.base;
+              }
 
+              return parsedTheme;
+            }
+            /**
+             * Generate the CSS for a base color (.primary)
+             */
+
+            var genBaseColor = function genBaseColor(name, value) {
+              return (
+                "\n.v-application ." +
+                name +
+                " {\n  background-color: " +
+                value +
+                " !important;\n  border-color: " +
+                value +
+                " !important;\n}\n.v-application ." +
+                name +
+                "--text {\n  color: " +
+                value +
+                " !important;\n  caret-color: " +
+                value +
+                " !important;\n}"
+              );
+            };
+            /**
+             * Generate the CSS for a variant color (.primary.darken-2)
+             */
+
+            var genVariantColor = function genVariantColor(
+              name,
+              variant,
+              value
+            ) {
+              var _a = __read(variant.split(/(\d)/, 2), 2),
+                type = _a[0],
+                n = _a[1];
+
+              return (
+                "\n.v-application ." +
+                name +
+                "." +
+                type +
+                "-" +
+                n +
+                " {\n  background-color: " +
+                value +
+                " !important;\n  border-color: " +
+                value +
+                " !important;\n}\n.v-application ." +
+                name +
+                "--text.text--" +
+                type +
+                "-" +
+                n +
+                " {\n  color: " +
+                value +
+                " !important;\n  caret-color: " +
+                value +
+                " !important;\n}"
+              );
+            };
 
-function parse(theme, isItem, variations) {
-  if (isItem === void 0) {
-    isItem = false;
-  }
+            var genColorVariableName = function genColorVariableName(
+              name,
+              variant
+            ) {
+              if (variant === void 0) {
+                variant = "base";
+              }
 
-  if (variations === void 0) {
-    variations = true;
-  }
+              return "--v-" + name + "-" + variant;
+            };
 
-  var anchor = theme.anchor,
-      variant = __rest(theme, ["anchor"]);
+            var genColorVariable = function genColorVariable(name, variant) {
+              if (variant === void 0) {
+                variant = "base";
+              }
 
-  var colors = Object.keys(variant);
-  var parsedTheme = {};
+              return "var(" + genColorVariableName(name, variant) + ")";
+            };
 
-  for (var i = 0; i < colors.length; ++i) {
-    var name = colors[i];
-    var value = theme[name];
-    if (value == null) continue;
+            function genStyles(theme, cssVar) {
+              if (cssVar === void 0) {
+                cssVar = false;
+              }
 
-    if (!variations) {
-      parsedTheme[name] = {
-        base: Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"])(Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["colorToInt"])(value))
-      };
-    } else if (isItem) {
-      /* istanbul ignore else */
-      if (name === 'base' || name.startsWith('lighten') || name.startsWith('darken')) {
-        parsedTheme[name] = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["colorToHex"])(value);
-      }
-    } else if (_typeof(value) === 'object') {
-      parsedTheme[name] = parse(value, true, variations);
-    } else {
-      parsedTheme[name] = genVariations(name, Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["colorToInt"])(value));
-    }
-  }
+              var anchor = theme.anchor,
+                variant = __rest(theme, ["anchor"]);
+
+              var colors = Object.keys(variant);
+              if (!colors.length) return "";
+              var variablesCss = "";
+              var css = "";
+              var aColor = cssVar ? genColorVariable("anchor") : anchor;
+              css += ".v-application a { color: " + aColor + "; }";
+              cssVar &&
+                (variablesCss +=
+                  "  " +
+                  genColorVariableName("anchor") +
+                  ": " +
+                  anchor +
+                  ";\n");
+
+              for (var i = 0; i < colors.length; ++i) {
+                var name = colors[i];
+                var value = theme[name];
+                css += genBaseColor(
+                  name,
+                  cssVar ? genColorVariable(name) : value.base
+                );
+                cssVar &&
+                  (variablesCss +=
+                    "  " +
+                    genColorVariableName(name) +
+                    ": " +
+                    value.base +
+                    ";\n");
+                var variants = Object.keys(value);
+
+                for (var i_1 = 0; i_1 < variants.length; ++i_1) {
+                  var variant_1 = variants[i_1];
+                  var variantValue = value[variant_1];
+                  if (variant_1 === "base") continue;
+                  css += genVariantColor(
+                    name,
+                    variant_1,
+                    cssVar ? genColorVariable(name, variant_1) : variantValue
+                  );
+                  cssVar &&
+                    (variablesCss +=
+                      "  " +
+                      genColorVariableName(name, variant_1) +
+                      ": " +
+                      variantValue +
+                      ";\n");
+                }
+              }
 
-  if (!isItem) {
-    parsedTheme.anchor = anchor || parsedTheme.base || parsedTheme.primary.base;
-  }
+              if (cssVar) {
+                variablesCss = ":root {\n" + variablesCss + "}\n\n";
+              }
 
-  return parsedTheme;
-}
-/**
- * Generate the CSS for a base color (.primary)
- */
+              return variablesCss + css;
+            }
+            function genVariations(name, value) {
+              var values = {
+                base: Object(
+                  _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"]
+                )(value),
+              };
 
-var genBaseColor = function genBaseColor(name, value) {
-  return "\n.v-application ." + name + " {\n  background-color: " + value + " !important;\n  border-color: " + value + " !important;\n}\n.v-application ." + name + "--text {\n  color: " + value + " !important;\n  caret-color: " + value + " !important;\n}";
-};
-/**
- * Generate the CSS for a variant color (.primary.darken-2)
- */
+              for (var i = 5; i > 0; --i) {
+                values["lighten" + i] = Object(
+                  _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"]
+                )(lighten(value, i));
+              }
 
+              for (var i = 1; i <= 4; ++i) {
+                values["darken" + i] = Object(
+                  _util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"]
+                )(darken(value, i));
+              }
 
-var genVariantColor = function genVariantColor(name, variant, value) {
-  var _a = __read(variant.split(/(\d)/, 2), 2),
-      type = _a[0],
-      n = _a[1];
+              return values;
+            }
+            function lighten(value, amount) {
+              var lab =
+                _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__[
+                  "fromXYZ"
+                ](
+                  _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__[
+                    "toXYZ"
+                  ](value)
+                );
+              lab[0] = lab[0] + amount * 10;
+              return _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__[
+                "fromXYZ"
+              ](
+                _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__[
+                  "toXYZ"
+                ](lab)
+              );
+            }
+            function darken(value, amount) {
+              var lab =
+                _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__[
+                  "fromXYZ"
+                ](
+                  _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__[
+                    "toXYZ"
+                  ](value)
+                );
+              lab[0] = lab[0] - amount * 10;
+              return _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__[
+                "fromXYZ"
+              ](
+                _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__[
+                  "toXYZ"
+                ](lab)
+              );
+            }
 
-  return "\n.v-application ." + name + "." + type + "-" + n + " {\n  background-color: " + value + " !important;\n  border-color: " + value + " !important;\n}\n.v-application ." + name + "--text.text--" + type + "-" + n + " {\n  color: " + value + " !important;\n  caret-color: " + value + " !important;\n}";
-};
+            /***/
+          },
 
-var genColorVariableName = function genColorVariableName(name, variant) {
-  if (variant === void 0) {
-    variant = 'base';
-  }
+        /***/ "./src/styles/components/_selection-controls.sass":
+          /*!********************************************************!*\
+  !*** ./src/styles/components/_selection-controls.sass ***!
+  \********************************************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-  return "--v-" + name + "-" + variant;
-};
+        /***/ "./src/styles/main.sass":
+          /*!******************************!*\
+  !*** ./src/styles/main.sass ***!
+  \******************************/
+          /*! no static exports found */
+          /***/ function (module, exports, __webpack_require__) {
+            // extracted by mini-css-extract-plugin
+            /***/
+          },
 
-var genColorVariable = function genColorVariable(name, variant) {
-  if (variant === void 0) {
-    variant = 'base';
-  }
+        /***/ "./src/util/color/transformCIELAB.ts":
+          /*!*******************************************!*\
+  !*** ./src/util/color/transformCIELAB.ts ***!
+  \*******************************************/
+          /*! exports provided: fromXYZ, toXYZ */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fromXYZ",
+              function () {
+                return fromXYZ;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "toXYZ",
+              function () {
+                return toXYZ;
+              }
+            );
+            var delta = 0.20689655172413793; // 6÷29
 
-  return "var(" + genColorVariableName(name, variant) + ")";
-};
+            var cielabForwardTransform = function cielabForwardTransform(t) {
+              return t > Math.pow(delta, 3)
+                ? Math.cbrt(t)
+                : t / (3 * Math.pow(delta, 2)) + 4 / 29;
+            };
 
-function genStyles(theme, cssVar) {
-  if (cssVar === void 0) {
-    cssVar = false;
-  }
+            var cielabReverseTransform = function cielabReverseTransform(t) {
+              return t > delta
+                ? Math.pow(t, 3)
+                : 3 * Math.pow(delta, 2) * (t - 4 / 29);
+            };
 
-  var anchor = theme.anchor,
-      variant = __rest(theme, ["anchor"]);
-
-  var colors = Object.keys(variant);
-  if (!colors.length) return '';
-  var variablesCss = '';
-  var css = '';
-  var aColor = cssVar ? genColorVariable('anchor') : anchor;
-  css += ".v-application a { color: " + aColor + "; }";
-  cssVar && (variablesCss += "  " + genColorVariableName('anchor') + ": " + anchor + ";\n");
-
-  for (var i = 0; i < colors.length; ++i) {
-    var name = colors[i];
-    var value = theme[name];
-    css += genBaseColor(name, cssVar ? genColorVariable(name) : value.base);
-    cssVar && (variablesCss += "  " + genColorVariableName(name) + ": " + value.base + ";\n");
-    var variants = Object.keys(value);
-
-    for (var i_1 = 0; i_1 < variants.length; ++i_1) {
-      var variant_1 = variants[i_1];
-      var variantValue = value[variant_1];
-      if (variant_1 === 'base') continue;
-      css += genVariantColor(name, variant_1, cssVar ? genColorVariable(name, variant_1) : variantValue);
-      cssVar && (variablesCss += "  " + genColorVariableName(name, variant_1) + ": " + variantValue + ";\n");
-    }
-  }
+            function fromXYZ(xyz) {
+              var transform = cielabForwardTransform;
+              var transformedY = transform(xyz[1]);
+              return [
+                116 * transformedY - 16,
+                500 * (transform(xyz[0] / 0.95047) - transformedY),
+                200 * (transformedY - transform(xyz[2] / 1.08883)),
+              ];
+            }
+            function toXYZ(lab) {
+              var transform = cielabReverseTransform;
+              var Ln = (lab[0] + 16) / 116;
+              return [
+                transform(Ln + lab[1] / 500) * 0.95047,
+                transform(Ln),
+                transform(Ln - lab[2] / 200) * 1.08883,
+              ];
+            }
 
-  if (cssVar) {
-    variablesCss = ":root {\n" + variablesCss + "}\n\n";
-  }
+            /***/
+          },
 
-  return variablesCss + css;
-}
-function genVariations(name, value) {
-  var values = {
-    base: Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"])(value)
-  };
+        /***/ "./src/util/color/transformSRGB.ts":
+          /*!*****************************************!*\
+  !*** ./src/util/color/transformSRGB.ts ***!
+  \*****************************************/
+          /*! exports provided: fromXYZ, toXYZ */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fromXYZ",
+              function () {
+                return fromXYZ;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "toXYZ",
+              function () {
+                return toXYZ;
+              }
+            );
+            /* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(
+                /*! ../../util/helpers */ "./src/util/helpers.ts"
+              );
+            // For converting XYZ to sRGB
+
+            var srgbForwardMatrix = [
+              [3.2406, -1.5372, -0.4986],
+              [-0.9689, 1.8758, 0.0415],
+              [0.0557, -0.204, 1.057],
+            ]; // Forward gamma adjust
+
+            var srgbForwardTransform = function srgbForwardTransform(C) {
+              return C <= 0.0031308
+                ? C * 12.92
+                : 1.055 * Math.pow(C, 1 / 2.4) - 0.055;
+            }; // For converting sRGB to XYZ
+
+            var srgbReverseMatrix = [
+              [0.4124, 0.3576, 0.1805],
+              [0.2126, 0.7152, 0.0722],
+              [0.0193, 0.1192, 0.9505],
+            ]; // Reverse gamma adjust
+
+            var srgbReverseTransform = function srgbReverseTransform(C) {
+              return C <= 0.04045
+                ? C / 12.92
+                : Math.pow((C + 0.055) / 1.055, 2.4);
+            };
 
-  for (var i = 5; i > 0; --i) {
-    values["lighten" + i] = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"])(lighten(value, i));
-  }
+            function fromXYZ(xyz) {
+              var rgb = Array(3);
+              var transform = srgbForwardTransform;
+              var matrix = srgbForwardMatrix; // Matrix transform, then gamma adjustment
+
+              for (var i = 0; i < 3; ++i) {
+                rgb[i] = Math.round(
+                  Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["clamp"])(
+                    transform(
+                      matrix[i][0] * xyz[0] +
+                        matrix[i][1] * xyz[1] +
+                        matrix[i][2] * xyz[2]
+                    )
+                  ) * 255
+                );
+              } // Rescale back to [0, 255]
+
+              return (rgb[0] << 16) + (rgb[1] << 8) + (rgb[2] << 0);
+            }
+            function toXYZ(rgb) {
+              var xyz = [0, 0, 0];
+              var transform = srgbReverseTransform;
+              var matrix = srgbReverseMatrix; // Rescale from [0, 255] to [0, 1] then adjust sRGB gamma to linear RGB
 
-  for (var i = 1; i <= 4; ++i) {
-    values["darken" + i] = Object(_util_colorUtils__WEBPACK_IMPORTED_MODULE_0__["intToHex"])(darken(value, i));
-  }
+              var r = transform(((rgb >> 16) & 0xff) / 255);
+              var g = transform(((rgb >> 8) & 0xff) / 255);
+              var b = transform(((rgb >> 0) & 0xff) / 255); // Matrix color space transform
 
-  return values;
-}
-function lighten(value, amount) {
-  var lab = _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__["fromXYZ"](_util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__["toXYZ"](value));
-  lab[0] = lab[0] + amount * 10;
-  return _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__["fromXYZ"](_util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__["toXYZ"](lab));
-}
-function darken(value, amount) {
-  var lab = _util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__["fromXYZ"](_util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__["toXYZ"](value));
-  lab[0] = lab[0] - amount * 10;
-  return _util_color_transformSRGB__WEBPACK_IMPORTED_MODULE_1__["fromXYZ"](_util_color_transformCIELAB__WEBPACK_IMPORTED_MODULE_2__["toXYZ"](lab));
-}
-
-/***/ }),
-
-/***/ "./src/styles/components/_selection-controls.sass":
-/*!********************************************************!*\
-  !*** ./src/styles/components/_selection-controls.sass ***!
-  \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+              for (var i = 0; i < 3; ++i) {
+                xyz[i] = matrix[i][0] * r + matrix[i][1] * g + matrix[i][2] * b;
+              }
 
-// extracted by mini-css-extract-plugin
+              return xyz;
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/styles/main.sass":
-/*!******************************!*\
-  !*** ./src/styles/main.sass ***!
-  \******************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        /***/ "./src/util/colorUtils.ts":
+          /*!********************************!*\
+  !*** ./src/util/colorUtils.ts ***!
+  \********************************/
+          /*! exports provided: isCssColor, colorToInt, classToHex, intToHex, colorToHex, HSVAtoRGBA, RGBAtoHSVA, HSVAtoHSLA, HSLAtoHSVA, RGBAtoCSS, RGBtoCSS, RGBAtoHex, HexToRGBA, HexToHSVA, HSVAtoHex, parseHex, parseGradient, RGBtoInt, contrastRatio */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "isCssColor",
+              function () {
+                return isCssColor;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "colorToInt",
+              function () {
+                return colorToInt;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "classToHex",
+              function () {
+                return classToHex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "intToHex",
+              function () {
+                return intToHex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "colorToHex",
+              function () {
+                return colorToHex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HSVAtoRGBA",
+              function () {
+                return HSVAtoRGBA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "RGBAtoHSVA",
+              function () {
+                return RGBAtoHSVA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HSVAtoHSLA",
+              function () {
+                return HSVAtoHSLA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HSLAtoHSVA",
+              function () {
+                return HSLAtoHSVA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "RGBAtoCSS",
+              function () {
+                return RGBAtoCSS;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "RGBtoCSS",
+              function () {
+                return RGBtoCSS;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "RGBAtoHex",
+              function () {
+                return RGBAtoHex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HexToRGBA",
+              function () {
+                return HexToRGBA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HexToHSVA",
+              function () {
+                return HexToHSVA;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "HSVAtoHex",
+              function () {
+                return HSVAtoHex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parseHex",
+              function () {
+                return parseHex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "parseGradient",
+              function () {
+                return parseGradient;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "RGBtoInt",
+              function () {
+                return RGBtoInt;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "contrastRatio",
+              function () {
+                return contrastRatio;
+              }
+            );
+            /* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! ./console */ "./src/util/console.ts");
+            /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ =
+              __webpack_require__(/*! ./helpers */ "./src/util/helpers.ts");
+            /* harmony import */ var _color_transformSRGB__WEBPACK_IMPORTED_MODULE_2__ =
+              __webpack_require__(
+                /*! ./color/transformSRGB */ "./src/util/color/transformSRGB.ts"
+              );
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-// extracted by mini-css-extract-plugin
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-/***/ }),
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-/***/ "./src/util/color/transformCIELAB.ts":
-/*!*******************************************!*\
-  !*** ./src/util/color/transformCIELAB.ts ***!
-  \*******************************************/
-/*! exports provided: fromXYZ, toXYZ */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromXYZ", function() { return fromXYZ; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toXYZ", function() { return toXYZ; });
-var delta = 0.20689655172413793; // 6÷29
-
-var cielabForwardTransform = function cielabForwardTransform(t) {
-  return t > Math.pow(delta, 3) ? Math.cbrt(t) : t / (3 * Math.pow(delta, 2)) + 4 / 29;
-};
-
-var cielabReverseTransform = function cielabReverseTransform(t) {
-  return t > delta ? Math.pow(t, 3) : 3 * Math.pow(delta, 2) * (t - 4 / 29);
-};
-
-function fromXYZ(xyz) {
-  var transform = cielabForwardTransform;
-  var transformedY = transform(xyz[1]);
-  return [116 * transformedY - 16, 500 * (transform(xyz[0] / 0.95047) - transformedY), 200 * (transformedY - transform(xyz[2] / 1.08883))];
-}
-function toXYZ(lab) {
-  var transform = cielabReverseTransform;
-  var Ln = (lab[0] + 16) / 116;
-  return [transform(Ln + lab[1] / 500) * 0.95047, transform(Ln), transform(Ln - lab[2] / 200) * 1.08883];
-}
-
-/***/ }),
-
-/***/ "./src/util/color/transformSRGB.ts":
-/*!*****************************************!*\
-  !*** ./src/util/color/transformSRGB.ts ***!
-  \*****************************************/
-/*! exports provided: fromXYZ, toXYZ */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+                return ar;
+              }; // Utilities
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromXYZ", function() { return fromXYZ; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toXYZ", function() { return toXYZ; });
-/* harmony import */ var _util_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../util/helpers */ "./src/util/helpers.ts");
- // For converting XYZ to sRGB
+            function isCssColor(color) {
+              return !!color && !!color.match(/^(#|var\(--|(rgb|hsl)a?\()/);
+            }
+            function colorToInt(color) {
+              var rgb;
+
+              if (typeof color === "number") {
+                rgb = color;
+              } else if (typeof color === "string") {
+                var c = color[0] === "#" ? color.substring(1) : color;
+
+                if (c.length === 3) {
+                  c = c
+                    .split("")
+                    .map(function (char) {
+                      return char + char;
+                    })
+                    .join("");
+                }
 
-var srgbForwardMatrix = [[3.2406, -1.5372, -0.4986], [-0.9689, 1.8758, 0.0415], [0.0557, -0.2040, 1.0570]]; // Forward gamma adjust
+                if (c.length !== 6) {
+                  Object(_console__WEBPACK_IMPORTED_MODULE_0__["consoleWarn"])(
+                    "'" + color + "' is not a valid rgb color"
+                  );
+                }
 
-var srgbForwardTransform = function srgbForwardTransform(C) {
-  return C <= 0.0031308 ? C * 12.92 : 1.055 * Math.pow(C, 1 / 2.4) - 0.055;
-}; // For converting sRGB to XYZ
+                rgb = parseInt(c, 16);
+              } else {
+                throw new TypeError(
+                  "Colors can only be numbers or strings, recieved " +
+                    (color == null ? color : color.constructor.name) +
+                    " instead"
+                );
+              }
 
+              if (rgb < 0) {
+                Object(_console__WEBPACK_IMPORTED_MODULE_0__["consoleWarn"])(
+                  "Colors cannot be negative: '" + color + "'"
+                );
+                rgb = 0;
+              } else if (rgb > 0xffffff || isNaN(rgb)) {
+                Object(_console__WEBPACK_IMPORTED_MODULE_0__["consoleWarn"])(
+                  "'" + color + "' is not a valid rgb color"
+                );
+                rgb = 0xffffff;
+              }
 
-var srgbReverseMatrix = [[0.4124, 0.3576, 0.1805], [0.2126, 0.7152, 0.0722], [0.0193, 0.1192, 0.9505]]; // Reverse gamma adjust
+              return rgb;
+            }
+            function classToHex(color, colors, currentTheme) {
+              var _a = __read(
+                  color.toString().trim().replace("-", "").split(" ", 2),
+                  2
+                ),
+                colorName = _a[0],
+                colorModifier = _a[1];
+
+              var hexColor = "";
+
+              if (colorName && colorName in colors) {
+                if (colorModifier && colorModifier in colors[colorName]) {
+                  hexColor = colors[colorName][colorModifier];
+                } else if ("base" in colors[colorName]) {
+                  hexColor = colors[colorName].base;
+                }
+              } else if (colorName && colorName in currentTheme) {
+                hexColor = currentTheme[colorName];
+              }
 
-var srgbReverseTransform = function srgbReverseTransform(C) {
-  return C <= 0.04045 ? C / 12.92 : Math.pow((C + 0.055) / 1.055, 2.4);
-};
+              return hexColor;
+            }
+            function intToHex(color) {
+              var hexColor = color.toString(16);
+              if (hexColor.length < 6)
+                hexColor = "0".repeat(6 - hexColor.length) + hexColor;
+              return "#" + hexColor;
+            }
+            function colorToHex(color) {
+              return intToHex(colorToInt(color));
+            }
+            /**
+             * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV
+             *
+             * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]
+             */
+
+            function HSVAtoRGBA(hsva) {
+              var h = hsva.h,
+                s = hsva.s,
+                v = hsva.v,
+                a = hsva.a;
+
+              var f = function f(n) {
+                var k = (n + h / 60) % 6;
+                return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
+              };
 
-function fromXYZ(xyz) {
-  var rgb = Array(3);
-  var transform = srgbForwardTransform;
-  var matrix = srgbForwardMatrix; // Matrix transform, then gamma adjustment
+              var rgb = [f(5), f(3), f(1)].map(function (v) {
+                return Math.round(v * 255);
+              });
+              return {
+                r: rgb[0],
+                g: rgb[1],
+                b: rgb[2],
+                a: a,
+              };
+            }
+            /**
+             * Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV
+             *
+             * @param color RGBA color as an array [0-255, 0-255, 0-255, 0-1]
+             */
+
+            function RGBAtoHSVA(rgba) {
+              if (!rgba)
+                return {
+                  h: 0,
+                  s: 1,
+                  v: 1,
+                  a: 1,
+                };
+              var r = rgba.r / 255;
+              var g = rgba.g / 255;
+              var b = rgba.b / 255;
+              var max = Math.max(r, g, b);
+              var min = Math.min(r, g, b);
+              var h = 0;
+
+              if (max !== min) {
+                if (max === r) {
+                  h = 60 * (0 + (g - b) / (max - min));
+                } else if (max === g) {
+                  h = 60 * (2 + (b - r) / (max - min));
+                } else if (max === b) {
+                  h = 60 * (4 + (r - g) / (max - min));
+                }
+              }
 
-  for (var i = 0; i < 3; ++i) {
-    rgb[i] = Math.round(Object(_util_helpers__WEBPACK_IMPORTED_MODULE_0__["clamp"])(transform(matrix[i][0] * xyz[0] + matrix[i][1] * xyz[1] + matrix[i][2] * xyz[2])) * 255);
-  } // Rescale back to [0, 255]
+              if (h < 0) h = h + 360;
+              var s = max === 0 ? 0 : (max - min) / max;
+              var hsv = [h, s, max];
+              return {
+                h: hsv[0],
+                s: hsv[1],
+                v: hsv[2],
+                a: rgba.a,
+              };
+            }
+            function HSVAtoHSLA(hsva) {
+              var h = hsva.h,
+                s = hsva.s,
+                v = hsva.v,
+                a = hsva.a;
+              var l = v - (v * s) / 2;
+              var sprime =
+                l === 1 || l === 0 ? 0 : (v - l) / Math.min(l, 1 - l);
+              return {
+                h: h,
+                s: sprime,
+                l: l,
+                a: a,
+              };
+            }
+            function HSLAtoHSVA(hsl) {
+              var h = hsl.h,
+                s = hsl.s,
+                l = hsl.l,
+                a = hsl.a;
+              var v = l + s * Math.min(l, 1 - l);
+              var sprime = v === 0 ? 0 : 2 - (2 * l) / v;
+              return {
+                h: h,
+                s: sprime,
+                v: v,
+                a: a,
+              };
+            }
+            function RGBAtoCSS(rgba) {
+              return (
+                "rgba(" +
+                rgba.r +
+                ", " +
+                rgba.g +
+                ", " +
+                rgba.b +
+                ", " +
+                rgba.a +
+                ")"
+              );
+            }
+            function RGBtoCSS(rgba) {
+              return RGBAtoCSS(
+                __assign(__assign({}, rgba), {
+                  a: 1,
+                })
+              );
+            }
+            function RGBAtoHex(rgba) {
+              var toHex = function toHex(v) {
+                var h = Math.round(v).toString(16);
+                return ("00".substr(0, 2 - h.length) + h).toUpperCase();
+              };
 
+              return (
+                "#" +
+                [
+                  toHex(rgba.r),
+                  toHex(rgba.g),
+                  toHex(rgba.b),
+                  toHex(Math.round(rgba.a * 255)),
+                ].join("")
+              );
+            }
+            function HexToRGBA(hex) {
+              var rgba = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["chunk"])(
+                hex.slice(1),
+                2
+              ).map(function (c) {
+                return parseInt(c, 16);
+              });
+              return {
+                r: rgba[0],
+                g: rgba[1],
+                b: rgba[2],
+                a: Math.round((rgba[3] / 255) * 100) / 100,
+              };
+            }
+            function HexToHSVA(hex) {
+              var rgb = HexToRGBA(hex);
+              return RGBAtoHSVA(rgb);
+            }
+            function HSVAtoHex(hsva) {
+              return RGBAtoHex(HSVAtoRGBA(hsva));
+            }
+            function parseHex(hex) {
+              if (hex.startsWith("#")) {
+                hex = hex.slice(1);
+              }
 
-  return (rgb[0] << 16) + (rgb[1] << 8) + (rgb[2] << 0);
-}
-function toXYZ(rgb) {
-  var xyz = [0, 0, 0];
-  var transform = srgbReverseTransform;
-  var matrix = srgbReverseMatrix; // Rescale from [0, 255] to [0, 1] then adjust sRGB gamma to linear RGB
+              hex = hex.replace(/([^0-9a-f])/gi, "F");
 
-  var r = transform((rgb >> 16 & 0xff) / 255);
-  var g = transform((rgb >> 8 & 0xff) / 255);
-  var b = transform((rgb >> 0 & 0xff) / 255); // Matrix color space transform
+              if (hex.length === 3 || hex.length === 4) {
+                hex = hex
+                  .split("")
+                  .map(function (x) {
+                    return x + x;
+                  })
+                  .join("");
+              }
 
-  for (var i = 0; i < 3; ++i) {
-    xyz[i] = matrix[i][0] * r + matrix[i][1] * g + matrix[i][2] * b;
-  }
+              if (hex.length === 6) {
+                hex = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["padEnd"])(
+                  hex,
+                  8,
+                  "F"
+                );
+              } else {
+                hex = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["padEnd"])(
+                  Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["padEnd"])(
+                    hex,
+                    6
+                  ),
+                  8,
+                  "F"
+                );
+              }
 
-  return xyz;
-}
+              return ("#" + hex).toUpperCase().substr(0, 9);
+            }
+            function parseGradient(gradient, colors, currentTheme) {
+              return gradient
+                .replace(/([a-z]+(\s[a-z]+-[1-5])?)(?=$|,)/gi, function (x) {
+                  return classToHex(x, colors, currentTheme) || x;
+                })
+                .replace(/(rgba\()#[0-9a-f]+(?=,)/gi, function (x) {
+                  return (
+                    "rgba(" +
+                    Object.values(HexToRGBA(parseHex(x.replace(/rgba\(/, ""))))
+                      .slice(0, 3)
+                      .join(",")
+                  );
+                });
+            }
+            function RGBtoInt(rgba) {
+              return (rgba.r << 16) + (rgba.g << 8) + rgba.b;
+            }
+            /**
+             * Returns the contrast ratio (1-21) between two colors.
+             *
+             * @param c1 First color
+             * @param c2 Second color
+             */
+
+            function contrastRatio(c1, c2) {
+              var _a = __read(
+                  Object(
+                    _color_transformSRGB__WEBPACK_IMPORTED_MODULE_2__["toXYZ"]
+                  )(RGBtoInt(c1)),
+                  2
+                ),
+                y1 = _a[1];
+
+              var _b = __read(
+                  Object(
+                    _color_transformSRGB__WEBPACK_IMPORTED_MODULE_2__["toXYZ"]
+                  )(RGBtoInt(c2)),
+                  2
+                ),
+                y2 = _b[1];
+
+              return (Math.max(y1, y2) + 0.05) / (Math.min(y1, y2) + 0.05);
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/util/colorUtils.ts":
-/*!********************************!*\
-  !*** ./src/util/colorUtils.ts ***!
-  \********************************/
-/*! exports provided: isCssColor, colorToInt, classToHex, intToHex, colorToHex, HSVAtoRGBA, RGBAtoHSVA, HSVAtoHSLA, HSLAtoHSVA, RGBAtoCSS, RGBtoCSS, RGBAtoHex, HexToRGBA, HexToHSVA, HSVAtoHex, parseHex, parseGradient, RGBtoInt, contrastRatio */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isCssColor", function() { return isCssColor; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "colorToInt", function() { return colorToInt; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "classToHex", function() { return classToHex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "intToHex", function() { return intToHex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "colorToHex", function() { return colorToHex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HSVAtoRGBA", function() { return HSVAtoRGBA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBAtoHSVA", function() { return RGBAtoHSVA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HSVAtoHSLA", function() { return HSVAtoHSLA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HSLAtoHSVA", function() { return HSLAtoHSVA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBAtoCSS", function() { return RGBAtoCSS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBtoCSS", function() { return RGBtoCSS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBAtoHex", function() { return RGBAtoHex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HexToRGBA", function() { return HexToRGBA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HexToHSVA", function() { return HexToHSVA; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HSVAtoHex", function() { return HSVAtoHex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseHex", function() { return parseHex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseGradient", function() { return parseGradient; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBtoInt", function() { return RGBtoInt; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "contrastRatio", function() { return contrastRatio; });
-/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./console */ "./src/util/console.ts");
-/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ "./src/util/helpers.ts");
-/* harmony import */ var _color_transformSRGB__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./color/transformSRGB */ "./src/util/color/transformSRGB.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+        /***/ "./src/util/colors.ts":
+          /*!****************************!*\
+  !*** ./src/util/colors.ts ***!
+  \****************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            var red = Object.freeze({
+              base: "#f44336",
+              lighten5: "#ffebee",
+              lighten4: "#ffcdd2",
+              lighten3: "#ef9a9a",
+              lighten2: "#e57373",
+              lighten1: "#ef5350",
+              darken1: "#e53935",
+              darken2: "#d32f2f",
+              darken3: "#c62828",
+              darken4: "#b71c1c",
+              accent1: "#ff8a80",
+              accent2: "#ff5252",
+              accent3: "#ff1744",
+              accent4: "#d50000",
+            });
+            var pink = Object.freeze({
+              base: "#e91e63",
+              lighten5: "#fce4ec",
+              lighten4: "#f8bbd0",
+              lighten3: "#f48fb1",
+              lighten2: "#f06292",
+              lighten1: "#ec407a",
+              darken1: "#d81b60",
+              darken2: "#c2185b",
+              darken3: "#ad1457",
+              darken4: "#880e4f",
+              accent1: "#ff80ab",
+              accent2: "#ff4081",
+              accent3: "#f50057",
+              accent4: "#c51162",
+            });
+            var purple = Object.freeze({
+              base: "#9c27b0",
+              lighten5: "#f3e5f5",
+              lighten4: "#e1bee7",
+              lighten3: "#ce93d8",
+              lighten2: "#ba68c8",
+              lighten1: "#ab47bc",
+              darken1: "#8e24aa",
+              darken2: "#7b1fa2",
+              darken3: "#6a1b9a",
+              darken4: "#4a148c",
+              accent1: "#ea80fc",
+              accent2: "#e040fb",
+              accent3: "#d500f9",
+              accent4: "#aa00ff",
+            });
+            var deepPurple = Object.freeze({
+              base: "#673ab7",
+              lighten5: "#ede7f6",
+              lighten4: "#d1c4e9",
+              lighten3: "#b39ddb",
+              lighten2: "#9575cd",
+              lighten1: "#7e57c2",
+              darken1: "#5e35b1",
+              darken2: "#512da8",
+              darken3: "#4527a0",
+              darken4: "#311b92",
+              accent1: "#b388ff",
+              accent2: "#7c4dff",
+              accent3: "#651fff",
+              accent4: "#6200ea",
+            });
+            var indigo = Object.freeze({
+              base: "#3f51b5",
+              lighten5: "#e8eaf6",
+              lighten4: "#c5cae9",
+              lighten3: "#9fa8da",
+              lighten2: "#7986cb",
+              lighten1: "#5c6bc0",
+              darken1: "#3949ab",
+              darken2: "#303f9f",
+              darken3: "#283593",
+              darken4: "#1a237e",
+              accent1: "#8c9eff",
+              accent2: "#536dfe",
+              accent3: "#3d5afe",
+              accent4: "#304ffe",
+            });
+            var blue = Object.freeze({
+              base: "#2196f3",
+              lighten5: "#e3f2fd",
+              lighten4: "#bbdefb",
+              lighten3: "#90caf9",
+              lighten2: "#64b5f6",
+              lighten1: "#42a5f5",
+              darken1: "#1e88e5",
+              darken2: "#1976d2",
+              darken3: "#1565c0",
+              darken4: "#0d47a1",
+              accent1: "#82b1ff",
+              accent2: "#448aff",
+              accent3: "#2979ff",
+              accent4: "#2962ff",
+            });
+            var lightBlue = Object.freeze({
+              base: "#03a9f4",
+              lighten5: "#e1f5fe",
+              lighten4: "#b3e5fc",
+              lighten3: "#81d4fa",
+              lighten2: "#4fc3f7",
+              lighten1: "#29b6f6",
+              darken1: "#039be5",
+              darken2: "#0288d1",
+              darken3: "#0277bd",
+              darken4: "#01579b",
+              accent1: "#80d8ff",
+              accent2: "#40c4ff",
+              accent3: "#00b0ff",
+              accent4: "#0091ea",
+            });
+            var cyan = Object.freeze({
+              base: "#00bcd4",
+              lighten5: "#e0f7fa",
+              lighten4: "#b2ebf2",
+              lighten3: "#80deea",
+              lighten2: "#4dd0e1",
+              lighten1: "#26c6da",
+              darken1: "#00acc1",
+              darken2: "#0097a7",
+              darken3: "#00838f",
+              darken4: "#006064",
+              accent1: "#84ffff",
+              accent2: "#18ffff",
+              accent3: "#00e5ff",
+              accent4: "#00b8d4",
+            });
+            var teal = Object.freeze({
+              base: "#009688",
+              lighten5: "#e0f2f1",
+              lighten4: "#b2dfdb",
+              lighten3: "#80cbc4",
+              lighten2: "#4db6ac",
+              lighten1: "#26a69a",
+              darken1: "#00897b",
+              darken2: "#00796b",
+              darken3: "#00695c",
+              darken4: "#004d40",
+              accent1: "#a7ffeb",
+              accent2: "#64ffda",
+              accent3: "#1de9b6",
+              accent4: "#00bfa5",
+            });
+            var green = Object.freeze({
+              base: "#4caf50",
+              lighten5: "#e8f5e9",
+              lighten4: "#c8e6c9",
+              lighten3: "#a5d6a7",
+              lighten2: "#81c784",
+              lighten1: "#66bb6a",
+              darken1: "#43a047",
+              darken2: "#388e3c",
+              darken3: "#2e7d32",
+              darken4: "#1b5e20",
+              accent1: "#b9f6ca",
+              accent2: "#69f0ae",
+              accent3: "#00e676",
+              accent4: "#00c853",
+            });
+            var lightGreen = Object.freeze({
+              base: "#8bc34a",
+              lighten5: "#f1f8e9",
+              lighten4: "#dcedc8",
+              lighten3: "#c5e1a5",
+              lighten2: "#aed581",
+              lighten1: "#9ccc65",
+              darken1: "#7cb342",
+              darken2: "#689f38",
+              darken3: "#558b2f",
+              darken4: "#33691e",
+              accent1: "#ccff90",
+              accent2: "#b2ff59",
+              accent3: "#76ff03",
+              accent4: "#64dd17",
+            });
+            var lime = Object.freeze({
+              base: "#cddc39",
+              lighten5: "#f9fbe7",
+              lighten4: "#f0f4c3",
+              lighten3: "#e6ee9c",
+              lighten2: "#dce775",
+              lighten1: "#d4e157",
+              darken1: "#c0ca33",
+              darken2: "#afb42b",
+              darken3: "#9e9d24",
+              darken4: "#827717",
+              accent1: "#f4ff81",
+              accent2: "#eeff41",
+              accent3: "#c6ff00",
+              accent4: "#aeea00",
+            });
+            var yellow = Object.freeze({
+              base: "#ffeb3b",
+              lighten5: "#fffde7",
+              lighten4: "#fff9c4",
+              lighten3: "#fff59d",
+              lighten2: "#fff176",
+              lighten1: "#ffee58",
+              darken1: "#fdd835",
+              darken2: "#fbc02d",
+              darken3: "#f9a825",
+              darken4: "#f57f17",
+              accent1: "#ffff8d",
+              accent2: "#ffff00",
+              accent3: "#ffea00",
+              accent4: "#ffd600",
+            });
+            var amber = Object.freeze({
+              base: "#ffc107",
+              lighten5: "#fff8e1",
+              lighten4: "#ffecb3",
+              lighten3: "#ffe082",
+              lighten2: "#ffd54f",
+              lighten1: "#ffca28",
+              darken1: "#ffb300",
+              darken2: "#ffa000",
+              darken3: "#ff8f00",
+              darken4: "#ff6f00",
+              accent1: "#ffe57f",
+              accent2: "#ffd740",
+              accent3: "#ffc400",
+              accent4: "#ffab00",
+            });
+            var orange = Object.freeze({
+              base: "#ff9800",
+              lighten5: "#fff3e0",
+              lighten4: "#ffe0b2",
+              lighten3: "#ffcc80",
+              lighten2: "#ffb74d",
+              lighten1: "#ffa726",
+              darken1: "#fb8c00",
+              darken2: "#f57c00",
+              darken3: "#ef6c00",
+              darken4: "#e65100",
+              accent1: "#ffd180",
+              accent2: "#ffab40",
+              accent3: "#ff9100",
+              accent4: "#ff6d00",
+            });
+            var deepOrange = Object.freeze({
+              base: "#ff5722",
+              lighten5: "#fbe9e7",
+              lighten4: "#ffccbc",
+              lighten3: "#ffab91",
+              lighten2: "#ff8a65",
+              lighten1: "#ff7043",
+              darken1: "#f4511e",
+              darken2: "#e64a19",
+              darken3: "#d84315",
+              darken4: "#bf360c",
+              accent1: "#ff9e80",
+              accent2: "#ff6e40",
+              accent3: "#ff3d00",
+              accent4: "#dd2c00",
+            });
+            var brown = Object.freeze({
+              base: "#795548",
+              lighten5: "#efebe9",
+              lighten4: "#d7ccc8",
+              lighten3: "#bcaaa4",
+              lighten2: "#a1887f",
+              lighten1: "#8d6e63",
+              darken1: "#6d4c41",
+              darken2: "#5d4037",
+              darken3: "#4e342e",
+              darken4: "#3e2723",
+            });
+            var blueGrey = Object.freeze({
+              base: "#607d8b",
+              lighten5: "#eceff1",
+              lighten4: "#cfd8dc",
+              lighten3: "#b0bec5",
+              lighten2: "#90a4ae",
+              lighten1: "#78909c",
+              darken1: "#546e7a",
+              darken2: "#455a64",
+              darken3: "#37474f",
+              darken4: "#263238",
+            });
+            var grey = Object.freeze({
+              base: "#9e9e9e",
+              lighten5: "#fafafa",
+              lighten4: "#f5f5f5",
+              lighten3: "#eeeeee",
+              lighten2: "#e0e0e0",
+              lighten1: "#bdbdbd",
+              darken1: "#757575",
+              darken2: "#616161",
+              darken3: "#424242",
+              darken4: "#212121",
+            });
+            var shades = Object.freeze({
+              black: "#000000",
+              white: "#ffffff",
+              transparent: "transparent",
+            });
+            /* harmony default export */ __webpack_exports__["default"] =
+              Object.freeze({
+                red: red,
+                pink: pink,
+                purple: purple,
+                deepPurple: deepPurple,
+                indigo: indigo,
+                blue: blue,
+                lightBlue: lightBlue,
+                cyan: cyan,
+                teal: teal,
+                green: green,
+                lightGreen: lightGreen,
+                lime: lime,
+                yellow: yellow,
+                amber: amber,
+                orange: orange,
+                deepOrange: deepOrange,
+                brown: brown,
+                blueGrey: blueGrey,
+                grey: grey,
+                shades: shades,
+              });
 
-  return ar;
-}; // Utilities
+            /***/
+          },
 
+        /***/ "./src/util/console.ts":
+          /*!*****************************!*\
+  !*** ./src/util/console.ts ***!
+  \*****************************/
+          /*! exports provided: consoleInfo, consoleWarn, consoleError, deprecate, breaking, removed */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "consoleInfo",
+              function () {
+                return consoleInfo;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "consoleWarn",
+              function () {
+                return consoleWarn;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "consoleError",
+              function () {
+                return consoleError;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "deprecate",
+              function () {
+                return deprecate;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "breaking",
+              function () {
+                return breaking;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "removed",
+              function () {
+                return removed;
+              }
+            );
+            /* harmony import */ var _framework__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! ../framework */ "./src/framework.ts");
 
+            function createMessage(message, vm, parent) {
+              if (
+                _framework__WEBPACK_IMPORTED_MODULE_0__["default"].config.silent
+              )
+                return;
 
+              if (parent) {
+                vm = {
+                  _isVue: true,
+                  $parent: parent,
+                  $options: vm,
+                };
+              }
 
+              if (vm) {
+                // Only show each message once per instance
+                vm.$_alreadyWarned = vm.$_alreadyWarned || [];
+                if (vm.$_alreadyWarned.includes(message)) return;
+                vm.$_alreadyWarned.push(message);
+              }
 
-function isCssColor(color) {
-  return !!color && !!color.match(/^(#|var\(--|(rgb|hsl)a?\()/);
-}
-function colorToInt(color) {
-  var rgb;
+              return (
+                "[Vuetify] " + message + (vm ? generateComponentTrace(vm) : "")
+              );
+            }
 
-  if (typeof color === 'number') {
-    rgb = color;
-  } else if (typeof color === 'string') {
-    var c = color[0] === '#' ? color.substring(1) : color;
+            function consoleInfo(message, vm, parent) {
+              var newMessage = createMessage(message, vm, parent);
+              newMessage != null && console.info(newMessage);
+            }
+            function consoleWarn(message, vm, parent) {
+              var newMessage = createMessage(message, vm, parent);
+              newMessage != null && console.warn(newMessage);
+            }
+            function consoleError(message, vm, parent) {
+              var newMessage = createMessage(message, vm, parent);
+              newMessage != null && console.error(newMessage);
+            }
+            function deprecate(original, replacement, vm, parent) {
+              consoleWarn(
+                "[UPGRADE] '" +
+                  original +
+                  "' is deprecated, use '" +
+                  replacement +
+                  "' instead.",
+                vm,
+                parent
+              );
+            }
+            function breaking(original, replacement, vm, parent) {
+              consoleError(
+                "[BREAKING] '" +
+                  original +
+                  "' has been removed, use '" +
+                  replacement +
+                  "' instead. For more information, see the upgrade guide https://github.com/vuetifyjs/vuetify/releases/tag/v2.0.0#user-content-upgrade-guide",
+                vm,
+                parent
+              );
+            }
+            function removed(original, vm, parent) {
+              consoleWarn(
+                "[REMOVED] '" +
+                  original +
+                  "' has been removed. You can safely omit it.",
+                vm,
+                parent
+              );
+            }
+            /**
+             * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js
+             */
+
+            var classifyRE = /(?:^|[-_])(\w)/g;
+
+            var classify = function classify(str) {
+              return str
+                .replace(classifyRE, function (c) {
+                  return c.toUpperCase();
+                })
+                .replace(/[-_]/g, "");
+            };
 
-    if (c.length === 3) {
-      c = c.split('').map(function (char) {
-        return char + char;
-      }).join('');
-    }
+            function formatComponentName(vm, includeFile) {
+              if (vm.$root === vm) {
+                return "<Root>";
+              }
 
-    if (c.length !== 6) {
-      Object(_console__WEBPACK_IMPORTED_MODULE_0__["consoleWarn"])("'" + color + "' is not a valid rgb color");
-    }
+              var options =
+                typeof vm === "function" && vm.cid != null
+                  ? vm.options
+                  : vm._isVue
+                  ? vm.$options || vm.constructor.options
+                  : vm || {};
+              var name = options.name || options._componentTag;
+              var file = options.__file;
+
+              if (!name && file) {
+                var match = file.match(/([^/\\]+)\.vue$/);
+                name = match && match[1];
+              }
 
-    rgb = parseInt(c, 16);
-  } else {
-    throw new TypeError("Colors can only be numbers or strings, recieved " + (color == null ? color : color.constructor.name) + " instead");
-  }
+              return (
+                (name ? "<" + classify(name) + ">" : "<Anonymous>") +
+                (file && includeFile !== false ? " at " + file : "")
+              );
+            }
 
-  if (rgb < 0) {
-    Object(_console__WEBPACK_IMPORTED_MODULE_0__["consoleWarn"])("Colors cannot be negative: '" + color + "'");
-    rgb = 0;
-  } else if (rgb > 0xffffff || isNaN(rgb)) {
-    Object(_console__WEBPACK_IMPORTED_MODULE_0__["consoleWarn"])("'" + color + "' is not a valid rgb color");
-    rgb = 0xffffff;
-  }
+            function generateComponentTrace(vm) {
+              if (vm._isVue && vm.$parent) {
+                var tree = [];
+                var currentRecursiveSequence = 0;
+
+                while (vm) {
+                  if (tree.length > 0) {
+                    var last = tree[tree.length - 1];
+
+                    if (last.constructor === vm.constructor) {
+                      currentRecursiveSequence++;
+                      vm = vm.$parent;
+                      continue;
+                    } else if (currentRecursiveSequence > 0) {
+                      tree[tree.length - 1] = [last, currentRecursiveSequence];
+                      currentRecursiveSequence = 0;
+                    }
+                  }
 
-  return rgb;
-}
-function classToHex(color, colors, currentTheme) {
-  var _a = __read(color.toString().trim().replace('-', '').split(' ', 2), 2),
-      colorName = _a[0],
-      colorModifier = _a[1];
-
-  var hexColor = '';
-
-  if (colorName && colorName in colors) {
-    if (colorModifier && colorModifier in colors[colorName]) {
-      hexColor = colors[colorName][colorModifier];
-    } else if ('base' in colors[colorName]) {
-      hexColor = colors[colorName].base;
-    }
-  } else if (colorName && colorName in currentTheme) {
-    hexColor = currentTheme[colorName];
-  }
+                  tree.push(vm);
+                  vm = vm.$parent;
+                }
 
-  return hexColor;
-}
-function intToHex(color) {
-  var hexColor = color.toString(16);
-  if (hexColor.length < 6) hexColor = '0'.repeat(6 - hexColor.length) + hexColor;
-  return '#' + hexColor;
-}
-function colorToHex(color) {
-  return intToHex(colorToInt(color));
-}
-/**
- * Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV
- *
- * @param color HSVA color as an array [0-360, 0-1, 0-1, 0-1]
- */
-
-function HSVAtoRGBA(hsva) {
-  var h = hsva.h,
-      s = hsva.s,
-      v = hsva.v,
-      a = hsva.a;
-
-  var f = function f(n) {
-    var k = (n + h / 60) % 6;
-    return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
-  };
-
-  var rgb = [f(5), f(3), f(1)].map(function (v) {
-    return Math.round(v * 255);
-  });
-  return {
-    r: rgb[0],
-    g: rgb[1],
-    b: rgb[2],
-    a: a
-  };
-}
-/**
- * Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV
- *
- * @param color RGBA color as an array [0-255, 0-255, 0-255, 0-1]
- */
-
-function RGBAtoHSVA(rgba) {
-  if (!rgba) return {
-    h: 0,
-    s: 1,
-    v: 1,
-    a: 1
-  };
-  var r = rgba.r / 255;
-  var g = rgba.g / 255;
-  var b = rgba.b / 255;
-  var max = Math.max(r, g, b);
-  var min = Math.min(r, g, b);
-  var h = 0;
-
-  if (max !== min) {
-    if (max === r) {
-      h = 60 * (0 + (g - b) / (max - min));
-    } else if (max === g) {
-      h = 60 * (2 + (b - r) / (max - min));
-    } else if (max === b) {
-      h = 60 * (4 + (r - g) / (max - min));
-    }
-  }
+                return (
+                  "\n\nfound in\n\n" +
+                  tree
+                    .map(function (vm, i) {
+                      return (
+                        "" +
+                        (i === 0 ? "---> " : " ".repeat(5 + i * 2)) +
+                        (Array.isArray(vm)
+                          ? formatComponentName(vm[0]) +
+                            "... (" +
+                            vm[1] +
+                            " recursive calls)"
+                          : formatComponentName(vm))
+                      );
+                    })
+                    .join("\n")
+                );
+              } else {
+                return "\n\n(found in " + formatComponentName(vm) + ")";
+              }
+            }
 
-  if (h < 0) h = h + 360;
-  var s = max === 0 ? 0 : (max - min) / max;
-  var hsv = [h, s, max];
-  return {
-    h: hsv[0],
-    s: hsv[1],
-    v: hsv[2],
-    a: rgba.a
-  };
-}
-function HSVAtoHSLA(hsva) {
-  var h = hsva.h,
-      s = hsva.s,
-      v = hsva.v,
-      a = hsva.a;
-  var l = v - v * s / 2;
-  var sprime = l === 1 || l === 0 ? 0 : (v - l) / Math.min(l, 1 - l);
-  return {
-    h: h,
-    s: sprime,
-    l: l,
-    a: a
-  };
-}
-function HSLAtoHSVA(hsl) {
-  var h = hsl.h,
-      s = hsl.s,
-      l = hsl.l,
-      a = hsl.a;
-  var v = l + s * Math.min(l, 1 - l);
-  var sprime = v === 0 ? 0 : 2 - 2 * l / v;
-  return {
-    h: h,
-    s: sprime,
-    v: v,
-    a: a
-  };
-}
-function RGBAtoCSS(rgba) {
-  return "rgba(" + rgba.r + ", " + rgba.g + ", " + rgba.b + ", " + rgba.a + ")";
-}
-function RGBtoCSS(rgba) {
-  return RGBAtoCSS(__assign(__assign({}, rgba), {
-    a: 1
-  }));
-}
-function RGBAtoHex(rgba) {
-  var toHex = function toHex(v) {
-    var h = Math.round(v).toString(16);
-    return ('00'.substr(0, 2 - h.length) + h).toUpperCase();
-  };
-
-  return "#" + [toHex(rgba.r), toHex(rgba.g), toHex(rgba.b), toHex(Math.round(rgba.a * 255))].join('');
-}
-function HexToRGBA(hex) {
-  var rgba = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["chunk"])(hex.slice(1), 2).map(function (c) {
-    return parseInt(c, 16);
-  });
-  return {
-    r: rgba[0],
-    g: rgba[1],
-    b: rgba[2],
-    a: Math.round(rgba[3] / 255 * 100) / 100
-  };
-}
-function HexToHSVA(hex) {
-  var rgb = HexToRGBA(hex);
-  return RGBAtoHSVA(rgb);
-}
-function HSVAtoHex(hsva) {
-  return RGBAtoHex(HSVAtoRGBA(hsva));
-}
-function parseHex(hex) {
-  if (hex.startsWith('#')) {
-    hex = hex.slice(1);
-  }
+            /***/
+          },
 
-  hex = hex.replace(/([^0-9a-f])/gi, 'F');
+        /***/ "./src/util/dateTimeUtils.ts":
+          /*!***********************************!*\
+  !*** ./src/util/dateTimeUtils.ts ***!
+  \***********************************/
+          /*! exports provided: weekNumber, isLeapYear */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "weekNumber",
+              function () {
+                return weekNumber;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "isLeapYear",
+              function () {
+                return isLeapYear;
+              }
+            );
+            function createUTCDate(year, month, day) {
+              if (month === void 0) {
+                month = 0;
+              }
 
-  if (hex.length === 3 || hex.length === 4) {
-    hex = hex.split('').map(function (x) {
-      return x + x;
-    }).join('');
-  }
+              if (day === void 0) {
+                day = 1;
+              }
 
-  if (hex.length === 6) {
-    hex = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["padEnd"])(hex, 8, 'F');
-  } else {
-    hex = Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["padEnd"])(Object(_helpers__WEBPACK_IMPORTED_MODULE_1__["padEnd"])(hex, 6), 8, 'F');
-  }
+              var date;
 
-  return ("#" + hex).toUpperCase().substr(0, 9);
-}
-function parseGradient(gradient, colors, currentTheme) {
-  return gradient.replace(/([a-z]+(\s[a-z]+-[1-5])?)(?=$|,)/gi, function (x) {
-    return classToHex(x, colors, currentTheme) || x;
-  }).replace(/(rgba\()#[0-9a-f]+(?=,)/gi, function (x) {
-    return 'rgba(' + Object.values(HexToRGBA(parseHex(x.replace(/rgba\(/, '')))).slice(0, 3).join(',');
-  });
-}
-function RGBtoInt(rgba) {
-  return (rgba.r << 16) + (rgba.g << 8) + rgba.b;
-}
-/**
- * Returns the contrast ratio (1-21) between two colors.
- *
- * @param c1 First color
- * @param c2 Second color
- */
-
-function contrastRatio(c1, c2) {
-  var _a = __read(Object(_color_transformSRGB__WEBPACK_IMPORTED_MODULE_2__["toXYZ"])(RGBtoInt(c1)), 2),
-      y1 = _a[1];
-
-  var _b = __read(Object(_color_transformSRGB__WEBPACK_IMPORTED_MODULE_2__["toXYZ"])(RGBtoInt(c2)), 2),
-      y2 = _b[1];
-
-  return (Math.max(y1, y2) + 0.05) / (Math.min(y1, y2) + 0.05);
-}
-
-/***/ }),
-
-/***/ "./src/util/colors.ts":
-/*!****************************!*\
-  !*** ./src/util/colors.ts ***!
-  \****************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var red = Object.freeze({
-  base: '#f44336',
-  lighten5: '#ffebee',
-  lighten4: '#ffcdd2',
-  lighten3: '#ef9a9a',
-  lighten2: '#e57373',
-  lighten1: '#ef5350',
-  darken1: '#e53935',
-  darken2: '#d32f2f',
-  darken3: '#c62828',
-  darken4: '#b71c1c',
-  accent1: '#ff8a80',
-  accent2: '#ff5252',
-  accent3: '#ff1744',
-  accent4: '#d50000'
-});
-var pink = Object.freeze({
-  base: '#e91e63',
-  lighten5: '#fce4ec',
-  lighten4: '#f8bbd0',
-  lighten3: '#f48fb1',
-  lighten2: '#f06292',
-  lighten1: '#ec407a',
-  darken1: '#d81b60',
-  darken2: '#c2185b',
-  darken3: '#ad1457',
-  darken4: '#880e4f',
-  accent1: '#ff80ab',
-  accent2: '#ff4081',
-  accent3: '#f50057',
-  accent4: '#c51162'
-});
-var purple = Object.freeze({
-  base: '#9c27b0',
-  lighten5: '#f3e5f5',
-  lighten4: '#e1bee7',
-  lighten3: '#ce93d8',
-  lighten2: '#ba68c8',
-  lighten1: '#ab47bc',
-  darken1: '#8e24aa',
-  darken2: '#7b1fa2',
-  darken3: '#6a1b9a',
-  darken4: '#4a148c',
-  accent1: '#ea80fc',
-  accent2: '#e040fb',
-  accent3: '#d500f9',
-  accent4: '#aa00ff'
-});
-var deepPurple = Object.freeze({
-  base: '#673ab7',
-  lighten5: '#ede7f6',
-  lighten4: '#d1c4e9',
-  lighten3: '#b39ddb',
-  lighten2: '#9575cd',
-  lighten1: '#7e57c2',
-  darken1: '#5e35b1',
-  darken2: '#512da8',
-  darken3: '#4527a0',
-  darken4: '#311b92',
-  accent1: '#b388ff',
-  accent2: '#7c4dff',
-  accent3: '#651fff',
-  accent4: '#6200ea'
-});
-var indigo = Object.freeze({
-  base: '#3f51b5',
-  lighten5: '#e8eaf6',
-  lighten4: '#c5cae9',
-  lighten3: '#9fa8da',
-  lighten2: '#7986cb',
-  lighten1: '#5c6bc0',
-  darken1: '#3949ab',
-  darken2: '#303f9f',
-  darken3: '#283593',
-  darken4: '#1a237e',
-  accent1: '#8c9eff',
-  accent2: '#536dfe',
-  accent3: '#3d5afe',
-  accent4: '#304ffe'
-});
-var blue = Object.freeze({
-  base: '#2196f3',
-  lighten5: '#e3f2fd',
-  lighten4: '#bbdefb',
-  lighten3: '#90caf9',
-  lighten2: '#64b5f6',
-  lighten1: '#42a5f5',
-  darken1: '#1e88e5',
-  darken2: '#1976d2',
-  darken3: '#1565c0',
-  darken4: '#0d47a1',
-  accent1: '#82b1ff',
-  accent2: '#448aff',
-  accent3: '#2979ff',
-  accent4: '#2962ff'
-});
-var lightBlue = Object.freeze({
-  base: '#03a9f4',
-  lighten5: '#e1f5fe',
-  lighten4: '#b3e5fc',
-  lighten3: '#81d4fa',
-  lighten2: '#4fc3f7',
-  lighten1: '#29b6f6',
-  darken1: '#039be5',
-  darken2: '#0288d1',
-  darken3: '#0277bd',
-  darken4: '#01579b',
-  accent1: '#80d8ff',
-  accent2: '#40c4ff',
-  accent3: '#00b0ff',
-  accent4: '#0091ea'
-});
-var cyan = Object.freeze({
-  base: '#00bcd4',
-  lighten5: '#e0f7fa',
-  lighten4: '#b2ebf2',
-  lighten3: '#80deea',
-  lighten2: '#4dd0e1',
-  lighten1: '#26c6da',
-  darken1: '#00acc1',
-  darken2: '#0097a7',
-  darken3: '#00838f',
-  darken4: '#006064',
-  accent1: '#84ffff',
-  accent2: '#18ffff',
-  accent3: '#00e5ff',
-  accent4: '#00b8d4'
-});
-var teal = Object.freeze({
-  base: '#009688',
-  lighten5: '#e0f2f1',
-  lighten4: '#b2dfdb',
-  lighten3: '#80cbc4',
-  lighten2: '#4db6ac',
-  lighten1: '#26a69a',
-  darken1: '#00897b',
-  darken2: '#00796b',
-  darken3: '#00695c',
-  darken4: '#004d40',
-  accent1: '#a7ffeb',
-  accent2: '#64ffda',
-  accent3: '#1de9b6',
-  accent4: '#00bfa5'
-});
-var green = Object.freeze({
-  base: '#4caf50',
-  lighten5: '#e8f5e9',
-  lighten4: '#c8e6c9',
-  lighten3: '#a5d6a7',
-  lighten2: '#81c784',
-  lighten1: '#66bb6a',
-  darken1: '#43a047',
-  darken2: '#388e3c',
-  darken3: '#2e7d32',
-  darken4: '#1b5e20',
-  accent1: '#b9f6ca',
-  accent2: '#69f0ae',
-  accent3: '#00e676',
-  accent4: '#00c853'
-});
-var lightGreen = Object.freeze({
-  base: '#8bc34a',
-  lighten5: '#f1f8e9',
-  lighten4: '#dcedc8',
-  lighten3: '#c5e1a5',
-  lighten2: '#aed581',
-  lighten1: '#9ccc65',
-  darken1: '#7cb342',
-  darken2: '#689f38',
-  darken3: '#558b2f',
-  darken4: '#33691e',
-  accent1: '#ccff90',
-  accent2: '#b2ff59',
-  accent3: '#76ff03',
-  accent4: '#64dd17'
-});
-var lime = Object.freeze({
-  base: '#cddc39',
-  lighten5: '#f9fbe7',
-  lighten4: '#f0f4c3',
-  lighten3: '#e6ee9c',
-  lighten2: '#dce775',
-  lighten1: '#d4e157',
-  darken1: '#c0ca33',
-  darken2: '#afb42b',
-  darken3: '#9e9d24',
-  darken4: '#827717',
-  accent1: '#f4ff81',
-  accent2: '#eeff41',
-  accent3: '#c6ff00',
-  accent4: '#aeea00'
-});
-var yellow = Object.freeze({
-  base: '#ffeb3b',
-  lighten5: '#fffde7',
-  lighten4: '#fff9c4',
-  lighten3: '#fff59d',
-  lighten2: '#fff176',
-  lighten1: '#ffee58',
-  darken1: '#fdd835',
-  darken2: '#fbc02d',
-  darken3: '#f9a825',
-  darken4: '#f57f17',
-  accent1: '#ffff8d',
-  accent2: '#ffff00',
-  accent3: '#ffea00',
-  accent4: '#ffd600'
-});
-var amber = Object.freeze({
-  base: '#ffc107',
-  lighten5: '#fff8e1',
-  lighten4: '#ffecb3',
-  lighten3: '#ffe082',
-  lighten2: '#ffd54f',
-  lighten1: '#ffca28',
-  darken1: '#ffb300',
-  darken2: '#ffa000',
-  darken3: '#ff8f00',
-  darken4: '#ff6f00',
-  accent1: '#ffe57f',
-  accent2: '#ffd740',
-  accent3: '#ffc400',
-  accent4: '#ffab00'
-});
-var orange = Object.freeze({
-  base: '#ff9800',
-  lighten5: '#fff3e0',
-  lighten4: '#ffe0b2',
-  lighten3: '#ffcc80',
-  lighten2: '#ffb74d',
-  lighten1: '#ffa726',
-  darken1: '#fb8c00',
-  darken2: '#f57c00',
-  darken3: '#ef6c00',
-  darken4: '#e65100',
-  accent1: '#ffd180',
-  accent2: '#ffab40',
-  accent3: '#ff9100',
-  accent4: '#ff6d00'
-});
-var deepOrange = Object.freeze({
-  base: '#ff5722',
-  lighten5: '#fbe9e7',
-  lighten4: '#ffccbc',
-  lighten3: '#ffab91',
-  lighten2: '#ff8a65',
-  lighten1: '#ff7043',
-  darken1: '#f4511e',
-  darken2: '#e64a19',
-  darken3: '#d84315',
-  darken4: '#bf360c',
-  accent1: '#ff9e80',
-  accent2: '#ff6e40',
-  accent3: '#ff3d00',
-  accent4: '#dd2c00'
-});
-var brown = Object.freeze({
-  base: '#795548',
-  lighten5: '#efebe9',
-  lighten4: '#d7ccc8',
-  lighten3: '#bcaaa4',
-  lighten2: '#a1887f',
-  lighten1: '#8d6e63',
-  darken1: '#6d4c41',
-  darken2: '#5d4037',
-  darken3: '#4e342e',
-  darken4: '#3e2723'
-});
-var blueGrey = Object.freeze({
-  base: '#607d8b',
-  lighten5: '#eceff1',
-  lighten4: '#cfd8dc',
-  lighten3: '#b0bec5',
-  lighten2: '#90a4ae',
-  lighten1: '#78909c',
-  darken1: '#546e7a',
-  darken2: '#455a64',
-  darken3: '#37474f',
-  darken4: '#263238'
-});
-var grey = Object.freeze({
-  base: '#9e9e9e',
-  lighten5: '#fafafa',
-  lighten4: '#f5f5f5',
-  lighten3: '#eeeeee',
-  lighten2: '#e0e0e0',
-  lighten1: '#bdbdbd',
-  darken1: '#757575',
-  darken2: '#616161',
-  darken3: '#424242',
-  darken4: '#212121'
-});
-var shades = Object.freeze({
-  black: '#000000',
-  white: '#ffffff',
-  transparent: 'transparent'
-});
-/* harmony default export */ __webpack_exports__["default"] = (Object.freeze({
-  red: red,
-  pink: pink,
-  purple: purple,
-  deepPurple: deepPurple,
-  indigo: indigo,
-  blue: blue,
-  lightBlue: lightBlue,
-  cyan: cyan,
-  teal: teal,
-  green: green,
-  lightGreen: lightGreen,
-  lime: lime,
-  yellow: yellow,
-  amber: amber,
-  orange: orange,
-  deepOrange: deepOrange,
-  brown: brown,
-  blueGrey: blueGrey,
-  grey: grey,
-  shades: shades
-}));
-
-/***/ }),
-
-/***/ "./src/util/console.ts":
-/*!*****************************!*\
-  !*** ./src/util/console.ts ***!
-  \*****************************/
-/*! exports provided: consoleInfo, consoleWarn, consoleError, deprecate, breaking, removed */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "consoleInfo", function() { return consoleInfo; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "consoleWarn", function() { return consoleWarn; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "consoleError", function() { return consoleError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deprecate", function() { return deprecate; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "breaking", function() { return breaking; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removed", function() { return removed; });
-/* harmony import */ var _framework__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../framework */ "./src/framework.ts");
-
-
-function createMessage(message, vm, parent) {
-  if (_framework__WEBPACK_IMPORTED_MODULE_0__["default"].config.silent) return;
-
-  if (parent) {
-    vm = {
-      _isVue: true,
-      $parent: parent,
-      $options: vm
-    };
-  }
+              if (year < 100 && year >= 0) {
+                date = new Date(Date.UTC(year, month, day));
 
-  if (vm) {
-    // Only show each message once per instance
-    vm.$_alreadyWarned = vm.$_alreadyWarned || [];
-    if (vm.$_alreadyWarned.includes(message)) return;
-    vm.$_alreadyWarned.push(message);
-  }
+                if (isFinite(date.getUTCFullYear())) {
+                  date.setUTCFullYear(year);
+                }
+              } else {
+                date = new Date(Date.UTC(year, month, day));
+              }
 
-  return "[Vuetify] " + message + (vm ? generateComponentTrace(vm) : '');
-}
-
-function consoleInfo(message, vm, parent) {
-  var newMessage = createMessage(message, vm, parent);
-  newMessage != null && console.info(newMessage);
-}
-function consoleWarn(message, vm, parent) {
-  var newMessage = createMessage(message, vm, parent);
-  newMessage != null && console.warn(newMessage);
-}
-function consoleError(message, vm, parent) {
-  var newMessage = createMessage(message, vm, parent);
-  newMessage != null && console.error(newMessage);
-}
-function deprecate(original, replacement, vm, parent) {
-  consoleWarn("[UPGRADE] '" + original + "' is deprecated, use '" + replacement + "' instead.", vm, parent);
-}
-function breaking(original, replacement, vm, parent) {
-  consoleError("[BREAKING] '" + original + "' has been removed, use '" + replacement + "' instead. For more information, see the upgrade guide https://github.com/vuetifyjs/vuetify/releases/tag/v2.0.0#user-content-upgrade-guide", vm, parent);
-}
-function removed(original, vm, parent) {
-  consoleWarn("[REMOVED] '" + original + "' has been removed. You can safely omit it.", vm, parent);
-}
-/**
- * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js
- */
-
-var classifyRE = /(?:^|[-_])(\w)/g;
-
-var classify = function classify(str) {
-  return str.replace(classifyRE, function (c) {
-    return c.toUpperCase();
-  }).replace(/[-_]/g, '');
-};
-
-function formatComponentName(vm, includeFile) {
-  if (vm.$root === vm) {
-    return '<Root>';
-  }
+              return date;
+            }
 
-  var options = typeof vm === 'function' && vm.cid != null ? vm.options : vm._isVue ? vm.$options || vm.constructor.options : vm || {};
-  var name = options.name || options._componentTag;
-  var file = options.__file;
+            function firstWeekOffset(year, firstDayOfWeek, firstDayOfYear) {
+              var firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear;
+              var firstWeekDayOfYear =
+                (7 +
+                  createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() -
+                  firstDayOfWeek) %
+                7;
+              return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1;
+            }
 
-  if (!name && file) {
-    var match = file.match(/([^/\\]+)\.vue$/);
-    name = match && match[1];
-  }
+            function dayOfYear(year, month, day, firstDayOfWeek) {
+              var dayOfYear = [
+                0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,
+              ][month];
 
-  return (name ? "<" + classify(name) + ">" : "<Anonymous>") + (file && includeFile !== false ? " at " + file : '');
-}
-
-function generateComponentTrace(vm) {
-  if (vm._isVue && vm.$parent) {
-    var tree = [];
-    var currentRecursiveSequence = 0;
-
-    while (vm) {
-      if (tree.length > 0) {
-        var last = tree[tree.length - 1];
-
-        if (last.constructor === vm.constructor) {
-          currentRecursiveSequence++;
-          vm = vm.$parent;
-          continue;
-        } else if (currentRecursiveSequence > 0) {
-          tree[tree.length - 1] = [last, currentRecursiveSequence];
-          currentRecursiveSequence = 0;
-        }
-      }
+              if (month > 1 && isLeapYear(year)) {
+                dayOfYear++;
+              }
 
-      tree.push(vm);
-      vm = vm.$parent;
-    }
+              return dayOfYear + day;
+            }
 
-    return '\n\nfound in\n\n' + tree.map(function (vm, i) {
-      return "" + (i === 0 ? '---> ' : ' '.repeat(5 + i * 2)) + (Array.isArray(vm) ? formatComponentName(vm[0]) + "... (" + vm[1] + " recursive calls)" : formatComponentName(vm));
-    }).join('\n');
-  } else {
-    return "\n\n(found in " + formatComponentName(vm) + ")";
-  }
-}
+            function weeksInYear(year, firstDayOfWeek, firstDayOfYear) {
+              var weekOffset = firstWeekOffset(
+                year,
+                firstDayOfWeek,
+                firstDayOfYear
+              );
+              var weekOffsetNext = firstWeekOffset(
+                year + 1,
+                firstDayOfWeek,
+                firstDayOfYear
+              );
+              var daysInYear = isLeapYear(year) ? 366 : 365;
+              return (daysInYear - weekOffset + weekOffsetNext) / 7;
+            }
 
-/***/ }),
+            function weekNumber(
+              year,
+              month,
+              day,
+              firstDayOfWeek,
+              localeFirstDayOfYear
+            ) {
+              var weekOffset = firstWeekOffset(
+                year,
+                firstDayOfWeek,
+                localeFirstDayOfYear
+              );
+              var week = Math.ceil(
+                (dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7
+              );
+
+              if (week < 1) {
+                return (
+                  week +
+                  weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear)
+                );
+              } else if (
+                week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)
+              ) {
+                return (
+                  week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)
+                );
+              } else {
+                return week;
+              }
+            }
+            function isLeapYear(year) {
+              return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+            }
 
-/***/ "./src/util/dateTimeUtils.ts":
-/*!***********************************!*\
-  !*** ./src/util/dateTimeUtils.ts ***!
-  \***********************************/
-/*! exports provided: weekNumber, isLeapYear */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "weekNumber", function() { return weekNumber; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLeapYear", function() { return isLeapYear; });
-function createUTCDate(year, month, day) {
-  if (month === void 0) {
-    month = 0;
-  }
+            /***/
+          },
 
-  if (day === void 0) {
-    day = 1;
-  }
+        /***/ "./src/util/dedupeModelListeners.ts":
+          /*!******************************************!*\
+  !*** ./src/util/dedupeModelListeners.ts ***!
+  \******************************************/
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return dedupeModelListeners;
+              }
+            );
+            /**
+             * Removes duplicate `@input` listeners when
+             * using v-model with functional components
+             *
+             * @see https://github.com/vuetifyjs/vuetify/issues/4460
+             */
+            function dedupeModelListeners(data) {
+              if (data.model && data.on && data.on.input) {
+                if (Array.isArray(data.on.input)) {
+                  var i = data.on.input.indexOf(data.model.callback);
+                  if (i > -1) data.on.input.splice(i, 1);
+                } else {
+                  delete data.on.input;
+                }
+              }
+            }
 
-  var date;
+            /***/
+          },
 
-  if (year < 100 && year >= 0) {
-    date = new Date(Date.UTC(year, month, day));
+        /***/ "./src/util/helpers.ts":
+          /*!*****************************!*\
+  !*** ./src/util/helpers.ts ***!
+  \*****************************/
+          /*! exports provided: createSimpleFunctional, directiveConfig, addOnceEventListener, passiveSupported, addPassiveEventListener, getNestedValue, deepEqual, getObjectValueByPath, getPropertyFromItem, createRange, getZIndex, escapeHTML, filterObjectOnKeys, convertToUnit, kebabCase, isObject, keyCodes, remapInternalIcon, keys, camelize, arrayDiff, upperFirst, groupItems, wrapInArray, sortItems, defaultFilter, searchItems, getSlotType, debounce, throttle, getPrefixedScopedSlots, getSlot, clamp, padEnd, chunk, humanReadableFileSize, camelizeObjectKeys, mergeDeep, fillArray */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createSimpleFunctional",
+              function () {
+                return createSimpleFunctional;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "directiveConfig",
+              function () {
+                return directiveConfig;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "addOnceEventListener",
+              function () {
+                return addOnceEventListener;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "passiveSupported",
+              function () {
+                return passiveSupported;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "addPassiveEventListener",
+              function () {
+                return addPassiveEventListener;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getNestedValue",
+              function () {
+                return getNestedValue;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "deepEqual",
+              function () {
+                return deepEqual;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getObjectValueByPath",
+              function () {
+                return getObjectValueByPath;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getPropertyFromItem",
+              function () {
+                return getPropertyFromItem;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "createRange",
+              function () {
+                return createRange;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getZIndex",
+              function () {
+                return getZIndex;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "escapeHTML",
+              function () {
+                return escapeHTML;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "filterObjectOnKeys",
+              function () {
+                return filterObjectOnKeys;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "convertToUnit",
+              function () {
+                return convertToUnit;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "kebabCase",
+              function () {
+                return kebabCase;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "isObject",
+              function () {
+                return isObject;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "keyCodes",
+              function () {
+                return keyCodes;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "remapInternalIcon",
+              function () {
+                return remapInternalIcon;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "keys",
+              function () {
+                return keys;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "camelize",
+              function () {
+                return camelize;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "arrayDiff",
+              function () {
+                return arrayDiff;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "upperFirst",
+              function () {
+                return upperFirst;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "groupItems",
+              function () {
+                return groupItems;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "wrapInArray",
+              function () {
+                return wrapInArray;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "sortItems",
+              function () {
+                return sortItems;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "defaultFilter",
+              function () {
+                return defaultFilter;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "searchItems",
+              function () {
+                return searchItems;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getSlotType",
+              function () {
+                return getSlotType;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "debounce",
+              function () {
+                return debounce;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "throttle",
+              function () {
+                return throttle;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getPrefixedScopedSlots",
+              function () {
+                return getPrefixedScopedSlots;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "getSlot",
+              function () {
+                return getSlot;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "clamp",
+              function () {
+                return clamp;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "padEnd",
+              function () {
+                return padEnd;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "chunk",
+              function () {
+                return chunk;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "humanReadableFileSize",
+              function () {
+                return humanReadableFileSize;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "camelizeObjectKeys",
+              function () {
+                return camelizeObjectKeys;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "mergeDeep",
+              function () {
+                return mergeDeep;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "fillArray",
+              function () {
+                return fillArray;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            function _typeof(obj) {
+              if (
+                typeof Symbol === "function" &&
+                typeof Symbol.iterator === "symbol"
+              ) {
+                _typeof = function _typeof(obj) {
+                  return typeof obj;
+                };
+              } else {
+                _typeof = function _typeof(obj) {
+                  return obj &&
+                    typeof Symbol === "function" &&
+                    obj.constructor === Symbol &&
+                    obj !== Symbol.prototype
+                    ? "symbol"
+                    : typeof obj;
+                };
+              }
+              return _typeof(obj);
+            }
 
-    if (isFinite(date.getUTCFullYear())) {
-      date.setUTCFullYear(year);
-    }
-  } else {
-    date = new Date(Date.UTC(year, month, day));
-  }
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-  return date;
-}
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
-function firstWeekOffset(year, firstDayOfWeek, firstDayOfYear) {
-  var firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear;
-  var firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7;
-  return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1;
-}
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-function dayOfYear(year, month, day, firstDayOfWeek) {
-  var dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month];
+                return ar;
+              };
 
-  if (month > 1 && isLeapYear(year)) {
-    dayOfYear++;
-  }
+            var __spread =
+              (undefined && undefined.__spread) ||
+              function () {
+                for (var ar = [], i = 0; i < arguments.length; i++) {
+                  ar = ar.concat(__read(arguments[i]));
+                }
 
-  return dayOfYear + day;
-}
-
-function weeksInYear(year, firstDayOfWeek, firstDayOfYear) {
-  var weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear);
-  var weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear);
-  var daysInYear = isLeapYear(year) ? 366 : 365;
-  return (daysInYear - weekOffset + weekOffsetNext) / 7;
-}
-
-function weekNumber(year, month, day, firstDayOfWeek, localeFirstDayOfYear) {
-  var weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear);
-  var week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7);
-
-  if (week < 1) {
-    return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear);
-  } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {
-    return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear);
-  } else {
-    return week;
-  }
-}
-function isLeapYear(year) {
-  return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
-}
+                return ar;
+              };
 
-/***/ }),
+            function createSimpleFunctional(c, el, name) {
+              if (el === void 0) {
+                el = "div";
+              }
 
-/***/ "./src/util/dedupeModelListeners.ts":
-/*!******************************************!*\
-  !*** ./src/util/dedupeModelListeners.ts ***!
-  \******************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return dedupeModelListeners; });
-/**
- * Removes duplicate `@input` listeners when
- * using v-model with functional components
- *
- * @see https://github.com/vuetifyjs/vuetify/issues/4460
- */
-function dedupeModelListeners(data) {
-  if (data.model && data.on && data.on.input) {
-    if (Array.isArray(data.on.input)) {
-      var i = data.on.input.indexOf(data.model.callback);
-      if (i > -1) data.on.input.splice(i, 1);
-    } else {
-      delete data.on.input;
-    }
-  }
-}
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                name: name || c.replace(/__/g, "-"),
+                functional: true,
+                render: function render(h, _a) {
+                  var data = _a.data,
+                    children = _a.children;
+                  data.staticClass = (
+                    c +
+                    " " +
+                    (data.staticClass || "")
+                  ).trim();
+                  return h(el, data, children);
+                },
+              });
+            }
+            function directiveConfig(binding, defaults) {
+              if (defaults === void 0) {
+                defaults = {};
+              }
 
-/***/ }),
+              return __assign(
+                __assign(__assign(__assign({}, defaults), binding.modifiers), {
+                  value: binding.arg,
+                }),
+                binding.value || {}
+              );
+            }
+            function addOnceEventListener(el, eventName, cb, options) {
+              if (options === void 0) {
+                options = false;
+              }
 
-/***/ "./src/util/helpers.ts":
-/*!*****************************!*\
-  !*** ./src/util/helpers.ts ***!
-  \*****************************/
-/*! exports provided: createSimpleFunctional, directiveConfig, addOnceEventListener, passiveSupported, addPassiveEventListener, getNestedValue, deepEqual, getObjectValueByPath, getPropertyFromItem, createRange, getZIndex, escapeHTML, filterObjectOnKeys, convertToUnit, kebabCase, isObject, keyCodes, remapInternalIcon, keys, camelize, arrayDiff, upperFirst, groupItems, wrapInArray, sortItems, defaultFilter, searchItems, getSlotType, debounce, throttle, getPrefixedScopedSlots, getSlot, clamp, padEnd, chunk, humanReadableFileSize, camelizeObjectKeys, mergeDeep, fillArray */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createSimpleFunctional", function() { return createSimpleFunctional; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "directiveConfig", function() { return directiveConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addOnceEventListener", function() { return addOnceEventListener; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "passiveSupported", function() { return passiveSupported; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addPassiveEventListener", function() { return addPassiveEventListener; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getNestedValue", function() { return getNestedValue; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deepEqual", function() { return deepEqual; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getObjectValueByPath", function() { return getObjectValueByPath; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPropertyFromItem", function() { return getPropertyFromItem; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createRange", function() { return createRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getZIndex", function() { return getZIndex; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "escapeHTML", function() { return escapeHTML; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filterObjectOnKeys", function() { return filterObjectOnKeys; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "convertToUnit", function() { return convertToUnit; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "kebabCase", function() { return kebabCase; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return isObject; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyCodes", function() { return keyCodes; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "remapInternalIcon", function() { return remapInternalIcon; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return keys; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "camelize", function() { return camelize; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "arrayDiff", function() { return arrayDiff; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upperFirst", function() { return upperFirst; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "groupItems", function() { return groupItems; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "wrapInArray", function() { return wrapInArray; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sortItems", function() { return sortItems; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultFilter", function() { return defaultFilter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "searchItems", function() { return searchItems; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSlotType", function() { return getSlotType; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return debounce; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return throttle; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPrefixedScopedSlots", function() { return getPrefixedScopedSlots; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSlot", function() { return getSlot; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "clamp", function() { return clamp; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "padEnd", function() { return padEnd; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "chunk", function() { return chunk; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "humanReadableFileSize", function() { return humanReadableFileSize; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "camelizeObjectKeys", function() { return camelizeObjectKeys; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeDeep", function() { return mergeDeep; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fillArray", function() { return fillArray; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
-
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
+              var once = function once(event) {
+                cb(event);
+                el.removeEventListener(eventName, once, options);
+              };
 
-  return ar;
-};
+              el.addEventListener(eventName, once, options);
+            }
+            var passiveSupported = false;
+
+            try {
+              if (typeof window !== "undefined") {
+                var testListenerOpts = Object.defineProperty({}, "passive", {
+                  get: function get() {
+                    passiveSupported = true;
+                  },
+                });
+                window.addEventListener(
+                  "testListener",
+                  testListenerOpts,
+                  testListenerOpts
+                );
+                window.removeEventListener(
+                  "testListener",
+                  testListenerOpts,
+                  testListenerOpts
+                );
+              }
+            } catch (e) {
+              console.warn(e);
+            }
 
-var __spread = undefined && undefined.__spread || function () {
-  for (var ar = [], i = 0; i < arguments.length; i++) {
-    ar = ar.concat(__read(arguments[i]));
-  }
+            function addPassiveEventListener(el, event, cb, options) {
+              el.addEventListener(
+                event,
+                cb,
+                passiveSupported ? options : false
+              );
+            }
+            function getNestedValue(obj, path, fallback) {
+              var last = path.length - 1;
+              if (last < 0) return obj === undefined ? fallback : obj;
 
-  return ar;
-};
+              for (var i = 0; i < last; i++) {
+                if (obj == null) {
+                  return fallback;
+                }
 
+                obj = obj[path[i]];
+              }
 
-function createSimpleFunctional(c, el, name) {
-  if (el === void 0) {
-    el = 'div';
-  }
+              if (obj == null) return fallback;
+              return obj[path[last]] === undefined ? fallback : obj[path[last]];
+            }
+            function deepEqual(a, b) {
+              if (a === b) return true;
+
+              if (
+                a instanceof Date &&
+                b instanceof Date &&
+                a.getTime() !== b.getTime()
+              ) {
+                // If the values are Date, compare them as timestamps
+                return false;
+              }
 
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    name: name || c.replace(/__/g, '-'),
-    functional: true,
-    render: function render(h, _a) {
-      var data = _a.data,
-          children = _a.children;
-      data.staticClass = (c + " " + (data.staticClass || '')).trim();
-      return h(el, data, children);
-    }
-  });
-}
-function directiveConfig(binding, defaults) {
-  if (defaults === void 0) {
-    defaults = {};
-  }
+              if (a !== Object(a) || b !== Object(b)) {
+                // If the values aren't objects, they were already checked for equality
+                return false;
+              }
 
-  return __assign(__assign(__assign(__assign({}, defaults), binding.modifiers), {
-    value: binding.arg
-  }), binding.value || {});
-}
-function addOnceEventListener(el, eventName, cb, options) {
-  if (options === void 0) {
-    options = false;
-  }
+              var props = Object.keys(a);
 
-  var once = function once(event) {
-    cb(event);
-    el.removeEventListener(eventName, once, options);
-  };
+              if (props.length !== Object.keys(b).length) {
+                // Different number of props, don't bother to check
+                return false;
+              }
 
-  el.addEventListener(eventName, once, options);
-}
-var passiveSupported = false;
+              return props.every(function (p) {
+                return deepEqual(a[p], b[p]);
+              });
+            }
+            function getObjectValueByPath(obj, path, fallback) {
+              // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621
+              if (obj == null || !path || typeof path !== "string")
+                return fallback;
+              if (obj[path] !== undefined) return obj[path];
+              path = path.replace(/\[(\w+)\]/g, ".$1"); // convert indexes to properties
 
-try {
-  if (typeof window !== 'undefined') {
-    var testListenerOpts = Object.defineProperty({}, 'passive', {
-      get: function get() {
-        passiveSupported = true;
-      }
-    });
-    window.addEventListener('testListener', testListenerOpts, testListenerOpts);
-    window.removeEventListener('testListener', testListenerOpts, testListenerOpts);
-  }
-} catch (e) {
-  console.warn(e);
-}
+              path = path.replace(/^\./, ""); // strip a leading dot
 
+              return getNestedValue(obj, path.split("."), fallback);
+            }
+            function getPropertyFromItem(item, property, fallback) {
+              if (property == null) return item === undefined ? fallback : item;
+              if (item !== Object(item))
+                return fallback === undefined ? item : fallback;
+              if (typeof property === "string")
+                return getObjectValueByPath(item, property, fallback);
+              if (Array.isArray(property))
+                return getNestedValue(item, property, fallback);
+              if (typeof property !== "function") return fallback;
+              var value = property(item, fallback);
+              return typeof value === "undefined" ? fallback : value;
+            }
+            function createRange(length) {
+              return Array.from(
+                {
+                  length: length,
+                },
+                function (v, k) {
+                  return k;
+                }
+              );
+            }
+            function getZIndex(el) {
+              if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0;
+              var index = +window
+                .getComputedStyle(el)
+                .getPropertyValue("z-index");
+              if (!index) return getZIndex(el.parentNode);
+              return index;
+            }
+            var tagsToReplace = {
+              "&": "&amp;",
+              "<": "&lt;",
+              ">": "&gt;",
+            };
+            function escapeHTML(str) {
+              return str.replace(/[&<>]/g, function (tag) {
+                return tagsToReplace[tag] || tag;
+              });
+            }
+            function filterObjectOnKeys(obj, keys) {
+              var filtered = {};
 
-function addPassiveEventListener(el, event, cb, options) {
-  el.addEventListener(event, cb, passiveSupported ? options : false);
-}
-function getNestedValue(obj, path, fallback) {
-  var last = path.length - 1;
-  if (last < 0) return obj === undefined ? fallback : obj;
+              for (var i = 0; i < keys.length; i++) {
+                var key = keys[i];
 
-  for (var i = 0; i < last; i++) {
-    if (obj == null) {
-      return fallback;
-    }
+                if (typeof obj[key] !== "undefined") {
+                  filtered[key] = obj[key];
+                }
+              }
 
-    obj = obj[path[i]];
-  }
+              return filtered;
+            }
+            function convertToUnit(str, unit) {
+              if (unit === void 0) {
+                unit = "px";
+              }
 
-  if (obj == null) return fallback;
-  return obj[path[last]] === undefined ? fallback : obj[path[last]];
-}
-function deepEqual(a, b) {
-  if (a === b) return true;
+              if (str == null || str === "") {
+                return undefined;
+              } else if (isNaN(+str)) {
+                return String(str);
+              } else {
+                return "" + Number(str) + unit;
+              }
+            }
+            function kebabCase(str) {
+              return (str || "")
+                .replace(/([a-z])([A-Z])/g, "$1-$2")
+                .toLowerCase();
+            }
+            function isObject(obj) {
+              return obj !== null && _typeof(obj) === "object";
+            } // KeyboardEvent.keyCode aliases
+
+            var keyCodes = Object.freeze({
+              enter: 13,
+              tab: 9,
+              delete: 46,
+              esc: 27,
+              space: 32,
+              up: 38,
+              down: 40,
+              left: 37,
+              right: 39,
+              end: 35,
+              home: 36,
+              del: 46,
+              backspace: 8,
+              insert: 45,
+              pageup: 33,
+              pagedown: 34,
+            }); // This remaps internal names like '$cancel' or '$vuetify.icons.cancel'
+            // to the current name or component for that icon.
+
+            function remapInternalIcon(vm, iconName) {
+              if (!iconName.startsWith("$")) {
+                return iconName;
+              } // Get the target icon name
+
+              var iconPath =
+                "$vuetify.icons.values." +
+                iconName.split("$").pop().split(".").pop(); // Now look up icon indirection name,
+              // e.g. '$vuetify.icons.values.cancel'
+
+              return getObjectValueByPath(vm, iconPath, iconName);
+            }
+            function keys(o) {
+              return Object.keys(o);
+            }
+            /**
+             * Camelize a hyphen-delimited string.
+             */
+
+            var camelizeRE = /-(\w)/g;
+            var camelize = function camelize(str) {
+              return str.replace(camelizeRE, function (_, c) {
+                return c ? c.toUpperCase() : "";
+              });
+            };
+            /**
+             * Returns the set difference of B and A, i.e. the set of elements in B but not in A
+             */
 
-  if (a instanceof Date && b instanceof Date && a.getTime() !== b.getTime()) {
-    // If the values are Date, compare them as timestamps
-    return false;
-  }
+            function arrayDiff(a, b) {
+              var diff = [];
 
-  if (a !== Object(a) || b !== Object(b)) {
-    // If the values aren't objects, they were already checked for equality
-    return false;
-  }
+              for (var i = 0; i < b.length; i++) {
+                if (a.indexOf(b[i]) < 0) diff.push(b[i]);
+              }
 
-  var props = Object.keys(a);
+              return diff;
+            }
+            /**
+             * Makes the first character of a string uppercase
+             */
 
-  if (props.length !== Object.keys(b).length) {
-    // Different number of props, don't bother to check
-    return false;
-  }
+            function upperFirst(str) {
+              return str.charAt(0).toUpperCase() + str.slice(1);
+            }
+            function groupItems(items, groupBy, groupDesc) {
+              var key = groupBy[0];
+              var groups = [];
+              var current = null;
+
+              for (var i = 0; i < items.length; i++) {
+                var item = items[i];
+                var val = getObjectValueByPath(item, key);
+
+                if (current !== val) {
+                  current = val;
+                  groups.push({
+                    name: val,
+                    items: [],
+                  });
+                }
 
-  return props.every(function (p) {
-    return deepEqual(a[p], b[p]);
-  });
-}
-function getObjectValueByPath(obj, path, fallback) {
-  // credit: http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key#comment55278413_6491621
-  if (obj == null || !path || typeof path !== 'string') return fallback;
-  if (obj[path] !== undefined) return obj[path];
-  path = path.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
-
-  path = path.replace(/^\./, ''); // strip a leading dot
-
-  return getNestedValue(obj, path.split('.'), fallback);
-}
-function getPropertyFromItem(item, property, fallback) {
-  if (property == null) return item === undefined ? fallback : item;
-  if (item !== Object(item)) return fallback === undefined ? item : fallback;
-  if (typeof property === 'string') return getObjectValueByPath(item, property, fallback);
-  if (Array.isArray(property)) return getNestedValue(item, property, fallback);
-  if (typeof property !== 'function') return fallback;
-  var value = property(item, fallback);
-  return typeof value === 'undefined' ? fallback : value;
-}
-function createRange(length) {
-  return Array.from({
-    length: length
-  }, function (v, k) {
-    return k;
-  });
-}
-function getZIndex(el) {
-  if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0;
-  var index = +window.getComputedStyle(el).getPropertyValue('z-index');
-  if (!index) return getZIndex(el.parentNode);
-  return index;
-}
-var tagsToReplace = {
-  '&': '&amp;',
-  '<': '&lt;',
-  '>': '&gt;'
-};
-function escapeHTML(str) {
-  return str.replace(/[&<>]/g, function (tag) {
-    return tagsToReplace[tag] || tag;
-  });
-}
-function filterObjectOnKeys(obj, keys) {
-  var filtered = {};
-
-  for (var i = 0; i < keys.length; i++) {
-    var key = keys[i];
-
-    if (typeof obj[key] !== 'undefined') {
-      filtered[key] = obj[key];
-    }
-  }
+                groups[groups.length - 1].items.push(item);
+              }
 
-  return filtered;
-}
-function convertToUnit(str, unit) {
-  if (unit === void 0) {
-    unit = 'px';
-  }
+              return groups;
+            }
+            function wrapInArray(v) {
+              return v != null ? (Array.isArray(v) ? v : [v]) : [];
+            }
+            function sortItems(items, sortBy, sortDesc, locale, customSorters) {
+              if (sortBy === null || !sortBy.length) return items;
+              var stringCollator = new Intl.Collator(locale, {
+                sensitivity: "accent",
+                usage: "sort",
+              });
+              return items.sort(function (a, b) {
+                var _a, _b;
+
+                for (var i = 0; i < sortBy.length; i++) {
+                  var sortKey = sortBy[i];
+                  var sortA = getObjectValueByPath(a, sortKey);
+                  var sortB = getObjectValueByPath(b, sortKey);
+
+                  if (sortDesc[i]) {
+                    (_a = __read([sortB, sortA], 2)),
+                      (sortA = _a[0]),
+                      (sortB = _a[1]);
+                  }
 
-  if (str == null || str === '') {
-    return undefined;
-  } else if (isNaN(+str)) {
-    return String(str);
-  } else {
-    return "" + Number(str) + unit;
-  }
-}
-function kebabCase(str) {
-  return (str || '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
-}
-function isObject(obj) {
-  return obj !== null && _typeof(obj) === 'object';
-} // KeyboardEvent.keyCode aliases
-
-var keyCodes = Object.freeze({
-  enter: 13,
-  tab: 9,
-  delete: 46,
-  esc: 27,
-  space: 32,
-  up: 38,
-  down: 40,
-  left: 37,
-  right: 39,
-  end: 35,
-  home: 36,
-  del: 46,
-  backspace: 8,
-  insert: 45,
-  pageup: 33,
-  pagedown: 34
-}); // This remaps internal names like '$cancel' or '$vuetify.icons.cancel'
-// to the current name or component for that icon.
-
-function remapInternalIcon(vm, iconName) {
-  if (!iconName.startsWith('$')) {
-    return iconName;
-  } // Get the target icon name
-
-
-  var iconPath = "$vuetify.icons.values." + iconName.split('$').pop().split('.').pop(); // Now look up icon indirection name,
-  // e.g. '$vuetify.icons.values.cancel'
-
-  return getObjectValueByPath(vm, iconPath, iconName);
-}
-function keys(o) {
-  return Object.keys(o);
-}
-/**
- * Camelize a hyphen-delimited string.
- */
-
-var camelizeRE = /-(\w)/g;
-var camelize = function camelize(str) {
-  return str.replace(camelizeRE, function (_, c) {
-    return c ? c.toUpperCase() : '';
-  });
-};
-/**
- * Returns the set difference of B and A, i.e. the set of elements in B but not in A
- */
-
-function arrayDiff(a, b) {
-  var diff = [];
-
-  for (var i = 0; i < b.length; i++) {
-    if (a.indexOf(b[i]) < 0) diff.push(b[i]);
-  }
+                  if (customSorters && customSorters[sortKey]) {
+                    var customResult = customSorters[sortKey](sortA, sortB);
+                    if (!customResult) continue;
+                    return customResult;
+                  } // Check if both cannot be evaluated
 
-  return diff;
-}
-/**
- * Makes the first character of a string uppercase
- */
-
-function upperFirst(str) {
-  return str.charAt(0).toUpperCase() + str.slice(1);
-}
-function groupItems(items, groupBy, groupDesc) {
-  var key = groupBy[0];
-  var groups = [];
-  var current = null;
-
-  for (var i = 0; i < items.length; i++) {
-    var item = items[i];
-    var val = getObjectValueByPath(item, key);
-
-    if (current !== val) {
-      current = val;
-      groups.push({
-        name: val,
-        items: []
-      });
-    }
-
-    groups[groups.length - 1].items.push(item);
-  }
+                  if (sortA === null && sortB === null) {
+                    continue;
+                  }
 
-  return groups;
-}
-function wrapInArray(v) {
-  return v != null ? Array.isArray(v) ? v : [v] : [];
-}
-function sortItems(items, sortBy, sortDesc, locale, customSorters) {
-  if (sortBy === null || !sortBy.length) return items;
-  var stringCollator = new Intl.Collator(locale, {
-    sensitivity: 'accent',
-    usage: 'sort'
-  });
-  return items.sort(function (a, b) {
-    var _a, _b;
-
-    for (var i = 0; i < sortBy.length; i++) {
-      var sortKey = sortBy[i];
-      var sortA = getObjectValueByPath(a, sortKey);
-      var sortB = getObjectValueByPath(b, sortKey);
-
-      if (sortDesc[i]) {
-        _a = __read([sortB, sortA], 2), sortA = _a[0], sortB = _a[1];
-      }
+                  (_b = __read(
+                    [sortA, sortB].map(function (s) {
+                      return (s || "").toString().toLocaleLowerCase();
+                    }),
+                    2
+                  )),
+                    (sortA = _b[0]),
+                    (sortB = _b[1]);
+
+                  if (sortA !== sortB) {
+                    if (!isNaN(sortA) && !isNaN(sortB))
+                      return Number(sortA) - Number(sortB);
+                    return stringCollator.compare(sortA, sortB);
+                  }
+                }
 
-      if (customSorters && customSorters[sortKey]) {
-        var customResult = customSorters[sortKey](sortA, sortB);
-        if (!customResult) continue;
-        return customResult;
-      } // Check if both cannot be evaluated
+                return 0;
+              });
+            }
+            function defaultFilter(value, search, item) {
+              return (
+                value != null &&
+                search != null &&
+                typeof value !== "boolean" &&
+                value
+                  .toString()
+                  .toLocaleLowerCase()
+                  .indexOf(search.toLocaleLowerCase()) !== -1
+              );
+            }
+            function searchItems(items, search) {
+              if (!search) return items;
+              search = search.toString().toLowerCase();
+              if (search.trim() === "") return items;
+              return items.filter(function (item) {
+                return Object.keys(item).some(function (key) {
+                  return defaultFilter(
+                    getObjectValueByPath(item, key),
+                    search,
+                    item
+                  );
+                });
+              });
+            }
+            /**
+             * Returns:
+             *  - 'normal' for old style slots - `<template slot="default">`
+             *  - 'scoped' for old style scoped slots (`<template slot="default" slot-scope="data">`) or bound v-slot (`#default="data"`)
+             *  - 'v-slot' for unbound v-slot (`#default`) - only if the third param is true, otherwise counts as scoped
+             */
+
+            function getSlotType(vm, name, split) {
+              if (
+                vm.$slots[name] &&
+                vm.$scopedSlots[name] &&
+                vm.$scopedSlots[name].name
+              ) {
+                return split ? "v-slot" : "scoped";
+              }
 
+              if (vm.$slots[name]) return "normal";
+              if (vm.$scopedSlots[name]) return "scoped";
+            }
+            function debounce(fn, delay) {
+              var timeoutId = 0;
+              return function () {
+                var args = [];
 
-      if (sortA === null && sortB === null) {
-        continue;
-      }
+                for (var _i = 0; _i < arguments.length; _i++) {
+                  args[_i] = arguments[_i];
+                }
 
-      _b = __read([sortA, sortB].map(function (s) {
-        return (s || '').toString().toLocaleLowerCase();
-      }), 2), sortA = _b[0], sortB = _b[1];
+                clearTimeout(timeoutId);
+                timeoutId = setTimeout(function () {
+                  return fn.apply(void 0, __spread(args));
+                }, delay);
+              };
+            }
+            function throttle(fn, limit) {
+              var throttling = false;
+              return function () {
+                var args = [];
 
-      if (sortA !== sortB) {
-        if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB);
-        return stringCollator.compare(sortA, sortB);
-      }
-    }
-
-    return 0;
-  });
-}
-function defaultFilter(value, search, item) {
-  return value != null && search != null && typeof value !== 'boolean' && value.toString().toLocaleLowerCase().indexOf(search.toLocaleLowerCase()) !== -1;
-}
-function searchItems(items, search) {
-  if (!search) return items;
-  search = search.toString().toLowerCase();
-  if (search.trim() === '') return items;
-  return items.filter(function (item) {
-    return Object.keys(item).some(function (key) {
-      return defaultFilter(getObjectValueByPath(item, key), search, item);
-    });
-  });
-}
-/**
- * Returns:
- *  - 'normal' for old style slots - `<template slot="default">`
- *  - 'scoped' for old style scoped slots (`<template slot="default" slot-scope="data">`) or bound v-slot (`#default="data"`)
- *  - 'v-slot' for unbound v-slot (`#default`) - only if the third param is true, otherwise counts as scoped
- */
-
-function getSlotType(vm, name, split) {
-  if (vm.$slots[name] && vm.$scopedSlots[name] && vm.$scopedSlots[name].name) {
-    return split ? 'v-slot' : 'scoped';
-  }
+                for (var _i = 0; _i < arguments.length; _i++) {
+                  args[_i] = arguments[_i];
+                }
 
-  if (vm.$slots[name]) return 'normal';
-  if (vm.$scopedSlots[name]) return 'scoped';
-}
-function debounce(fn, delay) {
-  var timeoutId = 0;
-  return function () {
-    var args = [];
-
-    for (var _i = 0; _i < arguments.length; _i++) {
-      args[_i] = arguments[_i];
-    }
-
-    clearTimeout(timeoutId);
-    timeoutId = setTimeout(function () {
-      return fn.apply(void 0, __spread(args));
-    }, delay);
-  };
-}
-function throttle(fn, limit) {
-  var throttling = false;
-  return function () {
-    var args = [];
-
-    for (var _i = 0; _i < arguments.length; _i++) {
-      args[_i] = arguments[_i];
-    }
-
-    if (!throttling) {
-      throttling = true;
-      setTimeout(function () {
-        return throttling = false;
-      }, limit);
-      return fn.apply(void 0, __spread(args));
-    }
-  };
-}
-function getPrefixedScopedSlots(prefix, scopedSlots) {
-  return Object.keys(scopedSlots).filter(function (k) {
-    return k.startsWith(prefix);
-  }).reduce(function (obj, k) {
-    obj[k.replace(prefix, '')] = scopedSlots[k];
-    return obj;
-  }, {});
-}
-function getSlot(vm, name, data, optional) {
-  if (name === void 0) {
-    name = 'default';
-  }
+                if (!throttling) {
+                  throttling = true;
+                  setTimeout(function () {
+                    return (throttling = false);
+                  }, limit);
+                  return fn.apply(void 0, __spread(args));
+                }
+              };
+            }
+            function getPrefixedScopedSlots(prefix, scopedSlots) {
+              return Object.keys(scopedSlots)
+                .filter(function (k) {
+                  return k.startsWith(prefix);
+                })
+                .reduce(function (obj, k) {
+                  obj[k.replace(prefix, "")] = scopedSlots[k];
+                  return obj;
+                }, {});
+            }
+            function getSlot(vm, name, data, optional) {
+              if (name === void 0) {
+                name = "default";
+              }
 
-  if (optional === void 0) {
-    optional = false;
-  }
+              if (optional === void 0) {
+                optional = false;
+              }
 
-  if (vm.$scopedSlots[name]) {
-    return vm.$scopedSlots[name](data instanceof Function ? data() : data);
-  } else if (vm.$slots[name] && (!data || optional)) {
-    return vm.$slots[name];
-  }
+              if (vm.$scopedSlots[name]) {
+                return vm.$scopedSlots[name](
+                  data instanceof Function ? data() : data
+                );
+              } else if (vm.$slots[name] && (!data || optional)) {
+                return vm.$slots[name];
+              }
 
-  return undefined;
-}
-function clamp(value, min, max) {
-  if (min === void 0) {
-    min = 0;
-  }
+              return undefined;
+            }
+            function clamp(value, min, max) {
+              if (min === void 0) {
+                min = 0;
+              }
 
-  if (max === void 0) {
-    max = 1;
-  }
+              if (max === void 0) {
+                max = 1;
+              }
 
-  return Math.max(min, Math.min(max, value));
-}
-function padEnd(str, length, char) {
-  if (char === void 0) {
-    char = '0';
-  }
+              return Math.max(min, Math.min(max, value));
+            }
+            function padEnd(str, length, char) {
+              if (char === void 0) {
+                char = "0";
+              }
 
-  return str + char.repeat(Math.max(0, length - str.length));
-}
-function chunk(str, size) {
-  if (size === void 0) {
-    size = 1;
-  }
+              return str + char.repeat(Math.max(0, length - str.length));
+            }
+            function chunk(str, size) {
+              if (size === void 0) {
+                size = 1;
+              }
 
-  var chunked = [];
-  var index = 0;
+              var chunked = [];
+              var index = 0;
 
-  while (index < str.length) {
-    chunked.push(str.substr(index, size));
-    index += size;
-  }
+              while (index < str.length) {
+                chunked.push(str.substr(index, size));
+                index += size;
+              }
 
-  return chunked;
-}
-function humanReadableFileSize(bytes, binary) {
-  if (binary === void 0) {
-    binary = false;
-  }
+              return chunked;
+            }
+            function humanReadableFileSize(bytes, binary) {
+              if (binary === void 0) {
+                binary = false;
+              }
 
-  var base = binary ? 1024 : 1000;
+              var base = binary ? 1024 : 1000;
 
-  if (bytes < base) {
-    return bytes + " B";
-  }
+              if (bytes < base) {
+                return bytes + " B";
+              }
 
-  var prefix = binary ? ['Ki', 'Mi', 'Gi'] : ['k', 'M', 'G'];
-  var unit = -1;
+              var prefix = binary ? ["Ki", "Mi", "Gi"] : ["k", "M", "G"];
+              var unit = -1;
 
-  while (Math.abs(bytes) >= base && unit < prefix.length - 1) {
-    bytes /= base;
-    ++unit;
-  }
+              while (Math.abs(bytes) >= base && unit < prefix.length - 1) {
+                bytes /= base;
+                ++unit;
+              }
 
-  return bytes.toFixed(1) + " " + prefix[unit] + "B";
-}
-function camelizeObjectKeys(obj) {
-  if (!obj) return {};
-  return Object.keys(obj).reduce(function (o, key) {
-    o[camelize(key)] = obj[key];
-    return o;
-  }, {});
-}
-function mergeDeep(source, target) {
-  if (source === void 0) {
-    source = {};
-  }
+              return bytes.toFixed(1) + " " + prefix[unit] + "B";
+            }
+            function camelizeObjectKeys(obj) {
+              if (!obj) return {};
+              return Object.keys(obj).reduce(function (o, key) {
+                o[camelize(key)] = obj[key];
+                return o;
+              }, {});
+            }
+            function mergeDeep(source, target) {
+              if (source === void 0) {
+                source = {};
+              }
 
-  if (target === void 0) {
-    target = {};
-  }
+              if (target === void 0) {
+                target = {};
+              }
 
-  for (var key in target) {
-    var sourceProperty = source[key];
-    var targetProperty = target[key]; // Only continue deep merging if
-    // both properties are objects
+              for (var key in target) {
+                var sourceProperty = source[key];
+                var targetProperty = target[key]; // Only continue deep merging if
+                // both properties are objects
 
-    if (isObject(sourceProperty) && isObject(targetProperty)) {
-      source[key] = mergeDeep(sourceProperty, targetProperty);
-      continue;
-    }
+                if (isObject(sourceProperty) && isObject(targetProperty)) {
+                  source[key] = mergeDeep(sourceProperty, targetProperty);
+                  continue;
+                }
 
-    source[key] = targetProperty;
-  }
+                source[key] = targetProperty;
+              }
 
-  return source;
-}
-function fillArray(length, obj) {
-  return Array(length).fill(obj);
-}
+              return source;
+            }
+            function fillArray(length, obj) {
+              return Array(length).fill(obj);
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/util/mergeData.ts":
-/*!*******************************!*\
+        /***/ "./src/util/mergeData.ts":
+          /*!*******************************!*\
   !*** ./src/util/mergeData.ts ***!
   \*******************************/
-/*! exports provided: default, mergeStyles, mergeClasses, mergeListeners */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return mergeData; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeStyles", function() { return mergeStyles; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeClasses", function() { return mergeClasses; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeListeners", function() { return mergeListeners; });
-/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/util/helpers.ts");
-var __assign = undefined && undefined.__assign || function () {
-  __assign = Object.assign || function (t) {
-    for (var s, i = 1, n = arguments.length; i < n; i++) {
-      s = arguments[i];
-
-      for (var p in s) {
-        if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-    }
-
-    return t;
-  };
-
-  return __assign.apply(this, arguments);
-};
-
-var __values = undefined && undefined.__values || function (o) {
-  var s = typeof Symbol === "function" && Symbol.iterator,
-      m = s && o[s],
-      i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-    next: function next() {
-      if (o && i >= o.length) o = void 0;
-      return {
-        value: o && o[i++],
-        done: !o
-      };
-    }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-};
-
-var __read = undefined && undefined.__read || function (o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o),
-      r,
-      ar = [],
-      e;
-
-  try {
-    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
-      ar.push(r.value);
-    }
-  } catch (error) {
-    e = {
-      error: error
-    };
-  } finally {
-    try {
-      if (r && !r.done && (m = i["return"])) m.call(i);
-    } finally {
-      if (e) throw e.error;
-    }
-  }
-
-  return ar;
-};
-
-
-var pattern = {
-  styleList: /;(?![^(]*\))/g,
-  styleProp: /:(.*)/
-};
-
-function parseStyle(style) {
-  var e_1, _a;
-
-  var styleMap = {};
-
-  try {
-    for (var _b = __values(style.split(pattern.styleList)), _c = _b.next(); !_c.done; _c = _b.next()) {
-      var s = _c.value;
-
-      var _d = __read(s.split(pattern.styleProp), 2),
-          key = _d[0],
-          val = _d[1];
+          /*! exports provided: default, mergeStyles, mergeClasses, mergeListeners */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return mergeData;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "mergeStyles",
+              function () {
+                return mergeStyles;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "mergeClasses",
+              function () {
+                return mergeClasses;
+              }
+            );
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "mergeListeners",
+              function () {
+                return mergeListeners;
+              }
+            );
+            /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! ./helpers */ "./src/util/helpers.ts");
+            var __assign =
+              (undefined && undefined.__assign) ||
+              function () {
+                __assign =
+                  Object.assign ||
+                  function (t) {
+                    for (var s, i = 1, n = arguments.length; i < n; i++) {
+                      s = arguments[i];
+
+                      for (var p in s) {
+                        if (Object.prototype.hasOwnProperty.call(s, p))
+                          t[p] = s[p];
+                      }
+                    }
+
+                    return t;
+                  };
+
+                return __assign.apply(this, arguments);
+              };
 
-      key = key.trim();
+            var __values =
+              (undefined && undefined.__values) ||
+              function (o) {
+                var s = typeof Symbol === "function" && Symbol.iterator,
+                  m = s && o[s],
+                  i = 0;
+                if (m) return m.call(o);
+                if (o && typeof o.length === "number")
+                  return {
+                    next: function next() {
+                      if (o && i >= o.length) o = void 0;
+                      return {
+                        value: o && o[i++],
+                        done: !o,
+                      };
+                    },
+                  };
+                throw new TypeError(
+                  s
+                    ? "Object is not iterable."
+                    : "Symbol.iterator is not defined."
+                );
+              };
 
-      if (!key) {
-        continue;
-      } // May be undefined if the `key: value` pair is incomplete.
+            var __read =
+              (undefined && undefined.__read) ||
+              function (o, n) {
+                var m = typeof Symbol === "function" && o[Symbol.iterator];
+                if (!m) return o;
+                var i = m.call(o),
+                  r,
+                  ar = [],
+                  e;
 
+                try {
+                  while ((n === void 0 || n-- > 0) && !(r = i.next()).done) {
+                    ar.push(r.value);
+                  }
+                } catch (error) {
+                  e = {
+                    error: error,
+                  };
+                } finally {
+                  try {
+                    if (r && !r.done && (m = i["return"])) m.call(i);
+                  } finally {
+                    if (e) throw e.error;
+                  }
+                }
 
-      if (typeof val === 'string') {
-        val = val.trim();
-      }
+                return ar;
+              };
 
-      styleMap[Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["camelize"])(key)] = val;
-    }
-  } catch (e_1_1) {
-    e_1 = {
-      error: e_1_1
-    };
-  } finally {
-    try {
-      if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
-    } finally {
-      if (e_1) throw e_1.error;
-    }
-  }
+            var pattern = {
+              styleList: /;(?![^(]*\))/g,
+              styleProp: /:(.*)/,
+            };
 
-  return styleMap;
-}
-
-function mergeData() {
-  var e_2, _a;
-
-  var mergeTarget = {};
-  var i = arguments.length;
-  var prop; // Allow for variadic argument length.
-
-  while (i--) {
-    try {
-      // Iterate through the data properties and execute merge strategies
-      // Object.keys eliminates need for hasOwnProperty call
-      for (var _b = (e_2 = void 0, __values(Object.keys(arguments[i]))), _c = _b.next(); !_c.done; _c = _b.next()) {
-        prop = _c.value;
-
-        switch (prop) {
-          // Array merge strategy (array concatenation)
-          case 'class':
-          case 'directives':
-            if (arguments[i][prop]) {
-              mergeTarget[prop] = mergeClasses(mergeTarget[prop], arguments[i][prop]);
-            }
+            function parseStyle(style) {
+              var e_1, _a;
 
-            break;
+              var styleMap = {};
 
-          case 'style':
-            if (arguments[i][prop]) {
-              mergeTarget[prop] = mergeStyles(mergeTarget[prop], arguments[i][prop]);
-            }
+              try {
+                for (
+                  var _b = __values(style.split(pattern.styleList)),
+                    _c = _b.next();
+                  !_c.done;
+                  _c = _b.next()
+                ) {
+                  var s = _c.value;
+
+                  var _d = __read(s.split(pattern.styleProp), 2),
+                    key = _d[0],
+                    val = _d[1];
+
+                  key = key.trim();
+
+                  if (!key) {
+                    continue;
+                  } // May be undefined if the `key: value` pair is incomplete.
+
+                  if (typeof val === "string") {
+                    val = val.trim();
+                  }
 
-            break;
-          // Space delimited string concatenation strategy
+                  styleMap[
+                    Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["camelize"])(
+                      key
+                    )
+                  ] = val;
+                }
+              } catch (e_1_1) {
+                e_1 = {
+                  error: e_1_1,
+                };
+              } finally {
+                try {
+                  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
+                } finally {
+                  if (e_1) throw e_1.error;
+                }
+              }
 
-          case 'staticClass':
-            if (!arguments[i][prop]) {
-              break;
+              return styleMap;
             }
 
-            if (mergeTarget[prop] === undefined) {
-              mergeTarget[prop] = '';
-            }
+            function mergeData() {
+              var e_2, _a;
 
-            if (mergeTarget[prop]) {
-              // Not an empty string, so concatenate
-              mergeTarget[prop] += ' ';
-            }
+              var mergeTarget = {};
+              var i = arguments.length;
+              var prop; // Allow for variadic argument length.
 
-            mergeTarget[prop] += arguments[i][prop].trim();
-            break;
-          // Object, the properties of which to merge via array merge strategy (array concatenation).
-          // Callback merge strategy merges callbacks to the beginning of the array,
-          // so that the last defined callback will be invoked first.
-          // This is done since to mimic how Object.assign merging
-          // uses the last given value to assign.
-
-          case 'on':
-          case 'nativeOn':
-            if (arguments[i][prop]) {
-              mergeTarget[prop] = mergeListeners(mergeTarget[prop], arguments[i][prop]);
-            }
+              while (i--) {
+                try {
+                  // Iterate through the data properties and execute merge strategies
+                  // Object.keys eliminates need for hasOwnProperty call
+                  for (
+                    var _b =
+                        ((e_2 = void 0), __values(Object.keys(arguments[i]))),
+                      _c = _b.next();
+                    !_c.done;
+                    _c = _b.next()
+                  ) {
+                    prop = _c.value;
+
+                    switch (prop) {
+                      // Array merge strategy (array concatenation)
+                      case "class":
+                      case "directives":
+                        if (arguments[i][prop]) {
+                          mergeTarget[prop] = mergeClasses(
+                            mergeTarget[prop],
+                            arguments[i][prop]
+                          );
+                        }
+
+                        break;
+
+                      case "style":
+                        if (arguments[i][prop]) {
+                          mergeTarget[prop] = mergeStyles(
+                            mergeTarget[prop],
+                            arguments[i][prop]
+                          );
+                        }
+
+                        break;
+                      // Space delimited string concatenation strategy
+
+                      case "staticClass":
+                        if (!arguments[i][prop]) {
+                          break;
+                        }
+
+                        if (mergeTarget[prop] === undefined) {
+                          mergeTarget[prop] = "";
+                        }
+
+                        if (mergeTarget[prop]) {
+                          // Not an empty string, so concatenate
+                          mergeTarget[prop] += " ";
+                        }
+
+                        mergeTarget[prop] += arguments[i][prop].trim();
+                        break;
+                      // Object, the properties of which to merge via array merge strategy (array concatenation).
+                      // Callback merge strategy merges callbacks to the beginning of the array,
+                      // so that the last defined callback will be invoked first.
+                      // This is done since to mimic how Object.assign merging
+                      // uses the last given value to assign.
+
+                      case "on":
+                      case "nativeOn":
+                        if (arguments[i][prop]) {
+                          mergeTarget[prop] = mergeListeners(
+                            mergeTarget[prop],
+                            arguments[i][prop]
+                          );
+                        }
+
+                        break;
+                      // Object merge strategy
+
+                      case "attrs":
+                      case "props":
+                      case "domProps":
+                      case "scopedSlots":
+                      case "staticStyle":
+                      case "hook":
+                      case "transition":
+                        if (!arguments[i][prop]) {
+                          break;
+                        }
+
+                        if (!mergeTarget[prop]) {
+                          mergeTarget[prop] = {};
+                        }
+
+                        mergeTarget[prop] = __assign(
+                          __assign({}, arguments[i][prop]),
+                          mergeTarget[prop]
+                        );
+                        break;
+                      // Reassignment strategy (no merge)
+
+                      default:
+                        // slot, key, ref, tag, show, keepAlive
+                        if (!mergeTarget[prop]) {
+                          mergeTarget[prop] = arguments[i][prop];
+                        }
+                    }
+                  }
+                } catch (e_2_1) {
+                  e_2 = {
+                    error: e_2_1,
+                  };
+                } finally {
+                  try {
+                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
+                  } finally {
+                    if (e_2) throw e_2.error;
+                  }
+                }
+              }
 
-            break;
-          // Object merge strategy
-
-          case 'attrs':
-          case 'props':
-          case 'domProps':
-          case 'scopedSlots':
-          case 'staticStyle':
-          case 'hook':
-          case 'transition':
-            if (!arguments[i][prop]) {
-              break;
+              return mergeTarget;
             }
-
-            if (!mergeTarget[prop]) {
-              mergeTarget[prop] = {};
+            function mergeStyles(target, source) {
+              if (!target) return source;
+              if (!source) return target;
+              target = Object(
+                _helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"]
+              )(typeof target === "string" ? parseStyle(target) : target);
+              return target.concat(
+                typeof source === "string" ? parseStyle(source) : source
+              );
             }
-
-            mergeTarget[prop] = __assign(__assign({}, arguments[i][prop]), mergeTarget[prop]);
-            break;
-          // Reassignment strategy (no merge)
-
-          default:
-            // slot, key, ref, tag, show, keepAlive
-            if (!mergeTarget[prop]) {
-              mergeTarget[prop] = arguments[i][prop];
+            function mergeClasses(target, source) {
+              if (!source) return target;
+              if (!target) return source;
+              return target
+                ? Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(
+                    target
+                  ).concat(source)
+                : source;
             }
+            function mergeListeners() {
+              var args = [];
 
-        }
-      }
-    } catch (e_2_1) {
-      e_2 = {
-        error: e_2_1
-      };
-    } finally {
-      try {
-        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
-      } finally {
-        if (e_2) throw e_2.error;
-      }
-    }
-  }
-
-  return mergeTarget;
-}
-function mergeStyles(target, source) {
-  if (!target) return source;
-  if (!source) return target;
-  target = Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(typeof target === 'string' ? parseStyle(target) : target);
-  return target.concat(typeof source === 'string' ? parseStyle(source) : source);
-}
-function mergeClasses(target, source) {
-  if (!source) return target;
-  if (!target) return source;
-  return target ? Object(_helpers__WEBPACK_IMPORTED_MODULE_0__["wrapInArray"])(target).concat(source) : source;
-}
-function mergeListeners() {
-  var args = [];
-
-  for (var _i = 0; _i < arguments.length; _i++) {
-    args[_i] = arguments[_i];
-  }
+              for (var _i = 0; _i < arguments.length; _i++) {
+                args[_i] = arguments[_i];
+              }
 
-  if (!args[0]) return args[1];
-  if (!args[1]) return args[0];
-  var dest = {};
+              if (!args[0]) return args[1];
+              if (!args[1]) return args[0];
+              var dest = {};
 
-  for (var i = 2; i--;) {
-    var arg = args[i];
+              for (var i = 2; i--; ) {
+                var arg = args[i];
 
-    for (var event in arg) {
-      if (!arg[event]) continue;
+                for (var event in arg) {
+                  if (!arg[event]) continue;
 
-      if (dest[event]) {
-        // Merge current listeners before (because we are iterating backwards).
-        // Note that neither "target" or "source" must be altered.
-        dest[event] = [].concat(arg[event], dest[event]);
-      } else {
-        // Straight assign.
-        dest[event] = arg[event];
-      }
-    }
-  }
+                  if (dest[event]) {
+                    // Merge current listeners before (because we are iterating backwards).
+                    // Note that neither "target" or "source" must be altered.
+                    dest[event] = [].concat(arg[event], dest[event]);
+                  } else {
+                    // Straight assign.
+                    dest[event] = arg[event];
+                  }
+                }
+              }
 
-  return dest;
-}
+              return dest;
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/util/mixins.ts":
-/*!****************************!*\
+        /***/ "./src/util/mixins.ts":
+          /*!****************************!*\
   !*** ./src/util/mixins.ts ***!
   \****************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return mixins; });
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "vue");
-/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
-/* eslint-disable max-len, import/export, no-use-before-define */
-
-function mixins() {
-  var args = [];
-
-  for (var _i = 0; _i < arguments.length; _i++) {
-    args[_i] = arguments[_i];
-  }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return mixins;
+              }
+            );
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ =
+              __webpack_require__(/*! vue */ "vue");
+            /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default =
+              /*#__PURE__*/ __webpack_require__.n(
+                vue__WEBPACK_IMPORTED_MODULE_0__
+              );
+            /* eslint-disable max-len, import/export, no-use-before-define */
+
+            function mixins() {
+              var args = [];
+
+              for (var _i = 0; _i < arguments.length; _i++) {
+                args[_i] = arguments[_i];
+              }
 
-  return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
-    mixins: args
-  });
-}
+              return vue__WEBPACK_IMPORTED_MODULE_0___default.a.extend({
+                mixins: args,
+              });
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "./src/util/rebuildFunctionalSlots.ts":
-/*!********************************************!*\
+        /***/ "./src/util/rebuildFunctionalSlots.ts":
+          /*!********************************************!*\
   !*** ./src/util/rebuildFunctionalSlots.ts ***!
   \********************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return rebuildFunctionalSlots; });
-function rebuildFunctionalSlots(slots, h) {
-  var children = [];
-
-  for (var slot in slots) {
-    if (slots.hasOwnProperty(slot)) {
-      children.push(h('template', {
-        slot: slot
-      }, slots[slot]));
-    }
-  }
+          /*! exports provided: default */
+          /***/ function (module, __webpack_exports__, __webpack_require__) {
+            "use strict";
+            __webpack_require__.r(__webpack_exports__);
+            /* harmony export (binding) */ __webpack_require__.d(
+              __webpack_exports__,
+              "default",
+              function () {
+                return rebuildFunctionalSlots;
+              }
+            );
+            function rebuildFunctionalSlots(slots, h) {
+              var children = [];
+
+              for (var slot in slots) {
+                if (slots.hasOwnProperty(slot)) {
+                  children.push(
+                    h(
+                      "template",
+                      {
+                        slot: slot,
+                      },
+                      slots[slot]
+                    )
+                  );
+                }
+              }
 
-  return children;
-}
+              return children;
+            }
 
-/***/ }),
+            /***/
+          },
 
-/***/ "vue":
-/*!******************************************************************************!*\
+        /***/ vue:
+          /*!******************************************************************************!*\
   !*** external {"commonjs":"vue","commonjs2":"vue","amd":"vue","root":"Vue"} ***!
   \******************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE_vue__;
+          /*! no static exports found */
+          /***/ function (module, exports) {
+            module.exports = __WEBPACK_EXTERNAL_MODULE_vue__;
 
-/***/ })
+            /***/
+          },
 
-/******/ })["default"];
-});
-//# sourceMappingURL=vuetify.js.map
\ No newline at end of file
+        /******/
+      }
+    )["default"];
+  }
+);
+//# sourceMappingURL=vuetify.js.map
diff --git a/notemyprogress/lang/en/local_notemyprogress.php b/notemyprogress/lang/en/local_notemyprogress.php
index fb06870c7d449aa95a06139b3c3ac401cb847132..60904628e29f932dd42edcd2e5f116c97d28616c 100644
--- a/notemyprogress/lang/en/local_notemyprogress.php
+++ b/notemyprogress/lang/en/local_notemyprogress.php
@@ -15,16 +15,16 @@
 // avec Moodle. Sinon, consultez <http://www.gnu.org/licenses/>.
 
 /**
-* Plugin chains are defined here.
-*
-* @package local_notemyprogress
-* @category string
-* @author 2021 Éric Bart <bart.eric@hotmail.com>
-* @copyright 2020 Edisson Sigma <edissonf.sigua@gmail.com>, Bryan Aguilar <bryan.aguilar6174@gmail.com>
-* @license http://www.gnu.org/copyleft /gpl.html GNU GPL v3 ou version ultérieure
-*/
+ * Plugin chains are defined here.
+ *
+ * @package local_notemyprogress
+ * @category string
+ * @author 2021 Éric Bart <bart.eric@hotmail.com>
+ * @copyright 2020 Edisson Sigma <edissonf.sigua@gmail.com>, Bryan Aguilar <bryan.aguilar6174@gmail.com>
+ * @license http://www.gnu.org/copyleft /gpl.html GNU GPL v3 ou version ultérieure
+ */
 
-defined ('MOODLE_INTERNAL') || die();
+defined('MOODLE_INTERNAL') || die();
 
 $string['pluginname'] = 'notemyprogress';
 
@@ -54,6 +54,7 @@ $string['menu_grades'] = 'Tracking grades';
 $string['menu_quiz'] = 'Follow-up of evaluations';
 $string['menu_dropout'] = 'Dropout';
 $string['menu_logs'] = "Activity reports";
+$string['menu_planning'] = "Planning";
 $string['menu_general'] = "Global indicators";
 
 /* Nav Bar Menu */
@@ -573,6 +574,66 @@ $string['fml_week_progress_title'] = 'Progress of the week';
 
 
 
+
+
+/* time_visualizations */
+$string['tv_title'] = 'Tiempo invertido (horario)';
+$string['tv_lunes'] = 'Lunes';
+$string['tv_martes'] = 'Martes';
+$string['tv_miercoles'] = 'Miércoles';
+$string['tv_jueves'] = 'Jueves';
+$string['tv_viernes'] = 'Viernes';
+$string['tv_sabado'] = 'Sábado';
+$string['tv_domingo'] = 'Domingo';
+$string['tv_axis_x'] = 'Días de la semana';
+$string['tv_axis_y'] = 'Horas del día';
+$string['tv_url'] = 'URL';
+$string['tv_resource_document'] = 'Documento';
+$string['tv_resource_image'] = 'Imagen';
+$string['tv_resource_audio'] = 'Audio';
+$string['tv_resource_video'] = 'Video';
+$string['tv_resource_file'] = 'Archivo';
+$string['tv_resource_script'] = 'Script/Código';
+$string['tv_resource_text'] = 'Texto';
+$string['tv_resource_download'] = 'Descargas';
+$string['tv_assign'] = 'Tarea';
+$string['tv_assignment'] = 'Tarea';
+$string['tv_book'] = 'Libro';
+$string['tv_choice'] = 'Elección';
+$string['tv_feedback'] = 'Retroalimentación';
+$string['tv_folder'] = 'Carpeta';
+$string['tv_forum'] = 'Foro';
+$string['tv_glossary'] = 'Glosario';
+$string['tv_label'] = 'Etiqueta';
+$string['tv_lesson'] = 'Lección';
+$string['tv_page'] = 'Página';
+$string['tv_quiz'] = 'Examen';
+$string['tv_survey'] = 'Encuesta';
+$string['tv_lti'] = 'Herramienta externa';
+$string['tv_other'] = 'Otro';
+$string['tv_interaction'] = 'Interacción por';
+$string['tv_interactions'] = 'Interacciones por';
+$string['tv_course_module'] = 'Módulo';
+$string['tv_course_modules'] = 'Módulos';
+$string['tv_student'] = 'Estudiante.';
+$string['tv_students'] = 'Estudiantes.';
+$string['tv_average'] = 'Promedio interacciones';
+$string['tv_change_timezone'] = 'Zona horaria:';
+$string['tv_activity_inside_plataform_student'] = 'Mi actividad en la plataforma';
+$string['tv_activity_inside_plataform_teacher'] = 'Actividad de los estudiantes en la plataforma';
+$string['tv_time_inside_plataform_student'] = 'Mi tiempo en la plataforma';
+$string['tv_time_inside_plataform_teacher'] = 'Tiempo invertido en promedio de los estudiantes en la plataforma en esta semana';
+$string['tv_time_inside_plataform_description_teacher'] = 'Tiempo que el estudiante ha invertido en la semana seleccionada, en comparación al tiempo que el/la docente planificó que se debería invertir. El tiempo invertido que se visualiza corresponde al promedio de todos los estudiantes. El tiempo planificado por el/la docente es el asignado en por el/la docente en <i>Configurar Semanas</i>.';
+$string['tv_time_inside_plataform_description_student'] = 'Tiempo que ha invertido esta semana en relación al tiempo que el profesor planificó que se debería invertir.';
+$string['tv_activity_inside_plataform_description_teacher'] = 'En el eje Y se indican las las horas del día y en el eje X los días de la semana. Dentro del gráfico podrá encontrar múltiples puntos, los cuales, al pasar el cursor sobre estos, ofrecen información detallada sobre las interacciones de los estudiantes, agrupadas por tipo de recurso (número de interacciones, número de estudiantes que interactuaron con el recurso y promedio de interacciones). <br/><br/><b>Al hacer click en las etiquetas, podrá filtrar por tipo de recurso, dejando visible sólo aquellos que no se encuentren tachados.</b>';
+$string['tv_activity_inside_plataform_description_student'] = 'Presenta las interacciones por tipo de recurso y horario. Al pasar el cursor sobre un punto visible en el gráfico, verá el número de interacciones agrupadas por tipo de recurso. Al hacer click en las etiquetas, podrá filtrar por tipo de recurso.';
+$string['tv_to'] = 'al';
+$string['tv_time_spend'] = 'Tiempo invertido';
+$string['tv_time_spend_teacher'] = 'Tiempo promedio invertido';
+$string['tv_time_should_spend'] = 'Tiempo que deberías invertir';
+$string['tv_time_should_spend_teacher'] = 'Tiempo promedio que se debería invertir';
+
+
 /* Indicateurs de l\'enseignant */
 $string['fml_teacher_indicators_title'] = 'General indicators';
 $string['fml_teacher_indicators_students'] = 'Students';
@@ -714,6 +775,324 @@ $string['fml_settings_bddname_label'] = 'Name of the database';
 $string['fml_settings_bddname_description'] = 'This parameter designates the name of the MongoDB database in which the information will be stored.';
 $string['fml_settings_bddname_default'] = 'Empty';
 
+//Planning
+/* Global */
+$string['pagination'] = "Week:";
+$string['graph_generating'] = "We are building the report, please wait a moment";
+$string['txt_hour'] = "Time";
+$string['txt_hours'] = "Hours";
+$string['txt_minut'] = "Minutes";
+$string['txt_minuts'] = "Minutes";
+$string['pagination_week'] = "Week";
+$string['only_student'] = "This report is for students only";
+$string['sr_hour'] = "Time";
+$string['sr_hours'] = "Hours";
+$string['sr_minute'] = "Minute";
+$string['sr_minutes'] = "Minutes";
+$string['sr_second'] = "Seconds";
+$string['sr_seconds'] = "Seconds";
+$string['weeks_not_config'] = "The course has not been configured by the teacher, so you cannot use the reporting tool";
+$string['helplabel'] = "Help";
+$string['exitbutton'] = "Got it!";
+$string['hours_unit_time_label'] = "Number of hours";
+
+/* Menú */
+$string['sr_menu_main_title'] = "Reports";
+$string['sr_menu_setweek'] = "Set weeks";
+$string['sr_menu_logs'] = "Download records";
+$string['sr_menu_time_worked_session_report'] = "Study sessions per week";
+$string['sr_menu_time_visualization'] = "Time spent (hours per week)";
+$string['sr_menu_activities_performed'] = "Activities performed";
+$string['sr_menu_notes'] = "Annotations";
+
+/* General Errors */
+$string['api_error_network'] = "An error occurred in the communication with the server";
+$string['api_invalid_data'] = "Incorrect data";
+$string['api_save_successful'] = "The data was successfully saved on the server";
+$string['api_cancel_action'] = "You have cancelled the action";
+$string['pluginname'] = "Note My Progress";
+$string['previous_days_to_create_report'] = "Days taken into account for report construction";
+$string['previous_days_to_create_report_description'] = "Days before the current date that will be taken into account to generate the report";
+$string['student_reports:usepluggin'] = "Using the plug-in";
+$string['student_reports:downloadreport'] = "Download the student's activity";
+$string['student_reports:setweeks'] = "Set weeks";
+$string['student_reports:activities_performed'] = "View the 'Activities Performed' report";
+$string['student_reports:metareflexion'] = "View 'Metareflection' report";
+$string['student_reports:notes'] = "Use notepads";
+
+/* Logs */
+$string['logs_title'] = "Download the student's log file";
+$string['logs_description'] = "To download the log file (student's actions on Moodle), you need to click on the 'Generate logs' button. Later, a link will be activated that will allow the file to be downloaded.";
+$string['logs_btn_download'] = "Generate log file";
+$string['logs_label_creating'] = "As the log file is generated, it may take several minutes. Please wait...";
+$string['logs_generation_finished'] = "The log file has been generated with success";
+$string['logs_download_link'] = "Download the log file";
+$string['logs_th_title_column'] = "Column";
+$string['logs_th_title_description'] = "Description";
+$string['logs_tb_title_logid'] = "Log ID";
+$string['logs_tb_title_userid'] = "User ID";
+$string['logs_tb_title_username'] = "User name";
+$string['logs_tb_title_names'] = "Name";
+$string['logs_tb_title_lastnames'] = "Last name";
+$string['logs_tb_title_email'] = "E-mail";
+$string['logs_tb_title_roles'] = "Roles";
+$string['logs_tb_title_courseid'] = "Course ID";
+$string['logs_tb_title_component'] = "Component";
+$string['logs_tb_title_action'] = "Action";
+$string['logs_tb_title_timecreated'] = "Date (Timestamp)";
+$string['logs_tb_description_logid'] = "Number of the saved log file";
+$string['logs_tb_description_userid'] = "Id of the person who generated the log file";
+$string['logs_tb_description_username'] = "User registered in the platform of the person who generated the log file";
+$string['logs_tb_description_names'] = "Names of the course participants";
+$string['logs_tb_description_lastnames'] = "Last names of course participants";
+$string['logs_tb_description_email'] = "Email of course participants";
+$string['logs_tb_description_roles'] = "Role in the platform of the person who generated the log file";
+$string['logs_tb_description_courseid'] = "Course from which the log file was generated";
+$string['logs_tb_description_component'] = "Interactive course component";
+$string['logs_tb_description_action'] = "Action that triggered the creation of the log file";
+$string['logs_tb_description_timecreated'] = "Date in timestamp format in which the log file was generated";
+
+/*new string*/
+$string['studentreports'] = "Student reports";
+
+/*Menu*/
+$string['binnacle'] = "Blog";
+$string['report1'] = "Report 1";
+$string['report2'] = "Report 2";
+$string['report3'] = "Report 3";
+$string['report4'] = "Report 4";
+$string['report5'] = "Report 5";
+$string['set_weeks_title'] = "Setting up the course weeks";
+$string['set_weeks'] = "Configuration of the course weeks";
+
+/*Metareflexion*/
+$string['compare_with_course'] = "Compare my results with those of my colleagues";
+$string['sr_menu_metareflexion'] = "Metareflexion";
+$string['metareflexion_last_week_created'] = "Last week's reflections have been saved";
+$string['metareflexion_last_week_update'] = "Last week's reflections updated";
+$string['metareflexion_update_planification_success'] = "Updated commitment";
+$string['metareflexion_save_planification_success'] = "Commitment saved";
+$string['metareflexion_tab_planification'] = "Planning for the week";
+$string['metareflexion_tab_reflexion'] = "Reflection";
+$string['metareflexion_tab_reflexion_title'] = "List of resources for this week";
+$string['metareflexion_tab_lastweek'] = "Last week's reflections";
+$string['metareflexion_tab_graphic_lastweek'] = "Reflections";
+$string['metareflexion_effectiveness_title'] = "Metareflexion - Effectiveness Statistics";
+$string['effectiveness_graphic_legend_pending'] = "Planned Resources";
+$string['metareflexion_graphic_legend_unplanned'] = "No resources planned";
+$string['effectiveness_graphic_legend_completed'] = "All resources completed";
+$string['effectiveness_graphic_legend_failed'] = "Some resources have not been completed";
+$string['metareflexion_cw_card_title'] = "Metareflexion - Planning for the week";
+$string['metareflexion_cw_description_student'] = "In this section, you can plan your schedules, personal goals, and course work days for this week. This information will be used to calculate your efficiency in working on the course, which you can view in the Efficiency section.";
+$string['metareflexion_cw_card_daysdedicate'] = "Days I will be working on the course:";
+$string['metareflexion_cw_card_hoursdedicate'] = "Hours I will spend on the course:";
+$string['metareflexion_cw_card_msg'] = "You have not yet planned how much time you want to spend on this resource.";
+$string['metareflexion_cw_card_btn_plan'] = "Planning for the week";
+$string['metareflexion_cw_table_title'] = "Resource planning by day";
+$string['metareflexion_cw_table_thead_activity'] = "Activity";
+$string['metareflexion_cw_table_thead_type'] = "Resource type";
+$string['metareflexion_cw_table_thead_days_committed'] = "Dedicated days";
+$string['metareflexion_cw_table_thead_hours_committed'] = "Dedicated hours";
+$string['metareflexion_cw_table_thead_plan'] = "Plan";
+$string['metareflexion_cw_dialog_daysdedicate'] = "Choose which days you plan to complete the various resources";
+$string['metareflexion_cw_dialog_hoursdedicate'] = "How many hours of work do you plan to do this week?";
+$string['metareflexion_cw_dialog_goalsdedicate'] = "What goals do you have for this week?";
+$string['metareflexion_cw_dialog_btn_cancel'] = "Cancel.";
+$string['metareflexion_cw_dialog_btn_accept'] = "Save the plan";
+$string['metareflexion_pw_title'] = "Reflections from last week";
+$string['metareflexion_pw_description_student'] = "In this section, you will be able to indicate how many face-to-face hours you spent on the course and how many you took outside of class time. In addition, you will be able to indicate if the learning objectives for the past week were met and give your opinion on the benefits of taking the course. This information will be provided to the teacher anonymously in order to improve the course.";
+$string['metareflexion_pw_classroom_hours'] = "How many face-to-face class hours did you spend on this course this week?";
+$string['metareflexion_pw_hours_off_course'] = "How many hours of work have you spent on the course outside of the Moodle platform?";
+$string['metareflexion_pw_btn_save'] = "Save";
+
+$string['metareflexion_report_title'] = "Graphic linked to the Planning/Meta-Reflection Commitment Form";
+$string['metareflexion_report_description_days_teacher'] = "In this graph, you will find the planned days that students have committed to work (first bar) versus the days actually worked (second bar). If the first bar is not visible, it means that your students did not schedule any days to work for that week; they scheduled days to work. If the second bar is not visible, it means that the students did not do the work they committed to do on the scheduled day.";
+$string['metareflexion_report_description_days_student'] = "Below the objectives, you will find a table indicating whether you have respected the schedule of the modules according to the days you have set. If the deadline is met, a green thumb will be displayed. In the event that the scheduled work is not completed, a red thumb will be displayed.<br> Note that a module is considered validated when it is consulted. Thus, to validate a day, you must consult all the modules that you have planned in the section 'Planning for the week'<br> .";
+$string['metareflexion_report_subtitle_days_student'] = "My planned commitments for this week";
+$string['metareflexion_report_subtitle_days_teacher'] = "Percentage of students who stuck to their plan that day";
+$string['metareflexion_report_description_goals_student'] = "Below this graph is a reminder of the goals you set last week.";
+$string['metareflexion_report_subtitle_hours_student'] = "My efficiency in the week.";
+$string['metareflexion_report_subtitle_hours_teacher'] = "Average efficiency for the week";
+$string['metareflexion_report_descrition_hours_teacher'] = "This graph shows the hours students planned to work during that week versus the hours actually worked.<br> Note that it is considered a working day if the student has done any interaction with the resources for that week. The scheduled time is obtained from the student's Meta-reflection in their Planning for the week.<br>";
+$string['metareflexion_report_descrition_hours_student'] = "This graph shows the hours the student has scheduled to work during that week versus the hours actually worked and the average hours worked by students in the course. The expected time is obtained from the weekly metareflection you made in the 'Planning the Week' section.";
+$string['metareflexion_report_description_meta_student'] = "Finally, in the last position you will find a questionnaire about the past week. Note that this form is not available for a week without planning or for the current week.";
+$string['metareflexion_cw_day_lun'] = "Monday";
+$string['metareflexion_cw_day_mar'] = "Tuesday";
+$string['metareflexion_cw_day_mie'] = "Wednesday";
+$string['metareflexion_cw_day_jue'] = "Thursday";
+$string['metareflexion_cw_day_vie'] = "Friday";
+$string['metareflexion_cw_day_sab'] = "Saturday";
+$string['metareflexion_cw_day_dom'] = "Sunday";
+$string['metareflexion_myself'] = "My";
+
+$string['metareflexion_inverted_time'] = "Time invested";
+$string['metareflexion_inverted_time_course'] = "Average time invested (course)";
+$string['metareflexion_planified_time'] = "Planned time";
+$string['metareflexion_planified_time_course'] = "Average time planned (course)";
+$string['metareflexion_belonging'] = "Belonging to";
+$string['metareflexion_student'] = "Students";
+$string['metareflexion_interaction_user'] = "Users who have interacted with this resource";
+$string['metareflexion_hover_title_teacher'] = "Student effectiveness (average)";
+$string['metareflexion_hover_title_student'] = "Efficiency per week";
+$string['metareflexion_planning_week'] = "He/She is planning";
+$string['metareflexion_planning_week_start'] = ", starts on ";
+$string['metareflexion_planning_week_end'] = "and ends on";
+$string['metareflexion_report_pw_avegare_hour_clases'] = "Average number of hours spent in face-to-face classes";
+$string['metareflexion_report_pw_avegare_hour_outside_clases'] = "Average hours spent outside of class";
+$string['metareflexion_report_pw_summary_card'] = "Average time spent in class";
+$string['metareflexion_report_pw_learning_objetives'] = "Regarding learning objectives";
+$string['metareflexion_report_pw_attending_classes'] = "Concerning the benefit of taking classes";
+$string['metareflexion_report_pw_text_graphic_no_data'] = "No data for this week.";
+$string['metareflexion_report_pw_description_teacher'] = "In these graphs, you can see the information obtained from students about their impressions of the previous week's courses.";
+$string['metareflexion_weekly_planning_subtitle'] = "See the results of your weekly planning under the 'Efficiency by week' tab.";
+$string['metareflexion_saved_form'] = "You've already completed the form on Metareflexion this week.";
+$string['metareflexion_goals_title'] = "Choosing personal goals";
+$string['metareflexion_pres_question_time_invested_outside'] = "How much time have I invested in working outside the Moodle platform?";
+$string['metareflexion_pres_question_objectives_reached'] = "Did I achieve my goals?";
+$string['metareflexion_pres_question_pres_question_feel'] = "What do I think about this week?";
+$string['metareflexion_pres_question_learn_and_improvement'] = "What did I learn and how can I improve?";
+$string['metareflexion_goals_reflexion_title'] = "The goals chosen for this week.";
+$string['metareflexion_title_hours_plan'] = "Forecasted work time for the current week.";
+$string['metareflexion_title_retrospective'] = "Retrospective of the week";
+
+/* Reports */
+$string['student_reports:view_report_as_teacher'] = "View report as teacher";
+$string['student_reports:view_report_as_student'] = "View report as student";
+$string['student_reports:time_visualizations'] = "Working on the platform";
+$string['student_reports:time_worked_session_report'] = "Report on 'Work on the platform'";
+$string['student_reports:write'] = "Save changes to reports";
+
+/* time_worked_session_report */
+$string['twsr_title'] = "Study sessions per week";
+$string['twsr_description_student'] = "A session is the time spent interacting within the platform and the average time of the respective sessions. Below is the list of weeks with the total number of sessions. By moving the cursor over the graph, you can find detailed information about the group of students in the course.";
+$string['twsr_description_teacher'] = "A session is the amount of time students interacted with the Moodle course material. In this report, you will find a list of weeks with the total number of sessions that students in the course have completed. By placing your cursor over one of the bars, you can see the total number of sessions, the average session length, and the number of different students who participated in each session.";
+$string['twsr_axis_x'] = "Number of sessions";
+$string['twsr_axis_y'] = "Weeks of classes";
+$string['twsr_student'] = "Student";
+$string['twsr_students'] = "Students";
+$string['twsr_sessions_by'] = "Sessions belonging to";
+$string['twsr_sessions_middle_time'] = "Average duration of sessions";
+$string['twsr_total_sessions'] = "Total sessions";
+
+/* time_visualizations */
+$string['tv_title'] = "Time spent (by hour)";
+$string['tv_moons'] = "Monday";
+$string['tv_martes'] = "Tuesday";
+$string['tv_miercoles'] = "Wednesday";
+$string['tv_jueves'] = "Thursday";
+$string['tv_viernes'] = "Friday";
+$string['tv_sabado'] = "Saturday";
+$string['tv_domingo'] = "Sunday";
+$string['tv_axis_x'] = "Days of the week";
+$string['tv_axis_y'] = "Hours of the day";
+$string['tv_url'] = "URL";
+$string['tv_resource_document'] = "Document";
+$string['tv_resource_image'] = "Image";
+$string['tv_resource_audio'] = "Audio";
+$string['tv_resource_video'] = "Video";
+$string['tv_resource_file'] = "File";
+$string['tv_resource_script'] = "Script/Code";
+$string['tv_resource_text'] = "Text";
+$string['tv_resource_download'] = "Downloads";
+$string['tv_assign'] = "Task";
+$string['tv_assignment'] = "Task";
+$string['tv_book'] = "Book";
+$string['tv_choice'] = "Selection";
+$string['tv_feedback'] = "Return";
+$string['tv_folder'] = "Folder";
+$string['tv_forum'] = "Forum";
+$string['tv_glossary'] = "Glossary";
+$string['tv_label'] = "Label";
+$string['tv_lesson'] = "Lesson";
+$string['tv_page'] = "Page";
+$string['tv_quiz'] = "Quiz";
+$string['tv_survey'] = "Survey";
+$string['tv_lti'] = "External tool";
+$string['tv_other'] = "Un autre";
+$string['tv_interaction'] = "Interaction par";
+$string['tv_interactions'] = "Interaction par";
+$string['tv_course_module'] = "Module";
+$string['tv_course_modules'] = "Module";
+$string['tv_student'] = "Étudiant";
+$string['tv_students'] = "Étudiants";
+$string['tv_average'] = "Interactions moyennes";
+$string['tv_change_timezone'] = "Fuseau horaire:";
+$string['tv_activity_inside_plataform_student'] = "Mon activité sur la plateforme";
+$string['tv_activity_inside_plataform_teacher'] = "Activité des élèves sur la plateforme";
+$string['tv_time_inside_plataform_student'] = "Mon temps sur la plateforme";
+$string['tv_time_inside_plataform_teacher'] = "Temps moyen passé par les étudiants sur la plateforme cette semaine";
+$string['tv_time_inside_plataform_description_teacher'] = "Le temps que l'étudiant a investi dans la semaine choisie, comparé au temps que l'enseignant a prévu d'investir. Le temps passé affiché correspond à la moyenne de tous les étudiants. Le temps prévu par l'enseignant est le temps attribué dans <i>Planification de la semaine</i> par l'enseignant.";
+$string['tv_time_inside_plataform_description_student'] = "Temps passé cette semaine par rapport au temps que l'enseignant avait prévu de passer.";
+$string['tv_activity_inside_plataform_description_teacher'] = "L'axe des Y indique les heures de la journée et l'axe des X les jours de la semaine. Dans le graphique, vous pouvez trouver plusieurs points qui, lorsque vous passez le curseur dessus, fournissent des informations détaillées sur les interactions des élèves, regroupées par type de ressource (nombre d'interactions, nombre d'élèves ayant interagi avec la ressource et nombre moyen d'interactions). <b>By clicking on the labels, you can filter by resource type, leaving only those that are not crossed out visible</b>.";
+$string['tv_activity_inside_plataform_description_student'] = "This graph shows interactions by resource type and time. When you move your cursor over a visible point on the graph, you will see the number of interactions grouped by resource type. By clicking on the labels, you can filter by resource type.";
+$string['tv_to'] = "in the";
+$string['tv_time_spend'] = "Time spent";
+$string['tv_time_spend_teacher'] = "Average time spent";
+$string['tv_time_should_spend'] = "Time spent";
+$string['tv_time_should_spend_teacher'] = "Average time you should spend";
+
+
+/* activities_performed */
+$string['ap_title'] = "Activités réalisées";
+$string['ap_description_student'] = "Ce rapport présente les activités réalisées et en cours cette semaine. La barre de progression de la semaine correspond au pourcentage d'activités à réaliser cette semaine et prévues par l'enseignant. L'option Semaine vous permet de choisir et de visualiser le rapport correspondant à la semaine choisie. Les activités sont regroupées par type de ressources. Les activités marquées en vert sont celles qui ont été réalisées et celles marquées en rouge sont celles qui sont en cours. Pour qu'une activité soit considérée comme terminée, vous devez avoir interagi au moins une fois avec la ressource. <br/> <br/> En cliquant sur les étiquettes terminées ou en attente, vous pourrez filtrer les informations.";
+$string['ap_description_teacher'] = "Text en attente";
+$string['ap_axis_x'] = "Type de ressources";
+$string['ap_axis_y'] = "Montant des ressources";
+$string['ap_progress'] = "Progrès de la semaine";
+$string['ap_to'] = "dans la";
+$string['ap_week'] = "Semaine";
+$string['ap_activities'] = "Durée moyenne d'interaction pour resource";
+
+/* activities_performed teacher */
+$string['apt_title'] = "Performed course activities";
+$string['apt_description'] = "This report shows the available course activities. The Week option allows you to select and view the report for that week. If you move the cursor over one of the bars, you will find the average views and interactions. If you click on the bar, you will find more details (student name, email, interactions, average viewing time).";
+$string['apt_axis_x'] = "Interactions";
+$string['apt_axis_y'] = "Resources";
+$string['apt_visualization_average'] = "Average displays";
+$string['apt_interacctions_average'] = "Average interactions";
+$string['apt_thead_name'] = "Name";
+$string['apt_thead_lastname'] = "Last name";
+$string['apt_thead_email'] = "Email";
+$string['apt_thead_interactions'] = "Interactions";
+$string['apt_thead_visualization'] = "Average interaction time for resource";
+
+/* Pagination component */
+$string['pagination_component_to'] = "in the";
+$string['pagination_component_name'] = "Week";
+
+/* Questions and Answers */
+
+$string['question_number_one'] = "Did you meet the learning objectives last week?";
+$string['answers_number_one_option_one'] = "Yes";
+$string['answers_number_one_option_two'] = "No";
+
+
+$string['question_number_two'] = "What is your learning outcome?";
+$string['answers_number_two_option_one'] = "I have a clear idea of the topic(s) and know how to apply it.";
+$string['answers_number_two_option_two'] = "I have a clear idea of the topic(s) and not how to apply it.";
+$string['answers_number_two_option_three'] = "I don't have a clear idea about the topic(s).";
+
+$string['question_number_three'] = "How useful was participating in the face-to-face classes to you?";
+$string['answers_number_three_option_one'] = "Nothing useful.";
+$string['answers_number_three_option_two'] = "Somewhat helpful";
+$string['answers_number_three_option_three'] = "Useful";
+$string['answers_number_three_option_four'] = "Very useful";
+$string['answers_number_three_option_five'] = "Really useful";
+$string['answers_number_three_option_six'] = "I didn't go to class";
+
+$string['question_number_four'] = "How do you feel about the past week?";
+$string['answers_number_four_option_one'] = "I am not satisfied with the way I organized myself to achieve my goals.";
+$string['answers_number_four_option_two'] = "I am quite satisfied with the way I have organized myself to achieve my goals";
+$string['answers_number_four_option_three'] = "I am satisfied with the way I have organized myself to achieve my goals";
+$string['answers_number_four_option_four'] = "I am very satisfied with the way I have organized myself to achieve my goals";
+
+/* Groups */
+$string['group_allstudent'] = "All students";
+
+
+/* Admin Settings */
+$string['nmp_use_navbar_menu'] = 'Activate new menu';
+$string['nmp_use_navbar_menu_desc'] = 'Display the plugin menu in the top navigation bar, otherwise it will include the menu in the navigation block.';
 /* Gamification */
 $string['EnableGame']="Disable/Enable :";
 $string['studentRanking1']="Do you want to appear in the Ranking Board ?";
diff --git a/notemyprogress/lang/es/local_notemyprogress.php b/notemyprogress/lang/es/local_notemyprogress.php
index 2269b8bc9dfe1ef99949cd7f8648d6a82fac248e..12a9bf4224b3bff1a83d07a36a4bdc32b98970e0 100644
--- a/notemyprogress/lang/es/local_notemyprogress.php
+++ b/notemyprogress/lang/es/local_notemyprogress.php
@@ -714,6 +714,386 @@ $string['fml_settings_bddport_default'] = '27017';
 $string['fml_settings_bddname_label'] = 'Nombre de la base de datos';
 $string['fml_settings_bddname_description'] = 'Este parámetro designa el nombre de la base de datos MongoDB en la que se guardará la información.';
 $string['fml_settings_bddname_default'] = 'Vacío';
+
+//Planning
+/* Global */
+$string['pagination'] = 'Semana:';
+$string['graph_generating'] = 'Estamos construyendo el reporte, por favor espere un momento.';
+$string['txt_hour'] = 'Hora';
+$string['txt_hours'] = 'Horas';
+$string['txt_minut'] = 'Minuto';
+$string['txt_minuts'] = 'Minutos';
+$string['pagination_week'] = 'Semana';
+$string['only_student'] = 'Este reporte es solo para estudiantes';
+$string['sr_hour'] = 'hora';
+$string['sr_hours'] = 'horas';
+$string['sr_minute'] = 'minuto';
+$string['sr_minutes'] = 'minutos';
+$string['sr_second'] = 'segundo';
+$string['sr_seconds'] = 'segundos';
+$string['weeks_not_config'] = 'El curso no ha sido configurado por el profesor, por lo que no puede utilizar el módulo de reportes.';
+$string['pagination_title'] = 'Selección semana';
+$string['helplabel'] = 'Ayuda';
+$string['exitbutton'] = '¡Entendido!';
+$string['hours_unit_time_label'] = 'Número de Horas';
+
+/* Menú */
+$string['sr_menu_main_title'] = "Reportes"; 
+$string['sr_menu_setweek'] = "Configurar semanas"; 
+$string['sr_menu_logs'] = "Descargar registros"; 
+$string['sr_menu_time_worked_session_report'] = 'Sesiones de estudio por semana';
+$string['sr_menu_time_visualization'] = 'Tiempo invertido (Horas por semana)';
+$string['sr_menu_activities_performed'] = 'Actividades realizadas';
+$string['sr_menu_notes'] = 'Anotaciones';
+
+/* General Errors */
+$string['api_error_network'] = "Ha ocurrido un error en la comunicación con el servidor."; 
+$string['api_invalid_data'] = 'Datos incorrectos';
+$string['api_save_successful'] = 'Se han guardado los datos correctamente en el servidor';
+$string['api_cancel_action'] = 'Has cancelado la acción';
+$string['pluginname'] = 'Note My Progress';
+$string['previous_days_to_create_report'] = 'Días considerados para la construcción del reporte';
+$string['previous_days_to_create_report_description'] = 'Días anteriores a la fecha actual que se tendrán en cuenta para generar el reporte.';
+$string['student_reports:usepluggin'] = 'Utilizar el pluggin';
+$string['student_reports:downloadreport'] = 'Descargar actividad de los estudiantes';
+$string['student_reports:setweeks'] = 'Configurar semanas del curso';
+$string['student_reports:activities_performed'] = 'Ver el reporte "Actividades realizadas"';
+$string['student_reports:metareflexion'] = 'Ver el reporte "Metareflexión"';
+$string['student_reports:notes'] = 'Utilizar las notas';
+
+/* Set weeks */
+$string['setweeks_title'] = "Mettre en place des semaines";
+$string['setweeks_description'] = "Pour commencer, vous devez organiser le cours par semaines et définir une date de début pour la première semaine (le reste des semaines se fera automatiquement à partir de cette date). Ensuite, vous devez associer les activités ou modules liés à chaque semaine en les faisant glisser de la colonne de droite à la semaine correspondante. Il n'est pas nécessaire d'attribuer toutes les activités ou modules aux semaines, mais seulement ceux que vous voulez prendre en compte pour le suivi des étudiants. Enfin, vous devez cliquer sur le bouton 'Enregistrer' pour conserver vos paramètres.";
+$string['setweeks_sections'] = "Sections disponibles dans le cours";
+$string['setweeks_weeks_of_course'] = "Planification des semaines";
+$string['setweeks_add_new_week'] = "Ajouter une semaine";
+$string['setweeks_start'] = "Date de début :";
+$string['setweeks_end'] = "Date de finalisation :";
+$string['setweeks_week'] = "Semaine";
+$string['setweeks_save'] = "Sauvegarder";
+$string['setweeks_time_dedication'] = "Combien d'heures de travail pensez-vous que les étudiants consacreront à leur cours cette semaine ?";
+$string['setweeks_enable_scroll'] = "Activer le mode de défilement pour les semaines et les thèmes";
+$string['setweeks_label_section_removed'] = "Effacer le cours";
+$string['setweeks_error_section_removed'] = " Une section assignée à une semaine a été supprimée du cours, vous devez la supprimer de votre emploi du temps pour pouvoir continuer";
+$string['setweeks_save_warning_title'] = "Êtes-vous sûr de vouloir sauvegarder les changements";
+$string['setweeks_save_warning_content'] = "Si vous modifiez la configuration des semaines alors que le cours a déjà commencé, il est possible que des données soient perdues...";
+$string['setweeks_confirm_ok'] = "Sauvegarder";
+$string['setweeks_confirm_cancel'] = "Annuler";
+$string['setweeks_error_empty_week'] = "Impossible de sauvegarder les changements avec une semaine vide. Veuillez l'effacer et réessayer.";
+$string['setweeks_new_group_title'] = "Nouvelle instance de configuration";
+$string['setweeks_new_group_text'] = "Nous avons détecté que votre cours est terminé, si vous souhaitez configurer les semaines pour travailler avec de nouveaux étudiants, vous devez activer le bouton ci-dessous. Cela vous permettra de séparer les données des étudiants actuels de celles des cours précédents, en évitant de les mélanger";
+$string['setweeks_new_group_button_label'] = "Enregistrer configuration comme nouvelle instance";
+$string['course_format_weeks'] = "Semaine";
+$string['course_format_topics'] = "Sujet";
+$string['course_format_social'] = "Social";
+$string['course_format_singleactivity'] = "Activité unique";
+$string['plugin_requirements_title'] = "Situation:";
+$string['plugin_requirements_descriptions'] = "Le plugin sera visible et affichera les rapports pour les étudiants et les enseignants lorsque les conditions suivantes sont remplies...";
+$string['plugin_requirements_has_users'] = "Le cours doit avoir au moins un étudiant inscrit";
+$string['plugin_requirements_course_start'] = "La date actuelle doit être supérieure à la date de début de la première semaine configurée";
+$string['plugin_requirements_a_sections'] = "Les semaines configurées ont au moins une section.";
+$string['plugin_visible'] = "Rapports visibles";
+$string['plugin_hidden'] = "Rapports cachés";
+$string['title_conditions'] = "Conditions d'utilisation";
+
+/* Logs */
+$string['logs_title'] = 'Descargar fichero de registro de estudiantes';
+$string['logs_description'] = 'Para descargar el fichero de registros (las acciones realizadas por los estudiantes sobre Moodle), debe hacer click en el botón Generar Fichero de Registros. Posteriormente, se habilitará un enlace que permitirá la descarga del fichero.';
+$string['logs_btn_download'] = 'Generar fichero de registros';
+$string['logs_label_creating'] = 'El fichero está siendo generando, esto puede tomar varios minutos. Por favor espere...';
+$string['logs_generation_finished'] = 'El fichero de registros se ha generado con éxito.';
+$string['logs_download_link'] = 'Descargar fichero de registros';
+$string['logs_th_title_column'] = "Columna";
+$string['logs_th_title_description'] = "Descripción";
+$string['logs_tb_title_logid'] = "Id registro";
+$string['logs_tb_title_userid'] = "Id usuario";
+$string['logs_tb_title_username'] = "Nombre de usuario";
+$string['logs_tb_title_names'] = "Nombres";
+$string['logs_tb_title_lastnames'] = "Apellidos";
+$string['logs_tb_title_email'] = "Correo electrónico";
+$string['logs_tb_title_roles'] = "Roles";
+$string['logs_tb_title_courseid'] = "Id curso";
+$string['logs_tb_title_component'] = "Componente";
+$string['logs_tb_title_action'] = "Acción";
+$string['logs_tb_title_timecreated'] = "Fecha (Timestamp)";
+$string['logs_tb_description_logid'] = "Numero de log registrado";
+$string['logs_tb_description_userid'] = "Id de la persona que genero el log";
+$string['logs_tb_description_username'] = "Usuario registrado en plataforma de la persona que genero el log";
+$string['logs_tb_description_names'] = "Nombres de participantes en el curso";
+$string['logs_tb_description_lastnames'] = "Apellidos de los participantes en el curso";
+$string['logs_tb_description_email'] = "Correo electrónico de los participantes en el curso";
+$string['logs_tb_description_roles'] = "Rol en plataforma de persona que genero el log";
+$string['logs_tb_description_courseid'] = "Curso desde el cual se genero el log";
+$string['logs_tb_description_component'] = "Componente del curso interactuado";
+$string['logs_tb_description_action'] = "Acción que gatilló la generación del log";
+$string['logs_tb_description_timecreated'] = "Fecha en formato timestamp en la cual se genero el log";
+
+/*new string*/
+$string['studentreports'] = "Rapports des étudiants";
+
+/*Menu*/
+$string['binnacle'] = 'Bitácora';
+$string['report1'] = 'Informe 1';
+$string['report2'] = 'Informe 2';
+$string['report3'] = 'Informe 3';
+$string['report4'] = 'Informe 4';
+$string['report5'] = 'Informe 5';
+$string['set_weeks_title'] = 'Configuración de las semanas del curso';
+$string['set_weeks'] = 'Configuración de las semanas del curso';
+
+/*Notes*/
+$string['notes_btn_delete'] = 'Eliminar';
+$string['notes_btn_new'] = 'Descartar cambios';
+$string['notes_btn_notes'] = 'Guardar';
+$string['notes_btn_update'] = 'Editar';
+$string['notes_notes'] = 'Anotaciones';
+$string['notes_string_new'] = 'Nuevo';
+$string['notes_string_update'] = 'Actualizado';
+$string['notes_title_notes'] = 'Anotaciones';
+$string['notes_placeholder_title'] = 'Título';
+$string['notes_placeholder_search'] = 'Buscar...';
+$string['notes_placeholder_note'] = 'Escribir mi nota...';
+$string['notes_save_success'] = 'Se ha guardado la nota';
+$string['notes_created'] = 'Creado el...';
+$string['notes_not_found'] = 'No se encontraron notas';
+$string['notes_description'] = 'Escriba y guarde las notas que consideres relevantes para este curso. Podrá ver todas las notas que ha escrito para este curso, como recordatorios, destacados u otros. Utilize el buscador para encontrar una nota particular entre las generadas a partir de una palabra clave o una frase.';
+$string['notes_message_created'] = 'Se ha creado la nota';
+$string['notes_message_not_created'] = 'No se ha podido crear la nota';
+$string['notes_message_deleted'] = 'Se ha eliminado la nota';
+$string['notes_message_not_deleted'] = 'No se ha podido eliminar la nota.';
+$string['notes_message_updated'] = 'Se ha actualizado la nota';
+$string['notes_message_not_updated'] = 'No se ha podido actualizar la nota.';
+
+
+
+
+/*Metareflexion*/
+
+$string['compare_with_course'] = "Comparar mis resultados con los de mis compañeros";
+$string['sr_menu_metareflexion'] = "Metareflexión";
+$string['metareflexion_last_week_created'] = 'Reflexiones de la semana pasada guardadas';
+$string['metareflexion_last_week_update'] = 'Reflexiones de la semana pasada actualizadas';
+$string['metareflexion_update_planification_success'] = 'Compromiso actualizado';
+$string['metareflexion_save_planification_success'] = "Compromiso registrado";
+$string['metareflexion_tab_reflexion'] = "Estadísticas de eficiencia";
+$string['metareflexion_tab_reflexion_title'] = "Lista de recursos de esta semana";
+$string['metareflexion_tab_planification'] = "Planificación de la semana";
+$string['metareflexion_tab_lastweek'] = "Reflexiones de la semana pasada";
+$string['metareflexion_tab_graphic_lastweek'] = "Reflexiones";
+$string['metareflexion_effectiveness_title'] = "Metareflexión - Estadísticas de eficiencia";
+$string['effectiveness_graphic_legend_pending'] = "Recursos planificados";
+$string['metareflexion_graphic_legend_unplanned'] = "No hay recursos planificados";
+$string['effectiveness_graphic_legend_completed'] = "Todos los recursos completados";
+$string['effectiveness_graphic_legend_failed'] = "Algunos recursos no se han completado";
+$string['metareflexion_cw_card_title'] = "Metareflexión - Planificación de la semana";
+$string['metareflexion_cw_description_student'] = "En esta sección puedes planificar el número de horas que quieres invertir, tus objetivos personales y los días que quieres trabajar en el curso para esta semana. Esta información se utilizará para evaluar su eficacia, que podrá consultar en la sección 'Estadísticas de eficacia'";
+$string['metareflexion_cw_card_daysdedicate'] = "Días que pasaré en el curso:";
+$string['metareflexion_cw_card_hoursdedicate'] = "Horas que pasaré en el curso:";
+$string['metareflexion_cw_card_msg'] = "Todavía no has planificado el tiempo que quieres dedicar a este recurso";
+$string['metareflexion_cw_card_btn_plan'] = "Planificación de la semana";
+$string['metareflexion_cw_table_title'] = "Planificación de recursos por día";
+$string['metareflexion_cw_table_thead_activity'] = "Actividad";
+$string['metareflexion_cw_table_thead_type'] = "Tipo de recurso";
+$string['metareflexion_cw_table_thead_days_committed'] = "Días dedicados";
+$string['metareflexion_cw_table_thead_hours_committed'] = "Horas dedicadas";
+$string['metareflexion_cw_table_thead_plan'] = "Plan";
+$string['metareflexion_cw_dialog_daysdedicate'] = "Elige qué días piensas completar los diferentes recursos";
+$string['metareflexion_cw_dialog_hoursdedicate'] = "¿Cuántas horas de trabajo tiene previsto hacer esta semana?";
+$string['metareflexion_cw_dialog_goalsdedicate'] = "¿Qué objetivos tienes para esta semana?";
+$string['metareflexion_cw_dialog_btn_cancel'] = "Cancelar";
+$string['metareflexion_cw_dialog_btn_accept'] = "Guardar el plan";
+$string['metareflexion_pw_title'] = "Reflexiones de la semana pasada";
+$string['metareflexion_pw_description_student'] = "En esta sección podrá indicar cuántas horas presenciales ha realizado en el curso y cuántas fuera del horario de clase. Además, podrá indicar si se han cumplido los objetivos de aprendizaje de la semana pasada y dar su opinión sobre los beneficios de haber asistido al curso. Esta información se facilitará al profesor de forma anónima con el fin de mejorar el curso";
+$string['metareflexion_pw_classroom_hours'] = "¿Cuántas horas presenciales ha dedicado a este curso esta semana?";
+$string['metareflexion_pw_hours_off_course'] = "¿Cuántas horas de trabajo ha dedicado al curso fuera de la plataforma Moodle?";
+$string['metareflexion_pw_btn_save'] = "Guardar";
+$string['metareflexion_report_title'] = "Gráfico vinculado al formulario de compromiso de planificación/reflexión";
+$string['metareflexion_report_description_days_teacher'] = "En este gráfico, encontrará los días previstos que los estudiantes se han comprometido a trabajar (primera barra) en comparación con los días realmente trabajados (segunda barra). Si la primera barra no es visible, significa que sus alumnos no han planificado ningún día de trabajo para esa semana; han planificado algunos días de trabajo. Si la segunda barra no es visible, significa que los alumnos no han realizado el trabajo que se comprometieron a hacer el día previsto.";
+$string['metareflexion_report_description_days_student'] =" Debajo de los objetivos encontrarás una tabla que muestra si has cumplido con la programación del módulo según los días que has establecido. Si se cumple el plazo, se mostrará un pulgar verde. Si el trabajo previsto no se completa, se mostrará un pulgar rojo. <br> Hay que tener en cuenta que un módulo se considera validado cuando se consulta. Así, para validar un día, debe consultar todos los módulos que haya planificado en la sección 'Planificación de la semana'<br> .";
+$string['metareflexion_report_subtitle_days_student'] = "Mis compromisos previstos para esta semana";
+$string['metareflexion_report_subtitle_days_teacher'] = "Porcentaje de estudiantes que se ciñen a su plan ese día";
+$string['metareflexion_report_description_goals_student'] = "Debajo de este gráfico, encontrarás un recordatorio de los objetivos que fijaste la semana pasada.";
+$string['metareflexion_report_subtitle_hours_student'] = "Mi eficiencia durante la semana";
+$string['metareflexion_report_subtitle_hours_teacher'] = "Eficiencia media de la semana";
+$string['metareflexion_report_descrition_hours_teacher'] = "Este gráfico muestra las horas que los estudiantes tenían previsto trabajar durante esa semana en comparación con las horas que realmente trabajaron. <br> Tenga en cuenta que se considera un día de trabajo si el estudiante ha interactuado con los recursos en esa semana. El tiempo previsto se obtiene de la metarreflexión del estudiante en su planificación de la semana.<br>";
+$string['metareflexion_report_descrition_hours_student'] = "Este gráfico muestra las horas que el estudiante tiene previsto trabajar durante esa semana en comparación con las horas realmente trabajadas y la media de horas trabajadas por los estudiantes del curso. El tiempo planificado se obtiene de la metarreflexión semanal que hiciste en la sección 'Planificación de la semana'.";
+$string['metareflexion_report_description_meta_student'] = "Finalmente, en la última posición encontrarás un cuestionario sobre la semana pasada. Tenga en cuenta que este formulario no está disponible para una semana sin planificación o para la semana actual";
+$string['metareflexion_cw_day_lun'] = "Lunes";
+$string['metareflexion_cw_day_mar'] = "Martes";
+$string['metareflexion_cw_day_mie'] = "Miércoles";
+$string['metareflexion_cw_day_jue'] = "Jueves";
+$string['metareflexion_cw_day_vie'] = "viernes";
+$string['metareflexion_cw_day_sab'] = "Sábado";
+$string['metareflexion_cw_day_dom'] = "Domingo";
+$cadena['metareflexión_mismo'] = "Mi";
+$string['metareflexion_inverted_time'] = "Tiempo invertido";
+$string['metareflexion_inverted_time_course'] = "Tiempo medio invertido (curso)";
+$string['metareflexion_planified_time'] = "Tiempo planificado";
+$string['metareflexion_planified_time_course'] = "Tiempo medio planificado (curso)";
+$string['metareflexion_belonging'] = "Pertenecer a";
+$string['metareflexion_student'] = "Estudiantes";
+$string['metareflexion_interaction_user'] = "Usuarios que han interactuado con este recurso";
+$string['metareflexion_hover_title_teacher'] = "Eficacia de los alumnos (media)";
+$string['metareflexion_hover_title_student'] = "Eficiencia por semana";
+$string['metareflexion_planning_week'] = "Él/ella está planificando";
+$string['metareflexion_planning_week_start'] = ", comienza el ";
+$string['metareflexion_planning_week_end'] = "y termina el";
+$string['metareflexion_report_pw_avegare_hour_clases'] = "Número medio de horas dedicadas a las clases presenciales";
+$string['metareflexion_report_pw_avegare_hour_outside_clases'] = "Promedio de horas pasadas fuera de clase";
+$string['metareflexion_report_pw_summary_card'] = "Tiempo medio de clase";
+$string['metareflexion_report_pw_learning_objetives'] = "Relacionado con los objetivos de aprendizaje";
+$string['metareflexion_report_pw_attending_classes'] = "Sobre el beneficio de tomar cursos";
+$string['metareflexion_report_pw_text_no_data'] = "No hay datos para esta semana";
+$string['metareflexion_report_pw_description_teacher'] = "En estos gráficos se puede ver la información obtenida de los alumnos sobre sus impresiones de los cursos de la semana anterior";
+$string['metareflexion_weekly_planning_subtitle'] = "Vea los resultados de su planificación semanal en la pestaña 'Eficiencia por semana'";
+$string['metareflexion_saved_form'] = "Ya ha completado el formulario en Metareflexion esta semana";
+$string['metareflexion_efficiency_title'] = "Su eficiencia";
+$string['metareflexion_goals_title'] = "Elegir objetivos personales";
+$string['metareflexion_pres_question_time_invested_outside'] = "¿Cuánto tiempo he invertido en trabajar fuera de la plataforma Moodle?";
+$string['metareflexion_pres_question_objectives_reached'] = "He alcanzado mis objetivos?";
+$string['metareflexion_pres_question_pres_question_feel'] = "¿Qué pienso de esta semana?";
+$string['metareflexion_pres_question_learn_and_improvement'] = "¿Qué he aprendido y cómo puedo mejorar?";
+$string['metareflexion_goals_reflexion_title'] = "Los objetivos elegidos para esta semana";
+$string['metareflexion_title_hours_plan'] = "Plan de horas para la semana actual";
+$string['metareflexion_title_retrospective'] = "Retrospectiva de la semana";
+
+
+/* Reports */
+$string['student_reports:view_report_as_teacher'] = 'Ver el reporte como profesor';
+$string['student_reports:view_report_as_student'] = 'Ver el reporte como estudiante';
+$string['student_reports:time_visualizations'] = 'Reporte "Trabajo en plataforma"';
+$string['student_reports:time_worked_session_report'] = 'Reporte "Tiempo de trabajo en plataforma"';
+$string['student_reports:write'] = 'Guardar cambios en los reportes';
+
+/* time_worked_session_report */
+$string['twsr_title'] = 'Sesiones de estudio por semana';
+$string['twsr_description_student'] = 'Una sesión corresponde al tiempo dedicado a interactuar dentro de la plataforma y el tiempo promedio de las respectivas sesiones. A continuación, se presenta el listado de semanas con el total de sesiones. Al pasar el cursor sobre el gráfico, podrá encontrar la información en detalle del conjunto de estudiantes del curso.';
+$string['twsr_description_teacher'] = 'Una sesión corresponde al tiempo que los estudiantes han estado interactuando con los materiales del curso Moodle. En este reporte encontrará el listado de semanas con el total de sesiones realizadas por los estudiantes del curso. Al poner el cursor sobre una de las barras podrá ver el total de sesiones, la duración promedio de éstas y a cuántos estudiantes diferentes participaron en cada sesión.';
+$string['twsr_axis_x'] = 'Número de sesiones';
+$string['twsr_axis_y'] = 'Semanas del curso';
+$string['twsr_student'] = 'Estudiante';
+$string['twsr_students'] = 'estudiantes';
+$string['twsr_sessions_by'] = 'Sesiones pertenecientes a';
+$string['twsr_sessions_middle_time'] = 'Duración promedio de las sesiones';
+$string['twsr_total_sessions'] = 'Total de sesiones';
+
+/* time_visualizations */
+$string['tv_title'] = 'Tiempo invertido (horario)';
+$string['tv_lunes'] = 'Lunes';
+$string['tv_martes'] = 'Martes';
+$string['tv_miercoles'] = 'Miércoles';
+$string['tv_jueves'] = 'Jueves';
+$string['tv_viernes'] = 'Viernes';
+$string['tv_sabado'] = 'Sábado';
+$string['tv_domingo'] = 'Domingo';
+$string['tv_axis_x'] = 'Días de la semana';
+$string['tv_axis_y'] = 'Horas del día';
+$string['tv_url'] = 'URL';
+$string['tv_resource_document'] = 'Documento';
+$string['tv_resource_image'] = 'Imagen';
+$string['tv_resource_audio'] = 'Audio';
+$string['tv_resource_video'] = 'Video';
+$string['tv_resource_file'] = 'Archivo';
+$string['tv_resource_script'] = 'Script/Código';
+$string['tv_resource_text'] = 'Texto';
+$string['tv_resource_download'] = 'Descargas';
+$string['tv_assign'] = 'Tarea';
+$string['tv_assignment'] = 'Tarea';
+$string['tv_book'] = 'Libro';
+$string['tv_choice'] = 'Elección';
+$string['tv_feedback'] = 'Retroalimentación';
+$string['tv_folder'] = 'Carpeta';
+$string['tv_forum'] = 'Foro';
+$string['tv_glossary'] = 'Glosario';
+$string['tv_label'] = 'Etiqueta';
+$string['tv_lesson'] = 'Lección';
+$string['tv_page'] = 'Página';
+$string['tv_quiz'] = 'Examen';
+$string['tv_survey'] = 'Encuesta';
+$string['tv_lti'] = 'Herramienta externa';
+$string['tv_other'] = 'Otro';
+$string['tv_interaction'] = 'Interacción por';
+$string['tv_interactions'] = 'Interacciones por';
+$string['tv_course_module'] = 'Módulo';
+$string['tv_course_modules'] = 'Módulos';
+$string['tv_student'] = 'Estudiante.';
+$string['tv_students'] = 'Estudiantes.';
+$string['tv_average'] = 'Promedio interacciones';
+$string['tv_change_timezone'] = 'Zona horaria:';
+$string['tv_activity_inside_plataform_student'] = 'Mi actividad en la plataforma';
+$string['tv_activity_inside_plataform_teacher'] = 'Actividad de los estudiantes en la plataforma';
+$string['tv_time_inside_plataform_student'] = 'Mi tiempo en la plataforma';
+$string['tv_time_inside_plataform_teacher'] = 'Tiempo invertido en promedio de los estudiantes en la plataforma en esta semana';
+$string['tv_time_inside_plataform_description_teacher'] = 'Tiempo que el estudiante ha invertido en la semana seleccionada, en comparación al tiempo que el/la docente planificó que se debería invertir. El tiempo invertido que se visualiza corresponde al promedio de todos los estudiantes. El tiempo planificado por el/la docente es el asignado en por el/la docente en <i>Configurar Semanas</i>.';
+$string['tv_time_inside_plataform_description_student'] = 'Tiempo que ha invertido esta semana en relación al tiempo que el profesor planificó que se debería invertir.';
+$string['tv_activity_inside_plataform_description_teacher'] = 'En el eje Y se indican las las horas del día y en el eje X los días de la semana. Dentro del gráfico podrá encontrar múltiples puntos, los cuales, al pasar el cursor sobre estos, ofrecen información detallada sobre las interacciones de los estudiantes, agrupadas por tipo de recurso (número de interacciones, número de estudiantes que interactuaron con el recurso y promedio de interacciones). <br/><br/><b>Al hacer click en las etiquetas, podrá filtrar por tipo de recurso, dejando visible sólo aquellos que no se encuentren tachados.</b>';
+$string['tv_activity_inside_plataform_description_student'] = 'Presenta las interacciones por tipo de recurso y horario. Al pasar el cursor sobre un punto visible en el gráfico, verá el número de interacciones agrupadas por tipo de recurso. Al hacer click en las etiquetas, podrá filtrar por tipo de recurso.';
+$string['tv_to'] = 'al';
+$string['tv_time_spend'] = 'Tiempo invertido';
+$string['tv_time_spend_teacher'] = 'Tiempo promedio invertido';
+$string['tv_time_should_spend'] = 'Tiempo que deberías invertir';
+$string['tv_time_should_spend_teacher'] = 'Tiempo promedio que se debería invertir';
+
+/* activities_performed */
+$string['ap_title'] = 'Actividades realizadas';
+$string['ap_description_student'] = 'Este reporte presenta las actividades realizadas y pendientes esta semana. La barra de progreso de la semana corresponde al porcentaje de actividades a realizar esta semana y planificadas por el profesor. La opción Semana permite escoger y ver el reporte correspondiente a la semana escogida. Las actividades se encuentran agrupadas por tipo de recurso. Las marcadas en color verde son las realizadas y en rojo las pendientes. Para que una actividad se marque como realizada, debes haber interactuado al menos una vez con el recurso. <br/> <br/> Al hacer click sobre las etiquetas finalizados o pendientes, podrás filtrar la información.';
+$string['ap_description_teacher'] = 'Pendiente de texto';
+$string['ap_axis_x'] = 'Tipo de recursos';
+$string['ap_axis_y'] = 'Cantidad de recursos';
+$string['ap_progress'] = 'Progreso de la semana';
+$string['ap_to'] = 'al';
+$string['ap_week'] = 'Semana';
+$string['ap_activities'] = 'Interacción agrupada por tipos de recursos';
+
+/* activities_performed teacher */
+$string['apt_title'] = 'Actividades realizadas del curso';
+$string['apt_description'] = 'Este reporte presenta las actividades disponibles del curso. La opción Semana permite escoger y ver el reporte correspondiente a dicha semana. Al pasar el cursor por alguna de las barras, encontrará el promedio de las visualizaciones e interacciones. Si hace click en la barra, encontrarás mayor detalle (nombre de estudiante, correo, interacciones, tiempo promedio de visualización).';
+$string['apt_axis_x'] = 'Interacciones';
+$string['apt_axis_y'] = 'Recursos';
+$string['apt_visualization_average'] = 'Promedio de visualizaciones';
+$string['apt_interacctions_average'] = 'Promedio de interacciones';
+$string['apt_thead_name'] = 'Nombre';
+$string['apt_thead_lastname'] = 'Apellidos';
+$string['apt_thead_email'] = 'Correo';
+$string['apt_thead_interactions'] = 'Interacciones';
+$string['apt_thead_visualization'] = 'Tiempo promedio de visualización';
+
+/* Pagination component */
+$string['pagination_component_to'] = 'al';
+$string['pagination_component_name'] = 'Semana';
+
+/* Questions et réponses */
+/* Preguntas y respuestas */
+$string['question_number_one'] = "¿Cumpliste los objetivos de aprendizaje la semana pasada?";
+$string['answers_number_one_option_one'] = "Sí";
+$string['answers_number_one_option_two'] = "No";
+
+
+$string['question_number_two'] = "¿Cuál es su resultado de aprendizaje?";
+$string['answers_number_two_option_one'] = "Tengo una idea clara del tema(s) y sé cómo aplicarlo";
+$string['answers_number_two_option_two'] = "Tengo una idea clara del tema(s) y no de cómo aplicarlo";
+$string['answers_number_two_option_three'] = "No tengo una idea clara sobre el tema(s)";
+
+$string['question_number_three'] = "¿Qué utilidad tuvo para usted la participación en las clases presenciales?";
+$string['answers_number_three_option_one'] = "Nada útil";
+$string['answers_number_three_option_two'] = "Bastante útil";
+$string['answers_number_three_option_three'] = "Útil";
+$string['answers_number_three_option_four'] = "Muy útil";
+$string['answers_number_three_option_five'] = "Realmente útil";
+$cadena['answers_number_three_option_six'] = "No fui a clase";
+
+$string['question_number_four'] = "¿Cómo te sientes con respecto a la semana pasada?";
+$string['answers_number_four_option_one'] = "No estoy satisfecho con la forma en que me he organizado para lograr mis objetivos";
+$string['answers_number_four_option_two'] = "Estoy bastante satisfecho con la forma en que me he organizado para lograr mis objetivos";
+$string['answers_number_four_option_three'] = "Estoy satisfecho con la forma en que me he organizado para lograr mis objetivos";
+$string['answers_number_four_option_four'] = "Estoy muy satisfecho con la forma en que me he organizado para lograr mis objetivos";
+
+/* Goups */
+$string['group_allstudent'] = 'Todos los estudiantes';
+
+/* Admin Settings */
+$string['nmp_use_navbar_menu'] = 'Habilitar nuevo menú';
+$string['nmp_use_navbar_menu_desc'] = 'Despliega el menú del plugin en la barra de navegación superior, del contrario incluirá el menú en el bloque de navegación.';
 /* Gamification */
 $string['EnableGame']="Desactivar/Activar :";
 $string['studentRanking1']="¿Quieres aparecer en el ranking ? ";
diff --git a/notemyprogress/lang/fr/local_notemyprogress.php b/notemyprogress/lang/fr/local_notemyprogress.php
index e1430c57874519e1e1d4624de6789f5d4fd860c1..d52adb7ae7a52cbc53f405eae058194d56b29db0 100644
--- a/notemyprogress/lang/fr/local_notemyprogress.php
+++ b/notemyprogress/lang/fr/local_notemyprogress.php
@@ -15,15 +15,15 @@
 // avec Moodle. Sinon, consultez <http://www.gnu.org/licenses/>.
 
 /**
-* Les chaînes de plugins sont définies ici.
-*
-* @package local_notemyprogress
-* @category string
-* @copyright 2020 Edisson Sigma <edissonf.sigua@gmail.com>, Bryan Aguilar <bryan.aguilar6174@gmail.com>
-* @license http://www.gnu.org/copyleft /gpl.html GNU GPL v3 ou version ultérieure
-*/
+ * Les chaînes de plugins sont définies ici.
+ *
+ * @package local_notemyprogress
+ * @category string
+ * @copyright 2020 Edisson Sigma <edissonf.sigua@gmail.com>, Bryan Aguilar <bryan.aguilar6174@gmail.com>
+ * @license http://www.gnu.org/copyleft /gpl.html GNU GPL v3 ou version ultérieure
+ */
 
-defined ('MOODLE_INTERNAL') || die();
+defined('MOODLE_INTERNAL') || die();
 
 $string['pluginname'] = 'notemyprogress';
 
@@ -718,6 +718,381 @@ $string['fml_settings_bddport_default'] = '27017';
 
 $string['fml_settings_bddname_label'] = 'Nom de la base de données';
 $string['fml_settings_bddname_description'] = 'Ce paramètre désigne le nom de la base de données MongoDB dans laquelle vont être enregistrées les informations.';
+$string['fml_settings_bddname_default'] = 'Vide';
+
+//Planning
+/* Global */
+$string['pagination'] = "Semaine:";
+$string['graph_generating'] = "Nous construisons le rapport, veuillez patienter un instant";
+$string['txt_hour'] = "Temps";
+$string['txt_hours'] = "Heures";
+$string['txt_minut'] = "Minutes";
+$string['txt_minuts'] = "Minutes";
+$string['pagination_week'] = "Semaine";
+$string['only_student'] = "This report is for students only";
+$string['sr_hour'] = "Heure";
+$string['sr_hours'] = "Heures";
+$string['sr_minute'] = "Minute";
+$string['sr_minutes'] = "Minutes";
+$string['sr_second'] = "Secondes";
+$string['sr_seconds'] = "Secondes";
+$string['weeks_not_config'] = "Le cours n'a pas été configuré par le professeur, vous ne pouvez donc pas utiliser l'outil de rapport";
+$string['helplabel'] = "Aide";
+$string['exitbutton'] = "Compris!";
+$string['hours_unit_time_label'] = "Nombre d’heures";
+
+/* Menú */
+$string['sr_menu_main_title'] = "Rapports";
+$string['sr_menu_setweek'] = "Mettre en place des semaines";
+$string['sr_menu_logs'] = "Télécharger des enregistrements";
+$string['sr_menu_time_worked_session_report'] = "Sessions d'étude par semaine’";
+$string['sr_menu_time_visualization'] = "Temps passé (heures par semaine)";
+$string['sr_menu_activities_performed'] = "Activités réalisées";
+$string['sr_menu_notes'] = "Annotations";
+
+/* General Errors */
+$string['api_error_network'] = "Une erreur s'est produite dans la communication avec le serveur";
+$string['api_invalid_data'] = "Données incorrectes";
+$string['api_save_successful'] = "Les données ont été enregistrées avec succès sur le serveur";
+$string['api_cancel_action'] = "Vous avez annulé l’action";
+$string['pluginname'] = "Note My Progress";
+$string['previous_days_to_create_report'] = "Jours pris en compte pour la construction du rapport";
+$string['previous_days_to_create_report_description'] = "Jours avant la date actuelle qui sera prise en compte pour générer le rapport";
+$string['student_reports:usepluggin'] = "Utilisation du plug-in";
+$string['student_reports:downloadreport'] = "Télécharger l'activité de l'élève";
+$string['student_reports:setweeks'] = "Mettre en place des semaines";
+$string['student_reports:activities_performed'] = "Voir le rapport 'Activités réalisées";
+$string['student_reports:metareflexion'] = "Voir le rapport 'Méta-réflexion'";
+$string['student_reports:notes'] = "Utilisez les bloc-notes";
+
+/* Set weeks */
+$string['setweeks_title'] = "Mettre en place des semaines";
+$string['setweeks_description'] = "Pour commencer, vous devez organiser le cours par semaines et définir une date de début pour la première semaine (le reste des semaines se fera automatiquement à partir de cette date). Ensuite, vous devez associer les activités ou modules liés à chaque semaine en les faisant glisser de la colonne de droite à la semaine correspondante. Il n'est pas nécessaire d'attribuer toutes les activités ou modules aux semaines, mais seulement ceux que vous voulez prendre en compte pour le suivi des étudiants. Enfin, vous devez cliquer sur le bouton 'Enregistrer' pour conserver vos paramètres.";
+$string['setweeks_sections'] = "Sections disponibles dans le cours";
+$string['setweeks_weeks_of_course'] = "Planification des semaines";
+$string['setweeks_add_new_week'] = "Ajouter une semaine";
+$string['setweeks_start'] = "Date de début :";
+$string['setweeks_end'] = "Date de finalisation :";
+$string['setweeks_week'] = "Semaine";
+$string['setweeks_save'] = "Sauvegarder";
+$string['setweeks_time_dedication'] = "Combien d'heures de travail pensez-vous que les étudiants consacreront à leur cours cette semaine ?";
+$string['setweeks_enable_scroll'] = "Activer le mode de défilement pour les semaines et les thèmes";
+$string['setweeks_label_section_removed'] = "Effacer le cours";
+$string['setweeks_error_section_removed'] = " Une section assignée à une semaine a été supprimée du cours, vous devez la supprimer de votre emploi du temps pour pouvoir continuer";
+$string['setweeks_save_warning_title'] = "Êtes-vous sûr de vouloir sauvegarder les changements";
+$string['setweeks_save_warning_content'] = "Si vous modifiez la configuration des semaines alors que le cours a déjà commencé, il est possible que des données soient perdues...";
+$string['setweeks_confirm_ok'] = "Sauvegarder";
+$string['setweeks_confirm_cancel'] = "Annuler";
+$string['setweeks_error_empty_week'] = "Impossible de sauvegarder les changements avec une semaine vide. Veuillez l'effacer et réessayer.";
+$string['setweeks_new_group_title'] = "Nouvelle instance de configuration";
+$string['setweeks_new_group_text'] = "Nous avons détecté que votre cours est terminé, si vous souhaitez configurer les semaines pour travailler avec de nouveaux étudiants, vous devez activer le bouton ci-dessous. Cela vous permettra de séparer les données des étudiants actuels de celles des cours précédents, en évitant de les mélanger";
+$string['setweeks_new_group_button_label'] = "Enregistrer configuration comme nouvelle instance";
+$string['course_format_weeks'] = "Semaine";
+$string['course_format_topics'] = "Sujet";
+$string['course_format_social'] = "Social";
+$string['course_format_singleactivity'] = "Activité unique";
+$string['plugin_requirements_title'] = "Situation:";
+$string['plugin_requirements_descriptions'] = "Le plugin sera visible et affichera les rapports pour les étudiants et les enseignants lorsque les conditions suivantes sont remplies...";
+$string['plugin_requirements_has_users'] = "Le cours doit avoir au moins un étudiant inscrit";
+$string['plugin_requirements_course_start'] = "La date actuelle doit être supérieure à la date de début de la première semaine configurée";
+$string['plugin_requirements_a_sections'] = "Les semaines configurées ont au moins une section.";
+$string['plugin_visible'] = "Rapports visibles";
+$string['plugin_hidden'] = "Rapports cachés";
+$string['title_conditions'] = "Conditions d'utilisation";
+
+/* Logs */
+$string['logs_title'] = "Télécharger le fichier du logs (les actions effectuées par les étudiants sur Moodle) de l'étudiant";
+$string['logs_description'] = "Pour télécharger le fichier du logs (les actions effectuées par les étudiants sur Moodle), vous devez cliquer sur le bouton 'Générer du logs'. Plus tard, un lien sera activé qui permettra le téléchargement du fichier.";
+$string['logs_btn_download'] = "Générer fichier du logs";
+$string['logs_label_creating'] = "Le fichier du logs étant généré, cela peut prendre plusieurs minutes. S'il vous plaît, attendez...";
+$string['logs_generation_finished'] = "Le fichier du logs a été généré avec success.";
+$string['logs_download_link'] = "Télécharger le fichier du logs";
+$string['logs_th_title_column'] = "Colonne";
+$string['logs_th_title_description'] = "Description";
+$string['logs_tb_title_logid'] = "Identifiant d'enregistrement";
+$string['logs_tb_title_userid'] = "Identifiant d'utilisateur";
+$string['logs_tb_title_username'] = "Nom d'utilisateur";
+$string['logs_tb_title_names'] = "Nom";
+$string['logs_tb_title_lastnames'] = "Nom de famille";
+$string['logs_tb_title_email'] = "E-mail";
+$string['logs_tb_title_roles'] = "Rôles";
+$string['logs_tb_title_courseid'] = "Identifiant du course";
+$string['logs_tb_title_component'] = "Composant";
+$string['logs_tb_title_action'] = "Acction";
+$string['logs_tb_title_timecreated'] = "Date (Timestamp)";
+$string['logs_tb_description_logid'] = "Numéro du fichier logs enregistré";
+$string['logs_tb_description_userid'] = "Id de la personne qui a généré le fichier du logs";
+$string['logs_tb_description_username'] = "Utilisateur enregistré dans la plate-forme de la personne qui a généré le fichier du logs";
+$string['logs_tb_description_names'] = "Noms des participants au cours";
+$string['logs_tb_description_lastnames'] = "Noms de famille des participants au cours";
+$string['logs_tb_description_email'] = "Email des participants au cours";
+$string['logs_tb_description_roles'] = "Rôle dans la plateforme de la personne qui a généré le fichier du logs";
+$string['logs_tb_description_courseid'] = "Parcours à partir duquel le fichier de logs a été généré";
+$string['logs_tb_description_component'] = "Composant de cours interactif";
+$string['logs_tb_description_action'] = "Action qui a déclenché la création du fichier du journal";
+$string['logs_tb_description_timecreated'] = "Date au format timestamp dans laquelle le fichier du logs a été généré";
+
+/*new string*/
+$string['studentreports'] = "Rapports des étudiants";
+
+/*Menu*/
+$string['binnacle'] = "Blog";
+$string['report1'] = "Rapport 1";
+$string['report2'] = "Rapport 2";
+$string['report3'] = "Rapport 3";
+$string['report4'] = "Rapport 4";
+$string['report5'] = "Rapport 5";
+$string['set_weeks_title'] = "Configuration des semaines de cours";
+$string['set_weeks'] = "Configuration des semaines de cours";
+
+/*Notes*/
+$string['notes_btn_delete'] = "Supprimer";
+$string['notes_btn_new'] = "Écarter les changements";
+$string['notes_btn_notes'] = "Sauvegarder";
+$string['notes_btn_update'] = "Editor";
+$string['notes_notes'] = "Annotations";
+$string['notes_string_new'] = "Nouveau";
+$string['notes_string_update'] = "Mise à jour";
+$string['notes_title_notes'] = "Annotations";
+$string['notes_placeholder_title'] = "Title";
+$string['notes_placeholder_search'] = "Recherche.";
+$string['notes_placeholder_note'] = "Rédiger une note";
+$string['notes_save_success'] = "Sauvegarder la note";
+$string['notes_created'] = "Créé à la date..";
+$string['notes_not_found'] = "Aucune note trouvée";
+$string['notes_description'] = "Rédigez et conservez les notes que vous jugez pertinentes pour ce cours. Vous pourrez voir toutes les notes que vous avez écrites pour ce cours, comme rappels, points forts ou autres. Utilisez le moteur de recherche pour trouver une note particulière parmi celles générées à partir d'un mot-clé ou d'une phrase";
+$string['notes_message_created'] = "La note a été créée";
+$string['notes_message_non_créé'] = "Note n'a pas pu être créée";
+$string['notes_message_deleted'] = "La note a été supprimée";
+$string['notes_message_not_deleted'] = "Note n'a pas pu être supprimée";
+$string['notes_message_updated'] = "La note a été mise à jour";
+$string['notes_message_not_updated'] = "Note n'a pas pu être mise à jour'";
+
+/*Metareflexion*/
+$string['compare_with_course'] = "Comparer mes résultats avec ceux de mes collègues";
+$string['sr_menu_metareflexion'] = "Méta-réflexion";
+$string['metareflexion_last_week_created'] = "Les réflexions de la semaine dernière ont été sauvegardées";
+$string['metareflexion_last_week_update'] = "Mise à jour des réflexions de la semaine dernière";
+$string['metareflexion_update_planification_success'] = "Engagement actualisé";
+$string['metareflexion_save_planification_success'] = "Engagement enregistré";
+$string['metareflexion_tab_reflexion'] = "Statistiques sur l'efficacité";
+$string['metareflexion_tab_reflexion_title'] = "Liste des ressources de cette semaine";
+$string['metareflexion_tab_planification'] = "Planification de la semaine";
+$string['metareflexion_tab_lastweek'] = "Réflexions de la semaine dernière";
+$string['metareflexion_tab_graphic_lastweek'] = "Réflexions";
+$string['metareflexion_effectiveness_title'] = "Metaréflexion - Statistiques sur l'efficacité";
+$string['effectiveness_graphic_legend_pending'] = "Ressources planifiées";
+$string['metareflexion_graphic_legend_unplanned'] = "Aucune ressource planifiée";
+$string['effectiveness_graphic_legend_completed'] = "Toutes les ressources réalisées";
+$string['effectiveness_graphic_legend_failed'] = "Certaines ressources n'ont pas été réalisées";
+$string['metareflexion_cw_card_title'] = "Metaréflexion - Planification de la semaine";
+$string['metareflexion_cw_description_student'] = "Dans cette section, vous pouvez planifier les horaires, vos objectifs personnels et les jours de travail du cours pour cette semaine. Ces informations seront utilisées pour calculer votre efficacité à travailler sur le cours, que vous pouvez consulter dans la section Efficacité.";
+$string['metareflexion_cw_card_daysdedicate'] = "Jours que je consacrerai au cours :";
+$string['metareflexion_cw_card_hoursdedicate'] = "Heures que je consacrerai au cours :";
+$string['metareflexion_cw_card_msg'] = "Vous n'avez pas encore planifié le temps de travail que vous souhaitez consacrer à cette ressource";
+$string['metareflexion_cw_card_btn_plan'] = "Planification de la semaine";
+$string['metareflexion_cw_table_title'] = "Plannification des ressources en fonction des jours";
+$string['metareflexion_cw_table_thead_activity'] = "Activité";
+$string['metareflexion_cw_table_thead_type'] = "Type de ressource";
+$string['metareflexion_cw_table_thead_days_committed'] = "Journées consacrées";
+$string['metareflexion_cw_table_thead_hours_committed'] = "Heures consacrées";
+$string['metareflexion_cw_table_thead_plan'] = "Plan";
+$string['metareflexion_cw_dialog_daysdedicate'] = "Choisissez quels jours vous prévoyez de compléter les différentes ressources";
+$string['metareflexion_cw_dialog_hoursdedicate'] = "Combien d'heures de travail prévoyez-vous cette semaine?";
+$string['metareflexion_cw_dialog_goalsdedicate'] = "Quels objectifs vous fixez-vous pour cette semaine ?";
+$string['metareflexion_cw_dialog_btn_cancel'] = "Annuler";
+$string['metareflexion_cw_dialog_btn_accept'] = "Sauvegarder le plan";
+$string['metareflexion_pw_title'] = "Réflexions de la semaine dernière";
+$string['metareflexion_pw_description_student'] = "Dans cette section, vous pourrez indiquer combien d'heures de cours en face à face vous avez consacrées au cours et combien vous en avez pris en dehors des heures de cours. En outre, vous pourrez indiquer si les objectifs d'apprentissage de la semaine dernière ont été atteints et donner votre avis sur les avantages d'avoir suivi des cours. Ces informations seront fournies à l'enseignant de manière anonyme afin d'améliorer le cours";
+$string['metareflexion_pw_classroom_hours'] = "Combien d'heures de cours en face à face avez-vous consacrées à ce cours cette semaine ?";
+$string['metareflexion_pw_hours_off_course'] = "Combien d'heures de travail avez-vous consacrées au cours en dehors de la plateforme Moodle ?";
+$string['metareflexion_pw_btn_save'] = "Sauvegarder";
+$string['metareflexion_report_title'] = "Graphique lié au formulaire d'engagement de Planification/Méta-réflexion";
+$string['metareflexion_report_description_days_teacher'] = "Dans ce graphique, vous trouverez la planification des jours que les étudiants se sont engagés à travailler (première barre) par rapport aux jours réellement travaillés (deuxième barre). Si la première barre n'est pas visible, cela signifie que vos étudiants n'ont pas planifié de jours de travail pour cette semaine ; ils ont planifié des jours de travail. Si la deuxième barre n'est pas visible, cela signifie que les étudiants n'ont pas fait le travail qu'ils s'étaient engagés à faire le jour prévu.";
+$string['metareflexion_report_description_days_student'] = "Vous trouverez en dessous des objectifs une table vous indiquant si vous avez respecté le planning des modules en fonction des jours que vous vous étiez fixé. Si le délai prévu est respecté, un pouce vert sera affiché. Dans le cas où le travail prévu n'est pas réalisé, un pouce rouge sera affiché.<br> Il faut noter qu'un module est considéré comme validé quand il est consulté. Ainsi, pour valider une journée, il faut consulter tous les modules que vous avez planifié dans la section 'Planification de la semaine'.<br> .";
+$string['metareflexion_report_subtitle_days_student'] = "Mes engagements prévus pour cette semaine";
+$string['metareflexion_report_subtitle_days_teacher'] = "Pourcentage d'élèves qui ont respecté leur plan ce jour-là";
+$string['metareflexion_report_description_goals_student'] = "En dessous de ce graphique, vous trouverez un rappel des objectifs que vous vous étiez fixés la semaine dernière.";
+$string['metareflexion_report_subtitle_hours_student'] = "Mon efficacité dans la semaine";
+$string['metareflexion_report_subtitle_hours_teacher'] = "Efficacité moyenne de la semaine";
+$string['metareflexion_report_descrition_hours_teacher'] = "Ce graphique montre les heures que les étudiants ont prévu de travailler pendant cette semaine par rapport aux heures effectivement travaillées. <br> Notez qu'il est considéré comme un jour ouvré si l'étudiant a fait une interaction avec les ressources de cette semaine. Le temps prévu est obtenu à partir de la Méta-réflexion de l'étudiant dans son Planification de la semaine.<br>";
+$string['metareflexion_report_descrition_hours_student'] = "Ce graphique montre les heures que l'étudiant a prévu de travailler pendant cette semaine par rapport aux heures effectivement travaillées et la moyenne des heures travaillées par les étudiants du cours. Le temps prévu est obtenu à partir de la méta-réflexion hebdomadaire que vous avez faite dans la section 'Planification de la semaine'.";
+$string['metareflexion_report_description_meta_student'] = "Enfin, vous trouverez en dernière position un questionnaire sur la semaine passée. Il faut noter que ce formulaire n'est pas disponible pour une semaine sans planification ou pour la semaine courante.";
+$string['metareflexion_cw_day_lun'] = "Lundi";
+$string['metareflexion_cw_day_mar'] = "Mardi";
+$string['metareflexion_cw_day_mie'] = "Mercredi";
+$string['metareflexion_cw_day_jue'] = "Jeudi";
+$string['metareflexion_cw_day_vie'] = "Vendredi";
+$string['metareflexion_cw_day_sab'] = "Samedi";
+$string['metareflexion_cw_day_dom'] = "Dimanche";
+$string['metareflexion_myself'] = "Mon";
+$string['metareflexion_inverted_time'] = "Temps investi";
+$string['metareflexion_inverted_time_course'] = "Temps moyen investi (cours)";
+$string['metareflexion_planified_time'] = "Temps planifié";
+$string['metareflexion_planified_time_course'] = "Temps moyen prévu (cours)";
+$string['metareflexion_belonging'] = "Appartenance à";
+$string['metareflexion_student'] = "Etudiants";
+$string['metareflexion_interaction_user'] = "Utilisateurs qui ont interagi avec cette ressource";
+$string['metareflexion_hover_title_teacher'] = "Efficacité des étudiants (moyenne)";
+$string['metareflexion_hover_title_student'] = "Efficacité par semaine";
+$string['metareflexion_planning_week'] = "Il/Elle eat en train de planificar";
+$string['metareflexion_planning_week_start'] = ", commence le ";
+$string['metareflexion_planning_week_end'] = " et se termine le ";
+$string['metareflexion_report_pw_avegare_hour_clases'] = "Nombre moyen d'heures passées en cours en face à face";
+$string['metareflexion_report_pw_avegare_hour_outside_clases'] = "Moyenne des heures passées en dehors des cours";
+$string['metareflexion_report_pw_summary_card'] = "Durée moyenne du cours";
+$string['metareflexion_report_pw_learning_objetives'] = "Concernant aux objectifs d'apprentissage";
+$string['metareflexion_report_pw_attending_classes'] = "Concernant l'avantage de suivre des cours ";
+$string['metareflexion_report_pw_text_graphic_no_data'] = "Pas de données pour cette semaine";
+$string['metareflexion_report_pw_description_teacher'] = "Dans ces graphiques, vous pouvez voir les informations obtenues des étudiants concernant leurs impressions sur les cours de la semaine précédente.";
+$string['metareflexion_weekly_planning_subtitle'] = "Voir les résultats de votre planification hebdomadaire sous l'onglet 'Efficacité par semaine'.";
+$string['metareflexion_saved_form'] = "Vous avez déjà rempli le formulaire sur Méta-réflexion cette semaine";
+$string['metareflexion_efficiency_title'] = "Votre efficacité";
+$string['metareflexion_goals_title'] = "Choix des objectifs personnels";
+$string['metareflexion_pres_question_time_invested_outside'] = "Combien de temps ai-je investi pour travailler en-dehors de la plateforme Moodle ?";
+$string['metareflexion_pres_question_objectives_reached'] = "Ai-je atteint mes objectifs ?";
+$string['metareflexion_pres_question_pres_question_feel'] = "Quel est mon avis sur cette semaine ?";
+$string['metareflexion_pres_question_learn_and_improvement'] = "Qu'ai-je appris et comment puis-je m'améliorer ?";
+$string['metareflexion_goals_reflexion_title'] = "Les objectifs choisis pour cette semaine";
+$string['metareflexion_title_hours_plan'] = "Prévision du temps de travail pour la semaine courante";
+$string['metareflexion_title_retrospective'] = "Retrospective de la semaine";
+/* Reports */
+$string['student_reports:view_report_as_teacher'] = "Voir le rapport en tant qu'enseignant";
+$string['student_reports:view_report_as_student'] = "Voir le rapport en tant qu'étudiant";
+$string['student_reports:time_visualizations'] = "Travail sur la plate-forme";
+$string['student_reports:time_worked_session_report'] = "Rapport sur le 'Travail sur la plate-forme'";
+$string['student_reports:write'] = "Sauvegarder les modifications apportées aux rapports";
+
+/* time_worked_session_report */
+$string['twsr_title'] = "Sessions d'étude par semaine";
+$string['twsr_description_student'] = "Une session correspond au temps consacré à l'interaction au sein de la plate-forme et au temps moyen des sessions respectives. Vous trouverez ci-dessous la liste des semaines avec le nombre total de sessions. En déplaçant le curseur sur le graphique, vous pouvez trouver des informations détaillées sur le groupe d'étudiants dans le cours.";
+$string['twsr_description_teacher'] = "Une session correspond au temps pendant lequel les étudiants ont interagi avec le matériel de cours de Moodle. Dans ce rapport, vous trouverez la liste des semaines avec le nombre total de sessions effectuées par les étudiants du cours. En plaçant votre curseur sur l'une des barres, vous pouvez voir le nombre total de sessions, la durée moyenne des sessions et le nombre d'étudiants différents qui ont participé à chaque session.";
+$string['twsr_axis_x'] = "Nombre de sessions";
+$string['twsr_axis_y'] = "Semaines de cours";
+$string['twsr_student'] = "Étudiant";
+$string['twsr_students'] = "Étudiants";
+$string['twsr_sessions_by'] = "Les sessions appartenant à";
+$string['twsr_sessions_middle_time'] = "Duré moyenne des sessions";
+$string['twsr_total_sessions'] = "Total des sessions";
+
+/* time_visualizations */
+$string['tv_title'] = "Temps passé (par heure)";
+$string['tv_lunes'] = "Lundi";
+$string['tv_martes'] = "Mardi";
+$string['tv_miercoles'] = "Mercredi";
+$string['tv_jueves'] = "Jeudi";
+$string['tv_viernes'] = "Vendredi";
+$string['tv_sabado'] = "Samedi";
+$string['tv_domingo'] = "Dimange";
+$string['tv_axis_x'] = "Jours de la semaine";
+$string['tv_axis_y'] = "Heures de la journée";
+$string['tv_url'] = "URL";
+$string['tv_resource_document'] = "Document";
+$string['tv_resource_image'] = "Image";
+$string['tv_resource_audio'] = "Audio";
+$string['tv_resource_video'] = "Video";
+$string['tv_resource_file'] = "Fichier";
+$string['tv_resource_script'] = "Script/Code";
+$string['tv_resource_text'] = "Texte";
+$string['tv_resource_download'] = "Téléchargements";
+$string['tv_assign'] = "Tâche";
+$string['tv_assignment'] = "Tache";
+$string['tv_book'] = "Livre";
+$string['tv_choice'] = "Selection";
+$string['tv_feedback'] = "Retour";
+$string['tv_folder'] = "Dossier";
+$string['tv_forum'] = "Forum";
+$string['tv_glossary'] = "Glossaire";
+$string['tv_label'] = "Étiquette";
+$string['tv_lesson'] = "Leçon";
+$string['tv_page'] = "Page";
+$string['tv_quiz'] = "Quiz";
+$string['tv_survey'] = "Enquête";
+$string['tv_lti'] = "Outil externe";
+$string['tv_other'] = "Un autre";
+$string['tv_interaction'] = "Interaction par";
+$string['tv_interactions'] = "Interaction par";
+$string['tv_course_module'] = "Module";
+$string['tv_course_modules'] = "Module";
+$string['tv_student'] = "Étudiant";
+$string['tv_students'] = "Étudiants";
+$string['tv_average'] = "Interactions moyennes";
+$string['tv_change_timezone'] = "Fuseau horaire:";
+$string['tv_activity_inside_plataform_student'] = "Mon activité sur la plateforme";
+$string['tv_activity_inside_plataform_teacher'] = "Activité des élèves sur la plateforme";
+$string['tv_time_inside_plataform_student'] = "Mon temps sur la plateforme";
+$string['tv_time_inside_plataform_teacher'] = "Temps moyen passé par les étudiants sur la plateforme cette semaine";
+$string['tv_time_inside_plataform_description_teacher'] = "Le temps que l'étudiant a investi dans la semaine choisie, comparé au temps que l'enseignant a prévu d'investir. Le temps passé affiché correspond à la moyenne de tous les étudiants. Le temps prévu par l'enseignant est le temps attribué dans <i>Planification de la semaine</i> par l'enseignant.";
+$string['tv_time_inside_plataform_description_student'] = "Temps passé cette semaine par rapport au temps que l'enseignant avait prévu de passer.";
+$string['tv_activity_inside_plataform_description_teacher'] = "L'axe des Y indique les heures de la journée et l'axe des X les jours de la semaine. Dans le graphique, vous pouvez trouver plusieurs points qui, lorsque vous passez le curseur dessus, fournissent des informations détaillées sur les interactions des élèves, regroupées par type de ressource (nombre d'interactions, nombre d'élèves ayant interagi avec la ressource et nombre moyen d'interactions). <b>En cliquant sur les étiquettes, vous pouvez filtrer par type de ressources, en ne laissant visibles que celles qui ne sont pas barrées</b>";
+$string['tv_activity_inside_plataform_description_student'] = "Ce graphique montre les interactions par type de ressource et par temps. Lorsque vous déplacez votre curseur sur un point visible du graphique, vous verrez le nombre d'interactions regroupées par type de ressource. En cliquant sur les étiquettes, vous pouvez filtrer par type de ressource.";
+$string['tv_to'] = "dans le";
+$string['tv_time_spend'] = "Temps passé";
+$string['tv_time_spend_teacher'] = "Temps moyen passé";
+$string['tv_time_should_spend'] = "Le temps qu'il faut consacrer";
+$string['tv_time_should_spend_teacher'] = "Temps moyen que vous devriez passer'";
+
+/* activities_performed */
+$string['ap_title'] = "Activités réalisées";
+$string['ap_description_student'] = "Ce rapport présente les activités réalisées et en cours cette semaine. La barre de progression de la semaine correspond au pourcentage d'activités à réaliser cette semaine et prévues par l'enseignant. L'option Semaine vous permet de choisir et de visualiser le rapport correspondant à la semaine choisie. Les activités sont regroupées par type de ressources. Les activités marquées en vert sont celles qui ont été réalisées et celles marquées en rouge sont celles qui sont en cours. Pour qu'une activité soit considérée comme terminée, vous devez avoir interagi au moins une fois avec la ressource. <br/> <br/> En cliquant sur les étiquettes terminées ou en attente, vous pourrez filtrer les informations.";
+$string['ap_description_teacher'] = "Text en attente";
+$string['ap_axis_x'] = "Type de ressources";
+$string['ap_axis_y'] = "Montant des ressources";
+$string['ap_progress'] = "Progrès de la semaine";
+$string['ap_to'] = "dans la";
+$string['ap_week'] = "Semaine";
+$string['ap_activities'] = "Durée moyenne d'interaction pour resource";
+
+/* activities_performed teacher */
+$string['apt_title'] = "Activités de cours effectuées";
+$string['apt_description'] = "Ce rapport présente les activités disponibles du cours. L'option Semaine vous permet de choisir et de visualiser le rapport de cette semaine. En déplaçant le curseur sur l'une des barres, vous trouverez la moyenne des vues et des interactions. Si vous cliquez sur la barre, vous trouverez plus de détails (nom de l'élève, courriel, interactions, temps moyen de visualisation).";
+$string['apt_axis_x'] = "Interactions";
+$string['apt_axis_y'] = "Ressources";
+$string['apt_visualization_average'] = "Affichages moyens";
+$string['apt_interacctions_average'] = "Moyenne des interactions";
+$string['apt_thead_name'] = "Nom";
+$string['apt_thead_lastname'] = "Nom de famille";
+$string['apt_thead_email'] = "Email";
+$string['apt_thead_interactions'] = "Interactions";
+$string['apt_thead_visualization'] = "Durée moyenne d'interaction pour resource";
+
+/* Composante de la pagination */
+$string['pagination_component_to'] = "dans la";
+$string['pagination_component_name'] = "Semaine";
+
+/* Questions et réponses */
+$string['question_number_one'] = "Avez-vous atteint les objectifs d'apprentissage la semaine dernière ?";
+$string['answers_number_one_option_one'] = "Oui";
+$string['answers_number_one_option_two'] = "Non";
+
+
+$string['question_number_two'] = "Quel est le résultat de votre apprentissage ?";
+$string['answers_number_two_option_one'] = "J'ai une idée précise du ou des sujets et je sais comment l'appliquer";
+$string['answers_number_two_option_two'] = "J'ai une idée précise du ou des sujets et non de la façon de les appliquer.";
+$string['answers_number_two_option_three'] = "Je n'ai pas d'idée précise sur le(s) sujet(s).";
+
+$string['question_number_three'] = " A quel point participer aux cours en face à face était-il utile pour vous ?";
+$string['answers_number_three_option_one'] = "Rien d'utile";
+$string['answers_number_three_option_two'] = "Plutôt utile";
+$string['answers_number_three_option_three'] = "Utile";
+$string['answers_number_three_option_four'] = "Tres utile";
+$string['answers_number_three_option_five'] = "Vraiment utile";
+$string['answers_number_three_option_six'] = "Je ne suis pas allé en classe";
+
+$string['question_number_four'] = "Quel est votre ressenti par rapport à la semaine passée ?";
+$string['answers_number_four_option_one'] = "Je ne suis pas satisfait de la façon dont je me suis organisé pour atteindre mes objectifs";
+$string['answers_number_four_option_two'] = "Je suis assez satisfait de la façon dont je me suis organisé pour atteindre mes objectifs";
+$string['answers_number_four_option_three'] = "Je suis satisfait de la façon dont je me suis organisé pour atteindre mes objectifs";
+$string['answers_number_four_option_four'] = "Je suis très satisfait de la façon dont je me suis organisé pour atteindre mes objectifs";
+
+
+/* Groupes */
+$string['group_allstudent'] = "Tous les étudiants";
+
+
+/* Admin Settings */
+$string['nmp_use_navbar_menu'] = 'Activer le nouveau menu';
+$string['nmp_use_navbar_menu_desc'] = 'Afficher le menu du plugin dans la barre de navigation supérieure, sinon il inclura le menu dans le bloc de navigation.';
 
 /* Gamification */
 $string['EnableGame']="Désactiver/Activer :";
@@ -789,4 +1164,4 @@ $string['fml_api_cancel_action'] = 'Vous avez annulé l\'action';
 $string['overview']='Vue d\'ensemble : ';
 $string['game_point_error']='Veuillez saisir les points';
 $string['game_event_error']='Veuillez saisir l\'évènement';
-$string['game_name_error']='Le nom est requis';
\ No newline at end of file
+$string['game_name_error']='Le nom est requis';
diff --git a/notemyprogress/lib.php b/notemyprogress/lib.php
index 1e1a7cb2b794390c88171475ccd1e44c02dadbbc..ef55353de6638ba0f009fb681fdb077981c55336 100644
--- a/notemyprogress/lib.php
+++ b/notemyprogress/lib.php
@@ -27,13 +27,14 @@ defined('MOODLE_INTERNAL') || die;
 
 require_once($CFG->dirroot . '/local/notemyprogress/locallib.php');
 
-function local_notemyprogress_render_navbar_output(\renderer_base $renderer) {
+function local_notemyprogress_render_navbar_output(\renderer_base $renderer)
+{
 
     global $CFG, $COURSE, $PAGE, $SESSION, $SITE, $USER;
 
     $items = [];
 
-    if (isset($COURSE) && $COURSE->id <= 1 ) {
+    if (isset($COURSE) && $COURSE->id <= 1) {
         return null;
     }
 
@@ -42,77 +43,91 @@ function local_notemyprogress_render_navbar_output(\renderer_base $renderer) {
     $configweeks = new \local_notemyprogress\configweeks($COURSE, $USER);
     $configuration_is_set = $configweeks->is_set();
 
-    if(!has_capability('local/notemyprogress:usepluggin', $context)){
+    if (!has_capability('local/notemyprogress:usepluggin', $context)) {
         return null;
     }
 
     $hidden_for_student = !$configuration_is_set && !is_siteadmin();
-    if(has_capability('local/notemyprogress:view_as_student', $context) && $hidden_for_student){
+    if (has_capability('local/notemyprogress:view_as_student', $context) && $hidden_for_student) {
         return null;
     }
 
-    if(has_capability('local/notemyprogress:setweeks', $context)){
+    if (has_capability('local/notemyprogress:setweeks', $context)) {
         $text = get_string('menu_setweek', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/setweeks.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/setweeks.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
-    if(has_capability('local/notemyprogress:teacher_general', $context) && $configuration_is_set){
+    if (has_capability('local/notemyprogress:teacher_general', $context) && $configuration_is_set) {
         $text = get_string('menu_general', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/teacher.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/teacher.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
-    if(has_capability('local/notemyprogress:teacher_sessions', $context) && $configuration_is_set){
+    if (has_capability('local/notemyprogress:teacher_sessions', $context) && $configuration_is_set) {
         $text = get_string('menu_sessions', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/sessions.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/sessions.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
-    if(has_capability('local/notemyprogress:assignments', $context) && $configuration_is_set){
+    if (has_capability('local/notemyprogress:assignments', $context) && $configuration_is_set) {
         $text = get_string('menu_assignments', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/assignments.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/assignments.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
-    if(has_capability('local/notemyprogress:grades', $context) && $configuration_is_set){
+    if (has_capability('local/notemyprogress:grades', $context) && $configuration_is_set) {
         $text = get_string('menu_grades', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/grades.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/grades.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
-    if(has_capability('local/notemyprogress:quiz', $context) && $configuration_is_set){
+    if (has_capability('local/notemyprogress:quiz', $context) && $configuration_is_set) {
         $text = get_string('menu_quiz', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/quiz.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/quiz.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
-    if(has_capability('local/notemyprogress:dropout', $context) && $configuration_is_set){
+    if (has_capability('local/notemyprogress:dropout', $context) && $configuration_is_set) {
         $text = get_string('menu_dropout', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/dropout.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/dropout.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
 
-    if(has_capability('local/notemyprogress:student_general', $context) && !is_siteadmin() && $configuration_is_set){
+    if (has_capability('local/notemyprogress:student_general', $context) && !is_siteadmin() && $configuration_is_set) {
         $text = get_string('menu_general', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/student.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/student.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
-    if(has_capability('local/notemyprogress:student_sessions', $context) && !is_siteadmin() && $configuration_is_set){
+    if (has_capability('local/notemyprogress:student_sessions', $context) && !is_siteadmin() && $configuration_is_set) {
         $text = get_string('menu_sessions', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/student_sessions.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/student_sessions.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
     //ADD menu items
     if(has_capability('local/notemyprogress:logs', $context) && $configuration_is_set){
         $text = get_string('menu_logs', 'local_notemyprogress');
-        $url = new moodle_url('/local/notemyprogress/logs.php?courseid='.$COURSE->id);
+        $url = new moodle_url('/local/notemyprogress/logs.php?courseid=' . $COURSE->id);
         array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
     }
 
+    // if (has_capability('local/notemyprogress:teacher_planning', $context) && $configuration_is_set) {
+    //     $text = get_string('menu_planning', 'local_notemyprogress');
+    //     $url = new moodle_url('/local/notemyprogress/metareflexion.php?courseid=' . $COURSE->id);
+    //     array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
+    // }
+
+    if (has_capability('local/notemyprogress:student_planning', $context) && !is_siteadmin() && $configuration_is_set) {
+        $text = get_string('menu_planning', 'local_notemyprogress');
+        $url = new moodle_url('/local/notemyprogress/metareflexion.php?courseid=' . $COURSE->id);
+        array_push($items, local_notemyprogress_new_menu_item(s($text), $url));
+    }
+
+
+
     if(has_capability('local/notemyprogress:teacher_gamification', $context) && $configuration_is_set){
         $text = 'Gamification';
         $url = new moodle_url('/local/notemyprogress/gamification.php?courseid='.$COURSE->id);
@@ -126,12 +141,14 @@ function local_notemyprogress_render_navbar_output(\renderer_base $renderer) {
 
     $params = [
         "title" => get_string('menu_main_title', 'local_notemyprogress'),
-        "items" => $items];
+        "items" => $items
+    ];
     return $renderer->render_from_template('local_notemyprogress/navbar_popover', $params);
 }
 
-function local_notemyprogress_get_fontawesome_icon_map() {
+function local_notemyprogress_get_fontawesome_icon_map()
+{
     return [
         'local_notemyprogress:icon' => 'fa-pie-chart',
     ];
-}
\ No newline at end of file
+}
diff --git a/notemyprogress/locallib.php b/notemyprogress/locallib.php
index 5e207f8df4b71f357b68219ecf43d7d58bfbaeea..680c1a3ab9db09a36003e13184969201369e667a 100644
--- a/notemyprogress/locallib.php
+++ b/notemyprogress/locallib.php
@@ -27,7 +27,7 @@
 require_once(dirname(__FILE__).'/../../config.php');
 
 /**
- * Retorna un nuevo ítem para el menú de navegación de Note My Progress
+ * Retorna un nuevo ítem para el menú de navegación de Fliplearning
  *
  * @param string $name nombre de la página para el ítem
  * @param string $url url de la página para el ítem
@@ -62,7 +62,7 @@ function local_notemyprogress_set_page($course, $url){
 }
 
 /**
- * Agrega las importaciones de los archivos css necesarios para Note My Progress
+ * Agrega las importaciones de los archivos css necesarios para Fliplearning
  */
 function local_notemyprogress_render_styles(){
     global $PAGE;
diff --git a/notemyprogress/metareflexion.php b/notemyprogress/metareflexion.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd942332fd9571046628a01e9b42e95da8cb492d
--- /dev/null
+++ b/notemyprogress/metareflexion.php
@@ -0,0 +1,231 @@
+-<?php
+global $COURSE, $USER;
+require_once('locallib.php');
+
+
+
+$courseid = required_param('courseid', PARAM_INT);
+$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
+
+$context = context_course::instance($course->id);
+require_capability('local/notemyprogress:usepluggin', $context);
+//require_capability('local/notemyprogress:view_as_student', $context);
+//require_capability('local/notemyprogress:student_sessions', $context);
+
+$url = '/local/student_reports/metareflexion.php';
+local_notemyprogress_set_page($course, $url);
+
+$logs = new \local_notemyprogress\logs($COURSE->id, $USER->id);
+
+$actualLink = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
+
+$logs->addLogsNMP("viewed", "section", "STUDENT_STUDY_SESSIONS", "student_study_sessions", $actualLink, "Section where you can consult various indicators on the study sessions carried out by the student");
+
+$reports = new \local_notemyprogress\student($COURSE->id, $USER->id);
+
+$metareflexion = new \local_notemyprogress\metareflexion($COURSE->id, $USER->id);
+
+$configweeks = new \local_notemyprogress\configweeks($COURSE, $USER);
+if (!$configweeks->is_set()) {
+    $message = get_string("weeks_not_config", "local_notemyprogress");
+    print_error($message);
+}
+
+$content = [
+    'strings' => array(
+        "inverted_time_chart_title" => get_string("fml_student_time_inverted_title", "local_notemyprogress"),
+        "inverted_time_chart_x_axis" => get_string("fml_student_time_inverted_x_axis", "local_notemyprogress"),
+        "inverted_time" => get_string("fml_student_inverted_time", "local_notemyprogress"),
+        "expected_time" => get_string("fml_student_expected_time", "local_notemyprogress"),
+
+        "resource_access_title" => get_string("fml_resource_access_title", "local_notemyprogress"),
+        "resource_access_x_axis" => get_string("fml_resource_access_x_axis", "local_notemyprogress"),
+        "resource_access_y_axis" => get_string("fml_resource_access_y_axis", "local_notemyprogress"),
+        "resource_access_legend1" => get_string("fml_resource_access_legend1", "local_notemyprogress"),
+        "resource_access_legend2" => get_string("fml_resource_access_legend2", "local_notemyprogress"),
+
+        "hours_sessions_title" => get_string("fml_hours_sessions_title", "local_notemyprogress"),
+        "week_progress_title" => get_string("fml_week_progress_title", "local_notemyprogress"),
+
+        "session_text" => get_string("fml_session_text", "local_notemyprogress"),
+        "sessions_text" => get_string("fml_sessions_text", "local_notemyprogress"),
+        "modules_details" => get_string("fml_modules_details", "local_notemyprogress"),
+
+        "hours_short" => get_string("fml_hours_short", "local_notemyprogress"),
+        "minutes_short" => get_string("fml_minutes_short", "local_notemyprogress"),
+        "seconds_short" => get_string("fml_seconds_short", "local_notemyprogress"),
+
+        "modules_access_chart_title" => get_string("fml_modules_access_chart_title", "local_notemyprogress"),
+        "modules_viewed" => get_string("fml_modules_viewed", "local_notemyprogress"),
+        "modules_no_viewed" => get_string("fml_modules_no_viewed", "local_notemyprogress"),
+        "modules_complete" => get_string("fml_modules_complete", "local_notemyprogress"),
+        "modules_interaction" => get_string("fml_modules_interaction", "local_notemyprogress"),
+        "modules_interactions" => get_string("fml_modules_interactions", "local_notemyprogress"),
+        "close_button" => get_string("fml_close_button", "local_notemyprogress"),
+
+        'hours_unit_time_label' => get_string('hours_unit_time_label', 'local_notemyprogress'),
+        'graph_generating' => get_string('graph_generating', 'local_notemyprogress'),
+        'last_week_update' => get_string('metareflexion_last_week_update', 'local_notemyprogress'),
+        'last_week_created' => get_string('metareflexion_last_week_created', 'local_notemyprogress'),
+        'update_planification_success' => get_string('metareflexion_update_planification_success', 'local_notemyprogress'),
+        'api_error_network' => get_string('api_error_network', 'local_notemyprogress'),
+        'save_planification_success' => get_string('metareflexion_save_planification_success', 'local_notemyprogress'),
+        'tab_1' => get_string('metareflexion_tab_planification',  'local_notemyprogress'),
+        'tab_2' => get_string('metareflexion_tab_reflexion', 'local_notemyprogress'),
+        'title_reports' => get_string('metareflexion_report_title', 'local_notemyprogress'),
+        'subtitle_reports_days_student' => get_string('metareflexion_report_subtitle_days_student', 'local_notemyprogress'),
+        'subtitle_reports_days_teacher' => get_string('metareflexion_report_subtitle_days_teacher', 'local_notemyprogress'),
+        'description_reports_goals_student' => get_string('metareflexion_report_description_goals_student', 'local_notemyprogress'),
+        'description_reports_days_student' => get_string('metareflexion_report_description_days_student', 'local_notemyprogress'),
+        'description_reports_days_teacher' => get_string('metareflexion_report_description_days_teacher', 'local_notemyprogress'),
+        'subtitle_reports_hours_student' => get_string('metareflexion_report_subtitle_hours_student', 'local_notemyprogress'),
+        'subtitle_reports_hours_teacher' => get_string('metareflexion_report_subtitle_hours_teacher', 'local_notemyprogress'),
+        'description_reports_hours_teacher' => get_string('metareflexion_report_descrition_hours_teacher', 'local_notemyprogress'),
+        'description_reports_hours_student' => get_string('metareflexion_report_descrition_hours_student', 'local_notemyprogress'),
+        'description_reports_meta_student' => get_string('metareflexion_report_description_meta_student', 'local_notemyprogress'),
+        'effectiveness_title' => get_string('metareflexion_effectiveness_title',  'local_notemyprogress'),
+        'effectiveness_graphic_legend_unplanned' => get_string('metareflexion_graphic_legend_unplanned',  'local_notemyprogress'),
+        'effectiveness_graphic_legend_pending' => get_string('effectiveness_graphic_legend_pending',  'local_notemyprogress'),
+        'effectiveness_graphic_legend_completed' => get_string('effectiveness_graphic_legend_completed',  'local_notemyprogress'),
+        'effectiveness_graphic_legend_failed' => get_string('effectiveness_graphic_legend_failed',  'local_notemyprogress'),
+        'currentweek_title' => get_string('metareflexion_tab_reflexion_title',  'local_notemyprogress'),
+        'currentweek_description_student' => get_string('metareflexion_cw_description_student',  'local_notemyprogress'),
+        'currentweek_card_title' => get_string('metareflexion_cw_card_title',  'local_notemyprogress'),
+        'currentweek_card_daysdedicate' => get_string('metareflexion_cw_card_daysdedicate',  'local_notemyprogress'),
+        'currentweek_card_hoursdedicate' => get_string('metareflexion_cw_card_hoursdedicate',  'local_notemyprogress'),
+        'currentweek_card_goalsdedicate' => get_string('metareflexion_cw_dialog_goalsdedicate',  'local_notemyprogress'),
+        'currentweek_card_msg' => get_string('metareflexion_cw_card_msg',  'local_notemyprogress'),
+        'currentweek_card_btn_plan' => get_string('metareflexion_cw_card_btn_plan',  'local_notemyprogress'),
+        'currentweek_table_title' => get_string('metareflexion_cw_table_title',  'local_notemyprogress'),
+        'currentweek_table_thead_activity' => get_string('metareflexion_cw_table_thead_activity',  'local_notemyprogress'),
+        'currentweek_table_thead_type' => get_string('metareflexion_cw_table_thead_type',  'local_notemyprogress'),
+        'currentweek_table_thead_days_committed' => get_string('metareflexion_cw_table_thead_days_committed',  'local_notemyprogress'),
+        'currentweek_table_thead_hours_committed' => get_string('metareflexion_cw_table_thead_hours_committed',  'local_notemyprogress'),
+        'currentweek_table_thead_plan' => get_string('metareflexion_cw_table_thead_plan',  'local_notemyprogress'),
+        'currentweek_dialog_daysdedicate' => get_string('metareflexion_cw_dialog_daysdedicate',  'local_notemyprogress'),
+        'currentweek_dialog_hoursdedicate' => get_string('metareflexion_cw_dialog_hoursdedicate',  'local_notemyprogress'),
+        'currentweek_dialog_btn_cancel' => get_string('metareflexion_cw_dialog_btn_cancel',  'local_notemyprogress'),
+        'currentweek_dialog_btn_accept' => get_string('metareflexion_cw_dialog_btn_accept',  'local_notemyprogress'),
+        'currentweek_day_lun' => get_string('metareflexion_cw_day_lun',  'local_notemyprogress'),
+        'currentweek_day_mar' => get_string('metareflexion_cw_day_mar',  'local_notemyprogress'),
+        'currentweek_day_mie' => get_string('metareflexion_cw_day_mie',  'local_notemyprogress'),
+        'currentweek_day_jue' => get_string('metareflexion_cw_day_jue',  'local_notemyprogress'),
+        'currentweek_day_vie' => get_string('metareflexion_cw_day_vie',  'local_notemyprogress'),
+        'currentweek_day_sab' => get_string('metareflexion_cw_day_sab',  'local_notemyprogress'),
+        'currentweek_day_dom' => get_string('metareflexion_cw_day_dom',  'local_notemyprogress'),
+        'pastweek_title' => get_string('metareflexion_pw_title',  'local_notemyprogress'),
+        'pastweek_description_student' => get_string('metareflexion_pw_description_student',  'local_notemyprogress'),
+        'pastweek_classroom_hours' => get_string('metareflexion_pw_classroom_hours',  'local_notemyprogress'),
+        'pastweek_hours_off_course' => get_string('metareflexion_pw_hours_off_course',  'local_notemyprogress'),
+        'pastweek_btn_save' => get_string('metareflexion_pw_btn_save',  'local_notemyprogress'),
+        "pagination" => get_string("pagination", "local_notemyprogress"),
+        "tv_to" => get_string("tv_to", "local_notemyprogress"),
+        "api_error_network" => get_string("api_error_network", "local_notemyprogress"),
+        "pagination_name" => get_string("pagination_component_name", "local_notemyprogress"),
+        "pagination_separator" => get_string("pagination_component_to", "local_notemyprogress"),
+        "tv_resource_document" => get_string("tv_resource_document", "local_notemyprogress"),
+        "tv_resource_image" => get_string("tv_resource_image", "local_notemyprogress"),
+        "tv_resource_audio" => get_string("tv_resource_audio", "local_notemyprogress"),
+        "tv_resource_video" => get_string("tv_resource_video", "local_notemyprogress"),
+        "tv_resource_file" => get_string("tv_resource_file", "local_notemyprogress"),
+        "tv_resource_script" => get_string("tv_resource_script", "local_notemyprogress"),
+        "tv_resource_text" => get_string("tv_resource_text", "local_notemyprogress"),
+        "tv_resource_download" => get_string("tv_resource_download", "local_notemyprogress"),
+        "tv_assign" => get_string("tv_assign", "local_notemyprogress"),
+        "tv_assignment" => get_string("tv_assignment", "local_notemyprogress"),
+        "tv_book" => get_string("tv_book", "local_notemyprogress"),
+        "tv_choice" => get_string("tv_choice", "local_notemyprogress"),
+        "tv_feedback" => get_string("tv_feedback", "local_notemyprogress"),
+        "tv_folder" => get_string("tv_folder", "local_notemyprogress"),
+        "tv_forum" => get_string("tv_forum", "local_notemyprogress"),
+        "tv_glossary" => get_string("tv_glossary", "local_notemyprogress"),
+        "tv_label" => get_string("tv_label", "local_notemyprogress"),
+        "tv_lesson" => get_string("tv_lesson", "local_notemyprogress"),
+        "tv_page" => get_string("tv_page", "local_notemyprogress"),
+        "tv_quiz" => get_string("tv_quiz", "local_notemyprogress"),
+        "tv_survey" => get_string("tv_survey", "local_notemyprogress"),
+        "tv_lti" => get_string("tv_lti", "local_notemyprogress"),
+        "helplabel" => get_string("helplabel", "local_notemyprogress"),
+        "exitbutton" => get_string("exitbutton", "local_notemyprogress"),
+        "pagination_title" => get_string("pagination_title", "local_notemyprogress"),
+        "compare_with_course" => get_string("compare_with_course", "local_notemyprogress"),
+        "myself" => get_string("metareflexion_myself", "local_notemyprogress"),
+        "inverted_time" => get_string("metareflexion_inverted_time", "local_notemyprogress"),
+        "inverted_time_course" => get_string("metareflexion_inverted_time_course", "local_notemyprogress"),
+        "planified_time" => get_string("metareflexion_planified_time", "local_notemyprogress"),
+        "planified_time_course" => get_string("metareflexion_planified_time_course", "local_notemyprogress"),
+        "belonging" => get_string("metareflexion_belonging", "local_notemyprogress"),
+        "student" => get_string("metareflexion_student", "local_notemyprogress"),
+        "interaction_user" => get_string("metareflexion_interaction_user", "local_notemyprogress"),
+        "hover_title_teacher" => get_string("metareflexion_hover_title_teacher", "local_notemyprogress"),
+        "hover_title_student" => get_string("metareflexion_hover_title_student", "local_notemyprogress"),
+        "planning_week" => get_string("metareflexion_planning_week", "local_notemyprogress"),
+        "planning_week_start" => get_string("metareflexion_planning_week_start", "local_notemyprogress"),
+        "planning_week_end" => get_string("metareflexion_planning_week_end", "local_notemyprogress"),
+        "pastweek_avegare_hour_clases" => get_string("metareflexion_report_pw_avegare_hour_clases", "local_notemyprogress"),
+        "pastweek_avegare_hour_outside_clases" => get_string("metareflexion_report_pw_avegare_hour_outside_clases", "local_notemyprogress"),
+        "pastweek_summary_card" => get_string("metareflexion_report_pw_summary_card", "local_notemyprogress"),
+        "pastweek_learning_objetives" => get_string("metareflexion_report_pw_learning_objetives", "local_notemyprogress"),
+        "pastweek_attending_classes" => get_string("metareflexion_report_pw_attending_classes", "local_notemyprogress"),
+        "pastweek_text_graphic_no_data" => get_string("metareflexion_report_pw_text_graphic_no_data", "local_notemyprogress"),
+        "pastweek_description_teacher" => get_string("metareflexion_report_pw_description_teacher", "local_notemyprogress"),
+        "weekly_planning_subtitle" => get_string("metareflexion_weekly_planning_subtitle", "local_notemyprogress"),
+        "saved_form" => get_string("metareflexion_saved_form", "local_notemyprogress"),
+        "goals_title" => get_string("metareflexion_goals_title", "local_notemyprogress"),
+        "pres_question_time_invested_outside" => get_string("metareflexion_pres_question_time_invested_outside", "local_notemyprogress"),
+        "pres_question_objectives_reached" => get_string("metareflexion_pres_question_objectives_reached", "local_notemyprogress"),
+        "pres_question_feel" => get_string("metareflexion_pres_question_pres_question_feel", "local_notemyprogress"),
+        "pres_question_learn_and_improvement" => get_string("metareflexion_pres_question_learn_and_improvement", "local_notemyprogress"),
+        "goals_reflexion_title" => get_string("metareflexion_goals_reflexion_title", "local_notemyprogress"),
+        "title_hours_plan" => get_string("metareflexion_title_hours_plan", "local_notemyprogress"),
+        "title_retrospective" => get_string("metareflexion_title_retrospective", "local_notemyprogress"),
+
+    ),
+    //'indicators' => $reports->get_general_indicators(),
+    
+    //general informations
+    'userid' => $USER->id,
+    'courseid' => $courseid,
+    'module_groups' => $reports->get_modules_completion(),
+    'indicators' => $reports->get_sessions(),
+    
+    //planning/schedule  
+    'cmcurrentweeknew' => $metareflexion->find_current_week_new($reports),
+
+    'week_schedule' => $reports->get_week_schedule(),
+    'data_report_goals' => $reports->goals_report_metereflexion(),
+    'data_report_days' => $reports->days_report_metereflexion(),
+    'data_report_hours' => $reports->hours_report_metereflexion(),
+    'status_planning' => $reports->status_planning(),
+    
+    //metareflexion/last_week
+    'lastweek' => $metareflexion->find_last_week(),
+
+    'data_report_hours_questions' => $reports->questions_report_metereflexion(),
+
+    //other
+    'pages' => $configweeks->get_weeks_paginator(),
+    'profile_render' => $reports->render_has(),
+    //'groups' => local_notemyprogress_get_groups($course, $USER),
+
+    'image_no_data' => "{$CFG->wwwroot}/local/notemyprogress/img/empty_char.png",
+    'calendar_icon' => "{$CFG->wwwroot}/local/notemyprogress/img/calendar.png",
+    'inverted_time_colors' => array('#118AB2', '#118AB2', '#06D6A0'),
+    'sessions_count_colors' => array('#FFD166', '#06D6A0', '#118AB2'),
+    //'students_planification' => $reports->students_planification_summary(),
+    
+    //Classroom UNUSED
+    'data_report_classroom' => $reports->classroom_report_metareflexion(),
+    'data_report_of_classroom' => $reports->classroom_report_metareflexion(),
+    'report_last_week' => $reports->report_last_week(),
+];
+//debug_text::print("reports",$reports->status_planning());
+//if (!has_capability('local/notemyprogress:view_as_teacher', $context)) {
+$teacher = new \local_notemyprogress\teacher($COURSE->id, $USER->id);
+$content['course_report_hours'] = $teacher->hours_report_metereflexion();
+//}
+$PAGE->requires->js_call_amd('local_notemyprogress/metareflexion', 'init', ['content' => $content]);
+
+echo $OUTPUT->header();
+echo $OUTPUT->render_from_template('local_notemyprogress/metareflexion', ['content' => $content]);
+echo $OUTPUT->footer();
diff --git a/notemyprogress/notes.php b/notemyprogress/notes.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab0dedff439690a06a1de61add3032072529aa5c
--- /dev/null
+++ b/notemyprogress/notes.php
@@ -0,0 +1,50 @@
+<?php
+global $COURSE, $USER;
+require_once('locallib.php');
+
+$courseid = required_param('courseid', PARAM_INT);
+$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
+
+$context = context_course::instance($course->id);
+require_capability('local/student_reports:usepluggin', $context);
+
+$url = '/local/student_reports/notes.php';
+local_sr_set_page($course, $url);
+
+$notes = new local_student_reports_notes($COURSE, $USER->id);
+
+$content = [
+    'strings' => array(
+        'title_notes' => get_string('notes_title_notes', 'local_notemyprogress'),
+        'notes_description' => get_string('notes_description', 'local_notemyprogress'),
+        'btn_notes' => get_string('notes_btn_notes', 'local_notemyprogress'),
+        'btn_note_new' => get_string('notes_btn_new',  'local_notemyprogress'),
+        'btn_note_update' => get_string('notes_btn_update',  'local_notemyprogress'),
+        'btn_note_delete' => get_string('notes_btn_delete',  'local_notemyprogress'),
+        'string_note_new' => get_string('notes_string_new',  'local_notemyprogress'),
+        'string_note_update' => get_string('notes_string_update',  'local_notemyprogress'),
+        'title' => get_string('notes_placeholder_title',  'local_notemyprogress'),
+        'search' => get_string('notes_placeholder_search',  'local_notemyprogress'),
+        'writenote' => get_string('notes_placeholder_note',  'local_notemyprogress'),
+        'savenote' => get_string('notes_save_success',  'local_notemyprogress'),
+        'saveerror' => get_string('api_error_network',  'local_notemyprogress'),
+        'created' => get_string('notes_created',  'local_notemyprogress'),
+        'notes_not_found' => get_string('notes_not_found',  'local_notemyprogress'),
+        "helplabel" => get_string("helplabel", 'local_notemyprogress'),
+        "exitbutton" => get_string("exitbutton", 'local_notemyprogress'),
+        "note_created" => get_string("notes_message_created", 'local_notemyprogress'),
+        "note_not_created" => get_string("notes_message_not_created", 'local_notemyprogress'),
+        "note_deleted" => get_string("notes_message_deleted", 'local_notemyprogress'),
+        "note_not_deleted" => get_string("notes_message_not_deleted", 'local_notemyprogress'),
+        "note_updated" => get_string("notes_message_updated", 'local_notemyprogress'),
+        "note_not_updated" => get_string("notes_message_not_updated", 'local_notemyprogress'),
+    ),
+    'notes' => $notes->get_notes(),
+    'courseid' => $courseid,
+    'userid' => $USER->id,
+];
+$PAGE->requires->js_call_amd('local_student_reports/notes', 'init', ['content' => $content]);
+
+echo $OUTPUT->header();
+echo $OUTPUT->render_from_template('local_student_reports/notes', ['content' => $content]);
+echo $OUTPUT->footer();
diff --git a/notemyprogress/server/vendor/composer/package-versions-deprecated/src/PackageVersions/Installer.php b/notemyprogress/server/vendor/composer/package-versions-deprecated/src/PackageVersions/Installer.php
index c0853c1614c21128154c5db7b6446cbe2aa0ebe2..00dec6120e3eb6d01e8a877650e7f61a313bfbba 100644
--- a/notemyprogress/server/vendor/composer/package-versions-deprecated/src/PackageVersions/Installer.php
+++ b/notemyprogress/server/vendor/composer/package-versions-deprecated/src/PackageVersions/Installer.php
@@ -23,7 +23,7 @@ use function array_merge;
 use function chmod;
 use function dirname;
 use function file_exists;
-use function file_put_contents;
+use function //file_put_contents;
 use function is_writable;
 use function iterator_to_array;
 use function rename;
@@ -149,7 +149,7 @@ PHP;
         $rootPackage = $composer->getPackage();
         $versions    = iterator_to_array(self::getVersions($composer->getLocker(), $rootPackage));
 
-        if (! array_key_exists('composer/package-versions-deprecated', $versions)) {
+        if (!array_key_exists('composer/package-versions-deprecated', $versions)) {
             //plugin must be globally installed - we only want to generate versions for projects which specifically
             //require composer/package-versions-deprecated
             return;
@@ -182,13 +182,13 @@ PHP;
             . '/src/PackageVersions/Versions.php';
 
         $installDir = dirname($installPath);
-        if (! file_exists($installDir)) {
+        if (!file_exists($installDir)) {
             $io->write('<info>composer/package-versions-deprecated:</info> Package not found (probably scheduled for removal); generation of version class skipped.');
 
             return;
         }
 
-        if (! is_writable($installDir)) {
+        if (!is_writable($installDir)) {
             $io->write(
                 sprintf(
                     '<info>composer/package-versions-deprecated:</info> %s is not writable; generation of version class skipped.',
@@ -202,7 +202,7 @@ PHP;
         $io->write('<info>composer/package-versions-deprecated:</info> Generating version class...');
 
         $installPathTmp = $installPath . '_' . uniqid('tmp', true);
-        file_put_contents($installPathTmp, $versionClassSource);
+        //file_put_contents($installPathTmp, $versionClassSource);
         chmod($installPathTmp, 0664);
         rename($installPathTmp, $installPath);
 
@@ -250,8 +250,7 @@ PHP;
             $packages = array_merge($packages, $lockData['packages-dev']);
         }
         foreach ($packages as $package) {
-            yield $package['name'] => $package['version'] . '@' . (
-                $package['source']['reference'] ?? $package['dist']['reference'] ?? ''
+            yield $package['name'] => $package['version'] . '@' . ($package['source']['reference'] ?? $package['dist']['reference'] ?? ''
             );
         }
 
diff --git a/notemyprogress/sessions.php b/notemyprogress/sessions.php
index f82272dbcf4bf9ee9b104a173ee1ed63bde31106..ee60fe6cacafe0c226119d9fcd64279993eea61f 100644
--- a/notemyprogress/sessions.php
+++ b/notemyprogress/sessions.php
@@ -43,13 +43,13 @@ $logs->addLogsNMP("viewed", "section", "TEACHER_STUDY_SESSIONS", "study_sessions
 $reports = new \local_notemyprogress\teacher($COURSE->id, $USER->id);
 
 $configweeks = new \local_notemyprogress\configweeks($COURSE, $USER);
-if(!$configweeks->is_set()){
+if (!$configweeks->is_set()) {
     $message = get_string("weeks_not_config", "local_notemyprogress");
     print_error($message);
 }
 
 $content = [
-    'strings' =>[
+    'strings' => [
         "section_help_title" => get_string("ts_section_help_title", "local_notemyprogress"),
         "section_help_description" => get_string("ts_section_help_description", "local_notemyprogress"),
         "inverted_time_help_title" => get_string("ts_inverted_time_help_title", "local_notemyprogress"),
@@ -134,19 +134,19 @@ $content = [
         "ss_change_timezone" => get_string("ss_change_timezone", "local_notemyprogress"),
         "graph_generating" => get_string("graph_generating", "local_notemyprogress"),
         "api_error_network" => get_string("api_error_network", "local_notemyprogress"),
-        "pagination_name" => get_string("pagination_component_name","local_notemyprogress"),
-        "pagination_separator" => get_string("pagination_component_to","local_notemyprogress"),
-        "pagination_title" => get_string("pagination_title","local_notemyprogress"),
-        "helplabel" => get_string("helplabel","local_notemyprogress"),
-        "exitbutton" => get_string("exitbutton","local_notemyprogress"),
+        "pagination_name" => get_string("pagination_component_name", "local_notemyprogress"),
+        "pagination_separator" => get_string("pagination_component_to", "local_notemyprogress"),
+        "pagination_title" => get_string("pagination_title", "local_notemyprogress"),
+        "helplabel" => get_string("helplabel", "local_notemyprogress"),
+        "exitbutton" => get_string("exitbutton", "local_notemyprogress"),
 
-        "session_text" => get_string("fml_session_text","local_notemyprogress"),
-        "sessions_text" => get_string("fml_sessions_text","local_notemyprogress"),
+        "session_text" => get_string("fml_session_text", "local_notemyprogress"),
+        "sessions_text" => get_string("fml_sessions_text", "local_notemyprogress"),
 
-        "time_inverted_title" => get_string("fml_time_inverted_title","local_notemyprogress"),
-        "time_inverted_x_axis" => get_string("fml_time_inverted_x_axis","local_notemyprogress"),
-        "inverted_time" => get_string("fml_inverted_time","local_notemyprogress"),
-        "expected_time" => get_string("fml_expected_time","local_notemyprogress"),
+        "time_inverted_title" => get_string("fml_time_inverted_title", "local_notemyprogress"),
+        "time_inverted_x_axis" => get_string("fml_time_inverted_x_axis", "local_notemyprogress"),
+        "inverted_time" => get_string("fml_inverted_time", "local_notemyprogress"),
+        "expected_time" => get_string("fml_expected_time", "local_notemyprogress"),
 
         "hours_short" => get_string("fml_hours_short", "local_notemyprogress"),
         "minutes_short" => get_string("fml_minutes_short", "local_notemyprogress"),
@@ -164,7 +164,7 @@ $content = [
     'timezone' => $reports->timezone,
 ];
 
-$PAGE->requires->js_call_amd('local_notemyprogress/sessions','init', ['content' => $content]);
+$PAGE->requires->js_call_amd('local_notemyprogress/sessions', 'init', ['content' => $content]);
 echo $OUTPUT->header();
 echo $OUTPUT->render_from_template('local_notemyprogress/sessions', ['content' => $content]);
-echo $OUTPUT->footer();
\ No newline at end of file
+echo $OUTPUT->footer();
diff --git a/notemyprogress/student_planning.php b/notemyprogress/student_planning.php
new file mode 100644
index 0000000000000000000000000000000000000000..3f9addeac3ed4e775eeec62f44cf192fb078bd65
--- /dev/null
+++ b/notemyprogress/student_planning.php
@@ -0,0 +1,198 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * local notemyprogress
+ *
+ * @package     local_notemyprogress
+ * @copyright   2020 Edisson Sigua <edissonf.sigua@gmail.com>, Bryan Aguilar <bryan.aguilar6174@gmail.com>
+ * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+require_once('locallib.php');
+global $COURSE, $USER;
+
+$courseid = required_param('courseid', PARAM_INT);
+$course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST);
+$context = context_course::instance($course->id);
+
+$url = '/local/notemyprogress/student_sessions.php';
+local_notemyprogress_set_page($course, $url);
+
+require_capability('local/notemyprogress:usepluggin', $context);
+require_capability('local/notemyprogress:view_as_student', $context);
+require_capability('local/notemyprogress:student_sessions', $context);
+
+if (is_siteadmin()) {
+    print_error(get_string("only_student", "local_notemyprogress"));
+}
+
+$actualLink = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
+
+$logs = new \local_notemyprogress\logs($COURSE->id, $USER->id);
+$logs->addLogsNMP("viewed", "section", "STUDENT_STUDY_SESSIONS", "student_study_sessions", $actualLink, "Section where you can consult various indicators on the study sessions carried out by the student");
+
+$reports = new \local_notemyprogress\student($COURSE->id, $USER->id);
+
+$configweeks = new \local_notemyprogress\configweeks($COURSE, $USER);
+if (!$configweeks->is_set()) {
+    $message = get_string("weeks_not_config", "local_notemyprogress");
+    print_error($message);
+}
+
+$content = [
+    'strings' => [
+        "section_help_title" => get_string("ss_section_help_title", "local_notemyprogress"),
+        "section_help_description" => get_string("ss_section_help_description", "local_notemyprogress"),
+        "inverted_time_help_title" => get_string("ss_inverted_time_help_title", "local_notemyprogress"),
+        "inverted_time_help_description_p1" => get_string("ss_inverted_time_help_description_p1", "local_notemyprogress"),
+        "inverted_time_help_description_p2" => get_string("ss_inverted_time_help_description_p2", "local_notemyprogress"),
+        "hours_session_help_title" => get_string("ss_hours_session_help_title", "local_notemyprogress"),
+        "hours_session_help_description_p1" => get_string("ss_hours_session_help_description_p1", "local_notemyprogress"),
+        "hours_session_help_description_p2" => get_string("ss_hours_session_help_description_p2", "local_notemyprogress"),
+        "resources_access_help_title" => get_string("ss_resources_access_help_title", "local_notemyprogress"),
+        "resources_access_help_description_p1" => get_string("ss_resources_access_help_description_p1", "local_notemyprogress"),
+        "resources_access_help_description_p2" => get_string("ss_resources_access_help_description_p2", "local_notemyprogress"),
+        "resources_access_help_description_p3" => get_string("ss_resources_access_help_description_p3", "local_notemyprogress"),
+
+        "title" => get_string("fml_title", "local_notemyprogress"),
+        "chart" => $reports->get_chart_langs(),
+        "days" => array(
+            get_string("fml_mon_short", "local_notemyprogress"),
+            get_string("fml_tue_short", "local_notemyprogress"),
+            get_string("fml_wed_short", "local_notemyprogress"),
+            get_string("fml_thu_short", "local_notemyprogress"),
+            get_string("fml_fri_short", "local_notemyprogress"),
+            get_string("fml_sat_short", "local_notemyprogress"),
+            get_string("fml_sun_short", "local_notemyprogress"),
+        ),
+        "hours" => array(
+            get_string("fml_00", "local_notemyprogress"),
+            get_string("fml_01", "local_notemyprogress"),
+            get_string("fml_02", "local_notemyprogress"),
+            get_string("fml_03", "local_notemyprogress"),
+            get_string("fml_04", "local_notemyprogress"),
+            get_string("fml_05", "local_notemyprogress"),
+            get_string("fml_06", "local_notemyprogress"),
+            get_string("fml_07", "local_notemyprogress"),
+            get_string("fml_08", "local_notemyprogress"),
+            get_string("fml_09", "local_notemyprogress"),
+            get_string("fml_10", "local_notemyprogress"),
+            get_string("fml_11", "local_notemyprogress"),
+            get_string("fml_12", "local_notemyprogress"),
+            get_string("fml_13", "local_notemyprogress"),
+            get_string("fml_14", "local_notemyprogress"),
+            get_string("fml_15", "local_notemyprogress"),
+            get_string("fml_16", "local_notemyprogress"),
+            get_string("fml_17", "local_notemyprogress"),
+            get_string("fml_18", "local_notemyprogress"),
+            get_string("fml_19", "local_notemyprogress"),
+            get_string("fml_20", "local_notemyprogress"),
+            get_string("fml_21", "local_notemyprogress"),
+            get_string("fml_22", "local_notemyprogress"),
+            get_string("fml_23", "local_notemyprogress"),
+        ),
+        "modules_names" => array(
+            "assign" => get_string("fml_assign", "local_notemyprogress"),
+            "assignment" => get_string("fml_assignment", "local_notemyprogress"),
+            "attendance" => get_string("fml_attendance", "local_notemyprogress"),
+            "book" => get_string("fml_book", "local_notemyprogress"),
+            "chat" => get_string("fml_chat", "local_notemyprogress"),
+            "choice" => get_string("fml_choice", "local_notemyprogress"),
+            "data" => get_string("fml_data", "local_notemyprogress"),
+            "feedback" => get_string("fml_feedback", "local_notemyprogress"),
+            "folder" => get_string("fml_folder", "local_notemyprogress"),
+            "forum" => get_string("fml_forum", "local_notemyprogress"),
+            "glossary" => get_string("fml_glossary", "local_notemyprogress"),
+            "h5pactivity" => get_string("fml_h5pactivity", "local_notemyprogress"),
+            "imscp" => get_string("fml_imscp", "local_notemyprogress"),
+            "label" => get_string("fml_label", "local_notemyprogress"),
+            "lesson" => get_string("fml_lesson", "local_notemyprogress"),
+            "lti" => get_string("fml_lti", "local_notemyprogress"),
+            "page" => get_string("fml_page", "local_notemyprogress"),
+            "quiz" => get_string("fml_quiz", "local_notemyprogress"),
+            "resource" => get_string("fml_resource", "local_notemyprogress"),
+            "scorm" => get_string("fml_scorm", "local_notemyprogress"),
+            "survey" => get_string("fml_survey", "local_notemyprogress"),
+            "url" => get_string("fml_url", "local_notemyprogress"),
+            "wiki" => get_string("fml_wiki", "local_notemyprogress"),
+            "workshop" => get_string("fml_workshop", "local_notemyprogress"),
+        ),
+        "modules_strings" => array(
+            "title" => get_string("fml_modules_access_chart_title", "local_notemyprogress"),
+            "modules_no_viewed" => get_string("fml_modules_no_viewed", "local_notemyprogress"),
+            "modules_viewed" => get_string("fml_modules_viewed", "local_notemyprogress"),
+            "modules_complete" => get_string("fml_modules_complete", "local_notemyprogress"),
+            "close_button" => get_string("fml_close_button", "local_notemyprogress"),
+            "modules_interaction" => get_string("fml_modules_interaction", "local_notemyprogress"),
+            "modules_interactions" => get_string("fml_modules_interactions", "local_notemyprogress"),
+        ),
+        "no_data" => get_string("no_data", "local_notemyprogress"),
+        "pagination" => get_string("pagination", "local_notemyprogress"),
+        "ss_change_timezone" => get_string("ss_change_timezone", "local_notemyprogress"),
+        "graph_generating" => get_string("graph_generating", "local_notemyprogress"),
+        "api_error_network" => get_string("api_error_network", "local_notemyprogress"),
+        "pagination_name" => get_string("pagination_component_name", "local_notemyprogress"),
+        "pagination_separator" => get_string("pagination_component_to", "local_notemyprogress"),
+        "pagination_title" => get_string("pagination_title", "local_notemyprogress"),
+        "helplabel" => get_string("helplabel", "local_notemyprogress"),
+        "exitbutton" => get_string("exitbutton", "local_notemyprogress"),
+        "about" => get_string("fml_about", "local_notemyprogress"),
+
+        "inverted_time_chart_title" => get_string("fml_student_time_inverted_title", "local_notemyprogress"),
+        "inverted_time_chart_x_axis" => get_string("fml_student_time_inverted_x_axis", "local_notemyprogress"),
+        "inverted_time" => get_string("fml_student_inverted_time", "local_notemyprogress"),
+        "expected_time" => get_string("fml_student_expected_time", "local_notemyprogress"),
+
+        "resource_access_title" => get_string("fml_resource_access_title", "local_notemyprogress"),
+        "resource_access_x_axis" => get_string("fml_resource_access_x_axis", "local_notemyprogress"),
+        "resource_access_y_axis" => get_string("fml_resource_access_y_axis", "local_notemyprogress"),
+        "resource_access_legend1" => get_string("fml_resource_access_legend1", "local_notemyprogress"),
+        "resource_access_legend2" => get_string("fml_resource_access_legend2", "local_notemyprogress"),
+
+        "hours_sessions_title" => get_string("fml_hours_sessions_title", "local_notemyprogress"),
+        "week_progress_title" => get_string("fml_week_progress_title", "local_notemyprogress"),
+
+        "session_text" => get_string("fml_session_text", "local_notemyprogress"),
+        "sessions_text" => get_string("fml_sessions_text", "local_notemyprogress"),
+        "modules_details" => get_string("fml_modules_details", "local_notemyprogress"),
+
+        "hours_short" => get_string("fml_hours_short", "local_notemyprogress"),
+        "minutes_short" => get_string("fml_minutes_short", "local_notemyprogress"),
+        "seconds_short" => get_string("fml_seconds_short", "local_notemyprogress"),
+
+        "modules_access_chart_title" => get_string("fml_modules_access_chart_title", "local_notemyprogress"),
+        "modules_viewed" => get_string("fml_modules_viewed", "local_notemyprogress"),
+        "modules_no_viewed" => get_string("fml_modules_no_viewed", "local_notemyprogress"),
+        "modules_complete" => get_string("fml_modules_complete", "local_notemyprogress"),
+        "modules_interaction" => get_string("fml_modules_interaction", "local_notemyprogress"),
+        "modules_interactions" => get_string("fml_modules_interactions", "local_notemyprogress"),
+        "close_button" => get_string("fml_close_button", "local_notemyprogress"),
+    ],
+    'resources_access_colors' => array('#06D6A0', '#FFD166', '#EF476F'),
+    'inverted_time_colors' => array('#118AB2', '#06D6A0'),
+    'courseid' => $COURSE->id,
+    'userid' => $USER->id,
+    'indicators' => $reports->get_sessions(),
+    'pages' => $configweeks->get_weeks_paginator(),
+    'profile_render' => $reports->render_has(),
+    'timezone' => $reports->timezone,
+];
+
+$PAGE->requires->js_call_amd('local_notemyprogress/student_planning', 'init', ['content' => $content]);
+echo $OUTPUT->header();
+echo $OUTPUT->render_from_template('local_notemyprogress/student_planning', ['content' => $content]);
+echo $OUTPUT->footer();
diff --git a/notemyprogress/templates/gamification.mustache b/notemyprogress/templates/gamification.mustache
index c40a8ac215b5265c43df7a50cc3a46dba30f9185..da85c84fce866f04f705a2d0b10c88f44435ba57 100644
--- a/notemyprogress/templates/gamification.mustache
+++ b/notemyprogress/templates/gamification.mustache
@@ -242,6 +242,7 @@
                                 </v-col>
                             </v-row>
                             <v-row>
+                            <v-card elevation = 2 id="SpreadChart">
                                 <chart
                                     :container="'week_resourcess'"
                                     :chart="chart_spread()"
diff --git a/notemyprogress/templates/metareflexion.mustache b/notemyprogress/templates/metareflexion.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..1e2a0e6fae126945a9525f0f0abbc42688ff9bea
--- /dev/null
+++ b/notemyprogress/templates/metareflexion.mustache
@@ -0,0 +1,205 @@
+<div id="sr-loader">
+  <div class="progress-student-reports">
+    <div class="indeterminate"></div>
+  </div>
+</div>
+
+<v-app id="metareflexion" class="pa-2">
+  <v-content>
+    <pageheader :pagetitle="get_title_content()" :helptitle="strings.helplabel" :exitbutton="strings.exitbutton" :helpcontents="get_help_content()" :groups="groups" :courseid="courseid" :userid="userid"></pageheader>
+      <v-container pa-0>
+        <v-tabs background-color="rgba(0, 133, 195, 0.8)" centered dark v-model="active_tab">
+          <template v-for="(tab_header,indice, key) in tabs_header">
+            <v-tab @click="updated_metareflexion" v-text="tab_header.name" :key="tab_header.id" ></v-tab>
+          </template>
+          
+          <v-tab-item v-if="must_renderize(tabs_header[0])">
+            <v-container pa-8>
+
+              <v-row cols="12" class="justify-center">
+                      <span v-html="planned_week_summary()"></span>
+                      <img :src="icons.calendar" height="25" width="25" class="ml-4 custom-icon-opacity" />           
+              </v-row>
+
+                <span class="ml-2 d-flex" v-text="strings.title_hours_plan"></span>
+                <v-card-text> 
+                    <span class="ml-2 d-flex" v-text="strings.currentweek_dialog_hoursdedicate"></span>
+                    <v-text-field :disabled="disabled_form" class="max_width_input" type="number" min="0" max="24" v-model="current_week[0].weekly_schedules_hours.horas_planificadas" outlined placeholder="0"></v-text-field>
+                </v-card-text>
+
+                <v-divider></v-divider>
+
+                <span class="ml-2 d-flex" v-text="strings.goals_title"></span>
+                <v-card-text>
+                  <span class="ml-2 d-flex" v-text="strings.currentweek_card_goalsdedicate"></span>
+                  <v-row v-for="(goal,index,key) in current_week[0].goals_categories" :key="key">
+                    <v-col sm="8" offset-sm="2" class="pa-0">
+                        <v-layout column>
+                            <v-checkbox :input-value="get_goal(goal.id)" :label="goal.description"  @change="update_goal(goal.id,$event)"></v-checkbox>
+                        </v-layout>
+                      </v-col>
+                  </v-row>
+                </v-card-text>
+
+                <v-divider></v-divider>
+
+                <span class="ml-2 d-flex" v-text="strings.currentweek_table_title"></span>
+                <v-card-text>
+                  <span class="ml-2 d-flex" v-text="strings.currentweek_dialog_daysdedicate"></span>
+                  <v-row cols="12" md="6">
+                    <v-layout>
+                      <template>
+                        <v-simple-table class="resource_list_week">
+                          <template v-slot:default>
+                            <thead>
+                              <tr>
+                                <th class="text-left" v-text="strings.currentweek_table_thead_activity"></th>
+                                <th class="text-left" v-text="strings.currentweek_day_lun"></th>
+                                <th class="text-left" v-text="strings.currentweek_day_mar"></th>
+                                <th class="text-left" v-text="strings.currentweek_day_mie"></th>
+                                <th class="text-left" v-text="strings.currentweek_day_jue"></th>
+                                <th class="text-left" v-text="strings.currentweek_day_vie"></th>
+                                <th class="text-left" v-text="strings.currentweek_day_sab"></th>
+                                <th class="text-left" v-text="strings.currentweek_day_dom"></th>
+                              </tr>
+                            </thead>
+                            <tbody>
+                                <tr v-for="(cm,index,key) in current_week[0].weekly_cm" :key="key">
+                                  <td v-text="cm.name"></td>
+                                  <td><v-checkbox :input-value= "get_modules('monday',cm.id)" @change="update_module('monday',cm.id,$event)"></v-checkbox></td>
+                                  <td><v-checkbox :input-value= "get_modules('tuesday',cm.id)" @change="update_module('tuesday',cm.id,$event)"></v-checkbox></td>
+                                  <td><v-checkbox :input-value= "get_modules('wednesday',cm.id)" @change="update_module('wednesday',cm.id,$event)"></v-checkbox></td>
+                                  <td><v-checkbox :input-value= "get_modules('thursday',cm.id)" @change="update_module('thursday',cm.id,$event)"></v-checkbox></td>
+                                  <td><v-checkbox :input-value= "get_modules('friday',cm.id)" @change="update_module('friday',cm.id,$event)"></v-checkbox></td>
+                                  <td><v-checkbox :input-value= "get_modules('saturday',cm.id)" @change="update_module('saturday',cm.id,$event)"></v-checkbox></td>
+                                  <td><v-checkbox :input-value= "get_modules('sunday',cm.id)" @change="update_module('sunday',cm.id,$event)"></v-checkbox></td>
+                                </tr>
+                            </tbody>
+                          </template>
+                        </v-simple-table>
+                      </template>
+                  </v-row>
+                </v-card-text>
+
+                <v-divider></v-divider>
+
+                <v-layout column justify-center>
+                  <v-flex d-flex justify-center>
+                    <v-btn class="sr-btn-primary" @click="action_save_metareflexion(current_week[0])" v-text="strings.currentweek_dialog_btn_accept"></v-btn>
+                  </v-flex>
+                </v-layout>
+              </v-layout>
+            </v-container pa-8>
+          </v-tab-item>
+
+          <v-tab-item v-if="must_renderize(tabs_header[1])">
+            <v-container pa-8>
+            <v-row v-if="loading">
+              <span class="mb-1 mt-5 body-1" v-text="strings.graph_generating"></span>
+              <v-progress-linear indeterminate color="cyan"></v-progress-linear>
+            </v-row>
+
+            <pagination :pages="pages" :name="strings.pagination_name" :nameseparator="strings.pagination_separator" @changepage="get_interaction_group" :title="strings.pagination_title"></pagination>
+                <v-card elevation="2">
+                    <v-card-title class="justify-center"><h5 v-text="subtitle_reports_hours_label()"></h5></v-card-title>
+                      <v-card id="EfficiencyChart">
+                        <chart
+                          :container="'invested_time'"
+                          :chart="build_inverted_time_chart()"
+                          :lang="strings.chart"
+                        ></chart>
+                      </v-card>
+                </v-card>
+
+              <v-divider></v-divider>
+
+              <v-card elevation="2">
+                <v-card-title class="justify-center"><h5 v-text="strings.goals_reflexion_title"></h5></v-card-title>
+                <v-card-text>
+                  <v-row v-for="(goal,index,key) in current_week[0].goals_categories" :key="key">
+                    <v-col sm="8" offset-sm="2" class="pa-0">
+                        <v-layout column>
+                            <span v-if ="get_goal(goal.id)" v-text="goal.description"></span>
+                        </v-layout>
+                      </v-col>
+                  </v-row>
+                </v-card-text>
+              </v-card>
+
+              <v-divider></v-divider>
+
+              <v-card elevation="2">
+                <v-card-title class="justify-center"><h5 v-text="subtitle_reports_days_student_label()"></h5></v-card-title>
+                <v-card-text>
+                <v-layout>
+                  <v-flex class="d-flex justify-center align-center pa-4 graphic-legend">
+                    <v-icon class="mr-2" :color="'#9F9F9F'">remove</v-icon>
+                    <span class="mr-5" v-text="strings.effectiveness_graphic_legend_unplanned"></span>
+                    <v-icon class="mr-2" :color="'#646466'">mdi-view-list</v-icon>
+                    <span class="mr-5" v-text="strings.effectiveness_graphic_legend_pending"></span>
+                    <v-icon class="mr-2" :color="'#8AC149'">mdi-thumb-up-outline</v-icon>
+                    <span class="mr-5" v-text="strings.effectiveness_graphic_legend_completed"></span>
+                    <v-icon class="mr-2" :color="'#F78A7F'">mdi-mdi-thumb-down-outline</v-icon>
+                    <span v-text="strings.effectiveness_graphic_legend_failed"></span>
+                  </v-flex>
+                </v-layout>
+                <v-layout wrap>
+                  <template v-for="(day, indice, key) in days_week">
+                    <v-flex class="ma-1">
+                      <v-layout class="day-default-head justify-center pt-2 pb-2" v-text="day"></v-layout>
+                      <v-layout class="day-default-body justify-center mt-1 pa-6">
+                        <v-icon v-if="status_planning[indice] == 'unplanned'" :color="'#9F9F9F'" size="30px">remove</v-icon>
+                        <v-icon v-if="status_planning[indice] == 'pending'" :color="'#9F9F9F'" size="30px">mdi-view-list</v-icon>
+                        <v-icon v-if="status_planning[indice] == 'completed'" color="#8AC149" size="30px">mdi-thumb-up-outline</v-icon>
+                        <v-icon v-if="status_planning[indice] == 'failed'" :color="'#F78A7F'" size="30px">mdi-mdi-thumb-down-outline</v-icon>
+                      </v-layout>
+                    </v-flex>
+                  </template>
+                </v-layout>
+              </v-card-text>
+              </v-card>
+              
+              <v-card elevation="2">
+                <v-card-title class="justify-center"><h5 v-text="strings.title_retrospective"></h5></v-card-title>
+                <v-card-text>
+                  <v-row class="pa-0">
+                    <v-col sm="8" offset-sm="2" class="d-flex justify-start align-center hide-input-details pa-0 mb-2">
+                      <v-text-field :disabled="isDisabledQuestions" class="max_width_input" type="number" min="0" max="24" v-model="data_report_meta_questions.classroom_hours" outlined placeholder="0"></v-text-field>
+                      <span class="ml-2 d-flex" v-text="strings.pastweek_classroom_hours"></span>
+                    </v-col>
+                  </v-row>
+                  <v-row class="pa-0">
+                    <v-col sm="8" offset-sm="2" class="d-flex justify-start align-center hide-input-details pa-0">
+                      <v-text-field :disabled="isDisabledQuestions" type="number" min="0" max="24" v-model="data_report_meta_questions.hours_off_course" outlined placeholder="0" class="max_width_input" height="20"></v-text-field>
+                      <span class="ml-2 d-flex" v-text="strings.pastweek_hours_off_course"></span>
+                    </v-col>
+                  </v-row>
+
+                  <v-row v-for="(past_week_question,index,key) in data_report_meta_questions.questions" :key="key">
+                      <v-col sm="8" offset-sm="2" class="pa-0">
+                        <v-layout column>
+                          <span class="justify-center seleccion_semana_pasada full-width" v-text="past_week_question.enunciated"></span>
+                          <v-flex>
+                            <v-alert outlined class="seleccion_semana_pasada">
+                              <v-radio-group :disabled="isDisabledQuestions" v-model="past_week_question.answer_selected">
+                                <v-radio :label="past_week_question_answer.enunciated" v-for="(past_week_question_answer,index,key) in past_week_question.answers" :key="key" :value="past_week_question_answer.id"></v-radio>
+                              </v-radio-group>
+                            </v-alert>
+                          </v-flex>
+                        </v-layout>
+                      </v-col>
+                  </v-row>
+              </v-card-text>
+              </v-card>
+
+                <v-divider></v-divider>
+
+            <v-layout justify-center>
+              <v-btn :disabled="isDisabledBtnLastWeek" class="sr-btn-primary" @click="actions_last_week()" v-text="strings.pastweek_btn_save"></v-btn>
+            </v-layout>
+            </v-container pa-8>
+          </v-tab-item>
+        </v-tabs>
+      </v-container>
+  </v-content>
+</v-app>
\ No newline at end of file
diff --git a/notemyprogress/templates/sessions.mustache b/notemyprogress/templates/sessions.mustache
index fdba574526127df7ea15a04d990f978e475e7565..231a9da9b193c34a365e733eea3bf932023007f2 100644
--- a/notemyprogress/templates/sessions.mustache
+++ b/notemyprogress/templates/sessions.mustache
@@ -6,8 +6,8 @@
 
 <v-app id="work_sessions" class="notemyprogress">
     <v-main>
-        <pageheader :pagetitle="strings.title" :helptitle="strings.helplabel" :exitbutton="strings.exitbutton"
-                    :helpcontents="get_help_content()" :groups="groups" :courseid="courseid" :userid="userid"></pageheader>
+        <pageheader :pagetitle="strings.title" :helptitle="strings.helplabel" :exitbutton="strings.exitbutton":helpcontents="get_help_content()" :groups="groups" :courseid="courseid" :userid="userid"></pageheader>
+        
         <v-container pa-8>
             <v-row v-if="loading">
                 <span class="mb-1 mt-5 body-1" v-text="strings.graph_generating"></span>
@@ -33,9 +33,6 @@
                                         :chart="build_inverted_time_chart()"
                                         :lang="strings.chart"
                                 ></chart>
-                                <span id="helpInvestedTime" class="caption" @click="open_chart_help('inverted_time')">
-                                <v-icon small v-text="'mdi-help-circle-outline'"></v-icon>
-                                <span v-text="strings.about"></span>
                             </span>
                             </v-card-text>
                         </v-card>
diff --git a/notemyprogress/templates/student_planning.mustache b/notemyprogress/templates/student_planning.mustache
new file mode 100644
index 0000000000000000000000000000000000000000..03bf0e98e4404631696d0fe9fc29fca495ea7154
--- /dev/null
+++ b/notemyprogress/templates/student_planning.mustache
@@ -0,0 +1,38 @@
+<div id="sessions-loader">
+    <div class="progressbar-notemyprogress">
+        <div class="indeterminate"></div>
+    </div>
+</div>
+
+<v-app id="work_sessions" class="notemyprogress">
+    <v-main>
+        <pageheader :pagetitle="strings.title" :helptitle="strings.helplabel" :exitbutton="strings.exitbutton"
+                    :helpcontents="get_help_content()" :groups="groups" :courseid="courseid" :userid="userid"></pageheader>
+        <v-container pa-8>
+            <v-row v-if="loading">
+                <span class="mb-1 mt-5 body-1" v-text="strings.graph_generating"></span>
+                <v-progress-linear indeterminate color="cyan"></v-progress-linear>
+            </v-row>
+            <div v-else>
+                <v-alert v-if="errors.length > 0" dense outlined type="error" v-text="strings.api_error_network"></v-alert>
+
+                <pagination
+                        :pages="pages" :name="strings.pagination_name" :nameseparator="strings.pagination_separator"
+                        @changepage="update_interactions" :title="strings.pagination_title"></pagination>
+
+                <v-row>
+                    <v-col cols="12" md="6">
+                    <input type="radio" id="one" value="Un" v-model="picked">
+                    <label for="one">Un</label>
+                    <br>
+                    <input type="radio" id="two" value="Deux" v-model="picked">
+                    <label for="two">Deux</label>
+                        <br>
+
+                    </v-col>
+                </v-row>
+            </div>
+
+        </v-container>
+    </v-main>
+</v-app>
\ No newline at end of file
diff --git a/notemyprogress/templates/student_sessions.mustache b/notemyprogress/templates/student_sessions.mustache
index 79e1f6ff70048fe8d184b223bba6f5b600ddf42c..acd2f65ae021ee407f42746d85b5865f02357beb 100644
--- a/notemyprogress/templates/student_sessions.mustache
+++ b/notemyprogress/templates/student_sessions.mustache
@@ -6,8 +6,7 @@
 
 <v-app id="work_sessions" class="notemyprogress">
     <v-main>
-        <pageheader :pagetitle="strings.title" :helptitle="strings.helplabel" :exitbutton="strings.exitbutton"
-                    :helpcontents="get_help_content()" :groups="groups" :courseid="courseid" :userid="userid"></pageheader>
+        <pageheader :pagetitle="strings.title" :helptitle="strings.helplabel" :exitbutton="strings.exitbutton" :helpcontents="get_help_content()" :groups="groups" :courseid="courseid" :userid="userid"></pageheader>
         <v-container pa-8>
             <v-row v-if="loading">
                 <span class="mb-1 mt-5 body-1" v-text="strings.graph_generating"></span>
@@ -48,9 +47,9 @@
                             </v-card-title>
                             <v-card-text>
                                 <chart
-                                        :container="'hour_sessions'"
-                                        :chart="build_hours_session_chart()"
-                                        :lang="strings.chart"
+                                    :container="'hour_sessions'"
+                                    :chart="build_hours_session_chart()"
+                                    :lang="strings.chart"
                                 ></chart>
                                 <span class="caption" @click="open_chart_help('hours_session')">
                                 <v-icon small v-text="'mdi-help-circle-outline'"></v-icon>