diff --git a/.env.example b/.env.example
index 1d258dc..31a79d1 100644
--- a/.env.example
+++ b/.env.example
@@ -27,6 +27,8 @@ APP_CRONPW=null
APP_CRONJOB_MAILLIMIT=5
APP_GITHUB_URL="https://github.com/danielbrendel/hortusfox-web"
APP_SERVICE_URL="https://www.hortusfox.com"
+APP_ENABLEHISTORY=true
+APP_HISTORY_NAME="History"
# Photo resize factors
PHOTO_RESIZE_FACTOR_DEFAULT=1.0
diff --git a/app/config/routes.php b/app/config/routes.php
index 93da11a..520b789 100644
--- a/app/config/routes.php
+++ b/app/config/routes.php
@@ -66,6 +66,9 @@ return [
array('/admin/location/remove', 'ANY', 'admin@remove_location'),
array('/admin/media/logo', 'POST', 'admin@upload_media_logo'),
array('/admin/media/background', 'POST', 'admin@upload_media_background'),
+ array('/history', 'GET', 'index@view_history'),
+ array('/plants/history/add', 'ANY', 'index@add_to_history'),
+ array('/plants/history/remove', 'ANY', 'index@remove_from_history'),
array('/cronjob/overduetasks', 'GET', 'cronjobs@overdue_tasks'),
array('$404', 'ANY', 'error404@index')
];
diff --git a/app/controller/admin.php b/app/controller/admin.php
index edce57b..d3023fd 100644
--- a/app/controller/admin.php
+++ b/app/controller/admin.php
@@ -70,9 +70,11 @@ class AdminController extends BaseController {
$onlinetimelimit = (int)$request->params()->query('onlinetimelimit', env('APP_ONLINEMINUTELIMIT'));
$chatonlineusers = (bool)$request->params()->query('chatonlineusers', 0);
$chattypingindicator = (bool)$request->params()->query('chattypingindicator', 0);
+ $enablehistory = (bool)$request->params()->query('enablehistory', 0);
+ $history_name = $request->params()->query('history_name', env('APP_HISTORY_NAME'));
$cronpw = $request->params()->query('cronpw', env('APP_CRONPW'));
- UtilsModule::saveEnvironment($workspace, $lang, $scroller, $enablechat, $onlinetimelimit, $chatonlineusers, $chattypingindicator, $cronpw);
+ UtilsModule::saveEnvironment($workspace, $lang, $scroller, $enablechat, $onlinetimelimit, $chatonlineusers, $chattypingindicator, $enablehistory, $history_name, $cronpw);
FlashMessage::setMsg('success', __('app.environment_settings_saved'));
diff --git a/app/controller/index.php b/app/controller/index.php
index 577c7d3..5d7ee7b 100644
--- a/app/controller/index.php
+++ b/app/controller/index.php
@@ -449,6 +449,10 @@ class IndexController extends BaseController {
PlantsModel::removePlant($plant);
+ if ($location == 0) {
+ return back();
+ }
+
return redirect('/plants/location/' . $location);
} catch (\Exception $e) {
FlashMessage::setMsg('error', $e->getMessage());
@@ -1118,4 +1122,72 @@ class IndexController extends BaseController {
]);
}
}
+
+ /**
+ * Handles URL: /history
+ *
+ * @param Asatru\Controller\ControllerArg $request
+ * @return Asatru\View\ViewHandler|Asatru\View\RedirectHandler
+ */
+ public function view_history($request)
+ {
+ if (!env('APP_ENABLEHISTORY')) {
+ return redirect('/');
+ }
+
+ $limit = $request->params()->query('limit', null);
+ $sorting = $request->params()->query('sorting', null);
+ $direction = $request->params()->query('direction', null);
+
+ $user = UserModel::getAuthUser();
+
+ $history = PlantsModel::getHistory($limit, $sorting, $direction);
+
+ return parent::view(['content', 'history'], [
+ 'user' => $user,
+ 'history' => $history,
+ 'sorting_types' => PlantsModel::$sorting_list,
+ 'sorting_dirs' => PlantsModel::$sorting_dir
+ ]);
+ }
+
+ /**
+ * Handles URL: /plants/history/add
+ *
+ * @param Asatru\Controller\ControllerArg $request
+ * @return Asatru\View\RedirectHandler
+ */
+ public function add_to_history($request)
+ {
+ try {
+ $plant = $request->params()->query('plant', null);
+
+ PlantsModel::markHistorical($plant);
+
+ return redirect('/history');
+ } catch (\Exception $e) {
+ FlashMessage::setMsg('error', $e->getMessage());
+ return back();
+ }
+ }
+
+ /**
+ * Handles URL: /plants/history/remove
+ *
+ * @param Asatru\Controller\ControllerArg $request
+ * @return Asatru\View\RedirectHandler
+ */
+ public function remove_from_history($request)
+ {
+ try {
+ $plant = $request->params()->query('plant', null);
+
+ PlantsModel::unmarkHistorical($plant);
+
+ return redirect('/history');
+ } catch (\Exception $e) {
+ FlashMessage::setMsg('error', $e->getMessage());
+ return back();
+ }
+ }
}
diff --git a/app/lang/de/app.php b/app/lang/de/app.php
index 38d4cde..62b3f11 100644
--- a/app/lang/de/app.php
+++ b/app/lang/de/app.php
@@ -196,5 +196,11 @@ return [
'admin_media' => 'Medien',
'media_logo' => 'Arbeitsraum Logo (.png image)',
'media_background' => 'Arbeitsraum Hintergrundbild (.jpg)',
- 'media_saved' => 'Das Asset wurde erfolgreich gespeichert'
+ 'media_saved' => 'Das Asset wurde erfolgreich gespeichert',
+ 'enable_history' => 'Historie aktivieren',
+ 'history_name' => 'Name der Historie',
+ 'confirmPlantAddHistory' => 'Bitte diese Anweisung bestätigen.',
+ 'confirmPlantRemoveHistory' => 'Bitte diese Anweisung bestätigen.',
+ 'sorting_type_history_date' => 'Historien-Datum',
+ 'restore_from_history' => 'Wiederherstellen'
];
\ No newline at end of file
diff --git a/app/lang/en/app.php b/app/lang/en/app.php
index a213285..85347d1 100644
--- a/app/lang/en/app.php
+++ b/app/lang/en/app.php
@@ -196,5 +196,11 @@ return [
'admin_media' => 'Media',
'media_logo' => 'Workspace logo (.png image)',
'media_background' => 'Workspace background image (.jpg)',
- 'media_saved' => 'Media was saved successfully'
+ 'media_saved' => 'Media was saved successfully',
+ 'enable_history' => 'Enable history',
+ 'history_name' => 'History name',
+ 'confirmPlantAddHistory' => 'Please confirm this action',
+ 'confirmPlantRemoveHistory' => 'Please confirm this action',
+ 'sorting_type_history_date' => 'History date',
+ 'restore_from_history' => 'Restore'
];
\ No newline at end of file
diff --git a/app/migrations/PlantsModel.php b/app/migrations/PlantsModel.php
index a67721f..63d1c08 100644
--- a/app/migrations/PlantsModel.php
+++ b/app/migrations/PlantsModel.php
@@ -43,6 +43,8 @@ class PlantsModel_Migration {
$this->database->add('light_level VARCHAR(512) NOT NULL');
$this->database->add('health_state VARCHAR(512) NOT NULL DEFAULT \'in_good_standing\'');
$this->database->add('notes TEXT NULL');
+ $this->database->add('history BOOLEAN NOT NULL DEFAULT 0');
+ $this->database->add('history_date TIMESTAMP NULL');
$this->database->add('last_edited_user INT NULL');
$this->database->add('last_edited_date DATETIME NULL');
$this->database->add('created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP');
diff --git a/app/models/PlantsModel.php b/app/models/PlantsModel.php
index d30c095..59fa35a 100644
--- a/app/models/PlantsModel.php
+++ b/app/models/PlantsModel.php
@@ -17,7 +17,8 @@
'health_state',
'perennial',
'light_level',
- 'humidity'
+ 'humidity',
+ 'history_date'
];
static $sorting_dir = [
@@ -68,7 +69,7 @@
static::validateSorting($sorting);
static::validateDirection($direction);
- return static::raw('SELECT * FROM `' . self::tableName() . '` WHERE location = ? ORDER BY ' . $sorting . ' ' . $direction, [$location]);
+ return static::raw('SELECT * FROM `' . self::tableName() . '` WHERE location = ? AND history = 0 ORDER BY ' . $sorting . ' ' . $direction, [$location]);
} catch (\Exception $e) {
throw $e;
}
@@ -115,6 +116,38 @@
}
}
+ /**
+ * @param $limit
+ * @param $sorting
+ * @param $direction
+ * @return mixed
+ * @throws \Exception
+ */
+ public static function getHistory($limit = null, $sorting = null, $direction = null)
+ {
+ try {
+ if ($sorting === null) {
+ $sorting = 'history_date';
+ }
+
+ if ($direction === null) {
+ $direction = 'desc';
+ }
+
+ static::validateSorting($sorting);
+ static::validateDirection($direction);
+
+ $strlimit = '';
+ if ($limit) {
+ $strlimit = ' LIMIT ' . $limit;
+ }
+
+ return static::raw('SELECT * FROM `' . self::tableName() . '` WHERE history = 1 ORDER BY ' . $sorting . ' ' . $direction . $strlimit);
+ } catch (\Exception $e) {
+ throw $e;
+ }
+ }
+
/**
* @param $name
* @param $location
@@ -264,7 +297,7 @@
public static function getCount()
{
try {
- return static::raw('SELECT COUNT(*) as count FROM `' . self::tableName() . '`')->first()->get('count');
+ return static::raw('SELECT COUNT(*) as count FROM `' . self::tableName() . '` WHERE history = 0')->first()->get('count');
} catch (\Exception $e) {
throw $e;
}
@@ -355,6 +388,52 @@
}
}
+ /**
+ * @param $plantId
+ * @return void
+ * @throws \Exception
+ */
+ public static function markHistorical($plantId)
+ {
+ try {
+ $user = UserModel::getAuthUser();
+ if (!$user) {
+ throw new \Exception('Invalid user');
+ }
+
+ $plant = PlantsModel::getDetails($plantId);
+
+ static::raw('UPDATE `' . self::tableName() . '` SET history = 1, history_date = CURRENT_TIMESTAMP WHERE id = ?', [$plantId]);
+
+ LogModel::addLog($user->get('id'), $plant->get('name'), 'mark_historical', '');
+ } catch (\Exception $e) {
+ throw $e;
+ }
+ }
+
+ /**
+ * @param $plantId
+ * @return void
+ * @throws \Exception
+ */
+ public static function unmarkHistorical($plantId)
+ {
+ try {
+ $user = UserModel::getAuthUser();
+ if (!$user) {
+ throw new \Exception('Invalid user');
+ }
+
+ $plant = PlantsModel::getDetails($plantId);
+
+ static::raw('UPDATE `' . self::tableName() . '` SET history = 0, history_date = NULL WHERE id = ?', [$plantId]);
+
+ LogModel::addLog($user->get('id'), $plant->get('name'), 'historical_restore', '');
+ } catch (\Exception $e) {
+ throw $e;
+ }
+ }
+
/**
* @param $plantId
* @return void
diff --git a/app/modules/UtilsModule.php b/app/modules/UtilsModule.php
index 7c3c955..a6cbfec 100644
--- a/app/modules/UtilsModule.php
+++ b/app/modules/UtilsModule.php
@@ -265,10 +265,12 @@ class UtilsModule {
* @param $onlinetimelimit
* @param $chatonlineusers
* @param $chattypingindicator
+ * @param $enablehistory
+ * @param $history_name
* @param $cronpw
* @return void
*/
- public static function saveEnvironment($workspace, $lang, $scroller, $enablechat, $onlinetimelimit, $chatonlineusers, $chattypingindicator, $cronpw)
+ public static function saveEnvironment($workspace, $lang, $scroller, $enablechat, $onlinetimelimit, $chatonlineusers, $chattypingindicator, $enablehistory, $history_name, $cronpw)
{
$new_env_settings = [
'APP_WORKSPACE' => $workspace,
@@ -278,6 +280,8 @@ class UtilsModule {
'APP_ONLINEMINUTELIMIT' => $onlinetimelimit,
'APP_SHOWCHATONLINEUSERS' => $chatonlineusers,
'APP_SHOWCHATTYPINGINDICATOR' => $chattypingindicator,
+ 'APP_ENABLEHISTORY' => $enablehistory,
+ 'APP_HISTORY_NAME' => $history_name,
'APP_CRONPW' => $cronpw
];
diff --git a/app/resources/js/app.js b/app/resources/js/app.js
index 775a34c..b473882 100644
--- a/app/resources/js/app.js
+++ b/app/resources/js/app.js
@@ -44,6 +44,8 @@ window.vue = new Vue({
confirmPlantRemoval: 'Are you sure you want to remove this plant?',
confirmSetAllWatered: 'Are you sure you want to update the last watered date of all these plants?',
confirmInventoryItemRemoval: 'Are you sure you want to remove this item?',
+ confirmPlantAddHistory: 'Please confirm if you want to do this action.',
+ confirmPlantRemoveHistory: 'Please confirm if you want to do this action.',
newChatMessage: 'New',
currentlyOnline: 'Currently online: ',
chatTypingEnable: false,
@@ -196,6 +198,22 @@ window.vue = new Vue({
});
},
+ markHistorical: function(plant) {
+ if (!confirm(window.vue.confirmPlantAddHistory)) {
+ return;
+ }
+
+ location.href = window.location.origin + '/plants/history/add?plant=' + plant;
+ },
+
+ unmarkHistorical: function(plant) {
+ if (!confirm(window.vue.confirmPlantRemoveHistory)) {
+ return;
+ }
+
+ location.href = window.location.origin + '/plants/history/remove?plant=' + plant;
+ },
+
deletePlant: function(plant, retloc)
{
if (!confirm(window.vue.confirmPlantRemoval)) {
@@ -516,5 +534,13 @@ window.vue = new Vue({
}
}
},
+
+ toggleDropdown: function(elem) {
+ if (elem.classList.contains('is-active')) {
+ elem.classList.remove('is-active');
+ } else {
+ elem.classList.add('is-active');
+ }
+ },
}
});
\ No newline at end of file
diff --git a/app/resources/sass/app.scss b/app/resources/sass/app.scss
index fb8a883..6a39697 100644
--- a/app/resources/sass/app.scss
+++ b/app/resources/sass/app.scss
@@ -97,6 +97,10 @@ h2 {
width: 100%;
}
+.is-pointer {
+ cursor: pointer;
+}
+
.float-right {
float: right;
}
@@ -346,13 +350,29 @@ a.navbar-burger:hover {
}
}
-.plant-card-health-state {
+.plant-card-title-with-hint {
+ padding-top: 7px;
+}
+
+.plant-card-title-first {
+}
+
+.plant-card-title-second {
+ color: rgb(150, 150, 150);
+ font-size: 0.8em;
+}
+
+.plant-card-health-state, .plant-card-options {
position: absolute;
top: 7px;
right: 8px;
z-index: 2;
}
+.plant-card-options {
+ color: rgb(200, 200, 200);
+}
+
.plant-card-health-state i {
background-color: rgba(0, 0, 0, 0.5);
padding: 5px;
@@ -1405,4 +1425,4 @@ a.navbar-burger:hover {
.version-info a:hover {
color: rgb(132, 255, 123);
text-decoration: underline;
-}
\ No newline at end of file
+}
diff --git a/app/views/admin.php b/app/views/admin.php
index c55d73e..de91300 100644
--- a/app/views/admin.php
+++ b/app/views/admin.php
@@ -78,6 +78,19 @@
+
+
+ {{ __('app.enable_history') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/app/views/details.php b/app/views/details.php
index 31eb4ba..8feafd0 100644
--- a/app/views/details.php
+++ b/app/views/details.php
@@ -230,7 +230,15 @@
diff --git a/app/views/history.php b/app/views/history.php
new file mode 100644
index 0000000..41ac93d
--- /dev/null
+++ b/app/views/history.php
@@ -0,0 +1,71 @@
+
+
+
+
+
+
{{ env('APP_HISTORY_NAME') }}
+
+
+
+ @include('flashmsg.php')
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @foreach ($history as $plant)
+
+
+
+
+
+
{{ $plant->get('name') }}
+
{{ date('Y-m-d', strtotime($plant->get('history_date'))) }}
+
+
+
+ @endforeach
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/views/layout.php b/app/views/layout.php
index 5433a58..11e7aa5 100644
--- a/app/views/layout.php
+++ b/app/views/layout.php
@@ -780,6 +780,8 @@
window.vue.confirmPhotoRemoval = '{{ __('app.confirmPhotoRemoval') }}';
window.vue.confirmPlantRemoval = '{{ __('app.confirmPlantRemoval') }}';
+ window.vue.confirmPlantAddHistory = '{{ __('app.confirmPlantAddHistory') }}';
+ window.vue.confirmPlantRemoveHistory = '{{ __('app.confirmPlantRemoveHistory') }}';
window.vue.confirmSetAllWatered = '{{ __('app.confirmSetAllWatered') }}';
window.vue.confirmInventoryItemRemoval = '{{ __('app.confirmInventoryItemRemoval') }}';
window.vue.newChatMessage = '{{ __('app.new') }}';
diff --git a/app/views/navbar.php b/app/views/navbar.php
index 8ba7ed0..8e2da0e 100644
--- a/app/views/navbar.php
+++ b/app/views/navbar.php
@@ -54,6 +54,14 @@
@endif
+
+ @if (env('APP_ENABLEHISTORY'))
+
+ @endif
diff --git a/app/views/plants.php b/app/views/plants.php
index a538050..8cb585f 100644
--- a/app/views/plants.php
+++ b/app/views/plants.php
@@ -17,7 +17,9 @@
diff --git a/public/install/index.php b/public/install/index.php
index 360fd8e..77a0457 100644
--- a/public/install/index.php
+++ b/public/install/index.php
@@ -296,6 +296,8 @@
$env .= 'APP_CRONJOB_MAILLIMIT=5' . PHP_EOL;
$env .= 'APP_GITHUB_URL="https://github.com/danielbrendel/hortusfox-web"' . PHP_EOL;
$env .= 'APP_SERVICE_URL="https://www.hortusfox.com"' . PHP_EOL;
+ $env .= 'APP_ENABLEHISTORY=true' . PHP_EOL;
+ $env .= 'APP_HISTORY_NAME="History"' . PHP_EOL;
$env .= '' . PHP_EOL;
$env .= '# Photo resize factors' . PHP_EOL;
$env .= 'PHOTO_RESIZE_FACTOR_DEFAULT=1.0' . PHP_EOL;
diff --git a/public/js/app.js b/public/js/app.js
index 71f2371..0a56e53 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -1 +1 @@
-(()=>{var e={959:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(645),i=n.n(o)()((function(e){return e[1]}));i.push([e.id,"html,body{width:100%;height:100%;padding:0;margin:0;background-color:#0a0a0a}body{overflow-x:hidden}.is-image-container{background-repeat:no-repeat;background-size:cover;padding:unset}.column-overlay{width:100%;height:100%;padding:20px;background-color:rgba(0,0,0,.5)}h1{font-size:2.5em;color:#fafafa}h2{font-size:2em;margin-bottom:30px;color:#c8c8c8}.smaller-headline{font-size:1.2em;margin-bottom:15px}.is-default-link{color:#4f86ca}.is-default-link:hover{color:#4f86ca;text-decoration:underline}.is-yellow-link{color:#9c7343}.is-yellow-link:hover{color:#9c7343;text-decoration:underline}.is-fixed-button-link{position:relative;top:5px}.is-default-text-color{color:#969696}.is-color-darker{color:#646464}.is-input-dark{background-color:rgba(90,90,90,.5);color:#c8c8c8;border:1px solid #646464}.is-action-button-margin{margin-right:10px;margin-bottom:10px}@media screen and (max-width: 376px){.is-action-button-margin{margin-right:15px}}.is-underlined{text-decoration:underline}.is-stretched{width:100%}.float-right{float:right}.navbar-item a{color:#c8c8c8}.navbar-item a:hover{color:#fafafa}a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:hover,.navbar-link.is-active{background-color:rgba(255,255,255,0) !important;color:#b4b4b4 !important}.navbar-item,.navbar-burger,.navbar-link{color:#bebebe}.navbar-dropdown{background-color:#323230;padding-top:unset}.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}@media screen and (max-width: 1087px){.navbar-menu{background-color:#323230}}a.navbar-burger:hover{color:#c8c8c8}@media screen and (min-width: 1088px){.navbar-start{flex-grow:1;justify-content:center}}@media screen and (min-width: 1089px){.navbar-item-only-mobile{display:none}}@media screen and (min-width: 1089px){.navbar-dropdown-minwidth{display:block;top:5px;min-width:135px;text-align:center}}@media screen and (min-width: 1089px){.navbar-dropdown-minwidth:not(.is-multiple):not(.is-loading)::after{top:20px !important}}.notification-badge{color:#fff;text-decoration:none;border-radius:2px}.notification-badge .notify-badge{padding:1px 7px;border-radius:50%;background:red;color:#fff;font-size:.8em}@media screen and (min-width: 1089px){.notification-badge .notify-badge{position:absolute;right:-5px;top:4px}}@media screen and (max-width: 1087px){.notification-badge .notify-badge{position:relative;right:-4px;top:-10px}}.notify-badge .notify-badge-count{position:relative;top:-2px}.locations{text-align:center}.locations a{color:#646464}.locations a:hover{color:#646464}.location{position:relative;display:inline-block;width:250px;height:230px;margin-left:10px;margin-right:10px;margin-bottom:23px;background-color:rgba(159,172,132,.2);border:1px solid #c8c8c8}@media screen and (max-width: 830px){.location{width:134px;height:108px}}.location:hover{background-color:rgba(159,172,132,.35)}.location-title{text-align:center;font-size:2.3em;padding-bottom:4px;margin-bottom:20px;background-color:rgba(115,143,100,.9);color:#c3e4a3}@media screen and (max-width: 830px){.location-title{font-size:1.2em}}@media screen and (min-width: 831px){.location-title{padding-bottom:10px}}.location-icon{text-align:center}.location-icon i{color:#99ac97;font-size:8em}@media screen and (max-width: 830px){.location-icon i{font-size:2em}}.margin-vertical{margin-top:20px;margin-bottom:20px}.sorting{position:relative;top:10px;margin-left:10px}.sorting-control{position:relative;display:inline-block;margin-bottom:10px}.sorting-control select,.sorting-control input[type=text]{color:#c8c8c8;background-color:rgba(50,50,50,.9);border:1px solid #646464;margin-right:5px}.sorting-control input[type=text]{height:27px;border-radius:290486px;padding-left:1em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc !important}.plants{margin-top:30px}@media screen and (max-width: 552px){.plants{text-align:center}}.plant-card{position:relative;display:inline-block;width:265px;height:398px;margin-left:10px;margin-right:10px;margin-bottom:20px;background-repeat:no-repeat;background-size:cover;border-radius:10px;box-shadow:0 4px 8px 0 rgba(0,0,0,.3)}@media screen and (max-width: 552px){.plant-card{width:145px;height:257px}}.plant-card:hover{box-shadow:0 0 20px 0 rgba(105,165,85,.95)}.plant-card-overlay{width:100%;height:100%;background:rgba(0,0,0,0);border-radius:10px}.plant-card-overlay:hover{background-color:rgba(0,0,0,.05)}.plant-card-title{position:absolute;bottom:0;z-index:2;width:100%;height:69px;padding-top:17px;background-color:rgba(0,0,0,.5);color:#c8c8c8;text-align:center;font-size:1.2em;border-bottom-left-radius:10px;border-bottom-right-radius:10px}@media screen and (max-width: 552px){.plant-card-title{padding-top:22px;font-size:.9em}}.plant-card-health-state{position:absolute;top:7px;right:8px;z-index:2}.plant-card-health-state i{background-color:rgba(0,0,0,.5);padding:5px;border-radius:32%}@media screen and (min-width: 520px){.plant-column{padding:20px}}@media screen and (max-width: 520px){.plant-column{display:inline-block;width:100%;padding-left:15px;padding-right:15px}}@media screen and (max-width: 365px){.plant-column{display:inline-block;padding-left:unset;padding-right:unset}}.plant-column table{width:100%;color:#c8c8c8}.plant-column table strong{color:#c8c8c8}.plant-column thead{background-color:rgba(104,145,194,.5)}.plant-column table td{border:1px solid #c8c8c8;padding:10px}.is-color-yes{color:#73d667}.is-color-no{color:#d44343}.is-not-available{color:#646464;font-style:italic}.plant-notes{position:relative;width:100%;min-width:300px;min-height:75px;padding:10px;color:#c8c8c8;background-color:rgba(90,90,90,.5);font-size:1em;border:1px solid #646464;border-left:3px solid #a37a3d;border-radius:4px}.plant-notes-content{position:relative;display:inline-block;width:90%}.plant-notes-edit{position:relative;display:inline-block;float:right}.plant-photo{position:relative;width:345px;height:543px;background-repeat:no-repeat;background-size:cover;float:right}.plant-photo-overlay{width:100%;height:100%}.plant-photo-overlay:hover{background-color:rgba(0,0,0,.5)}.plant-photo-overlay .plant-photo-edit{visibility:hidden}.plant-photo-overlay:hover .plant-photo-edit{visibility:visible}.plant-photo-edit{position:absolute;top:43%;left:42%}.plant-photo-edit i{color:#c8c8c8}.plant-state-in-good-standing{color:#73d667}.plant-state-overwatered{color:#3669c9}.plant-state-withering{color:#9c7343}.plant-state-infected{color:#ad5656}.plant-warning{margin-top:10px;margin-bottom:10px;color:#d43232}@media screen and (max-width: 510px){.plant-warning{margin-bottom:30px}}.warning-plants{position:relative;width:100%;margin-top:20px;margin-bottom:45px;padding:0 15px 15px 15px;border:1px solid #646464;border-radius:4px}.has-warnings{background-color:rgba(123,50,50,.5)}.is-all-ok{background-color:rgba(50,123,56,.5)}.warning-plants-title{margin-top:20px;margin-bottom:10px;font-size:1.3em;color:#c8c8c8}.warning-plants-title-no-margin-bottom{margin-bottom:unset}.warning-plants-title-margin-top-25{margin-top:25px}.warning-plants-title-centered{text-align:center}.warning-plants-item{color:#969696;margin-bottom:10px}.overdue-tasks{position:relative;width:100%;margin-top:-10px;margin-bottom:45px;padding:0 15px 15px 15px;background-color:rgba(123,50,50,.5);border:1px solid #646464;border-radius:4px}.overdue-tasks-title{margin-top:20px;margin-bottom:10px;font-size:1.3em;color:#c8c8c8}.overdue-tasks-item{color:#969696;margin-bottom:10px}.log{position:relative;width:100%;margin-top:23px;margin-bottom:45px;padding:0 15px 15px 15px;border:1px solid #2b2b2b;background-color:#000;border-radius:4px}.log-title{margin-top:10px;margin-bottom:10px;font-size:1.3em;color:#00d73f}.log-content{max-height:200px;overflow-y:auto}.log-item{color:#969696;margin-bottom:10px}.plant-gallery{position:relative;margin-top:10px;margin-bottom:10px}.plant-gallery-title{margin-bottom:20px;font-size:1.5em;color:#969696}.plant-gallery-upload{margin-bottom:20px}.plant-gallery-photos{margin-top:30px}.plant-gallery-photos strong{color:#646464}.plant-gallery-item{position:relative;display:inline-block;width:315px;height:auto;margin-left:10px;margin-right:10px;margin-bottom:30px;background-color:#c8c8c8;border-radius:4px}.plant-gallery-item-header{padding:10px}.plant-gallery-item-header-label{display:inline-block;color:#000}.plant-gallery-item-header-action{display:inline-block;float:right}.plant-gallery-item-header-action i{color:#ad5656}.plant-gallery-item-header-action i:hover{color:#ad5a5a}.plant-gallery-item-photo{position:relative}.plant-gallery-item-photo-overlay{position:absolute;z-index:2;width:100%;height:98%}.plant-gallery-item-photo-overlay:hover{background-color:rgba(0,0,0,.5)}.plant-gallery-item-photo-overlay .plant-gallery-item-photo-image{visibility:hidden}.plant-gallery-item-photo-overlay:hover .plant-gallery-item-photo-image{visibility:visible}.plant-gallery-item-footer{position:relative;top:-3px;padding:10px;color:#646464}.stats{position:relative;margin-top:10px;margin-bottom:25px;text-align:center}.stats-item{position:relative;display:inline-block;width:194px;height:135px;margin-left:10px;margin-right:10px;margin-bottom:20px;padding:20px;background-color:rgba(150,150,150,.3);border:1px solid #c8c8c8;border-radius:4px;border-left:3px solid #9fa52d}@media screen and (max-width: 512px){.stats-item{width:149px}}.stats-item-count{color:#fafafa;font-size:2em;text-align:center}.stats-item-label{color:#c8c8c8;font-size:1.4em;text-align:center}.plant-tags{position:relative}.plant-tags-content{position:relative;display:inline-block;width:90%}.plant-tags-edit{position:relative;display:inline-block;float:right}.plant-tags-item{position:relative;display:inline-block;min-width:90px;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:9px;margin-left:5px;margin-right:5px;margin-bottom:16px;text-align:center;background-color:rgba(200,200,200,.3);border:1px solid #969696;border-radius:10px}.plant-tags-item:hover{background-color:rgba(200,200,200,.5)}.plant-tags-item a{color:#bebebe}.plant-tags-item a:hover{color:#e6e6e6}.tasks{margin-bottom:50px}.task{position:relative;display:inline-block;width:45%;height:auto;margin-left:10px;margin-right:10px;margin-bottom:29px;background-color:rgba(50,50,50,.76);border:1px solid #505050;border-radius:4px}@media screen and (max-width: 580px){.task{width:95%}}.task-header{position:relative;width:100%;height:50px;padding:10px;border-top-left-radius:4px;border-top-right-radius:4px;background-color:#191919}.task-header-title{position:relative;display:inline-block;top:-5px;font-size:1.5em;color:#c8c8c8}.task-header-action{position:relative;display:inline-block;float:right}.task-header-action a{color:#969696}.task-description{position:relative;height:150px;margin-bottom:43px;padding:10px;font-size:1em;color:#969696;overflow-y:auto}.task-description pre{background-color:inherit;color:inherit;white-space:pre-wrap;word-wrap:break-word}.task-footer{position:absolute;bottom:0;padding:10px;width:100%;background-color:#0a0a0a;border-bottom-left-radius:4px;border-bottom-right-radius:4px;font-size:.8em}.task-footer-date{position:relative;display:inline-block;width:43%}.task-footer-due{position:relative;display:inline-block}.is-task-overdue{color:#d43232}.task-footer-action{position:relative;display:inline-block;float:right}.task-footer-action a{color:#969696}.inventory{margin-bottom:50px}.inventory-item-group{position:relative;width:100%;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:5px;background-color:rgba(200,200,200,.76);border:1px solid #5a5a5a}.inventory-item{position:relative;width:100%;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:5px;background-color:rgba(50,50,50,.76);border:1px solid #5a5a5a}.inventory-item-header{position:relative}.inventory-item-name{position:relative;display:inline-block;min-width:50%}.inventory-item-name a{color:#969696}.inventory-item-name a:hover{color:#969696}.inventory-item-amount{position:relative;display:inline-block}.inventory-item-amount i{color:#969696}.inventory-item-amount span{color:#d7d7d7}.is-inventory-item-empty{color:#d43232 !important}.inventory-item-actions{position:relative;display:inline-block;float:right}.inventory-item-actions i{color:#646464}.inventory-item-body{position:relative;height:0;opacity:0;overflow:hidden;-webkit-transition:opacity 1s ease-out;-moz-transition:opacity 1s ease-out;transition:opacity 1s ease-out}.inventory-item-body.expand{height:auto;opacity:1}.inventory-item-description{position:relative;color:#646464;margin-top:10px;margin-bottom:10px}.inventory-item-description pre{background-color:inherit;color:inherit;white-space:normal}.inventory-item-photo{position:relative}.inventory-item-author{position:relative;color:#646464;margin-top:10px}.inventory-groups{width:100%}.inventory-groups a{color:#323232}.inventory-groups a:hover{color:#323232;text-decoration:underline}.chat-message{position:relative;width:90%;padding:15px;margin-bottom:20px;background-color:rgba(200,200,200,.5);border-radius:10px}.chat-message-right{margin-left:10%;background-color:rgba(115,143,100,.9)}.chat-message-user{position:relative;font-size:1.2em;margin-bottom:10px}.chat-message-new{position:relative;display:inline-block;background-color:#d48243;border:1px solid #5c4019;color:#fafafa;border-radius:4px;padding:5px;font-size:.5em;text-transform:uppercase;float:right}.chat-message-content{position:relative}.chat-message-content pre{background-color:rgba(0,0,0,0);color:#fff}.chat-message-info{position:relative;margin-top:10px;font-size:.76em;color:#9b9b9b}.chat-typing-indicator{display:none;background-color:rgba(50,50,50,.5)}.chat-typing-indicator.visible{display:block}.chat-user-list{position:relative;margin-top:10px;margin-bottom:23px;color:#5cff00}.scroll-to-top{position:fixed;z-index:3;bottom:12px;right:12px}.scroll-to-top-inner{background-color:#344638;border-radius:50%;padding:12px;box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.scroll-to-top-inner a{color:#c8c8c8}.auth-main{width:100%;height:100%;background-repeat:no-repeat;background-size:cover}.auth-overlay{width:100%;height:100%;background-color:rgba(0,0,0,.5)}.auth-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center;padding:20px}.auth-header{position:relative;margin-bottom:20px}.auth-header img{position:relative;width:128px;height:128px;border-radius:50%}.auth-header h1{font-size:2.5em;font-family:Quicksand,Verdana,Geneva,Tahoma,sans-serif;font-weight:bold;color:#969696}.auth-info{position:relative;margin-bottom:43px}.auth-info-error{color:#9a4945}.auth-info-success{color:#459a53}.auth-form{position:relative}.auth-form input[type=email],.auth-form input[type=password]{color:#969696;background-color:#323232}.auth-form input[type=email]::placeholder,.auth-form input[type=password]::placeholder{color:#c8c8c8}.auth-form input[type=submit]{width:100%}.auth-help{position:relative;margin-top:20px}.auth-help a{color:#3669cb}.auth-help a:hover{color:#3669cb;text-decoration:underline}.reset-main{width:100%;height:100%;background-repeat:no-repeat;background-size:cover}.reset-overlay{width:100%;height:100%;background-color:rgba(0,0,0,.5)}.reset-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center;padding:20px}.reset-content h1{margin-bottom:30px;line-height:1}.reset-info{position:relative;margin-bottom:43px}.reset-info-error{color:#9a4945}.reset-info-success{color:#459a53}.reset-form{position:relative}.reset-form input[type=email],.reset-form input[type=password]{color:#969696;background-color:#323232}.reset-form input[type=email]::placeholder,.reset-form input[type=password]::placeholder{color:#c8c8c8}.reset-form input[type=submit]{width:100%}.admin-environment{position:relative}.admin-environment h2{margin-top:20px;margin-bottom:10px}.admin-environment label,.admin-environment span{color:#969696}.admin-environment input,.admin-environment select{color:#969696;background-color:#323232}.admin-media{position:relative;width:100%}.admin-media h2{margin-top:20px;margin-bottom:20px}.admin-media label{color:#969696}.admin-media input{color:#969696;background-color:#323232}.admin-media input[type=submit]{margin-top:10px;margin-bottom:20px}.admin-users{position:relative;width:100%}.admin-users h2{margin-top:20px;margin-bottom:20px}.admin-users-list{position:relative}.admin-user-account{position:relative;margin-bottom:15px}.admin-user-account label,.admin-user-account span{color:#969696}.admin-user-account input,.admin-user-account select{color:#969696;background-color:#323232}.admin-user-account-item{position:relative;display:inline-block;margin-left:5px;margin-right:5px}.admin-user-account-item-input{width:30%}.admin-user-account-actions{position:relative;display:inline-block}.admin-user-account-item-centered{text-align:center}.admin-user-account-action-item{position:relative}.admin-users-actions{position:relative;margin-top:20px}.admin-locations{position:relative;width:100%}.admin-locations h2{margin-top:20px;margin-bottom:20px}.admin-locations-list{position:relative}.admin-location{position:relative;margin-bottom:15px}.admin-location label,.admin-location span{color:#969696}.admin-location input{color:#969696;background-color:#323232}.admin-location-item{position:relative;display:inline-block;margin-left:5px;margin-right:5px}.admin-location-item-input{width:30%}.admin-location-actions{position:relative;display:inline-block}.admin-location-item-centered{text-align:center}.admin-location-action-item{position:relative}.admin-locations-actions{position:relative;margin-top:20px}.version-check{position:relative;margin-top:30px}.version-info{position:relative;padding:20px;margin-top:30px;color:#fafafa;background-color:rgba(102,202,160,.76);border:1px solid #96ecc8;border-radius:10px}.version-info a{color:#84ff7b;font-weight:bold}.version-info a:hover{color:#84ff7b;text-decoration:underline}",""]);const r=i},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,o){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(o)for(var r=0;r{var o=n(379),i=n(959);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.id,i,""]]);o(i,{insert:"head",singleton:!1}),e.exports=i.locals||{}},379:(e,t,n)=>{"use strict";var o,i=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),r=[];function a(e){for(var t=-1,n=0;n{"use strict";function o(e,t){return function(){return e.apply(t,arguments)}}const{toString:i}=Object.prototype,{getPrototypeOf:r}=Object,a=(s=Object.create(null),e=>{const t=i.call(e);return s[t]||(s[t]=t.slice(8,-1).toLowerCase())});var s;const l=e=>(e=e.toLowerCase(),t=>a(t)===e),c=e=>t=>typeof t===e,{isArray:d}=Array,u=c("undefined"),p=l("ArrayBuffer"),m=c("string"),h=c("function"),f=c("number"),g=e=>null!==e&&"object"==typeof e,b=e=>{if("object"!==a(e))return!1;const t=r(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},y=l("Date"),w=l("File"),v=l("Blob"),x=l("FileList"),E=l("URLSearchParams");function k(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let o,i;if("object"!=typeof e&&(e=[e]),d(e))for(o=0,i=e.length;o0;)if(o=n[i],t===o.toLowerCase())return o;return null}const S="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,R=e=>!u(e)&&e!==S,O=(I="undefined"!=typeof Uint8Array&&r(Uint8Array),e=>I&&e instanceof I);var I;const C=l("HTMLFormElement"),A=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),B=l("RegExp"),j=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};k(n,((n,i)=>{let r;!1!==(r=t(n,i,e))&&(o[i]=r||n)})),Object.defineProperties(e,o)},N="abcdefghijklmnopqrstuvwxyz",P="0123456789",L={DIGIT:P,ALPHA:N,ALPHA_DIGIT:N+N.toUpperCase()+P},U=l("AsyncFunction");var _={isArray:d,isArrayBuffer:p,isBuffer:function(e){return null!==e&&!u(e)&&null!==e.constructor&&!u(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=a(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&p(e.buffer),t},isString:m,isNumber:f,isBoolean:e=>!0===e||!1===e,isObject:g,isPlainObject:b,isUndefined:u,isDate:y,isFile:w,isBlob:v,isRegExp:B,isFunction:h,isStream:e=>g(e)&&h(e.pipe),isURLSearchParams:E,isTypedArray:O,isFileList:x,forEach:k,merge:function e(){const{caseless:t}=R(this)&&this||{},n={},o=(o,i)=>{const r=t&&T(n,i)||i;b(n[r])&&b(o)?n[r]=e(n[r],o):b(o)?n[r]=e({},o):d(o)?n[r]=o.slice():n[r]=o};for(let e=0,t=arguments.length;e(k(t,((t,i)=>{n&&h(t)?e[i]=o(t,n):e[i]=t}),{allOwnKeys:i}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,o)=>{let i,a,s;const l={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)s=i[a],o&&!o(s,e,t)||l[s]||(t[s]=e[s],l[s]=!0);e=!1!==n&&r(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:a,kindOfTest:l,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return-1!==o&&o===n},toArray:e=>{if(!e)return null;if(d(e))return e;let t=e.length;if(!f(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const o=[];for(;null!==(n=e.exec(t));)o.push(n);return o},isHTMLForm:C,hasOwnProperty:A,hasOwnProp:A,reduceDescriptors:j,freezeMethods:e=>{j(e,((t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const o=e[n];h(o)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},o=e=>{e.forEach((e=>{n[e]=!0}))};return d(e)?o(e):o(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:T,global:S,isContextDefined:R,ALPHABET:L,generateString:(e=16,t=L.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n},isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,o)=>{if(g(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[o]=e;const i=d(e)?[]:{};return k(e,((e,t)=>{const r=n(e,o+1);!u(r)&&(i[t]=r)})),t[o]=void 0,i}}return e};return n(e,0)},isAsyncFn:U,isThenable:e=>e&&(g(e)||h(e))&&h(e.then)&&h(e.catch)};function F(e,t,n,o,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),i&&(this.response=i)}_.inherits(F,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:_.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const D=F.prototype,z={};function M(e){return _.isPlainObject(e)||_.isArray(e)}function q(e){return _.endsWith(e,"[]")?e.slice(0,-2):e}function H(e,t,n){return e?e.concat(t).map((function(e,t){return e=q(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{z[e]={value:e}})),Object.defineProperties(F,z),Object.defineProperty(D,"isAxiosError",{value:!0}),F.from=(e,t,n,o,i,r)=>{const a=Object.create(D);return _.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),F.call(a,e.message,t,n,o,i),a.cause=e,a.name=e.name,r&&Object.assign(a,r),a};const J=_.toFlatObject(_,{},null,(function(e){return/^is[A-Z]/.test(e)}));function V(e,t,n){if(!_.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const o=(n=_.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!_.isUndefined(t[e])}))).metaTokens,i=n.visitor||c,r=n.dots,a=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&_.isSpecCompliantForm(t);if(!_.isFunction(i))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(_.isDate(e))return e.toISOString();if(!s&&_.isBlob(e))throw new F("Blob is not supported. Use a Buffer instead.");return _.isArrayBuffer(e)||_.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,i){let s=e;if(e&&!i&&"object"==typeof e)if(_.endsWith(n,"{}"))n=o?n:n.slice(0,-2),e=JSON.stringify(e);else if(_.isArray(e)&&function(e){return _.isArray(e)&&!e.some(M)}(e)||(_.isFileList(e)||_.endsWith(n,"[]"))&&(s=_.toArray(e)))return n=q(n),s.forEach((function(e,o){!_.isUndefined(e)&&null!==e&&t.append(!0===a?H([n],o,r):null===a?n:n+"[]",l(e))})),!1;return!!M(e)||(t.append(H(i,n,r),l(e)),!1)}const d=[],u=Object.assign(J,{defaultVisitor:c,convertValue:l,isVisitable:M});if(!_.isObject(e))throw new TypeError("data must be an object");return function e(n,o){if(!_.isUndefined(n)){if(-1!==d.indexOf(n))throw Error("Circular reference detected in "+o.join("."));d.push(n),_.forEach(n,(function(n,r){!0===(!(_.isUndefined(n)||null===n)&&i.call(t,n,_.isString(r)?r.trim():r,o,u))&&e(n,o?o.concat(r):[r])})),d.pop()}}(e),t}function W(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function K(e,t){this._pairs=[],e&&V(e,this,t)}const G=K.prototype;function X(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function $(e,t,n){if(!t)return e;const o=n&&n.encode||X,i=n&&n.serialize;let r;if(r=i?i(t,n):_.isURLSearchParams(t)?t.toString():new K(t,n).toString(o),r){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+r}return e}G.append=function(e,t){this._pairs.push([e,t])},G.toString=function(e){const t=e?function(t){return e.call(this,t,W)}:W;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Q=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){_.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Z={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Y={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:K,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const ee="undefined"!=typeof window&&"undefined"!=typeof document,te=(ne="undefined"!=typeof navigator&&navigator.product,ee&&["ReactNative","NativeScript","NS"].indexOf(ne)<0);var ne;const oe="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts;var ie={...Object.freeze({__proto__:null,hasBrowserEnv:ee,hasStandardBrowserWebWorkerEnv:oe,hasStandardBrowserEnv:te}),...Y};function re(e){function t(e,n,o,i){let r=e[i++];const a=Number.isFinite(+r),s=i>=e.length;return r=!r&&_.isArray(o)?o.length:r,s?(_.hasOwnProp(o,r)?o[r]=[o[r],n]:o[r]=n,!a):(o[r]&&_.isObject(o[r])||(o[r]=[]),t(e,n,o[r],i)&&_.isArray(o[r])&&(o[r]=function(e){const t={},n=Object.keys(e);let o;const i=n.length;let r;for(o=0;o{t(function(e){return _.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),o,n,0)})),n}return null}const ae={transitional:Z,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",o=n.indexOf("application/json")>-1,i=_.isObject(e);if(i&&_.isHTMLForm(e)&&(e=new FormData(e)),_.isFormData(e))return o&&o?JSON.stringify(re(e)):e;if(_.isArrayBuffer(e)||_.isBuffer(e)||_.isStream(e)||_.isFile(e)||_.isBlob(e))return e;if(_.isArrayBufferView(e))return e.buffer;if(_.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let r;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return V(e,new ie.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,o){return ie.isNode&&_.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((r=_.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return V(r?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||o?(t.setContentType("application/json",!1),function(e,t,n){if(_.isString(e))try{return(0,JSON.parse)(e),_.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||ae.transitional,n=t&&t.forcedJSONParsing,o="json"===this.responseType;if(e&&_.isString(e)&&(n&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw F.from(e,F.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ie.classes.FormData,Blob:ie.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_.forEach(["delete","get","head","post","put","patch"],(e=>{ae.headers[e]={}}));var se=ae;const le=_.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ce=Symbol("internals");function de(e){return e&&String(e).trim().toLowerCase()}function ue(e){return!1===e||null==e?e:_.isArray(e)?e.map(ue):String(e)}function pe(e,t,n,o,i){return _.isFunction(o)?o.call(this,t,n):(i&&(t=n),_.isString(t)?_.isString(o)?-1!==t.indexOf(o):_.isRegExp(o)?o.test(t):void 0:void 0)}class me{constructor(e){e&&this.set(e)}set(e,t,n){const o=this;function i(e,t,n){const i=de(t);if(!i)throw new Error("header name must be a non-empty string");const r=_.findKey(o,i);(!r||void 0===o[r]||!0===n||void 0===n&&!1!==o[r])&&(o[r||t]=ue(e))}const r=(e,t)=>_.forEach(e,((e,n)=>i(e,n,t)));return _.isPlainObject(e)||e instanceof this.constructor?r(e,t):_.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?r((e=>{const t={};let n,o,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),n=e.substring(0,i).trim().toLowerCase(),o=e.substring(i+1).trim(),!n||t[n]&&le[n]||("set-cookie"===n?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)})),t})(e),t):null!=e&&i(t,e,n),this}get(e,t){if(e=de(e)){const n=_.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}(e);if(_.isFunction(t))return t.call(this,e,n);if(_.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=de(e)){const n=_.findKey(this,e);return!(!n||void 0===this[n]||t&&!pe(0,this[n],n,t))}return!1}delete(e,t){const n=this;let o=!1;function i(e){if(e=de(e)){const i=_.findKey(n,e);!i||t&&!pe(0,n[i],i,t)||(delete n[i],o=!0)}}return _.isArray(e)?e.forEach(i):i(e),o}clear(e){const t=Object.keys(this);let n=t.length,o=!1;for(;n--;){const i=t[n];e&&!pe(0,this[i],i,e,!0)||(delete this[i],o=!0)}return o}normalize(e){const t=this,n={};return _.forEach(this,((o,i)=>{const r=_.findKey(n,i);if(r)return t[r]=ue(o),void delete t[i];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(i):String(i).trim();a!==i&&delete t[i],t[a]=ue(o),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return _.forEach(this,((n,o)=>{null!=n&&!1!==n&&(t[o]=e&&_.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[ce]=this[ce]={accessors:{}}).accessors,n=this.prototype;function o(e){const o=de(e);t[o]||(function(e,t){const n=_.toCamelCase(" "+t);["get","set","has"].forEach((o=>{Object.defineProperty(e,o+n,{value:function(e,n,i){return this[o].call(this,t,e,n,i)},configurable:!0})}))}(n,e),t[o]=!0)}return _.isArray(e)?e.forEach(o):o(e),this}}me.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),_.reduceDescriptors(me.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),_.freezeMethods(me);var he=me;function fe(e,t){const n=this||se,o=t||n,i=he.from(o.headers);let r=o.data;return _.forEach(e,(function(e){r=e.call(n,r,i.normalize(),t?t.status:void 0)})),i.normalize(),r}function ge(e){return!(!e||!e.__CANCEL__)}function be(e,t,n){F.call(this,null==e?"canceled":e,F.ERR_CANCELED,t,n),this.name="CanceledError"}_.inherits(be,F,{__CANCEL__:!0});var ye=ie.hasStandardBrowserEnv?{write(e,t,n,o,i,r){const a=[e+"="+encodeURIComponent(t)];_.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),_.isString(o)&&a.push("path="+o),_.isString(i)&&a.push("domain="+i),!0===r&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function we(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var ve=ie.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function o(n){let o=n;return e&&(t.setAttribute("href",o),o=t.href),t.setAttribute("href",o),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=o(window.location.href),function(e){const t=_.isString(e)?o(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};function xe(e,t){let n=0;const o=function(e,t){e=e||10;const n=new Array(e),o=new Array(e);let i,r=0,a=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=o[a];i||(i=l),n[r]=s,o[r]=l;let d=a,u=0;for(;d!==r;)u+=n[d++],d%=e;if(r=(r+1)%e,r===a&&(a=(a+1)%e),l-i{const r=i.loaded,a=i.lengthComputable?i.total:void 0,s=r-n,l=o(s);n=r;const c={loaded:r,total:a,progress:a?r/a:void 0,bytes:s,rate:l||void 0,estimated:l&&a&&r<=a?(a-r)/l:void 0,event:i};c[t?"download":"upload"]=!0,e(c)}}const Ee={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let o=e.data;const i=he.from(e.headers).normalize();let r,a,{responseType:s,withXSRFToken:l}=e;function c(){e.cancelToken&&e.cancelToken.unsubscribe(r),e.signal&&e.signal.removeEventListener("abort",r)}if(_.isFormData(o))if(ie.hasStandardBrowserEnv||ie.hasStandardBrowserWebWorkerEnv)i.setContentType(!1);else if(!1!==(a=i.getContentType())){const[e,...t]=a?a.split(";").map((e=>e.trim())).filter(Boolean):[];i.setContentType([e||"multipart/form-data",...t].join("; "))}let d=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(t+":"+n))}const u=we(e.baseURL,e.url);function p(){if(!d)return;const o=he.from("getAllResponseHeaders"in d&&d.getAllResponseHeaders());!function(e,t,n){const o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new F("Request failed with status code "+n.status,[F.ERR_BAD_REQUEST,F.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),c()}),(function(e){n(e),c()}),{data:s&&"text"!==s&&"json"!==s?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:o,config:e,request:d}),d=null}if(d.open(e.method.toUpperCase(),$(u,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,"onloadend"in d?d.onloadend=p:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(p)},d.onabort=function(){d&&(n(new F("Request aborted",F.ECONNABORTED,e,d)),d=null)},d.onerror=function(){n(new F("Network Error",F.ERR_NETWORK,e,d)),d=null},d.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const o=e.transitional||Z;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new F(t,o.clarifyTimeoutError?F.ETIMEDOUT:F.ECONNABORTED,e,d)),d=null},ie.hasStandardBrowserEnv&&(l&&_.isFunction(l)&&(l=l(e)),l||!1!==l&&ve(u))){const t=e.xsrfHeaderName&&e.xsrfCookieName&&ye.read(e.xsrfCookieName);t&&i.set(e.xsrfHeaderName,t)}void 0===o&&i.setContentType(null),"setRequestHeader"in d&&_.forEach(i.toJSON(),(function(e,t){d.setRequestHeader(t,e)})),_.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),s&&"json"!==s&&(d.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",xe(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",xe(e.onUploadProgress)),(e.cancelToken||e.signal)&&(r=t=>{d&&(n(!t||t.type?new be(null,e,d):t),d.abort(),d=null)},e.cancelToken&&e.cancelToken.subscribe(r),e.signal&&(e.signal.aborted?r():e.signal.addEventListener("abort",r)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(u);m&&-1===ie.protocols.indexOf(m)?n(new F("Unsupported protocol "+m+":",F.ERR_BAD_REQUEST,e)):d.send(o||null)}))}};_.forEach(Ee,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const ke=e=>`- ${e}`,Te=e=>_.isFunction(e)||null===e||!1===e;var Se=e=>{e=_.isArray(e)?e:[e];const{length:t}=e;let n,o;const i={};for(let r=0;r`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new F("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(ke).join("\n"):" "+ke(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return o};function Re(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new be(null,e)}function Oe(e){return Re(e),e.headers=he.from(e.headers),e.data=fe.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Se(e.adapter||se.adapter)(e).then((function(t){return Re(e),t.data=fe.call(e,e.transformResponse,t),t.headers=he.from(t.headers),t}),(function(t){return ge(t)||(Re(e),t&&t.response&&(t.response.data=fe.call(e,e.transformResponse,t.response),t.response.headers=he.from(t.response.headers))),Promise.reject(t)}))}const Ie=e=>e instanceof he?e.toJSON():e;function Ce(e,t){t=t||{};const n={};function o(e,t,n){return _.isPlainObject(e)&&_.isPlainObject(t)?_.merge.call({caseless:n},e,t):_.isPlainObject(t)?_.merge({},t):_.isArray(t)?t.slice():t}function i(e,t,n){return _.isUndefined(t)?_.isUndefined(e)?void 0:o(void 0,e,n):o(e,t,n)}function r(e,t){if(!_.isUndefined(t))return o(void 0,t)}function a(e,t){return _.isUndefined(t)?_.isUndefined(e)?void 0:o(void 0,e):o(void 0,t)}function s(n,i,r){return r in t?o(n,i):r in e?o(void 0,n):void 0}const l={url:r,method:r,data:r,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:(e,t)=>i(Ie(e),Ie(t),!0)};return _.forEach(Object.keys(Object.assign({},e,t)),(function(o){const r=l[o]||i,a=r(e[o],t[o],o);_.isUndefined(a)&&r!==s||(n[o]=a)})),n}const Ae={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Ae[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Be={};Ae.transitional=function(e,t,n){function o(e,t){return"[Axios v1.6.2] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,i,r)=>{if(!1===e)throw new F(o(i," has been removed"+(t?" in "+t:"")),F.ERR_DEPRECATED);return t&&!Be[i]&&(Be[i]=!0,console.warn(o(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,i,r)}};var je={assertOptions:function(e,t,n){if("object"!=typeof e)throw new F("options must be an object",F.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let i=o.length;for(;i-- >0;){const r=o[i],a=t[r];if(a){const t=e[r],n=void 0===t||a(t,r,e);if(!0!==n)throw new F("option "+r+" must be "+n,F.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new F("Unknown option "+r,F.ERR_BAD_OPTION)}},validators:Ae};const Ne=je.validators;class Pe{constructor(e){this.defaults=e,this.interceptors={request:new Q,response:new Q}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ce(this.defaults,t);const{transitional:n,paramsSerializer:o,headers:i}=t;void 0!==n&&je.assertOptions(n,{silentJSONParsing:Ne.transitional(Ne.boolean),forcedJSONParsing:Ne.transitional(Ne.boolean),clarifyTimeoutError:Ne.transitional(Ne.boolean)},!1),null!=o&&(_.isFunction(o)?t.paramsSerializer={serialize:o}:je.assertOptions(o,{encode:Ne.function,serialize:Ne.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let r=i&&_.merge(i.common,i[t.method]);i&&_.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=he.concat(r,i);const a=[];let s=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const l=[];let c;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let d,u=0;if(!s){const e=[Oe.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,l),d=e.length,c=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const o=new Promise((e=>{n.subscribe(e),t=e})).then(e);return o.cancel=function(){n.unsubscribe(t)},o},e((function(e,o,i){n.reason||(n.reason=new be(e,o,i),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new Ue((function(t){e=t})),cancel:e}}}var _e=Ue;const Fe={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Fe).forEach((([e,t])=>{Fe[t]=e}));var De=Fe;const ze=function e(t){const n=new Le(t),i=o(Le.prototype.request,n);return _.extend(i,Le.prototype,n,{allOwnKeys:!0}),_.extend(i,n,null,{allOwnKeys:!0}),i.create=function(n){return e(Ce(t,n))},i}(se);ze.Axios=Le,ze.CanceledError=be,ze.CancelToken=_e,ze.isCancel=ge,ze.VERSION="1.6.2",ze.toFormData=V,ze.AxiosError=F,ze.Cancel=ze.CanceledError,ze.all=function(e){return Promise.all(e)},ze.spread=function(e){return function(t){return e.apply(null,t)}},ze.isAxiosError=function(e){return _.isObject(e)&&!0===e.isAxiosError},ze.mergeConfig=Ce,ze.AxiosHeaders=he,ze.formToJSON=e=>re(_.isHTMLForm(e)?new FormData(e):e),ze.getAdapter=Se,ze.HttpStatusCode=De,ze.default=ze,e.exports=ze}},t={};function n(o){var i=t[o];if(void 0!==i)return i.exports;var r=t[o]={id:o,exports:{}};return e[o](r,r.exports,n),r.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0,(()=>{"use strict";n(488),window.axios=n(218),window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",window.constChatMessageQueryRefreshRate=15e3,window.constChatUserListRefreshRate=15e3,window.constChatTypingRefreshRate=2e3,window.vue=new Vue({el:"#app",data:{bShowAddPlant:!1,bShowEditText:!1,bShowEditBoolean:!1,bShowEditInteger:!1,bShowEditDate:!1,bShowEditCombo:!1,bShowEditPhoto:!1,bShowEditLinkText:!1,bShowUploadPhoto:!1,bShowCreateTask:!1,bShowEditTask:!1,bShowEditPreferences:!1,bShowAddInventoryItem:!1,bShowEditInventoryItem:!1,bShowManageGroups:!1,bShowRestorePassword:!1,bShowCreateNewUser:!1,bShowCreateNewLocation:!1,bShowRemoveLocation:!1,comboLocation:[],comboCuttingMonth:[],comboLightLevel:[],comboHealthState:[],confirmPhotoRemoval:"Are you sure you want to remove this photo?",confirmPlantRemoval:"Are you sure you want to remove this plant?",confirmSetAllWatered:"Are you sure you want to update the last watered date of all these plants?",confirmInventoryItemRemoval:"Are you sure you want to remove this item?",newChatMessage:"New",currentlyOnline:"Currently online: ",chatTypingEnable:!1,chatTypingTimer:null,chatTypingHide:null,chatTypingCounter:1},methods:{ajaxRequest:function(e,t,n={},o=function(e){},i=function(){},r={}){let a=window.axios.get;"post"==e?a=window.axios.post:"patch"==e?a=window.axios.patch:"delete"==e&&(a=window.axios.delete),a(t,n,r).then((function(e){o(e.data)})).catch((function(e){console.log(e)})).finally((function(){i()}))},initNavBar:function(){const e=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);e.length>0&&e.forEach((e=>{e.addEventListener("click",(()=>{const t=e.dataset.target,n=document.getElementById(t);e.classList.toggle("is-active"),n.classList.toggle("is-active")}))}))},showEditText:function(e,t,n,o=""){document.getElementById("inpEditTextPlantId").value=e,document.getElementById("inpEditTextAttribute").value=t,document.getElementById("inpEditTextValue").value=n,document.getElementById("inpEditTextAnchor").value=o,window.vue.bShowEditText=!0},showEditBoolean:function(e,t,n,o){document.getElementById("inpEditBooleanPlantId").value=e,document.getElementById("inpEditBooleanAttribute").value=t,document.getElementById("property-hint").innerHTML=n,document.getElementById("inpEditBooleanValue").checked=o,window.vue.bShowEditBoolean=!0},showEditInteger:function(e,t,n){document.getElementById("inpEditIntegerPlantId").value=e,document.getElementById("inpEditIntegerAttribute").value=t,document.getElementById("inpEditIntegerValue").value=n,window.vue.bShowEditInteger=!0},showEditDate:function(e,t,n){document.getElementById("inpEditDatePlantId").value=e,document.getElementById("inpEditDateAttribute").value=t,document.getElementById("inpEditDateValue").value=n,window.vue.bShowEditDate=!0},showEditCombo:function(e,t,n,o){if(document.getElementById("inpEditComboPlantId").value=e,document.getElementById("inpEditComboAttribute").value=t,"object"!=typeof n)return void console.error("Invalid combo specified");let i=document.getElementById("selEditCombo");if(i){for(let e=i.options.length-1;e>=0;e--)i.remove(e);n.forEach((function(e,t){let n=document.createElement("option");n.value=e.ident,n.text=e.label,i.add(n)}))}document.getElementById("selEditCombo").value=o,window.vue.bShowEditCombo=!0},showEditLinkText:function(e,t,n){document.getElementById("inpEditLinkTextPlantId").value=e,document.getElementById("inpEditLinkTextValue").value=t,document.getElementById("inpEditLinkTextLink").value=n,window.vue.bShowEditLinkText=!0},showEditPhoto:function(e,t){document.getElementById("inpEditPhotoPlantId").value=e,document.getElementById("inpEditPhotoAttribute").value=t,window.vue.bShowEditPhoto=!0},showPhotoUpload:function(e){document.getElementById("inpUploadPhotoPlantId").value=e,window.vue.bShowUploadPhoto=!0},deletePhoto:function(e,t){confirm(window.vue.confirmPhotoRemoval)&&window.vue.ajaxRequest("post",window.location.origin+"/plants/details/gallery/photo/remove",{photo:e},(function(e){if(200==e.code){let e=document.getElementById(t);e&&e.remove()}else alert(e.msg)}))},deletePlant:function(e,t){confirm(window.vue.confirmPlantRemoval)&&(location.href=window.location.origin+"/plants/remove?plant="+e+"&location="+t)},toggleTaskStatus:function(e){window.vue.ajaxRequest("post",window.location.origin+"/tasks/toggle",{task:e},(function(t){if(200==t.code){let t=document.getElementById("task-item-"+e);t&&t.remove()}else alert(t.msg)}))},editTask:function(e){document.getElementById("inpEditTaskId").value=e,document.getElementById("inpEditTaskTitle").value=document.getElementById("task-item-title-"+e).innerText,document.getElementById("inpEditTaskDescription").value=document.getElementById("task-item-description-"+e).innerText,document.getElementById("inpEditTaskDueDate").value=document.getElementById("task-item-due-"+e).innerText,window.vue.bShowEditTask=!0},updateLastWatered:function(e){confirm(window.vue.confirmSetAllWatered)&&(location.href=window.location.origin+"/plants/location/"+e+"/water")},expandInventoryItem:function(e){let t=document.getElementById(e);t&&t.classList.toggle("expand")},incrementInventoryItem:function(e,t){window.vue.ajaxRequest("get",window.location.origin+"/inventory/amount/increment?id="+e,{},(function(e){if(200==e.code){let n=document.getElementById(t);n&&(n.innerHTML=e.amount,0==e.amount?n.classList.add("is-inventory-item-empty"):n.classList.remove("is-inventory-item-empty"))}else alert(e.msg)}))},decrementInventoryItem:function(e,t){window.vue.ajaxRequest("get",window.location.origin+"/inventory/amount/decrement?id="+e,{},(function(e){if(200==e.code){let n=document.getElementById(t);n&&(n.innerHTML=e.amount,0==e.amount?n.classList.add("is-inventory-item-empty"):n.classList.remove("is-inventory-item-empty"))}else alert(e.msg)}))},editInventoryItem:function(e,t,n,o){document.getElementById("inpInventoryItemId").value=e,document.getElementById("inpInventoryItemName").value=t,document.getElementById("inpInventoryItemGroup").value=n,document.getElementById("inpInventoryItemDescription").value=document.getElementById(o).innerText,window.vue.bShowEditInventoryItem=!0},deleteInventoryItem:function(e,t){confirm(window.vue.confirmInventoryItemRemoval)&&window.vue.ajaxRequest("get",window.location.origin+"/inventory/remove?id="+e,{},(function(e){if(200==e.code){let e=document.getElementById(t);e&&e.remove()}else alert(e.msg)}))},editInventoryGroupItem:function(e,t,n){let o=prompt(t,n);o.length>0&&window.vue.ajaxRequest("post",window.location.origin+"/inventory/group/edit",{id:e,what:t,value:o},(function(n){200==n.code?"token"===t?document.getElementById("inventory-group-elem-token-"+e).innerText=o:"label"===t&&(document.getElementById("inventory-group-elem-label-"+e).innerText=o):alert(n.msg)}))},removeInventoryGroupItem:function(e,t){confirm(window.vue.confirmInventoryItemRemoval)&&window.vue.ajaxRequest("get",window.location.origin+"/inventory/group/remove?id="+e,{},(function(e){if(200==e.code){let e=document.getElementById(t);e&&e.remove()}else alert(e.msg)}))},refreshChat:function(e){window.vue.ajaxRequest("get",window.location.origin+"/chat/query",{},(function(t){200==t.code&&t.messages.forEach((function(t,n){document.getElementById("chat").innerHTML=window.vue.renderNewChatMessage(t,e)+document.getElementById("chat").innerHTML;let o=new Audio(window.location.origin+"/snd/new_message.wav");o.onloadeddata=function(){o.play()}}))})),setTimeout(window.vue.refreshChat,window.constChatMessageQueryRefreshRate)},renderNewChatMessage:function(e,t){let n="";return e.userId==t&&(n="chat-message-right"),'\n \n
\n
'+e.userName+'
\n
'+window.vue.newChatMessage+'
\n
\n\n
\n\n
\n '+e.diffForHumans+"\n
\n
\n "},refreshUserList:function(){window.vue.ajaxRequest("get",window.location.origin+"/user/online",{},(function(e){if(200==e.code){let t=document.getElementById("chat-user-list");t.innerHTML=window.vue.currentlyOnline,e.users.forEach((function(n,o){let i="";o3&&(window.vue.chatTypingCounter=1)}setTimeout(window.vue.animateChatTypingIndicator,350)},removePreviousChatIndicatorCircleStyle:function(){let e=window.vue.chatTypingCounter-1;0==e&&(e=3);let t=document.getElementById("chat-typing-circle-"+e.toString());t.classList.contains("fa-lg")&&(t.classList.remove("fa-lg"),t.style.color="inherit")},textFilterElements:function(e){let t=document.getElementsByClassName("plant-card-title");for(let n=0;n{var e={959:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});var o=n(645),i=n.n(o)()((function(e){return e[1]}));i.push([e.id,"html,body{width:100%;height:100%;padding:0;margin:0;background-color:#0a0a0a}body{overflow-x:hidden}.is-image-container{background-repeat:no-repeat;background-size:cover;padding:unset}.column-overlay{width:100%;height:100%;padding:20px;background-color:rgba(0,0,0,.5)}h1{font-size:2.5em;color:#fafafa}h2{font-size:2em;margin-bottom:30px;color:#c8c8c8}.smaller-headline{font-size:1.2em;margin-bottom:15px}.is-default-link{color:#4f86ca}.is-default-link:hover{color:#4f86ca;text-decoration:underline}.is-yellow-link{color:#9c7343}.is-yellow-link:hover{color:#9c7343;text-decoration:underline}.is-fixed-button-link{position:relative;top:5px}.is-default-text-color{color:#969696}.is-color-darker{color:#646464}.is-input-dark{background-color:rgba(90,90,90,.5);color:#c8c8c8;border:1px solid #646464}.is-action-button-margin{margin-right:10px;margin-bottom:10px}@media screen and (max-width: 376px){.is-action-button-margin{margin-right:15px}}.is-underlined{text-decoration:underline}.is-stretched{width:100%}.is-pointer{cursor:pointer}.float-right{float:right}.navbar-item a{color:#c8c8c8}.navbar-item a:hover{color:#fafafa}a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:hover,.navbar-link.is-active{background-color:rgba(255,255,255,0) !important;color:#b4b4b4 !important}.navbar-item,.navbar-burger,.navbar-link{color:#bebebe}.navbar-dropdown{background-color:#323230;padding-top:unset}.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}@media screen and (max-width: 1087px){.navbar-menu{background-color:#323230}}a.navbar-burger:hover{color:#c8c8c8}@media screen and (min-width: 1088px){.navbar-start{flex-grow:1;justify-content:center}}@media screen and (min-width: 1089px){.navbar-item-only-mobile{display:none}}@media screen and (min-width: 1089px){.navbar-dropdown-minwidth{display:block;top:5px;min-width:135px;text-align:center}}@media screen and (min-width: 1089px){.navbar-dropdown-minwidth:not(.is-multiple):not(.is-loading)::after{top:20px !important}}.notification-badge{color:#fff;text-decoration:none;border-radius:2px}.notification-badge .notify-badge{padding:1px 7px;border-radius:50%;background:red;color:#fff;font-size:.8em}@media screen and (min-width: 1089px){.notification-badge .notify-badge{position:absolute;right:-5px;top:4px}}@media screen and (max-width: 1087px){.notification-badge .notify-badge{position:relative;right:-4px;top:-10px}}.notify-badge .notify-badge-count{position:relative;top:-2px}.locations{text-align:center}.locations a{color:#646464}.locations a:hover{color:#646464}.location{position:relative;display:inline-block;width:250px;height:230px;margin-left:10px;margin-right:10px;margin-bottom:23px;background-color:rgba(159,172,132,.2);border:1px solid #c8c8c8}@media screen and (max-width: 830px){.location{width:134px;height:108px}}.location:hover{background-color:rgba(159,172,132,.35)}.location-title{text-align:center;font-size:2.3em;padding-bottom:4px;margin-bottom:20px;background-color:rgba(115,143,100,.9);color:#c3e4a3}@media screen and (max-width: 830px){.location-title{font-size:1.2em}}@media screen and (min-width: 831px){.location-title{padding-bottom:10px}}.location-icon{text-align:center}.location-icon i{color:#99ac97;font-size:8em}@media screen and (max-width: 830px){.location-icon i{font-size:2em}}.margin-vertical{margin-top:20px;margin-bottom:20px}.sorting{position:relative;top:10px;margin-left:10px}.sorting-control{position:relative;display:inline-block;margin-bottom:10px}.sorting-control select,.sorting-control input[type=text]{color:#c8c8c8;background-color:rgba(50,50,50,.9);border:1px solid #646464;margin-right:5px}.sorting-control input[type=text]{height:27px;border-radius:290486px;padding-left:1em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc !important}.plants{margin-top:30px}@media screen and (max-width: 552px){.plants{text-align:center}}.plant-card{position:relative;display:inline-block;width:265px;height:398px;margin-left:10px;margin-right:10px;margin-bottom:20px;background-repeat:no-repeat;background-size:cover;border-radius:10px;box-shadow:0 4px 8px 0 rgba(0,0,0,.3)}@media screen and (max-width: 552px){.plant-card{width:145px;height:257px}}.plant-card:hover{box-shadow:0 0 20px 0 rgba(105,165,85,.95)}.plant-card-overlay{width:100%;height:100%;background:rgba(0,0,0,0);border-radius:10px}.plant-card-overlay:hover{background-color:rgba(0,0,0,.05)}.plant-card-title{position:absolute;bottom:0;z-index:2;width:100%;height:69px;padding-top:17px;background-color:rgba(0,0,0,.5);color:#c8c8c8;text-align:center;font-size:1.2em;border-bottom-left-radius:10px;border-bottom-right-radius:10px}@media screen and (max-width: 552px){.plant-card-title{padding-top:22px;font-size:.9em}}.plant-card-title-with-hint{padding-top:7px}.plant-card-title-second{color:#969696;font-size:.8em}.plant-card-health-state,.plant-card-options{position:absolute;top:7px;right:8px;z-index:2}.plant-card-options{color:#c8c8c8}.plant-card-health-state i{background-color:rgba(0,0,0,.5);padding:5px;border-radius:32%}@media screen and (min-width: 520px){.plant-column{padding:20px}}@media screen and (max-width: 520px){.plant-column{display:inline-block;width:100%;padding-left:15px;padding-right:15px}}@media screen and (max-width: 365px){.plant-column{display:inline-block;padding-left:unset;padding-right:unset}}.plant-column table{width:100%;color:#c8c8c8}.plant-column table strong{color:#c8c8c8}.plant-column thead{background-color:rgba(104,145,194,.5)}.plant-column table td{border:1px solid #c8c8c8;padding:10px}.is-color-yes{color:#73d667}.is-color-no{color:#d44343}.is-not-available{color:#646464;font-style:italic}.plant-notes{position:relative;width:100%;min-width:300px;min-height:75px;padding:10px;color:#c8c8c8;background-color:rgba(90,90,90,.5);font-size:1em;border:1px solid #646464;border-left:3px solid #a37a3d;border-radius:4px}.plant-notes-content{position:relative;display:inline-block;width:90%}.plant-notes-edit{position:relative;display:inline-block;float:right}.plant-photo{position:relative;width:345px;height:543px;background-repeat:no-repeat;background-size:cover;float:right}.plant-photo-overlay{width:100%;height:100%}.plant-photo-overlay:hover{background-color:rgba(0,0,0,.5)}.plant-photo-overlay .plant-photo-edit{visibility:hidden}.plant-photo-overlay:hover .plant-photo-edit{visibility:visible}.plant-photo-edit{position:absolute;top:43%;left:42%}.plant-photo-edit i{color:#c8c8c8}.plant-state-in-good-standing{color:#73d667}.plant-state-overwatered{color:#3669c9}.plant-state-withering{color:#9c7343}.plant-state-infected{color:#ad5656}.plant-warning{margin-top:10px;margin-bottom:10px;color:#d43232}@media screen and (max-width: 510px){.plant-warning{margin-bottom:30px}}.warning-plants{position:relative;width:100%;margin-top:20px;margin-bottom:45px;padding:0 15px 15px 15px;border:1px solid #646464;border-radius:4px}.has-warnings{background-color:rgba(123,50,50,.5)}.is-all-ok{background-color:rgba(50,123,56,.5)}.warning-plants-title{margin-top:20px;margin-bottom:10px;font-size:1.3em;color:#c8c8c8}.warning-plants-title-no-margin-bottom{margin-bottom:unset}.warning-plants-title-margin-top-25{margin-top:25px}.warning-plants-title-centered{text-align:center}.warning-plants-item{color:#969696;margin-bottom:10px}.overdue-tasks{position:relative;width:100%;margin-top:-10px;margin-bottom:45px;padding:0 15px 15px 15px;background-color:rgba(123,50,50,.5);border:1px solid #646464;border-radius:4px}.overdue-tasks-title{margin-top:20px;margin-bottom:10px;font-size:1.3em;color:#c8c8c8}.overdue-tasks-item{color:#969696;margin-bottom:10px}.log{position:relative;width:100%;margin-top:23px;margin-bottom:45px;padding:0 15px 15px 15px;border:1px solid #2b2b2b;background-color:#000;border-radius:4px}.log-title{margin-top:10px;margin-bottom:10px;font-size:1.3em;color:#00d73f}.log-content{max-height:200px;overflow-y:auto}.log-item{color:#969696;margin-bottom:10px}.plant-gallery{position:relative;margin-top:10px;margin-bottom:10px}.plant-gallery-title{margin-bottom:20px;font-size:1.5em;color:#969696}.plant-gallery-upload{margin-bottom:20px}.plant-gallery-photos{margin-top:30px}.plant-gallery-photos strong{color:#646464}.plant-gallery-item{position:relative;display:inline-block;width:315px;height:auto;margin-left:10px;margin-right:10px;margin-bottom:30px;background-color:#c8c8c8;border-radius:4px}.plant-gallery-item-header{padding:10px}.plant-gallery-item-header-label{display:inline-block;color:#000}.plant-gallery-item-header-action{display:inline-block;float:right}.plant-gallery-item-header-action i{color:#ad5656}.plant-gallery-item-header-action i:hover{color:#ad5a5a}.plant-gallery-item-photo{position:relative}.plant-gallery-item-photo-overlay{position:absolute;z-index:2;width:100%;height:98%}.plant-gallery-item-photo-overlay:hover{background-color:rgba(0,0,0,.5)}.plant-gallery-item-photo-overlay .plant-gallery-item-photo-image{visibility:hidden}.plant-gallery-item-photo-overlay:hover .plant-gallery-item-photo-image{visibility:visible}.plant-gallery-item-footer{position:relative;top:-3px;padding:10px;color:#646464}.stats{position:relative;margin-top:10px;margin-bottom:25px;text-align:center}.stats-item{position:relative;display:inline-block;width:194px;height:135px;margin-left:10px;margin-right:10px;margin-bottom:20px;padding:20px;background-color:rgba(150,150,150,.3);border:1px solid #c8c8c8;border-radius:4px;border-left:3px solid #9fa52d}@media screen and (max-width: 512px){.stats-item{width:149px}}.stats-item-count{color:#fafafa;font-size:2em;text-align:center}.stats-item-label{color:#c8c8c8;font-size:1.4em;text-align:center}.plant-tags{position:relative}.plant-tags-content{position:relative;display:inline-block;width:90%}.plant-tags-edit{position:relative;display:inline-block;float:right}.plant-tags-item{position:relative;display:inline-block;min-width:90px;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:9px;margin-left:5px;margin-right:5px;margin-bottom:16px;text-align:center;background-color:rgba(200,200,200,.3);border:1px solid #969696;border-radius:10px}.plant-tags-item:hover{background-color:rgba(200,200,200,.5)}.plant-tags-item a{color:#bebebe}.plant-tags-item a:hover{color:#e6e6e6}.tasks{margin-bottom:50px}.task{position:relative;display:inline-block;width:45%;height:auto;margin-left:10px;margin-right:10px;margin-bottom:29px;background-color:rgba(50,50,50,.76);border:1px solid #505050;border-radius:4px}@media screen and (max-width: 580px){.task{width:95%}}.task-header{position:relative;width:100%;height:50px;padding:10px;border-top-left-radius:4px;border-top-right-radius:4px;background-color:#191919}.task-header-title{position:relative;display:inline-block;top:-5px;font-size:1.5em;color:#c8c8c8}.task-header-action{position:relative;display:inline-block;float:right}.task-header-action a{color:#969696}.task-description{position:relative;height:150px;margin-bottom:43px;padding:10px;font-size:1em;color:#969696;overflow-y:auto}.task-description pre{background-color:inherit;color:inherit;white-space:pre-wrap;word-wrap:break-word}.task-footer{position:absolute;bottom:0;padding:10px;width:100%;background-color:#0a0a0a;border-bottom-left-radius:4px;border-bottom-right-radius:4px;font-size:.8em}.task-footer-date{position:relative;display:inline-block;width:43%}.task-footer-due{position:relative;display:inline-block}.is-task-overdue{color:#d43232}.task-footer-action{position:relative;display:inline-block;float:right}.task-footer-action a{color:#969696}.inventory{margin-bottom:50px}.inventory-item-group{position:relative;width:100%;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:5px;background-color:rgba(200,200,200,.76);border:1px solid #5a5a5a}.inventory-item{position:relative;width:100%;padding-left:10px;padding-right:10px;padding-top:5px;padding-bottom:5px;background-color:rgba(50,50,50,.76);border:1px solid #5a5a5a}.inventory-item-header{position:relative}.inventory-item-name{position:relative;display:inline-block;min-width:50%}.inventory-item-name a{color:#969696}.inventory-item-name a:hover{color:#969696}.inventory-item-amount{position:relative;display:inline-block}.inventory-item-amount i{color:#969696}.inventory-item-amount span{color:#d7d7d7}.is-inventory-item-empty{color:#d43232 !important}.inventory-item-actions{position:relative;display:inline-block;float:right}.inventory-item-actions i{color:#646464}.inventory-item-body{position:relative;height:0;opacity:0;overflow:hidden;-webkit-transition:opacity 1s ease-out;-moz-transition:opacity 1s ease-out;transition:opacity 1s ease-out}.inventory-item-body.expand{height:auto;opacity:1}.inventory-item-description{position:relative;color:#646464;margin-top:10px;margin-bottom:10px}.inventory-item-description pre{background-color:inherit;color:inherit;white-space:normal}.inventory-item-photo{position:relative}.inventory-item-author{position:relative;color:#646464;margin-top:10px}.inventory-groups{width:100%}.inventory-groups a{color:#323232}.inventory-groups a:hover{color:#323232;text-decoration:underline}.chat-message{position:relative;width:90%;padding:15px;margin-bottom:20px;background-color:rgba(200,200,200,.5);border-radius:10px}.chat-message-right{margin-left:10%;background-color:rgba(115,143,100,.9)}.chat-message-user{position:relative;font-size:1.2em;margin-bottom:10px}.chat-message-new{position:relative;display:inline-block;background-color:#d48243;border:1px solid #5c4019;color:#fafafa;border-radius:4px;padding:5px;font-size:.5em;text-transform:uppercase;float:right}.chat-message-content{position:relative}.chat-message-content pre{background-color:rgba(0,0,0,0);color:#fff}.chat-message-info{position:relative;margin-top:10px;font-size:.76em;color:#9b9b9b}.chat-typing-indicator{display:none;background-color:rgba(50,50,50,.5)}.chat-typing-indicator.visible{display:block}.chat-user-list{position:relative;margin-top:10px;margin-bottom:23px;color:#5cff00}.scroll-to-top{position:fixed;z-index:3;bottom:12px;right:12px}.scroll-to-top-inner{background-color:#344638;border-radius:50%;padding:12px;box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.scroll-to-top-inner a{color:#c8c8c8}.auth-main{width:100%;height:100%;background-repeat:no-repeat;background-size:cover}.auth-overlay{width:100%;height:100%;background-color:rgba(0,0,0,.5)}.auth-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center;padding:20px}.auth-header{position:relative;margin-bottom:20px}.auth-header img{position:relative;width:128px;height:128px;border-radius:50%}.auth-header h1{font-size:2.5em;font-family:Quicksand,Verdana,Geneva,Tahoma,sans-serif;font-weight:bold;color:#969696}.auth-info{position:relative;margin-bottom:43px}.auth-info-error{color:#9a4945}.auth-info-success{color:#459a53}.auth-form{position:relative}.auth-form input[type=email],.auth-form input[type=password]{color:#969696;background-color:#323232}.auth-form input[type=email]::placeholder,.auth-form input[type=password]::placeholder{color:#c8c8c8}.auth-form input[type=submit]{width:100%}.auth-help{position:relative;margin-top:20px}.auth-help a{color:#3669cb}.auth-help a:hover{color:#3669cb;text-decoration:underline}.reset-main{width:100%;height:100%;background-repeat:no-repeat;background-size:cover}.reset-overlay{width:100%;height:100%;background-color:rgba(0,0,0,.5)}.reset-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);text-align:center;padding:20px}.reset-content h1{margin-bottom:30px;line-height:1}.reset-info{position:relative;margin-bottom:43px}.reset-info-error{color:#9a4945}.reset-info-success{color:#459a53}.reset-form{position:relative}.reset-form input[type=email],.reset-form input[type=password]{color:#969696;background-color:#323232}.reset-form input[type=email]::placeholder,.reset-form input[type=password]::placeholder{color:#c8c8c8}.reset-form input[type=submit]{width:100%}.admin-environment{position:relative}.admin-environment h2{margin-top:20px;margin-bottom:10px}.admin-environment label,.admin-environment span{color:#969696}.admin-environment input,.admin-environment select{color:#969696;background-color:#323232}.admin-media{position:relative;width:100%}.admin-media h2{margin-top:20px;margin-bottom:20px}.admin-media label{color:#969696}.admin-media input{color:#969696;background-color:#323232}.admin-media input[type=submit]{margin-top:10px;margin-bottom:20px}.admin-users{position:relative;width:100%}.admin-users h2{margin-top:20px;margin-bottom:20px}.admin-users-list{position:relative}.admin-user-account{position:relative;margin-bottom:15px}.admin-user-account label,.admin-user-account span{color:#969696}.admin-user-account input,.admin-user-account select{color:#969696;background-color:#323232}.admin-user-account-item{position:relative;display:inline-block;margin-left:5px;margin-right:5px}.admin-user-account-item-input{width:30%}.admin-user-account-actions{position:relative;display:inline-block}.admin-user-account-item-centered{text-align:center}.admin-user-account-action-item{position:relative}.admin-users-actions{position:relative;margin-top:20px}.admin-locations{position:relative;width:100%}.admin-locations h2{margin-top:20px;margin-bottom:20px}.admin-locations-list{position:relative}.admin-location{position:relative;margin-bottom:15px}.admin-location label,.admin-location span{color:#969696}.admin-location input{color:#969696;background-color:#323232}.admin-location-item{position:relative;display:inline-block;margin-left:5px;margin-right:5px}.admin-location-item-input{width:30%}.admin-location-actions{position:relative;display:inline-block}.admin-location-item-centered{text-align:center}.admin-location-action-item{position:relative}.admin-locations-actions{position:relative;margin-top:20px}.version-check{position:relative;margin-top:30px}.version-info{position:relative;padding:20px;margin-top:30px;color:#fafafa;background-color:rgba(102,202,160,.76);border:1px solid #96ecc8;border-radius:10px}.version-info a{color:#84ff7b;font-weight:bold}.version-info a:hover{color:#84ff7b;text-decoration:underline}",""]);const r=i},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,o){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(o)for(var r=0;r{var o=n(379),i=n(959);"string"==typeof(i=i.__esModule?i.default:i)&&(i=[[e.id,i,""]]);o(i,{insert:"head",singleton:!1}),e.exports=i.locals||{}},379:(e,t,n)=>{"use strict";var o,i=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),r=[];function a(e){for(var t=-1,n=0;n{"use strict";function o(e,t){return function(){return e.apply(t,arguments)}}const{toString:i}=Object.prototype,{getPrototypeOf:r}=Object,a=(s=Object.create(null),e=>{const t=i.call(e);return s[t]||(s[t]=t.slice(8,-1).toLowerCase())});var s;const l=e=>(e=e.toLowerCase(),t=>a(t)===e),c=e=>t=>typeof t===e,{isArray:d}=Array,u=c("undefined"),p=l("ArrayBuffer"),m=c("string"),h=c("function"),f=c("number"),g=e=>null!==e&&"object"==typeof e,b=e=>{if("object"!==a(e))return!1;const t=r(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},y=l("Date"),w=l("File"),v=l("Blob"),x=l("FileList"),E=l("URLSearchParams");function k(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let o,i;if("object"!=typeof e&&(e=[e]),d(e))for(o=0,i=e.length;o0;)if(o=n[i],t===o.toLowerCase())return o;return null}const S="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,R=e=>!u(e)&&e!==S,O=(I="undefined"!=typeof Uint8Array&&r(Uint8Array),e=>I&&e instanceof I);var I;const C=l("HTMLFormElement"),A=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),B=l("RegExp"),P=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};k(n,((n,i)=>{let r;!1!==(r=t(n,i,e))&&(o[i]=r||n)})),Object.defineProperties(e,o)},j="abcdefghijklmnopqrstuvwxyz",N="0123456789",L={DIGIT:N,ALPHA:j,ALPHA_DIGIT:j+j.toUpperCase()+N},U=l("AsyncFunction");var _={isArray:d,isArrayBuffer:p,isBuffer:function(e){return null!==e&&!u(e)&&null!==e.constructor&&!u(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=a(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&p(e.buffer),t},isString:m,isNumber:f,isBoolean:e=>!0===e||!1===e,isObject:g,isPlainObject:b,isUndefined:u,isDate:y,isFile:w,isBlob:v,isRegExp:B,isFunction:h,isStream:e=>g(e)&&h(e.pipe),isURLSearchParams:E,isTypedArray:O,isFileList:x,forEach:k,merge:function e(){const{caseless:t}=R(this)&&this||{},n={},o=(o,i)=>{const r=t&&T(n,i)||i;b(n[r])&&b(o)?n[r]=e(n[r],o):b(o)?n[r]=e({},o):d(o)?n[r]=o.slice():n[r]=o};for(let e=0,t=arguments.length;e(k(t,((t,i)=>{n&&h(t)?e[i]=o(t,n):e[i]=t}),{allOwnKeys:i}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,o)=>{let i,a,s;const l={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),a=i.length;a-- >0;)s=i[a],o&&!o(s,e,t)||l[s]||(t[s]=e[s],l[s]=!0);e=!1!==n&&r(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:a,kindOfTest:l,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return-1!==o&&o===n},toArray:e=>{if(!e)return null;if(d(e))return e;let t=e.length;if(!f(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const o=[];for(;null!==(n=e.exec(t));)o.push(n);return o},isHTMLForm:C,hasOwnProperty:A,hasOwnProp:A,reduceDescriptors:P,freezeMethods:e=>{P(e,((t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const o=e[n];h(o)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},o=e=>{e.forEach((e=>{n[e]=!0}))};return d(e)?o(e):o(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:T,global:S,isContextDefined:R,ALPHABET:L,generateString:(e=16,t=L.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n},isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,o)=>{if(g(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[o]=e;const i=d(e)?[]:{};return k(e,((e,t)=>{const r=n(e,o+1);!u(r)&&(i[t]=r)})),t[o]=void 0,i}}return e};return n(e,0)},isAsyncFn:U,isThenable:e=>e&&(g(e)||h(e))&&h(e.then)&&h(e.catch)};function D(e,t,n,o,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),i&&(this.response=i)}_.inherits(D,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:_.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const F=D.prototype,z={};function M(e){return _.isPlainObject(e)||_.isArray(e)}function q(e){return _.endsWith(e,"[]")?e.slice(0,-2):e}function H(e,t,n){return e?e.concat(t).map((function(e,t){return e=q(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{z[e]={value:e}})),Object.defineProperties(D,z),Object.defineProperty(F,"isAxiosError",{value:!0}),D.from=(e,t,n,o,i,r)=>{const a=Object.create(F);return _.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),D.call(a,e.message,t,n,o,i),a.cause=e,a.name=e.name,r&&Object.assign(a,r),a};const J=_.toFlatObject(_,{},null,(function(e){return/^is[A-Z]/.test(e)}));function V(e,t,n){if(!_.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const o=(n=_.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!_.isUndefined(t[e])}))).metaTokens,i=n.visitor||c,r=n.dots,a=n.indexes,s=(n.Blob||"undefined"!=typeof Blob&&Blob)&&_.isSpecCompliantForm(t);if(!_.isFunction(i))throw new TypeError("visitor must be a function");function l(e){if(null===e)return"";if(_.isDate(e))return e.toISOString();if(!s&&_.isBlob(e))throw new D("Blob is not supported. Use a Buffer instead.");return _.isArrayBuffer(e)||_.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,i){let s=e;if(e&&!i&&"object"==typeof e)if(_.endsWith(n,"{}"))n=o?n:n.slice(0,-2),e=JSON.stringify(e);else if(_.isArray(e)&&function(e){return _.isArray(e)&&!e.some(M)}(e)||(_.isFileList(e)||_.endsWith(n,"[]"))&&(s=_.toArray(e)))return n=q(n),s.forEach((function(e,o){!_.isUndefined(e)&&null!==e&&t.append(!0===a?H([n],o,r):null===a?n:n+"[]",l(e))})),!1;return!!M(e)||(t.append(H(i,n,r),l(e)),!1)}const d=[],u=Object.assign(J,{defaultVisitor:c,convertValue:l,isVisitable:M});if(!_.isObject(e))throw new TypeError("data must be an object");return function e(n,o){if(!_.isUndefined(n)){if(-1!==d.indexOf(n))throw Error("Circular reference detected in "+o.join("."));d.push(n),_.forEach(n,(function(n,r){!0===(!(_.isUndefined(n)||null===n)&&i.call(t,n,_.isString(r)?r.trim():r,o,u))&&e(n,o?o.concat(r):[r])})),d.pop()}}(e),t}function W(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function K(e,t){this._pairs=[],e&&V(e,this,t)}const G=K.prototype;function X(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function $(e,t,n){if(!t)return e;const o=n&&n.encode||X,i=n&&n.serialize;let r;if(r=i?i(t,n):_.isURLSearchParams(t)?t.toString():new K(t,n).toString(o),r){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+r}return e}G.append=function(e,t){this._pairs.push([e,t])},G.toString=function(e){const t=e?function(t){return e.call(this,t,W)}:W;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Q=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){_.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Z={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Y={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:K,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const ee="undefined"!=typeof window&&"undefined"!=typeof document,te=(ne="undefined"!=typeof navigator&&navigator.product,ee&&["ReactNative","NativeScript","NS"].indexOf(ne)<0);var ne;const oe="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts;var ie={...Object.freeze({__proto__:null,hasBrowserEnv:ee,hasStandardBrowserWebWorkerEnv:oe,hasStandardBrowserEnv:te}),...Y};function re(e){function t(e,n,o,i){let r=e[i++];const a=Number.isFinite(+r),s=i>=e.length;return r=!r&&_.isArray(o)?o.length:r,s?(_.hasOwnProp(o,r)?o[r]=[o[r],n]:o[r]=n,!a):(o[r]&&_.isObject(o[r])||(o[r]=[]),t(e,n,o[r],i)&&_.isArray(o[r])&&(o[r]=function(e){const t={},n=Object.keys(e);let o;const i=n.length;let r;for(o=0;o{t(function(e){return _.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),o,n,0)})),n}return null}const ae={transitional:Z,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",o=n.indexOf("application/json")>-1,i=_.isObject(e);if(i&&_.isHTMLForm(e)&&(e=new FormData(e)),_.isFormData(e))return o&&o?JSON.stringify(re(e)):e;if(_.isArrayBuffer(e)||_.isBuffer(e)||_.isStream(e)||_.isFile(e)||_.isBlob(e))return e;if(_.isArrayBufferView(e))return e.buffer;if(_.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let r;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return V(e,new ie.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,o){return ie.isNode&&_.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((r=_.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return V(r?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||o?(t.setContentType("application/json",!1),function(e,t,n){if(_.isString(e))try{return(0,JSON.parse)(e),_.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||ae.transitional,n=t&&t.forcedJSONParsing,o="json"===this.responseType;if(e&&_.isString(e)&&(n&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw D.from(e,D.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ie.classes.FormData,Blob:ie.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};_.forEach(["delete","get","head","post","put","patch"],(e=>{ae.headers[e]={}}));var se=ae;const le=_.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ce=Symbol("internals");function de(e){return e&&String(e).trim().toLowerCase()}function ue(e){return!1===e||null==e?e:_.isArray(e)?e.map(ue):String(e)}function pe(e,t,n,o,i){return _.isFunction(o)?o.call(this,t,n):(i&&(t=n),_.isString(t)?_.isString(o)?-1!==t.indexOf(o):_.isRegExp(o)?o.test(t):void 0:void 0)}class me{constructor(e){e&&this.set(e)}set(e,t,n){const o=this;function i(e,t,n){const i=de(t);if(!i)throw new Error("header name must be a non-empty string");const r=_.findKey(o,i);(!r||void 0===o[r]||!0===n||void 0===n&&!1!==o[r])&&(o[r||t]=ue(e))}const r=(e,t)=>_.forEach(e,((e,n)=>i(e,n,t)));return _.isPlainObject(e)||e instanceof this.constructor?r(e,t):_.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?r((e=>{const t={};let n,o,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),n=e.substring(0,i).trim().toLowerCase(),o=e.substring(i+1).trim(),!n||t[n]&&le[n]||("set-cookie"===n?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)})),t})(e),t):null!=e&&i(t,e,n),this}get(e,t){if(e=de(e)){const n=_.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}(e);if(_.isFunction(t))return t.call(this,e,n);if(_.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=de(e)){const n=_.findKey(this,e);return!(!n||void 0===this[n]||t&&!pe(0,this[n],n,t))}return!1}delete(e,t){const n=this;let o=!1;function i(e){if(e=de(e)){const i=_.findKey(n,e);!i||t&&!pe(0,n[i],i,t)||(delete n[i],o=!0)}}return _.isArray(e)?e.forEach(i):i(e),o}clear(e){const t=Object.keys(this);let n=t.length,o=!1;for(;n--;){const i=t[n];e&&!pe(0,this[i],i,e,!0)||(delete this[i],o=!0)}return o}normalize(e){const t=this,n={};return _.forEach(this,((o,i)=>{const r=_.findKey(n,i);if(r)return t[r]=ue(o),void delete t[i];const a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(i):String(i).trim();a!==i&&delete t[i],t[a]=ue(o),n[a]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return _.forEach(this,((n,o)=>{null!=n&&!1!==n&&(t[o]=e&&_.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[ce]=this[ce]={accessors:{}}).accessors,n=this.prototype;function o(e){const o=de(e);t[o]||(function(e,t){const n=_.toCamelCase(" "+t);["get","set","has"].forEach((o=>{Object.defineProperty(e,o+n,{value:function(e,n,i){return this[o].call(this,t,e,n,i)},configurable:!0})}))}(n,e),t[o]=!0)}return _.isArray(e)?e.forEach(o):o(e),this}}me.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),_.reduceDescriptors(me.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),_.freezeMethods(me);var he=me;function fe(e,t){const n=this||se,o=t||n,i=he.from(o.headers);let r=o.data;return _.forEach(e,(function(e){r=e.call(n,r,i.normalize(),t?t.status:void 0)})),i.normalize(),r}function ge(e){return!(!e||!e.__CANCEL__)}function be(e,t,n){D.call(this,null==e?"canceled":e,D.ERR_CANCELED,t,n),this.name="CanceledError"}_.inherits(be,D,{__CANCEL__:!0});var ye=ie.hasStandardBrowserEnv?{write(e,t,n,o,i,r){const a=[e+"="+encodeURIComponent(t)];_.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),_.isString(o)&&a.push("path="+o),_.isString(i)&&a.push("domain="+i),!0===r&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function we(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var ve=ie.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function o(n){let o=n;return e&&(t.setAttribute("href",o),o=t.href),t.setAttribute("href",o),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=o(window.location.href),function(e){const t=_.isString(e)?o(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};function xe(e,t){let n=0;const o=function(e,t){e=e||10;const n=new Array(e),o=new Array(e);let i,r=0,a=0;return t=void 0!==t?t:1e3,function(s){const l=Date.now(),c=o[a];i||(i=l),n[r]=s,o[r]=l;let d=a,u=0;for(;d!==r;)u+=n[d++],d%=e;if(r=(r+1)%e,r===a&&(a=(a+1)%e),l-i{const r=i.loaded,a=i.lengthComputable?i.total:void 0,s=r-n,l=o(s);n=r;const c={loaded:r,total:a,progress:a?r/a:void 0,bytes:s,rate:l||void 0,estimated:l&&a&&r<=a?(a-r)/l:void 0,event:i};c[t?"download":"upload"]=!0,e(c)}}const Ee={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let o=e.data;const i=he.from(e.headers).normalize();let r,a,{responseType:s,withXSRFToken:l}=e;function c(){e.cancelToken&&e.cancelToken.unsubscribe(r),e.signal&&e.signal.removeEventListener("abort",r)}if(_.isFormData(o))if(ie.hasStandardBrowserEnv||ie.hasStandardBrowserWebWorkerEnv)i.setContentType(!1);else if(!1!==(a=i.getContentType())){const[e,...t]=a?a.split(";").map((e=>e.trim())).filter(Boolean):[];i.setContentType([e||"multipart/form-data",...t].join("; "))}let d=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(t+":"+n))}const u=we(e.baseURL,e.url);function p(){if(!d)return;const o=he.from("getAllResponseHeaders"in d&&d.getAllResponseHeaders());!function(e,t,n){const o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new D("Request failed with status code "+n.status,[D.ERR_BAD_REQUEST,D.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),c()}),(function(e){n(e),c()}),{data:s&&"text"!==s&&"json"!==s?d.response:d.responseText,status:d.status,statusText:d.statusText,headers:o,config:e,request:d}),d=null}if(d.open(e.method.toUpperCase(),$(u,e.params,e.paramsSerializer),!0),d.timeout=e.timeout,"onloadend"in d?d.onloadend=p:d.onreadystatechange=function(){d&&4===d.readyState&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))&&setTimeout(p)},d.onabort=function(){d&&(n(new D("Request aborted",D.ECONNABORTED,e,d)),d=null)},d.onerror=function(){n(new D("Network Error",D.ERR_NETWORK,e,d)),d=null},d.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const o=e.transitional||Z;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new D(t,o.clarifyTimeoutError?D.ETIMEDOUT:D.ECONNABORTED,e,d)),d=null},ie.hasStandardBrowserEnv&&(l&&_.isFunction(l)&&(l=l(e)),l||!1!==l&&ve(u))){const t=e.xsrfHeaderName&&e.xsrfCookieName&&ye.read(e.xsrfCookieName);t&&i.set(e.xsrfHeaderName,t)}void 0===o&&i.setContentType(null),"setRequestHeader"in d&&_.forEach(i.toJSON(),(function(e,t){d.setRequestHeader(t,e)})),_.isUndefined(e.withCredentials)||(d.withCredentials=!!e.withCredentials),s&&"json"!==s&&(d.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&d.addEventListener("progress",xe(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",xe(e.onUploadProgress)),(e.cancelToken||e.signal)&&(r=t=>{d&&(n(!t||t.type?new be(null,e,d):t),d.abort(),d=null)},e.cancelToken&&e.cancelToken.subscribe(r),e.signal&&(e.signal.aborted?r():e.signal.addEventListener("abort",r)));const m=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(u);m&&-1===ie.protocols.indexOf(m)?n(new D("Unsupported protocol "+m+":",D.ERR_BAD_REQUEST,e)):d.send(o||null)}))}};_.forEach(Ee,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const ke=e=>`- ${e}`,Te=e=>_.isFunction(e)||null===e||!1===e;var Se=e=>{e=_.isArray(e)?e:[e];const{length:t}=e;let n,o;const i={};for(let r=0;r`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new D("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(ke).join("\n"):" "+ke(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return o};function Re(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new be(null,e)}function Oe(e){return Re(e),e.headers=he.from(e.headers),e.data=fe.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Se(e.adapter||se.adapter)(e).then((function(t){return Re(e),t.data=fe.call(e,e.transformResponse,t),t.headers=he.from(t.headers),t}),(function(t){return ge(t)||(Re(e),t&&t.response&&(t.response.data=fe.call(e,e.transformResponse,t.response),t.response.headers=he.from(t.response.headers))),Promise.reject(t)}))}const Ie=e=>e instanceof he?e.toJSON():e;function Ce(e,t){t=t||{};const n={};function o(e,t,n){return _.isPlainObject(e)&&_.isPlainObject(t)?_.merge.call({caseless:n},e,t):_.isPlainObject(t)?_.merge({},t):_.isArray(t)?t.slice():t}function i(e,t,n){return _.isUndefined(t)?_.isUndefined(e)?void 0:o(void 0,e,n):o(e,t,n)}function r(e,t){if(!_.isUndefined(t))return o(void 0,t)}function a(e,t){return _.isUndefined(t)?_.isUndefined(e)?void 0:o(void 0,e):o(void 0,t)}function s(n,i,r){return r in t?o(n,i):r in e?o(void 0,n):void 0}const l={url:r,method:r,data:r,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:(e,t)=>i(Ie(e),Ie(t),!0)};return _.forEach(Object.keys(Object.assign({},e,t)),(function(o){const r=l[o]||i,a=r(e[o],t[o],o);_.isUndefined(a)&&r!==s||(n[o]=a)})),n}const Ae={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Ae[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Be={};Ae.transitional=function(e,t,n){function o(e,t){return"[Axios v1.6.2] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,i,r)=>{if(!1===e)throw new D(o(i," has been removed"+(t?" in "+t:"")),D.ERR_DEPRECATED);return t&&!Be[i]&&(Be[i]=!0,console.warn(o(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,i,r)}};var Pe={assertOptions:function(e,t,n){if("object"!=typeof e)throw new D("options must be an object",D.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let i=o.length;for(;i-- >0;){const r=o[i],a=t[r];if(a){const t=e[r],n=void 0===t||a(t,r,e);if(!0!==n)throw new D("option "+r+" must be "+n,D.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new D("Unknown option "+r,D.ERR_BAD_OPTION)}},validators:Ae};const je=Pe.validators;class Ne{constructor(e){this.defaults=e,this.interceptors={request:new Q,response:new Q}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Ce(this.defaults,t);const{transitional:n,paramsSerializer:o,headers:i}=t;void 0!==n&&Pe.assertOptions(n,{silentJSONParsing:je.transitional(je.boolean),forcedJSONParsing:je.transitional(je.boolean),clarifyTimeoutError:je.transitional(je.boolean)},!1),null!=o&&(_.isFunction(o)?t.paramsSerializer={serialize:o}:Pe.assertOptions(o,{encode:je.function,serialize:je.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let r=i&&_.merge(i.common,i[t.method]);i&&_.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=he.concat(r,i);const a=[];let s=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(s=s&&e.synchronous,a.unshift(e.fulfilled,e.rejected))}));const l=[];let c;this.interceptors.response.forEach((function(e){l.push(e.fulfilled,e.rejected)}));let d,u=0;if(!s){const e=[Oe.bind(this),void 0];for(e.unshift.apply(e,a),e.push.apply(e,l),d=e.length,c=Promise.resolve(t);u{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const o=new Promise((e=>{n.subscribe(e),t=e})).then(e);return o.cancel=function(){n.unsubscribe(t)},o},e((function(e,o,i){n.reason||(n.reason=new be(e,o,i),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new Ue((function(t){e=t})),cancel:e}}}var _e=Ue;const De={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(De).forEach((([e,t])=>{De[t]=e}));var Fe=De;const ze=function e(t){const n=new Le(t),i=o(Le.prototype.request,n);return _.extend(i,Le.prototype,n,{allOwnKeys:!0}),_.extend(i,n,null,{allOwnKeys:!0}),i.create=function(n){return e(Ce(t,n))},i}(se);ze.Axios=Le,ze.CanceledError=be,ze.CancelToken=_e,ze.isCancel=ge,ze.VERSION="1.6.2",ze.toFormData=V,ze.AxiosError=D,ze.Cancel=ze.CanceledError,ze.all=function(e){return Promise.all(e)},ze.spread=function(e){return function(t){return e.apply(null,t)}},ze.isAxiosError=function(e){return _.isObject(e)&&!0===e.isAxiosError},ze.mergeConfig=Ce,ze.AxiosHeaders=he,ze.formToJSON=e=>re(_.isHTMLForm(e)?new FormData(e):e),ze.getAdapter=Se,ze.HttpStatusCode=Fe,ze.default=ze,e.exports=ze}},t={};function n(o){var i=t[o];if(void 0!==i)return i.exports;var r=t[o]={id:o,exports:{}};return e[o](r,r.exports,n),r.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0,(()=>{"use strict";n(488),window.axios=n(218),window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest",window.constChatMessageQueryRefreshRate=15e3,window.constChatUserListRefreshRate=15e3,window.constChatTypingRefreshRate=2e3,window.vue=new Vue({el:"#app",data:{bShowAddPlant:!1,bShowEditText:!1,bShowEditBoolean:!1,bShowEditInteger:!1,bShowEditDate:!1,bShowEditCombo:!1,bShowEditPhoto:!1,bShowEditLinkText:!1,bShowUploadPhoto:!1,bShowCreateTask:!1,bShowEditTask:!1,bShowEditPreferences:!1,bShowAddInventoryItem:!1,bShowEditInventoryItem:!1,bShowManageGroups:!1,bShowRestorePassword:!1,bShowCreateNewUser:!1,bShowCreateNewLocation:!1,bShowRemoveLocation:!1,comboLocation:[],comboCuttingMonth:[],comboLightLevel:[],comboHealthState:[],confirmPhotoRemoval:"Are you sure you want to remove this photo?",confirmPlantRemoval:"Are you sure you want to remove this plant?",confirmSetAllWatered:"Are you sure you want to update the last watered date of all these plants?",confirmInventoryItemRemoval:"Are you sure you want to remove this item?",confirmPlantAddHistory:"Please confirm if you want to do this action.",confirmPlantRemoveHistory:"Please confirm if you want to do this action.",newChatMessage:"New",currentlyOnline:"Currently online: ",chatTypingEnable:!1,chatTypingTimer:null,chatTypingHide:null,chatTypingCounter:1},methods:{ajaxRequest:function(e,t,n={},o=function(e){},i=function(){},r={}){let a=window.axios.get;"post"==e?a=window.axios.post:"patch"==e?a=window.axios.patch:"delete"==e&&(a=window.axios.delete),a(t,n,r).then((function(e){o(e.data)})).catch((function(e){console.log(e)})).finally((function(){i()}))},initNavBar:function(){const e=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);e.length>0&&e.forEach((e=>{e.addEventListener("click",(()=>{const t=e.dataset.target,n=document.getElementById(t);e.classList.toggle("is-active"),n.classList.toggle("is-active")}))}))},showEditText:function(e,t,n,o=""){document.getElementById("inpEditTextPlantId").value=e,document.getElementById("inpEditTextAttribute").value=t,document.getElementById("inpEditTextValue").value=n,document.getElementById("inpEditTextAnchor").value=o,window.vue.bShowEditText=!0},showEditBoolean:function(e,t,n,o){document.getElementById("inpEditBooleanPlantId").value=e,document.getElementById("inpEditBooleanAttribute").value=t,document.getElementById("property-hint").innerHTML=n,document.getElementById("inpEditBooleanValue").checked=o,window.vue.bShowEditBoolean=!0},showEditInteger:function(e,t,n){document.getElementById("inpEditIntegerPlantId").value=e,document.getElementById("inpEditIntegerAttribute").value=t,document.getElementById("inpEditIntegerValue").value=n,window.vue.bShowEditInteger=!0},showEditDate:function(e,t,n){document.getElementById("inpEditDatePlantId").value=e,document.getElementById("inpEditDateAttribute").value=t,document.getElementById("inpEditDateValue").value=n,window.vue.bShowEditDate=!0},showEditCombo:function(e,t,n,o){if(document.getElementById("inpEditComboPlantId").value=e,document.getElementById("inpEditComboAttribute").value=t,"object"!=typeof n)return void console.error("Invalid combo specified");let i=document.getElementById("selEditCombo");if(i){for(let e=i.options.length-1;e>=0;e--)i.remove(e);n.forEach((function(e,t){let n=document.createElement("option");n.value=e.ident,n.text=e.label,i.add(n)}))}document.getElementById("selEditCombo").value=o,window.vue.bShowEditCombo=!0},showEditLinkText:function(e,t,n){document.getElementById("inpEditLinkTextPlantId").value=e,document.getElementById("inpEditLinkTextValue").value=t,document.getElementById("inpEditLinkTextLink").value=n,window.vue.bShowEditLinkText=!0},showEditPhoto:function(e,t){document.getElementById("inpEditPhotoPlantId").value=e,document.getElementById("inpEditPhotoAttribute").value=t,window.vue.bShowEditPhoto=!0},showPhotoUpload:function(e){document.getElementById("inpUploadPhotoPlantId").value=e,window.vue.bShowUploadPhoto=!0},deletePhoto:function(e,t){confirm(window.vue.confirmPhotoRemoval)&&window.vue.ajaxRequest("post",window.location.origin+"/plants/details/gallery/photo/remove",{photo:e},(function(e){if(200==e.code){let e=document.getElementById(t);e&&e.remove()}else alert(e.msg)}))},markHistorical:function(e){confirm(window.vue.confirmPlantAddHistory)&&(location.href=window.location.origin+"/plants/history/add?plant="+e)},unmarkHistorical:function(e){confirm(window.vue.confirmPlantRemoveHistory)&&(location.href=window.location.origin+"/plants/history/remove?plant="+e)},deletePlant:function(e,t){confirm(window.vue.confirmPlantRemoval)&&(location.href=window.location.origin+"/plants/remove?plant="+e+"&location="+t)},toggleTaskStatus:function(e){window.vue.ajaxRequest("post",window.location.origin+"/tasks/toggle",{task:e},(function(t){if(200==t.code){let t=document.getElementById("task-item-"+e);t&&t.remove()}else alert(t.msg)}))},editTask:function(e){document.getElementById("inpEditTaskId").value=e,document.getElementById("inpEditTaskTitle").value=document.getElementById("task-item-title-"+e).innerText,document.getElementById("inpEditTaskDescription").value=document.getElementById("task-item-description-"+e).innerText,document.getElementById("inpEditTaskDueDate").value=document.getElementById("task-item-due-"+e).innerText,window.vue.bShowEditTask=!0},updateLastWatered:function(e){confirm(window.vue.confirmSetAllWatered)&&(location.href=window.location.origin+"/plants/location/"+e+"/water")},expandInventoryItem:function(e){let t=document.getElementById(e);t&&t.classList.toggle("expand")},incrementInventoryItem:function(e,t){window.vue.ajaxRequest("get",window.location.origin+"/inventory/amount/increment?id="+e,{},(function(e){if(200==e.code){let n=document.getElementById(t);n&&(n.innerHTML=e.amount,0==e.amount?n.classList.add("is-inventory-item-empty"):n.classList.remove("is-inventory-item-empty"))}else alert(e.msg)}))},decrementInventoryItem:function(e,t){window.vue.ajaxRequest("get",window.location.origin+"/inventory/amount/decrement?id="+e,{},(function(e){if(200==e.code){let n=document.getElementById(t);n&&(n.innerHTML=e.amount,0==e.amount?n.classList.add("is-inventory-item-empty"):n.classList.remove("is-inventory-item-empty"))}else alert(e.msg)}))},editInventoryItem:function(e,t,n,o){document.getElementById("inpInventoryItemId").value=e,document.getElementById("inpInventoryItemName").value=t,document.getElementById("inpInventoryItemGroup").value=n,document.getElementById("inpInventoryItemDescription").value=document.getElementById(o).innerText,window.vue.bShowEditInventoryItem=!0},deleteInventoryItem:function(e,t){confirm(window.vue.confirmInventoryItemRemoval)&&window.vue.ajaxRequest("get",window.location.origin+"/inventory/remove?id="+e,{},(function(e){if(200==e.code){let e=document.getElementById(t);e&&e.remove()}else alert(e.msg)}))},editInventoryGroupItem:function(e,t,n){let o=prompt(t,n);o.length>0&&window.vue.ajaxRequest("post",window.location.origin+"/inventory/group/edit",{id:e,what:t,value:o},(function(n){200==n.code?"token"===t?document.getElementById("inventory-group-elem-token-"+e).innerText=o:"label"===t&&(document.getElementById("inventory-group-elem-label-"+e).innerText=o):alert(n.msg)}))},removeInventoryGroupItem:function(e,t){confirm(window.vue.confirmInventoryItemRemoval)&&window.vue.ajaxRequest("get",window.location.origin+"/inventory/group/remove?id="+e,{},(function(e){if(200==e.code){let e=document.getElementById(t);e&&e.remove()}else alert(e.msg)}))},refreshChat:function(e){window.vue.ajaxRequest("get",window.location.origin+"/chat/query",{},(function(t){200==t.code&&t.messages.forEach((function(t,n){document.getElementById("chat").innerHTML=window.vue.renderNewChatMessage(t,e)+document.getElementById("chat").innerHTML;let o=new Audio(window.location.origin+"/snd/new_message.wav");o.onloadeddata=function(){o.play()}}))})),setTimeout(window.vue.refreshChat,window.constChatMessageQueryRefreshRate)},renderNewChatMessage:function(e,t){let n="";return e.userId==t&&(n="chat-message-right"),'\n \n
\n
'+e.userName+'
\n
'+window.vue.newChatMessage+'
\n
\n\n
\n\n
\n '+e.diffForHumans+"\n
\n
\n "},refreshUserList:function(){window.vue.ajaxRequest("get",window.location.origin+"/user/online",{},(function(e){if(200==e.code){let t=document.getElementById("chat-user-list");t.innerHTML=window.vue.currentlyOnline,e.users.forEach((function(n,o){let i="";o3&&(window.vue.chatTypingCounter=1)}setTimeout(window.vue.animateChatTypingIndicator,350)},removePreviousChatIndicatorCircleStyle:function(){let e=window.vue.chatTypingCounter-1;0==e&&(e=3);let t=document.getElementById("chat-typing-circle-"+e.toString());t.classList.contains("fa-lg")&&(t.classList.remove("fa-lg"),t.style.color="inherit")},textFilterElements:function(e){let t=document.getElementsByClassName("plant-card-title");for(let n=0;n